From 2ba06c74ebfc0ebab6ee2d5dedf88a95a79abd37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Perdomo?= Date: Thu, 7 Nov 2024 10:21:55 +0100 Subject: [PATCH] IM-471 Remove `klab.component.alignment` The only project that can't be upgraded to Java 17+ easily --- .../klab.component.alignment/.classpath | 34 - components/klab.component.alignment/.project | 23 - .../org.eclipse.core.resources.prefs | 6 - .../.settings/org.eclipse.jdt.core.prefs | 11 - .../.settings/org.eclipse.m2e.core.prefs | 4 - .../biodev/__MACOSX/._envo-sweet.rdf | Bin 474 -> 0 bytes .../biodev/__MACOSX/._flopo-pto.rdf | Bin 474 -> 0 bytes .../biodev/envo-sweet.rdf | 5343 - .../klab.component.alignment/biodev/envo.owl | 133864 ---- .../biodev/flopo-pto.rdf | 1975 - .../klab.component.alignment/biodev/flopo.owl | 566533 --------------- .../klab.component.alignment/biodev/pto.owl | 35504 - .../klab.component.alignment/biodev/sweet.owl | 73072 -- .../klab.component.alignment/parameters.txt | 121 - components/klab.component.alignment/pom.xml | 170 - .../alignment/main/UsingLogMapMatcher.java | 73 - .../main/UsingLogMapRepairFacility.java | 140 - .../java/org/ictclas4j/segment/SegTag2.java | 246 - .../aligment/AlignmentComponent.java | 86 - .../elk/owlapi/ElkReasonerAdapted.java | 51 - .../src/main/java/stub.txt | 0 .../syntactic_locality/ModuleExtractor.java | 757 - .../ModuleExtractorManager.java | 300 - .../OntologyModuleExtractor.java | 717 - .../SyntacticLocalityChecker.java | 1675 - .../utils/ExtractorConstants.java | 24 - .../syntactic_locality/utils/ReadFile.java | 67 - .../krr/logmap2/AddConfidence2Mappings.java | 592 - .../uk/ac/ox/krr/logmap2/LogMap2Core.java | 2560 - .../ox/krr/logmap2/LogMap2_CommandLine.java | 169 - .../uk/ac/ox/krr/logmap2/LogMap2_Matcher.java | 688 - .../uk/ac/ox/krr/logmap2/LogMap2_OAEI.java | 262 - .../krr/logmap2/LogMap2_OAEI_BioPortal.java | 770 - .../krr/logmap2/LogMap2_RepairFacility.java | 1675 - .../krr/logmap2/LogMap3_RepairFacility.java | 1200 - .../uk/ac/ox/krr/logmap2/LogMap_Full.java | 1015 - .../uk/ac/ox/krr/logmap2/OntologyLoader.java | 386 - .../java/uk/ac/ox/krr/logmap2/Parameters.java | 710 - .../DataPropertyMappingAssessment.java | 261 - .../InstanceMatchingAssessment.java | 251 - .../ObjectPropertyMappingAssessment.java | 365 - .../PropertyMappingAssessment.java | 106 - .../background/CategoryMappingsLoader.java | 114 - .../logmap2/bioportal/BioPortalAccess.java | 14 - .../logmap2/bioportal/BioPortalMapping.java | 156 - .../bioportal/BioPortalOntologyInfo.java | 77 - .../bioportal/CandidateMediatingOntology.java | 88 - .../bioportal/MediatingOntologyExtractor.java | 302 - .../bioportal/RESTBioPortalAccess.java | 945 - .../logmap2/division/AbstractDivision.java | 409 - .../krr/logmap2/division/BasicDivision.java | 252 - .../division/BasicDivisionPredictor.java | 162 - .../division/ConceptEmbeddingDivision.java | 300 - .../ox/krr/logmap2/division/MatchingTask.java | 204 - .../division/OntologyAlignmentDivision.java | 37 - .../division/OverlappingEstimation.java | 79 - .../krr/logmap2/division/QualityMeasures.java | 486 - .../division/WordEmbeddingDivision.java | 310 - ...actStringFromAnnotationAssertionAxiom.java | 305 - .../ox/krr/logmap2/indexing/IndexManager.java | 1823 - .../logmap2/indexing/JointIndexManager.java | 841 - .../ox/krr/logmap2/indexing/LightTarjan.java | 81 - .../logmap2/indexing/OntologyProcessing.java | 4382 - .../indexing/ReasonerBasedIndexManager.java | 160 - .../logmap2/indexing/entities/ClassIndex.java | 545 - .../indexing/entities/DataPropertyIndex.java | 43 - .../indexing/entities/EntityIndex.java | 147 - .../indexing/entities/IndividualIndex.java | 158 - .../entities/ObjectPropertyIndex.java | 54 - .../indexing/entities/PropertyIndex.java | 114 - .../indexing/labelling_schema/Interval.java | 293 - .../IntervalLabelledHierarchy.java | 289 - .../indexing/labelling_schema/Node.java | 281 - .../PostIntervalLabelledHierarchy.java | 91 - .../indexing/labelling_schema/PostNode.java | 88 - .../PreIntervalLabelledHierarchy.java | 91 - .../indexing/labelling_schema/PreNode.java | 89 - .../indexing/labelling_schema/Test.java | 181 - .../labelling_schema/TopologicalSorting.java | 59 - .../interactive/InteractiveProcess.java | 71 - .../InteractiveProcessAmbiguity.java | 1197 - .../interactive/InteractiveProcessOAEI.java | 438 - .../InteractiveProcessThreshold.java | 349 - .../objects/MappingObjectInteractivity.java | 211 - .../uk/ac/ox/krr/logmap2/io/CopyUtils.java | 286 - .../krr/logmap2/io/FlatAlignmentFormat.java | 136 - .../io/FlatFormat2OAEIRDFAlignment.java | 32 - .../logmap2/io/FlatTSVAlignmentFormat.java | 83 - .../uk/ac/ox/krr/logmap2/io/LogOutput.java | 90 - .../krr/logmap2/io/OAEIAlignmentOutput.java | 158 - .../logmap2/io/OAEIRDFAlignmentFormat.java | 143 - .../ox/krr/logmap2/io/OWL2RDFAlignment.java | 464 - .../ox/krr/logmap2/io/OWLAlignmentFormat.java | 342 - .../ox/krr/logmap2/io/OutPutFilesManager.java | 117 - .../logmap2/io/OutPutFilesManagerStatic.java | 112 - .../krr/logmap2/io/OutputMappingsFormat.java | 65 - .../uk/ac/ox/krr/logmap2/io/ReadFile.java | 122 - .../uk/ac/ox/krr/logmap2/io/WriteFile.java | 138 - .../ox/krr/logmap2/lexicon/Lex_norm_LRNOM.gz | Bin 190109 -> 0 bytes .../krr/logmap2/lexicon/Lex_plurals_LRAGR.gz | Bin 1436787 -> 0 bytes .../krr/logmap2/lexicon/Lex_spelling_LRSPL.gz | Bin 1255818 -> 0 bytes .../krr/logmap2/lexicon/LexicalUtilities.java | 422 - .../lexicon/LexicalUtilitiesStatic.java | 424 - .../ox/krr/logmap2/lexicon/NormalizeDate.java | 140 - .../krr/logmap2/lexicon/NormalizeNumbers.java | 153 - .../logmap2/lexicon/stemming/FileStemmer.java | 49 - .../stemming/IteratedLovinsStemmer.java | 71 - .../stemming/LovinsIterStemmerBridge.java | 42 - .../lexicon/stemming/LovinsStemmer.java | 918 - .../lexicon/stemming/LovinsStemmerBridge.java | 40 - .../lexicon/stemming/PaiceStemmer.java | 456 - .../lexicon/stemming/PaiceStemmerBridge.java | 56 - .../lexicon/stemming/PorterStemmer.java | 637 - .../lexicon/stemming/PorterStemmerBridge.java | 42 - .../krr/logmap2/lexicon/stemming/Stemmer.java | 30 - .../lexicon/stemming/StemmerManager.java | 64 - .../lexicon/stemming/StemmerTester.java | 101 - .../lexicon/stemming/StemmingLauncher.java | 63 - .../lexicon/stemming/StemmingMapLoader.java | 55 - .../logmap2/lexicon/stemming/stemrules.txt | 116 - .../ac/ox/krr/logmap2/lexicon/stopwords.txt | 779 - .../mappings/CandidateMappingManager.java | 3229 - .../uk/ac/ox/krr/logmap2/mappings/I_Sub.java | 245 - .../krr/logmap2/mappings/MappingManager.java | 3066 - .../krr/logmap2/mappings/WeakCandidate.java | 184 - .../mappings/objects/MappingObject.java | 88 - .../objects/MappingObjectIdentifiers.java | 53 - .../mappings/objects/MappingObjectStr.java | 213 - .../multilingual/GoogleBasedTranslator.java | 173 - .../MicrosoftBasedTranslator.java | 162 - .../krr/logmap2/multilingual/Translator.java | 434 - .../multilingual/TranslatorManager.java | 150 - .../ox/krr/logmap2/oaei/FromRDFAlign2OWL.java | 503 - .../krr/logmap2/oaei/LogMapMatcherBridge.java | 108 - .../ac/ox/krr/logmap2/oaei/MatcherBridge.java | 105 - .../oaei/OAEI2015InstanceProcessing.java | 180 - .../krr/logmap2/oaei/oracle/LocalOracle.java | 120 - .../krr/logmap2/oaei/oracle/OAEIOracle.java | 118 - .../logmap2/oaei/oracle/OracleManager.java | 109 - .../ox/krr/logmap2/oaei/oracle/Oraculo.java | 12 - .../krr/logmap2/oaei/reader/EmptyReader.java | 23 - .../oaei/reader/FlatAlignmentReader.java | 161 - .../logmap2/oaei/reader/MappingsReader.java | 52 - .../oaei/reader/MappingsReaderManager.java | 77 - .../oaei/reader/OWLAlignmentReader.java | 337 - .../oaei/reader/OWLMappingAxiomVisitor.java | 226 - .../logmap2/oaei/reader/RDFAlignReader.java | 193 - .../LexicalOverlappingExtractor.java | 453 - .../overlapping/NoOverlappingExtractor.java | 92 - .../OntologyProcessing4Overlapping.java | 639 - .../overlapping/OverlappingExtractor.java | 115 - .../OverlappingExtractor4Mappings.java | 174 - .../owlapi/SynchronizedOWLManager.java | 68 - .../reasoning/DisjointnessAxiomExtractor.java | 127 - .../ox/krr/logmap2/reasoning/ELKAccess.java | 59 - .../krr/logmap2/reasoning/HermiTAccess.java | 68 - .../krr/logmap2/reasoning/HermiT_adapted.java | 70 - .../krr/logmap2/reasoning/ReasonerAccess.java | 99 - .../logmap2/reasoning/ReasonerAccessImpl.java | 726 - .../logmap2/reasoning/ReasonerManager.java | 133 - .../reasoning/SatisfiabilityIntegration.java | 537 - .../reasoning/StructuralReasoner2.java | 1420 - .../reasoning/StructuralReasonerExtended.java | 129 - .../BlackBoxExplanationExtractor.java | 155 - .../ExplanationProgressManager.java | 182 - .../reasoning/explanation/PlanExtractor.java | 562 - .../reasoning/profiles/CheckOWL2Profile.java | 131 - .../krr/logmap2/repair/AnchorAssessment.java | 1452 - .../AnchorsAssessmentFullReasoning.java | 895 - .../ox/krr/logmap2/repair/RepairmentPlan.java | 81 - .../repair/RepairmentPlanComparator.java | 52 - .../repair/hornSAT/DowlingGallierHornSAT.java | 1010 - .../logmap2/repair/hornSAT/HornClause.java | 331 - .../ox/krr/logmap2/repair/hornSAT/Link.java | 85 - .../logmap2/statistics/StatisticsManager.java | 355 - .../statistics/StatisticsTimeMappings.java | 216 - .../krr/logmap2/utilities/ELAxiomVisitor.java | 229 - .../uk/ac/ox/krr/logmap2/utilities/Lib.java | 68 - .../uk/ac/ox/krr/logmap2/utilities/Pair.java | 84 - .../utilities/PrecomputeIndexCombination.java | 189 - .../PrecomputeIndexCombinationStatic.java | 190 - .../uk/ac/ox/krr/logmap2/utilities/Timer.java | 64 - .../ox/krr/logmap2/utilities/Utilities.java | 619 - .../uk/ac/ox/krr/logmap_lite/LogMap_Lite.java | 1032 - .../ox/krr/logmap_lite/MappingObjectStr.java | 114 - .../ac/ox/krr/logmap_lite/OntologyLoader.java | 181 - .../krr/logmap_lite/OntologyProcessing.java | 1179 - .../PrecomputeIndexCombination.java | 164 - .../PrecomputeIndexCombinationStatic.java | 157 - .../logmap_lite/io/OAEIAlignmentOutput.java | 152 - .../logmap_lite/io/OWLAlignmentFormat.java | 263 - .../logmap_lite/io/OutputMappingsFormat.java | 59 - .../logmap_lite/io/RDFAlignmentFormat.java | 142 - .../uk/ac/ox/krr/logmap_lite/io/ReadFile.java | 100 - .../ac/ox/krr/logmap_lite/io/WriteFile.java | 95 - .../uk/ac/ox/krr/logmap_lite/stopwords.txt | 774 - .../src/main/resources/stub.txt | 0 .../src/test/java/stub.txt | 0 .../src/test/resources/stub.txt | 0 199 files changed, 881660 deletions(-) delete mode 100644 components/klab.component.alignment/.classpath delete mode 100644 components/klab.component.alignment/.project delete mode 100644 components/klab.component.alignment/.settings/org.eclipse.core.resources.prefs delete mode 100644 components/klab.component.alignment/.settings/org.eclipse.jdt.core.prefs delete mode 100644 components/klab.component.alignment/.settings/org.eclipse.m2e.core.prefs delete mode 100644 components/klab.component.alignment/biodev/__MACOSX/._envo-sweet.rdf delete mode 100644 components/klab.component.alignment/biodev/__MACOSX/._flopo-pto.rdf delete mode 100644 components/klab.component.alignment/biodev/envo-sweet.rdf delete mode 100644 components/klab.component.alignment/biodev/envo.owl delete mode 100644 components/klab.component.alignment/biodev/flopo-pto.rdf delete mode 100644 components/klab.component.alignment/biodev/flopo.owl delete mode 100644 components/klab.component.alignment/biodev/pto.owl delete mode 100644 components/klab.component.alignment/biodev/sweet.owl delete mode 100644 components/klab.component.alignment/parameters.txt delete mode 100644 components/klab.component.alignment/pom.xml delete mode 100644 components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapMatcher.java delete mode 100644 components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapRepairFacility.java delete mode 100644 components/klab.component.alignment/src/main/java/org/ictclas4j/segment/SegTag2.java delete mode 100644 components/klab.component.alignment/src/main/java/org/integratedmodelling/aligment/AlignmentComponent.java delete mode 100644 components/klab.component.alignment/src/main/java/org/semanticweb/elk/owlapi/ElkReasonerAdapted.java delete mode 100644 components/klab.component.alignment/src/main/java/stub.txt delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractorManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/OntologyModuleExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/SyntacticLocalityChecker.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ExtractorConstants.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ReadFile.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/AddConfidence2Mappings.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2Core.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_CommandLine.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_Matcher.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_OAEI.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_OAEI_BioPortal.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_RepairFacility.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap3_RepairFacility.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap_Full.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/OntologyLoader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/Parameters.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/DataPropertyMappingAssessment.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/InstanceMatchingAssessment.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/ObjectPropertyMappingAssessment.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/PropertyMappingAssessment.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/background/CategoryMappingsLoader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalAccess.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalMapping.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalOntologyInfo.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/CandidateMediatingOntology.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/MediatingOntologyExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/RESTBioPortalAccess.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/AbstractDivision.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/BasicDivision.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/BasicDivisionPredictor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/ConceptEmbeddingDivision.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/MatchingTask.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OntologyAlignmentDivision.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OverlappingEstimation.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/QualityMeasures.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/WordEmbeddingDivision.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ExtractStringFromAnnotationAssertionAxiom.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/IndexManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/JointIndexManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/LightTarjan.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/OntologyProcessing.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ReasonerBasedIndexManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ClassIndex.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/DataPropertyIndex.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/EntityIndex.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/IndividualIndex.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ObjectPropertyIndex.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/PropertyIndex.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Interval.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/IntervalLabelledHierarchy.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Node.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostIntervalLabelledHierarchy.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostNode.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreIntervalLabelledHierarchy.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreNode.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Test.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/TopologicalSorting.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcess.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessAmbiguity.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessOAEI.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessThreshold.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/objects/MappingObjectInteractivity.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/CopyUtils.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatAlignmentFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatFormat2OAEIRDFAlignment.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatTSVAlignmentFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/LogOutput.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIAlignmentOutput.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIRDFAlignmentFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWL2RDFAlignment.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWLAlignmentFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OutPutFilesManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OutPutFilesManagerStatic.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OutputMappingsFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/ReadFile.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/WriteFile.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/Lex_norm_LRNOM.gz delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/Lex_plurals_LRAGR.gz delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/Lex_spelling_LRSPL.gz delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilities.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilitiesStatic.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeDate.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeNumbers.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/FileStemmer.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/IteratedLovinsStemmer.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsIterStemmerBridge.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmer.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmerBridge.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmer.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmerBridge.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmer.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmerBridge.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/Stemmer.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerTester.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmingLauncher.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmingMapLoader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/stemrules.txt delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stopwords.txt delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/CandidateMappingManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/I_Sub.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/MappingManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/WeakCandidate.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObject.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectIdentifiers.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectStr.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/GoogleBasedTranslator.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/MicrosoftBasedTranslator.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/Translator.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/TranslatorManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/FromRDFAlign2OWL.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/LogMapMatcherBridge.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/MatcherBridge.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/OAEI2015InstanceProcessing.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/LocalOracle.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/OAEIOracle.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/OracleManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/Oraculo.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/EmptyReader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/FlatAlignmentReader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReaderManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLAlignmentReader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLMappingAxiomVisitor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/RDFAlignReader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/LexicalOverlappingExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/NoOverlappingExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OntologyProcessing4Overlapping.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor4Mappings.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/owlapi/SynchronizedOWLManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/DisjointnessAxiomExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ELKAccess.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiTAccess.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiT_adapted.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccess.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccessImpl.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/SatisfiabilityIntegration.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasoner2.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasonerExtended.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/BlackBoxExplanationExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/ExplanationProgressManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/PlanExtractor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/profiles/CheckOWL2Profile.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorAssessment.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorsAssessmentFullReasoning.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlan.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlanComparator.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/DowlingGallierHornSAT.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/HornClause.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/Link.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/statistics/StatisticsManager.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/statistics/StatisticsTimeMappings.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/ELAxiomVisitor.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Lib.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Pair.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombination.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombinationStatic.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Timer.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Utilities.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/LogMap_Lite.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/MappingObjectStr.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyLoader.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyProcessing.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombination.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombinationStatic.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OAEIAlignmentOutput.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OWLAlignmentFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OutputMappingsFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/RDFAlignmentFormat.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/ReadFile.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/WriteFile.java delete mode 100644 components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/stopwords.txt delete mode 100644 components/klab.component.alignment/src/main/resources/stub.txt delete mode 100644 components/klab.component.alignment/src/test/java/stub.txt delete mode 100644 components/klab.component.alignment/src/test/resources/stub.txt diff --git a/components/klab.component.alignment/.classpath b/components/klab.component.alignment/.classpath deleted file mode 100644 index 7ed96f202a..0000000000 --- a/components/klab.component.alignment/.classpath +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/components/klab.component.alignment/.project b/components/klab.component.alignment/.project deleted file mode 100644 index 15a2d673d7..0000000000 --- a/components/klab.component.alignment/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - klab.component.alignment - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/components/klab.component.alignment/.settings/org.eclipse.core.resources.prefs b/components/klab.component.alignment/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 5f27c8ae0c..0000000000 --- a/components/klab.component.alignment/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/main/java=utf-8 -encoding//src/main/resources=utf-8 -encoding//src/test/java=utf-8 -encoding//src/test/resources=utf-8 -encoding/=utf-8 diff --git a/components/klab.component.alignment/.settings/org.eclipse.jdt.core.prefs b/components/klab.component.alignment/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index d44fef5348..0000000000 --- a/components/klab.component.alignment/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/components/klab.component.alignment/.settings/org.eclipse.m2e.core.prefs b/components/klab.component.alignment/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index 14b697b7bb..0000000000 --- a/components/klab.component.alignment/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/components/klab.component.alignment/biodev/__MACOSX/._envo-sweet.rdf b/components/klab.component.alignment/biodev/__MACOSX/._envo-sweet.rdf deleted file mode 100644 index 6732624d226ff8cf026b845923413a95c9e8b1eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFfgtF(m+1rEg($6qhDk~yP;+TXny!Vlp|OdPp}D1n zNxyezG|1pWtvw~;a diff --git a/components/klab.component.alignment/biodev/__MACOSX/._flopo-pto.rdf b/components/klab.component.alignment/biodev/__MACOSX/._flopo-pto.rdf deleted file mode 100644 index da9ca8ab4f6a0bb38360916c3696afa8b4e247bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFfgtF(m+1rEg($6qhDk~yP;+TXny!Vlp|OdPp}D1n ziO$;2Xpq6Y&86}nI;kKhv$({-U;zh+2egn8LNmZff*C fW&e9oWx9xUW@p%HwpLA+uCIJqnY%yMaIgRXwrY2; diff --git a/components/klab.component.alignment/biodev/envo-sweet.rdf b/components/klab.component.alignment/biodev/envo-sweet.rdf deleted file mode 100644 index 4101b7e540..0000000000 --- a/components/klab.component.alignment/biodev/envo-sweet.rdf +++ /dev/null @@ -1,5343 +0,0 @@ - - - - -yes -0 -?? -http://data.bioontology.org/ontologies/ENVO -http://data.bioontology.org/ontologies/SWEET -http://data.bioontology.org/ontologies/ENVO -http://data.bioontology.org/ontologies/SWEET - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - diff --git a/components/klab.component.alignment/biodev/envo.owl b/components/klab.component.alignment/biodev/envo.owl deleted file mode 100644 index 2228c04929..0000000000 --- a/components/klab.component.alignment/biodev/envo.owl +++ /dev/null @@ -1,133864 +0,0 @@ - - - - ENVO - ENVO is an ontology which represents knowledge about environments,environmental processes, ecosystems, habitats, and related entities. It interoperates with other ontologies in the OBO Foundry and Library. - -New terms or revisions can be requested at https://github.com/EnvironmentOntology/envo/issues/ - - -Please see www.environmentontology.org for more information and citations. - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/bfo_import.owl>))) [Axioms: 92 Logical Axioms: 35] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/chebi_import.owl>))) [Axioms: 2434 Logical Axioms: 1036] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/clo_import.owl>))) [Axioms: 34 Logical Axioms: 8] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/fao_import.owl>))) [Axioms: 4 Logical Axioms: 0] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/flopo_import.owl>))) [Axioms: 1536 Logical Axioms: 352] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/foodon_import.owl>))) [Axioms: 63 Logical Axioms: 7] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/go_import.owl>))) [Axioms: 270 Logical Axioms: 76] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/ncbitaxon_import.owl>))) [Axioms: 542 Logical Axioms: 123] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/obi_import.owl>))) [Axioms: 50 Logical Axioms: 12] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/omp_import.owl>))) [Axioms: 47 Logical Axioms: 11] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/pato_import.owl>))) [Axioms: 1362 Logical Axioms: 337] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/pco_import.owl>))) [Axioms: 21 Logical Axioms: 3] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/po_import.owl>))) [Axioms: 151 Logical Axioms: 18] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/ro_import.owl>))) [Axioms: 1192 Logical Axioms: 302] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/imports/uberon_import.owl>))) [Axioms: 24081 Logical Axioms: 4670] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/modules/entity_attribute.owl>))) [Axioms: 79 Logical Axioms: 12] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/modules/entity_attribute_location.owl>))) [Axioms: 131 Logical Axioms: 22] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/modules/entity_quality_location.owl>))) [Axioms: 45 Logical Axioms: 6] - Includes Ontology(OntologyID(OntologyIRI(<http://purl.obolibrary.org/obo/envo/modules/process_attribute.owl>))) [Axioms: 21 Logical Axioms: 2] - - - - - - - - - - - - - - - - - - - - editor preferred term~editor preferred label - - - - - - - - example of usage - - - - - - - - has curation status - - - - - - - - definition - - - - - - - - editor note - - - - - - - - term editor - - - - - - - - alternative term - - - - - - - - definition source - - - - - - - - curator note - - - - - - - - imported from - - - - - - - - expand expression to - - - - - - - - expand assertion to - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - term replaced by - - - - - - - - temporal interpretation - An assertion that holds between an OWL Object Property and a temporal interpretation that elucidates how OWL Class Axioms that use this property are to be interpreted in a temporal context. - - - - - - - - - - - - - - is a defining property chain axiom - If R <- P o Q is a defining property chain axiom, then it also holds that R -> P o Q. Note that this cannot be expressed directly in OWL - - - - - - - - is a defining property chain axiom where second argument is reflexive - If R <- P o Q is a defining property chain axiom, then (1) R -> P o Q holds and (2) Q is either reflexive or locally reflexive. A corollary of this is that P SubPropertyOf R. - - - - - - - - EnvO-Lite-GSC - - - - - - - - - plurals - - - - - - - - - disconnected_from - A is disconnected_from B if they have no parts in common. - Class: <http://www.w3.org/2002/07/owl#Nothing> EquivalentTo: (BFO_0000050 some ?X) and (BFO_0000050 some ?Y) - ENVO - disconnected_from - non_overlapping_with - true - true - - - A is disconnected_from B if they have no parts in common. - SO:cjm - - - - - - - - - - Disposition slim - - - - - - - - - environmental_hazards - - - - - - - - - Pathology slim - - - - - - - - - Relational slim: types of quality that require an additional entity in order to exist - - - - - - - - - ro-eco - - - - - - - - - Scalar slim - - - - - - - - - Value slim - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - subset_property - - - - - - - - synonym_type_property - - - - - - - - - - - - - - consider - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - has_alternative_id - - - - - - - - has_broad_synonym - - - - - - - - database_cross_reference - - - - - - - - has_exact_synonym - - - - - - - - has_narrow_synonym - - - - - - - - has_obo_format_version - - - - - - - - has_obo_namespace - - - - - - - - has_related_synonym - - - - - - - - - - - - - - has_synonym_type - - - - - - - - - - - - - - in_subset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - shorthand - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - part of - Everything is part of itself. Any part of any part of a thing is itself part of that thing. Two distinct things cannot be part of each other. - http://www.obofoundry.org/ro/#OBO_REL:part_of - Occurrents are not subject to change and so parthood between occurrents holds for all the times that the part exists. Many continuants are subject to change, so parthood between continuants will only hold at certain times, but this is difficult to specify in OWL. See https://code.google.com/p/obo-relations/wiki/ROAndTime - Parthood requires the part and the whole to have compatible classes: only an occurrent can be part of an occurrent; only a process can be part of a process; only a continuant can be part of a continuant; only an independent continuant can be part of an independent continuant; only an immaterial entity can be part of an immaterial entity; only a specifically dependent continuant can be part of a specifically dependent continuant; only a generically dependent continuant can be part of a generically dependent continuant. (This list is not exhaustive.) - -A continuant cannot be part of an occurrent: use 'participates in'. An occurrent cannot be part of a continuant: use 'has participant'. A material entity cannot be part of an immaterial entity: use 'has location'. A specifically dependent continuant cannot be part of an independent continuant: use 'inheres in'. An independent continuant cannot be part of a specifically dependent continuant: use 'bearer of'. - a core relation that holds between a part and its whole - is part of - my brain is part of my body (continuant parthood, two material entities) - my stomach cavity is part of my stomach (continuant parthood, immaterial entity is part of material entity) - part_of - this day is part of this year (occurrent parthood) - - - - - - - - - - - - - - has part - Everything has itself as a part. Any part of any part of a thing is itself part of that thing. Two distinct things cannot have each other as a part. - Occurrents are not subject to change and so parthood between occurrents holds for all the times that the part exists. Many continuants are subject to change, so parthood between continuants will only hold at certain times, but this is difficult to specify in OWL. See https://code.google.com/p/obo-relations/wiki/ROAndTime - Parthood requires the part and the whole to have compatible classes: only an occurrent have an occurrent as part; only a process can have a process as part; only a continuant can have a continuant as part; only an independent continuant can have an independent continuant as part; only a specifically dependent continuant can have a specifically dependent continuant as part; only a generically dependent continuant can have a generically dependent continuant as part. (This list is not exhaustive.) - -A continuant cannot have an occurrent as part: use 'participates in'. An occurrent cannot have a continuant as part: use 'has participant'. An immaterial entity cannot have a material entity as part: use 'location of'. An independent continuant cannot have a specifically dependent continuant as part: use 'bearer of'. A specifically dependent continuant cannot have an independent continuant as part: use 'inheres in'. - a core relation that holds between a whole and its part - has part - has_part - my body has part my brain (continuant parthood, two material entities) - my stomach has part my stomach cavity (continuant parthood, material entity has part immaterial entity) - this year has part this day (occurrent parthood) - - - - - - - - - - realized in - Paraphrase of elucidation: a relation between a realizable entity and a process, where there is some material entity that is bearer of the realizable entity and participates in the process, and the realizable entity comes to be realized in the course of the process - [copied from inverse property 'realizes'] to say that b realizes c at t is to assert that there is some material entity d & b is a process which has participant d at t & c is a disposition or role of which d is bearer_of at t& the type instantiated by b is correlated with the type instantiated by c. (axiom label in BFO2 Reference: [059-003]) - is realized by - realized in - realized_in - this disease is realized in this disease course - this fragility is realized in this shattering - this investigator role is realized in this investigation - - - - - - - - - - - - realizes - Paraphrase of elucidation: a relation between a process and a realizable entity, where there is some material entity that is bearer of the realizable entity and participates in the process, and the realizable entity comes to be realized in the course of the process - realizes - this disease course realizes this disease - this investigation realizes this investigator role - this shattering realizes this fragility - to say that b realizes c at t is to assert that there is some material entity d & b is a process which has participant d at t & c is a disposition or role of which d is bearer_of at t& the type instantiated by b is correlated with the type instantiated by c. (axiom label in BFO2 Reference: [059-003]) - - - - - - - - - - - - preceded by - An example is: translation preceded_by transcription; aging preceded_by development (not however death preceded_by aging). Where derives_from links classes of continuants, preceded_by links classes of processes. Clearly, however, these two relations are not independent of each other. Thus if cells of type C1 derive_from cells of type C, then any cell division involving an instance of C1 in a given lineage is preceded_by cellular processes involving an instance of C. The assertion P preceded_by P1 tells us something about Ps in general: that is, it tells us something about what happened earlier, given what we know about what happened later. Thus it does not provide information pointing in the opposite direction, concerning instances of P1 in general; that is, that each is such as to be succeeded by some instance of P. Note that an assertion to the effect that P preceded_by P1 is rather weak; it tells us little about the relations between the underlying instances in virtue of which the preceded_by relation obtains. Typically we will be interested in stronger relations, for example in the relation immediately_preceded_by, or in relations which combine preceded_by with a condition to the effect that the corresponding instances of P and P1 share participants, or that their participants are connected by relations of derivation, or (as a first step along the road to a treatment of causality) that the one process in some way affects (for example, initiates or regulates) the other. - http://www.obofoundry.org/ro/#OBO_REL:preceded_by - is preceded by - preceded by - preceded_by - x is preceded by y if and only if the time point at which y ends is before or equivalent to the time point at which x starts. Formally: x preceded by y iff ω(y) <= α(x), where α is a function that maps a process to a start point, and ω is a function that maps a process to an end point. - - - - - - - - - - - - - - - - - - - - - - - - - - precedes - precedes - x precedes y if and only if the time point at which x ends is before or equivalent to the time point at which y starts. Formally: x precedes y iff ω(x) <= α(y), where α is a function that maps a process to a start point, and ω is a function that maps a process to an end point. - - - - - - - - - - - - - - - - - - - - occurs in - Paraphrase of definition: a relation between a process and an independent continuant, in which the process takes place entirely within the independent continuant - b occurs_in c =def b is a process and c is a material entity or immaterial entity& there exists a spatiotemporal region r and b occupies_spatiotemporal_region r.& forall(t) if b exists_at t then c exists_at t & there exist spatial regions s and s’ where & b spatially_projects_onto s at t& c is occupies_spatial_region s’ at t& s is a proper_continuant_part_of s’ at t - occurs in - occurs_in - unfolds in - unfolds_in - - - - - - - - - - - - - - - - - - - - contains process - Paraphrase of definition: a relation between an independent continuant and a process, in which the process takes place entirely within the independent continuant - [copied from inverse property 'occurs in'] b occurs_in c =def b is a process and c is a material entity or immaterial entity& there exists a spatiotemporal region r and b occupies_spatiotemporal_region r.& forall(t) if b exists_at t then c exists_at t & there exist spatial regions s and s’ where & b spatially_projects_onto s at t& c is occupies_spatial_region s’ at t& s is a proper_continuant_part_of s’ at t - site of - - - - - - - - - partially_surrounded_by - x partially_surrounded_by y if and only if (1) x is adjacent to y and for the region r that is adjacent to x, r partially overlaps y (2) the shared boundary between x and y occupies a non-trivial proportion of the outermost boundary of x - Definition modified from 'surrounded by'. - A duck swimming in a pond is partially surrounded by air and partially surrounded by water. - - - - - - - - results in transformation into - - - - - - - - results in expansion of - Afforestation results in the expansion of a forest. - A process, p, results in the expansion of a material entity, m, if the spatial extent of m is increased as a result of participating in p. - - - - - - - - results in proliferation of - To be ceded to RO - - - - - - - - determined by - - - - - - - - - determined by part of - - - - - - - - - - - - inheres in - A dependent inheres in its bearer at all times for which the dependent exists. - a relation between a specifically dependent continuant (the dependent) and an independent continuant (the bearer), in which the dependent specifically depends on the bearer for its existence - inheres in - inheres_in - this fragility inheres in this vase - this red color inheres in this apple - - - - - - - - - - - bearer of - A bearer can have many dependents, and its dependents can exist for different periods of time, but none of its dependents can exist when the bearer does not exist. - a relation between an independent continuant (the bearer) and a specifically dependent continuant (the dependent), in which the dependent specifically depends on the bearer for its existence - bearer of - bearer_of - is bearer of - this apple is bearer of this red color - this vase is bearer of this fragility - - - - - - - - - - participates in - a relation between a continuant and a process, in which the continuant is somehow involved in the process - participates in - participates_in - this blood clot participates in this blood coagulation - this input material (or this output material) participates in this process - this investigator participates in this investigation - - - - - - - - - - - has participant - Has_participant is a primitive instance-level relation between a process, a continuant, and a time at which the continuant participates in some way in the process. The relation obtains, for example, when this particular process of oxygen exchange across this particular alveolar membrane has_participant this particular sample of hemoglobin at this particular time. - a relation between a process and a continuant, in which the continuant is somehow involved in the process - has participant - http://www.obofoundry.org/ro/#OBO_REL:has_participant - has_participant - this blood coagulation has participant this blood clot - this investigation has participant this investigator - this process has participant this input material (or this output material) - - - - - - - - - - - - - - - - - - - function of - A function inheres in its bearer at all times for which the function exists, however the function need not be realized at all the times that the function exists. - a relation between a function and an independent continuant (the bearer), in which the function specifically depends on the bearer for its existence - function_of - is function of - this catalysis function is a function of this enzyme - - - - - - - - - - - quality of - A quality inheres in its bearer at all times for which the quality exists. - a relation between a quality and an independent continuant (the bearer), in which the quality specifically depends on the bearer for its existence - is quality of - quality_of - this red color is a quality of this apple - - - - - - - - - - role of - A role inheres in its bearer at all times for which the role exists, however the role need not be realized at all the times that the role exists. - a relation between a role and an independent continuant (the bearer), in which the role specifically depends on the bearer for its existence - is role of - role_of - this investigator role is a role of this person - - - - - - - - - - has function - A bearer can have many functions, and its functions can exist for different periods of time, but none of its functions can exist when the bearer does not exist. A function need not be realized at all the times that the function exists. - a relation between an independent continuant (the bearer) and a function, in which the function specifically depends on the bearer for its existence - has_function - this enzyme has function this catalysis function (more colloquially: this enzyme has this catalysis function) - - - - - - - - - - - has quality - A bearer can have many qualities, and its qualities can exist for different periods of time, but none of its qualities can exist when the bearer does not exist. - a relation between an independent continuant (the bearer) and a quality, in which the quality specifically depends on the bearer for its existence - has_quality - this apple has quality this red color - - - - - - - - - - has role - A bearer can have many roles, and its roles can exist for different periods of time, but none of its roles can exist when the bearer does not exist. A role need not be realized at all the times that the role exists. - a relation between an independent continuant (the bearer) and a role, in which the role specifically depends on the bearer for its existence - has_role - this person has role this investigator role (more colloquially: this person has this role of investigator) - - - - - - - - - - - has disposition - a relation between an independent continuant (the bearer) and a disposition, in which the disposition specifically depends on the bearer for its existence - - - - - - - - - - - - disposition of - - - - - - - - - derives from - This is a very general relation. More specific relations are preferred when applicable, such as 'directly develops from'. - This relation is taken from the RO2005 version of RO. It may be obsoleted and replaced by relations with different definitions. See also the 'develops from' family of relations. - a relation between two distinct material entities, the new entity and the old entity, in which the new entity begins to exist when the old entity ceases to exist, and the new entity inherits the significant portion of the matter of the old entity - derives_from - this cell derives from this parent cell (cell division) - this nucleus derives from this parent nucleus (nuclear division) - - - - - - - - - - - derives into - This is a very general relation. More specific relations are preferred when applicable, such as 'directly develops into'. To avoid making statements about a future that may not come to pass, it is often better to use the backward-looking 'derives from' rather than the forward-looking 'derives into'. - a relation between two distinct material entities, the old entity and the new entity, in which the new entity begins to exist when the old entity ceases to exist, and the new entity inherits the significant portion of the matter of the old entity - derives_into - this parent cell derives into this cell (cell division) - this parent nucleus derives into this nucleus (nuclear division) - - - - - - - - - - - location of - Most location relations will only hold at certain times, but this is difficult to specify in OWL. See https://code.google.com/p/obo-relations/wiki/ROAndTime - a relation between two independent continuants, the location and the target, in which the target is entirely within the location - is location of - location_of - my head is the location of my brain - this cage is the location of this rat - - - - - - - - - - contained in - Containment is location not involving parthood, and arises only where some immaterial continuant is involved. - Containment obtains in each case between material and immaterial continuants, for instance: lung contained_in thoracic cavity; bladder contained_in pelvic cavity. Hence containment is not a transitive relation. If c part_of c1 at t then we have also, by our definition and by the axioms of mereology applied to spatial regions, c located_in c1 at t. Thus, many examples of instance-level location relations for continuants are in fact cases of instance-level parthood. For material continuants location and parthood coincide. Containment is location not involving parthood, and arises only where some immaterial continuant is involved. To understand this relation, we first define overlap for continuants as follows: c1 overlap c2 at t =def for some c, c part_of c1 at t and c part_of c2 at t. The containment relation on the instance level can then be defined (see definition): - Intended meaning: -domain: material entity -range: spatial region or site (immaterial continuant) - - contained in - contained_in - - - - - - - - - - - - - - - - - contains - contains - - - - - - - - - - - located in - http://www.obofoundry.org/ro/#OBO_REL:located_in - Location as a relation between instances: The primitive instance-level relation c located_in r at t reflects the fact that each continuant is at any given time associated with exactly one spatial region, namely its exact location. Following we can use this relation to define a further instance-level location relation - not between a continuant and the region which it exactly occupies, but rather between one continuant and another. c is located in c1, in this sense, whenever the spatial region occupied by c is part_of the spatial region occupied by c1. Note that this relation comprehends both the relation of exact location between one continuant and another which obtains when r and r1 are identical (for example, when a portion of fluid exactly fills a cavity), as well as those sorts of inexact location relations which obtain, for example, between brain and head or between ovum and uterus - Most location relations will only hold at certain times, but this is difficult to specify in OWL. See https://code.google.com/p/obo-relations/wiki/ROAndTime - a relation between two independent continuants, the target and the location, in which the target is entirely within the location - located in - located_in - my brain is located in my head - this rat is located in this cage - - - - - - - - - bounding layer of - David Osumi-Sutherland - A relationship that applies between a continuant and its outer, bounding layer. Examples include the relationship between a multicellular organism and its integument, between an animal cell and its plasma membrane, and between a membrane bound organelle and its outer/bounding membrane. - X outer_layer_of Y iff: -. X :continuant that bearer_of some PATO:laminar -. X part_of Y -. exists Z :surface -. X has_boundary Z -. Z boundary_of Y - -has_boundary: http://purl.obolibrary.org/obo/RO_0002002 -boundary_of: http://purl.obolibrary.org/obo/RO_0002000 - - - - - - - - - - - - - - - - - - - - - - coincident with - A relation that holds between two linear structures that are approximately parallel to each other for their entire length and where either the two structures are adjacent to each other or one is part of the other. - Example: if we define region of chromosome as any subdivision of a chromosome along its long axis, then we can define a region of chromosome that contains only gene x as 'chromosome region' that coincident_with some 'gene x', where the term gene X corresponds to a genomic sequence. - David Osumi-Sutherland - Note from NCEAS meeting: consider changing primary label - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - during which ends - David Osumi-Sutherland - Previously had ID http://purl.obolibrary.org/obo/RO_0002122 in test files in sandpit - but this seems to have been dropped from ro-edit.owl at some point. No re-use under this ID AFAIK, but leaving note here in case we run in to clashes down the line. Official ID now chosen from DOS ID range. - - - - - - - - - - - - encompasses - Previously had ID http://purl.obolibrary.org/obo/RO_0002124 in test files in sandpit - but this seems to have been dropped from ro-edit.owl at some point. No re-use under this ID AFAIK, but leaving note here in case we run in to clashes down the line. Official ID now chosen from DOS ID range. - di - David Osumi-Sutherland - - - - - - - - - - - ends after - David Osumi-Sutherland - X ends_after Y iff: end(Y) before_or_simultaneous_with end(X) - - - - - - - - - - - - - - immediately preceded by - starts_at_end_of - David Osumi-Sutherland - X immediately_preceded_by Y iff: end(X) simultaneous_with start(Y) - - - - - - - - - - - - - - during which starts - David Osumi-Sutherland - Previously had ID http://purl.obolibrary.org/obo/RO_0002123 in test files in sandpit - but this seems to have been dropped from ro-edit.owl at some point. No re-use under this ID AFAIK, but leaving note here in case we run in to clashes down the line. Official ID now chosen from DOS ID range. - - - - - - - - - - - immediately precedes - X immediately_precedes_Y iff: end(X) simultaneous_with start(Y) - ends_at_start_of - meets - David Osumi-Sutherland - - - - - - - - - - - - - - - starts during - David Osumi-Sutherland - X starts_during Y iff: (start(Y) before_or_simultaneous_with start(X)) AND (start(X) before_or_simultaneous_with end(Y)) - io - - - - - - - - - - - - - happens during - X happens_during Y iff: (start(Y) before_or_simultaneous_with start(X)) AND (end(X) before_or_simultaneous_with end(Y)) - d - during - David Osumi-Sutherland - - - - - - - - - - ends during - David Osumi-Sutherland - o - overlaps - X ends_during Y iff: ((start(Y) before_or_simultaneous_with end(X)) AND end(X) before_or_simultaneous_with end(Y). - - - - - - - - - - overlaps - http://purl.obolibrary.org/obo/BFO_0000051 some (http://purl.obolibrary.org/obo/BFO_0000050 some ?Y) - x overlaps y if and only if there exists some z such that x has part z and z part of y - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - continuous with - X continuous_with Y if and only if X and Y share a fiat boundary. - connected to - The label for this relation was previously connected to. I relabeled this to "continuous with". The standard notion of connectedness does not imply shared boundaries - e.g. Glasgow connected_to Edinburgh via M8; my patella connected_to my femur (via patellar-femoral joint) - FMA:85972 - David Osumi-Sutherland - - - - - - - - RO:cjm - The label for this relation was previously connected to. I relabeled this to "continuous with". The standard notion of connectedness does not imply shared boundaries - e.g. Glasgow connected_to Edinburgh via M8; my patella connected_to my femur (via patellar-femoral joint) - - - - - - - - - - partially overlaps - (forall (?x ?y) - (iff - (proper_overlaps ?x ?y) - (and - (overlaps ?x ?y) - (not (part_of ?x ?y)) - (not (part_of ?y ?x))))) - proper overlaps - x partially overlaps y iff there exists some z such that z is part of x and z is part of y, and it is also the case that neither x is part of y or y is part of x - We would like to include disjointness axioms with part_of and has_part, however this is not possible in OWL2 as these are non-simple properties and hence cannot appear in a disjointness axiom - - - - - - - - - - - - spatially disjoint from - https://github.com/obophenotype/uberon/wiki/Part-disjointness-Design-Pattern - Note that it would be possible to use the relation to label the relationship between a near infinite number of structures - between the rings of saturn and my left earlobe. The intent is that this is used for parsiomoniously for disambiguation purposes - for example, between siblings in a jointly exhaustive pairwise disjointness hierarchy - BFO_0000051 exactly 0 (BFO_0000050 some ?Y) - A is spatially_disjoint_from B if and only if they have no parts in common - Chris Mungall - There are two ways to encode this as a shortcut relation. The other possibility to use an annotation assertion between two classes, and expand this to a disjointness axiom. - - - - - - - - - - - - - connected to - https://github.com/obophenotype/uberon/wiki/Connectivity-Design-Pattern - https://github.com/obophenotype/uberon/wiki/Modeling-articulations-Design-Pattern - a is connected to b if and only if a and b are discrete structure, and there exists some connecting structure c, such that c connects a and b - a 'toe distal phalanx bone' that is connected to a 'toe medial phalanx bone' (an interphalangeal joint *connects* these two bones). - - - - - - - - - - - - - - - - - - - - - - connects - - - - - - - - attached to part of - a is attached to part of b if a is attached to b, or a is attached to some p, where p is part of b. - - - - - - - - - - - true - - - - - - - - - - - - - - drains - Relation between an collecting structure and another structure, where the collecting structure acts as a conduit channeling fluid, substance or energy away from the other structure. - Individual ontologies should provide their own constraints on this abstract relation. For example, in the realm of anatomy this should hold between a vein and an anatomical structure - - - - - - - - - - - develops from - Melissa Haendel - x develops from y if and only if either (a) x directly develops from y or (b) there exists some z such that x directly develops from z and z develops from y - This is the transitive form of the develops from relation - Chris Mungall - David Osumi-Sutherland - Terry Meehan - - - - - - - - - - - - - - develops into - Chris Mungall - David Osumi-Sutherland - Terry Meehan - - - - - - - - - - - - regulates (processual) - - - - - - - - capable of - For compatibility with BFO, this relation has a shortcut definition in which the expression "capable of some P" expands to "bearer_of (some realized_by only P)". - mechanosensory neuron capable of detection of mechanical stimulus involved in sensory perception (GO:0050974) - osteoclast SubClassOf 'capable of' some 'bone resorption' - Chris Mungall - has function realized in - A relation between a material entity (such as a cell) and a process, in which the material entity has the ability to carry out the process. - RO_0000053 some (RO_0000054 only ?Y) - - - - - - - - - - - - - - - capable of part of - RO_0000053 some (RO_0000054 only (BFO_0000050 some ?Y)) - has function in - c stands in this relationship to p if and only if there exists some p' such that c is capable_of p', and p' is part_of p. - Chris Mungall - - - - - - - - - - true - - - - - - - - - - - - - - actively participates in - Chris Mungall - agent in - x actively participates in y if and only if x participates in y and x realizes some active role - - - - - - - - - - - has active participant - 'heart development' has active participant some Shh protein - has agent - Chris Mungall - This may be obsoleted and replaced by the original 'has agent' relation - x has participant y if and only if x realizes some active role that inheres in y - - - - - - - - - - - surrounded by - - - - - - - - adjacent to - x adjacent to y if and only if x and y share a boundary - This relation acts as a join point with BSPO - Chris Mungall - - - - - - - - - - - - - temporally related to - https://docs.google.com/document/d/1kBv1ep_9g3sTR-SD3jqzFqhuwo9TPNF-l-9fUDbO6rM/edit?pli=1 - Chris Mungall - Do not use this relation directly. It is ended as a grouping for relations between occurrents involving the relative timing of their starts and ends. - A relation that holds between two occurrents. This is a grouping relation that collects together all the Allen relations. - - - - - - - - - - - - - starts - Chris Mungall - inverse of starts with - Allen - - - - - - - - - - - - - - starts with - Every insulin receptor signaling pathway starts with the binding of a ligand to the insulin receptor - started by - Chris Mungall - x starts with y if and only if x has part y and the time point at which x starts is equivalent to the time point at which y starts. Formally: α(y) = α(x) ∧ ω(y) < ω(x), where α is a function that maps a process to a start point, and ω is a function that maps a process to an end point. - - - - - - - - - - - - ends - inverse of ends with - Chris Mungall - - - - - - - - - - - - - - ends with - Chris Mungall - finished by - x ends with y if and only if x has part y and the time point at which x ends is equivalent to the time point at which y ends. Formally: α(y) > α(x) ∧ ω(y) = ω(x), where α is a function that maps a process to a start point, and ω is a function that maps a process to an end point. - - - - - - - - - - - - has start location - starts with process that occurs in - Chris Mungall - x 'has starts location' y if and only if there exists some process z such that x 'starts with' z and z 'occurs in' y - - - - - - - - - - - - - - - - - has end location - Chris Mungall - ends with process that occurs in - x 'has end location' y if and only if there exists some process z such that x 'ends with' z and z 'occurs in' y - - - - - - - - - - - - - - - - - has input - p has direct input c iff c is a participant in p, c is present at the start of p, and the state of c is modified during p. - Chris Mungall - consumes - - - - - - - - - - - - - - - - has output - Chris Mungall - p has output c iff c is a participant in p, c is present at the end of p, and c is not present at the beginning of p. - produces - - - - - - - - - - - - - - - - has developmental contribution from - Chris Mungall - Mammalian thymus has developmental contribution from some pharyngeal pouch 3; Mammalian thymus has developmental contribution from some pharyngeal pouch 4 [Kardong] - x has developmental contribution from y iff x has some part z such that z develops from y - - - - - - - - - - - - - - - - - developmentally contributes to - Chris Mungall - - - - - - - - - - - - - - - developmentally preceded by - false - Candidate definition: x developmentally related to y if and only if there exists some developmental process (GO:0032502) p such that x and y both participates in p, and x is the output of p and y is the input of p - Chris Mungall - In general you should not use this relation to make assertions - use one of the more specific relations below this one - This relation groups together various other developmental relations. It is fairly generic, encompassing induction, developmental contribution and direct and transitive develops from - - - - - - - - - - - developmentally succeeded by - Inverse of developmentally preceded by - Chris Mungall - - - - - - - - - - results in developmental progression of - results_in_developmental_progression_of - Chris Mungall - p results in the developmental progression of s iff p is a developmental process and s is an anatomical structure and p causes s to undergo a change in state at some point along its natural developmental cycle (this cycle starts with its formation, through the mature structure, and ends with its loss). - This property and its subproperties are being used primarily for the definition of GO developmental processes. The property hierarchy mirrors the core GO hierarchy. In future we may be able to make do with a more minimal set of properties, but due to the way GO is currently structured we require highly specific relations to avoid incorrect entailments. To avoid this, the corresponding genus terms in GO should be declared mutually disjoint. - - - - - - - - - - - - - results in formation of - results_in_formation_of - an annotation of gene X to anatomical structure formation with results_in_formation_of UBERON:0000007 (pituitary gland) means that at the beginning of the process a pituitary gland does not exist and at the end of the process a pituitary gland exists. - GOC:mtg_berkeley_2013 - Chris Mungall - every "endocardial cushion formation" (GO:0003272) results_in_formation_of some "endocardial cushion" (UBERON:0002062) - - - - - - - - - - - - has habitat - - - - - - - - inheres in part of - q inheres in part of w if and only if there exists some p such that q inheres in p and p part of w. - Chris Mungall - Because part_of is transitive, inheres in is a sub-relation of inheres in part of - - - - - - - - - - - - - - true - - - - - - - - - - - - - - ecologically related to - Chris Mungall - A relationship that is mediated in some way by the environment or environmental feature (ENVO:00002297) - Do not use this relation directly. It is intended as a grouping for a diverse set of relations, all involving ecological interactions - - - - - - - - - mereotopologically related to - A mereological relationship or a topological relationship - Chris Mungall - Do not use this relation directly. It is ended as a grouping for a diverse set of relations, all involving parthood or connectivity relationships - - - - - - - - - developmentally related to - A relationship that holds between entities participating in some developmental process (GO:0032502) - Chris Mungall - Do not use this relation directly. It is ended as a grouping for a diverse set of relations, all involving organismal development - - - - - - - - contributes to - We would like to say - -if and only if - exists c', p' - c part_of c' and c' capable_of p - and - c capable_of p' and p' part_of p -then - c contributes_to p - -However, this is not possible in OWL. We instead make this relation a sub-relation of the two chains, which gives us the inference in the one direction. - ATP citrate lyase (ACL) in Arabidopsis: it is a heterooctamer, composed of two types of subunits, ACLA and ACLB in a A(4)B(4) stoichiometry. Neither of the subunits expressed alone give ACL activity, but co-expression results in ACL activity. Both subunits contribute_to the ATP citrate lyase activity. - Chris Mungall - Subunits of nuclear RNA polymerases: none of the individual subunits have RNA polymerase activity, yet all of these subunits contribute_to DNA-dependent RNA polymerase activity. - In the context of the Gene Ontology, contributes_to may be used only with classes from the molecular function ontology. - http://www.geneontology.org/GO.annotation.conventions.shtml#contributes_to - eIF2: has three subunits (alpha, beta, gamma); one binds GTP; one binds RNA; the whole complex binds the ribosome (all three subunits are required for ribosome binding). So one subunit is annotated to GTP binding and one to RNA binding without qualifiers, and all three stand in the contributes_to relationship to "ribosome binding". And all three are part_of an eIF2 complex - - - - - - - - - - functionally related to - Chris Mungall - This is a grouping relation that collects relations used for the purpose of connecting structure and function - - - - - - - - part of structure that is capable of - false - this relation holds between c and p when c is part of some c', and c' is capable of p. - Chris Mungall - - - - - - - - true - - - - - - - - - - - - - - involved in - actively involved in - c involved_in p if and only if c enables some process p', and p' is part of p - enables part of - Chris Mungall - - - - - - - - - - - - - member of - An organism that is a member of a population of organisms - is member of - SIO - is member of is a mereological relation between a item and a collection. - member part of - - - - - - - - - - - - has member - SIO - has member is a mereological relation between a collection and an item. - - - - - - - - - - input of - Chris Mungall - - - - - - - - - - - output of - Chris Mungall - - - - - - - - - - - formed as result of - Chris Mungall - - - - - - - - - - attached to - a is attached to b if and only if a and b are discrete objects or object parts, and there are physical connections between a and b such that a force pulling a will move b, or a force pulling b will move a - Chris Mungall - - - - - - - - - - - in branching relationship with - https://github.com/obophenotype/uberon/issues/170 - This relation can be used for geographic features (e.g. rivers) as well as anatomical structures (plant branches and roots, leaf veins, animal veins, arteries, nerves) - Chris Mungall - - - - - - - - - - - - - tributary of - This relation can be used for geographic features (e.g. rivers) as well as anatomical structures (veins, arteries) - http://en.wikipedia.org/wiki/Tributary - tributary channel of - Chris Mungall - http://www.medindia.net/glossary/venous_tributary.htm - drains to - drains into - Deschutes River tributary_of Columbia River - inferior epigastric vein tributary_of external iliac vein - x tributary_of y if and only if x a channel for the flow of a substance into y, where y is larger than x. If x and y are hydrographic features, then y is the main stem of a river, or a lake or bay, but not the sea or ocean. If x and y are anatomical, then y is a vein. - http://en.wikipedia.org/wiki/Tributary - - - - - - - drains to - - - - - - FMA - inferior epigastric vein tributary_of external iliac vein - - - - - GAZ - Deschutes River tributary_of Columbia River - - - - - - - - - - distributary of - x distributary_of y if and only if x is capable of channeling the flow of a substance to y, where y channels less of the substance than x - http://en.wikipedia.org/wiki/Distributary - Deschutes River distributary_of Little Lava Lake - branch of - Chris Mungall - distributary channel of - - - - - - GAZ - Deschutes River distributary_of Little Lava Lake - - - - - - - - - - spatially coextensive with - x spatially_coextensive_with y if and inly if x and y have the same location - This relation is added for formal completeness. It is unlikely to be used in many practical scenarios - A lump of clay and a statue - Chris Mungall - - - - - - - - - - - - - - - has developmental potential involving - Chris Mungall - x has developmental potential involving y iff x is capable of a developmental process with output y. y may be the successor of x, or may be a different structure in the vicinity (as for example in the case of developmental induction). - - - - - - - - - - has potential to developmentally contribute to - Chris Mungall - x has potential to developmentrally contribute to y iff x developmentally contributes to y or x is capable of developmentally contributing to y - - - - - - - - - - has potential to develop into - Chris Mungall - x has the potential to develop into y iff x develops into y or if x is capable of developing into y - - - - - - - - - - has potential to directly develop into - Chris Mungall - x has potential to directly develop into y iff x directly develops into y or x is capable of directly developing into y - - - - - - - - - - causally downstream of - inverse of upstream of - Chris Mungall - - - - - - - - - - - - causally related to - This relation groups causal relations between material entities and causal relations between processes - Chris Mungall - Do not use this relation directly. It is intended as a grouping for a diverse set of relations, all involving cause and effect. - This branch of the ontology deals with causal relations between entities. It is divided into two branches: causal relations between occurrents/processes, and causal relations between material entities. We take an 'activity flow-centric approach', with the former as primary, and define causal relations between material entities in terms of causal relations between occurrents. - -To define causal relations in an activity-flow type network, we make use of 3 primitives: - - * Temporal: how do the intervals of the two occurrents relate? - * Is the causal relation regulatory? - * Is the influence positive or negative - -The first of these can be formalized in terms of the Allen Interval Algebra. Informally, the 3 bins we care about are 'direct', 'indirect' or overlapping. Note that all causal relations should be classified under a RO temporal relation (see the branch under 'temporally related to'). Note that all causal relations are temporal, but not all temporal relations are causal. Two occurrents can be related in time without being causally connected. We take causal influence to be primitive, elucidated as being such that has the upstream changed, some qualities of the donwstream would necessarily be modified. - -For the second, we consider a relationship to be regulatory if the system in which the activities occur is capable of altering the relationship to achieve some objective. This could include changing the rate of production of a molecule. - -For the third, we consider the effect of the upstream process on the output(s) of the downstream process. If the level of output is increased, or the rate of production of the output is increased, then the direction is increased. Direction can be positive, negative or neutral or capable of either direction. Two positives in succession yield a positive, two negatives in succession yield a positive, otherwise the default assumption is that the net effect is canceled and the influence is neutral. - -Each of these 3 primitives can be composed to yield a cross-product of different relation types. - - - - - - - - - - - causally upstream of - Chris Mungall - p is causally upstream of q if and only if p precedes q and p and q are linked in a causal chain - - - - - - - - - - - - causally upstream of or within - influences (processual) - Chris Mungall - p 'causally upstream or within' q iff (1) the end of p is before the end of q and (2) the execution of p exerts some causal influence over the outputs of q; i.e. if p was abolished or the outputs of p were to be modified, this would necessarily affect q. - We would like to make this disjoint with 'preceded by', but this is prohibited in OWL2 - - - - - - - - - - - causally downstream of or within - Chris Mungall - - - - - - - - - - involved in or regulates - c involved in or regulates p if and only if either (i) c is involved in p or (ii) c is involved in regulation of p - involved in or involved in regulation of - Chris Mungall - - - - - - - - - - - interacts with - Considering relabeling as 'pairwise interacts with' - http://purl.obolibrary.org/obo/MI_0914 - https://github.com/oborel/obo-relations/wiki/InteractionRelations - Chris Mungall - in pairwise interaction with - This relation and all sub-relations can be applied to either (1) pairs of entities that are interacting at any moment of time (2) populations or species of entity whose members have the disposition to interact (3) classes whose members have the disposition to interact. - A relationship that holds between two entities in which the processes executed by the two entities are causally connected. - Note that this relationship type, and sub-relationship types may be redundant with process terms from other ontologies. For example, the symbiotic relationship hierarchy parallels GO. The relations are provided as a convenient shortcut. Consider using the more expressive processual form to capture your data. In the future, these relations will be linked to their cognate processes through rules. - - - - - - - - - - - - biotically interacts with - http://eol.org/schema/terms/interactsWith - interacts with on organism level - An interaction relationship in which at least one of the partners is an organism and the other is either an organism or an abiotic entity with which the organism interacts. - Chris Mungall - - - - - - - - - - - - - - trophically interacts with - An interaction relationship in which the partners are related via a feeding relationship. - Chris Mungall - - - - - - - - - - - acquires nutrients from - Chris Mungall - Intended to be used when the target of the relation is not itself consumed, and does not have integral parts consumed, but provided nutrients in some other fashion. - - - - - - - - - - - provides nutrients for - Chris Mungall - - - - - - - - - - composed primarily of - 'otolith organ' SubClassOf 'composed primarily of' some 'calcium carbonate' - x composed_primarily_of y if and only if more than half of the mass of x is made from y or units of the same type as y. - Chris Mungall - - - - - - - - - - - - has part that occurs in - Chris Mungall - p has part that occurs in c if and only if there exists some p1, such that p has_part p1, and p1 occurs in c. - - - - - - - - - - true - - - - - - - - - - - - - - causal agent in - A relationship between a material entity and a process where the material entity has some causal role that influences the process - - - - - - - - - - - causal relation between processes - Do not use this relation directly. It is intended as a grouping for a diverse set of relations, all involving cause and effect. - Chris Mungall - p is causally related to q if and only if p or any part of p and q or any part of q are linked by a chain of events where each event pair is one of direct activation or direct inhibition. p may be upstream, downstream, part of or a container of q. - - - - - - - - - - - - depends on - Chris Mungall - - - - - - - - - towards - This relation is provided in order to support the use of relational qualities such as 'concentration of'; for example, the concentration of C in V is a quality that inheres in V, but pertains to C. - Chris Mungall - q towards e2 if and only if q is a relational quality such that q inheres-in some e, and e != e2 and q is dependent on e2 - - - - - - - - - - causal relation between material entities - Do not use this relation directly. It is intended as a grouping for a diverse set of relations, all involving cause and effect. - Chris Mungall - The intent is that the process branch of the causal property hierarchy is primary (causal relations hold between occurrents/processes), and that the material branch is defined in terms of the process branch - - - - - - - - - - - - determined by - A coral reef environment is determined by a particular coral reef - Pier Buttigieg - Chris Mungall - The label for this relation is probably too general for its restricted use, where the domain is a system. It may be relabeled in future - s determined by f if and only if s is a type of system, and f is a material entity that is part of s, such that f exerts a strong causal influence on the functioning of s, and the removal of f would cause the collapse of s. - Chris Mungall - determined by (system to material entity) - - - - - - - - - - - - - - - - determines - determines (material entity to system) - Chris Mungall - - - - - - - - - - determined by part of - s 'determined by part of' w if and only if there exists some f such that (1) s 'determined by' f and (2) f part_of w, or f=w. - Chris Mungall - - - - - - - - - - - - true - - - - - - - - - - - - - - causally influenced by - causally influenced by (material entity to material entity) - Chris Mungall - - - - - - - - - - - causally influences - Holds between materal entities a and b if the activity of a is causally upstream of the activity of b, or causally upstream of a an activity that modifies b - Chris Mungall - causally influences (material entity to material entity) - - - - - - - - - - biomechanically related to - Chris Mungall - Do not use this relation directly. It is ended as a grouping for a diverse set of relations, all involving the biomechanical processes. - A relation that holds between elements of a musculoskeletal system or its analogs. - - - - - - - - - participates in a biotic-biotic interaction with - Chris Mungall - - - - - - - - - - - has part structure that is capable of - Chris Mungall - s 'has part structure that is capable of' p if and only if there exists some part x such that s 'has part' x and x 'capable of' p - gland SubClassOf 'has part structure that is capable of' some 'secretion by cell' - - - - - - - - - - - - - - causal relation between material entity and a process - Chris Mungall - A relationship that holds between a material entity and a process in which causality is involved, with either the material entity or some part of the material entity exerting some influence over the process, or the process influencing some aspect of the material entity. - Do not use this relation directly. It is intended as a grouping for a diverse set of relations, all involving cause and effect. - - - - - - - - - - - - has causal agent - Inverse of 'causal agent in' - - - - - - - - - - related via dependence to - A relationship that holds between two entities, where the relationship holds based on the presence or absence of statistical dependence relationship. The entities may be statistical variables, or they may be other kinds of entities such as diseases, chemical entities or processes. - Do not use this relation directly. It is intended as a grouping for a diverse set of relations, all involving cause and effect. - - - - - - - - produces - Note that this definition doesn't quite distinguish the output of a transformation process from a production process, which is related to the identity/granularity issue. - a produces b if some process that occurs_in a has_output b, where a and b are material entities. Examples: hybridoma cell line produces monoclonal antibody reagent; chondroblast produces avascular GAG-rich matrix. - Melissa Haendel - - - - - - - - - - - - - - - - - - - produced by - a produced_by b iff some process that occurs_in b has_output a. - Melissa Haendel - - - - - - - - - - - - has_condition - 2013-05-08T07:33:05Z - ENVO - Experimental relation used in EnvO. A condition defines a restricted range of a given quality or combination of qualities. If an environment class, E, has_condition C, then all qualities listed in C are restricted to the ranges defined in C in E. This is not intended as a logical conditional. - has_condition - - - - - - - - - - - - - - - - - - - entity - - - - - - - - continuant - - - An entity that exists in full at any time in which it exists at all, persists through time while maintaining its identity and has no temporal parts. - - - - - - - - occurrent - - An entity that has temporal parts and that happens, unfolds or develops through time. - - - - - - - - independent continuant - - - A continuant that is a bearer of quality and realizable entity entities, in which other entities inhere and which itself cannot inhere in anything. - b is an independent continuant = Def. b is a continuant which is such that there is no c and no t such that b s-depends_on c at t. (axiom label in BFO2 Reference: [017-002]) - - - b is an independent continuant = Def. b is a continuant which is such that there is no c and no t such that b s-depends_on c at t. (axiom label in BFO2 Reference: [017-002]) - - - - - - - - - - - spatial region - - - - - - - - - - - temporal region - - - - - - - - - - - - spatiotemporal region - - - - - - - - - process - - An occurrent that has temporal proper parts and for some time t, p s-depends_on some material entity at t. - p is a process = Def. p is an occurrent that has temporal proper parts and for some time t, p s-depends_on some material entity at t. (axiom label in BFO2 Reference: [083-003]) - - - p is a process = Def. p is an occurrent that has temporal proper parts and for some time t, p s-depends_on some material entity at t. (axiom label in BFO2 Reference: [083-003]) - - - - - - - - - - - disposition - - - - - - - - - - realizable entity - - - A specifically dependent continuant that inheres in continuant entities and are not exhibited in full at every time in which it inheres in an entity or group of entities. The exhibition or actualization of a realizable entity is a particular manifestation, functioning or process that occurs under certain circumstances. - - - - - - - - quality - - - - - - - - - specifically dependent continuant - - A continuant that inheres in or is borne by other entities. Every instance of A requires some specific instance of B which must always be the same. - b is a relational specifically dependent continuant = Def. b is a specifically dependent continuant and there are n &gt; 1 independent continuants c1, … cn which are not spatial regions are such that for all 1 i &lt; j n, ci and cj share no common parts, are such that for each 1 i n, b s-depends_on ci at every time t during the course of b’s existence (axiom label in BFO2 Reference: [131-004]) - b is a specifically dependent continuant = Def. b is a continuant & there is some independent continuant c which is not a spatial region and which is such that b s-depends_on c at every time t during the course of b’s existence. (axiom label in BFO2 Reference: [050-003]) - - - b is a specifically dependent continuant = Def. b is a continuant & there is some independent continuant c which is not a spatial region and which is such that b s-depends_on c at every time t during the course of b’s existence. (axiom label in BFO2 Reference: [050-003]) - - - - - - - - - - - role - - A realizable entity the manifestation of which brings about some result or end that is not essential to a continuant in virtue of the kind of thing that it is but that can be served or participated in by that kind of continuant in some kinds of natural, social or institutional contexts. - - - - - - - - fiat object part - - - - - - - - - object aggregate - - - - - - - - - site - - - - - - - - - object - - - - - - - - - generically dependent continuant - - A continuant that is dependent on one or other independent continuant bearers. For every instance of A requires some instance of (an independent continuant type) B but which instance of B serves can change from time to time. - b is a generically dependent continuant = Def. b is a continuant that g-depends_on one or more other entities. (axiom label in BFO2 Reference: [074-001]) - - - - - - - - function - - - - - - - - - process boundary - - p is a process boundary =Def. p is a temporal part of a process & p has no proper temporal parts. (axiom label in BFO2 Reference: [084-001]) - - - p is a process boundary =Def. p is a temporal part of a process & p has no proper temporal parts. (axiom label in BFO2 Reference: [084-001]) - - - - - - - - - - - one-dimensional temporal region - - - - - - - - - material entity - - - An independent continuant that is spatially extended whose identity is independent of that of other entities and can be maintained through time. - - - - - - - - continuant fiat boundary - - b is a continuant fiat boundary = Def. b is an immaterial entity that is of zero, one or two dimensions and does not include a spatial region as part. (axiom label in BFO2 Reference: [029-001]) - - - b is a continuant fiat boundary = Def. b is an immaterial entity that is of zero, one or two dimensions and does not include a spatial region as part. (axiom label in BFO2 Reference: [029-001]) - - - - - - - - - - - immaterial entity - - - - - - - - - one-dimensional continuant fiat boundary - - - - - - - - - - two-dimensional continuant fiat boundary - - - - - - - - - anatomical structure - - - - - - - - - - material anatomical entity - - - - - - - - - - C19-steroid - - - - - - - - - dicarboxylic acids and O-substituted derivatives - - - - - - - - - metal oxide - - - - - - - - - NAD - - - - - - - - - NAD(P)H - - - - - - - - - volatile organic compound - - - - - - - - - pyrrolopurine - - - - - - - - - - electron donor - - - - - - - - - acceptor - - - - - - - - - water - - - - - - - - - - - hydron - - - - - - - - - - - - dioxygen - - - - - - - - - - ATP - - - - - - - - - - sarcosine - - - - - - - - - - primary alcohol - - - - - - - - - halide anion - - - - - - - - - - ammonia - - - - - - - - - - hydrogen sulfide - - - - - - - - - - - methane - - - - - - - - - - - sulfate - - - - - - - - - - - urea - - - - - - - - - - hydroxide - - - - - - - - - ethanol - - - - - - - - - - nitrite - - - - - - - - - - - pantothenate - - - - - - - - - NADPH - - - - - - - - - - naphthalene - - - - - - - - - - carbon dioxide - - - - - - - - - - carbohydrate - - - - - - - - - peptide - - - - - - - - - - nucleoside 5'-phosphate - - - - - - - - - chlorophyllide a - - - - - - - - - - - NADH - - - - - - - - - - dinitrogen oxide - - - - - - - - - fluoride - - - - - - - - - - ketone - - - - - - - - - nucleoside 5'-monophosphate - - - - - - - - - carbon monoxide - - - - - - - - - - nucleoside triphosphate - - - - - - - - - testosterone - - - - - - - - - - - - hydrogencarbonate - - - - - - - - - nitrate - - - - - - - - - - - electron acceptor - - - - - - - - - hydrogen chloride - - - - - - - - - - - donor - - - - - - - - - ribonucleoside triphosphate - - - - - - - - - chloride - - - - - - - - - - dinitrogen - - - - - - - - - - lipid - - - - - - - - - trimethylamine - - - - - - - - - - hydrogen halide - - - - - - - - - polysaccharide - - - - - - - - - - chlorophyll a - - - - - - - - - - (1->4)-beta-D-glucan - - - - - - - - - iron atom - - - - - - - - - dihydrogen - - - - - - - - - - manganese atom - - - - - - - - - alkane - - - - - - - - - - phosphate(3-) - - - - - - - - - - sulfur dioxide - - - - - - - - - N-methyl-amino acid - - - - - - - - - N-methylglycines - - - - - - - - - acetamides - - - - - - - - - adenosine phosphate - - - - - - - - - alkaline earth metal atom - - - - - - - - - - - alkali metal atom - - - - - - - - - - - alkaloid - - - - - - - - - alkyl group - - - - - - - - - alkylamines - - - - - - - - - anion - - - - - - - - - arsenate ion - - - - - - - - - arsenic molecular entity - - - - - - - - - base - - - - - - - - - benzenes - - - - - - - - - benzoates - - - - - - - - - benzopyrrole - - - - - - - - - - - branched-chain amino acid - - - - - - - - - cadmium atom - - - - - - - - - calcium atom - - - - - - - - - calcium molecular entity - - - - - - - - - carbamate ester - - - - - - - - - carbon oxide - - - - - - - - - - carbonates - - - - - - - - - chloride salt - - - - - - - - - - chlorine atom - - - - - - - - - chlorine molecular entity - - - - - - - - - chromium molecular entity - - - - - - - - - molecular entity - - - - - - - - - copper molecular entity - - - - - - - - - cyclic peptide - - - - - - - - - drug - - - - - - - - - monoatomic anion - - - - - - - - - - monoatomic cation - - - - - - - - - - enzyme inhibitor - - - - - - - - - - ethanols - - - - - - - - - fluorine atom - - - - - - - - - glycine derivative - - - - - - - - - chemical entity - - - - - - - - - biological role - - - - - - - - - group - - - - - - - - - guanidines - - - - - - - - - halogen molecular entity - - - - - - - - - halogen - - - - - - - - - - organic heterocyclic compound - - - - - - - - - - - heterodetic cyclic peptide - - - - - - - - - hydrocarbon - - - - - - - - - hydroxides - - - - - - - - - - - hydroxybenzoate - - - - - - - - - - indoles - - - - - - - - - oxoacid - - - - - - - - - inorganic anion - - - - - - - - - - inorganic molecular entity - - - - - - - - - inorganic oxide - - - - - - - - - - inorganic salt - - - - - - - - - - salt - - - - - - - - - monoatomic ion - - - - - - - - - - ion - - - - - - - - - iron molecular entity - - - - - - - - - lead atom - - - - - - - - - - leucine - - - - - - - - - - magnesium atom - - - - - - - - - magnesium molecular entity - - - - - - - - - magnesium porphyrin - - - - - - - - - - metabolite - - - - - - - - - metal cation - - - - - - - - - - metalloporphyrin - - - - - - - - - - - methyl ester - - - - - - - - - methylamines - - - - - - - - - mitochondrial respiratory-chain inhibitor - - - - - - - - - elemental molecule - - - - - - - - - - molecule - - - - - - - - - monocarboxylic acid - - - - - - - - - monohydroxybenzoate - - - - - - - - - monoatomic monocation - - - - - - - - - monoatomic polycation - - - - - - - - - mutagen - - - - - - - - - mycotoxin - - - - - - - - - - naphthalenes - - - - - - - - - - neurotransmitter - - - - - - - - - NADP - - - - - - - - - NAD(P) - - - - - - - - - nicotinamide nucleotide - - - - - - - - - nitrogen atom - - - - - - - - - - nitrous acid - - - - - - - - - nonmetal atom - - - - - - - - - nucleoside phosphate - - - - - - - - - - - organic heteromonocyclic compound - - - - - - - - - - organic anion - - - - - - - - - - organic cation - - - - - - - - - - ether - - - - - - - - - organic ion - - - - - - - - - - organic oxide - - - - - - - - - - organic phosphate - - - - - - - - - - aliphatic alcohol - - - - - - - - - organophosphorus compound - - - - - - - - - - oxide - - - - - - - - - - oxygen atom - - - - - - - - - - oxygen molecular entity - - - - - - - - - ozone - - - - - - - - - - - aldopentose phosphate - - - - - - - - - - phosphate - - - - - - - - - phosphoric acid derivative - - - - - - - - - phosphorus molecular entity - - - - - - - - - polyester macromolecule - - - - - - - - - - porphyrins - - - - - - - - - potassium atom - - - - - - - - - purine nucleoside monophosphate - - - - - - - - - purine nucleoside triphosphate - - - - - - - - - purine nucleotide - - - - - - - - - - purine ribonucleoside monophosphate - - - - - - - - - - purine ribonucleoside triphosphate - - - - - - - - - - purine ribonucleotide - - - - - - - - - - purines - - - - - - - - - pyridines - - - - - - - - - - quinate - - - - - - - - - radical - - - - - - - - - reactive oxygen species - - - - - - - - - ribonucleoside monophosphate - - - - - - - - - ribonucleotide - - - - - - - - - - ribose phosphate - - - - - - - - - saturated fatty acid - - - - - - - - - silicon molecular entity - - - - - - - - - sodium atom - - - - - - - - - sodium chloride - - - - - - - - - - sodium molecular entity - - - - - - - - - sodium salt - - - - - - - - - - carbohydrate phosphate - - - - - - - - - - - sulfide - - - - - - - - - sulfur atom - - - - - - - - - - sulfur molecular entity - - - - - - - - - tetrapyrrole - - - - - - - - - - organic heterotricyclic compound - - - - - - - - - - - threonine - - - - - - - - - toxin - - - - - - - - - - micronutrient - - - - - - - - - Anatoxin a - - - - - - - - - transition element atom - - - - - - - - - monoatomic trication - - - - - - - - - - organic heterobicyclic compound - - - - - - - - - - vanadium molecular entity - - - - - - - - - very long-chain fatty acid - - - - - - - - - xylene - - - - - - - - - - zinc atom - - - - - - - - - zinc molecular entity - - - - - - - - - boron atom - - - - - - - - - - arsenic atom - - - - - - - - - silicon atom - - - - - - - - - - carbon atom - - - - - - - - - - detergent - - - - - - - - - - nitrobenzene - - - - - - - - - - acetamide - - - - - - - - - - - lead(0) - - - - - - - - - chromium atom - - - - - - - - - - nickel atom - - - - - - - - - - phosphorus atom - - - - - - - - - - copper atom - - - - - - - - - beta-D-glucan - - - - - - - - - fatty acid anion - - - - - - - - - - ammonium - - - - - - - - - - - - chlorophyll - - - - - - - - - carbonic acid - - - - - - - - - - carboxylic acid anion - - - - - - - - - - mononucleotide - - - - - - - - - arsenate(3-) - - - - - - - - - hydrogen fluoride - - - - - - - - - - deuteron - - - - - - - - - deuterium atom - - - - - - - - - azanide - - - - - - - - - - monocarboxylic acid amide - - - - - - - - - oxonium - - - - - - - - - - methanide - - - - - - - - - hydrosulfide - - - - - - - - - gold(0) - - - - - - - - - copper(0) - - - - - - - - - aluminium oxide - - - - - - - - - isobutyl group - - - - - - - - - - sulfur hexafluoride - - - - - - - - - antimony atom - - - - - - - - - caesium atom - - - - - - - - - silicon dioxide - - - - - - - - - salicylate - - - - - - - - - alcohol - - - - - - - - - octacosanoic acid - - - - - - - - - - octacosanoate - - - - - - - - - - - leucinate - - - - - - - - - - leucinium - - - - - - - - - tertiary amine - - - - - - - - - - amine - - - - - - - - - amide - - - - - - - - - calcium carbonate - - - - - - - - - - - application - - - - - - - - - monoatomic entity - - - - - - - - - coordination entity - - - - - - - - - oxoacid derivative - - - - - - - - - inorganic hydride - - - - - - - - - - organic fundamental parent - - - - - - - - - - organic group - - - - - - - - - hydrocarbyl group - - - - - - - - - organyl group - - - - - - - - - atom - - - - - - - - - monoatomic hydrogen - - - - - - - - - - atomic nucleus - - - - - - - - - primary amide - - - - - - - - - elemental molecular entity - - - - - - - - - elemental hydrogen - - - - - - - - - - - elemental oxygen - - - - - - - - - - - diatomic oxygen - - - - - - - - - triatomic oxygen - - - - - - - - - diatomic nitrogen - - - - - - - - - elemental nitrogen - - - - - - - - - - polyatomic anion - - - - - - - - - - molecular messenger - - - - - - - - - antimicrobial agent - - - - - - - - - nutrient - - - - - - - - - heteroorganic entity - - - - - - - - - agrochemical - - - - - - - - - fertilizer - - - - - - - - - fuel - - - - - - - - - alkali metal molecular entity - - - - - - - - - alkaline earth molecular entity - - - - - - - - - pnictogen - - - - - - - - - pnictogen molecular entity - - - - - - - - - chalcogen - - - - - - - - - chalcogen molecular entity - - - - - - - - - carbon group element atom - - - - - - - - - carboxylic ester - - - - - - - - - - boron group element atom - - - - - - - - - main group element atom - - - - - - - - - strontium atom - - - - - - - - - silicon oxide - - - - - - - - - - zinc group element atom - - - - - - - - - chromium group element atom - - - - - - - - - manganese group element atom - - - - - - - - - iron group element atom - - - - - - - - - nickel group element atom - - - - - - - - - copper group element atom - - - - - - - - - platinum(0) - - - - - - - - - hydracid - - - - - - - - - pnictogen oxoacid - - - - - - - - - - elemental carbon - - - - - - - - - - monoatomic monoanion - - - - - - - - - - elemental chlorine - - - - - - - - - - monoatomic chlorine - - - - - - - - - - monoatomic halogen - - - - - - - - - elemental halogen - - - - - - - - - phospho sugar - - - - - - - - - - nitrogen oxoacid - - - - - - - - - - nitrogen oxoanion - - - - - - - - - - pnictogen oxoanion - - - - - - - - - - phosphorus oxoanion - - - - - - - - - - - elemental pnictogen - - - - - - - - - - - sulfur oxoanion - - - - - - - - - - chalcogen oxoanion - - - - - - - - - transition element molecular entity - - - - - - - - - actinoid molecular entity - - - - - - - - - uranium molecular entity - - - - - - - - - metal atom - - - - - - - - - sulfur hydride - - - - - - - - - - alpha-amino-acid anion - - - - - - - - - s-block element atom - - - - - - - - - p-block element atom - - - - - - - - - d-block element atom - - - - - - - - - carboxylic acid - - - - - - - - - - - main group molecular entity - - - - - - - - - boron group molecular entity - - - - - - - - - carbon group molecular entity - - - - - - - - - noble gas molecular entity - - - - - - - - - lead molecular entity - - - - - - - - - cyclic compound - - - - - - - - - homocyclic compound - - - - - - - - - carbocyclic compound - - - - - - - - - - hydrogen molecular entity - - - - - - - - - aluminium molecular entity - - - - - - - - - aluminium oxides - - - - - - - - - - monoatomic aluminium - - - - - - - - - - elemental aluminium - - - - - - - - - - - polycyclic compound - - - - - - - - - bicyclic compound - - - - - - - - - ortho-fused compound - - - - - - - - - aliphatic compound - - - - - - - - - aromatic compound - - - - - - - - - arene - - - - - - - - - - organic aromatic compound - - - - - - - - - - monocyclic compound - - - - - - - - - cyclic hydrocarbon - - - - - - - - - - polycyclic hydrocarbon - - - - - - - - - - heteromonocyclic compound - - - - - - - - - - heteropolycyclic compound - - - - - - - - - - heterobicyclic compound - - - - - - - - - - zinc group molecular entity - - - - - - - - - s-block molecular entity - - - - - - - - - p-block molecular entity - - - - - - - - - d-block molecular entity - - - - - - - - - f-block molecular entity - - - - - - - - - helium molecular entity - - - - - - - - - - elemental helium - - - - - - - - - diatomic helium - - - - - - - - - hydrides - - - - - - - - - - oxygen hydride - - - - - - - - - biomacromolecule - - - - - - - - - - polyatomic cation - - - - - - - - - - amino-acid cation - - - - - - - - - alpha-amino acid - - - - - - - - - amino acid - - - - - - - - - - alpha-amino-acid cation - - - - - - - - - chromium group molecular entity - - - - - - - - - iron group molecular entity - - - - - - - - - copper group molecular entity - - - - - - - - - vanadium group molecular entity - - - - - - - - - nickel group molecular entity - - - - - - - - - platinum molecular entity - - - - - - - - - organic hydroxy compound - - - - - - - - - - organic cyclic compound - - - - - - - - - - heteroarene - - - - - - - - - - benzenoid aromatic compound - - - - - - - - - - macromolecule - - - - - - - - - monocyclic arene - - - - - - - - - polycyclic arene - - - - - - - - - - transition element coordination entity - - - - - - - - - - reagent - - - - - - - - - metallotetrapyrrole - - - - - - - - - macronutrient - - - - - - - - - halide salt - - - - - - - - - - gold molecular entity - - - - - - - - - elemental gold - - - - - - - - - magnesium coordination entity - - - - - - - - - - saxitoxin - - - - - - - - - - - - - nitrogen hydride - - - - - - - - - - azane - - - - - - - - - aldose phosphate - - - - - - - - - calcium salt - - - - - - - - - - vanadium(0) - - - - - - - - - elemental vanadium - - - - - - - - - surfactant - - - - - - - - - nitrogen oxide - - - - - - - - - - tracer - - - - - - - - - label - - - - - - - - - alkaline earth coordination entity - - - - - - - - - - inhibitor - - - - - - - - - fossil fuel - - - - - - - - - ammonium ion - - - - - - - - - - fused compound - - - - - - - - - carbopolycyclic compound - - - - - - - - - - homopolycyclic compound - - - - - - - - - - ortho-fused polycyclic arene - - - - - - - - - - steroid - - - - - - - - - - 17beta-hydroxy steroid - - - - - - - - - hydroxy steroid - - - - - - - - - - organonitrogen compound - - - - - - - - - - fatty acid - - - - - - - - - - chromium oxoanion - - - - - - - - - - chromium coordination entity - - - - - - - - - - chromate(2-) - - - - - - - - - - transition element oxoanion - - - - - - - - - - - oxoanion - - - - - - - - - - ortho-fused bicyclic arene - - - - - - - - - - ortho-fused polycyclic hydrocarbon - - - - - - - - - ortho-fused bicyclic hydrocarbon - - - - - - - - - - antiinfective agent - - - - - - - - - alkali metal salt - - - - - - - - - - analgesic - - - - - - - - - - heterocyclic organic fundamental parent - - - - - - - - - cardiovascular drug - - - - - - - - - carbon oxoanion - - - - - - - - - - - carbon oxoacid - - - - - - - - - - vasodilator agent - - - - - - - - - ester - - - - - - - - - nitro compound - - - - - - - - - C-nitro compound - - - - - - - - - monocarboxylic acid anion - - - - - - - - - arsenic oxoanion - - - - - - - - - - phosphate ion - - - - - - - - - oxo steroid - - - - - - - - - - imidazopyrimidine - - - - - - - - - - - pnictogen hydride - - - - - - - - - - hydroxy monocarboxylic acid anion - - - - - - - - - inorganic chloride - - - - - - - - - - cyclitol carboxylic acid anion - - - - - - - - - dicarboxylic acid monoester - - - - - - - - - - - cyclic tetrapyrrole - - - - - - - - - - subatomic particle - - - - - - - - - nuclear particle - - - - - - - - - polyatomic entity - - - - - - - - - polyatomic ion - - - - - - - - - - phosphorus oxoacid derivative - - - - - - - - - - phosphorus oxoacids and derivatives - - - - - - - - - alkaline earth salt - - - - - - - - - - saturated organic heterocyclic parent - - - - - - - - - saturated organic heteromonocyclic parent - - - - - - - - - - polycyclic ether - - - - - - - - - - main-group coordination entity - - - - - - - - - - carbonyl compound - - - - - - - - - - organic oxo compound - - - - - - - - - organochlorine compound - - - - - - - - - - organohalogen compound - - - - - - - - - - heterotricyclic compound - - - - - - - - - carbobicyclic compound - - - - - - - - - - monoanion - - - - - - - - - 17-hydroxy steroid - - - - - - - - - inorganic radical - - - - - - - - - - radical cation - - - - - - - - - - radical ion - - - - - - - - - - inorganic radical ion - - - - - - - - - - inorganic radical cation - - - - - - - - - - elemental fluorine - - - - - - - - - monoatomic fluorine - - - - - - - - - chalcogen hydride - - - - - - - - - - neon molecular entity - - - - - - - - - argon molecular entity - - - - - - - - - krypton molecular entity - - - - - - - - - inorganic ion - - - - - - - - - - inorganic cation - - - - - - - - - - cation - - - - - - - - - nitrogen-15 atom - - - - - - - - - chalcocarbonic acid - - - - - - - - - organochalcogen compound - - - - - - - - - - organooxygen compound - - - - - - - - - - nucleotide - - - - - - - - - pyridine nucleotide - - - - - - - - - - nicotinamide dinucleotide - - - - - - - - - - ribonucleoside 5'-monophosphate - - - - - - - - - - ribonucleoside 5'-phosphate - - - - - - - - - - purine ribonucleoside 5'-monophosphate - - - - - - - - - - - amino-acid anion - - - - - - - - - - purine ribonucleoside 5'-triphosphate - - - - - - - - - - - ribonucleoside 5'-triphosphate - - - - - - - - - adenosine 5'-phosphate - - - - - - - - - - glucan - - - - - - - - - homopolysaccharide - - - - - - - - - organic hydride - - - - - - - - - mononuclear parent hydride - - - - - - - - - elemental lead - - - - - - - - - tropane alkaloid - - - - - - - - - - elemental copper - - - - - - - - - cyclic ether - - - - - - - - - - acid - - - - - - - - - heteroatomic molecular entity - - - - - - - - - halide - - - - - - - - - - carboxamide - - - - - - - - - - - phosphoric ester - - - - - - - - - - polypyrrole - - - - - - - - - organonitrogen heterocyclic compound - - - - - - - - - - oxacycle - - - - - - - - - - organic heteropolycyclic compound - - - - - - - - - - polycyclic heteroarene - - - - - - - - - chlorophyllide - - - - - - - - - hydrocarbyl anion - - - - - - - - - magnesium tetrapyrrole - - - - - - - - - - phorbines - - - - - - - - - 2-amino-3-hydroxybutanoic acid - - - - - - - - - azabicycloalkane - - - - - - - - - - methylindole - - - - - - - - - electron-transport chain inhibitor - - - - - - - - - respiratory-chain inhibitor - - - - - - - - - inorganic sodium salt - - - - - - - - - - quinolinemonocarboxylate - - - - - - - - - anaesthetic - - - - - - - - - general anaesthetic - - - - - - - - - inhalation anaesthetic - - - - - - - - - methylbenzene - - - - - - - - - alkylbenzene - - - - - - - - - - Bronsted acid - - - - - - - - - - Bronsted base - - - - - - - - - - Lewis acid - - - - - - - - - - Lewis base - - - - - - - - - - chloropicrin - - - - - - - - - - - straight-chain saturated fatty acid - - - - - - - - - - cyclic ketone - - - - - - - - - carbonate - - - - - - - - - hydrogenphosphate - - - - - - - - - - hydrogensulfate - - - - - - - - - mineral - - - - - - - - - sulfide mineral - - - - - - - - - - sulfide salt - - - - - - - - - carbonate salt - - - - - - - - - solvent - - - - - - - - - - dioxane - - - - - - - - - - dioxanes - - - - - - - - - - 1,4-dioxane - - - - - - - - - - 3-oxo steroid - - - - - - - - - - indicator - - - - - - - - - cyclic polypyrrole - - - - - - - - - dinucleotide - - - - - - - - - 3-oxo-Delta(4) steroid - - - - - - - - - - microcystin - - - - - - - - - nitric acid - - - - - - - - - nitrobenzenes - - - - - - - - - - sulfur oxide - - - - - - - - - - antiseptic drug - - - - - - - - - disinfectant - - - - - - - - - polar solvent - - - - - - - - - protic solvent - - - - - - - - - - protophilic solvent - - - - - - - - - - amphiprotic solvent - - - - - - - - - - antagonist - - - - - - - - - elemental platinum - - - - - - - - - aluminium(3+) - - - - - - - - - - - hydrogen atom - - - - - - - - - - - uranium(0) - - - - - - - - - zinc dichloride - - - - - - - - - - elemental krypton - - - - - - - - - monoatomic krypton - - - - - - - - - - monoatomic argon - - - - - - - - - - elemental argon - - - - - - - - - argon(.1+) - - - - - - - - - - monoatomic neon - - - - - - - - - - elemental neon - - - - - - - - - organic amino compound - - - - - - - - - sulfur coordination entity - - - - - - - - - P450 inhibitor - - - - - - - - - onium compound - - - - - - - - - onium cation - - - - - - - - - proteinogenic amino-acid side-chain group - - - - - - - - - androstanoid - - - - - - - - - probe - - - - - - - - - monoatomic uranium - - - - - - - - - elemental uranium - - - - - - - - - alkyl alcohol - - - - - - - - - carbon nanotube - - - - - - - - - - nanostructure - - - - - - - - - nanotube - - - - - - - - - carbon nanostructure - - - - - - - - - - iron oxide - - - - - - - - - organic molecular entity - - - - - - - - - genotoxin - - - - - - - - - allergen - - - - - - - - - role - - - - - - - - neurotoxin - - - - - - - - - - tertiary amino compound - - - - - - - - - chemical role - - - - - - - - - nitrohydrocarbon - - - - - - - - - nitroarene - - - - - - - - - nitrogen molecular entity - - - - - - - - - organic univalent group - - - - - - - - - enone - - - - - - - - - - alpha,beta-unsaturated ketone - - - - - - - - - organic polycyclic compound - - - - - - - - - - organic tricyclic compound - - - - - - - - - biochemical role - - - - - - - - - aetiopathogenetic role - - - - - - - - - pharmacological role - - - - - - - - - physiological role - - - - - - - - - ligand - - - - - - - - - pharmaceutical - - - - - - - - - inorganic hydroxy compound - - - - - - - - - - epitope - - - - - - - - - poly(hydroxyalkanoate) - - - - - - - - - poly(hydroxybutyrate) - - - - - - - - - heterocyclic compound - - - - - - - - - carbon monoxide(1+) - - - - - - - - - chlorophyll a(1-) - - - - - - - - - kynurenate - - - - - - - - - cyclic tetrapyrrole anion - - - - - - - - - very long-chain fatty acid anion - - - - - - - - - saturated fatty acid anion - - - - - - - - - straight-chain saturated fatty acid anion - - - - - - - - - biomarker - - - - - - - - - straight-chain fatty acid - - - - - - - - - electrophilic reagent - - - - - - - - - - nucleophilic reagent - - - - - - - - - - chemical substance - - - - - - - - - monovalent inorganic cation - - - - - - - - - aluminium ion - - - - - - - - - - NMDA receptor antagonist - - - - - - - - - excitatory amino acid antagonist - - - - - - - - - nucleobase-containing molecular entity - - - - - - - - - - brevetoxin A - - - - - - - - - ciguatoxin - - - - - - - - - adenyl nucleotide - - - - - - - - - adenyl ribonucleotide - - - - - - - - - - signalling molecule - - - - - - - - - reactive nitrogen species - - - - - - - - - emulsifier - - - - - - - - - aluminium cation - - - - - - - - - - oxidising agent - - - - - - - - - carbohydrate derivative - - - - - - - - - monosaccharide derivative - - - - - - - - - pentose derivative - - - - - - - - - branched-chain amino-acid anion - - - - - - - - - 1,1-diol - - - - - - - - - ketone hydrate - - - - - - - - - food additive - - - - - - - - - - one-carbon compound - - - - - - - - - organic acid - - - - - - - - - trivalent inorganic cation - - - - - - - - - poison - - - - - - - - - N-alkylglycine - - - - - - - - - - organic molecule - - - - - - - - - - eukaryotic metabolite - - - - - - - - - animal metabolite - - - - - - - - - mammalian metabolite - - - - - - - - - prokaryotic metabolite - - - - - - - - - iron sulfides - - - - - - - - - - iron(2+) sulfides - - - - - - - - - greenhouse gas - - envoPolar - - - - - - - - propellant - - - - - - - - - EC 1.* (oxidoreductase) inhibitor - - - - - - - - - EC 1.14.* (oxidoreductase acting on paired donors, with incorporation or reduction of molecular oxygen) inhibitor - - - - - - - - - EC 3.* (hydrolase) inhibitor - - - - - - - - - EC 3.5.* (hydrolases acting on non-peptide C-N bonds) inhibitor - - - - - - - - - EC 3.5.1.* (non-peptide linear amide C-N hydrolase) inhibitor - - - - - - - - - EC 1.14.14.* (oxidoreductase acting on paired donors, incorporating of 1 atom of oxygen, with reduced flavin or flavoprotein as one donor) inhibitor - - - - - - - - - EC 1.14.14.1 (unspecific monooxygenase) inhibitor - - - - - - - - - pathway inhibitor - - - - - - - - - fungal metabolite - - - - - - - - - bacterial metabolite - - - - - - - - - human metabolite - - - - - - - - - EC 3.5.1.4 (amidase) inhibitor - - - - - - - - - raising agent - - - - - - - - - food packaging gas - - - - - - - - - food propellant - - - - - - - - - - fatty acid anion 28:0 - - - - - - - - - food component - - - - - - - - - environmental contaminant - - - - - - - - - refrigerant - - - - - - - - - carbohydrates and carbohydrate derivatives - - - - - - - - - olefinic compound - - - - - - - - - trivalent inorganic anion - - - - - - - - - divalent inorganic anion - - - - - - - - - monovalent inorganic anion - - - - - - - - - Nodularin - - - - - - - - - Brevetoxin B - - - - - - - - - pheophytin - - - - - - - - - diatomaceous earth - - - - - - - - - - elemental iron - - - - - - - - - - iron(0) - - - - - - - - - crustacean metabolite - - - - - - - - - Daphnia magna metabolite - - - - - - - - - Daphnia metabolite - - - - - - - - - chlorophyllide a(2-) - - - - - - - - - - N-acylammonia - - - - - - - - - proteinogenic amino acid derivative - - - - - - - - - non-proteinogenic amino acid - - - - - - - - - amino acid derivative - - - - - - - - - non-proteinogenic alpha-amino acid - - - - - - - - - - pentose phosphate - - - - - - - - - - pyrite - - - - - - - - - - metal allergen - - - - - - - - - skatole - - - - - - - - - cell line - - A cultured cell population that represents a genetically stable and homogenous population of cultured cells that shares a common propagation history (i.e. has been successively passaged together in culture). - A cultured cell population that represents a genetically stable and homogenous population of cultured cells that shares a common propagation history (i.e. has been successively passaged together in culture). - - - - - - - - - geographic feature - - May appear on a map. - https://en.wikipedia.org/wiki/Geographic_feature - macroscopic spatial feature - envoPolar - - - - - - - - bedding-plane cave - - A cavity developed along a bedding-plane and elongate in cross-section as a result. - ENVO - ENVO:00000001 - - - A cavity developed along a bedding-plane and elongate in cross-section as a result. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - anthropogenic geographic feature - - An anthropogenic geographic feature is a geographic feature -resulting from the influence of human beings on nature. - ENVO - ENVO:00000002 - FTT:78 - TGN:50001 - man-made feature - manmade feature - - - An anthropogenic geographic feature is a geographic feature -resulting from the influence of human beings on nature. - ORCID:0000-0002-4366-3088 - - - - - - - - - - mine tailing - - ENVO - ENVO:00000003 - FTT:625 - FTT:631 - Mine tailings are the materials left over after the process of separating the valuable fraction from the uneconomic fraction (gangue) of an ore. - dumping ground - mine dump - tailing - - - USGS:SDTS - dumping ground - - - - - ADL:FTT - tailing - - - - - ADL:FTT - mine dump - - - - - Mine tailings are the materials left over after the process of separating the valuable fraction from the uneconomic fraction (gangue) of an ore. - https://en.wikipedia.org/wiki/Tailings - - - - - - - - - - administrative region - - ENVO - ENVO:00000004 - FTT:1242 - FTT:1252 - FTT:15 - FTT:16 - FTT:18 - FTT:19 - FTT:21 - FTT:22 - FTT:23 - FTT:24 - FTT:25 - FTT:26 - FTT:27 - FTT:28 - FTT:29 - FTT:37 - SWEETRealm:AdministrativeRegion - TGN:80001 - TGN:81099 - TGN:81123 - administrative area - administrative division - administrative entity - boundary region - civil area - district - free trade zone - governed place - https://en.wikipedia.org/wiki/Administrative_region - leased area (government) - leased zone (government) - neutral zone (political) - prefecture - protectorate - sheikdom - sultanate - trade zone - - - Getty:TGN - administrative entity - - - - - ADL:FTT - free trade zone - - - - - ADL:FTT - neutral zone (political) - - - - - ADL:FTT - administrative area - - - - - ADL:FTT - district - - - - - ADL:FTT - sheikdom - - - - - ADL:FTT - trade zone - - - - - ADL:FTT - leased zone (government) - - - - - ADL:FTT - sultanate - - - - - ADL:FTT - administrative division - - - - - ADL:FTT - leased area (government) - - - - - ADL:FTT - governed place - - - - - ADL:FTT - prefecture - - - - - ADL:FTT - civil area - - - - - ADL:FTT - boundary region - - - - - Getty:TGN - administrative division - - - - - ADL:FTT - protectorate - - - - - - - - - - first-order administrative region - - - - - - - - A primary administrative division of a country, such as a state in the United States. - ENVO - ENVO:00000005 - FTT:414 - FTT:569 - Geonames:A.ADM1 - TGN:81100 - countries, 1st order division - first level subdivision - first-order administrative division - - - Getty:TGN - first level subdivision - - - - - Geonames:feature - first-order administrative division - - - - - A primary administrative division of a country, such as a state in the United States. - Geonames:http://www.geonames.org/export/codes.html - - - - - ADL:FTT - countries, 1st order division - - - - - - - - - - second-order administrative region - - - - - - - - A subdivision of a first-order administrative division. - ENVO - ENVO:00000006 - FTT:286 - FTT:576 - Geonames:A.ADM2 - TGN:81300 - countries, 2nd order division - second level subdivision - second-order administrative division - - - ADL:FTT - countries, 2nd order division - - - - - Getty:TGN - second level subdivision - - - - - A subdivision of a first-order administrative division. - Geonames:http://www.geonames.org/export/codes.html - - - - - Geonames:feature - second-order administrative division - - - - - - - - - - third-order administrative region - - - - - - - - A subdivision of a second-order administrative division. - ENVO - ENVO:00000007 - FTT:204 - FTT:205 - FTT:578 - Geonames:A.ADM3 - TGN:82401 - barrio - countries, 3rd order division - third level subdivision - third-order administrative division - - - ADL:FTT - countries, 3rd order division - - - - - ADL:FTT - barrio - - - - - A subdivision of a second-order administrative division. - Geonames:http://www.geonames.org/export/codes.html - - - - - Getty:TGN - third level subdivision - - - - - Geonames:feature - third-order administrative division - - - - - - - - - - fourth-order administrative region - - - - - - - - A subdivision of a third-order administrative division. - ENVO - ENVO:00000008 - FTT:580 - FTT:581 - Geonames:A.ADM4 - TGN:82402 - countries, 4th order division - fourth level subdivision - fourth-order administrative division - - - ADL:FTT - countries, 4th order division - - - - - Getty:TGN - fourth level subdivision - - - - - Geonames:feature - fourth-order administrative division - - - - - A subdivision of a third-order administrative division. - Geonames:http://www.geonames.org/export/codes.html - - - - - - - - - - national geopolitical entity - - A political association with effective dominion over a geographic area. - ENVO - ENVO:00000009 - FTT:424 - FTT:566 - FTT:567 - FTT:571 - SWEETRealm:Country - SWEETRealm:State - TGN:80006 - TGN:81010 - TGN:81011 - TGN:81102 - country - https://en.wikipedia.org/wiki/Nation - independent nation - independent political entity - independent sovereign nation - nation - political entity - state - - - ADL:FTT - country - - - - - ADL:FTT - political entity - - - - - ADL:FTT - nation - - - - - A political association with effective dominion over a geographic area. - https://en.wikipedia.org/wiki/State - - - - - Getty:TGN - independent political entity - - - - - Getty:TGN - independent nation - - - - - Getty:TGN - independent sovereign nation - - - - - - - - - - transport feature - - A construction which enables the movement of humans, their animals or their vehicles. - FTT:83 - - - A construction which enables the movement of humans, their animals or their vehicles. - MA:ma - - - - - - - - - - garden - - An enclosure for displaying selected plant or animal life. - ENVO - ENVO:00000011 - FTT:31 - FTT:743 - Geonames:S.GDN - PARK - TGN:53010 - cropland - garden - https://en.wikipedia.org/wiki/Garden - park - - - PARK - USGS:SDTS - - - - - ADL:FTT - park - - - - - USGS:SDTS - cropland - - - - - An enclosure for displaying selected plant or animal life. - Geonames:feature - - - - - Geonames:feature - garden - - - - - - - - - - hydrographic feature - - - - - - - - - - - - - - - - - - - - - A geographical feature associated with water. - ENVO - ENVO:00000012 - FTT:131 - FTT:280 - FTT:711 - FTT:761 - FTT:824 - FTT:825 - FTT:826 - FTT:827 - FTT:828 - FTT:829 - Geonames:H.OVF - OVERFALLS - eddy - fluvial feature - overfalls - envoPolar - - - ADL:FTT - overfalls - - - - - ADL:FTT - eddy - - - - - OVERFALLS - USGS:SDTS - - - - - A geographical feature associated with water. - MA:ma - - - - - Geonames:feature - overfalls - - - - - ADL:FTT - fluvial feature - - - - - - - - - - cave system - - - - - - - - A collection of caves interconnected by enterable passages or linked hydrologically or a cave with an extensive complex of chambers and passages. - ENVO - ENVO:00000013 - - - A collection of caves interconnected by enterable passages or linked hydrologically or a cave with an extensive complex of chambers and passages. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - canal - - - - - - - - Artificial watercourse with no flow or a controlled flow used for navigation, drainage or irrigation. - ENVO - ENVO:00000014 - EcoLexicon:canal - FTT:129 - FTT:395 - FTT:407 - FTT:408 - Geonames:H.CNL - SWEETRealm:Canal - TGN:51252 - This class refers to the water contained in a canal channel, and not the channel itself. - https://en.wikipedia.org/wiki/Canal - - - Artificial watercourse with no flow or a controlled flow used for navigation, drainage or irrigation. - MA:ma - - - - - - - - - - ocean - - - - - - - - Continuous saline-water bodies that surround the continents and fill the Earth's great depressions. - ENVO - ENVO:00000015 - EcoLexicon:ocean - FTT:1019 - FTT:943 - Geonames:H.OCN - LTER:695 - Ocean - SWEETRealm:Ocean - TGN:21102 - https://en.wikipedia.org/wiki/Ocean - ocean - ocean region - sea - envoPolar - - - ADL:FTT - ocean region - - - - - Geonames:feature - ocean - - - - - ADL:FTT - Continuous saline-water bodies that surround the continents and fill the Earth's great depressions. - - - - - USGS:SDTS - sea - - - - - NASA:earthrealm - Ocean - - - - - - - - - - sea - - - - - - - - A large expanse of saline water usually connected with an ocean. - ENVO - ENVO:00000016 - EcoLexicon:sea - FTT:233 - FTT:830 - Geonames:H.SEA - Sea - TGN:21103 - channel - closed sea - https://en.wikipedia.org/wiki/Sea - marginal sea - open sea - open sound - open water - sea - envoPolar - - - USGS:SDTS - open sea - - - - - USGS:SDTS - open water - - - - - Geonames:feature - sea - - - - - USGS:SDTS - open sound - - - - - NASA:earthrealm - Sea - - - - - USGS:SDTS - marginal sea - - - - - ADL:FTT - sea - - - - - USGS:SDTS - closed sea - - - - - A large expanse of saline water usually connected with an ocean. - https://en.wikipedia.org/wiki/Sea - - - - - - - - - - saline hydrographic feature - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A geographical feature associated with water with a halinity above 30 ppt (roughly 35 g/L). - ENVO - ENVO:00000017 - - - A geographical feature associated with water with a halinity above 30 ppt (roughly 35 g/L). - https://en.wikipedia.org/wiki/Salinity - - - - - - - - - - obsolete dry river - A river that has either permanently or temporally lost its water. - ENVO - ENVO:00000018 - false - true - - - A river that has either permanently or temporally lost its water. - MA:ma - - - - - - - - - - saline lake - - - - - - - - - - - - - - - - - - - A lake whose water contains a considerable concentration of dissolved salts. - FTT:221 - FTT:907 - Geonames:H.LKN - Geonames:H.LKSN - TGN:21116 - https://en.wikipedia.org/wiki/Saline_lake - salina - salt lake - soda lake - - - USGS:SDTS - salt lake - - - - - A lake whose water contains a considerable concentration of dissolved salts. - MA:ma - - - - - USGS:SDTS - salina - - - - - - - - - - lake - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A body of water or other liquid of considerable size contained on a body of land. - EcoLexicon:lake - FTT:221 - FTT:704 - FTT:909 - Geonames:H.LK - Geonames:H.LKS - LTER:278 - SPIRE:Lake_or_pond - SWEETRealm:Lake - TGN:21114 - TGN:21115 - broad - catch basin - llyn - loch - lochan - lough - mere - mortlake - open water - pasteuer lake - tarn - envoPolar - - - ADL:FTT - lochan - - - - - USGS:SDTS - mortlake - - - - - USGS:SDTS - pasteuer lake - - - - - A body of water or other liquid of considerable size contained on a body of land. - https://en.wikipedia.org/wiki/Lake - - - - - USGS:SDTS - open water - - - - - ADL:FTT - tarn - - - - - USGS:SDTS - catch basin - - - - - - - - - - freshwater lake - - - - - - - - A lake of whose water contains low concentrations of salts. - ENVO - ENVO:00000021 - FreshwaterLake - SWEETRealm:FreshwaterLake - envoPolar - - - A lake of whose water contains low concentrations of salts. - https://en.wikipedia.org/wiki/Freshwater - - - - - FreshwaterLake - NASA:earthrealm - - - - - - - - - - river - - - - - - - - - - - - - - A stream which, through permanent or seasonal flow processes, moves from elevated land towards lower elevations through a definite channel and empties either into a sea, lake, or another river or ends on land as bed seepage and evapotranspiration exceed water supply. - ENVO - ENVO:00000022 - EcoLexicon:river - FTT:1179 - FTT:251 - LTER:474 - SPIRE:River - SWEETRealm:River - TGN:21105 - braided river - rio - "There are no official definitions for the generic term river as applied to geographic features, although in some countries or communities a stream is defined by its size. Many names for small rivers are specific to geographic location; examples are "run" in some parts of the United States, "burn" in Scotland and northeast England, and "beck" in northern England. Sometimes a river is defined as being larger than a creek, but not always: the language is vague." - - - USGS:SDTS - braided river - - - - - USGS:SDTS - rio - - - - - "There are no official definitions for the generic term river as applied to geographic features, although in some countries or communities a stream is defined by its size. Many names for small rivers are specific to geographic location; examples are "run" in some parts of the United States, "burn" in Scotland and northeast England, and "beck" in northern England. Sometimes a river is defined as being larger than a creek, but not always: the language is vague." - https://en.wikipedia.org/wiki/River - - - - - A stream which, through permanent or seasonal flow processes, moves from elevated land towards lower elevations through a definite channel and empties either into a sea, lake, or another river or ends on land as bed seepage and evapotranspiration exceed water supply. - ADL:FTT - https://en.wikipedia.org/wiki/River - http://orcid.org/0000-0002-4366-3088 - - - - - ADL:FTT - rio - - - - - - - - - - stream - - - - - - - - Creek - ENVO - ENVO:00000023 - EcoLexicon:stream - FTT:105 - FTT:1221 - FTT:1225 - FTT:1261 - FTT:303 - FTT:371 - FTT:593 - FTT:721 - Geonames:H.STM - Geonames:H.STMS - LTER:562 - Linear body of water flowing on the Earth's surface. - SWEETRealm:Stream - Stream - TGN:21106 - TGN:21107 - TGN:21108 - TGN:21109 - beck - braided stream - brook - burn (hydrographic) - creek - fork (hydrographic - https://en.wikipedia.org/wiki/Stream - lode - millstream - rivulet - stream - stream bend - streams - watercourse - - - ADL:FTT - watercourse - - - - - USGS:SDTS - braided stream - - - - - USGS:SDTS - creek - - - - - Geonames:feature - streams - - - - - Getty:TGN - brook - - - - - ADL:FTT - stream bend - - - - - ADL:FTT - burn (hydrographic) - - - - - Geonames:feature - stream - - - - - Getty:TGN - creek - - - - - ADL:FTT - fork (hydrographic - - - - - ADL:FTT - creek - - - - - Creek - NASA:earthrealm - - - - - USGS:SDTS - lode - - - - - USGS:SDTS - watercourse - - - - - ADL:FTT - brook - - - - - Linear body of water flowing on the Earth's surface. - USGS:http://mapping.usgs.gov/www/ti/GNIS/gnis_users_guide_appendixc.html - - - - - NASA:earthrealm - Stream - - - - - USGS:SDTS - beck - - - - - USGS:SDTS - rivulet - - - - - - - - - - obsolete intermittent stream - A stream whose flow is not continuous. - ENVO - ENVO:00000024 - FTT:105 - FTT:882 - Geonames:H.STMI - https://en.wikipedia.org/wiki/Intermittent_stream - intermittent stream - stream - true - - - Geonames:feature - intermittent stream - - - - - A stream whose flow is not continuous. - MA:ma - - - - - ADL:FTT - stream - - - - - - - - - - reservoir - - An artificial body of water, often contained by a dam, constructed for the purpose of water storage. - ENVO - ENVO:00000025 - EcoLexicon:reservoir - FTT:587 - FTT:588 - FTT:882 - Geonames:H.RSV - SWEETRealm:Reservoir - TGN:51259 - covered reservoir - https://en.wikipedia.org/wiki/Reservoir - lake - reservoir - - - USGS:SDTS - lake - - - - - ADL:FTT - covered reservoir - - - - - An artificial body of water, often contained by a dam, constructed for the purpose of water storage. - MA:ma - - - - - Geonames:feature - reservoir - - - - - - - - - - well - - A cylindrical hole, pit, or tunnel drilled or dug down to a depth from which water, oil, or gas can be pumped or brought to the surface. - ENVO - ENVO:00000026 - EcoLexicon:well - FTT:1032 - FTT:1237 - FTT:833 - Geonames:H.WLL - Geonames:H.WLLS - SWEETRealm:Well - TGN:51255 - https://en.wikipedia.org/wiki/Well - - - A cylindrical hole, pit, or tunnel drilled or dug down to a depth from which water, oil, or gas can be pumped or brought to the surface. - Geonames:feature - - - - - - - - - - spring - - A point where groundwater or steam flows out of the ground, and is thus where the aquifer surface meets the ground surface or where there is a fissure. - ENVO - ENVO:00000027 - EcoLexicon:spring - FTT:982 - Geonames:H.SPNG - SPRING - SWEETRealm:Spring - Spring - TGN:21126 - seep - spring - - - Geonames:feature - spring - - - - - USGS:SDTS - seep - - - - - A point where groundwater or steam flows out of the ground, and is thus where the aquifer surface meets the ground surface or where there is a fissure. - https://en.wikipedia.org/wiki/Spring_%28hydrosphere%29#Classification - - - - - NASA:earthrealm - Spring - - - - - SPRING - USGS:SDTS - - - - - - - - - - sand pit quarry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A quarry from which sand is extracted. - ENVO - ENVO:00000028 - https://en.wikipedia.org/wiki/Sand_pit - sand pit - - - A quarry from which sand is extracted. - MA:ma - - - - - - - - - - watercourse - - - - - - - - A flowing body of water. - ENVO - ENVO:00000029 - EcoLexicon:brook - EcoLexicon:course - EcoLexicon:culvert - EcoLexicon:gully - EcoLexicon:ravine - EcoLexicon:spillway - EcoLexicon:waterway - FTT:105 - Geonames:H.NRWS - Geonames:H.RCH - Geonames:H.WTRC - Geonames:S.SPLY - TGN:21110 - TGN:21131 - TGN:21133 - TGN:21137 - TGN:21163 - TGN:21499 - awawa - barranca - beck - branch - brook - course - culvert - draw - dredged channel - fork - gulch - gully - gut - gutter - https://en.wikipedia.org/wiki/Watercourse - kill - lode - moat - narrows - narrows - narrows (hydrographic) - overflow channel - passage - pup - race - ravine - reach - rill - rivulet - run - runnel - seachannel - seaway - spillway - stream - tideway - wash - water gap - - - USGS:SDTS - branch - - - - - USGS:SDTS - overflow channel - - - - - ADL:FTT - narrows (hydrographic) - - - - - USGS:SDTS - tideway - - - - - USGS:SDTS - narrows - - - - - Geonames:feature - reach - - - - - ADL:FTT - stream - - - - - USGS:SDTS - dredged channel - - - - - USGS:SDTS - seachannel - - - - - USGS:SDTS - run - - - - - USGS:SDTS - draw - - - - - USGS:SDTS - seaway - - - - - Getty:TGN - narrows - - - - - USGS:SDTS - passage - - - - - USGS:SDTS - barranca - - - - - USGS:SDTS - lode - - - - - USGS:SDTS - reach - - - - - USGS:SDTS - brook - - - - - USGS:SDTS - water gap - - - - - USGS:SDTS - culvert - - - - - Getty:TGN - reach - - - - - USGS:SDTS - rivulet - - - - - USGS:SDTS - ravine - - - - - USGS:SDTS - moat - - - - - USGS:SDTS - beck - - - - - USGS:SDTS - kill - - - - - Geonames:feature - spillway - - - - - USGS:SDTS - gut - - - - - Geonames:feature - narrows - - - - - USGS:SDTS - awawa - - - - - USGS:SDTS - runnel - - - - - USGS:SDTS - rill - - - - - Getty:TGN - run - - - - - A flowing body of water. - https://en.wikipedia.org/wiki/Watercourse - - - - - USGS:SDTS - gutter - - - - - Getty:TGN - passage - - - - - USGS:SDTS - pup - - - - - USGS:SDTS - fork - - - - - USGS:SDTS - race - - - - - USGS:SDTS - gulch - - - - - USGS:SDTS - course - - - - - USGS:SDTS - wash - - - - - USGS:SDTS - gully - - - - - Getty:TGN - gut - - - - - USGS:SDTS - spillway - - - - - - - - - - dead cave - - - - - - - - - - - - - - - - - - - - A cave without streams or drips of water. - ENVO - ENVO:00000030 - dry cave - - - A cave without streams or drips of water. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - wadi - - - A valley or ravine, bounded by relatively steep banks, which in the rainy season becomes a watercourse. - ENVO - ENVO:00000031 - EcoLexicon:wadi - FTT:157 - FTT:158 - FTT:159 - FTT:160 - FTT:161 - FTT:163 - FTT:164 - Geonames:H.WAD - Geonames:H.WADB - Geonames:H.WADJ - Geonames:H.WADS - SWEETRealm:Arroyo - SWEETRealm:Wash - TGN:21167 - TGN:21423 - TGN:21424 - The temporality of wadis is problematic in deciding whether they are watercourses or valleys. - arroyo - coulee - gully - https://en.wikipedia.org/wiki/Wadi - nullah - wadi - wadi bend - wadi junction - wadi mouth - wadis - wash - watercourse - - - USGS:SDTS - watercourse - - - - - USGS:SDTS - nullah - - - - - ADL:FTT - wash - - - - - A valley or ravine, bounded by relatively steep banks, which in the rainy season becomes a watercourse. - Geonames:feature - - - - - Geonames:feature - wadi - - - - - ADL:FTT - arroyo - - - - - ADL:FTT - wadi mouth - - - - - ADL:FTT - wadi junction - - - - - Geonames:feature - wadis - - - - - ADL:FTT - wadi bend - - - - - Geonames:feature - wadi bend - - - - - ADL:FTT - gully - - - - - ADL:FTT - coulee - - - - - Getty:TGN - coulee - - - - - - - - - - bay - - An area of water bordered by land on three sides. - ENVO - ENVO:00000032 - EcoLexicon:bay - FTT:190 - FTT:232 - FTT:235 - Geonames:H.BAY - Geonames:H.BAYS - Geonames:H.BGHT - SWEETRealm:Bay - TGN:21121 - TGN:21123 - TGN:21127 - bahia - embayment - firth - inlet - sea loch - sea lough - - - USGS:SDTS - inlet - - - - - An area of water bordered by land on three sides. - https://en.wikipedia.org/wiki/Bay - - - - - ADL:FTT - bahia - - - - - - - - - - pond - - A body of water, usually of smaller size than a lake. - ENVO - ENVO:00000033 - EcoLexicon:pond - FTT:221 - FTT:902 - FTT:904 - FTT:905 - Geonames:H.PND - Geonames:H.PNDS - Geonames:H.POOL - POOL - Pond - SPIRE:Lake_or_pond - SWEETRealm:Pond - TGN:21104 - TGN:21119 - https://en.wikipedia.org/wiki/Pond - lake - millpond - pond - ponds - pool - pool (water body) - pool (water body) - - - USGS:SDTS - pool (water body) - - - - - USGS:SDTS - millpond - - - - - A body of water, usually of smaller size than a lake. - MA:ma - - - - - NASA:earthrealm - Pond - - - - - Getty:TGN - POOL - - - - - Geonames:feature - pool - - - - - ADL:FTT - millpond - - - - - USGS:SDTS - pool - - - - - USGS:SDTS - lake - - - - - Geonames:feature - pond - - - - - Geonames:feature - ponds - - - - - ADL:FTT - pond - - - - - ADL:FTT - pool (water body) - - - - - ADL:FTT - lake - - - - - - - - - - rapids - - - - - - - - An area of broken, fast flowing water in a stream, where the slope of the bed increases (but without a prominent break of slope which might result in a waterfall), or where a gently dipping bar of harder rock outcrops. - ENVO - ENVO:00000034 - EcoLexicon:rapids - FTT:212 - Geonames:H.RPDS - RAPIDS - SWEETRealm:Torrent - TGN:21162 - cataract - https://en.wikipedia.org/wiki/Rapids - rapids - torrent - - - USGS:SDTS - cataract - - - - - Geonames:feature - rapids - - - - - RAPIDS - USGS:SDTS - - - - - USGS:SDTS - torrent - - - - - An area of broken, fast flowing water in a stream, where the slope of the bed increases (but without a prominent break of slope which might result in a waterfall), or where a gently dipping bar of harder rock outcrops. - USGS:SDTS - - - - - ADL:FTT - rapids - - - - - - - - - - marsh - - A wetland, featuring grasses, rushes, reeds, typhas, sedges, and other herbaceous plants (possibly with low-growing woody plants) in a context of shallow water. - ENVO - ENVO:00000035 - EcoLexicon:marsh - FTT:1118 - FTT:185 - FTT:945 - Geonames:H.MRSH - LTER:326 - Marsh - SPIRE:Marsh - SWEETRealm:Marsh - TGN:21322 - https://en.wikipedia.org/wiki/Marsh - marsh - quagmire - wetland - - - ADL:FTT - wetland - - - - - Marsh - NASA:earthrealm - - - - - USGS:SDTS - quagmire - - - - - ADL:FTT - quagmire - - - - - Geonames:feature - marsh - - - - - USGS:SDTS - wetland - - - - - A wetland, featuring grasses, rushes, reeds, typhas, sedges, and other herbaceous plants (possibly with low-growing woody plants) in a context of shallow water. - https://en.wikipedia.org/wiki/Marsh - - - - - - - - - - irrigation canal - - Artificial watercourse with no flow or a controlled flow used irrigation. - ENVO - ENVO:00000036 - FTT:129 - FTT:405 - Geonames:H.CNLI - canal - irrigation canal - - - Artificial watercourse with no flow or a controlled flow used irrigation. - MA:ma - - - - - ADL:FTT - irrigation canal - - - - - Geonames:feature - canal - - - - - Geonames:feature - irrigation canal - - - - - - - - - - ditch - - A small, human-made channel which has been dug for draining or irrigating the land. - ENVO - ENVO:00000037 - EcoLexicon:drain - FTT:129 - FTT:400 - FTT:403 - Geomames:DTCH - SWEETRealm:Drain - TGN:51256 - https://en.wikipedia.org/wiki/Ditch - - - A small, human-made channel which has been dug for draining or irrigating the land. - Geonames:feature - - - - - - - - - - lagoon - - A sheet of saline water separated from the open sea by sand or shingle banks. The sheet of water between an offshore reef, especially of coral and mainland. The sheet of water within a ring or horseshoe shaped atoll. - ENVO - ENVO:00000038 - EcoLexicon:lagoon - FTT:221 - FTT:898 - FTT:899 - Geonames:H.LGN - Geonames:H.LGNS - LAGOON - Lagoon - SWEETRealm:Lagoon - TGN:21125 - barrier lagoon - https://en.wikipedia.org/wiki/Lagoon - lagoon - lagoons - laguna - lake - - - ADL:FTT - laguna - - - - - Geonames:feature - lagoons - - - - - A sheet of saline water separated from the open sea by sand or shingle banks. The sheet of water between an offshore reef, especially of coral and mainland. The sheet of water within a ring or horseshoe shaped atoll. - USGS:SDTS - - - - - Lagoon - NASA:earthrealm - - - - - Geonames:feature - lagoon - - - - - USGS:SDTS - laguna - - - - - ADL:FTT - lake - - - - - LAGOON - USGS:SDTS - - - - - USGS:SDTS - barrier lagoon - - - - - - - - - - fjord - - - - - - - - - - - - - - - - - - - - A long and narrow sea inlet with high steeply sloped walled sides. A fjord is a landform created during a period of glaciation. - EcoLexicon:fiord - FTT:231 - FTT:690 - FTT:704 - Geonames:H.FJD - Geonames:H.FJDS - SWEETRealm:Fiord - SWEETRealm:Fjord - TGN:21122 - https://en.wikipedia.org/wiki/Fjord - envoPolar - - - A long and narrow sea inlet with high steeply sloped walled sides. A fjord is a landform created during a period of glaciation. - https://en.wikipedia.org/wiki/Fjord - - - - - - - - - - waterfall - - - - - - - - A sudden descent of water over a step or ledge in the bed of a river. - ENVO - ENVO:00000040 - EcoLexicon:force - EcoLexicon:waterfall - FTT:435 - FTT:436 - FTT:439 - FTT:680 - Geonames:H.FLLS - TGN:21161 - TGN:21166 - WATERFALL - cascade - cataract - fall - falls - force - https://en.wikipedia.org/wiki/Waterfall - linn - waterfalls - Should this be a hydroform? - - - USGS:SDTS - falls - - - - - ADL:FTT - fall - - - - - A sudden descent of water over a step or ledge in the bed of a river. - USGS:SDTS - - - - - USGS:SDTS - cascade - - - - - ADL:FTT - cataract - - - - - Getty:TGN - cataract - - - - - ADL:FTT - cascade - - - - - Geonames:feature - waterfalls - - - - - USGS:SDTS - WATERFALL - - - - - - - - - - tidal creek - - A tidal water channel. Creeks may often dry to a muddy channel with little or no flow at low tide, but often with significant depth of water at high tide. - ENVO - ENVO:00000041 - FTT:105 - FTT:1223 - Geonames:H.CRKT - https://en.wikipedia.org/wiki/Tidal_creek - stream - tidal creek - - - ADL:FTT - stream - - - - - A tidal water channel. Creeks may often dry to a muddy channel with little or no flow at low tide, but often with significant depth of water at high tide. - https://en.wikipedia.org/wiki/Tidal_creek - - - - - Geonames:feature - tidal creek - - - - - - - - - - drainage canal - - Artificial watercourse with no flow or a controlled flow used drainage. - ENVO - ENVO:00000042 - FTT:129 - FTT:401 - Geonames:H.CNLD - canal - drainage canal - - - Artificial watercourse with no flow or a controlled flow used drainage. - MA:ma - - - - - ADL:FTT - drainage canal - - - - - ADL:FTT - canal - - - - - Geonames:feature - drainage canal - - - - - - - - - - wetland - - - - - - - - - - - - - - - - - - An area that is inundated or saturated by surface or ground water at a frequency and duration sufficient to support, and that under normal circumstances do support, a prevalence of vegetation typically adapted for life in saturated soil conditions. - EcoLexicon:wetland - EstuarineWetland - FTT:1001 - FTT:1060 - FTT:1061 - FTT:1118 - FTT:1180 - FTT:1190 - FTT:1206 - FTT:1207 - FTT:1226 - FTT:184 - FTT:185 - FTT:228 - FTT:281 - FTT:480 - FTT:716 - FTT:883 - FTT:934 - FTT:945 - FTT:983 - Geonames:H.WTLD - LTER:630 - LacustrineWetland - MarineWetland - PalustrineWetland - RiparianWetland - SPIRE:Bog - SWEETRealm:Wetland - TGN:21301 - TGN:21304 - TGN:21305 - TerrestialWetland - WETLAND - Wetland - WetlandRegion - back marsh - backswamp - backwater - barrier flat - blanket bog - bog - cienaga - dismal - everglade - floating marsh - forested wetland - https://en.wikipedia.org/wiki/Wetland - marsh - mire - moor - morass - mud flat - muskeg - peat cutting area - peatland - quagmire - quaking bog - riparian area - slash - slough - slue - swamp forest - tulelands - wetland - - - EstuarineWetland - NASA:earthrealm - - - - - ADL:FTT - forested wetland - - - - - USGS:SDTS - swamp forest - - - - - ADL:FTT - peatland - - - - - ADL:FTT - bog - - - - - Getty:TGN - slough - - - - - USGS:SDTS - slough - - - - - USGS:SDTS - quagmire - - - - - ADL:FTT - marsh - - - - - USGS:SDTS - morass - - - - - ADL:FTT - mire - - - - - LacustrineWetland - NASA:earthrealm - - - - - USGS:SDTS - WETLAND - - - - - USGS:SDTS - back marsh - - - - - USGS:SDTS - moor - - - - - NASA:earthrealm - TerrestialWetland - - - - - NASA:earthrealm - RiparianWetland - - - - - USGS:SDTS - quaking bog - - - - - USGS:SDTS - slash - - - - - USGS:SDTS - muskeg - - - - - ADL:FTT - slue - - - - - USGS:SDTS - mire - - - - - ADL:FTT - peat cutting area - - - - - MarineWetland - NASA:earthrealm - - - - - ADL:FTT - backwater - - - - - ADL:FTT - mud flat - - - - - ADL:FTT - riparian area - - - - - USGS:SDTS - floating marsh - - - - - NASA:earthrealm - PalustrineWetland - - - - - An area that is inundated or saturated by surface or ground water at a frequency and duration sufficient to support, and that under normal circumstances do support, a prevalence of vegetation typically adapted for life in saturated soil conditions. - https://en.wikipedia.org/wiki/Wetland - - - - - USGS:SDTS - dismal - - - - - USGS:SDTS - backswamp - - - - - ADL:FTT - quagmire - - - - - Getty:TGN - bog - - - - - ADL:FTT - slough - - - - - USGS:SDTS - blanket bog - - - - - Geonames:feature - wetland - - - - - USGS:SDTS - barrier flat - - - - - NASA:earthrealm - WetlandRegion - - - - - NASA:earthrealm - Wetland - - - - - ADL:FTT - cienaga - - - - - USGS:SDTS - tulelands - - - - - USGS:SDTS - everglade - - - - - - - - - - peatland - - - - - - - - A wetland type that accumulates acidic peat, a deposit of dead plant material. - ENVO - ENVO:00000044 - EcoLexicon:peat_bog - FTT:1061 - FTT:185 - FTT:281 - FTT:983 - Geonames:H.BOG - LTER:402 - LTER:70 - Peatland - SPIRE:Bog - SWEETRealm:Peatland - TGN:21304 - bog - https://en.wikipedia.org/wiki/Peatland - mire - morass - muskeg - peat bog - wetland - envoPolar - - - ADL:FTT - wetland - - - - - Geonames:feature - bog - - - - - NASA:earthrealm - Peatland - - - - - USGS:SDTS - morass - - - - - USGS:SDTS - muskeg - - - - - USGS:SDTS - peat bog - - - - - ADL:FTT - bog - - - - - A wetland type that accumulates acidic peat, a deposit of dead plant material. - https://en.wikipedia.org/wiki/Bog - - - - - USGS:SDTS - wetland - - - - - USGS:SDTS - bog - - - - - - - - - - estuary - - - A semi-enclosed coastal body of water with one or more rivers or streams flowing into it, and with a free connection to the open sea. - EcoLexicon:estuary - Estuary - FTT:234 - Geonames:H.ESTY - LTER:182 - SWEETRealm:Estuary - TGN:21152 - estuary - https://en.wikipedia.org/wiki/Estuary - inlet - mouth - - - A semi-enclosed coastal body of water with one or more rivers or streams flowing into it, and with a free connection to the open sea. - https://en.wikipedia.org/wiki/Estuary - - - - - USGS:SDTS - inlet - - - - - USGS:SDTS - mouth - - - - - Estuary - NASA:earthrealm - - - - - Geonames:feature - estuary - - - - - - - - - - hedge - - A dense growth of shrubbery planted as a fence or boundary. - ENVO - ENVO:00000046 - HEDGE - hedgerow - https://en.wikipedia.org/wiki/Hedge - shelter belt - - - USGS:SDTS - hedgerow - - - - - HEDGE - USGS:SDTS - - - - - USGS:SDTS - shelter belt - - - - - A dense growth of shrubbery planted as a fence or boundary. - USGS:SDTS - - - - - - - - - - canopy - - - - - - - - - - - - - - - ENVO - ENVO:00000047 - EcoLexicon:canopy - LTER:82 - SWEETRealm:Canopy - https://en.wikipedia.org/wiki/Canopy - - - - - - - - navigation canal - - Artificial watercourse with no flow or a controlled flow used navigation. - ENVO - ENVO:00000048 - EcoLexicon:navigation_channel - FTT:409 - FTT:467 - Geonames:H.CHNN - Geonames:H.CNLN - TGN:51257 - navigation canal - navigation canal - navigation channel - navigation channel - ship cannal - - - ADL:FTT - navigation canal - - - - - Geonames:feature - navigation canal - - - - - Geonames:feature - navigation channel - - - - - USGS:SDTS - ship cannal - - - - - Artificial watercourse with no flow or a controlled flow used navigation. - MA:ma - - - - - ADL:FTT - navigation channel - - - - - - - - - - obsolete volcanic hydrographic feature - ENVO - ENVO:00000049 - ENVO:00000052 - ENVO:00000215 - ENVO:00000407 - ENVO:01000265 - true - - - - - - - - geyser - - A hot spring that erupts periodically, ejecting a column of hot water and steam into the air. - ENVO - ENVO:00000050 - EcoLexicon:geyser - FTT:755 - GEYSER - Geonames:H.GYSR - TGN:21171 - geyser - https://en.wikipedia.org/wiki/Geyser - thermal feature - - - A hot spring that erupts periodically, ejecting a column of hot water and steam into the air. - https://en.wikipedia.org/wiki/Geyser - - - - - Geonames:feature - geyser - - - - - ADL:FTT - thermal feature - - - - - GEYSER - USGS:SDTS - - - - - - - - - - hot spring - - A spring that is produced by the emergence of geothermally-heated groundwater from the Earth's crust. - ENVO - ENVO:00000051 - EcoLexicon:thermal_spring - FTT:732 - FTT:815 - Geonames:H.SPNT - hot spring - hotspring - https://en.wikipedia.org/wiki/Hot_spring - spring - thermal feature - thermal spring - - - - - - - - - USGS:SDTS - spring - - - - - ADL:FTT - thermal feature - - - - - Geonames:feature - hot spring - - - - - A spring that is produced by the emergence of geothermally-heated groundwater from the Earth's crust. - https://en.wikipedia.org/wiki/Hot_spring - - - - - - - - - - volcanic crater lake - - - - - - - - - - - - - - - - - - - A lake contained within a volcanic crater. - FTT:384 - FTT:590 - Geonames:H.LKC - Geonames:H.LKSC - TGN:21138 - https://en.wikipedia.org/wiki/Crater_lake - - - A lake contained within a volcanic crater. - MA:ma - https://en.wikipedia.org/wiki/Crater_lake - - - - - - - - - - freshwater marsh - - - - - - - - - - - - - - - - - - - - A marsh associated with water that contains low concentrations of salts. - ENVO - ENVO:00000053 - - - A marsh associated with water that contains low concentrations of salts. - MA:ma - - - - - - - - - - saline marsh - - - - - - - - - - - - - - - - - - - - A marsh whose water contains a considerable quantity of dissolved salts. - ENVO - ENVO:00000054 - EcoLexicon:salt_marsh - FTT:1190 - FTT:185 - Geonames:H.MRSHN - LTER:482 - TGN:21323 - https://en.wikipedia.org/wiki/Saline_marsh - salt marsh - salt marsh - salting - tidal marsh - wetland - It would be more correct to say that this has_quality salty or has_part ((soil and water) and has_increased_levels_of salt. - - - Geonames:feature - salt marsh - - - - - USGS:SDTS - salt marsh - - - - - USGS:SDTS - salting - - - - - USGS:SDTS - tidal marsh - - - - - ADL:FTT - wetland - - - - - A marsh whose water contains a considerable quantity of dissolved salts. - MA:ma - - - - - - - - - - saline evaporation pond - - - - - - - - A shallow man-made pond designed to produce salt from sea water. The seawater is fed into large ponds and water is drawn out through natural evaporation which allows the salt to be subsequently harvested. - ENVO - ENVO:00000055 - FTT:221 - FTT:906 - FTT:908 - Geonames:H.MFGN - Geonames:H.PNDN - Geonames:H.PNDSN - https://en.wikipedia.org/wiki/Salt_evaporation_pond - lake - salt evaporation pond - salt pond - salt ponds - saltern - - - ADL:FTT - salt pond - - - - - Geonames:feature - salt evaporation pond - - - - - ADL:FTT - salt evaporation pond - - - - - ADL:FTT - lake - - - - - Geonames:feature - salt pond - - - - - A shallow man-made pond designed to produce salt from sea water. The seawater is fed into large ponds and water is drawn out through natural evaporation which allows the salt to be subsequently harvested. - https://en.wikipedia.org/wiki/Salt_evaporation_ponds - - - - - Geonames:feature - salt ponds - - - - - - - - - - fishpond - - A pond or lake used for the artificial culture of fish. - ENVO - ENVO:00000056 - FTT:221 - FTT:696 - FTT:701 - Geonames:H.PNDSF - https://en.wikipedia.org/wiki/Fishpond - - - A pond or lake used for the artificial culture of fish. - MA:ma - - - - - - - - - - mangrove swamp - - An swamp formed of trees and shrubs that grow in saline coastal habitats in the tropics and subtropics. - EcoLexicon:mangrove_swamp - FTT:185 - FTT:934 - Geonames:H.MGV - MangroveForest - https://en.wikipedia.org/wiki/Mangrove_swamp - mangal - mangrove swamp - wetland - woodland - - - USGS:SDTS - wetland - - - - - An swamp formed of trees and shrubs that grow in saline coastal habitats in the tropics and subtropics. - MA:ma - - - - - Geonames:feature - mangrove swamp - - - - - ADL:FTT - wetland - - - - - MangroveForest - NASA:earthrealm - - - - - USGS:SDTS - woodland - - - - - - - - - - underground lake - - - A lake which is formed under the surface of the Earth. Such a lake may be associated with caves and aquifers and springs. - ENVO - ENVO:00000058 - FTT:445 - FTT:449 - Geonames:H.LKSB - TGN:21188 - https://en.wikipedia.org/wiki/Underground_lake - underground lake - envoPolar - - - Geonames:feature - underground lake - - - - - A lake which is formed under the surface of the Earth. Such a lake may be associated with caves and aquifers and springs. - https://en.wikipedia.org/wiki/Lake#Types_of_lakes - - - - - - - - - - underground river - - - A river that is under the surface of the Earth. - ENVO - ENVO:00000059 - TGN:21187 - https://en.wikipedia.org/wiki/Underground_river - - - A river that is under the surface of the Earth. - MA:ma - - - - - - - - - - underground stream - - - A stream that is under the surface of the Earth. - ENVO - ENVO:00000060 - - - A stream that is under the surface of the Earth. - MA:ma - - - - - - - - - - underground water body - - A geographical feature associated with water that is under the surface of the earth. - ENVO - ENVO:00000061 - This class should probably be replaced with a quality-like entity "underground" which can then be distributed to the subclasses, solving the double inheritance. - - - A geographical feature associated with water that is under the surface of the earth. - MA:ma - - - - - - - - - - populated place - - - - - - 1 - - - - - - - - - ENVO - ENVO:00000062 - FTT:1097 - FTT:33 - Geonames:P.PPL - Geonames:P.PPLS - Place or area with clustered or scattered buildings and a permanent human population. - TGN:22201 - TGN:83002 - https://en.wikipedia.org/wiki/Populated_place - inhabited place - inhabited region - place - populated locality - populated place - populated places - settlement - - - Geonames:feature - populated place - - - - - USGS:SDTS - place - - - - - USGS:SDTS - settlement - - - - - Place or area with clustered or scattered buildings and a permanent human population. - USGS:http://mapping.usgs.gov/www/ti/GNIS/gnis_users_guide_appendixc.html - - - - - Geonames:feature - populated places - - - - - Getty:TGN - inhabited place - - - - - - - - - - water body - - - - - - - - - - - - - - An accumulation of water of varying size. - ENVO - ENVO:00000063 - EcoLexicon:waterbody - FTT:131 - FTT:280 - FTT:827 - SWEETRealm:BodyOfWater - TGN:21100 - TGN:21101 - aquatic feature - bodies of water - body of water - https://en.wikipedia.org/wiki/ The term body of water most often refers to large accumulations of water, such as oceans, seas, and lakes, but it includes smaller pools of water such as ponds, wetlands, or more rarely, puddles. A body of water does not have to be still or contained; Rivers, streams, canals, and other geographical features where water moves from one place to another are also considered bodies of water. - https://en.wikipedia.org/wiki/Water_body - hydrographic feature - waterbody - - - Getty:TGN - body of water - - - - - Getty:TGN - bodies of water - - - - - An accumulation of water of varying size. - https://en.wikipedia.org/wiki/Body_of_water - - - - - ADL:FTT - body of water - - - - - ADL:FTT - hydrographic feature - - - - - - - - - - road - - An open way for the passage of vehicles, persons, or animals on land. - ENVO - ENVO:00000064 - EcoLexicon:road - FTT:1058 - FTT:1183 - FTT:1185 - FTT:1187 - FTT:431 - FTT:443 - FTT:646 - FTT:798 - FTT:884 - Geonames:R - Geonames:R.RD - Geonames:R.ST - LTER:475 - ROAD - SWEETRealm:Highway - TGN:53151 - TGN:53153 - TGN:53154 - TGN:53157 - accessway - alley - avenue - board walk - boulevard - caravan route - cart track - causeway - drive - drove - farm lane - freeway - highway - https://en.wikipedia.org/wiki/Road - intersection - lane - parkway - road - road bend - road junction - roadway - street - thorofare - thoroughfare - thruway - traffic circle - turnpike - - - An open way for the passage of vehicles, persons, or animals on land. - USGS:SDTS - - - - - ADL:FTT - caravan route - - - - - ADL:FTT - highway - - - - - ADL:FTT - traffic circle - - - - - USGS:SDTS - boulevard - - - - - USGS:SDTS - highway - - - - - USGS:SDTS - thoroughfare - - - - - Geonames:feature - street - - - - - USGS:SDTS - cart track - - - - - ADL:FTT - drive - - - - - USGS:SDTS - avenue - - - - - USGS:SDTS - freeway - - - - - ADL:FTT - street - - - - - ADL:FTT - drove - - - - - ADL:FTT - roadway - - - - - USGS:SDTS - street - - - - - ROAD - USGS:SDTS - - - - - ADL:FTT - parkway - - - - - USGS:SDTS - thruway - - - - - ADL:FTT - road bend - - - - - USGS:SDTS - turnpike - - - - - USGS:SDTS - accessway - - - - - Getty:TGN - parkway - - - - - ADL:FTT - intersection - - - - - USGS:SDTS - thorofare - - - - - ADL:FTT - causeway - - - - - USGS:SDTS - farm lane - - - - - Getty:TGN - street - - - - - USGS:SDTS - alley - - - - - Geonames:feature - road - - - - - Getty:TGN - highway - - - - - USGS:SDTS - board walk - - - - - ADL:FTT - road junction - - - - - - - - - - railway - - A permanent way having one or more rails which provides a track for cars. - ENVO - ENVO:00000065 - FTT:1132 - FTT:960 - Geonames:R - Geonames:R.RR - RAILWAY - TGN:53155 - https://en.wikipedia.org/wiki/Railway - railroad - railroad feature - - - USGS:SDTS - railroad - - - - - ADL:FTT - railroad feature - - - - - RAILWAY - USGS:SDTS - - - - - Getty:TGN - railroad - - - - - A permanent way having one or more rails which provides a track for cars. - USGS:SDTS - - - - - Geonames:feature - railroad - - - - - - - - - - man-made tunnel - - A tunnel constructed by human means. - ENVO - ENVO:00000066 - FTT:1136 - FTT:1184 - FTT:396 - FTT:397 - Geonames:R.TNL - Geonames:R.TNLRD - Geonames:R.TNLRR - Geonames:R.TNLS - TGN:51845 - canal tunnel - https://en.wikipedia.org/wiki/Tunnel - railroad tunnel - road tunnel - tunnel - tunnels - underpass - - - Geonames:feature - road tunnel - - - - - USGS:SDTS - underpass - - - - - ADL:FTT - road tunnel - - - - - Geonames:feature - tunnel - - - - - Geonames:feature - tunnels - - - - - Geonames:feature - railroad tunnel - - - - - A tunnel constructed by human means. - MA:ma - - - - - ADL:FTT - canal tunnel - - - - - ADL:FTT - railroad tunnel - - - - - ADL:FTT - tunnel - - - - - - - - - - cave - - - - - - - - ENVO - ENVO:00000067 - FTT:1071 - FTT:443 - FTT:445 - FTT:446 - FTT:447 - Geonames:S.CAVE - Naturally formed, subterranean open area or chamber. - SWEETRealm:Cave - TGN:21485 - TGN:21486 - cavern - grotto - https://en.wikipedia.org/wiki/Cave - notch - - - USGS:SDTS - notch - - - - - Naturally formed, subterranean open area or chamber. - USGS:SDTS - - - - - USGS:SDTS - cavern - - - - - ADL:FTT - cavern - - - - - USGS:SDTS - grotto - - - - - - - - - - tunnel - - - - - - - - An underground or underwater passage. - FTT:445 - FTT:448 - Geonames:R.TNLN - SWEETRealm:Tunnel - TGN:21447 - TUNNEL - cave - https://en.wikipedia.org/wiki/Tunnel - natural tunnel - - - TUNNEL - USGS:SDTS - - - - - ADL:FTT - cave - - - - - Geonames:feature - natural tunnel - - - - - An underground or underwater passage. - USGS:SDTS - - - - - Getty:TGN - natural tunnel - - - - - - - - - - distributary - - - - - - - - - - - - - - - - - - - A stream that branches off and flows away from a main stream channel. They are a common feature of river deltas. - ENVO - ENVO:00000069 - FTT:636 - Geonames:H.STMD - distributary - https://en.wikipedia.org/wiki/Distributary - stream - stream distributary - watercourse - - - Getty:TGN - stream distributary - - - - - A stream that branches off and flows away from a main stream channel. They are a common feature of river deltas. - https://en.wikipedia.org/wiki/Distributary - - - - - Geonames:feature - distributary - - - - - ADL:FTT - distributary - - - - - ADL:FTT - stream - - - - - USGS:SDTS - watercourse - - - - - - - - - - construction - - - - - - - - - - - - - - - - - - - - - - - - - A feature that has been constructed by deliberate human effort. - "constructed" should probably be made something like a quality and this class obsoleted or filled only by inference - constructed feature - - - A feature that has been constructed by deliberate human effort. - MA:ma - - - - - - - - - - fault cave - - A cave developed along a fault or fault zone, either by movement of the fault or by preferential solution along it. - ENVO - ENVO:00000071 - - - A cave developed along a fault or fault zone, either by movement of the fault or by preferential solution along it. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - aquaduct - - ENVO - ENVO:00000072 - FTT:128 - Geonames:H.CNLA - SWEETRealm:Aqueduct - Structure designed to transport water from a remote source, usually by gravity. - TGN:51258 - WATERCOURSE BRIDGE - aqueduct - https://en.wikipedia.org/wiki/Aquaduct - - - ADL:FTT - Structure designed to transport water from a remote source, usually by gravity. - - - - - Geonames:feature - aqueduct - - - - - Getty:TGN - aqueduct - - - - - USGS:SDTS - WATERCOURSE BRIDGE - - - - - USGS:SDTS - aqueduct - - - - - - - - - - building - - - - - - - - A permanent walled and roofed construction. - BUILDING - ENVO - ENVO:00000073 - FTT:42 - Geonames:S.BLDG - LTER:76 - TGN:51011 - building - https://en.wikipedia.org/wiki/Building - - - A permanent walled and roofed construction. - USGS:SDTS - - - - - Geonames:feature - building - - - - - BUILDING - USGS:SDTS - - - - - - - - - - dam - - A barrier constructed across a watercourse to control the flow or raise the level of water. - DAM - Dam - ENVO - ENVO:00000074 - EcoLexicon:dam - FTT:599 - FTT:600 - Geonames:S.DAM - SWEETRealm:Dam - TGN:51253 - barrage - dam - dam site - https://en.wikipedia.org/wiki/Dam - - - DAM - USGS:SDTS - - - - - Dam - NASA:earthrealm - - - - - ADL:FTT - dam site - - - - - A barrier constructed across a watercourse to control the flow or raise the level of water. - USGS:SDTS - - - - - Geonames:feature - dam - - - - - USGS:SDTS - barrage - - - - - - - - - - bridge - - A built structure erected over a depression or obstacle to carry traffic or some facility such as a pipeline. - BRIDGE - ENVO - ENVO:00000075 - EcoLexicon:bridge - FTT:297 - Geonames:S.BDG - TGN:51841 - bridge - covered bridge - footbridge - https://en.wikipedia.org/wiki/Bridge - overpass - - - BRIDGE - USGS:SDTS - - - - - USGS:SDTS - overpass - - - - - A built structure erected over a depression or obstacle to carry traffic or some facility such as a pipeline. - USGS:SDTS - - - - - USGS:SDTS - covered bridge - - - - - USGS:SDTS - footbridge - - - - - Geonames:feature - bridge - - - - - - - - - - mine - - - - - - - - An excavation in the Earth for the purpose of extracting earth materials. - EcoLexicon:mine - FTT:14 - FTT:968 - Geonames:L.MNA - Geonames:S.MN - TGN:54211 - TGN:54212 - - - An excavation in the Earth for the purpose of extracting earth materials. - USGS:SDTS - https://en.wikipedia.org/wiki/Mine - - - - - - - - - - agricultural feature - - AgriculturalLands - As with other classes that are "features", the subclasses of this class are being moved to more informative locations. Their relation to agriculture will be modelled by something more akin to a quality or relation to an agricultural process. - ENVO - ENVO:00000077 - FTT:1246 - FTT:1247 - FTT:44 - FTT:45 - FTT:46 - FTT:48 - FTT:50 - FTT:51 - FTT:52 - FTT:57 - FTT:60 - FTT:62 - FTT:63 - FTT:64 - FTT:72 - FTT:74 - Geonames:L.AGRC - Geonames:L.RESA - Geonames:S.NSY - TGN:55001 - agricultural colony - agricultural facility - agricultural land - agricultural reserve - agricultural site - bailing station - barn - cattle dipping tank - corral - dairy - feedlot - grange - grazing allotment - irrigated field - nursery - pastoral site - sheepfold - stockyard - - - ADL:FTT - barn - - - - - ADL:FTT - bailing station - - - - - ADL:FTT - nursery - - - - - Getty:TGN - agricultural land - - - - - ADL:FTT - grazing allotment - - - - - ADL:FTT - irrigated field - - - - - ADL:FTT - corral - - - - - ADL:FTT - agricultural site - - - - - ADL:FTT - agricultural reserve - - - - - ADL:FTT - agricultural facility - - - - - ADL:FTT - pastoral site - - - - - ADL:FTT - feedlot - - - - - Geonames:feature - agricultural reserve - - - - - Geonames:feature - nursery - - - - - ADL:FTT - dairy - - - - - Geonames:feature - agricultural colony - - - - - ADL:FTT - grange - - - - - ADL:FTT - stockyard - - - - - AgriculturalLands - NASA:earthrealm - - - - - ADL:FTT - cattle dipping tank - - - - - ADL:FTT - sheepfold - - - - - - - - - - farm - - A tract of crop or grazing land, as well as the group of buildings with and often surrounding a farmhouse, including barns, sheds, and other outbuildings, used for agricultural production. - ENVO - ENVO:00000078 - FARM - FTT:45 - FTT:58 - FTT:59 - FTT:69 - Geonames:S.FRM - Geonames:S.FRMS - Geonames:S.RNCH - TGN:54011 - agricultural site - farm - farms - farmstead - https://en.wikipedia.org/wiki/Farm - nursery - ranch - - - USGS:SDTS - ranch - - - - - ADL:FTT - agricultural site - - - - - Geonames:feature - ranch - - - - - USGS:SDTS - nursery - - - - - Geonames:feature - farm - - - - - A tract of crop or grazing land, as well as the group of buildings with and often surrounding a farmhouse, including barns, sheds, and other outbuildings, used for agricultural production. - USGS:SDTS - - - - - ADL:FTT - farmstead - - - - - Getty:TGN - ranch - - - - - FARM - USGS:SDTS - - - - - Geonames:feature - farms - - - - - - - - - - flume - - An open artificial water channel, that leads water from a diversion dam or weir completely aside a natural flow, often an elevated box structure (typically wood) that follows the natural contours of the land. - ENVO - ENVO:00000079 - EcoLexicon:flume - FTT:129 - FTT:404 - canal - flume (manmade) - https://en.wikipedia.org/wiki/Flume - watercourse - - - An open artificial water channel, that leads water from a diversion dam or weir completely aside a natural flow, often an elevated box structure (typically wood) that follows the natural contours of the land. - https://en.wikipedia.org/wiki/Flume - - - - - ADL:FTT - flume (manmade) - - - - - USGS:SDTS - watercourse - - - - - ADL:FTT - canal - - - - - - - - - - mountain range - - - - - - - - A series of connected and aligned mountains or mountain ridges. - ENVO - ENVO:00000080 - EcoLexicon:mountain_range - FTT:548 - FTT:995 - FTT:997 - Geonamaes:MTS - MOUNT RANGE - SWEETRealm:MountainRange - TGN:21431 - TGN:21432 - cordillera - https://en.wikipedia.org/wiki/Mountain_range - mountain chain - mountain group - mountain range - mountain system - sierra - envoPolar - - - A series of connected and aligned mountains or mountain ridges. - USGS:SDTS - - - - - ADL:FTT - sierra - - - - - Geonames:feature - mountain range - - - - - Getty:TGN - mountain system - - - - - MOUNT RANGE - USGS:SDTS - - - - - ADL:FTT - cordillera - - - - - - - - - - mountain - - A landform that extends above the surrounding terrain in a limited area. A mountain is generally steeper than a hill, but there is no universally accepted standard definition for the height of a mountain or a hill although a mountain usually has an identifiable summit and a local relief of more than 300m. - ENVO - ENVO:00000081 - EcoLexicon:mountain - FTT:1000 - FTT:118 - FTT:460 - FTT:548 - FTT:713 - FTT:896 - FTT:993 - Geonames:T.MT - Geonames:T.MTS - Mountain - SWEETRealm:Mountain - TGN:21430 - TGN:21434 - cerro - cordillera - foothill - https://en.wikipedia.org/wiki/Mountain - knoll - mound - mount - mountain - mountains - envoPolar - - - ADL:FTT - foothill - - - - - USGS:SDTS - mound - - - - - Geonames:feature - mountain - - - - - USGS:SDTS - foothill - - - - - USGS:SDTS - knoll - - - - - ADL:FTT - cerro - - - - - USGS:SDTS - mount - - - - - Mountain - NASA:earthrealm - - - - - ADL:FTT - cordillera - - - - - ADL:FTT - knoll - - - - - A landform that extends above the surrounding terrain in a limited area. A mountain is generally steeper than a hill, but there is no universally accepted standard definition for the height of a mountain or a hill although a mountain usually has an identifiable summit and a local relief of more than 300m. - https://en.wikipedia.org/wiki/Mountain#United_Kingdom - - - - - Geonames:feature - mountains - - - - - - - - - - hill range - - - - - - - - A group of hills bordered by lowlands. - ENVO - ENVO:00000082 - - - A group of hills bordered by lowlands. - MA:ma - - - - - - - - - - hill - - A rounded elevation of limited extent rising above the surrounding land with local relief of less than 300m. - ENVO - ENVO:00000083 - EcoLexicon:hill - FTT:118 - FTT:468 - FTT:713 - FTT:799 - FTT:896 - Geonames:T.HLL - Geonames:T.HLLS - SWEETRealm:Hill - TGN:21437 - TGN:21438 - cerro - foothill - hill - hillock - hills - https://en.wikipedia.org/wiki/Hill - knoll - mount - mountain - - - Geonames:feature - hill - - - - - USGS:SDTS - knoll - - - - - USGS:SDTS - mount - - - - - ADL:FTT - mountain - - - - - ADL:FTT - foothill - - - - - Geonames:feature - hills - - - - - USGS:SDTS - hillock - - - - - A rounded elevation of limited extent rising above the surrounding land with local relief of less than 300m. - Geonames:feature - - - - - USGS:SDTS - foothill - - - - - - - - - - mountain pass - - - - - - - - - - - - - - A lower point that allows easier access through a mountain range. A pass has the general form of a saddle between two mountains. - ENVO - ENVO:00000084 - EcoLexicon:mountain_pass - FTT:510 - FTT:612 - FTT:738 - FTT:739 - FTT:740 - Geonames:T.GAP - Geonames:T.PASS - Geonames:T.SDL - SWEETRealm:Pass - TGN:21433 - TGN:21436 - TGN:21524 - col - defile - gap - https://en.wikipedia.org/wiki/Mountain_pass - notch - pass - pass - saddle - saddle (physiographic) - sill (physiographic) - envoPolar - - - A lower point that allows easier access through a mountain range. A pass has the general form of a saddle between two mountains. - https://en.wikipedia.org/wiki/Mountain_pass - - - - - Getty:TGN - gap - - - - - USGS:SDTS - defile - - - - - ADL:FTT - defile - - - - - USGS:SDTS - notch - - - - - USGS:SDTS - col - - - - - ADL:FTT - pass - - - - - ADL:FTT - sill (physiographic) - - - - - USGS:SDTS - gap - - - - - Getty:TGN - saddle - - - - - USGS:SDTS - saddle - - - - - Geonames:feature - saddle - - - - - ADL:FTT - col - - - - - Geonames:feature - pass - - - - - ADL:FTT - saddle (physiographic) - - - - - - - - - - alpine glacier - - - - - - - - A glacier contained in the site of a mountain valley. - ENVO - ENVO:00000085 - http://orcid.org/0000-0002-4366-3088 - We need to added classes such as "valley site" in order to fully axiomatize this class - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - A glacier contained in the site of a mountain valley. - https://en.wikipedia.org/wiki/Glacier#Types - https://pubs.usgs.gov/of/2004/1216/text.html - https://en.wikipedia.org/wiki/Alpine_glacier - - - - - - - - - - plain - - - - - - - - A region of general uniform slope, comparatively level, and of considerable extent. - ENVO - ENVO:00000086 - EcoLexicon:plain - FTT:707 - FTT:874 - FTT:926 - Geonames:T.PLN - PLAIN - Plain - SWEETRealm:Plain - TGN:21461 - https://en.wikipedia.org/wiki/Plain - interfluve - llanos - outwash plain - plain - - - USGS:SDTS - outwash plain - - - - - ADL:FTT - llanos - - - - - PLAIN - USGS:SDTS - - - - - ADL:FTT - interfluve - - - - - A region of general uniform slope, comparatively level, and of considerable extent. - USGS:SDTS - - - - - NASA:earthrealm - Plain - - - - - Geonames:feature - plain - - - - - - - - - - cliff - - A high, steep, or overhanging face of rock. - CLIFF - ENVO - ENVO:00000087 - EcoLexicon:cliff - FTT:268 - FTT:269 - FTT:491 - FTT:492 - Geonames:T.CLF - SWEETRealm:Cliff - TGN:21487 - TGN:21488 - beach scarp - bluff - ceja - cliff - https://en.wikipedia.org/wiki/Cliff - ice cliff - palisade - precipice - scar - scarp - scaw - scraps - - - USGS:SDTS - scarp - - - - - USGS:SDTS - scar - - - - - ADL:FTT - scraps - - - - - A high, steep, or overhanging face of rock. - USGS:SDTS - - - - - Geonames:feature - cliff - - - - - USGS:SDTS - ice cliff - - - - - USGS:SDTS - palisade - - - - - ADL:FTT - bluff - - - - - USGS:SDTS - beach scarp - - - - - USGS:SDTS - bluff - - - - - USGS:SDTS - ceja - - - - - USGS:SDTS - scaw - - - - - USGS:SDTS - precipice - - - - - CLIFF - USGS:SDTS - - - - - - - - - - sea cliff - - - - - - - - - - - - - - - - - - - - - - - - - - A cliff that is a margin of a sea or ocean. - ENVO - ENVO:00000088 - coastal cliff - https://en.wikipedia.org/wiki/Sea_cliff - marine cliff - envoPolar - - - A cliff that is a margin of a sea or ocean. - MA:ma - - - - - USGS:SDTS - marine cliff - - - - - - - - - - inland cliff - - ENVO - ENVO:00000089 - EcoLexicon:crag - FTT:589 - crag - - - ADL:FTT - crag - - - - - USGS:SDTS - crag - - - - - - - - - - coastal plain - - - - - - - - - - - - - - - - - - - An area of flat, low-lying land adjacent to a coast and separated from the interior by other features. - ENVO - ENVO:00000090 - EcoLexicon:coastal_plain - EcoLexicon:coastal_zone - FTT:240 - FTT:499 - FTT:500 - FTT:501 - FTT:502 - FTT:503 - FTT:504 - SWEETRealm:CoastalPlain - https://en.wikipedia.org/wiki/Coastal_plain - - - An area of flat, low-lying land adjacent to a coast and separated from the interior by other features. - https://en.wikipedia.org/wiki/Coastal_plain - - - - - - - - - - beach - - - - - - - - A landform consisting of loose rock particles such as sand, gravel, shingle, pebbles, cobble, or even shell fragments along the shoreline of a body of water. - Beach - ENVO - ENVO:00000091 - EcoLexicon:beach - EcoLexicon:to_beach - FTT:237 - FTT:239 - Geonames:T.BCH - Geonames:T.BCHS - SWEETRealm:Beach - TGN:21482 - beach - beach berm - beaches - foreshore flats - https://en.wikipedia.org/wiki/Beach - lagoon beach - rivage - strand - - - USGS:SDTS - strand - - - - - Geonames:feature - beaches - - - - - ADL:FTT - strand - - - - - USGS:SDTS - foreshore flats - - - - - Beach - NASA:earthrealm - - - - - USGS:SDTS - lagoon beach - - - - - USGS:SDTS - beach berm - - - - - Geonames:feature - beach - - - - - A landform consisting of loose rock particles such as sand, gravel, shingle, pebbles, cobble, or even shell fragments along the shoreline of a body of water. - https://en.wikipedia.org/wiki/Beach - - - - - USGS:SDTS - rivage - - - - - - - - - - sea beach - - - - - - - - - - - - - - - - - - - - - - - - - - A landform consisting of loose rock particles such as sand, gravel, shingle, pebbles, cobble, or even shell fragments along the shoreline of a sea. - ENVO - ENVO:00000092 - https://en.wikipedia.org/wiki/Strand - strand - - - A landform consisting of loose rock particles such as sand, gravel, shingle, pebbles, cobble, or even shell fragments along the shoreline of a sea. - https://en.wikipedia.org/wiki/Beach - - - - - - - - - - lacustrine beach - - - - - - - - - - - - - - - - - - - - A landform consisting of loose rock particles such as sand, gravel, shingle, pebbles, cobble, or even shell fragments along the shoreline of a lake. - ENVO - ENVO:00000093 - - - A landform consisting of loose rock particles such as sand, gravel, shingle, pebbles, cobble, or even shell fragments along the shoreline of a lake. - MA:ma - - - - - - - - - - volcanic feature - - - - - - - - - - - - - - - - - - - A feature associated with a volcano, an opening, or rupture, in the Earth's surface or crust, which allows hot, molten rock, ash and gases to escape from deep below the surface. - ENVO - ENVO:00000094 - FTT:591 - TGN:21407 - volcanic landform - - - A feature associated with a volcano, an opening, or rupture, in the Earth's surface or crust, which allows hot, molten rock, ash and gases to escape from deep below the surface. - https://en.wikipedia.org/wiki/Volcano - - - - - Getty:TGN - volcanic landform - - - - - - - - - - obsolete lava field - A feature formed by cooled lava, the molten rock that is expelled by a volcano during an eruption. - ENVO - ENVO:00000095 - ENVO:01000437 - EcoLexicon:lava_flow - FTT:916 - FTT:917 - Geonames:T.LAVA - TGN:21612 - https://en.wikipedia.org/wiki/Lava_field - lava area - lava flow - lava plain - true - - - A feature formed by cooled lava, the molten rock that is expelled by a volcano during an eruption. - MA:ma - - - - - Geonames:feature - lava area - - - - - Getty:TGN - lava flow - - - - - ADL:FTT - lava area - - - - - - - - - - caldera - - - - - - - - - - A feature formed by the collapse of land following a volcanic eruption. - FTT:384 - Geonames:T.CLDA - TGN:21409 - caldera - crater - https://en.wikipedia.org/wiki/Caldera - - - USGS:SDTS - crater - - - - - Geonames:feature - caldera - - - - - A feature formed by the collapse of land following a volcanic eruption. - https://en.wikipedia.org/wiki/Caldera - - - - - - - - - - desert - - - - - - - - - - - - - - - - - - - A region rendered barren or partially barren by environmental extremes, especially by low rainfall. - DESERT - ENVO - ENVO:00000097 - EcoLexicon:desert - FTT:1 - FTT:188 - Geonames:T.DSRT - LTER:147 - SWEETRealm:Desert - TGN:21201 - arid region - desert - https://en.wikipedia.org/wiki/Desert - envoPolar - - - Geonames:feature - desert - - - - - A region rendered barren or partially barren by environmental extremes, especially by low rainfall. - USGS:SDTS - - - - - ADL:FTT - arid region - - - - - DESERT - USGS:SDTS - - - - - - - - - - island - - - - - - - - - - - - - - - - - - - - - Area of dry or relatively dry land surrounded by water or low wetland. - ENVO - ENVO:00000098 - EcoLexicon:island - FTT:147 - FTT:450 - FTT:886 - FTT:887 - FTT:888 - FTT:889 - Geonames:T.ISL - Geonames:T.ISLS - SWEETRealm:Island - TGN:21468 - TGN:21469 - TGN:21471 - TGN:21475 - cay - eyot - holm - https://en.wikipedia.org/wiki/Island - hummock - isle - islet - key - envoPolar - - - USGS:SDTS - cay - - - - - Getty:TGN - islet - - - - - USGS:SDTS - islet - - - - - USGS:SDTS - hummock - - - - - USGS:SDTS - key - - - - - Area of dry or relatively dry land surrounded by water or low wetland. - USGS:SDTS - - - - - ADL:FTT - isle - - - - - ADL:FTT - islet - - - - - - - - - - artificial island - - An island constructed by human effort. - ENVO - ENVO:00000099 - FTT:1023 - FTT:171 - Geonames:T.ISLF - artificial island - https://en.wikipedia.org/wiki/Artificial_island - offshore platform - - - An island constructed by human effort. - MA:ma - - - - - ADL:FTT - offshore platform - - - - - Geonames:feature - artificial island - - - - - - - - - - valley - - - - - - - - - - - - - - A depression which has been formed as a result of erosion by water or ice and which is low-lying, bordered by higher ground, and especially elongate. - EcoLexicon:valley - FTT:158 - FTT:166 - FTT:418 - FTT:761 - FTT:811 - FTT:949 - Geonames:T.GRGE - Geonames:T.VAL - Geonames:T.VALS - SWEETRealm:Valley - TGN:21425 - TGN:21451 - TGN:21452 - TGN:21453 - chasm - coulee - dale - glacial gorge - glacial trough - glen - goe - gorge - graben - gulch - gully - hollow - lavaka - median valley - moat - ravine - re-entrant - seachannel - shelf valley - strath - trench - vale - water gap - Valleys are typically located between hills our mountains. - - - ADL:FTT - median valley - - - - - USGS:SDTS - gully - - - - - USGS:SDTS - gorge - - - - - USGS:SDTS - chasm - - - - - USGS:SDTS - goe - - - - - Getty:TGN - hollow - - - - - USGS:SDTS - coulee - - - - - USGS:SDTS - graben - - - - - USGS:SDTS - hollow - - - - - A depression which has been formed as a result of erosion by water or ice and which is low-lying, bordered by higher ground, and especially elongate. - ADL:FTT - https://en.wikipedia.org/wiki/Valley - - - - - USGS:SDTS - strath - - - - - Getty:TGN - gully - - - - - USGS:SDTS - ravine - - - - - USGS:SDTS - trench - - - - - ADL:FTT - glen - - - - - USGS:SDTS - glacial gorge - - - - - ADL:FTT - hollow - - - - - USGS:SDTS - moat - - - - - USGS:SDTS - seachannel - - - - - USGS:SDTS - gulch - - - - - Geonames:feature - shelf valley - - - - - USGS:SDTS - dale - - - - - USGS:SDTS - glen - - - - - USGS:SDTS - glacial trough - - - - - Geonames:feature - gorge - - - - - USGS:SDTS - re-entrant - - - - - USGS:SDTS - water gap - - - - - Geonames:feature - median valley - - - - - - - - - - delta - - A tract of alluvium formed at the mouth of a river where the deposition ofsome of its load exceeds its rate of removal, crossed by the divergent channels (distributaries) of the river. - DELTA - Delta - ENVO - ENVO:00000101 - EcoLexicon:delta - FTT:97 - Geonames:T.DLTA - SWEETRealm:Delta - TGN:21164 - TGN:21422 - alluvial fan - bay delta - canyon delta - delta - fan - fan delta - https://en.wikipedia.org/wiki/Delta - outwash - outwash plain - pass (delta) - - - USGS:SDTS - outwash - - - - - Getty:TGN - pass (delta) - - - - - Delta - NASA:earthrealm - - - - - USGS:SDTS - fan - - - - - USGS:SDTS - outwash plain - - - - - Geonames:feature - delta - - - - - USGS:SDTS - bay delta - - - - - USGS:SDTS - fan delta - - - - - A tract of alluvium formed at the mouth of a river where the deposition ofsome of its load exceeds its rate of removal, crossed by the divergent channels (distributaries) of the river. - USGS:SDTS - - - - - USGS:SDTS - alluvial fan - - - - - DELTA - USGS:SDTS - - - - - USGS:SDTS - canyon delta - - - - - - - - - - cave entrance - - - - - - - - Cueva de Altamira - ENVO - ENVO:00000102 - FTT:444 - - - - - - - - mangrove island - - - An island formed of trees and shrubs that grow in saline coastal habitats in the tropics and subtropics. - ENVO - ENVO:00000103 - FTT:147 - FTT:891 - Geonames:T.ISLM - island - mangrove island - - - ADL:FTT - island - - - - - Geonames:feature - mangrove island - - - - - An island formed of trees and shrubs that grow in saline coastal habitats in the tropics and subtropics. - https://en.wikipedia.org/wiki/Mangrove - - - - - - - - - - undersea feature - - ENVO - ENVO:00000104 - EcoLexicon:fan - EcoLexicon:platform - EcoLexicon:ravine - FTT:1020 - FTT:1137 - FTT:1176 - FTT:1193 - FTT:1194 - FTT:1195 - FTT:1196 - FTT:5 - FTT:810 - FTT:984 - Geonames:FRKU - Geonames:FRSU - Geonames:MDVU - Geonames:PLFU - Geonames:RAVU - Geonames:RMPU - Geonames:U.BSNU - Geonames:U.EDGU - Geonames:U.ESCU - Geonames:U.FANU - Geonames:U.FLTU - Geonames:U.FURU - Geonames:U.GAPU - Geonames:U.GLYU - Geonames:U.HOLU - Geonames:U.LDGU - Geonames:U.LEVU - Geonames:U.PLNU - Geonames:U.PLTU - Geonames:U.PNLU - Geonames:U.PRVU - Geonames:U.RDGU - Geonames:U.RDSU - Geonames:U.RISU - Geonames:U.SDLU - Geonames:U.SHVU - Geonames:U.SILU - Geonames:U.SPRU - Geonames:U.TERU - Geonames:U.VALU - Geonames:U.VLSU - TGN:23001 - TGN:23116 - TGN:23117 - TGN:23118 - TGN:23135 - TGN:23162 - TGN:23181 - TGN:23182 - TGN:23183 - TGN:23184 - TGN:23188 - TGN:23192 - TGN:23193 - TGN:23194 - TGN:23195 - TGN:23196 - TGN:23211 - TGN:23212 - TGN:23301 - TGN:23411 - TGN:23412 - TGN:23413 - TGN:23415 - TGN:23421 - TGN:23423 - TGN:23424 - TGN:23431 - TGN:23453 - TGN:23461 - TGN:23463 - TGN:23467 - TGN:23550 - basin - escarpment - fan - flat - fork - forks - furrow - gap - gully - hole - hole (seafloor) - ledge - levee - median valley - moat (seafloor) - ocean floor feature - pinnacle - plain - plateau - platform - province - ramp - ramp (seafloor) - ravine - ridge - ridges - rise - rise (seafloor) - saddle - seafloor feature - shelf edge - sill - spur - subsea feature - terrace - tongue (seafloor) - undersea bank - undersea basin - undersea bench - undersea cliff - undersea fan - undersea fork - undersea fracture zone - undersea furrow - undersea gap - undersea hole - undersea ledge - undersea levee - undersea median valley - undersea moat - undersea peak - undersea pinnacle - undersea plain - undersea platform - undersea ramp - undersea rise - undersea saddle - undersea shelf - undersea shelf edge - undersea shelf valley - undersea sill - undersea slope - undersea spur - undersea terrace - undersea tongue - undersea valley - underwater feature - valley - valleys - - - Getty:TGN - undersea hole - - - - - Getty:TGN - undersea fracture zone - - - - - Getty:TGN - undersea peak - - - - - Geonames:feature - province - - - - - Geonames:feature - plain - - - - - ADL:FTT - hole (seafloor) - - - - - Getty:TGN - undersea tongue - - - - - Geonames:feature - hole - - - - - Getty:TGN - undersea shelf valley - - - - - Getty:TGN - undersea pinnacle - - - - - Geonames:feature - ridge - - - - - Getty:TGN - undersea plain - - - - - Geonames:feature - platform - - - - - Geonames:feature - levee - - - - - Getty:TGN - undersea slope - - - - - ADL:FTT - underwater feature - - - - - Geonames:feature - furrow - - - - - Geonames:feature - plateau - - - - - Geonames:feature - shelf edge - - - - - Geonames:feature - forks - - - - - Getty:TGN - undersea fork - - - - - Geonames:feature - sill - - - - - Getty:TGN - undersea bank - - - - - Getty:TGN - undersea bench - - - - - ADL:FTT - moat (seafloor) - - - - - ADL:FTT - subsea feature - - - - - Geonames:feature - fan - - - - - ADL:FTT - rise (seafloor) - - - - - Getty:TGN - undersea valley - - - - - Geonames:feature - spur - - - - - Geonames:feature - median valley - - - - - Getty:TGN - undersea shelf edge - - - - - ADL:FTT - tongue (seafloor) - - - - - Getty:TGN - undersea moat - - - - - Getty:TGN - undersea sill - - - - - Geonames:feature - ramp - - - - - Geonames:feature - gap - - - - - Getty:TGN - undersea terrace - - - - - Getty:TGN - undersea median valley - - - - - Geonames:feature - flat - - - - - Getty:TGN - undersea basin - - - - - Getty:TGN - undersea fan - - - - - Geonames:feature - saddle - - - - - Getty:TGN - undersea ledge - - - - - Geonames:feature - terrace - - - - - Getty:TGN - undersea ramp - - - - - Geonames:feature - valleys - - - - - Geonames:feature - valley - - - - - Getty:TGN - undersea levee - - - - - Geonames:feature - fork - - - - - Geonames:feature - gully - - - - - Geonames:feature - ridges - - - - - Geonames:feature - rise - - - - - Geonames:feature - basin - - - - - Geonames:feature - escarpment - - - - - Geonames:feature - ravine - - - - - ADL:FTT - ocean floor feature - - - - - Getty:TGN - undersea platform - - - - - Getty:TGN - undersea furrow - - - - - ADL:FTT - ramp (seafloor) - - - - - Getty:TGN - undersea rise - - - - - Geonames:feature - pinnacle - - - - - Geonames:feature - ledge - - - - - Getty:TGN - undersea shelf - - - - - Getty:TGN - undersea spur - - - - - Getty:TGN - undersea cliff - - - - - Getty:TGN - undersea saddle - - - - - ADL:FTT - seafloor feature - - - - - Getty:TGN - undersea gap - - - - - - - - - - lake surface - - - - - - - - - - - - - - ENVO - ENVO:00000105 - - - - - - - - grassland - - An area in which grasses (Graminae) are a significant component of the vegetation. - EcoLexicon:grassland - FTT:259 - FTT:760 - FTT:766 - GRASSLAND - Geonames:V.GRSLD - Grassland - LTER:232 - TGN:21604 - TGN:54052 - down - downland - downs - glade - grassland - grazing area - herbaceous area - https://en.wikipedia.org/wiki/Grassland - range - - - GRASSLAND - USGS:SDTS - - - - - USGS:SDTS - glade - - - - - USGS:SDTS - herbaceous area - - - - - USGS:SDTS - down - - - - - USGS:SDTS - downland - - - - - USGS:SDTS - downs - - - - - USGS:SDTS - range - - - - - ADL:FTT - grazing area - - - - - Grassland - NASA:earthrealm - - - - - Getty:TGN - grazing area - - - - - An area in which grasses (Graminae) are a significant component of the vegetation. - https://en.wikipedia.org/wiki/Grassland - - - - - Geonames:feature - grassland - - - - - ADL:FTT - glade - - - - - - - - - - heath - - An upland moor or sandy area dominated by low shrubby vegetation including heather. - ENVO - ENVO:00000107 - FTT:1191 - FTT:792 - Geonames:V.HTH - SPIRE:Heath - TGN:21609 - heath - https://en.wikipedia.org/wiki/Heath - shrubland - wetland - woodland - - - USGS:SDTS - woodland - - - - - Geonames:feature - heath - - - - - USGS:SDTS - wetland - - - - - An upland moor or sandy area dominated by low shrubby vegetation including heather. - Geonames:feature - - - - - ADL:FTT - shrubland - - - - - - - - - - meadow - - A habitat of rolling or flat terrain where grasses predominate. Typically, what is called a meadow has more biodiversity than a grassland as the former contains not only grasses but a significant variety of annual, biennial and perennial plants. - ENVO - ENVO:00000108 - FTT:259 - FTT:767 - Geonames:V.MDW - LTER:330 - TGN:21613 - grassland - hay meadow - https://en.wikipedia.org/wiki/Meadow - meadow - - - USGS:SDTS - grassland - - - - - Geonames:feature - meadow - - - - - USGS:SDTS - hay meadow - - - - - A habitat of rolling or flat terrain where grasses predominate. Typically, what is called a meadow has more biodiversity than a grassland as the former contains not only grasses but a significant variety of annual, biennial and perennial plants. - https://en.wikipedia.org/wiki/Meadow - - - - - ADL:FTT - grassland - - - - - - - - - - woodland - - FTT:1083 - FTT:505 - FTT:506 - FTT:719 - FTT:774 - Geonames:V.GRVPN - LTER:503 - Land having a cover of trees, shrubs, or both. - SWEETRealm:Break - SWEETRealm:Scrub - TGN:21631 - TGN:21632 - TGN:21641 - WOODLAND - brigalow - caatinga - chanaral - coniferous forest - copse - deciduous forest - equatorial forest - equatorial rain forest - garique - grove - https://en.wikipedia.org/wiki/Woodland - jungle - mallee scrub - monsoon forest - moor - mott - motte - mulga - mulga scrub - pine grove - rain forest - reforested area - sagebrush - scrub - shrub - silva - stand - taiga - thicket - thorn forest - tropical rain forest - wood - wooded area - - - Getty:TGN - jungle - - - - - USGS:SDTS - grove - - - - - Getty:TGN - wood - - - - - USGS:SDTS - motte - - - - - USGS:SDTS - tropical rain forest - - - - - ADL:FTT - grove - - - - - USGS:SDTS - silva - - - - - USGS:SDTS - caatinga - - - - - USGS:SDTS - sagebrush - - - - - USGS:SDTS - brigalow - - - - - USGS:SDTS - thorn forest - - - - - USGS:SDTS - copse - - - - - USGS:SDTS - deciduous forest - - - - - Land having a cover of trees, shrubs, or both. - USGS:SDTS - - - - - USGS:SDTS - mulga scrub - - - - - USGS:SDTS - stand - - - - - USGS:SDTS - taiga - - - - - Geonames:feature - pine grove - - - - - ADL:FTT - wood - - - - - ADL:FTT - rain forest - - - - - USGS:SDTS - equatorial forest - - - - - USGS:SDTS - wood - - - - - USGS:SDTS - mulga - - - - - USGS:SDTS - thicket - - - - - Getty:TGN - rain forest - - - - - USGS:SDTS - equatorial rain forest - - - - - USGS:SDTS - wooded area - - - - - USGS:SDTS - jungle - - - - - USGS:SDTS - WOODLAND - - - - - USGS:SDTS - chanaral - - - - - USGS:SDTS - scrub - - - - - USGS:SDTS - coniferous forest - - - - - USGS:SDTS - moor - - - - - USGS:SDTS - garique - - - - - USGS:SDTS - reforested area - - - - - USGS:SDTS - shrub - - - - - USGS:SDTS - monsoon forest - - - - - USGS:SDTS - mallee scrub - - - - - - - - - - lava tunnel - - - - - - - - A tunnel formed by the flow of molten lava, which has subsequently drained out. - ENVO - ENVO:00000110 - These are usually classified as a sub-type of volcanic cave, rather than a tunnel. - lava tube - - - A tunnel formed by the flow of molten lava, which has subsequently drained out. - MA:ma - https://en.wikipedia.org/wiki/Lava_tube - - - - - - - - - - forest - - An area with a high density of trees. A small forest may be called a wood. - EcoLexicon:forest - FTT:258 - FTT:506 - FTT:715 - FTT:717 - Geonames:V.FRST - LTER:2 - SWEETRealm:Forest - TGN:21641 - TGN:21642 - TGN:21645 - forest - https://en.wikipedia.org/wiki/Forest - wood - The definitions of forest can vary greatly, and different classes will be needed to support the major categories. Tree cover alone is not enough to distinguish between forests and plantations. The international definition proposed by the 2010 FAO Forestry Resource Assessment: "land spanning more than 0.5 ha with trees higher than 5 metres and canopy cover of more than 10 percent, or trees able to reach these thresholds in situ . It does not include land that is predominantly under agricultural or urban land use." - FAO. 2010. Global forest resources assessment 2010, Main report, FAO Forestry Paper 163. Rome. - - - Geonames:feature - forest - - - - - An area with a high density of trees. A small forest may be called a wood. - https://en.wikipedia.org/wiki/Forest - - - - - Getty:TGN - wood - - - - - - - - - - tundra - - Arctic land - ENVO - ENVO:00000112 - EcoLexicon:tundra - FTT:151 - FTT:152 - Geonames:V.TUND - LTER:605 - SWEETRealm:Tundra - TGN:21611 - TUNDRA - Treeless, level, or gently rolling plains characteristic of arctic or subarctic regions, having a permanently frozen subsoil, and usually supporting low growing vegetation such as lichens, mosses, and stunted shrubs. - TundraEcosystem - https://en.wikipedia.org/wiki/Tundra - tundra - envoPolar - tundra - - - TUNDRA - USGS:SDTS - - - - - http://www.eionet.europa.eu/gemet/concept/8704 - tundra - - - - - NASA:earthrealm - TundraEcosystem - - - - - Geonames:feature - tundra - - - - - ADL:FTT - Arctic land - - - - - ADL:FTT - Treeless, level, or gently rolling plains characteristic of arctic or subarctic regions, having a permanently frozen subsoil, and usually supporting low growing vegetation such as lichens, mosses, and stunted shrubs. - - - - - - - - - - obsolete cultivated habitat - A geographical feature modified by humans by the preparation of the land, usually for the purposes of growing crops. - CROPLAND - ENVO - ENVO:00000113 - ENVO:01000311 - EcoLexicon:agriculture - FTT:1248 - FTT:54 - FTT:55 - FTT:56 - Geonames:V.CULT - SPIRE:Agricultural - SWEETRealm:Range - agricultural region - cropland - cultivated area - cultivated cropland - market garden - range - truck farm - truck garden - true - - - CROPLAND - USGS:SDTS - - - - - USGS:SDTS - cultivated area - - - - - USGS:SDTS - truck garden - - - - - USGS:SDTS - truck farm - - - - - ADL:FTT - range - - - - - USGS:SDTS - market garden - - - - - Geonames:feature - cultivated area - - - - - ADL:FTT - cropland - - - - - ADL:FTT - cultivated cropland - - - - - ADL:FTT - cultivated area - - - - - A geographical feature modified by humans by the preparation of the land, usually for the purposes of growing crops. - MA:ma - - - - - - - - - - agricultural field - - An area of land, usually relatively small, enclosed or otherwise and used for agricultural purposes. - ENVO - ENVO:00000114 - EcoLexicon:field - FTT:45 - FTT:61 - Geonames:L.FLD - SWEETRealm:Field - TGN:21456 - agricultural site - cropland - field - grassland - - - USGS:SDTS - grassland - - - - - An area of land, usually relatively small, enclosed or otherwise and used for agricultural purposes. - https://en.wikipedia.org/wiki/Field_%28agriculture%29 - - - - - USGS:SDTS - cropland - - - - - Geonames:feature - field - - - - - ADL:FTT - agricultural site - - - - - - - - - - orchard - - An intentional planting of trees or shrubs maintained for food, typically fruit, production. - ENVO - ENVO:00000115 - EcoLexicon:orchard - FTT:45 - FTT:66 - Geonames:V.OCH - TGN:54014 - agricultural site - cropland - https://en.wikipedia.org/wiki/Orchard - orchard - - - USGS:SDTS - cropland - - - - - ADL:FTT - agricultural site - - - - - An intentional planting of trees or shrubs maintained for food, typically fruit, production. - https://en.wikipedia.org/wiki/Orchard - - - - - Geonames:feature - orchard - - - - - - - - - - vineyard - - A place where grapes are grown for making wine, raisins or table grapes. - ENVO - ENVO:00000116 - FTT:45 - FTT:77 - Geonames:V.VIN - Geonames:V.VINS - TGN:54015 - agricultural site - cropland - https://en.wikipedia.org/wiki/Vineyard - vineyard - vineyards - - - A place where grapes are grown for making wine, raisins or table grapes. - https://en.wikipedia.org/wiki/Vineyard - - - - - Geonames:feature - vineyards - - - - - Geonames:feature - vineyard - - - - - USGS:SDTS - cropland - - - - - ADL:FTT - agricultural site - - - - - - - - - - plantation - - An intentional planting of a crop, on a large scale, usually for uses other than cereal production or pasture. The term is currently most often used for plantings of trees and shrubs. The term tends also to be used for plantings maintained on economic bases other than that of subsistence farming. - ENVO - ENVO:00000117 - FTT:45 - FTT:68 - TGN:54041 - agricultural site - cropland - https://en.wikipedia.org/wiki/Plantation - plantation field - - - USGS:SDTS - cropland - - - - - ADL:FTT - agricultural site - - - - - An intentional planting of a crop, on a large scale, usually for uses other than cereal production or pasture. The term is currently most often used for plantings of trees and shrubs. The term tends also to be used for plantings maintained on economic bases other than that of subsistence farming. - https://en.wikipedia.org/wiki/Plantation - - - - - USGS:SDTS - plantation field - - - - - - - - - - coconut plantation - - ENVO - ENVO:00000118 - FTT:505 - FTT:506 - Geonames:V.GRVC - coconut grove - wood - - - ADL:FTT - wood - - - - - Geonames:feature - coconut grove - - - - - ADL:FTT - coconut grove - - - - - - - - - - planted forest - - - A forest that has been intentionally established by human intervention. - ENVO - ENVO:00000119 - - - A forest that has been intentionally established by human intervention. - MA:ma - - - - - - - - - - oil palm plantation - - ENVO - ENVO:00000120 - FTT:45 - FTT:65 - Geonames:S.ESTO - Geonames:V.GRVP - agricultural site - oil palm plantation - palm grove - - - ADL:FTT - agricultural site - - - - - Geonames:feature - oil palm plantation - - - - - Geonames:feature - palm grove - - - - - - - - - - artificial channel - - ENVO - ENVO:00000121 - EcoLexicon:artificial_channel - flume - improved channel - - - USGS:SDTS - improved channel - - - - - - - - - - track - - A small road, generally not paved. - EcoLexicon:path - EcoLexicon:trail - FTT:1057 - Geonames:R.TRL - SWEETRealm:Path - TGN:53158 - footpath - path - trail - - - A small road, generally not paved. - MA:ma - - - - - Getty:TGN - trail - - - - - USGS:SDTS - trail - - - - - USGS:SDTS - path - - - - - USGS:SDTS - footpath - - - - - ADL:FTT - trail - - - - - Geonames:feature - trail - - - - - - - - - - political entity - - A geographical region whose affairs and population are administered by an authority. - ENVO - ENVO:00000123 - FTT:1093 - Geonames:A.PCL - TGN:80002 - political entity - - - Geonames:feature - political entity - - - - - A geographical region whose affairs and population are administered by an authority. - MA:ma - - - - - - - - - - supranational geopolitical entity - - A political entitity established by more than one state and with at least some influence over the affairs of its member states. - ENVO - ENVO:00000124 - - - A political entitity established by more than one state and with at least some influence over the affairs of its member states. - MA:ma - - - - - - - - - - mineral spring - - A spring whose water contains a significant amount of dissolved minerals, that derive from the rocks through which the water flows. - ENVO - ENVO:00000125 - FTT:981 - FTT:982 - https://en.wikipedia.org/wiki/Mineral_spring - spring - spring (hydrographic) - - - ADL:FTT - spring (hydrographic) - - - - - USGS:SDTS - spring - - - - - A spring whose water contains a significant amount of dissolved minerals, that derive from the rocks through which the water flows. - https://en.wikipedia.org/wiki/Mineral_spring - - - - - - - - - - sulfur spring - - A spring whose water contains a significant amount of dissolved derivatives of sulfur. - ENVO - ENVO:00000126 - FTT:1215 - FTT:982 - Geonames:H.SPNS - spring (hydrographic) - sulphur spring - - - A spring whose water contains a significant amount of dissolved derivatives of sulfur. - MA:ma - - - - - ADL:FTT - spring (hydrographic) - - - - - Geonames:feature - sulphur spring - - - - - - - - - - badland - - An arid terrain with clay-rich soil that has been extensively eroded by wind and water. - ENVO - ENVO:00000127 - FTT:186 - FTT:187 - Geonames:T.BDLD - TGN:21205 - badlands - barren land - https://en.wikipedia.org/wiki/Badlands - - - Geonames:feature - badlands - - - - - ADL:FTT - barren land - - - - - An arid terrain with clay-rich soil that has been extensively eroded by wind and water. - https://en.wikipedia.org/wiki/Badland - - - - - - - - - - dry valley - - - - - - - - - - - - - - - - - - - A valley that no longer has a surface flow of water. Typically found in either Karst (limestone) or chalk terrain. - ENVO - ENVO:00000128 - https://en.wikipedia.org/wiki/Dry_valley - - - A valley that no longer has a surface flow of water. Typically found in either Karst (limestone) or chalk terrain. - https://en.wikipedia.org/wiki/Dry_valley - - - - - - - - - - stream valley - - - - - - - - - - - - - - - - - - - A valley that contains, and has been formed by, a stream. - ENVO - ENVO:00000129 - EcoLexicon:gully - EcoLexicon:ravine - FTT:159 - FTT:420 - Geonames:H.RVN - TGN:21427 - gullie - ravine - - - Geonames:feature - ravine - - - - - A valley that contains, and has been formed by, a stream. - MA:ma - - - - - USGS:SDTS - ravine - - - - - - - - - - reef - - A ridge of rocks, lying near the surface of the sea, which may be visible at low tide, but is usually covered by water. - ENVO - ENVO:00000130 - EcoLexicon:reef - FTT:202 - FTT:203 - FTT:729 - Geonames:H.RF - Geonames:U.RFSU - Geonames:U.RFU - REEF - SPIRE:Reef - TGN:21479 - atoll reef - bank reef - barrier reef - fringing reef - https://en.wikipedia.org/wiki/Reef - ledge - reef - reef flat - reefs - shore reef - submerged reef - - - Geonames:feature - reefs - - - - - A ridge of rocks, lying near the surface of the sea, which may be visible at low tide, but is usually covered by water. - USGS:SDTS - - - - - ADL:FTT - barrier reef - - - - - ADL:FTT - fringing reef - - - - - USGS:SDTS - bank reef - - - - - Geonames:feature - reef - - - - - USGS:SDTS - shore reef - - - - - USGS:SDTS - fringing reef - - - - - USGS:SDTS - barrier reef - - - - - REEF - USGS:SDTS - - - - - USGS:SDTS - reef flat - - - - - USGS:SDTS - submerged reef - - - - - USGS:SDTS - atoll reef - - - - - USGS:SDTS - ledge - - - - - - - - - - glacial feature - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A hydrographic feature characterized by the dominance of snow or ice. - ENVO - ENVO:00000131 - EcoLexicon:ice - FTT:648 - Ice - LandIce - Likely to be depopulated and "glacial" made into a quality or similar. - SWEETRealm:LandIce - TGN:21410 - glacer - glacial landform - glacier feature - envoPolar - - - ADL:FTT - glacer - - - - - Ice - NASA:earthrealm - - - - - LandIce - NASA:earthrealm - - - - - Getty:TGN - glacial landform - - - - - ADL:FTT - glacier feature - - - - - A hydrographic feature characterized by the dominance of snow or ice. - MA:ma - - - - - - - - - - ice sheet - - - - - - - - A mass of glacier ice that covers surrounding terrain and is greater than 50,000 km2. - Arctic pack - ENVO - ENVO:00000132 - ENVO:00000379 - FTT:758 - FTT:835 - FTT:837 - ICE FIELD - SWEETRealm:IceSheet - TGN:21147 - bay ice - continental glacier - continental ice - glacial tongue - https://en.wikipedia.org/wiki/Ice_sheet - ice field - ice mass - island ice - pack ice - polar ice - polar ice pack - rock glacier - shelf ice - envoPolar - - - ADL:FTT - ice mass - - - - - USGS:SDTS - polar ice pack - - - - - USGS:SDTS - bay ice - - - - - USGS:SDTS - polar ice - - - - - USGS:SDTS - island ice - - - - - USGS:SDTS - rock glacier - - - - - ADL:FTT - ice field - - - - - USGS:SDTS - pack ice - - - - - Arctic pack - USGS:SDTS - - - - - USGS:SDTS - glacial tongue - - - - - USGS:SDTS - continental glacier - - - - - ICE FIELD - USGS:SDTS - - - - - USGS:SDTS - shelf ice - - - - - USGS:SDTS - continental ice - - - - - A mass of glacier ice that covers surrounding terrain and is greater than 50,000 km2. - https://en.wikipedia.org/wiki/Ice_sheet - - - - - - - - - - glacier - - - - - - - - - - - - - - An ice mass which is of sufficient mass that the action of gravity upon it overcomes the frictional forces holding it in place, causing it to deform and flow towards lower elevation. - ENVO - ENVO:00000133 - EcoLexicon:glacier - FTT:648 - FTT:756 - Geonames:H.GLCR - Glacier - RockGlacier - SWEETRealm:Glacier - TGN:21141 - glacial feature - glacier - https://en.wikipedia.org/wiki/Glacier - ice field - rock glacier - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - envoPolar - - - NASA:earthrealm - RockGlacier - - - - - USGS:SDTS - rock glacier - - - - - ADL:FTT - glacial feature - - - - - Glacier - NASA:earthrealm - - - - - USGS:SDTS - ice field - - - - - An ice mass which is of sufficient mass that the action of gravity upon it overcomes the frictional forces holding it in place, causing it to deform and flow towards lower elevation. - https://en.wikipedia.org/wiki/Glacier - - - - - Geonames:feature - glacier - - - - - - - - - - permafrost - - - - - - - - - ENVO - ENVO:00000134 - EcoLexicon:permafrost - LTER:408 - Permafrost - Soil at or below the freezing point of water (0C or 32F) for two or more years. Ice is not always present, as may be in the case of nonporous bedrock, but it frequently occurs and it may be in amounts exceeding the potential hydraulic saturation of the ground material. - https://en.wikipedia.org/wiki/Permafrost - envoPolar - - - NASA:earthrealm - Permafrost - - - - - Soil at or below the freezing point of water (0C or 32F) for two or more years. Ice is not always present, as may be in the case of nonporous bedrock, but it frequently occurs and it may be in amounts exceeding the potential hydraulic saturation of the ground material. - https://en.wikipedia.org/wiki/Permafrost - - - - - - - - - - buffer zone - - A geographical region that serves the purpose of keeping two or more other areas (often, but not necessarily, countries) distant from one another, for whatever reason. - ENVO - ENVO:00000135 - FTT:17 - Geonames:A.ZNB - administrative area - buffer zone - https://en.wikipedia.org/wiki/Buffer_zone - - - Geonames:feature - buffer zone - - - - - A geographical region that serves the purpose of keeping two or more other areas (often, but not necessarily, countries) distant from one another, for whatever reason. - https://en.wikipedia.org/wiki/Buffer_zone - - - - - ADL:FTT - administrative area - - - - - - - - - - demilitiarized zone - - A geographical area, usually the frontier or boundary between two or more military powers (or alliances), where military activity is not permitted, usually by peace treaty, armistice or other bilateral or multilateral agreement. - DEMILITIARIZED ZONE - DMZ - ENVO - ENVO:00000136 - FTT:1253 - FTT:20 - adminstrative area - boundary - https://en.wikipedia.org/wiki/DMZ - neutral zone - - - USGS:SDTS - neutral zone - - - - - DEMILITIARIZED ZONE - USGS:SDTS - - - - - A geographical area, usually the frontier or boundary between two or more military powers (or alliances), where military activity is not permitted, usually by peace treaty, armistice or other bilateral or multilateral agreement. - https://en.wikipedia.org/wiki/Demilitarized_zone - - - - - ADL:FTT - adminstrative area - - - - - ADL:FTT - neutral zone - - - - - USGS:SDTS - boundary - - - - - - - - - - coastal inlet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An opening of the sea into the land. - ENVO - ENVO:00000137 - FTT:463 - TGN:21128 - coastal inlet - envoPolar - - - An opening of the sea into the land. - USGS:SDTS - - - - - - - - - - cove - - - - - - - - A circular or round inlet with a narrow entrance. - EcoLexicon:cove - FTT:190 - FTT:229 - Geonames:H.COVE - SWEETRealm:Cove - TGN:21120 - - - A circular or round inlet with a narrow entrance. - https://en.wikipedia.org/wiki/Cove - - - - - - - - - - irrigation ditch - - A ditch that supplies water to surrounding land. - ENVO - ENVO:00000139 - FTT:129 - FTT:406 - Geonames:H.DTCHI - canal - irrigation ditch - - - ADL:FTT - irrigation ditch - - - - - A ditch that supplies water to surrounding land. - MA:ma - - - - - Geonames:feature - irrigation ditch - - - - - ADL:FTT - canal - - - - - - - - - - drainage ditch - - A ditch that collects water from the surrounding land. - ENVO - ENVO:00000140 - EcoLexicon:drainage_ditch - FTT:129 - FTT:402 - Geonames:H.DTCHD - canal - drainage ditch - rhyne - - - ADL:FTT - drainage ditch - - - - - Geonames:feature - drainage ditch - - - - - A ditch that collects water from the surrounding land. - MA:ma - - - - - ADL:FTT - canal - - - - - - - - - - bank - - - - - - - - ENVO - ENVO:00000141 - EcoLexicon:bank - FTT:195 - SWEETRealm:Bank - TGN:21466 - The sloping margin of a watercourse, serving to confine it to its natural channel. - mount - shore - - - USGS:SDTS - shore - - - - - MA:ma - The sloping margin of a watercourse, serving to confine it to its natural channel. - - - - - USGS:SDTS - mount - - - - - - - - - - stream bank - - ENVO - ENVO:00000142 - FTT:195 - FTT:196 - Geonames:H.BNKR - The sloping margin of a stream, serving to confine it to its natural channel. - bank (hydrographic) - https://en.wikipedia.org/wiki/Stream_bank - stream bank - - - MA:ma - The sloping margin of a stream, serving to confine it to its natural channel. - - - - - Geonames:feature - stream bank - - - - - ADL:FTT - bank (hydrographic) - - - - - - - - - - river bank - - ENVO - ENVO:00000143 - TGN:21155 - The sloping margin of a river, serving to confine it to its natural channel. - https://en.wikipedia.org/wiki/River_bank - riverbank - - - Getty:TGN - riverbank - - - - - MA:ma - The sloping margin of a river, serving to confine it to its natural channel. - - - - - - - - - - obsolete aquatic habitat - A habitat that is in or on water. - ENVO - ENVO:00000144 - ENVO:01000317 - https://en.wikipedia.org/wiki/Aquatic_habitat - true - - - - A habitat that is in or on water. - NM:nm - - - - - - - - - - ice cap - - A dome-shaped ice mass that covers less than 50,000 km2 of land area (usually covering a highland area). - ENVO - ENVO:00000145 - FTT:841 - Geonames:H.CAPG - SPIRE:Ice_cap - SWEETRealm:IceCap - TGN:21140 - https://en.wikipedia.org/wiki/Ice_cap - ice field - icecap - envoPolar - - - USGS:SDTS - ice field - - - - - Getty:TGN - icecap - - - - - Geonames:feature - icecap - - - - - A dome-shaped ice mass that covers less than 50,000 km2 of land area (usually covering a highland area). - https://en.wikipedia.org/wiki/Ice_cap - - - - - - - - - - snow field - - - - - - - - - - - - - - - - - - A region of permanent snow in mountainous areas or high latitudes. - ENVO - ENVO:00000146 - FTT:1208 - Geonames:L.SNOW - SNOWFIELD - SnowField - TGN:21146 - https://en.wikipedia.org/wiki/Snow_field - snowfield - snowfield - envoPolar - - - A region of permanent snow in mountainous areas or high latitudes. - USGS:SDTS - - - - - SNOWFIELD - USGS:SDTS - - - - - NASA:earthrealm - SnowField - - - - - Geonames:feature - snowfield - - - - - Getty:TGN - snowfield - - - - - - - - - - ocean current - - - - - - - - - Definition modified from http://en.wikipedia.org/wiki/Ocean_current. - ENVO - ENVO:00000147 - EcoLexicon:ocean_current - FTT:597 - FTT:598 - Geonames:H.CRNT - LTER:386 - SWEETRealm:OceanCurrent - TGN:21169 - The region occupied by any more or less continuous, directed movement of ocean water that flows in one of the Earth's oceans. Ocean Currents are rivers of hot or cold water within the ocean. The currents are generated from the forces acting upon the water like the earth's rotation, the wind, the temperature and salinity differences and the gravitation of the moon. The depth contours, the shoreline and other movements influence the direction and strength of the movements of water that forms a given current. - current - https://en.wikipedia.org/wiki/Ocean_current - ocean current - - - Geonames:feature - current - - - - - ADL:FTT - current - - - - - BS:bs - The region occupied by any more or less continuous, directed movement of ocean water that flows in one of the Earth's oceans. Ocean Currents are rivers of hot or cold water within the ocean. The currents are generated from the forces acting upon the water like the earth's rotation, the wind, the temperature and salinity differences and the gravitation of the moon. The depth contours, the shoreline and other movements influence the direction and strength of the movements of water that forms a given current. - - - - - Getty:TGN - current - - - - - ADL:FTT - ocean current - - - - - - - - - - riffle - - - - - - - - A shallow stretch of a river or stream, where the current is above the average stream velocity and where the water forms small rippled waves as a result. It often consists of a rocky bed of gravels or other small stones. - ENVO - ENVO:00000148 - EcoLexicon:riffle - https://en.wikipedia.org/wiki/Riffle - - - A shallow stretch of a river or stream, where the current is above the average stream velocity and where the water forms small rippled waves as a result. It often consists of a rocky bed of gravels or other small stones. - https://en.wikipedia.org/wiki/Riffle - - - - - - - - - - artificial reef - - Chains of rocks or coral at or near the surface of water constructed by man. - ENVO - ENVO:00000149 - https://en.wikipedia.org/wiki/Artificial_reef - - - Chains of rocks or coral at or near the surface of water constructed by man. - MA:ma - - - - - - - - - - coral reef - - Aragonite structures produced by living organisms, found in shallow, marine waters with little nutrients in the water. - CoralReef - EcoLexicon:coral_reef - FTT:202 - FTT:547 - FTT:729 - Geonames:H.RFC - LTER:127 - barrier reef - coral reef - fringing reef - https://en.wikipedia.org/wiki/Coral_reef - reef - - - ADL:FTT - coral reef - - - - - CoralReef - NASA:earthrealm - - - - - USGS:SDTS - fringing reef - - - - - Aragonite structures produced by living organisms, found in shallow, marine waters with little nutrients in the water. - https://en.wikipedia.org/wiki/Coral_reef - - - - - ADL:FTT - fringing reef - - - - - USGS:SDTS - coral reef - - - - - USGS:SDTS - reef - - - - - Geonames:feature - coral reef - - - - - - - - - - sabkha - - An alkaline flat, in the context of a marine environment. - ENVO - ENVO:00000151 - FTT:705 - FTT:706 - Geonames:H.SBKH - SWEETRealm:Sabkha - TGN:21368 - basin - flat - https://en.wikipedia.org/wiki/Sabkha - sabkha - - - Geonames:feature - sabkha - - - - - USGS:SDTS - basin - - - - - An alkaline flat, in the context of a marine environment. - MA:ma - - - - - ADL:FTT - flat - - - - - - - - - - anabranch - - A section of a river or stream that diverts from the main course and rejoins later. - ENVO - ENVO:00000152 - FTT:104 - Geonames:H.STMA - TGN:21136 - anabranch - https://en.wikipedia.org/wiki/Anabranch - stream - watercourse - - - ADL:FTT - stream - - - - - Geonames:feature - anabranch - - - - - USGS:SDTS - watercourse - - - - - A section of a river or stream that diverts from the main course and rejoins later. - https://en.wikipedia.org/wiki/Anabranch - - - - - - - - - - headwater - - - - - - - - ENVO - ENVO:00000153 - FTT:105 - FTT:1221 - FTT:1259 - FTT:220 - FTT:644 - Geonames:H.STMH - HEADWATER - TGN:21181 - The upper part of a river system, denoting the upper basin and source streams of a river. - drainage basin - headstream - headwaters - https://en.wikipedia.org/wiki/Headwater - source - stream - - - Geonames:feature - headwaters - - - - - ADL:FTT - stream - - - - - ADL:FTT - drainage basin - - - - - ADL:FTT - headstream - - - - - HEADWATER - USGS:SDTS - - - - - The upper part of a river system, denoting the upper basin and source streams of a river. - USGS:SDTS - - - - - - - - - - flood meadow - - An area of grassland or pasture beside a river, subject to seasonal flooding. - ENVO - ENVO:00000154 - https://en.wikipedia.org/wiki/Flood_meadow - water meadow - - - An area of grassland or pasture beside a river, subject to seasonal flooding. - https://en.wikipedia.org/wiki/Flood_meadow - - - - - - - - - - cirque - - A depression which is semicircular or crescent-shaped, found towards the crest of a mountain, and formed by the erosional processes caused by the motion of a glacier. - CIRQUE - Cirque - ENVO - ENVO:00000155 - FTT:218 - FTT:481 - Geonames:T.CRQ - Geonames:T.CRQS - TGN:21496 - cirque - cirques - coomb - coombe - corrie - cwm - https://en.wikipedia.org/wiki/Cirque - cirque basin - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - envoPolar - - - ADL:FTT - cwm - - - - - Geonames:feature - cirque - - - - - A depression which is semicircular or crescent-shaped, found towards the crest of a mountain, and formed by the erosional processes caused by the motion of a glacier. - USGS:SDTS - web:http://www.antarctica.ac.uk/apc/genericterms.html - http://www.thefreedictionary.com/Glacial+cirque - - - - - Cirque - NASA:earthrealm - - - - - CIRQUE - USGS:SDTS - - - - - Geonames:feature - cirques - - - - - - - - - - desert oasis - - - - - - - - - - - - - - - - - - - A small, isolated, fertile or green area in a desert region, usually having a spring or well. - ENVO - ENVO:00000156 - EcoLexicon:oasis - FTT:261 - Geonames:L.OAS - OASIS - TGN:21202 - https://en.wikipedia.org/wiki/Oasis - oasis - - - A small, isolated, fertile or green area in a desert region, usually having a spring or well. - USGS:SDTS - - - - - OASIS - USGS:SDTS - - - - - Geonames:feature - oasis - - - - - Getty:TGN - oasis - - - - - - - - - - peat cut - - - - - - - - An artificial working of peatland to remove the peat. - ENVO - ENVO:00000157 - FTT:1060 - Geonames:L.PEAT - peat cutting - peat cutting area - wetland - - - USGS:SDTS - wetland - - - - - An artificial working of peatland to remove the peat. - MA:ma - - - - - ADL:FTT - peat cutting area - - - - - Geonames:feature - peat cutting area - - - - - USGS:SDTS - peat cutting - - - - - - - - - - causeway - - A road or railway elevated by a bank, usually across a broad body of water or wetland. - ENVO - ENVO:00000158 - EcoLexicon:causeway - FTT:443 - Geonames:R.CSWY - TGN:53156 - causeway - https://en.wikipedia.org/wiki/Causeway - road - - - A road or railway elevated by a bank, usually across a broad body of water or wetland. - https://en.wikipedia.org/wiki/Causeway - - - - - USGS:SDTS - road - - - - - Geonames:feature - causeway - - - - - - - - - - sugar plantation - - ENVO - ENVO:00000159 - FTT:45 - FTT:75 - Geonames:S.ESTSG - agricultural site - https://en.wikipedia.org/wiki/Sugar_plantation - sugar plantation - - - ADL:FTT - agricultural site - - - - - Geonames:feature - sugar plantation - - - - - - - - - - sisal plantation - - ENVO - ENVO:00000160 - FTT:45 - FTT:73 - Geonames:ESTSL - agricultural site - sisal plantation - - - ADL:FTT - agricultural site - - - - - Geonames:feature - sisal plantation - - - - - - - - - - banana plantation - - ENVO - ENVO:00000161 - FTT:45 - FTT:49 - Geonames:ESTB - agricultural site - banana plantation - https://en.wikipedia.org/wiki/Banana_plantation - - - ADL:FTT - agricultural site - - - - - Geonames:feature - banana plantation - - - - - - - - - - tea plantation - - ENVO - ENVO:00000162 - FTT:45 - FTT:76 - Geonames:S.ESTT - agricultural site - tea estate - tea plantation - - - Geonames:feature - tea plantation - - - - - ADL:FTT - agricultural site - - - - - - - - - - coffee plantation - - ENVO - ENVO:00000163 - - - - - - - - rubber plantation - - ENVO - ENVO:00000164 - FTT:45 - FTT:71 - Geonames:S.ESTR - agricultural site - rubber plantation - - - Geonames:feature - rubber plantation - - - - - ADL:FTT - agricultural site - - - - - - - - - - asphalt lake - - A lake formed of a natural deposit of alphalt, a black, highly viscous liquid or semi-solid composed of fossil hydrocarbons. - EcoLexicon:tar_pit - FTT:174 - FTT:175 - Geonames:T.ASPH - TGN:21369 - asphalt lake - basin - https://en.wikipedia.org/wiki/Tar_pit - tar pit - - - A lake formed of a natural deposit of alphalt, a black, highly viscous liquid or semi-solid composed of fossil hydrocarbons. - MA:ma - - - - - Geonames:feature - asphalt lake - - - - - ADL:FTT - basin - - - - - - - - - - atoll - - An oceanic island, often having a characteristic ring-like shape surrounding a lagoon. Atolls are formed when coral reef grows around a volcanic island that later subsides into the ocean. - ENVO - ENVO:00000166 - EcoLexicon:atoll - FTT:127 - FTT:450 - Geonames:T.ATOL - REEF, ISLAND - SWEETRealm:Atoll - TGN:21472 - atoll - atoll - coral atoll - https://en.wikipedia.org/wiki/Atoll - island - reef - - - An oceanic island, often having a characteristic ring-like shape surrounding a lagoon. Atolls are formed when coral reef grows around a volcanic island that later subsides into the ocean. - https://en.wikipedia.org/wiki/Atoll - - - - - USGS:SDTS - reef - - - - - Geonames:feature - atoll - - - - - ADL:FTT - island - - - - - USGS:SDTS - atoll - - - - - USGS:SDTS - island - - - - - REEF, ISLAND - USGS:SDTS - - - - - - - - - - bar - - - - - - - - - - - - - - A linear shoaling landform feature within a body of water. Bars tend to be long and narrow (linear) and develop where a current (or waves) promote deposition of granular material, resulting in localized shallowing (shoaling) of the water. Bars can appear in the sea, in a lake, or in a river. They are typically composed of sand, although could be of any granular matter that the moving water has access to and is capable of shifting around (for example, soil, silt, gravel, cobble, shingle, or even boulders). The grain size of the material comprising a bar is related: to the size of the waves or the strength of the currents moving the material, but the availability of material to be worked by waves and currents is also important. - ENVO - ENVO:00000167 - EcoLexicon:bar - FTT:1195 - FTT:206 - FTT:208 - FTT:209 - FTT:210 - FTT:5 - Geonames:H.BNK - Geonames:H.SHOL - Geonames:T.BAR - Geonames:U.BKSU - Geonames:U.BNKU - Geonames:U.SHLU - Geonames:U.SHSU - Geonames:U.TNGU - SWEETRealm:Bar - Shoal - TGN:21177 - TGN:21480 - TGN:21531 - TGN:23191 - ball - bank - barrier beach - barrier island - cuspate spit - hook - hooked spit - longshore bar - marsh bar - offshore bar - point - recurved spit - sand bank - sand bar - sand hom - sand lobe - sand spit - sandbar - seafloor feature - shoal - shoal patches - shoals - spit - tongue - tongue (seafloor) - transverse bar - undersea shoal - - - USGS:SDTS - offshore bar - - - - - A linear shoaling landform feature within a body of water. Bars tend to be long and narrow (linear) and develop where a current (or waves) promote deposition of granular material, resulting in localized shallowing (shoaling) of the water. Bars can appear in the sea, in a lake, or in a river. They are typically composed of sand, although could be of any granular matter that the moving water has access to and is capable of shifting around (for example, soil, silt, gravel, cobble, shingle, or even boulders). The grain size of the material comprising a bar is related: to the size of the waves or the strength of the currents moving the material, but the availability of material to be worked by waves and currents is also important. - https://en.wikipedia.org/wiki/Bar_%28landform%29 - - - - - ADL:FTT - seafloor feature - - - - - USGS:SDTS - point - - - - - USGS:SDTS - shoal patches - - - - - USGS:SDTS - sand hom - - - - - Geonames:feature - ball - - - - - NASA:earthrealm - Shoal - - - - - USGS:SDTS - hook - - - - - USGS:SDTS - cuspate spit - - - - - USGS:SDTS - sand bank - - - - - USGS:SDTS - transverse bar - - - - - Geonames:feature - bank - - - - - Geonames:feature - shoal - - - - - USGS:SDTS - shoal - - - - - Geonames:feature - shoals - - - - - USGS:SDTS - longshore bar - - - - - USGS:SDTS - recurved spit - - - - - ADL:FTT - spit - - - - - USGS:SDTS - sandbar - - - - - Geonames:feature - tongue - - - - - Getty:TGN - undersea shoal - - - - - USGS:SDTS - marsh bar - - - - - USGS:SDTS - hooked spit - - - - - USGS:SDTS - sand spit - - - - - USGS:SDTS - barrier beach - - - - - ADL:FTT - sandbar - - - - - USGS:SDTS - barrier island - - - - - ADL:FTT - shoal - - - - - Getty:TGN - shoal - - - - - ADL:FTT - tongue (seafloor) - - - - - USGS:SDTS - spit - - - - - Getty:TGN - sand bar - - - - - USGS:SDTS - sand lobe - - - - - USGS:SDTS - tongue - - - - - - - - - - blowhole - - - - - - - - A hole in coastal rock through which sea water is forced by a rising tide or waves and spurted through an outlet into the air. - ENVO - ENVO:00000168 - EcoLexicon:blowhole - FTT:266 - Geonames:T.BLHL - TGN:21172 - blowhole - https://en.wikipedia.org/wiki/Blowhole - - - Geonames:feature - blowhole - - - - - A hole in coastal rock through which sea water is forced by a rising tide or waves and spurted through an outlet into the air. - Geonames:feature - - - - - - - - - - canyon - - ENVO - ENVO:00000169 - EcoLexicon:canyon - FTT:165 - FTT:200 - FTT:415 - FTT:416 - FTT:417 - FTT:418 - FTT:419 - FTT:420 - FTT:511 - Geonames:T.CNYN - Relatively narrow, deep depression with steep sides, the bottom of which generally has a continuous slope. - SWEETRealm:Canyon - TGN:21424 - TGN:21426 - TGN:21427 - TGN:21429 - barranca - chasm - defile - flume (natural) - gap - gorge - gulch - https://en.wikipedia.org/wiki/Canyon - quebrada - ravine - valley - - - ADL:FTT - quebrada - - - - - Getty:TGN - defile - - - - - ADL:FTT - flume (natural) - - - - - Getty:TGN - gorge - - - - - Getty:TGN - ravine - - - - - ADL:FTT - gorge - - - - - ADL:FTT - gulch - - - - - ADL:FTT - ravine - - - - - ADL:FTT - chasm - - - - - USGS:SDTS - valley - - - - - ADL:FTT - gap - - - - - ADL:FTT - barranca - - - - - ADL:FTT - Relatively narrow, deep depression with steep sides, the bottom of which generally has a continuous slope. - - - - - - - - - - dune - - - - - - - - A hill of sand built by eolian processes. - Dune - EcoLexicon:dune - FTT:238 - FTT:241 - FTT:652 - Geonames:T.DUNE - LTER:171 - SWEETRealm:Dune - TGN:21419 - TGN:21505 - dune - https://en.wikipedia.org/wiki/Dune - interdune trough - mount - ridge - sand dune - sand hill - sandy area - - - A hill of sand built by eolian processes. - https://en.wikipedia.org/wiki/Dune - - - - - USGS:SDTS - mount - - - - - Dune - NASA:earthrealm - - - - - Getty:TGN - sandy area - - - - - USGS:SDTS - ridge - - - - - ADL:FTT - sandy area - - - - - USGS:SDTS - sand dune - - - - - Geonames:feature - dune - - - - - USGS:SDTS - sand hill - - - - - ADL:FTT - interdune trough - - - - - Geonames:feature - sandy area - - - - - - - - - - river valley - - - - - - - - A valley that contains, and has been formed by, a river. - ENVO - ENVO:00000171 - https://en.wikipedia.org/wiki/River_valley - - - A valley that contains, and has been formed by, a river. - MA:ma - - - - - - - - - - sandy desert - - A desert plain characterized by a surface veneer of sand. - ENVO - ENVO:00000172 - EcoLexicon:sandy_area - FTT:188 - FTT:238 - FTT:616 - Geonames:T.ERG - Geonames:T.SAND - TGN:21203 - There should be relation here to ENVO:sand, but it's more than "primarily composed of" and must call upon the idea of "ground surface" or layer. - desert - sand desert - sandy area - sandy desert - - - ADL:FTT - sandy area - - - - - ADL:FTT - desert - - - - - Geonames:feature - sandy area - - - - - Geonames:feature - sandy desert - - - - - Getty:TGN - sandy area - - - - - - - - - - rocky desert - - A desert plain characterized by a surface veneer of rock. - ENVO - ENVO:00000173 - FTT:188 - FTT:615 - Geonames:T.HMDA - TGN:21204 - There should be relation here to ENVO:rock, but it's more than "primarily composed of" and must call upon the idea of "ground surface" or layer. - desert - rock desert - - - ADL:FTT - desert - - - - - Geonames:feature - rock desert - - - - - - - - - - isthmus - - ENVO - ENVO:00000174 - EcoLexicon:isthmus - FTT:892 - Geonames:T.ISTH - ISTHMUS - Narrow section of land in a body of water connecting two larger land areas. - SWEETRealm:Isthmus - TGN:21473 - TGN:21478 - https://en.wikipedia.org/wiki/Isthmus - isthmus - land bridge - neck - submarine isthmus - envoPolar - - - USGS:SDTS - neck - - - - - USGS:SDTS - submarine isthmus - - - - - Narrow section of land in a body of water connecting two larger land areas. - USGS:SDTS - - - - - Geonames:feature - isthmus - - - - - Getty:TGN - land bridge - - - - - ISTHMUS - USGS:SDTS - - - - - - - - - - karst - - - - - - - - - - - - - - - - - - - - A feature shaped by the dissolution of a soluble layer or layers of bedrock, usually carbonate rock such as limestone or dolomite. These landscapes display distinctive surface features and underground drainages, and in some examples there may be little or no surface drainage. - ENVO - ENVO:00000175 - EcoLexicon:karst - FTT:894 - Geonames:T.KRST - SWEETRealm:Karst - TGN:21509 - https://en.wikipedia.org/wiki/Karst - karst - karst area - - - Getty:TGN - karst area - - - - - ADL:FTT - karst area - - - - - A feature shaped by the dissolution of a soluble layer or layers of bedrock, usually carbonate rock such as limestone or dolomite. These landscapes display distinctive surface features and underground drainages, and in some examples there may be little or no surface drainage. - https://en.wikipedia.org/wiki/Karst - - - - - Geonames:feature - karst - - - - - - - - - - elevation - - - - - - - - A landform elevated above the surrounding area. - ENVO - ENVO:00000176 - LTER:177 - SWEETRealm:Elevation - https://en.wikipedia.org/wiki/Elevation - - - A landform elevated above the surrounding area. - MA:ma - - - - - - - - - - moraine - - - - - - - - An accumulation of boulders, stones, or other debris carried and deposited by a glacier. - ENVO - ENVO:00000177 - EcoLexicon:moraine - FTT:759 - Geonames:T.MRN - MORAINE - TGN:21414 - glacial moraine - https://en.wikipedia.org/wiki/Moraine - moraine - envoPolar - - - Geonames:feature - moraine - - - - - MORAINE - USGS:SDTS - - - - - USGS:SDTS - glacial moraine - - - - - An accumulation of boulders, stones, or other debris carried and deposited by a glacier. - USGS:SDTS - https://en.wikipedia.org/wiki/Moraine - - - - - - - - - - levee - - - - - - - - - - An artificial slope or wall, usually earthen, which parallels the course of a river, built for the purpose of containing the river. - EMBANKMENT - ENVO - ENVO:00000178 - EcoLexicon:levee - FTT:197 - FTT:21 - FTT:252 - FTT:619 - FTT:670 - FTT:921 - Geonames:S.DIKE - Geonames:T.LEV - REVETMENT - SWEETRealm:Dike - TGN:51251 - TGN:51263 - berm - dike - dike (manmade) - dyke - embankment - https://en.wikipedia.org/wiki/Levee - levee - revetment - - - Geonames:feature - dike - - - - - Getty:TGN - dike - - - - - ADL:FTT - revetment - - - - - USGS:SDTS - dyke - - - - - EMBANKMENT - USGS:SDTS - - - - - An artificial slope or wall, usually earthen, which parallels the course of a river, built for the purpose of containing the river. - https://en.wikipedia.org/wiki/Levee - - - - - USGS:SDTS - dike - - - - - ADL:FTT - dike (manmade) - - - - - ADL:FTT - embankment - - - - - REVETMENT - USGS:SDTS - - - - - Geonames:feature - levee - - - - - ADL:FTT - berm - - - - - - - - - - mesa - - An elevated area of land with a flat top and sides that are usually steep cliffs. Mesas form in areas where horizontally layered rocks are uplifted by tectonic activity. - ENVO - ENVO:00000179 - FTT:376 - FTT:377 - Geonames:T.MESA - SWEETRealm:Mesa - TGN:21422 - butte - https://en.wikipedia.org/wiki/Mesa - mesa - plateau - - - ADL:FTT - butte - - - - - Geonames:feature - mesa - - - - - USGS:SDTS - plateau - - - - - An elevated area of land with a flat top and sides that are usually steep cliffs. Mesas form in areas where horizontally layered rocks are uplifted by tectonic activity. - https://en.wikipedia.org/wiki/Mesa - - - - - - - - - - mound - - A rounded elevated area. - ENVO - ENVO:00000180 - FTT:118 - FTT:993 - Geonames:T.MND - TGN:21458 - https://en.wikipedia.org/wiki/Mound - mound - mount - - - Geonames:feature - mound - - - - - USGS:SDTS - mount - - - - - A rounded elevated area. - MA:ma - - - - - - - - - - nunatak - - - - - - - - - - - - - - - - - - - "peak" in the definition is understood as a synonym of mount, rather than of summit. Nunataks may also refer to areas of ridges. The definition and placement of this class may need to be revised. - ENVO - ENVO:00000181 - FTT:648 - FTT:757 - FTT:80 - Geonames:T.NTK - Geonames:T.NTKS - TGN:21495 - The exposed summit of a ridge, mountain, or peak not covered with ice or snow within an ice field or glacier. The term is typically used in areas where a permanent ice mass is present. - glacier feature - https://en.wikipedia.org/wiki/Nunatak - mountain summit - nunatak - nunataks - peak - envoPolar - - - ADL:FTT - glacier feature - - - - - Geonames:feature - nunataks - - - - - USGS:SDTS - peak - - - - - Geonames:feature - nunatak - - - - - ADL:FTT - mountain summit - - - - - The exposed summit of a ridge, mountain, or peak not covered with ice or snow within an ice field or glacier. The term is typically used in areas where a permanent ice mass is present. - https://en.wikipedia.org/wiki/Nunatak - - - - - - - - - - plateau - - An elevated and comparatively level expanse of land. - ENVO - ENVO:00000182 - EcoLexicon:plateau - FTT:1080 - FTT:1090 - FTT:1091 - FTT:788 - Geonames:T.PLAT - Geonames:T.UPLD - PLATEAU - Plateau - SWEETRealm:Plateau - TGN:21441 - TGN:21493 - TGN:21494 - highland - https://en.wikipedia.org/wiki/Plateau - intermontane plateau - plateau - table mountain - tableknoll - tableland - tablemount - upland - - - ADL:FTT - upland - - - - - USGS:SDTS - tableland - - - - - ADL:FTT - tableland - - - - - Getty:TGN - highland - - - - - USGS:SDTS - intermontane plateau - - - - - Getty:TGN - upland - - - - - Geonames:feature - plateau - - - - - NASA:earthrealm - Plateau - - - - - ADL:FTT - table mountain - - - - - USGS:SDTS - tableknoll - - - - - An elevated and comparatively level expanse of land. - USGS:SDTS - - - - - USGS:SDTS - tablemount - - - - - Geonames:feature - upland - - - - - PLATEAU - USGS:SDTS - - - - - - - - - - stony desert - - A desert plain characterized by a surface veneer of gravel or stones. - ENVO - ENVO:00000183 - FTT:188 - FTT:617 - Geonames:T.REG - There should be relation here to ENVO:rock and ENVO:gravel, but it's more than "primarily composed of" and must call upon the idea of "ground surface" or layer. - desert - stony desert - - - Geonames:feature - stony desert - - - - - A desert plain characterized by a surface veneer of gravel or stones. - Geonames:feature - - - - - ADL:FTT - desert - - - - - - - - - - hanging valley - - A tributary valley with the floor at a higher relief than the main channel into which it flows. They are most commonly associated with U-shaped valleys when a tributary glacier flows into a glacier of larger volume. - ENVO - ENVO:00000184 - FTT:166 - FTT:784 - Geonames:T.VALG - TGN:21514 - hanging valley - https://en.wikipedia.org/wiki/Hanging_valley - valley - envoPolar - - - A tributary valley with the floor at a higher relief than the main channel into which it flows. They are most commonly associated with U-shaped valleys when a tributary glacier flows into a glacier of larger volume. - https://en.wikipedia.org/wiki/Valley#Hanging_valleys - - - - - ADL:FTT - valley - - - - - Geonames:feature - hanging valley - - - - - - - - - - raised mire - - ENVO - ENVO:00000185 - Rain-fed, potentially deep peatlands occurring principally in lowland areas across much of Northern Europe, as well as in the former USSR, North America and parts of the southern hemisphere. - SWEETRealm:RaisedBog - raised bog - wetland - - - USGS:SDTS - raised bog - - - - - Rain-fed, potentially deep peatlands occurring principally in lowland areas across much of Northern Europe, as well as in the former USSR, North America and parts of the southern hemisphere. - https://en.wikipedia.org/wiki/Peatland#Types_of_peatland - - - - - USGS:SDTS - wetland - - - - - - - - - - string mire - - ENVO - ENVO:00000186 - Flat or concave peatlands with a string-like pattern of hummocks (hence the name), found principally in northern Scandinavia but occurring in the western parts of the former USSR and in North America. A few examples exist in northern Britain. - https://en.wikipedia.org/wiki/String_bog - string bog - wetland - - - Flat or concave peatlands with a string-like pattern of hummocks (hence the name), found principally in northern Scandinavia but occurring in the western parts of the former USSR and in North America. A few examples exist in northern Britain. - https://en.wikipedia.org/wiki/Peatland#Types_of_peatland - - - - - USGS:SDTS - string bog - - - - - USGS:SDTS - wetland - - - - - - - - - - tundra mire - - ENVO - ENVO:00000187 - Peatlands with a shallow peat layer, only about 500 mm thick, dominated by sedges and grasses. They form in permafrost areas, covering around 110,000 to 160,000 km2 in Alaska, Canada, and the former USSR. - envoPolar - - - Peatlands with a shallow peat layer, only about 500 mm thick, dominated by sedges and grasses. They form in permafrost areas, covering around 110,000 to 160,000 km2 in Alaska, Canada, and the former USSR. - https://en.wikipedia.org/wiki/Peatland#Types_of_peatland - - - - - - - - - - paisa mire - - ENVO - ENVO:00000188 - Peatland typified by characteristic high mounds, each with a permanently frozen core, with wet depressions between the mounds. These develop where the ground surface is frozen only for part of the year, and are common in the former USSR, Canada and parts of Scandinavia. - - - Peatland typified by characteristic high mounds, each with a permanently frozen core, with wet depressions between the mounds. These develop where the ground surface is frozen only for part of the year, and are common in the former USSR, Canada and parts of Scandinavia. - https://en.wikipedia.org/wiki/Peatland#Types_of_peatland - - - - - - - - - - peat swamp - - ENVO - ENVO:00000189 - Forested peatlands including both rain- and groundwater-fed types, commonly recorded in tropical regions with high rainfall. This type of peatland covers around 350,000 km2, primarily in south-east Asia but also occurring in the Everglades in Florida. - https://en.wikipedia.org/wiki/Peat_swamp - - - Forested peatlands including both rain- and groundwater-fed types, commonly recorded in tropical regions with high rainfall. This type of peatland covers around 350,000 km2, primarily in south-east Asia but also occurring in the Everglades in Florida. - https://en.wikipedia.org/wiki/Peatland#Types_of_peatland - - - - - - - - - - abyssal feature - - Abyssalhill - ENVO - ENVO:00000190 - EcoLexicon:abyssal_hill - FTT:1020 - FTT:2 - FTT:4 - Feature on the ocean floor at a depth of 3500 - 6000 meters. - abyssal hill - ocean floor feature - - - Abyssalhill - NASA:earthrealm - - - - - ADL:FTT - abyssal hill - - - - - ADL:FTT - Feature on the ocean floor at a depth of 3500 - 6000 meters. - - - - - - - - - - physiographic feature - - ENVO - ENVO:00000191 - EcoLexicon:landform - EcoLexicon:landforms - FTT:754 - FTT:96 - SWEETRealm:Landform - TGN:21400 - TGN:21401 - geological feature - landform - - - ADL:FTT - geological feature - - - - - - - - - - mudflat - - A wetland that forms when mud is deposited by the tides, rivers, sea or oceans. - ENVO - ENVO:00000192 - EcoLexicon:mud_flat - FTT:1001 - FTT:185 - Geonames:H.FLTM - SPIRE:Mudflat - SWEETRealm:MudFlat - https://en.wikipedia.org/wiki/Mudflat - mud flat - mud flat - wetland - - - ADL:FTT - mud flat - - - - - ADL:FTT - wetland - - - - - A wetland that forms when mud is deposited by the tides, rivers, sea or oceans. - https://en.wikipedia.org/wiki/Mudflat - - - - - Geonames:feature - mud flat - - - - - - - - - - olive grove - - ENVO - ENVO:00000193 - FTT:1033 - FTT:506 - Geonames:V.GRVO - https://en.wikipedia.org/wiki/Olive_grove - olive grove - wood - - - ADL:FTT - wood - - - - - Geonames:feature - olive grove - - - - - - - - - - scree - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Broken rock that appears at the bottom of crags, mountain cliffs or valley shoulders. - ENVO - ENVO:00000194 - EcoLexicon:scree - FTT:1078 - FTT:96 - Geonames:T.TAL - SWEETRealm:Talus - TALUS - TGN:21508 - https://en.wikipedia.org/wiki/Scree - talus slope - - - TALUS - USGS:SDTS - - - - - Getty:TGN - talus slope - - - - - Geonames:feature - talus slope - - - - - Broken rock that appears at the bottom of crags, mountain cliffs or valley shoulders. - https://en.wikipedia.org/wiki/Scree - - - - - - - - - - sinkhole - - A natural depression or hole in the surface topography caused by the removal of soil or bedrock, often both, by water. Sinkholes may vary in size from less than a meter to several hundred meters both in diameter and depth, and vary in form from soil-lined bowls to bedrock-edged chasms. - ENVO - ENVO:00000195 - EcoLexicon:sink_hole - FTT:1073 - FTT:1074 - Geonames:T.SINK - SWEETRealm:Sink - TGN:21371 - basin - cenote - https://en.wikipedia.org/wiki/Sinkhole - sink - - - A natural depression or hole in the surface topography caused by the removal of soil or bedrock, often both, by water. Sinkholes may vary in size from less than a meter to several hundred meters both in diameter and depth, and vary in form from soil-lined bowls to bedrock-edged chasms. - https://en.wikipedia.org/wiki/Sinkhole - - - - - USGS:SDTS - sink - - - - - USGS:SDTS - basin - - - - - Geonames:feature - sink - - - - - - - - - - alkaline flat - - A dry lakebed consisting of fine-grained sediments infused with alkali salts. Generally the shore or bed of an endorheic lake. - ENVO - ENVO:00000196 - FTT:223 - FTT:477 - FTT:706 - FTT:895 - LTER:434 - SWEETRealm:Playa - chott - kavir - playa - salina - - - A dry lakebed consisting of fine-grained sediments infused with alkali salts. Generally the shore or bed of an endorheic lake. - https://en.wikipedia.org/wiki/Sabkha - - - - - ADL:FTT - playa - - - - - USGS:SDTS - salina - - - - - ADL:FTT - chott - - - - - ADL:FTT - kavir - - - - - - - - - - endorheic lake - - - - - - - - A lake from which there is no outflow of water, either on the surface as rivers, or underground by flow or diffusion through rock or permeable material. - EcoLexicon:endorheic_lake - https://en.wikipedia.org/wiki/Endorheic_lake - closed lake - - - A lake from which there is no outflow of water, either on the surface as rivers, or underground by flow or diffusion through rock or permeable material. - https://en.wikipedia.org/wiki/Endorheic - - - - - - - - - - ice-covered lake - - A lake permanently covered by ice. - ENVO - ENVO:00000198 - https://en.wikipedia.org/wiki/Subglacial_lake - envoPolar - - - A lake permanently covered by ice. - https://en.wikipedia.org/wiki/Lake#Types_of_lakes - - - - - - - - - - meromictic lake - - - A lake which has layers of water which do not intermix. The deepest layer of water in such a lake does not contain any dissolved oxygen. The layers of sediment at the bottom of a meromictic lake remain relatively undisturbed because there are no living organisms to stir them up. - ENVO - ENVO:00000199 - EcoLexicon:meromictic_lake_ - - - A lake which has layers of water which do not intermix. The deepest layer of water in such a lake does not contain any dissolved oxygen. The layers of sediment at the bottom of a meromictic lake remain relatively undisturbed because there are no living organisms to stir them up. - https://en.wikipedia.org/wiki/Lake#Types_of_lakes - - - - - - - - - - periglacial lake - - A lake, part of whose margin is formed by an ice mass, ice cap or glacier, the ice having obstructed the natural drainage of the land. - ENVO - ENVO:00000200 - https://en.wikipedia.org/wiki/Periglacial_lake - envoPolar - - - A lake, part of whose margin is formed by an ice mass, ice cap or glacier, the ice having obstructed the natural drainage of the land. - https://en.wikipedia.org/wiki/Lake#Types_of_lakes - - - - - - - - - - fjord lake - - - - - - - - A lake in a glacially eroded valley, which has been eroded below sea level. - ENVO - ENVO:00000201 - https://en.wikipedia.org/wiki/Fjord_lake - envoPolar - - - A lake in a glacially eroded valley, which has been eroded below sea level. - https://en.wikipedia.org/wiki/Lake#Types_of_lakes - - - - - - - - - - oxbow lake - - A lake which is formed when a wide meander from a stream or a river is cut off to form a lake. They are called oxbow lakes due to the distinctive curved shape that results from this process. - ENVO - ENVO:00000202 - EcoLexicon:ox-bow_lake - FTT:221 - FTT:903 - Geonames:H.LKO - TGN:21139 - https://en.wikipedia.org/wiki/Oxbow_lake - - - A lake which is formed when a wide meander from a stream or a river is cut off to form a lake. They are called oxbow lakes due to the distinctive curved shape that results from this process. - https://en.wikipedia.org/wiki/Lake#Types_of_lakes - - - - - - - - - - rift lake - - - - - - - - A lake which fills a depression that has formed as a result of subsidence along a a rift zone, an area of extensional tectonics in the continental crust. - - - A lake which fills a depression that has formed as a result of subsidence along a a rift zone, an area of extensional tectonics in the continental crust. - https://en.wikipedia.org/wiki/Lake#Types_of_lakes - https://en.wikipedia.org/wiki/Rift_lake - - - - - - - - - - ephemeral spring - - A spring whose flow is intermittent. - ENVO - ENVO:00000204 - - - A spring whose flow is intermittent. - MA:ma - - - - - - - - - - permanent spring - - A spring whose flow is continuous. - ENVO - ENVO:00000205 - - - A spring whose flow is continuous. - MA:ma - - - - - - - - - - marine neritic zone - - - ENVO - ENVO:00000206 - EcoLexicon:neritic_zone - SWEETRealm:NeriticZone - The water mass of an ocean directly above a continental shelf. - https://en.wikipedia.org/wiki/Neritic_zone - envoPolar - - - The water mass of an ocean directly above a continental shelf. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - oceanic zone - - - - - - - - ENVO - ENVO:00000207 - EcoLexicon:oceanic_zone - OceanLayer - The water mass of an ocean that is not above a continental shelf. - envoPolar - - - NASA:earthrealm - OceanLayer - - - - - The water mass of an ocean that is not above a continental shelf. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - marine pelagic zone - - An open ocean region. - ENVO - ENVO:00000208 - EcoLexicon:pelagic_zone - SPIRE:Pelagic - SWEETRealm:PelagicZone - https://en.wikipedia.org/wiki/Pelagic_zone - envoPolar - - - An open ocean region. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - marine photic zone - - - - - - - - ENVO - ENVO:00000209 - EcoLexicon:epipelagic_zone - PhoticZone - SPIRE:Epipelagic_zone - SWEETRealm:PhoticZone - The zone of an ocean from the surface to where photosynthesis can occur, due to the penetration of light. - epipelagic zone - https://en.wikipedia.org/wiki/Photic_zone - envoPolar - - - The zone of an ocean from the surface to where photosynthesis can occur, due to the penetration of light. - https://en.wikipedia.org/wiki/Ocean - - - - - NASA:earthrealm - PhoticZone - - - - - - - - - - marine aphotic zone - - AphoticZone - ENVO - ENVO:00000210 - EcoLexicon:aphotic_zone - SWEETRealm:AphoticZone - The zone of an ocean below 200m, in which photosynthesis cannot occur due to the lack of light. - https://en.wikipedia.org/wiki/Aphotic_zone - envoPolar - - - AphoticZone - NASA:earthrealm - - - - - The zone of an ocean below 200m, in which photosynthesis cannot occur due to the lack of light. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - marine bathypelagic zone - - ENVO - ENVO:00000211 - EcoLexicon:bathypelagic_zone - SWEETRealm:BathypelagicZone - The one of an ocean below the 10degC thermocline down to a temperature of 4degC. - https://en.wikipedia.org/wiki/Bathypelagic_zone - - - The one of an ocean below the 10degC thermocline down to a temperature of 4degC. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - marine abyssalpelagic zone - - ENVO - ENVO:00000212 - The zone of the ocean below the bathypelagic zone, with its lowest boundary at about 6000m. - - - The zone of the ocean below the bathypelagic zone, with its lowest boundary at about 6000m. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - marine mesopelagic zone - - ENVO - ENVO:00000213 - EcoLexicon:mesopelagic_zone - SPIRE:Mesopelagic_zone - SWEETRealm:MesopelagicZone - The zone of an ocean immediately below the photic zone down to a depth where the water temperature is 10degC (the thermocline). - https://en.wikipedia.org/wiki/Mesopelagic_zone - - - The zone of an ocean immediately below the photic zone down to a depth where the water temperature is 10degC (the thermocline). - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - hadalpelagic zone - - ENVO - ENVO:00000214 - The zone of an ocean in oceanic trenches, lying between 6000m and 10,000m. - - - The zone of an ocean in oceanic trenches, lying between 6000m and 10,000m. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - hydrothermal vent - - A fissure in the Earths's surface from which geothermally heated water issues. - ENVO - ENVO:00000215 - EcoLexicon:hydrothermal_vent - FTT:834 - HydrothermalVents - https://en.wikipedia.org/wiki/Hydrothermal_vent - - - - A fissure in the Earths's surface from which geothermally heated water issues. - https://en.wikipedia.org/wiki/Hydrothermal_vents - - - - - HydrothermalVents - NASA:earthrealm - - - - - - - - - - fumarole - - A hole in the Earth's crust from which steam and gases are emitted. - ENVO - ENVO:00000216 - EcoLexicon:fumarole - FTT:731 - FTT:732 - FUMAROLE - https://en.wikipedia.org/wiki/Fumarole - thermal feature - - - FUMAROLE - USGS:SDTS - - - - - A hole in the Earth's crust from which steam and gases are emitted. - USGS:SDTS - - - - - ADL:FTT - thermal feature - - - - - - - - - - solfatara - - A fumarole that emits sulfurous gases. - ENVO - ENVO:00000217 - EcoLexicon:solfatara - https://en.wikipedia.org/wiki/Solfatara - - - A fumarole that emits sulfurous gases. - https://en.wikipedia.org/wiki/Fumarole - - - - - - - - - - black smoker - - A hydrothermal vent found on the ocean floor. The vents are formed in fields hundreds of meters wide when superheated water from below the Earth's crust comes through the ocean floor. The superheated water is rich in dissolved minerals from the crust, most notably sulfides, which crystallize to create a chimney-like structure around each vent. When the superheated water in the vent comes in contact with the cold ocean water, many minerals are precipitated, creating the distinctive black color. The metal sulfides that are deposited can become massive sulfide ore deposits in time. - ENVO - ENVO:00000218 - SPIRE:Oceanic_vent - active chimney - https://en.wikipedia.org/wiki/Black_smoker - oceanic vent - sea vent - - - SPIRE:Oceanic_vent - oceanic vent - - - - - A hydrothermal vent found on the ocean floor. The vents are formed in fields hundreds of meters wide when superheated water from below the Earth's crust comes through the ocean floor. The superheated water is rich in dissolved minerals from the crust, most notably sulfides, which crystallize to create a chimney-like structure around each vent. When the superheated water in the vent comes in contact with the cold ocean water, many minerals are precipitated, creating the distinctive black color. The metal sulfides that are deposited can become massive sulfide ore deposits in time. - https://en.wikipedia.org/wiki/Black_smoker - - - - - - - - - - landlocked sea - - A sea that is not connected with an ocean. - ENVO - ENVO:00000219 - FTT:221 - FTT:871 - inland sea - lake - envoPolar - - - - ADL:FTT - lake - - - - - A sea that is not connected with an ocean. - MA:ma - - - - - USGS:SDTS - lake - - - - - USGS:SDTS - inland sea - - - - - - - - - - archipelago - - - - - - - - A group of geographically or geologically associated islands. - ENVO - ENVO:00000220 - EcoLexicon:archipelago - FTT:146 - ISLAND CLUSTER - IslandArc - TGN:21470 - TGN:21474 - https://en.wikipedia.org/wiki/Archipelago - island arc - island group - - - IslandArc - NASA:earthrealm - - - - - A group of geographically or geologically associated islands. - https://en.wikipedia.org/wiki/Archipelago - - - - - USGS:SDTS - island arc - - - - - Getty:TGN - island group - - - - - ISLAND CLUSTER - USGS:SDTS - - - - - - - - - - continental island - - - - - - - - - - - - - - - - - - - An island that lies on a continental shelf. - ENVO - ENVO:00000221 - EcoLexicon:continental_island - https://en.wikipedia.org/wiki/Continental_island - - - An island that lies on a continental shelf. - https://en.wikipedia.org/wiki/Island#Continental_island - - - - - - - - - - oceanic island - - - - - - - - - An island that does not sit on a continental shelf, and is of volcanic origin. - ENVO - ENVO:00000222 - EcoLexicon:oceanic_island - https://en.wikipedia.org/wiki/Oceanic_island - volcanic island - - - - An island that does not sit on a continental shelf, and is of volcanic origin. - https://en.wikipedia.org/wiki/Island#Oceanic_islands - - - - - - - - - - continental shelf - - - - - - - - ENVO - ENVO:00000223 - EcoLexicon:continental_margin - EcoLexicon:continental_shelf - FTT:283 - FTT:284 - FTT:535 - FTT:537 - FTT:538 - FTT:539 - Geonames:U.BDLU - Geonames:U.SHFU - SWEETRealm:ContinentalMargin - The continental shelf is a gentle slope. This class refers to the geographical continental shelf and not the legal concept of the same name. - The extended perimeter of each continent, which is covered during interglacial periods such as the current epoch by relatively shallow sea. - borderland - borderland (continental margin) - https://en.wikipedia.org/wiki/Continental_shelf - platform (continental margin) - shelf - shelf edge (ocean) - shelves, continental - envoPolar - - - Geonames:feature - shelf - - - - - ADL:FTT - shelves, continental - - - - - ADL:FTT - platform (continental margin) - - - - - ADL:FTT - shelf edge (ocean) - - - - - The extended perimeter of each continent, which is covered during interglacial periods such as the current epoch by relatively shallow sea. - https://en.wikipedia.org/wiki/Continental_shelf - - - - - ADL:FTT - borderland (continental margin) - - - - - Geonames:feature - borderland - - - - - - - - - - slightly stratified estuary - - An estuary whose river output is less than the marine input. Here, turbulence causes mixing of the whole water column, such that salinity varies more longitudinally rather than vertically. - ENVO - ENVO:00000224 - - - An estuary whose river output is less than the marine input. Here, turbulence causes mixing of the whole water column, such that salinity varies more longitudinally rather than vertically. - https://en.wikipedia.org/wiki/Estuary - - - - - - - - - - highly stratified estuary - - An estuary whose river output and marine input are more even, with river flow still dominant; turbulence induces more mixing of salt water upward than the reverse. - ENVO - ENVO:00000225 - - - An estuary whose river output and marine input are more even, with river flow still dominant; turbulence induces more mixing of salt water upward than the reverse. - https://en.wikipedia.org/wiki/Estuary - - - - - - - - - - saline wedge estuary - - An estuary whose river output greatly exceeds marine input; there is little mixing, and thus a sharp contrast between fresh surface water and saline bottom water. - ENVO - ENVO:00000226 - EcoLexicon:salt-wedge_estuary - salt wedge estuary - - - An estuary whose river output greatly exceeds marine input; there is little mixing, and thus a sharp contrast between fresh surface water and saline bottom water. - https://en.wikipedia.org/wiki/Estuary - - - - - - - - - - vertically mixed estuary - - An estuary whose river output is less than the marine input. Here, turbulence causes mixing of the whole water column, such that salinity varies more longitudinally rather than vertically. - ENVO - ENVO:00000227 - - - An estuary whose river output is less than the marine input. Here, turbulence causes mixing of the whole water column, such that salinity varies more longitudinally rather than vertically. - https://en.wikipedia.org/wiki/Estuary - - - - - - - - - - inverse estuary - - An estuary located in regions with high evaporation, there is no freshwater input and in fact salinity increases inland; overall flow is inward at the surface, downwells at the inland terminus, and flows outward subsurface. - ENVO - ENVO:00000228 - - - An estuary located in regions with high evaporation, there is no freshwater input and in fact salinity increases inland; overall flow is inward at the surface, downwells at the inland terminus, and flows outward subsurface. - https://en.wikipedia.org/wiki/Estuary - - - - - - - - - - intermittent estuary - - An estuary that varies dramatically depending on freshwater input, and is capable of changing from a wholly marine embayment to any of the other estuary types. - ENVO - ENVO:00000229 - - - An estuary that varies dramatically depending on freshwater input, and is capable of changing from a wholly marine embayment to any of the other estuary types. - https://en.wikipedia.org/wiki/Estuary - - - - - - - - - - coastal wetland - - - - - - - - - - - - - - - - - - - A wetland associated with the part of the land adjoining or near a sea or ocean. - https://en.wikipedia.org/wiki/Coastal_wetland - - - A wetland associated with the part of the land adjoining or near a sea or ocean. - MA:ma - - - - - - - - - - moor - - A wetland found in upland areas, characterised by acidic soils. - EcoLexicon:moor - FTT:1191 - FTT:991 - Geonames:H.MOOR - LTER:351 - TGN:21608 - https://en.wikipedia.org/wiki/Moor - moor - - - A wetland found in upland areas, characterised by acidic soils. - https://en.wikipedia.org/wiki/Moorland - - - - - Geonames:feature - moor - - - - - - - - - - fen - - A freshwater peat land with chemically basic (which roughly means alkaline) ground water. - ENVO - ENVO:00000232 - FTT:685 - TGN:21321 - https://en.wikipedia.org/wiki/Fen - wetland - - - ADL:FTT - wetland - - - - - A freshwater peat land with chemically basic (which roughly means alkaline) ground water. - https://en.wikipedia.org/wiki/Wetland#Wetland_types - - - - - USGS:SDTS - wetland - - - - - - - - - - swamp - - A wetland that features permanent inundation of large areas of land by shallow bodies of water, generally with a substantial number of hummocks, or dry-land protrusions. - ENVO - ENVO:00000233 - EcoLexicon:swamp - FTT:1226 - FTT:185 - FTT:480 - Geonames:H.SWMP - SPIRE:Swamp - SWEETRealm:Swamp - Swamp - TGN:21324 - cienaga - https://en.wikipedia.org/wiki/Swamp - swamp - wetland - - - USGS:SDTS - wetland - - - - - A wetland that features permanent inundation of large areas of land by shallow bodies of water, generally with a substantial number of hummocks, or dry-land protrusions. - https://en.wikipedia.org/wiki/Swamp - - - - - NASA:earthrealm - Swamp - - - - - ADL:FTT - cienaga - - - - - ADL:FTT - wetland - - - - - Geonames:feature - swamp - - - - - - - - - - bayou - - A small, slow-moving stream or creek; usually located in low-lying areas. - ENVO - ENVO:00000234 - EcoLexicon:embayment_ - FTT:1206 - FTT:228 - FTT:230 - TGN:21303 - TGN:21305 - bahia - embayment - https://en.wikipedia.org/wiki/Bayou - lake - lake - slough - watercourse - - - USGS:SDTS - lake - - - - - USGS:SDTS - lake - - - - - ADL:FTT - bahia - - - - - USGS:SDTS - watercourse - - - - - ADL:FTT - embayment - - - - - A small, slow-moving stream or creek; usually located in low-lying areas. - https://en.wikipedia.org/wiki/Bayous - - - - - - - - - - carr - - A fen which has developed to the point where it supports trees. - ENVO - ENVO:00000235 - - - A fen which has developed to the point where it supports trees. - https://en.wikipedia.org/wiki/Wetland#Wetland_types - - - - - - - - - - dambo - - A class of complex shallow wetlands in central, southern and eastern Africa, particularly in Zambia and Zimbabwe. They are generally found in higher rainfall flat plateau areas, and have river-like branching forms which may be nowhere very large, but common enough to add up to a large area. - - - A class of complex shallow wetlands in central, southern and eastern Africa, particularly in Zambia and Zimbabwe. They are generally found in higher rainfall flat plateau areas, and have river-like branching forms which may be nowhere very large, but common enough to add up to a large area. - https://en.wikipedia.org/wiki/Dambos - - - - - - - - - - hydromorphic/phreatic dambo - - A danbo associated with a headwater. - - - A danbo associated with a headwater. - https://en.wikipedia.org/wiki/Dambos - - - - - - - - - - fluvial dambo - - A dambo associated with a river. - - - A dambo associated with a river. - https://en.wikipedia.org/wiki/Dambos - - - - - - - - - - pocasin - - A palustrine wetland with deep, acidic, sandy, peat soils. Groundwater saturates the soil except during brief seasonal dry spells and during prolonged droughts. Pocosin soils are nutrient deficient (oligotrophic), especially in phosphorus. - - - A palustrine wetland with deep, acidic, sandy, peat soils. Groundwater saturates the soil except during brief seasonal dry spells and during prolonged droughts. Pocosin soils are nutrient deficient (oligotrophic), especially in phosphorus. - https://en.wikipedia.org/wiki/Pocosin - - - - - - - - - - saline wetland - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000240 - It would be more correct to say that this has_quality salty or has_part ((soil and water) and has_increased_levels_of salt. - - - - - - - - tidal mudflat - - A level tract lying at a small depth below the surface of water, or alternately covered and left bare by the tide. - ENVO - ENVO:00000241 - EcoLexicon:tidal_flat - FLAT - FTT:1230 - FTT:185 - FTT:706 - Geonames:H.FLTT - https://en.wikipedia.org/wiki/Tidal_flat - tidal flat - wetland - - - Geonames:feature - tidal flat - - - - - ADL:FTT - wetland - - - - - A level tract lying at a small depth below the surface of water, or alternately covered and left bare by the tide. - USGS:SDTS - - - - - USGS:SDTS - tidal flat - - - - - ADL:FTT - tidal flat - - - - - FLAT - USGS:SDTS - - - - - - - - - - lacustrine mudflat - - A wetland that forms when mud is deposited by a stream. - - - A wetland that forms when mud is deposited by a stream. - MA:ma - - - - - - - - - - freshwater wetland - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A wetland whose water that contains low concentrations of salts. - - - A wetland whose water that contains low concentrations of salts. - MA:ma - - - - - - - - - - abyssal plain - - - - - - - - A flat or very gently sloping areas of the deep ocean basin floor. - Abyssalplain - ENVO - ENVO:00000244 - EcoLexicon:abyssal_plain - FTT:4 - SPIRE:Abyssal - TGN:23302 - abyssal feature - https://en.wikipedia.org/wiki/Abyssal_plain - - - Abyssalplain - NASA:earthrealm - - - - - ADL:FTT - abyssal feature - - - - - A flat or very gently sloping areas of the deep ocean basin floor. - https://en.wikipedia.org/wiki/Abyssal_plain - - - - - - - - - - maar - - A broad, low relief crater that results from a phreatic eruption or explosion caused by groundwater contact with hot lava or magma. The maar typically fills with water to form a relatively shallow crater lake. - - - A broad, low relief crater that results from a phreatic eruption or explosion caused by groundwater contact with hot lava or magma. The maar typically fills with water to form a relatively shallow crater lake. - https://en.wikipedia.org/wiki/Maar - - - - - - - - - - volcanic crater - - - - - - - - - A crater formed by a volcano, within which occurs a vent (or vents) from which magma erupts as gases, lava, and ejecta. - FTT:219 - TGN:21408 - crater - https://en.wikipedia.org/wiki/Volcanic_crater - - - A crater formed by a volcano, within which occurs a vent (or vents) from which magma erupts as gases, lava, and ejecta. - https://en.wikipedia.org/wiki/Volcanic_crater - - - - - - - - - - volcano - - - - - - - - - An opening, or rupture, in the Earth's surface or crust, which allows hot, molten rock, ash and gases to escape from deep below the surface. - ENVO - ENVO:00000247 - EcoLexicon:volcano - FTT:592 - Geonames:T.VLC - TGN:21406 - Volcano - https://en.wikipedia.org/wiki/Volcano - mount - volcano - - - NASA:earthrealm - Volcano - - - - - An opening, or rupture, in the Earth's surface or crust, which allows hot, molten rock, ash and gases to escape from deep below the surface. - https://en.wikipedia.org/wiki/Volcano - - - - - USGS:SDTS - mount - - - - - Geonames:feature - volcano - - - - - - - - - - glacial valley - - A valley that contains, or contained, a glacier and was formed by glacial activity. Typically U-shaped in cross-section. - ENVO - ENVO:00000248 - https://en.wikipedia.org/wiki/Glacial_valley - valley - envoPolar - - - A valley that contains, or contained, a glacier and was formed by glacial activity. Typically U-shaped in cross-section. - MA:ma - - - - - USGS:SDTS - valley - - - - - - - - - - lateral moraine - - ENVO - ENVO:00000249 - EcoLexicon:lateral_moraine - The parallel ridges of till deposited along the sides of an alglacier. The unconsolidated debris is deposited on top of the glacier by frost shattering of the valley walls and from tributary streams flowing into the valley. The till is carried along the glacial margin until the glacier melts. - https://en.wikipedia.org/wiki/Lateral_moraine - moraine - envoPolar - - - The parallel ridges of till deposited along the sides of an alglacier. The unconsolidated debris is deposited on top of the glacier by frost shattering of the valley walls and from tributary streams flowing into the valley. The till is carried along the glacial margin until the glacier melts. - https://en.wikipedia.org/wiki/Moraine - - - - - USGS:SDTS - moraine - - - - - - - - - - medial moraine - - A moriane formed when the inside lateral moraines of two glaciers merge together. They form a ridge down the center of the combined glaciers. - ENVO - ENVO:00000250 - https://en.wikipedia.org/wiki/Medial_moraine - envoPolar - - - A moriane formed when the inside lateral moraines of two glaciers merge together. They form a ridge down the center of the combined glaciers. - https://en.wikipedia.org/wiki/Moraine - - - - - - - - - - ground moraine - - A till covered area with irregular topography and no ridges, often forming gently rolling hills or plains. Forms by the accumulation of till under the ice by lodgement, but may also be deposited as the glacier retreats. - ENVO - ENVO:00000251 - EcoLexicon:ground_moraine - https://en.wikipedia.org/wiki/Ground_moraine - envoPolar - - - A till covered area with irregular topography and no ridges, often forming gently rolling hills or plains. Forms by the accumulation of till under the ice by lodgement, but may also be deposited as the glacier retreats. - https://en.wikipedia.org/wiki/Moraine - - - - - - - - - - terminal moraine - - ENVO - ENVO:00000252 - EcoLexicon:terminal_moraine - Ridges of unconsolidated debris deposited at the snout or end of the glacier. They usually reflect the shape of the glacier's terminus. - delta moraine - end moraine - https://en.wikipedia.org/wiki/Terminal_moraine - moraine - envoPolar - - - USGS:SDTS - end moraine - - - - - USGS:SDTS - moraine - - - - - USGS:SDTS - delta moraine - - - - - Ridges of unconsolidated debris deposited at the snout or end of the glacier. They usually reflect the shape of the glacier's terminus. - https://en.wikipedia.org/wiki/Moraine - - - - - - - - - - scroll plane - - A plain where a stream meanders across an area with a very low gradient, usually with a fairly continuous discharge. In addition to meanders, scroll plains are also characterised by many oxbow lakes. - ENVO - ENVO:00000253 - - - A plain where a stream meanders across an area with a very low gradient, usually with a fairly continuous discharge. In addition to meanders, scroll plains are also characterised by many oxbow lakes. - https://en.wikipedia.org/wiki/Scroll_plain - - - - - - - - - - till plan - - An extensive flat plain of glacial till that forms when a sheet of ice becomes detached from the main body of a glacier and melts in place depositing the sediments it carried. - ENVO - ENVO:00000254 - - - An extensive flat plain of glacial till that forms when a sheet of ice becomes detached from the main body of a glacier and melts in place depositing the sediments it carried. - https://en.wikipedia.org/wiki/Till_plain - - - - - - - - - - flood plain - - An area which is subject to periodic flooding. - ENVO - ENVO:00000255 - EcoLexicon:flood_plain - FLOOD PLAIN - FTT:288 - FTT:98 - Floodplain - LTER:197 - SWEETRealm:FloodPlain - TGN:21460 - bottomland - floodplain - https://en.wikipedia.org/wiki/Flood_plain - - - An area which is subject to periodic flooding. - USGS:SDTS - - - - - ADL:FTT - bottomland - - - - - FLOOD PLAIN - USGS:SDTS - - - - - ADL:FTT - floodplain - - - - - Floodplain - NASA:earthrealm - - - - - - - - - - floodway - - - - - - - - ENVO - ENVO:00000256 - FTT:710 - The stream channel and adjacent areas that carry flood flows in a flood plain. - https://en.wikipedia.org/wiki/Floodway - - - The stream channel and adjacent areas that carry flood flows in a flood plain. - https://en.wikipedia.org/wiki/Flood_plain - - - - - - - - - - flood fringe - - - - - - - - - - - - - - Area of a flood plane covered by the flood, but which does not experience a strong current. - ENVO - ENVO:00000257 - https://en.wikipedia.org/wiki/Flood_fringe - - - Area of a flood plane covered by the flood, but which does not experience a strong current. - https://en.wikipedia.org/wiki/Flood_plain - - - - - - - - - - alluvial plain - - - - - - - - - - - - - - - - - - - - - - - - - - - - A relatively flat and gently sloping landform found at the base of a range of hills or mountains, formed by the deposition of alluvial soil over a long period of time by one or more streams coming from the mountains. - ENVO - ENVO:00000258 - EcoLexicon:alluvial_plain - SWEETRealm:AlluvialPlain - https://en.wikipedia.org/wiki/Alluvial_plain - - - A relatively flat and gently sloping landform found at the base of a range of hills or mountains, formed by the deposition of alluvial soil over a long period of time by one or more streams coming from the mountains. - https://en.wikipedia.org/wiki/Alluvial_plain - - - - - - - - - - lacustrine plain - - A plain that originally formed in a lacustrine environment, that is, as the bed of a lake, but from which the water has disappeared, by natural drainage, evaporation or other geophysical processes. - ENVO - ENVO:00000259 - SWEETRealm:LacustrinePlain - https://en.wikipedia.org/wiki/Lacustrine_plain - - - A plain that originally formed in a lacustrine environment, that is, as the bed of a lake, but from which the water has disappeared, by natural drainage, evaporation or other geophysical processes. - https://en.wikipedia.org/wiki/Lacustrine_plain - - - - - - - - - - prairie - - An area of land of low topographic relief that historically supported grasses and herbs, with few trees, and having generally a mesic (moderate or temperate) climate. Dominated by tall grasses (contrast steppe). - ENVO - ENVO:00000260 - FTT:259 - FTT:707 - FTT:769 - FTT:926 - TGN:21605 - TGN:21606 - grassland - https://en.wikipedia.org/wiki/Prairie - llanos - pampa - plain - veld - - - ADL:FTT - plain - - - - - Getty:TGN - pampa - - - - - USGS:SDTS - veld - - - - - ADL:FTT - grassland - - - - - An area of land of low topographic relief that historically supported grasses and herbs, with few trees, and having generally a mesic (moderate or temperate) climate. Dominated by tall grasses (contrast steppe). - https://en.wikipedia.org/wiki/Prairie - - - - - USGS:SDTS - grassland - - - - - ADL:FTT - llanos - - - - - - - - - - savanna - - A grassland of the tropics or subtropics with scattered trees. - ENVO - ENVO:00000261 - FTT:259 - FTT:770 - FTT:771 - Savanna - TGN:21607 - grassland - https://en.wikipedia.org/wiki/Savanna - savannah - - - ADL:FTT - grassland - - - - - A grassland of the tropics or subtropics with scattered trees. - https://en.wikipedia.org/wiki/Tropical_and_subtropical_grasslands%2C_savannas%2C_and_shrublands - - - - - ADL:FTT - savannah - - - - - USGS:SDTS - grassland - - - - - NASA:earthrealm - Savanna - - - - - - - - - - steppe - - A plain without trees (apart from those near rivers and lakes); it is similar to a prairie, although a prairie is generally considered as being dominated by tall grasses, while short grasses are said to be normal in the steppe. It may be semi-desert, or covered with grass or shrubs or both, depending on the season and latitude. - ENVO - ENVO:00000262 - EcoLexicon:steppe - FTT:259 - grassland - https://en.wikipedia.org/wiki/Steppe - pampa - pampas - puszta - - - USGS:SDTS - puszta - - - - - USGS:SDTS - pampas - - - - - USGS:SDTS - grassland - - - - - A plain without trees (apart from those near rivers and lakes); it is similar to a prairie, although a prairie is generally considered as being dominated by tall grasses, while short grasses are said to be normal in the steppe. It may be semi-desert, or covered with grass or shrubs or both, depending on the season and latitude. - https://en.wikipedia.org/wiki/Steppe - - - - - ADL:FTT - grassland - - - - - - - - - - fissure cave - - - - - - - - A narrow, vertical cave passage, often developed along a joint but not necessarily so. Usually due to solution but sometimes to tension. - ENVO - ENVO:00000263 - - - A narrow, vertical cave passage, often developed along a joint but not necessarily so. Usually due to solution but sometimes to tension. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - seamount - - - - - - - - - - - - - - - - - - - - A mountain rising from the ocean seafloor that does not reach to the water's surface (sea level), and thus is not an island. Typically formed from volcanoes that rise abruptly and are usually found rising from a seafloor of 1,000 - 4,000 meters depth. Independent features that rise to at least 1,000 meters above the seafloor. - ENVO - ENVO:00000264 - EcoLexicon:mountain - EcoLexicon:seamount - FTT:1241 - Geonames:MTSU - Geonames:RNGU - Geonames:U.HLLU - Geonames:U.HLSU - Geonames:U.KNLU - Geonames:U.KNSU - Geonames:U.MESU - Geonames:U.MNDU - Geonames:U.MTU - Geonames:U.PKSU - Geonames:U.PKU - Geonames:U.SMSU - Geonames:U.SMU - Seamount - TGN:23132 - TGN:23133 - TGN:23172 - TGN:23175 - TGN:23176 - TGN:23178 - hill - hills - https://en.wikipedia.org/wiki/Seamount - knoll - knolls - mesa - mound - mount - mount - mountain - mountains - peak - peaks - range - sea mount - sea-mount - seaknoll - seakpeak - seamount - submarine volcano - undersea hill - undersea knoll - undersea mound - - - Getty:TGN - undersea mound - - - - - Geonames:feature - peak - - - - - Geonames:feature - mountains - - - - - Geonames:feature - mountain - - - - - USGS:SDTS - mount - - - - - Getty:TGN - undersea knoll - - - - - Getty:TGN - undersea hill - - - - - Geonames:feature - seamount - - - - - Geonames:feature - peaks - - - - - Geonames:feature - knoll - - - - - NASA:earthrealm - Seamount - - - - - Geonames:feature - hill - - - - - A mountain rising from the ocean seafloor that does not reach to the water's surface (sea level), and thus is not an island. Typically formed from volcanoes that rise abruptly and are usually found rising from a seafloor of 1,000 - 4,000 meters depth. Independent features that rise to at least 1,000 meters above the seafloor. - https://en.wikipedia.org/wiki/Seamount - - - - - Geonames:feature - knolls - - - - - Geonames:feature - range - - - - - Geonames:feature - mound - - - - - USGS:SDTS - seakpeak - - - - - USGS:SDTS - mount - - - - - Geonames:feature - mesa - - - - - USGS:SDTS - seaknoll - - - - - Geonames:feature - hills - - - - - ADL:FTT - seakpeak - - - - - - - - - - guyot - - A flat-topped seamount. - ENVO - ENVO:00000265 - EcoLexicon:tablemount - FTT:1197 - FTT:777 - FTT:778 - Geonames:U.TMSU - TGN:23171 - https://en.wikipedia.org/wiki/Guyot - plateau - seamount - tablemount - tablemount (seafloor) - tablemounts - - - Geonames:feature - tablemounts - - - - - Geonames:feature - tablemount - - - - - USGS:SDTS - plateau - - - - - A flat-topped seamount. - https://en.wikipedia.org/wiki/Guyot - - - - - ADL:FTT - tablemount (seafloor) - - - - - ADL:FTT - seamount - - - - - - - - - - pasture - - ENVO - ENVO:00000266 - FTT:45 - FTT:67 - Geonames:L.GRAZ - Grassland used for grazing of ungulate livestock as part of a farm or ranch. - agricultural site - cropland - grassland - grazing area - https://en.wikipedia.org/wiki/Pasture - - - Grassland used for grazing of ungulate livestock as part of a farm or ranch. - https://en.wikipedia.org/wiki/Pasture - - - - - USGS:SDTS - grassland - - - - - USGS:SDTS - cropland - - - - - ADL:FTT - agricultural site - - - - - Geonames:feature - grazing area - - - - - - - - - - submarine canyon - - - - - - - - - - - - - - - A steep-sided valley on the sea floor of the continental slope. Many submarine canyons are found as extensions to large rivers; however there are many that have no such association. Canyons cutting the continental slopes have been found at depths greater than 2 km below sea level. Many submarine canyons continue as submarine channels across continental rise areas and may extend for hundreds of kilometers. - ENVO - ENVO:00000267 - EcoLexicon:submarine_canyon - FTT:421 - Geonames:U.CNSU - Geonames:U.CNYU - SubmarineCanyon - TGN:23415 - TGN:23416 - canyon - canyons - https://en.wikipedia.org/wiki/Submarine_canyon - undersea canyon - undersea ravine - - - Getty:TGN - undersea canyon - - - - - A steep-sided valley on the sea floor of the continental slope. Many submarine canyons are found as extensions to large rivers; however there are many that have no such association. Canyons cutting the continental slopes have been found at depths greater than 2 km below sea level. Many submarine canyons continue as submarine channels across continental rise areas and may extend for hundreds of kilometers. - https://en.wikipedia.org/wiki/Submarine_canyon - - - - - Geonames:feature - canyon - - - - - Getty:TGN - undersea ravine - - - - - NASA:earthrealm - SubmarineCanyon - - - - - Geonames:feature - canyons - - - - - - - - - - lake bed - - - - - - - - ENVO - ENVO:00000268 - FTT:221 - FTT:804 - The ground surface that lies beneath a lake. - lake - lake bottom - - - ADL:FTT - lake - - - - - MA:ma - The ground surface that lies beneath a lake. - - - - - - - - - - land-tied island - - A continental island connected to its adjacent land by a natural feature, such as a causeway. - ENVO - ENVO:00000269 - FTT:147 - FTT:890 - Geonames:T.ISLT - TGN:21511 - island - land-tied island - - - ADL:FTT - island - - - - - Geonames:feature - land-tied island - - - - - A continental island connected to its adjacent land by a natural feature, such as a causeway. - MA:ma - - - - - - - - - - beaver pond - - A pond that has formed as a consequence of the activities of beavers, building a beaver dam. - ENVO - ENVO:00000270 - FTT:245 - https://en.wikipedia.org/wiki/Beaver_pond - lake - - - A pond that has formed as a consequence of the activities of beavers, building a beaver dam. - MA:ma - - - - - ADL:FTT - lake - - - - - - - - - - chott - - A dry (salt) lake in the Saharan area of Africa that stays dry in the summer, but receive some water in the winter. This water may come as a groundwater discharge. - ENVO - ENVO:00000271 - FTT:477 - https://en.wikipedia.org/wiki/Chott - shott - - - A dry (salt) lake in the Saharan area of Africa that stays dry in the summer, but receive some water in the winter. This water may come as a groundwater discharge. - https://en.wikipedia.org/wiki/Chott - - - - - - - - - - confluence - - - - - - - - ENVO - ENVO:00000272 - EcoLexicon:confluence - FTT:105 - FTT:531 - Geonames:H.CNFL - TGN:21160 - TGN:21381 - The point where a tributary joins a more major river. - confluence - https://en.wikipedia.org/wiki/Confluence - stream - stream junction - - - Geonames:feature - confluence - - - - - Getty:TGN - stream junction - - - - - The point where a tributary joins a more major river. - https://en.wikipedia.org/wiki/Confluence - - - - - Geonames:feature - stream - - - - - ADL:FTT - confluence - - - - - - - - - - continental slope - - - - - - - - ENVO - ENVO:00000273 - EcoLexicon:continental_slope - FTT:536 - The seabed below the end of the continental shelf (the shelf break). The continental slope is much steeper than the shelf; the average angle is 3, but it can be as low as 1 or as high as 10. The slope is often cut with submarine canyons. - https://en.wikipedia.org/wiki/Continental_slope - envoPolar - - - The seabed below the end of the continental shelf (the shelf break). The continental slope is much steeper than the shelf; the average angle is 3, but it can be as low as 1 or as high as 10. The slope is often cut with submarine canyons. - https://en.wikipedia.org/wiki/Continental_margin - - - - - - - - - - continental rise - - - - - - - - ENVO - ENVO:00000274 - FTT:534 - Geonames:U.CRSU - TGN:23110 - The continental rise is below the continental slope, but landward of the abyssal plains. Its gradient is intermediate between the slope and the shelf, on the order of 0.5-1. Extending as far as 500 km from the slope, it consists of thick sediments deposited by turbidity currents from the shelf and slope. Sediment cascades down the slope and accumulates as a pile of sediment at the base of the slope, called the continental rise. - continental rise - https://en.wikipedia.org/wiki/Continental_rise - - - The continental rise is below the continental slope, but landward of the abyssal plains. Its gradient is intermediate between the slope and the shelf, on the order of 0.5-1. Extending as far as 500 km from the slope, it consists of thick sediments deposited by turbidity currents from the shelf and slope. Sediment cascades down the slope and accumulates as a pile of sediment at the base of the slope, called the continental rise. - https://en.wikipedia.org/wiki/Continental_margin - - - - - Geonames:feature - continental rise - - - - - - - - - - ocean trench - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000275 - EcoLexicon:deep_sea_trench - FTT:1021 - FTT:609 - FTT:610 - Geonames:U.TRGU - Geonames:U.TRNU - Hemispheric-scale long but narrow topographic depressions of the sea floor. They are the deepest parts of the ocean floor. - SWEETRealm:Trench - TGN:23462 - TGN:23464 - Trench - deep - deep sea trench - https://en.wikipedia.org/wiki/Ocean_trench - ocean trench - undersea trench - - - ADL:FTT - ocean trench - - - - - Getty:TGN - undersea trench - - - - - Hemispheric-scale long but narrow topographic depressions of the sea floor. They are the deepest parts of the ocean floor. - https://en.wikipedia.org/wiki/Oceanic_trench - - - - - USGS:SDTS - deep - - - - - NASA:earthrealm - Trench - - - - - - - - - - drumlin - - An elongated whale-shaped hill formed by glacial action. Its long axis is parallel with the movement of the ice, with the blunter end facing into the glacial movement. Drumlins are sometimes compared to kames, but their formation is distinctively different. A drumlin is not originally shaped by meltwater, but by the ice itself and has a quite regular shape. It occurs in fine grained material, such as clay or shale, not in sands and gravels. And drumlins usually have concentric layers of material, as the ice successively plasters new layers in its movement. - ENVO - ENVO:00000276 - EcoLexicon:drumlin - FTT:647 - TGN:21411 - https://en.wikipedia.org/wiki/Drumlin - mount - ridge - - - An elongated whale-shaped hill formed by glacial action. Its long axis is parallel with the movement of the ice, with the blunter end facing into the glacial movement. Drumlins are sometimes compared to kames, but their formation is distinctively different. A drumlin is not originally shaped by meltwater, but by the ice itself and has a quite regular shape. It occurs in fine grained material, such as clay or shale, not in sands and gravels. And drumlins usually have concentric layers of material, as the ice successively plasters new layers in its movement. - https://en.wikipedia.org/wiki/Drumlin - - - - - USGS:SDTS - mount - - - - - USGS:SDTS - ridge - - - - - - - - - - dry lake - - A lake that has either permanently or temporally lost its water. - ENVO - ENVO:00000277 - FTT:650 - Geonames:H.LBED - SWEETRealm:DryLake - TGN:21117 - https://en.wikipedia.org/wiki/Dry_lake - lake - lake bed - Classes like this pose a logical problem. This probably shouldn't be a lake (water body) but a depression. Lakes which have temporarily lost water should be distinguished from permanently dry lakes. - - - Geonames:feature - lake bed - - - - - A lake that has either permanently or temporally lost its water. - MA:ma - - - - - ADL:FTT - lake - - - - - - - - - - dry stream - - - - - - - - A stream channel through which no water flows and which has dried, containing no appreciable accumulations of water. - ENVO - ENVO:00000278 - FTT:105 - FTT:651 - Geonames:T.SBED - dry stream bed - - - A stream channel through which no water flows and which has dried, containing no appreciable accumulations of water. - MA:ma - http://orcid.org/0000-0002-4366-3088 - - - - - Geonames:feature - dry stream bed - - - - - ADL:FTT - dry stream bed - - - - - - - - - - saline pan - - A flat expanse of ground covered with salt and other minerals, usually shining white under the sun. A salt pan is formed where water pools. A saline pan would be a lake or a pond if it were located in a climate where the rate of water evaporation were not faster than the rate of water precipitation, i.e., if it were not in a desert. If the water is unable to drain into the ground, it remains on the surface until it evaporates, leaving behind whatever minerals were dissolved. Over thousands of years, the minerals (usually salts) accumulate on the surface. - ENVO - ENVO:00000279 - EcoLexicon:salt_pan - Geonames:L.SALT - SALT PAN - SWEETRealm:SaltFlat - TGN:21459 - TGN:21506 - salt area - salt flat - salt pan - - - Getty:TGN - salt flat - - - - - A flat expanse of ground covered with salt and other minerals, usually shining white under the sun. A salt pan is formed where water pools. A saline pan would be a lake or a pond if it were located in a climate where the rate of water evaporation were not faster than the rate of water precipitation, i.e., if it were not in a desert. If the water is unable to drain into the ground, it remains on the surface until it evaporates, leaving behind whatever minerals were dissolved. Over thousands of years, the minerals (usually salts) accumulate on the surface. - https://en.wikipedia.org/wiki/Salt_pan_%28geology%29 - - - - - SALT PAN - USGS:SDTS - - - - - Getty:TGN - salt area - - - - - Geonames:feature - salt area - - - - - - - - - - escarpment - - A transition zone between different physiogeographic provinces that involves an elevation differential, often involving high cliffs. Most commonly a transition from one series of sedimentary rocks to another series of a different age and composition. In such cases, the escarpment usually represents the line of erosional loss of the newer rock over the older. - ENVO - ENVO:00000280 - EcoLexicon:scarp - FTT:490 - FTT:596 - Geonames:T.CUET - Geonames:T.SCRP - TGN:21489 - TGN:21500 - cliff - cuesta - escarpment - https://en.wikipedia.org/wiki/Escarpment - scarp - - - Getty:TGN - cuesta - - - - - Geonames:feature - escarpment - - - - - USGS:SDTS - cliff - - - - - A transition zone between different physiogeographic provinces that involves an elevation differential, often involving high cliffs. Most commonly a transition from one series of sedimentary rocks to another series of a different age and composition. In such cases, the escarpment usually represents the line of erosional loss of the newer rock over the older. - https://en.wikipedia.org/wiki/Escarpment - - - - - Geonames:feature - cuesta - - - - - ADL:FTT - cuesta - - - - - - - - - - fault escarpment - - An escarpment resulting from a fault. - ENVO - ENVO:00000281 - https://en.wikipedia.org/wiki/Fault_escarpment - - - An escarpment resulting from a fault. - https://en.wikipedia.org/wiki/Escarpment - - - - - - - - - - esker - - A long, winding ridge of stratified sand and gravel which occur in glaciated and formerly glaciated regions of Europe and North America. - ENVO - ENVO:00000282 - FTT:673 - https://en.wikipedia.org/wiki/Esker - ridge - - - USGS:SDTS - ridge - - - - - ADL:FTT - ridge - - - - - A long, winding ridge of stratified sand and gravel which occur in glaciated and formerly glaciated regions of Europe and North America. - https://en.wikipedia.org/wiki/Esker - - - - - - - - - - ridge - - - - - - - - A long and narrow upland with steep sides. - ENVO - ENVO:00000283 - EcoLexicon:beach_cusp - EcoLexicon:crest - FTT:1176 - FTT:1177 - FTT:154 - FTT:155 - FTT:236 - FTT:596 - FTT:809 - FTT:844 - Geonames:T.RDGE - RIDGE - Ridge - SWEETRealm:Ridge - TGN:21366 - TGN:21491 - arete - beach cusp - beach ridge - crest - cuesta - hogback - https://en.wikipedia.org/wiki/Ridge - icecap ridge - ridge - rise (seafloor) - spur - spur (physiographic) - - - ADL:FTT - rise (seafloor) - - - - - Getty:TGN - spur - - - - - Geonames:feature - ridge - - - - - USGS:SDTS - crest - - - - - A long and narrow upland with steep sides. - USGS:SDTS - - - - - ADL:FTT - hogback - - - - - ADL:FTT - beach ridge - - - - - ADL:FTT - spur (physiographic) - - - - - ADL:FTT - cuesta - - - - - USGS:SDTS - beach ridge - - - - - USGS:SDTS - beach cusp - - - - - ADL:FTT - arete - - - - - USGS:SDTS - arete - - - - - USGS:SDTS - cuesta - - - - - RIDGE - USGS:SDTS - - - - - NASA:earthrealm - Ridge - - - - - ADL:FTT - icecap ridge - - - - - - - - - - quarry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An open-pit mine from which rock or minerals are extracted. - ENVO - ENVO:00000284 - EcoLexicon:quarry - FTT:14 - FTT:974 - Geonames:S.MNQR - TGN:54217 - https://en.wikipedia.org/wiki/Quarry - - - An open-pit mine from which rock or minerals are extracted. - https://en.wikipedia.org/wiki/Quarry - - - - - - - - - - quicksand area - - A bed of loose sand mixed with water forming a soft, shifting mass that yields easily to pressure. - ENVO - ENVO:00000285 - EcoLexicon:quicksand - FTT:206 - FTT:207 - Geonames:L.QCKS - QUICKSAND - TGN:21503 - bar - https://en.wikipedia.org/wiki/Quicksand - quicksand - quicksand - - - Geonames:feature - quicksand - - - - - QUICKSAND - USGS:SDTS - - - - - A bed of loose sand mixed with water forming a soft, shifting mass that yields easily to pressure. - USGS:SDTS - - - - - ADL:FTT - bar - - - - - - - - - - polder - - An area reclaimed from the sea by diking and draining. - ENVO - ENVO:00000286 - EcoLexicon:polder - FTT:1070 - FTT:96 - Geonames:T.PLDR - TGN:21522 - https://en.wikipedia.org/wiki/Polder - physiographic feature - polder - - - Geonames:feature - polder - - - - - ADL:FTT - physiographic feature - - - - - An area reclaimed from the sea by diking and draining. - Geonames:feature - - - - - - - - - - butte - - An isolated hill with steep sides and a small flat top, smaller than mesas and plateaus. Buttes are formed by erosion when a cap of hard rock, usually of volcanic origin, covers a layer of softer rock that is easily worn away. This hard rock avoids erosion while the rock around it wears down. - ENVO - ENVO:00000287 - FTT:376 - Geonames:T.BUTE - SWEETRealm:Butte - TGN:21443 - butte - https://en.wikipedia.org/wiki/Butte - plateau - - - ADL:FTT - An isolated hill with steep sides and a small flat top, smaller than mesas and plateaus. Buttes are formed by erosion when a cap of hard rock, usually of volcanic origin, covers a layer of softer rock that is easily worn away. This hard rock avoids erosion while the rock around it wears down. - - - - - Geonames:feature - butte - - - - - USGS:SDTS - plateau - - - - - - - - - - cotton plantation - - ENVO - ENVO:00000288 - FTT:45 - FTT:53 - Geonames:ESTC - agricultural site - cotton plantation - https://en.wikipedia.org/wiki/Cotton_plantation - - - ADL:FTT - agricultural site - - - - - Geonames:feature - cotton plantation - - - - - - - - - - horst - - ENVO - ENVO:00000289 - The raised fault block bounded by normal faults. The raised block is a portion of the Earth's crust that has remained stationary while the land has sunk on either side of it or has been crushed by a mountain range against it. - - - The raised fault block bounded by normal faults. The raised block is a portion of the Earth's crust that has remained stationary while the land has sunk on either side of it or has been crushed by a mountain range against it. - https://en.wikipedia.org/wiki/Horst_%28geology%29 - - - - - - - - - - graben - - A depressed block of land bordered by parallel faults. A graben is the result of a block of land being downthrown producing a valley with a distinct scarp on each side. Grabens often occur side-by-side with horsts. Horst and graben structures are indicative of tensional forces and crustal stretching. - ENVO - ENVO:00000290 - FTT:682 - SWEETRealm:FaultZone - fault zone - https://en.wikipedia.org/wiki/Graben - - - A depressed block of land bordered by parallel faults. A graben is the result of a block of land being downthrown producing a valley with a distinct scarp on each side. Grabens often occur side-by-side with horsts. Horst and graben structures are indicative of tensional forces and crustal stretching. - https://en.wikipedia.org/wiki/Graben - - - - - ADL:FTT - fault zone - - - - - - - - - - drainage basin - - An extent or area of land where surface water from rain and melting snow or ice converges to a single point at lower elevation, usually the exit of the basin, where the waters join another waterbody. - Basin - CATCHMENT - Catchment - ENVO - ENVO:00000291 - EcoLexicon:basin - EcoLexicon:drainage_basin - FTT:220 - FTT:440 - Geonames:L.BSND - LTER:58 - SWEETRealm:DrainageBasin - TGN:21455 - Watershed - catchment - drainage basin - https://en.wikipedia.org/wiki/Drainage_basin - watershed - - - ADL:FTT - catchment - - - - - NASA:earthrealm - Watershed - - - - - CATCHMENT - USGS:SDTS - - - - - Catchment - NASA:earthrealm - - - - - Geonames:feature - drainage basin - - - - - ADL:FTT - watershed - - - - - An extent or area of land where surface water from rain and melting snow or ice converges to a single point at lower elevation, usually the exit of the basin, where the waters join another waterbody. - https://en.wikipedia.org/wiki/Drainage_basin - - - - - USGS:SDTS - catchment - - - - - Basin - NASA:earthrealm - - - - - - - - - - watershed - - ENVO - ENVO:00000292 - FTT:220 - FTT:645 - Geonames:T.DVD - LTER:626 - RIDGE LINE - SWEETRealm:Watershed - TGN:21440 - The separation between neighbouring drainage basins (catchments). In hilly country, the divide lies along topographical peaks and ridges, but in flat country or on a high plateau (especially where the ground is marshy) the divide may be invisible - just a more or less notional line on the ground on either side of which falling raindrops will start a journey to different rivers, and even to different sides of a country or continent. - divide - divide - drainage basin - https://en.wikipedia.org/wiki/Watershed - water divide - - - The separation between neighbouring drainage basins (catchments). In hilly country, the divide lies along topographical peaks and ridges, but in flat country or on a high plateau (especially where the ground is marshy) the divide may be invisible - just a more or less notional line on the ground on either side of which falling raindrops will start a journey to different rivers, and even to different sides of a country or continent. - https://en.wikipedia.org/wiki/Water_divide - - - - - Getty:TGN - divide - - - - - ADL:FTT - drainage basin - - - - - RIDGE LINE - USGS:SDTS - - - - - Geonames:feature - divide - - - - - - - - - - continental divide - - A watershed such that water falling on one side of the line eventually travels to one ocean or body of water, and water on the other side travels to another, generally on the opposite side of the continent. - ENVO - ENVO:00000293 - FTT:533 - https://en.wikipedia.org/wiki/Continental_divide - - - A watershed such that water falling on one side of the line eventually travels to one ocean or body of water, and water on the other side travels to another, generally on the opposite side of the continent. - MA:ma - - - - - - - - - - fish farm - - A facility in which fish are raised commercially in tanks or enclosures, usually for food. - ENVO - ENVO:00000294 - FTT:123 - FTT:694 - aquacultural site - fishery - https://en.wikipedia.org/wiki/Fish_farm - - - A facility in which fish are raised commercially in tanks or enclosures, usually for food. - https://en.wikipedia.org/wiki/Fish_farm - - - - - ADL:FTT - fishery - - - - - ADL:FTT - aquacultural site - - - - - - - - - - fish hatchery - - A facility where eggs of fish are hatched under artificial conditions. - ENVO - ENVO:00000295 - FTT:695 - https://en.wikipedia.org/wiki/Fish_hatchery - - - A facility where eggs of fish are hatched under artificial conditions. - https://en.wikipedia.org/wiki/Hatchery - - - - - - - - - - rice field - - A paddy field for the cultivation of rice. - ENVO - ENVO:00000296 - FTT:45 - FTT:70 - agricultural site - cropland - https://en.wikipedia.org/wiki/Rice_field - rice paddy - - - USGS:SDTS - cropland - - - - - A paddy field for the cultivation of rice. - MA:ma - - - - - ADL:FTT - agricultural site - - - - - - - - - - paddy field - - A flooded parcel of arable land used for growing rice and other semiaquatic crops. - ENVO - ENVO:00000297 - https://en.wikipedia.org/wiki/Paddy_field - - - A flooded parcel of arable land used for growing rice and other semiaquatic crops. - https://en.wikipedia.org/wiki/Rice_paddy - - - - - - - - - - iceberg - - - - - - - - A large mass of detached land ice in the sea or stranded in shallow water. - ENVO - ENVO:00000298 - EcoLexicon:iceberg - FTT:758 - FTT:838 - ICEBERG - IceFloe - Iceberg - SWEETRealm:Iceberg - TGN:21142 - arched iceberg - barrier iceberg - floeberg - glacial berg - glacial iceberg - https://en.wikipedia.org/wiki/Iceberg - ice mass - envoPolar - iceberg - - - USGS:SDTS - glacial berg - - - - - A large mass of detached land ice in the sea or stranded in shallow water. - USGS:SDTS - - - - - USGS:SDTS - arched iceberg - - - - - IceFloe - NASA:earthrealm - - - - - USGS:SDTS - glacial iceberg - - - - - Iceberg - NASA:earthrealm - - - - - USGS:SDTS - barrier iceberg - - - - - A large mass of detached land ice floating in the sea or stranded in shallow water. (Source: MGH) - http://www.eionet.europa.eu/gemet/concept/4132 - iceberg - - - - - ADL:FTT - ice mass - - - - - ICEBERG - USGS:SDTS - - - - - USGS:SDTS - floeberg - - - - - - - - - - ice field - - - - - - - - - - A field of ice, formed in regions of perennial frost. - ENVO - ENVO:00000299 - FTT:758 - FTT:835 - FTT:836 - FTT:837 - FTT:838 - FTT:839 - FTT:840 - FTT:841 - FTT:842 - Ice mass may need to be resolved from ice field, the former referring simply to an accumulation of ice. - IceSheet - SWEETRealm:IceField - TGN:21147 - ice field - ice patch - ice sheet - iceberg - icecap - icefall - envoPolar - - - ADL:FTT - icefall - - - - - ADL:FTT - iceberg - - - - - ADL:FTT - ice patch - - - - - ADL:FTT - ice sheet - - - - - ADL:FTT - ice field - - - - - IceSheet - NASA:earthrealm - - - - - A field of ice, formed in regions of perennial frost. - ADL:FTT - - - - - ADL:FTT - icecap - - - - - - - - - - scrubland - - Area covered with low-growing or stunted perennial vegetation and usually not mixed with trees. - FTT:1191 - FTT:262 - FTT:374 - FTT:473 - FTT:792 - FTT:991 - Geonames:V.SCRB - SWEETRealm:Scrub - TGN:21644 - TGN:21652 - bush - chaparal area - heath - https://en.wikipedia.org/wiki/Scrubland - scrub - scrubland - shrubland - - - Getty:TGN - bush - - - - - USGS:SDTS - scrub - - - - - Geonames:feature - scrubland - - - - - USGS:SDTS - shrubland - - - - - ADL:FTT - heath - - - - - ADL:FTT - chaparal area - - - - - ADL:FTT - Area covered with low-growing or stunted perennial vegetation and usually not mixed with trees. - - - - - ADL:FTT - shrubland - - - - - ADL:FTT - bush - - - - - - - - - - chaparral - - - - - - - - - - - - - - - - - - - A shrubland area found primarily in regions with a Mediterranean climate (mid, wet winters and hot dry summers) often shaped by wildfires. - ENVO - ENVO:00000301 - FTT:473 - SPIRE:Chaparral - chaparal area - maquis - woodland - - - ADL:FTT - chaparal area - - - - - USGS:SDTS - maquis - - - - - USGS:SDTS - woodland - - - - - A shrubland area found primarily in regions with a Mediterranean climate (mid, wet winters and hot dry summers) often shaped by wildfires. - https://en.wikipedia.org/wiki/Chaparral - - - - - - - - - - rift valley - - - - - - - - A valley created by the formation of a rift, i.e. place where a planet's lithosphere is being pulled apart by tectonic forces. - FTT:684 - RiftValley - SWEETRealm:RiftValley - rift zone - - - ADL:FTT - rift zone - - - - - NASA:earthrealm - RiftValley - - - - - A valley created by the formation of a rift, i.e. place where a planet's lithosphere is being pulled apart by tectonic forces. - https://en.wikipedia.org/wiki/Rift_valley - - - - - - - - - - sea coast - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000303 - EcoLexicon:coast - EcoLexicon:sea_coast - FTT:500 - Geonames:L.CST - SPIRE:Coastal - SPIRE:Littoral - SWEETRealm:CoastalRegion - TGN:21483 - The general region of indefinite width that extends from the sea inland to the first major change in terrain features. - coast line - coastal area - coastline - https://en.wikipedia.org/wiki/Coast - - - USGS:SDTS - coastal area - - - - - USGS:SDTS - coastline - - - - - The general region of indefinite width that extends from the sea inland to the first major change in terrain features. - USGS:SDTS - - - - - - - - - - shore - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000304 - EcoLexicon:shore - FTT:240 - FTT:503 - FTT:504 - Geonames:T.SHOR - SHORE - SWEETRealm:Shore - TGN:21481 - That part of the land in immediate contact with a body of water including the area between high and low water lines. - beach face - coastal zone - foreshore - https://en.wikipedia.org/wiki/Shore - inshore - rivage - seashore - shore - shoreface - strand - - - ADL:FTT - coastal zone - - - - - Geonames:feature - shore - - - - - USGS:SDTS - inshore - - - - - USGS:SDTS - shoreface - - - - - USGS:SDTS - foreshore - - - - - SHORE - USGS:SDTS - - - - - That part of the land in immediate contact with a body of water including the area between high and low water lines. - USGS:SDTS - - - - - USGS:SDTS - strand - - - - - USGS:SDTS - seashore - - - - - USGS:SDTS - beach face - - - - - USGS:SDTS - rivage - - - - - - - - - - peninsula - - A body of land jutting out into and nearly surrounded by water. - ENVO - ENVO:00000305 - EcoLexicon:peninsula - FTT:253 - FTT:422 - FTT:423 - FTT:424 - FTT:425 - Geonames:T.CAPE - Geonames:T.HDLD - Geonames:T.PEN - Geonames:T.PROM - Geonames:T.PT - Geonames:T.PTS - PENINSULA - SWEETRealm:Point - TGN:21462 - TGN:21463 - TGN:21464 - TGN:21476 - TGN:21477 - cape - foreland - head - headland - hook - https://en.wikipedia.org/wiki/Peninsula - neck - ness - peninsula - point - point (physiographic) - points - promontgory - promontory - tongue - winged headland - - - USGS:SDTS - promontory - - - - - USGS:SDTS - tongue - - - - - USGS:SDTS - headland - - - - - Geonames:feature - cape - - - - - Getty:TGN - point - - - - - Geonames:feature - peninsula - - - - - PENINSULA - USGS:SDTS - - - - - Geonames:feature - promontgory - - - - - A body of land jutting out into and nearly surrounded by water. - USGS:SDTS - - - - - USGS:SDTS - winged headland - - - - - Geonames:feature - point - - - - - Getty:TGN - headland - - - - - Getty:TGN - cape - - - - - USGS:SDTS - foreland - - - - - USGS:SDTS - head - - - - - Getty:TGN - promontory - - - - - ADL:FTT - headland - - - - - Geonames:feature - headland - - - - - ADL:FTT - point (physiographic) - - - - - ADL:FTT - cape - - - - - USGS:SDTS - neck - - - - - Geonames:feature - points - - - - - USGS:SDTS - point - - - - - USGS:SDTS - hook - - - - - - - - - - spit - - A deposition landform found off coasts. A spit is a type of bar or beach that develops where a re-entrant occurs, such as at a cove, bay, ria, or river mouth. Spits are formed by the movement of sediment (typically sand) along a shore by a process known as longshore drift. Where the direction of the shore turns inland (reenters) the longshore current spreads out or dissipates. No longer able to carry the full load, much of the sediment is dropped. This causes a bar to build out from the shore, eventually becoming a spit. - ENVO - ENVO:00000306 - EcoLexicon:spit - FTT:210 - Geonames:T.SPIT - SWEETRealm:Spit - TGN:21465 - bar - spit - - - A deposition landform found off coasts. A spit is a type of bar or beach that develops where a re-entrant occurs, such as at a cove, bay, ria, or river mouth. Spits are formed by the movement of sediment (typically sand) along a shore by a process known as longshore drift. Where the direction of the shore turns inland (reenters) the longshore current spreads out or dissipates. No longer able to carry the full load, much of the sediment is dropped. This causes a bar to build out from the shore, eventually becoming a spit. - https://en.wikipedia.org/wiki/Spit_%28landform%29 - - - - - Geonames:feature - spit - - - - - USGS:SDTS - bar - - - - - - - - - - icefall - - - - - - - - - - - - - - A portion of a glacier characterized by rapid flow and a chaotic crevassed surface. - ENVO - ENVO:00000307 - FTT:758 - FTT:842 - https://en.wikipedia.org/wiki/Icefall - ice mass - envoPolar - - - ADL:FTT - ice mass - - - - - A portion of a glacier characterized by rapid flow and a chaotic crevassed surface. - https://en.wikipedia.org/wiki/Icefall - - - - - - - - - - dune slack - - A valley or trough between two dunes. - ENVO - ENVO:00000308 - FTT:652 - Geonames:T.TRGD - interdune trough - - - A valley or trough between two dunes. - MA:ma - - - - - Geonames:feature - interdune trough - - - - - ADL:FTT - interdune trough - - - - - - - - - - depression - - - - - - - - - - - - - - - - - - - - A landform sunken or depressed below the surrounding area. - EcoLexicon:depression - FTT:175 - FTT:215 - FTT:216 - Geonames:T.DPR - Geonames:T.PAN - Geonames:T.PANS - SWEETRealm:Depression - TGN:21454 - TGN:21497 - TGN:21521 - barrier basin - depression - non tidal basin - pan - pan (geologic) - pans - tidal basin - Clarify that this pertains to the planetary crust and create superclass for general topological depressions. https://github.com/EnvironmentOntology/envo/issues/486 - - - A landform sunken or depressed below the surrounding area. - https://en.wikipedia.org/wiki/Depression_%28geology%29 - - - - - USGS:SDTS - tidal basin - - - - - USGS:SDTS - non tidal basin - - - - - Geonames:feature - pans - - - - - Getty:TGN - pan - - - - - Geonames:feature - pan - - - - - USGS:SDTS - barrier basin - - - - - ADL:FTT - pan (geologic) - - - - - Geonames:feature - depression - - - - - - - - - - meteor impact crater - - - - - - - - A crater caused by the impact of a meteor. - SWEETRealm:ImpactCrater - https://en.wikipedia.org/wiki/Impact_crater - For the moment, no distinction is made between meteroids, lithometeors, or meteorites in this class. These can be added if needed. - meteoroid impact crater - meteorite crater - meteorite impact crater - - - A crater caused by the impact of a meteor. - MA:ma - https://en.wikipedia.org/wiki/Impact_crater - - - - - - - - - - kettle - - - - - - - - A fluvioglacial landform occurring as the result of blocks of ice calving from the front of a receding glacier and becoming partially to wholly buried by glacial outwash. Glacial outwash is generated when sediment laden streams of meltwater flow away from the glacier and are deposited to form broad outwash plains called sandurs. When the ice blocks melt, holes are left in the sandur. - ENVO - ENVO:00000311 - basin - kettle hole - - - USGS:SDTS - basin - - - - - A fluvioglacial landform occurring as the result of blocks of ice calving from the front of a receding glacier and becoming partially to wholly buried by glacial outwash. Glacial outwash is generated when sediment laden streams of meltwater flow away from the glacier and are deposited to form broad outwash plains called sandurs. When the ice blocks melt, holes are left in the sandur. - https://en.wikipedia.org/wiki/Kettle_%28geology%29 - - - - - - - - - - sandur - - ENVO - ENVO:00000312 - The plain formed by the large amounts of silt and sediment, picked up as a glacier erodes the underlying rocks as it moves slowly downhill, and at the snout of the glacier, meltwater can carry this sediment away from the glacier and deposit it on a broad plain. The material in the outwash plain is often size-sorted by the water runoff of the melting glacier with the finest materials, like silt, being the most distantly re-deposited, whereas larger boulders are the closest to the original terminus of the glacier. - https://en.wikipedia.org/wiki/Sandur - outwash plain - - - The plain formed by the large amounts of silt and sediment, picked up as a glacier erodes the underlying rocks as it moves slowly downhill, and at the snout of the glacier, meltwater can carry this sediment away from the glacier and deposit it on a broad plain. The material in the outwash plain is often size-sorted by the water runoff of the melting glacier with the finest materials, like silt, being the most distantly re-deposited, whereas larger boulders are the closest to the original terminus of the glacier. - https://en.wikipedia.org/wiki/Sandur - - - - - - - - - - blowout - - A sandy depression in a sand dune ecosystem (psammosere) caused by the removal of sediments by wind. - ENVO - ENVO:00000313 - EcoLexicon:blowout - FTT:267 - Geonames:T.BLOW - TGN:21448 - blowout - - - A sandy depression in a sand dune ecosystem (psammosere) caused by the removal of sediments by wind. - https://en.wikipedia.org/wiki/Blowout_%28geology%29 - - - - - Geonames:feature - blowout - - - - - - - - - - alluvial fan - - - - - - - - - - - - - - - - - - - - A fan-shaped deposit formed where a fast flowing stream flattens, slows, and spreads typically at the exit of a canyon onto a flatter plain. - ENVO - ENVO:00000314 - EcoLexicon:alluvial_fan - FTT:94 - FTT:95 - Geonames:T.FAN - SWEETRealm:AlluvialFan - TGN:21421 - fan - fan (alluvial) - https://en.wikipedia.org/wiki/Alluvial_fan - - - Geonames:feature - fan - - - - - ADL:FTT - fan (alluvial) - - - - - A fan-shaped deposit formed where a fast flowing stream flattens, slows, and spreads typically at the exit of a canyon onto a flatter plain. - https://en.wikipedia.org/wiki/Alluvial_fan - - - - - - - - - - bajada - - A convergence of neighboring alluvial fans into a single apron of deposits against a slope. - ENVO - ENVO:00000315 - FTT:188 - FTT:191 - SWEETRealm:Bajada - desert - https://en.wikipedia.org/wiki/Bajada - - - ADL:FTT - desert - - - - - A convergence of neighboring alluvial fans into a single apron of deposits against a slope. - https://en.wikipedia.org/wiki/Alluvial_fan - - - - - - - - - - intertidal zone - - - - - - - - EcoLexicon:intertidal_zone - FTT:240 - FTT:501 - IntertidalZone - SPIRE:Intertidal - SWEETRealm:IntertidalZone - The area of the foreshore and seabed that is exposed to the air at low tide and submerged at high tide, i.e., the area between tide marks. - Very similar to the "marine eulittoral zone" class, but without reference to seasonal tide marks. Some sources make no distinction between these zones, thus, they are currently related synonyms. - coastal zone - https://en.wikipedia.org/wiki/Intertidal_zone - littoral zone - - - The area of the foreshore and seabed that is exposed to the air at low tide and submerged at high tide, i.e., the area between tide marks. - https://en.wikipedia.org/wiki/Intertidal_zone - - - - - IntertidalZone - NASA:earthrealm - - - - - - - - - - tidal pool - - - - - - - - ENVO - ENVO:00000317 - EcoLexicon:tidal_pool - Pools formed as a high tide comes in over a rocky shore. Water fills depressions in the ground, which turn into isolated pools as the tide retreats. - https://en.wikipedia.org/wiki/Tidal_pool - - - Pools formed as a high tide comes in over a rocky shore. Water fills depressions in the ground, which turn into isolated pools as the tide retreats. - https://en.wikipedia.org/wiki/Tide_pool - - - - - - - - - - high tide zone - - - - - - - - ENVO - ENVO:00000318 - The tide zone that is flooded during high tide only, and is a highly saline environment. - upper littoral - - - The tide zone that is flooded during high tide only, and is a highly saline environment. - https://en.wikipedia.org/wiki/Intertidal_zone - - - - - - - - - - low tide zone - - - - - - - - ENVO - ENVO:00000319 - The tidal zone that is mostly submerged, only being exposed at the point of low tide and for a longer period of time during extremely low tides. - lower littoral - - - The tidal zone that is mostly submerged, only being exposed at the point of low tide and for a longer period of time during extremely low tides. - https://en.wikipedia.org/wiki/Intertidal_zone - - - - - - - - - - crevasse - - - - - - - - - - - - - - - - A deep fissure in snow or ice. - CREVASSE - ENVO - ENVO:00000320 - FTT:489 - FTT:594 - FTT:702 - Geonames:T.FSR - TGN:21415 - TGN:21416 - cleft - fissure - https://en.wikipedia.org/wiki/Crevasse - - - CREVASSE - USGS:SDTS - - - - - ADL:FTT - cleft - - - - - A deep fissure in snow or ice. - USGS:SDTS - - - - - Getty:TGN - fissure - - - - - Getty:TGN - cleft - - - - - - - - - - joint-plane cave - - A cavity developed along a joint and elongate in cross-section. - ENVO - ENVO:00000321 - - - A cavity developed along a joint and elongate in cross-section. - wiki:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - volcanic cave - - "Lave cave" is differentiated from "volcanic cave": the former is formed in volcanic rock, the latter is formed by volcanic processes. - A cave formed in volcanic rock. - ENVO - ENVO:00000322 - https://en.wikipedia.org/wiki/Lava_cave - lava cave - - - A cave formed in volcanic rock. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - live cave - - A cave containing a stream or active speleothems. - ENVO - ENVO:00000323 - - - A cave containing a stream or active speleothems. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - outflow cave - - A cave from which a stream flows or formerly did so and which cannot be followed upstream to the surface. - ENVO - ENVO:00000324 - - - A cave from which a stream flows or formerly did so and which cannot be followed upstream to the surface. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - polje - - - - - - - - A large closed depression draining underground, witha flat floor across which there may be an intermittent or perennial stream and which may be liable to flood and become a lake. The floor makes a sharp break with parts of surrounding slopes. - ENVO - ENVO:00000325 - EcoLexicon:polje - https://en.wikipedia.org/wiki/Polje - - - A large closed depression draining underground, witha flat floor across which there may be an intermittent or perennial stream and which may be liable to flood and become a lake. The floor makes a sharp break with parts of surrounding slopes. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - sea cave - - A cave in present-day or emerged sea cliffs, formed by wave attack or solution. - ENVO - ENVO:00000326 - https://en.wikipedia.org/wiki/Sea_cave - - - A cave in present-day or emerged sea cliffs, formed by wave attack or solution. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - speleothem - - - - - - - - - A secondary mineral deposit formed in caves, most commonly calcite. - ENVO - ENVO:00000327 - EcoLexicon:speleothem - https://en.wikipedia.org/wiki/Speleothem - - - A secondary mineral deposit formed in caves, most commonly calcite. - https://en.wikipedia.org/wiki/Speleothem - - - - - - - - - - vadose zone - - A zone beneath the land surface and above the level of permanent groundwater or phreatic zone in which water has a hydraulic head less than atmospheric pressure and is retained by a combination of adhesion and capillary action. - ENVO - ENVO:00000328 - https://en.wikipedia.org/wiki/ If the vadose zone envelops soil, the water contained therein is termed soil moisture. In fine grained soils, capillary action can cause the pores of the soil to be fully saturated above the water table at a pressure less than atmospheric. In such soils, therefore, the unsaturated zone is the upper section of the vadose zone and not identical to it. - unsaturated zone - - - https://en.wikipedia.org/wiki/Vadose_zone - unsaturated zone - - - - - A zone beneath the land surface and above the level of permanent groundwater or phreatic zone in which water has a hydraulic head less than atmospheric pressure and is retained by a combination of adhesion and capillary action. - https://en.wikipedia.org/wiki/Vadose_zone - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - phreatic zone - - A zone beneath the land surface in which all interstices are filled with water. Water in the phreatic zone has a hydraulic head greater than atmospheric pressure due to the weight of overlying groundwater. - ENVO - ENVO:00000329 - https://en.wikipedia.org/wiki/Phreatic_zone - zone of saturation - - - https://en.wikipedia.org/wiki/Phreatic_zone - zone of saturation - - - - - A zone beneath the land surface in which all interstices are filled with water. Water in the phreatic zone has a hydraulic head greater than atmospheric pressure due to the weight of overlying groundwater. - https://en.wikipedia.org/wiki/Phreatic_zone - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - stalagmite - - A speleothem projecting vertically upwards from a cave floor and formed by precipitation from drips. - ENVO - ENVO:00000330 - https://en.wikipedia.org/wiki/Stalagmite - - - A speleothem projecting vertically upwards from a cave floor and formed by precipitation from drips. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - stalactite - - A speleothem hanging downwards from a roof or wall, of cylindrical or conical form, usually with a central hollow tube. - ENVO - ENVO:00000331 - https://en.wikipedia.org/wiki/Stalactite - - - A speleothem hanging downwards from a roof or wall, of cylindrical or conical form, usually with a central hollow tube. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - doline - - - - - - - - A closed depression draining underground in karst, of simple but variable form, e.g. cylindrical, conical, bowl- or dish-shaped. From a few to many hundreds of metres in dimensions. - ENVO - ENVO:00000332 - https://en.wikipedia.org/wiki/Doline - - - A closed depression draining underground in karst, of simple but variable form, e.g. cylindrical, conical, bowl- or dish-shaped. From a few to many hundreds of metres in dimensions. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - subjacent karst - - ENVO - ENVO:00000333 - Karst developed in soluble beds underlying other rock formations; the surface may or may not be affected by the karst development. - - - Karst developed in soluble beds underlying other rock formations; the surface may or may not be affected by the karst development. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - syngenetic karst - - ENVO - ENVO:00000334 - Karst developed in eolian calcarenite when the development of karst features has taken place at the same time as the lithification of dune sand. - - - Karst developed in eolian calcarenite when the development of karst features has taken place at the same time as the lithification of dune sand. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - polygonal karst - - ENVO - ENVO:00000335 - Karst completely pitted by closed depressions so that divides between them form a crudely polygonal network. - - - Karst completely pitted by closed depressions so that divides between them form a crudely polygonal network. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - doline karst - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000336 - Karst dominated by closed depressions, chiefly dolines, perforating a simple surface. - - - Karst dominated by closed depressions, chiefly dolines, perforating a simple surface. - web:http://wasg.iinet.net.au/terminol.html - - - - - - - - - - obsolete orange juice - Added for compatibility with GEMINA. - ENVO - ENVO:00000337 - FOODON:00001001 - https://en.wikipedia.org/wiki/Orange_juice - true - - - - - - - - vomit - - - - - - - - ENVO - ENVO:00000338 - Vomit is a bodily fluid consisting of the expulsed contents of the stomach of an organism disgorged through the mouth or nose. - https://en.wikipedia.org/wiki/Vomit - - - ENVOC:nm - GEMINA:ls - Vomit is a bodily fluid consisting of the expulsed contents of the stomach of an organism disgorged through the mouth or nose. - https://en.wikipedia.org/wiki/Vomit - - - - - - - - - - piece of rock - - - - - - - - An abiotic mesoscopic feature made of the mineral material of the crust of the Earth. - ENVO - ENVO:00000339 - FTT:1010 - FTT:145 - Geonames:T.RK - Geonames:T.RKS - TGN:21444 - - - An abiotic mesoscopic feature made of the mineral material of the crust of the Earth. - MA:ma - - - - - - - - - - grain of sand - - - ENVO - ENVO:00000340 - - - - - - - - piece of gravel - - A piece of rock that is two millimeters (2mm) in its largest dimension (about 1/12 of an inch) and no more than 75 millimeters (about 3 inches). - ENVO - ENVO:00000341 - - - A piece of rock that is two millimeters (2mm) in its largest dimension (about 1/12 of an inch) and no more than 75 millimeters (about 3 inches). - https://en.wikipedia.org/wiki/Gravel - - - - - - - - - - ice cap dome - - - - - - - - - - - - - - A comparatively elevated area on an icecap. - ENVO - ENVO:00000342 - FTT:758 - FTT:840 - Geonames:H.DOMG - TGN:21144 - ice mass - icecap dome - icecap dome - envoPolar - - - Geonames:feature - icecap dome - - - - - ADL:FTT - ice mass - - - - - ADL:FTT - icecap dome - - - - - A comparatively elevated area on an icecap. - Geonames:feature - - - - - - - - - - particle of silt - - ENVO - ENVO:00000343 - - - - - - - - grain of desert sand - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000344 - - - - - - - - grain of beach sand - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000345 - - - - - - - - grain of acid dune sand - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000346 - - - - - - - - grain of sea sand - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000347 - - - - - - - - grain of rocky sand - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000348 - - - - - - - - terrarium - - ENVO - ENVO:00000349 - https://en.wikipedia.org/wiki/Terrarium - A terrarium is a vivarium which simulates a terrestrial environment. - - - A terrarium is a vivarium which simulates a terrestrial environment. - https://en.wikipedia.org/wiki/Vivarium - - - - - - - - - - somma volcano - - A volcanic caldera that has been partially filled by a new central cone. - ENVO - ENVO:00000350 - https://en.wikipedia.org/wiki/Somma_volcano - This may be more a subclass of 'caldera' - - - A volcanic caldera that has been partially filled by a new central cone. - wiki:http\://en.wikipedia.org/wiki/Somma - - - - - - - - - - volcanic arc - - - - - - - - - A chain of volcanic islands or mountains formed by plate tectonics as an oceanic tectonic plate subducts under another tectonic plate and produces magma. - ENVO - ENVO:00000351 - https://en.wikipedia.org/wiki/Volcanic_arc - - - A chain of volcanic islands or mountains formed by plate tectonics as an oceanic tectonic plate subducts under another tectonic plate and produces magma. - https://en.wikipedia.org/wiki/Volcanic_arc - - - - - - - - - - continental arc - - A volcanic arc formed by the subduction of oceanic crust below continental crust. - ENVO - ENVO:00000352 - - - A volcanic arc formed by the subduction of oceanic crust below continental crust. - wiki:http\://en.wikipedia.org/wiki/Volcanic_arc - - - - - - - - - - island arc - - A volcanic arc formed by the subduction of oceanic crust other oceanic crust on an adjacent tectonic plate. - ENVO - ENVO:00000353 - EcoLexicon:island_arc - SWEETRealm:IslandArc - https://en.wikipedia.org/wiki/Island_arc - - - A volcanic arc formed by the subduction of oceanic crust other oceanic crust on an adjacent tectonic plate. - https://en.wikipedia.org/wiki/Volcanic_arc - - - - - - - - - - volcanic field - - - - - - - - A region of the earth's crust that is prone to localized volcanic activity. - ENVO - ENVO:00000354 - https://en.wikipedia.org/wiki/Volcanic_field - volcanic complex - volcanic group - volcanic system - - - A region of the earth's crust that is prone to localized volcanic activity. - https://en.wikipedia.org/wiki/Volcanic_field - - - - - - - - - - monogenetic volcanic field - - A volcanic field of small, scattered volcanic vents. These volcanic fields, containing numerous monogenetic volcanoes, are noted for having only one short eruptive event. Monogenetic fields occur only where the magma supply to the volcano is low or where vents are not close enough or large enough to develop plumbing systems for continuous feeding of magma. - ENVO - ENVO:00000355 - https://en.wikipedia.org/wiki/Monogenetic_volcanic_field - - - A volcanic field of small, scattered volcanic vents. These volcanic fields, containing numerous monogenetic volcanoes, are noted for having only one short eruptive event. Monogenetic fields occur only where the magma supply to the volcano is low or where vents are not close enough or large enough to develop plumbing systems for continuous feeding of magma. - https://en.wikipedia.org/wiki/Monogenetic_volcanic_field - - - - - - - - - - pyroclastic cone - - A cone made of material ejected from a volcano. The material can range from finest particles. In comparison, cinder cones are more uniform. They are usually found in or on larger features, such as stratovolcanoes, shield volcanoes and can be found inside calderas, however they can also be an independent feature. They can range from a few metres in height and are usually formed by a single eruption. - ENVO - ENVO:00000356 - https://en.wikipedia.org/wiki/Pyroclastic_cone - pyroclastic dome - - - A cone made of material ejected from a volcano. The material can range from finest particles. In comparison, cinder cones are more uniform. They are usually found in or on larger features, such as stratovolcanoes, shield volcanoes and can be found inside calderas, however they can also be an independent feature. They can range from a few metres in height and are usually formed by a single eruption. - https://en.wikipedia.org/wiki/Pyroclastic_cone - - - - - - - - - - lock - - A device for raising and lowering boats between stretches of water of different levels on river and canal waterways. The distinguishing feature of a lock is a fixed chamber whose water level can be varied. - ENVO - ENVO:00000357 - EcoLexicon:lock - - - A device for raising and lowering boats between stretches of water of different levels on river and canal waterways. The distinguishing feature of a lock is a fixed chamber whose water level can be varied. - https://en.wikipedia.org/wiki/Lock_%28water_transport%29 - - - - - - - - - - protected area - - An area of land and/or a body of water especially dedicated to the protection and maintenance of biological diversity, and of natural and associated cultural resources, and managed through legal or other effective means. - ENVO - ENVO:00000358 - https://en.wikipedia.org/wiki/Protected_area - - - An area of land and/or a body of water especially dedicated to the protection and maintenance of biological diversity, and of natural and associated cultural resources, and managed through legal or other effective means. - https://en.wikipedia.org/wiki/Protected_area - - - - - - - - - - natural monument - - A natural/cultural feature of outstanding or unique value because of its inherent rarity, representative of aesthetic qualities or cultural significance. - ENVO - ENVO:00000359 - https://en.wikipedia.org/wiki/Natural_monument - - - A natural/cultural feature of outstanding or unique value because of its inherent rarity, representative of aesthetic qualities or cultural significance. - https://en.wikipedia.org/wiki/Natural_Monument - - - - - - - - - - national forest - - A protected forest or woodland area in the United States. National forests are controlled by the federal government and managed by the United States Forest Service, under the direction of the United States Department of Agriculture. - ENVO - ENVO:00000360 - https://en.wikipedia.org/wiki/National_forest - - - A protected forest or woodland area in the United States. National forests are controlled by the federal government and managed by the United States Forest Service, under the direction of the United States Department of Agriculture. - https://en.wikipedia.org/wiki/National_Forest - - - - - - - - - - site of special scientific interest - - A conservation designation denoting a protected area in the United Kingdom. SSSIs are the basic 'building block' of nature conservation legislation and most other legal nature/geological conservation designations are based upon them, including National Nature Reserves, Ramsar Sites, Special Protection Areas, and Special Areas of Conservation. - Area of Special Scientific Interest - ENVO - ENVO:00000361 - SSSI - https://en.wikipedia.org/wiki/Site_of_special_scientific_interest - - - A conservation designation denoting a protected area in the United Kingdom. SSSIs are the basic 'building block' of nature conservation legislation and most other legal nature/geological conservation designations are based upon them, including National Nature Reserves, Ramsar Sites, Special Protection Areas, and Special Areas of Conservation. - https://en.wikipedia.org/wiki/SSSI - - - - - - - - - - marine park - - A protected area of the sea usually established to preserve a specific habitat and ensure the ecosystem is sustained for the organisms that exist there. Most marine parks are designated by governments, and organized like watery national parks. - ENVO - ENVO:00000362 - https://en.wikipedia.org/wiki/Marine_park - - - A protected area of the sea usually established to preserve a specific habitat and ensure the ecosystem is sustained for the organisms that exist there. Most marine parks are designated by governments, and organized like watery national parks. - https://en.wikipedia.org/wiki/Marine_park - - - - - - - - - - nature reserve - - A protected area of importance for wildlife, flora, fauna or features of geological or other special interest, which is reserved and managed for conservation and to provide special opportunities for study or research. Nature reserves may be designated by government institutions in some countries, such as the United Kingdom, or by private landowners, such as charities and research institutions, regardless of nationality. - ENVO - ENVO:00000363 - https://en.wikipedia.org/wiki/Nature_reserve - natural preserve - natural reserve - nature preserve - - - A protected area of importance for wildlife, flora, fauna or features of geological or other special interest, which is reserved and managed for conservation and to provide special opportunities for study or research. Nature reserves may be designated by government institutions in some countries, such as the United Kingdom, or by private landowners, such as charities and research institutions, regardless of nationality. - https://en.wikipedia.org/wiki/Nature_reserve - - - - - - - - - - national wildlife refuge - - A designation for certain protected areas of the United States managed by the United States Fish and Wildlife Service. The National Wildlife Refuge system is a network of lands and waters managed to protect wildlife and wildlife habitat. - ENVO - ENVO:00000364 - https://en.wikipedia.org/wiki/National_wildlife_refuge - - - A designation for certain protected areas of the United States managed by the United States Fish and Wildlife Service. The National Wildlife Refuge system is a network of lands and waters managed to protect wildlife and wildlife habitat. - https://en.wikipedia.org/wiki/National_Wildlife_Refuge - - - - - - - - - - Ramsar site - - A wetland protected by the terms of the Ramsar Convention (The Convention on Wetlands of International Importance, especially as Waterfowl Habitat). - ENVO - ENVO:00000365 - https://en.wikipedia.org/wiki/Ramsar_site - - - A wetland protected by the terms of the Ramsar Convention (The Convention on Wetlands of International Importance, especially as Waterfowl Habitat). - https://en.wikipedia.org/wiki/Ramsar_Convention - - - - - - - - - - national nature reserve - - A United Kingdom government conservation designation for a nature reserve of national significance for biological or earth science interest. - ENVO - ENVO:00000366 - https://en.wikipedia.org/wiki/National_nature_reserve - - - A United Kingdom government conservation designation for a nature reserve of national significance for biological or earth science interest. - https://en.wikipedia.org/wiki/National_Nature_Reserve - - - - - - - - - - national park - - A reserve of land, usually, but not always declared and owned by a national government, protected from most human development and pollution. National parks are a protected area of IUCN category II. - ENVO - ENVO:00000367 - https://en.wikipedia.org/wiki/National_park - - - A reserve of land, usually, but not always declared and owned by a national government, protected from most human development and pollution. National parks are a protected area of IUCN category II. - https://en.wikipedia.org/wiki/National_park - - - - - - - - - - ephemeral island - - An island, usually the consequence of the activity of a submarine volcano, that only exists for a short period or short periods of time after its formation, then being eroded or otherwise disappearing beneath the surface of a body of water. - ENVO - ENVO:00000368 - - - An island, usually the consequence of the activity of a submarine volcano, that only exists for a short period or short periods of time after its formation, then being eroded or otherwise disappearing beneath the surface of a body of water. - MA:ma - - - - - - - - - - brine pool - - - - - - - - - ENVO - ENVO:00000369 - ENVO:01000060 - MERGED DEFINITION: -TARGET DEFINITION: A large area of brine on the ocean basin near cold seep vents which release methane into the water. These pools are concentrations of water having an extremely high salinity as compared to the surrounding ocean, caused by the motion of large salt deposits through salt tectonics. --------------------- -SOURCE DEFINITION: Marine brine pools are large areas of brine on the ocean basin. These pools are bodies of water that have a salinity three to five times greater than the surrounding ocean. For deep-sea brine pools the source of the salt is the dissolution of large salt deposits through salt tectonics. The brine often contains high concentrations of methane, providing energy to chemosynthetic animals that live near the pool. - https://en.wikipedia.org/wiki/Brine_pool - marine brine pool - envoPolar - - - MERGED DEFINITION: -TARGET DEFINITION: A large area of brine on the ocean basin near cold seep vents which release methane into the water. These pools are concentrations of water having an extremely high salinity as compared to the surrounding ocean, caused by the motion of large salt deposits through salt tectonics. --------------------- -SOURCE DEFINITION: Marine brine pools are large areas of brine on the ocean basin. These pools are bodies of water that have a salinity three to five times greater than the surrounding ocean. For deep-sea brine pools the source of the salt is the dissolution of large salt deposits through salt tectonics. The brine often contains high concentrations of methane, providing energy to chemosynthetic animals that live near the pool. - https://en.wikipedia.org/wiki/Brine_pool - - - - - - - - - - tuya - - A distinctive, flat-topped, steep-sided volcano formed when lava erupts through a thick glacier or ice sheet. - ENVO - ENVO:00000370 - https://en.wikipedia.org/wiki/Tuya - - - A distinctive, flat-topped, steep-sided volcano formed when lava erupts through a thick glacier or ice sheet. - https://en.wikipedia.org/wiki/Tuya - - - - - - - - - - complex volcano - - A volcano with more than one feature. They form because changes of their eruptive characteristics or the location of multiple vents in an area. Stratovolcanoes may form complex volcanoes, because they may overlap another from explosive eruptions, lava flows, pyroclastic flows and by repeated eruptions, to make multiple summits and vents. Stratovolcanoes could also form a large caldera that gets filled in by multiple small cinder cones, lava domes and craters may also develop on the caldera's rim. - ENVO - ENVO:00000371 - compound volcano - https://en.wikipedia.org/wiki/Complex_volcano - - - A volcano with more than one feature. They form because changes of their eruptive characteristics or the location of multiple vents in an area. Stratovolcanoes may form complex volcanoes, because they may overlap another from explosive eruptions, lava flows, pyroclastic flows and by repeated eruptions, to make multiple summits and vents. Stratovolcanoes could also form a large caldera that gets filled in by multiple small cinder cones, lava domes and craters may also develop on the caldera's rim. - https://en.wikipedia.org/wiki/Complex_volcano - - - - - - - - - - pyroclastic shield volcano - - A shield volcano that is formed mostly of pyroclastic and highly explosive eruptions rather than relatively fluid basaltic lava issuing from vents or fissures on the surface of the volcano. They typically display low-angle flank slopes and have little or no central collapse, although a shallow sag in the shield is commonly observed. Lava is commonly extruded after the cessation of explosive activity commonly superposes the vent region. - ENVO - ENVO:00000372 - terrestrial ignimbrite shield - ignimbrite shield volcano - - - A shield volcano that is formed mostly of pyroclastic and highly explosive eruptions rather than relatively fluid basaltic lava issuing from vents or fissures on the surface of the volcano. They typically display low-angle flank slopes and have little or no central collapse, although a shallow sag in the shield is commonly observed. Lava is commonly extruded after the cessation of explosive activity commonly superposes the vent region. - https://en.wikipedia.org/wiki/Pyroclastic_shield - - - - - - - - - - geothermal field - - An area where wells can be drilled to obtain elements contained in solution in hot brines or to tap heat energy. - ENVO - ENVO:00000373 - - - An area where wells can be drilled to obtain elements contained in solution in hot brines or to tap heat energy. - wiki:http://www.webref.org/geology/g/geothermal_field.htm - - - - - - - - - - wildlife management area - - A protected area with the purpose of protecting and managing wild life. - ENVO - ENVO:00000374 - https://en.wikipedia.org/wiki/Wildlife_management_area - - - A protected area with the purpose of protecting and managing wild life. - MA:ma - - - - - - - - - - world heritage site - - A protected area that is a specific site (such as a forest, mountain, lake, desert, monument, building, complex, or city) that has been nominated and confirmed for inclusion on the list maintained by the international World Heritage Programme administered by the UNESCO World Heritage Committee. - ENVO - ENVO:00000375 - https://en.wikipedia.org/wiki/World_heritage_site - - - A protected area that is a specific site (such as a forest, mountain, lake, desert, monument, building, complex, or city) that has been nominated and confirmed for inclusion on the list maintained by the international World Heritage Programme administered by the UNESCO World Heritage Committee. - https://en.wikipedia.org/wiki/World_heritage_site - - - - - - - - - - biosphere reserve - - An international conservation designation given by UNESCO under its Programme on Man and the Biosphere (MAB). - ENVO - ENVO:00000376 - https://en.wikipedia.org/wiki/Biosphere_reserve - - - An international conservation designation given by UNESCO under its Programme on Man and the Biosphere (MAB). - https://en.wikipedia.org/wiki/Biosphere_reserve - - - - - - - - - - artificial lake - - - - - - - - - A lake purposefully constructed. - https://en.wikipedia.org/wiki/Artificial_lake - - - A lake purposefully constructed. - MA:ma - - - - - - - - - - canal head reservoir - - A reservoir constructed for the purpose of maintaining water levels in a canal or canals. - ENVO - ENVO:00000378 - - - A reservoir constructed for the purpose of maintaining water levels in a canal or canals. - https://en.wikipedia.org/wiki/Reservoir - - - - - - - - - - ice shelf - - A thick, floating platform of ice that forms where a glacier or ice mass flows down to a coastline and onto the ocean surface. - ENVO - ENVO:00000380 - SWEETRealm:IceShelf - https://en.wikipedia.org/wiki/Ice_shelf - envoPolar - - - A thick, floating platform of ice that forms where a glacier or ice mass flows down to a coastline and onto the ocean surface. - https://en.wikipedia.org/wiki/Ice_shelf - - - - - - - - - - massif - - A section of the Earths's crust that is demarcated by faults or flexures. In the movement of the crust, a massif tends to retain its internal structure while being displaced as a whole. - ENVO - ENVO:00000381 - EcoLexicon:massif - FTT:946 - TGN:21435 - https://en.wikipedia.org/wiki/Massif - - - A section of the Earths's crust that is demarcated by faults or flexures. In the movement of the crust, a massif tends to retain its internal structure while being displaced as a whole. - https://en.wikipedia.org/wiki/Massif - - - - - - - - - - lake shore - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000382 - TGN:21484 - That part of the land in immediate contact with a lake. - lakeshore - - - Getty:TGN - lakeshore - - - - - MA:ma - That part of the land in immediate contact with a lake. - - - - - - - - - - stream bed - - - - - - - - ENVO - ENVO:00000383 - FTT:651 - Geonames:H.STMB - TGN:21165 - The channel bottom of a stream; the physical confine of the normal water flow. - dry stream bed - https://en.wikipedia.org/wiki/Stream_bed - stream bed - stream bottom - stream channel - - - USGS:SDTS - stream channel - - - - - The channel bottom of a stream; the physical confine of the normal water flow. - https://en.wikipedia.org/wiki/Stream_bed - - - - - ADL:FTT - dry stream bed - - - - - Geonames:feature - stream bed - - - - - Getty:TGN - stream channel - - - - - - - - - - river bed - - - - - - - - ENVO - ENVO:00000384 - EcoLexicon:river_bed_structure - SWEETRealm:RiverBed - TGN:21154 - The channel bottom of a river; the physical confine of the normal water flow. - https://en.wikipedia.org/wiki/River_bed - river bottom - watercourse - - - The channel bottom of a river; the physical confine of the normal water flow. - https://en.wikipedia.org/wiki/Stream_bed - - - - - USGS:SDTS - watercourse - - - - - - - - - - stream mouth - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000385 - FTT:105 - FTT:1222 - Geonames:H.STMM - The place where a stream discharges into a lagoon, lake, or the sea. - stream - stream mouth - - - Geonames:feature - The place where a stream discharges into a lagoon, lake, or the sea. - - - - - ADL:FTT - stream - - - - - Geonames:feature - stream mouth - - - - - - - - - - river mouth - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000386 - TGN:21156 - The end of a stream where it enters a standing water body such as a lake, sea or ocean. - https://en.wikipedia.org/wiki/River_mouth - - - MA:ma - The end of a stream where it enters a standing water body such as a lake, sea or ocean. - - - - - - - - - - container of an intermittent lake - - A depression which intermittently contains a lake. - ENVO - ENVO:00000387 - FTT:221 - FTT:875 - Geonames:H.LKI - Geonames:H.LKSI - TGN:21118 - This has been moved from the lake hierarchy. - https://en.wikipedia.org/wiki/Intermittent_lake - intermittent lake - intermittent lakes - lake - - - A depression which intermittently contains a lake. - MA:ma - http://orcid.org/0000-0002-4366-3088 - - - - - ADL:FTT - lake - - - - - Geonames:feature - intermittent lakes - - - - - Geonames:feature - intermittent lake - - - - - - - - - - obsolete intermittent watercourse - A watercourse whose flow is not continuous. - ENVO - ENVO:00000388 - TGN:21111 - true - - - A watercourse whose flow is not continuous. - MA:ma - - - - - - - - - - intermittent wetland - - An area that is sometimes inundated or saturated by surface or ground water sufficient to support, and that under normal circumstances do support, a prevalence of vegetation typically adapted for life in saturated soil conditions. - FTT:85 - FTT:883 - Geonames:H.WTLDI - TGN:21306 - intermittent wetland - In a strict sense, this class cannot always satisfy the subclass axiom of wetland, requiring soil to always have a wet quality. Perhaps this should be treated more like channel of an intermittent stream. - - - Geonames:feature - intermittent wetland - - - - - An area that is sometimes inundated or saturated by surface or ground water sufficient to support, and that under normal circumstances do support, a prevalence of vegetation typically adapted for life in saturated soil conditions. - MA:ma - - - - - - - - - - mountain spur - - - - - - - - ENVO - ENVO:00000390 - FTT:1177 - Geonames:T.SPUR - TGN:21366 - spur - spurs (physiographic - - - Geonames:feature - spur - - - - - ADL:FTT - spurs (physiographic - - - - - - - - - - land bridge - - An isthmus or other land connection between what at other times are separate land masses which allows animals and plants to cross and colonise new lands. Land bridges are commonly created by regression, in which sea levels fall exposing previously submerged sections of continental shelf. Land bridges are also formed by: (a) upthrust at the edge of continental plates; and (b) glacial retreat alleviating pressure on shallow marine formations. - ENVO - ENVO:00000391 - TGN:21478 - https://en.wikipedia.org/wiki/Land_bridge - - - An isthmus or other land connection between what at other times are separate land masses which allows animals and plants to cross and colonise new lands. Land bridges are commonly created by regression, in which sea levels fall exposing previously submerged sections of continental shelf. Land bridges are also formed by: (a) upthrust at the edge of continental plates; and (b) glacial retreat alleviating pressure on shallow marine formations. - https://en.wikipedia.org/wiki/Land_bridge - - - - - - - - - - ice tongue - - - - - - - - A long and narrow sheet of ice projecting out from the coastline. An ice tongue forms when a valley glacier moves very rapidly out into the ocean or a lake. - ENVO - ENVO:00000392 - TGN:21143 - glacial tongue - glacier tongue - https://en.wikipedia.org/wiki/Ice_tongue - envoPolar - - - USGS:SDTS - glacial tongue - - - - - A long and narrow sheet of ice projecting out from the coastline. An ice tongue forms when a valley glacier moves very rapidly out into the ocean or a lake. - https://en.wikipedia.org/wiki/Ice_tongue - - - - - - - - - - sound - - A large sea or ocean inlet larger than a bay, deeper than a bight, wider than a fjord, or it may identify a narrow sea or ocean channel between two bodies of land. - EcoLexicon:sound - FTT:233 - FTT:469 - Geonames:H.SD - SWEETRealm:Sound - TGN:21129 - envoPolar - - - A large sea or ocean inlet larger than a bay, deeper than a bight, wider than a fjord, or it may identify a narrow sea or ocean channel between two bodies of land. - https://en.wikipedia.org/wiki/Sound_%28geography%29 - - - - - - - - - - strait - - - - - - - - A narrow channel of water that connects two larger bodies of water, and thus lies between two land masses. - ENVO - ENVO:00000394 - EcoLexicon:strait - FTT:233 - FTT:470 - Geonames:H.STRT - SWEETRealm:Strait - TGN:21132 - channel - https://en.wikipedia.org/wiki/Strait - strait - watercourse - - - ADL:FTT - channel - - - - - A narrow channel of water that connects two larger bodies of water, and thus lies between two land masses. - https://en.wikipedia.org/wiki/Strait - - - - - USGS:SDTS - watercourse - - - - - Geonames:feature - strait - - - - - - - - - - channel of a watercourse - - - - - - - - - - - - - - ENVO - ENVO:00000395 - EcoLexicon:channel - EcoLexicon:sea_channel - FTT:1192 - FTT:233 - FTT:461 - FTT:462 - FTT:463 - FTT:464 - FTT:465 - FTT:466 - FTT:468 - FTT:469 - FTT:470 - Geonames:H.CHN - Geonames:U.SCNU - Geonames:U.SCSU - SWEETRealm:Channel - TGN:21137 - TGN:23451 - The physical confine of a river, slough or ocean strait consisting of a bed and banks. - We need a more general channel definition, the current is only for water course channels. We need to refactor the semantics of channels, tunnels and conduits, in a similar way to uberon anatomical channels http://purl.obolibrary.org/obo/UBERON_0004111. See https://github.com/EnvironmentOntology/envo/issues/147 - - - The physical confine of a river, slough or ocean strait consisting of a bed and banks. - https://en.wikipedia.org/wiki/Channel_%28geography%29 - - - - - - - - - - marine channel - - ENVO - ENVO:00000396 - FTT:233 - FTT:465 - Geonames:H.CHNM - TGN:21186 - envoPolar - - - - - - - - lake channel - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000397 - FTT:233 - FTT:464 - Geonames:H.CHNL - TGN:21185 - envoPolar - - - - - - - - volcanic cone - - - - - - - - - - - - - - - Built by fragments (called ejecta) thrown up (ejected) from a volcanic vent, piling up around the vent in the shape of a cone with a central crater. - ENVO - ENVO:00000398 - FTT:530 - Geonames:T.CONE - SWEETRealm:VolcanicCone - TGN:21418 - cone - cone (geological) - https://en.wikipedia.org/wiki/Volcanic_cone - lava cone - - - USGS:SDTS - lava cone - - - - - Getty:TGN - cone - - - - - Built by fragments (called ejecta) thrown up (ejected) from a volcanic vent, piling up around the vent in the shape of a cone with a central crater. - https://en.wikipedia.org/wiki/Volcanic_cone - - - - - Geonames:feature - cone - - - - - ADL:FTT - cone (geological) - - - - - - - - - - ash cone - - - - - - - - A cone that is composed of particles of silt to sand size. Explosive eruptions from a vent where the magma is interacting with groundwater or the sea (as in an eruption off the coast) produce steam and are called phreatic. The interaction between the magma, expanding steam, and volcanic gases results in the ejection of mostly small particles called ash. Fallen ash has the consistency of flour. The unconsolidated ash forms an ash cone which becomes a tuff cone or tuff ring once the ash consolidates. - ENVO - ENVO:00000399 - https://en.wikipedia.org/wiki/Ash_cone - - - A cone that is composed of particles of silt to sand size. Explosive eruptions from a vent where the magma is interacting with groundwater or the sea (as in an eruption off the coast) produce steam and are called phreatic. The interaction between the magma, expanding steam, and volcanic gases results in the ejection of mostly small particles called ash. Fallen ash has the consistency of flour. The unconsolidated ash forms an ash cone which becomes a tuff cone or tuff ring once the ash consolidates. - https://en.wikipedia.org/wiki/Volcanic_cone - - - - - - - - - - cinder cone - - - - - - - - - - - - - - - - A cone built almost entirely of loose volcanic fragments called cinders (pumice, pyroclastics, or tephra). They are built from particles and blobs of congealed lava ejected from a single vent. As the gas-charged lava is blown violently into the air, it breaks into small fragments that solidify and fall as cinders around the vent to form a circular or oval cone. Most cinder cones have a bowl-shaped crater at the summit. - ENVO - ENVO:00000400 - SWEETRealm:CinderCone - https://en.wikipedia.org/wiki/Cinder_cone - mount - - - USGS:SDTS - mount - - - - - A cone built almost entirely of loose volcanic fragments called cinders (pumice, pyroclastics, or tephra). They are built from particles and blobs of congealed lava ejected from a single vent. As the gas-charged lava is blown violently into the air, it breaks into small fragments that solidify and fall as cinders around the vent to form a circular or oval cone. Most cinder cones have a bowl-shaped crater at the summit. - https://en.wikipedia.org/wiki/Volcanic_cone - - - - - - - - - - spatter cone - - A volcanic cone formed of molten lava ejected from a vent somewhat like taffy. Expanding gases in the lava fountains tear the liquid rock into irregular gobs that fall back to earth, forming a heap around the vent. The still partly liquid rock splashed down and over the sides of the developing mound is called spatter. Because spatter is not fully solid when it lands, the individual deposits are very irregular in shape and weld together as they cool, and in this way particularly differ from cinder and ash. - ENVO - ENVO:00000401 - SWEETRealm:SpatterCone - https://en.wikipedia.org/wiki/Spatter_cone - - - A volcanic cone formed of molten lava ejected from a vent somewhat like taffy. Expanding gases in the lava fountains tear the liquid rock into irregular gobs that fall back to earth, forming a heap around the vent. The still partly liquid rock splashed down and over the sides of the developing mound is called spatter. Because spatter is not fully solid when it lands, the individual deposits are very irregular in shape and weld together as they cool, and in this way particularly differ from cinder and ash. - https://en.wikipedia.org/wiki/Volcanic_cone - - - - - - - - - - mud volcano - - A volcano created by geologically excreted liquids and gases, although there are several different processes which may cause such activity. Temperatures are much cooler than igneous processes. - ENVO - ENVO:00000402 - EcoLexicon:mud_volcano - https://en.wikipedia.org/wiki/Mud_volcano - - - A volcano created by geologically excreted liquids and gases, although there are several different processes which may cause such activity. Temperatures are much cooler than igneous processes. - https://en.wikipedia.org/wiki/Mud_volcano - - - - - - - - - - shield volcano - - A large volcano with shallowly-sloping sides. - ENVO - ENVO:00000403 - https://en.wikipedia.org/wiki/Shield_volcano - mount - - - USGS:SDTS - mount - - - - - A large volcano with shallowly-sloping sides. - https://en.wikipedia.org/wiki/Shield_volcano - - - - - - - - - - stratovolcano - - A tall, conical volcano composed of many layers of hardened lava, tephra, and volcanic ash. These volcanoes are characterized by a steep profile and periodic, explosive eruptions. The lava that flows from them is viscous, and cools and hardens before spreading very far. The source magma of this rock is classified as acidic, or high in silica to intermediate (rhyolite, dacite, or andesite). - ENVO - ENVO:00000404 - composite volcano - https://en.wikipedia.org/wiki/Stratovolcano - - - A tall, conical volcano composed of many layers of hardened lava, tephra, and volcanic ash. These volcanoes are characterized by a steep profile and periodic, explosive eruptions. The lava that flows from them is viscous, and cools and hardens before spreading very far. The source magma of this rock is classified as acidic, or high in silica to intermediate (rhyolite, dacite, or andesite). - https://en.wikipedia.org/wiki/Stratovolcano - - - - - - - - - - obsolete submarine volcano - An underwater fissures in the earth's surface from which magma can erupt. - ENVO - ENVO:00000264 - ENVO:00000405 - true - - - An underwater fissures in the earth's surface from which magma can erupt. - https://en.wikipedia.org/wiki/Submarine_volcano - - - - - - - - - - mid-ocean ridge - - - - - - - - - - - - - - An underwater mountain range, formed by plate tectonics. This uplifting of the ocean floor occurs when convection currents rise in the mantle beneath the oceanic crust and create magma where two tectonic plates meet at a divergent boundary. The mid-ocean ridges of the world are connected and form a single global mid-oceanic ridge system that is part of every ocean. - EcoLexicon:oceanic_ridge - OceanRidge - TGN:23151 - https://en.wikipedia.org/wiki/Mid-ocean_ridge - - - NASA:earthrealm - OceanRidge - - - - - An underwater mountain range, formed by plate tectonics. This uplifting of the ocean floor occurs when convection currents rise in the mantle beneath the oceanic crust and create magma where two tectonic plates meet at a divergent boundary. The mid-ocean ridges of the world are connected and form a single global mid-oceanic ridge system that is part of every ocean. - https://en.wikipedia.org/wiki/Mid-ocean_ridge - - - - - - - - - - subglacial volcano - - - - - - - - - - - - - - - A volcano produced by subglacial eruptions or eruptions beneath the surface of a lake melted into a glacier or ice mass by the rising lava. - ENVO - ENVO:00000407 - Something more specific than an adjacent_to relation would be better, especially considering the volcano in question may have melted nearby glacial mass. - https://en.wikipedia.org/wiki/Subglacial_volcano - tuya - - - A volcano produced by subglacial eruptions or eruptions beneath the surface of a lake melted into a glacier or ice mass by the rising lava. - https://en.wikipedia.org/wiki/Subglacial_volcano - - - - - - - - - - volcanic fissure - - - - - - - - A linear volcanic vent through which lava erupts, usually without any explosive activity. The vent is usually a few meters wide and may be many kilometers long. Fissure vents can cause large flood basalts and hannels. The volcano can usually be seen as a crack in the ground or on the ocean floor. Narrow fissures can be filled in with lava that hardens. - ENVO - ENVO:00000408 - FTT:702 - SWEETRealm:Fissure - fissure - fissure vent - https://en.wikipedia.org/wiki/Volcanic_fissure - - - A linear volcanic vent through which lava erupts, usually without any explosive activity. The vent is usually a few meters wide and may be many kilometers long. Fissure vents can cause large flood basalts and hannels. The volcano can usually be seen as a crack in the ground or on the ocean floor. Narrow fissures can be filled in with lava that hardens. - https://en.wikipedia.org/wiki/Fissure_vent - - - - - - - - - - whirlpool - - A large, swirling body of water produced by ocean tides. - ENVO - ENVO:00000409 - FTT:131 - FTT:829 - TGN:21183 - WHRL - https://en.wikipedia.org/wiki/Whirlpool - hydrographic feature - - - ADL:FTT - hydrographic feature - - - - - A large, swirling body of water produced by ocean tides. - https://en.wikipedia.org/wiki/Whirlpool - - - - - Geonames:feature - WHRL - - - - - - - - - - kipuka - - An elevated area such as a hill, ridge or old lava dome inside or downslope from an area of active volcanism. New lava flows will cover the surrounding land, isolating the kipuka so that it appears as a (usually) forested island in a barren lava flow. - ENVO - ENVO:00000410 - https://en.wikipedia.org/wiki/Kipuka - - - An elevated area such as a hill, ridge or old lava dome inside or downslope from an area of active volcanism. New lava flows will cover the surrounding land, isolating the kipuka so that it appears as a (usually) forested island in a barren lava flow. - https://en.wikipedia.org/wiki/Lava#K.C4.ABpukas - - - - - - - - - - ford - - ENVO - ENVO:00000411 - EcoLexicon:ford - FORD - FTT:714 - FTT:83 - Geonames:T.FORD - TGN:21170 - The shallow part of a stream which can be easily crossed. - ford - ford (crossing) - https://en.wikipedia.org/wiki/Ford - transportation feature - - - FORD - Geonames:feature - - - - - ADL:FTT - transportation feature - - - - - USGS:SDTS - ford - - - - - The shallow part of a stream which can be easily crossed. - USGS:SDTS - - - - - ADL:FTT - ford (crossing) - - - - - - - - - - tidal watercourse - - ENVO - ENVO:00000412 - TGN:21130 - - - - - - - - pingo - - - - - - - - - - - - - - A mound of earth-covered ice found in the Arctic, subarctic, and Antarctica that can reach up to 70 metres in height and up to 2 kilometres in diameter. - ENVO - ENVO:00000413 - Pingos may occur in cold-climate wetland areas, but are not necessarily wetlands themselves. - bugor - bulginniakh - https://en.wikipedia.org/wiki/Pingo - hydrolaccolith - mount - pingos - envoPolar - - - pingos - - - - - - https://en.wikipedia.org/wiki/Pingo - hydrolaccolith - - - - - USGS:SDTS - mount - - - - - A mound of earth-covered ice found in the Arctic, subarctic, and Antarctica that can reach up to 70 metres in height and up to 2 kilometres in diameter. - DOI:10.1016/0033-5894(76)90039-9 - https://en.wikipedia.org/wiki/Pingo - - - - - - - - - - natural arch - - A natural formation where a rock arch forms, with a natural passageway through underneath. - ENVO - ENVO:00000414 - FTT:142 - FTT:143 - FTT:144 - TGN:21445 - arches (natural formation) - https://en.wikipedia.org/wiki/Natural_arch - natural bridge - sea arch - - - ADL:FTT - sea arch - - - - - ADL:FTT - arches (natural formation) - - - - - ADL:FTT - natural bridge - - - - - A natural formation where a rock arch forms, with a natural passageway through underneath. - https://en.wikipedia.org/wiki/Natural_arch - - - - - - - - - - raised beach - - A beach or wave cut platform raised above the shore line by a relative fall in the sea level. - ENVO - ENVO:00000415 - EcoLexicon:raised_beach - https://en.wikipedia.org/wiki/Raised_beach - terrace - - - A beach or wave cut platform raised above the shore line by a relative fall in the sea level. - https://en.wikipedia.org/wiki/Raised_beach - - - - - USGS:SDTS - terrace - - - - - - - - - - coastal dune - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000416 - https://en.wikipedia.org/wiki/Coastal_dune - - - - - - - - machair - - A fertile low-lying raised beach found on the some of the coastlines of Ireland and Scotland, in particular in the Outer Hebrides. - ENVO - ENVO:00000417 - - - A fertile low-lying raised beach found on the some of the coastlines of Ireland and Scotland, in particular in the Outer Hebrides. - https://en.wikipedia.org/wiki/Machair_%28geography%29 - - - - - - - - - - ria - - - A submergent coastal landform that forms where sea levels rise relative to the land either as a result of eustatic sea level change; where the global sea levels rise or isostatic sea level change; where the land sinks. When this happens valleys which were previously at sea level become submerged. - ENVO - ENVO:00000418 - drowned river valley - drowned valley - https://en.wikipedia.org/wiki/Ria - valley - - - USGS:SDTS - valley - - - - - A submergent coastal landform that forms where sea levels rise relative to the land either as a result of eustatic sea level change; where the global sea levels rise or isostatic sea level change; where the land sinks. When this happens valleys which were previously at sea level become submerged. - https://en.wikipedia.org/wiki/Ria - - - - - - - - - - stack - - - - - - - - A geological landform consisting of a steep and often vertical column or columns of rock in the sea near a coast. - ENVO - ENVO:00000419 - EcoLexicon:stack - island - - - A geological landform consisting of a steep and often vertical column or columns of rock in the sea near a coast. - https://en.wikipedia.org/wiki/Stack_%28geology%29 - - - - - USGS:SDTS - island - - - - - - - - - - tombolo - - - - - - - - A deposition landform such as a spit or bar which forms a narrow piece of land between an island or offshore rock and a mainland shore, or between two islands or offshore rocks. They usually form because the island causes wave refraction, depositing sand and shingle moved by longshore drift in each direction around the island where the waves meet. Eustatic sea level rise may also contribute to accretion as material is pushed up with rising sea levels. - ENVO - ENVO:00000420 - EcoLexicon:tombolo - SWEETRealm:Tombolo - bar - https://en.wikipedia.org/wiki/Tombolo - island - - - A deposition landform such as a spit or bar which forms a narrow piece of land between an island or offshore rock and a mainland shore, or between two islands or offshore rocks. They usually form because the island causes wave refraction, depositing sand and shingle moved by longshore drift in each direction around the island where the waves meet. Eustatic sea level rise may also contribute to accretion as material is pushed up with rising sea levels. - https://en.wikipedia.org/wiki/Tombolo - - - - - USGS:SDTS - island - - - - - USGS:SDTS - bar - - - - - - - - - - wave-cut platform - - - - - - - - ENVO - ENVO:00000421 - SWEETRealm:WaveCutPlatform - The narrow flat area often seen at the base of a sea cliff caused by the action of the waves. - https://en.wikipedia.org/wiki/Wave-cut_platform - marine terrace - - - The narrow flat area often seen at the base of a sea cliff caused by the action of the waves. - https://en.wikipedia.org/wiki/Wave_cut_platform - - - - - - - - - - limestone pavement - - A natural karst landform consisting of a flat, incised surface of exposed limestone that resembles artificial pavement. - ENVO - ENVO:00000422 - https://en.wikipedia.org/wiki/Limestone_pavement - - - A natural karst landform consisting of a flat, incised surface of exposed limestone that resembles artificial pavement. - https://en.wikipedia.org/wiki/Limestone_pavement - - - - - - - - - - river island - - - - - - - - - - - - - - - - - - - An island that lies in a river. - ENVO - ENVO:00000423 - EcoLexicon:fluvial_island - TGN:21428 - ait - eyot - fluvial island - - - An island that lies in a river. - MA:ma - - - - - Getty:TGN - fluvial island - - - - - - - - - - lake island - - - - - - - - - - - - - - - - - - - An island that lies in a lake. - ENVO - ENVO:00000424 - https://en.wikipedia.org/wiki/Lake_island - - - An island that lies in a lake. - MA:ma - - - - - - - - - - ocean floor - - - - - - - - ENVO - ENVO:00000426 - FTT:1020 - The surface that underlies an ocean. - https://en.wikipedia.org/wiki/Ocean_floor - ocean bed - ocean floor feature - - - MA:ma - The surface that underlies an ocean. - - - - - ADL:FTT - ocean floor feature - - - - - - - - - - meander - - - - - - - - A bend in a stream. A stream flowing through a wide valley or flat plain will tend to form a meanders as it alternatively erodes and deposits sediments along its course. - ENVO - ENVO:00000427 - EcoLexicon:meander - FTT:105 - FTT:948 - SWEETRealm:Meandering - TGN:21153 - https://en.wikipedia.org/wiki/Meander - oxbow loop - stream - watercourse - - - ADL:FTT - stream - - - - - A bend in a stream. A stream flowing through a wide valley or flat plain will tend to form a meanders as it alternatively erodes and deposits sediments along its course. - https://en.wikipedia.org/wiki/Meander - - - - - USGS:SDTS - watercourse - - - - - - - - - - biome - - - - - - - - - - - - - - - - A biome is an environmental system to which resident ecological communities have evolved adaptations. - EcoLexicon:biome - EcosytemType - LTER:173 - There has been some concern raised (see Issue #143) about the usefulness of the assertion that organisms have evolved within a given biome. They may have evolved adaptations elsewhere and demonstrating one or the other is often not feasible. Consider relabelling to "environmental system determined by an ecological community" or similar. - ecosystem - major habitat type - - - WWF:Biome - major habitat type - - - - - EcosytemType - NASA:earthrealm - - - - - A biome is an environmental system to which resident ecological communities have evolved adaptations. - DOI:10.1186/2041-1480-4-43 - https://en.wikipedia.org/wiki/Biome - - - - - - - - - - arete - - A thin, almost knife-like, ridge of rock which is typically formed when two glaciers erode parallel U-shaped valleys. The arte is a thin ridge of rock that is left separating the two valleys. Artes can also form when two glacial cirques erode towards one another, although frequently this results in a saddle-shaped pass, called a col. - ENVO - ENVO:00000429 - FTT:154 - ridge - - - ADL:FTT - ridge - - - - - USGS:SDTS - ridge - - - - - A thin, almost knife-like, ridge of rock which is typically formed when two glaciers erode parallel U-shaped valleys. The arte is a thin ridge of rock that is left separating the two valleys. Artes can also form when two glacial cirques erode towards one another, although frequently this results in a saddle-shaped pass, called a col. - https://en.wikipedia.org/wiki/Arete_%28landform%29 - - - - - - - - - - dirt cone - - - - - - - - A feature of a glacier, in which dirt, which has fallen into a hollow in the ice, forms a coating which insulates the ice below. The surrounding ice melts away, leaving the dirt cone. - ENVO - ENVO:00000430 - https://en.wikipedia.org/wiki/Dirt_cone - envoPolar - - - A feature of a glacier, in which dirt, which has fallen into a hollow in the ice, forms a coating which insulates the ice below. The surrounding ice melts away, leaving the dirt cone. - https://en.wikipedia.org/wiki/Dirt_cone - - - - - - - - - - drumlin field - - - - - - - - A cluster of dozens to hundreds of similarly shaped, sized and oriented drumlins. - ENVO - ENVO:00000431 - drumlin swarm - https://en.wikipedia.org/wiki/Drumlin_field - - - A cluster of dozens to hundreds of similarly shaped, sized and oriented drumlins. - https://en.wikipedia.org/wiki/Drumlin_field - - - - - - - - - - monadnock - - An isolated hill, knob, ridge, or small mountain that rises abruptly from a gently sloping or virtually level surrounding plain. - ENVO - ENVO:00000432 - https://en.wikipedia.org/wiki/Monadnock - inselberg - kopje - mount - - - An isolated hill, knob, ridge, or small mountain that rises abruptly from a gently sloping or virtually level surrounding plain. - https://en.wikipedia.org/wiki/Inselberg - - - - - USGS:SDTS - mount - - - - - - - - - - kame terrace - - - - - - - - - - - - - - - - - - - A terrace associated with a kame. - ENVO - ENVO:00000433 - - - A terrace associated with a kame. - MA:ma - - - - - - - - - - outwash fan - - A fan-shaped body of sediments deposited by braided streams from a melting glacier. - ENVO - ENVO:00000434 - https://en.wikipedia.org/wiki/Outwash_fan - - - A fan-shaped body of sediments deposited by braided streams from a melting glacier. - https://en.wikipedia.org/wiki/Outwash_fan - - - - - - - - - - proglacial lake - - A lake formed either by the damming action of a moraine or ice dam during the retreat of a melting glacier, or one formed by meltwater trapped against an ice mass due to isostatic depression of the crust around the ice. - ENVO - ENVO:00000435 - https://en.wikipedia.org/wiki/Proglacial_lake - lake - envoPolar - - - USGS:SDTS - lake - - - - - A lake formed either by the damming action of a moraine or ice dam during the retreat of a melting glacier, or one formed by meltwater trapped against an ice mass due to isostatic depression of the crust around the ice. - https://en.wikipedia.org/wiki/Proglacial_lake - - - - - - - - - - tunnel valley - - A deep but narrow valley with a 'U' shaped cross-section and frequently a 'U' shaped plan which is usually found filled with glacial till. It is formed when the edge of an ice mass advances up a slope. Its length may be appropriately measured in centimetres or kilometres, depending on the circumstances of formation. - ENVO - ENVO:00000436 - https://en.wikipedia.org/wiki/Tunnel_valley - rinnental - tunnel-vale - envoPolar - - - A deep but narrow valley with a 'U' shaped cross-section and frequently a 'U' shaped plan which is usually found filled with glacial till. It is formed when the edge of an ice mass advances up a slope. Its length may be appropriately measured in centimetres or kilometres, depending on the circumstances of formation. - https://en.wikipedia.org/wiki/Tunnel_valley - - - - - - - - - - Nye channel - - A small tunnel valley. - ENVO - ENVO:00000437 - - - A small tunnel valley. - https://en.wikipedia.org/wiki/Tunnel_valley - - - - - - - - - - alas - - A steep-sided depression formed by the melting of permafrost; it may contain a lake. - ENVO - ENVO:00000438 - https://en.wikipedia.org/wiki/Alas - - - A steep-sided depression formed by the melting of permafrost; it may contain a lake. - https://en.wikipedia.org/wiki/Alas - - - - - - - - - - dell - - - - - - - - - - - - - - - A small wooded valley, either U- or V-shaped. - ENVO - ENVO:00000439 - valley - - - A small wooded valley, either U- or V-shaped. - https://en.wikipedia.org/wiki/Dell_%28landform%29 - - - - - USGS:SDTS - valley - - - - - - - - - - rock shelter - - A shallow cave-like opening at the base of a bluff or cliff. - ENVO - ENVO:00000440 - https://en.wikipedia.org/wiki/Rock_shelter - rockhouse - - - A shallow cave-like opening at the base of a bluff or cliff. - https://en.wikipedia.org/wiki/Rock_shelter - - - - - - - - - - terracette - - A ridge on a hillside formed when saturated soil particles expand, then contract as they dry, causing them to move slowly downhill. - ENVO - ENVO:00000441 - SWEETRealm:Terracette - https://en.wikipedia.org/wiki/Terracette - - - A ridge on a hillside formed when saturated soil particles expand, then contract as they dry, causing them to move slowly downhill. - https://en.wikipedia.org/wiki/Terracette - - - - - - - - - - maelstrom - - A very powerful whirlpool. - ENVO - ENVO:00000442 - https://en.wikipedia.org/wiki/Maelstrom - - - A very powerful whirlpool. - https://en.wikipedia.org/wiki/Whirlpool - - - - - - - - - - flood control reservoir - - A reservoir constructed for the purpose of containing a flood, an overflow of water from a body of water that sumerges land. - ENVO - ENVO:00000443 - EcoLexicon:flood_control_reservoir - FTT:1175 - FTT:217 - FTT:709 - TGN:51261 - flood control basin - retention basin - storage basin - - - ADL:FTT - storage basin - - - - - A reservoir constructed for the purpose of containing a flood, an overflow of water from a body of water that sumerges land. - MA:ma - - - - - ADL:FTT - retention basin - - - - - - - - - - clearing - - - - - - - - - - - - - - - - - - - - - A tract of land with few or no trees in the middle of a wooded area. - CLEARING - ENVO - ENVO:00000444 - FTT:259 - FTT:488 - Geonames:L.CLG - LTER:79 - SWEETRealm:Burning - TGN:21651 - There should be a better superclass than "field" which should indicate that there are no woody plants in growth form "tree" around. - burn - burnt over area - clearing - clearing - cut line - fire break - forest clearing - glade - grassland - https://en.wikipedia.org/wiki/Clearing - logged area - opening - - - USGS:SDTS - fire break - - - - - USGS:SDTS - burnt over area - - - - - USGS:SDTS - burn - - - - - A tract of land with few or no trees in the middle of a wooded area. - USGS:SDTS - https://en.wikipedia.org/wiki/Glade_(geography) - - - - - CLEARING - USGS:SDTS - - - - - USGS:SDTS - cut line - - - - - USGS:SDTS - logged area - - - - - USGS:SDTS - glade - - - - - Geonames:feature - clearing - - - - - ADL:FTT - clearing - - - - - ADL:FTT - grassland - - - - - - - - - - transvasement - - An aquaduct to transport water from one river basin to another one, to solve problems of hydrographic imbalance. It can decrease floods, moving the water to lands with droughts. - ENVO - ENVO:00000445 - https://en.wikipedia.org/wiki/Transvasement - - - An aquaduct to transport water from one river basin to another one, to solve problems of hydrographic imbalance. It can decrease floods, moving the water to lands with droughts. - https://en.wikipedia.org/wiki/Transvasement - - - - - - - - - - terrestrial biome - - A biome that applies to the terrestrial realm. - ENVO - ENVO:00000446 - SPIRE:Terrestrial - terrestrial realm - LTER:798 - - - A biome that applies to the terrestrial realm. - https://en.wikipedia.org/wiki/Biome#Terrestrial_biomes - - - - - - - - - - marine biome - - An aquatic biome that comprises systems of open-ocean and unprotected coastal habitats, characterized by exposure to wave action, tidal fluctuation, and ocean currents as well as systems that largely resemble these. Water in the marine biome is generally within the salinity range of seawater: 30 to 38 ppt. - ENVO - ENVO:00000447 - SPIRE:Marine - marine realm - envoPolar - - - An aquatic biome that comprises systems of open-ocean and unprotected coastal habitats, characterized by exposure to wave action, tidal fluctuation, and ocean currents as well as systems that largely resemble these. Water in the marine biome is generally within the salinity range of seawater: 30 to 38 ppt. - ISBN-10:0618455043 - MA:ma - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - hydroelectric reservoir - - A reservoir constructed for the purpose of generating electricity. - ENVO - ENVO:00000448 - https://en.wikipedia.org/wiki/Hydroelectric_reservoir - - - A reservoir constructed for the purpose of generating electricity. - https://en.wikipedia.org/wiki/Reservoir - - - - - - - - - - drinking water reservoir - - A reservoir constructed for the purpose of providing drinking water. - ENVO - ENVO:00000449 - - - A reservoir constructed for the purpose of providing drinking water. - https://en.wikipedia.org/wiki/Reservoir - - - - - - - - - - irrigation reservoir - - A reservoir constructed for the purpose of providing water for irrigation. - ENVO - ENVO:00000450 - - - A reservoir constructed for the purpose of providing water for irrigation. - https://en.wikipedia.org/wiki/Reservoir - - - - - - - - - - amenity lake - - A lake constructed, or modified, for the chief purpose of providing an amenity. - ENVO - ENVO:00000451 - - - A lake constructed, or modified, for the chief purpose of providing an amenity. - MA:ma - - - - - - - - - - ribbon lake - - A lake that is long, narrow, and finger-shaped, usually found in a glacial trough. Its formation begins when a glacier moves over an area containing alternate bands of hard and soft bedrock. The sharp-edged boulders carried at the bottom of the glacier erode the softer rock more quickly by abrasion, thus creating a hollow called a rock basin. On either side of the rock basin, the more resistant rock is eroded less and these outcrops of harder rock are known as rock bars, which act as dams between which rainwater may accumulate after the retreat of the ice age, filling up the rock basin and creating a ribbon lake. A ribbon lake may also form behind a terminal or recessional moraine, both of which also act as dams, enabling water to accumulate behind them. A ribbon lake may also occur if a tributary glacier joins a main glacier. The increase in power can create a trough, which is filled with water from a river/meltwater to create a ribbon lake. - ENVO - ENVO:00000452 - https://en.wikipedia.org/wiki/Ribbon_lake - - - A lake that is long, narrow, and finger-shaped, usually found in a glacial trough. Its formation begins when a glacier moves over an area containing alternate bands of hard and soft bedrock. The sharp-edged boulders carried at the bottom of the glacier erode the softer rock more quickly by abrasion, thus creating a hollow called a rock basin. On either side of the rock basin, the more resistant rock is eroded less and these outcrops of harder rock are known as rock bars, which act as dams between which rainwater may accumulate after the retreat of the ice age, filling up the rock basin and creating a ribbon lake. A ribbon lake may also form behind a terminal or recessional moraine, both of which also act as dams, enabling water to accumulate behind them. A ribbon lake may also occur if a tributary glacier joins a main glacier. The increase in power can create a trough, which is filled with water from a river/meltwater to create a ribbon lake. - https://en.wikipedia.org/wiki/Ribbon_lake - - - - - - - - - - liman - - A lake or estuary that is formed at the mouth of a river where flow is blocked by a bar of sediments. It can be maritime (the bar being created by the current of a sea) or fluvial (the bar being created by the flow of a bigger river at the confluence). - ENVO - ENVO:00000453 - https://en.wikipedia.org/wiki/Liman - - - A lake or estuary that is formed at the mouth of a river where flow is blocked by a bar of sediments. It can be maritime (the bar being created by the current of a sea) or fluvial (the bar being created by the flow of a bigger river at the confluence). - https://en.wikipedia.org/wiki/Liman_(landform) - - - - - - - - - - turlough - - A container of an intermittent lake unique to the limestone areas of Ireland, mostly west of the River Shannon. Most turloughs flood in the autumn, usually some time in October, and then dry up some time between April and July. - ENVO - ENVO:00000454 - https://en.wikipedia.org/wiki/Turlough - - - A container of an intermittent lake unique to the limestone areas of Ireland, mostly west of the River Shannon. Most turloughs flood in the autumn, usually some time in October, and then dry up some time between April and July. - https://en.wikipedia.org/wiki/Turlough_(lake) - http://orcid.org/0000-0002-4366-3088 - - - - - - - - - - tarn - - A mountain lake that is formed in a cirque excavated by a glacier. A moraine may form a natural dam below a tarn. - ENVO - ENVO:00000455 - corrie loch - https://en.wikipedia.org/wiki/Tarn - envoPolar - - - A mountain lake that is formed in a cirque excavated by a glacier. A moraine may form a natural dam below a tarn. - https://en.wikipedia.org/wiki/Tarn_(lake) - - - - - - - - - - tidewater glacier - - - - - - - - - A glacier that flows into the sea. - ENVO - ENVO:00000456 - https://en.wikipedia.org/wiki/Tidewater_glacier - envoPolar - - - A glacier that flows into the sea. - https://en.wikipedia.org/wiki/Tidewater_glacier#Types_of_glaciers - - - - - - - - - - plateau glacier - - - - - - - - A glacier on a plateau or high area, smaller than an ice sheet. - ENVO - ENVO:00000457 - envoPolar - - - A glacier on a plateau or high area, smaller than an ice sheet. - https://en.wikipedia.org/wiki/Tidewater_glacier#Types_of_glaciers - - - - - - - - - - obsolete valley glacier - A glacier that forms in a mountain valley. - ENVO - ENVO:00000085 - ENVO:00000458 - EcoLexicon:glacier_valley - https://en.wikipedia.org/wiki/Valley_glacier - true - - - A glacier that forms in a mountain valley. - https://en.wikipedia.org/wiki/Tidewater_glacier#Types_of_glaciers - - - - - - - - - - outlet glacier - - A glacier fed by an ice sheet. - ENVO - ENVO:00000459 - https://en.wikipedia.org/wiki/Outlet_glacier - envoPolar - - - A glacier fed by an ice sheet. - https://en.wikipedia.org/wiki/Tidewater_glacier#Types_of_glaciers - - - - - - - - - - penplain - - A region of low topographic relief as a consequence of erosion by streams. - ENVO - ENVO:00000460 - - - A region of low topographic relief as a consequence of erosion by streams. - https://en.wikipedia.org/wiki/Peneplain - - - - - - - - - - pseudocrater - - A volcanic landform which resembles a true volcanic crater, but differs in that it is not an actual vent from which lava has erupted. A pseudocrater is characterised by the absence of any magma conduit which connects below the surface of the earth. Pseudocraters are formed by steam explosions as flowing hot lava crosses over a wet surface, such as a swamp, a lake, or a pond. The explosive gases break through the lava surface in a manner similar to a phreatic eruption, and the tephra builds up crater-like forms which can appear very similar to real volcanic craters. - ENVO - ENVO:00000461 - https://en.wikipedia.org/wiki/Pseudocrater - rootless vent - - - A volcanic landform which resembles a true volcanic crater, but differs in that it is not an actual vent from which lava has erupted. A pseudocrater is characterised by the absence of any magma conduit which connects below the surface of the earth. Pseudocraters are formed by steam explosions as flowing hot lava crosses over a wet surface, such as a swamp, a lake, or a pond. The explosive gases break through the lava surface in a manner similar to a phreatic eruption, and the tephra builds up crater-like forms which can appear very similar to real volcanic craters. - https://en.wikipedia.org/wiki/Rootless_vent - - - - - - - - - - polygenetic volcanic field - - A volcanic field of scattered volcanic vents. These volcanic fields, containing numerous polygenetic volcanoes, are noted for having more than one eruptive event from the same vent(s), rather than the more common monogenetic volcanic field. Polygenetic volcanic fields generally occur where there is a high-level magma chamber. These volcanic fields may show lithological discontinuities due to major changes in magma chemistry, volcanotectonic events, or long erosional intervals, and may last >10 million year period. - ENVO - ENVO:00000462 - https://en.wikipedia.org/wiki/Polygenetic_volcanic_field - - - A volcanic field of scattered volcanic vents. These volcanic fields, containing numerous polygenetic volcanoes, are noted for having more than one eruptive event from the same vent(s), rather than the more common monogenetic volcanic field. Polygenetic volcanic fields generally occur where there is a high-level magma chamber. These volcanic fields may show lithological discontinuities due to major changes in magma chemistry, volcanotectonic events, or long erosional intervals, and may last >10 million year period. - https://en.wikipedia.org/wiki/Polygenetic_volcanic_field - - - - - - - - - - harbor - - A place where ships may shelter from the weather or are stored. - ENVO - ENVO:00000463 - SWEETRealm:Harbor - https://en.wikipedia.org/wiki/Harbor - envoPolar - - - A place where ships may shelter from the weather or are stored. - https://en.wikipedia.org/wiki/Harbor - - - - - - - - - - artificial harbor - - - - - - - - - A harbor constructed by human agency. - ENVO - ENVO:00000464 - artificial harbour - https://en.wikipedia.org/wiki/Artificial_harbour - envoPolar - - - A harbor constructed by human agency. - MA:ma - - - - - - - - - - natural harbor - - A harbor which is formed by a natural landform where a part of a body of water is protected and deep enough to furnish anchorage. - ENVO - ENVO:00000465 - https://en.wikipedia.org/wiki/Natural_harbor - natural harbour - envoPolar - - - A harbor which is formed by a natural landform where a part of a body of water is protected and deep enough to furnish anchorage. - https://en.wikipedia.org/wiki/Harbor - - - - - - - - - - obsolete marine hydrographic feature - ENVO - ENVO:00000466 - true - - - - - - - - university campus - - An area of land on which a college or university and related institutional buildings are situated. - ENVO - ENVO:00000467 - campus - https://en.wikipedia.org/wiki/University_campus - - - An area of land on which a college or university and related institutional buildings are situated. - https://en.wikipedia.org/wiki/Campus - - - - - - - - - - hydroelectric dam - - A dam constructed for the purpose of generating electricity from the water stored behind it. - ENVO - ENVO:00000468 - https://en.wikipedia.org/wiki/Hydroelectric_dam - - - A dam constructed for the purpose of generating electricity from the water stored behind it. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - research facility - - A facility, permanent or temporary, on land, in air, space or water, where scientific research or measurements can be undertaken. - ENVO - ENVO:00000469 - - - A facility, permanent or temporary, on land, in air, space or water, where scientific research or measurements can be undertaken. - MA:ma - - - - - - - - - - irrigation dam - - A dam constructed for the purpose of holding water in a reservoir for irrigation. - ENVO - ENVO:00000470 - - - A dam constructed for the purpose of holding water in a reservoir for irrigation. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - flood control dam - - A dam constructed for the purpose of controlling flooding. - ENVO - ENVO:00000471 - - - A dam constructed for the purpose of controlling flooding. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - backwater - - An area of calm water unaffected by the current of a stream. - BACKWATER - ENVO - ENVO:00000472 - FTT:184 - TGN:21302 - https://en.wikipedia.org/wiki/Backwater - wetland - - - ADL:FTT - wetland - - - - - BACKWATER - USGS:SDTS - - - - - An area of calm water unaffected by the current of a stream. - USGS:SDTS - - - - - - - - - - gravel pit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A quarry from which gravel is extracted. - ENVO - ENVO:00000473 - FTT:772 - https://en.wikipedia.org/wiki/Gravel_pit - mine site - - - ADL:FTT - mine site - - - - - A quarry from which gravel is extracted. - MA:ma - - - - - - - - - - cut - - An excavation of the Earth's surface to provide passage for a road, railway, canal, etc. - CUT - ENVO - ENVO:00000474 - FTT:1182 - cutting - https://en.wikipedia.org/wiki/Cut - - - CUT - USGS:SDTS - - - - - An excavation of the Earth's surface to provide passage for a road, railway, canal, etc. - USGS:SDTS - - - - - - - - - - inlet - - - - - - - - - - - - - - An opening of the sea into the land, or of a lake into its shore. - EcoLexicon:inlet - FTT:233 - FTT:463 - Geonames:H.GULF - Geonames:H.INLT - SWEETRealm:Inlet - TGN:21128 - anse - arm - firth - ria - envoPolar - - - USGS:SDTS - firth - - - - - USGS:SDTS - arm - - - - - USGS:SDTS - anse - - - - - USGS:SDTS - ria - - - - - An opening of the sea into the land, or of a lake into its shore. - USGS:SDTS - https://en.wikipedia.org/wiki/Inlet - - - - - - - - - - lake inlet - - - - - - - - - - - - - - - - - - - An opening of a lake into its shore. - ENVO - ENVO:00000476 - envoPolar - - - An opening of a lake into its shore. - USGS:SDTS - - - - - - - - - - mount - - A mountain or a hill. - ENVO - ENVO:00000477 - EcoLexicon:dome - FTT:118 - FTT:460 - MOUNT - SWEETRealm:Dome - TGN:21439 - cerrito - cerro - dome - hill - hillock - https://en.wikipedia.org/wiki/Mount - hummock - inselberg - knob - knoll - koppje - monadnock - mountain - rise - - - USGS:SDTS - knoll - - - - - MOUNT - USGS:SDTS - - - - - USGS:SDTS - hummock - - - - - USGS:SDTS - koppje - - - - - USGS:SDTS - cerro - - - - - USGS:SDTS - dome - - - - - A mountain or a hill. - USGS:SDTS - - - - - ADL:FTT - mountain - - - - - USGS:SDTS - rise - - - - - USGS:SDTS - hillock - - - - - USGS:SDTS - knob - - - - - USGS:SDTS - monadnock - - - - - USGS:SDTS - hill - - - - - ADL:FTT - cerro - - - - - USGS:SDTS - cerrito - - - - - Getty:TGN - hummock - - - - - USGS:SDTS - inselberg - - - - - - - - - - range of mounts - - - - - - - - ENVO - ENVO:00000478 - FTT:996 - range (physiographic) - envoPolar - - - ADL:FTT - range (physiographic) - - - - - - - - - - mouth - - ENVO - ENVO:00000479 - EcoLexicon:outlet - MOUTH - SWEETRealm:Mouth - The exit or point of discharge of a stream into another stream, lake or sea. - https://en.wikipedia.org/wiki/Mouth - outlet - - - USGS:SDTS - outlet - - - - - The exit or point of discharge of a stream into another stream, lake or sea. - USGS:SDTS - - - - - MOUTH - USGS:SDTS - - - - - - - - - - peak - - - - - - - - ENVO - ENVO:00000480 - EcoLexicon:summit - FTT:757 - FTT:79 - FTT:80 - FTT:994 - FTT:998 - FTT:999 - Geonames:T.PK - Geonames:T.PKS - PEAK - SWEETRealm:Peak - TGN:21490 - The summit of a mount. - ahu - https://en.wikipedia.org/wiki/Peak - ice peak - mountain crest - mountain summit - nunatak - peak - peaks - summit - - - The summit of a mount. - USGS:SDTS - - - - - ADL:FTT - ahu - - - - - USGS:SDTS - summit - - - - - ADL:FTT - nunatak - - - - - Geonames:feature - peaks - - - - - ADL:FTT - summit - - - - - ADL:FTT - mountain crest - - - - - PEAK - USGS:SDTS - - - - - Geonames:feature - peak - - - - - ADL:FTT - mountain summit - - - - - USGS:SDTS - ice peak - - - - - - - - - - pinnacle - - A tall, slender, spire-shaped rock projecting from a level or more gently sloping surface. - ENVO - ENVO:00000481 - EcoLexicon:crag - FTT:1008 - FTT:145 - PINNACLE - chapeirao - coral head - crag - https://en.wikipedia.org/wiki/Pinnacle - natural rock formation - pillar - pinnacle (natural formation) - scar - - - PINNACLE - USGS:SDTS - - - - - USGS:SDTS - chapeirao - - - - - ADL:FTT - natural rock formation - - - - - ADL:FTT - pinnacle (natural formation) - - - - - USGS:SDTS - coral head - - - - - USGS:SDTS - crag - - - - - A tall, slender, spire-shaped rock projecting from a level or more gently sloping surface. - USGS:SDTS - - - - - USGS:SDTS - pillar - - - - - USGS:SDTS - scar - - - - - - - - - - sea floor - - - - - - - - ENVO - ENVO:00000482 - EcoLexicon:sea_floor - SeaFloor - The ground surface that lies beneath a sea. - https://en.wikipedia.org/wiki/Sea_floor - sea bed - sea bottom - - - MA:ma - The ground surface that lies beneath a sea. - - - - - NASA:earthrealm - SeaFloor - - - - - - - - - - plunge pool - - - - - - - - - - - - - - A hollow eroded by the force of the falling water at the base of a waterfall, particularly by the eddying effect. - ENVO - ENVO:00000483 - PLUNGE POOL - https://en.wikipedia.org/wiki/Plunge_pool - Problematic. Does this refer to the depression or the accumulated water? - - - A hollow eroded by the force of the falling water at the base of a waterfall, particularly by the eddying effect. - USGS:SDTS - - - - - PLUNGE POOL - USGS:SDTS - - - - - - - - - - polynya - - - - - - - - Any enclosed water area in pack ice other than a lead, not large enough to be called open water. When frozen over, a polyna becomes an ice skylight from the point of view of the submariner. - Could be a subclass of a class that describes holes in solid material covering water or other liquids. Perhaps a class like "clearing". Logical def can include surrounded_by "ice mass". - ENVO - ENVO:00000484 - EcoLexicon:polynya - POLYNA - Polynya - SWEETRealm:Polynya - big clearing - clearing - glade - https://en.wikipedia.org/wiki/Polynya - ice clearing - polynia - regional clearing - envoPolar - - - NASA:earthrealm - Polynya - - - - - USGS:SDTS - ice clearing - - - - - USGS:SDTS - big clearing - - - - - USGS:SDTS - glade - - - - - Any enclosed water area in pack ice other than a lead, not large enough to be called open water. When frozen over, a polyna becomes an ice skylight from the point of view of the submariner. - USGS:SDTS - - - - - POLYNA - USGS:SDTS - - - - - USGS:SDTS - clearing - - - - - https://en.wikipedia.org/wiki/polynia - polynia - - - - - USGS:SDTS - regional clearing - - - - - - - - - - sea shore - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000485 - EcoLexicon:seashore - FTT:504 - That part of the land in immediate contact with a sea, including the intertidal zone. - shore - - - MA:ma - That part of the land in immediate contact with a sea, including the intertidal zone. - - - - - - - - - - shoreline - - - - - - - - ENVO - ENVO:00000486 - EcoLexicon:shoreline - FTT:240 - FTT:503 - SHOR - Shoreline - TGN:21481 - The line of contact between a body of water and the land. - coastal shoreline - coastal zone - coastline - https://en.wikipedia.org/wiki/Shoreline - - - USGS:SDTS - coastal shoreline - - - - - The line of contact between a body of water and the land. - USGS:SDTS - - - - - NASA:earthrealm - Shoreline - - - - - USGS:SDTS - coastline - - - - - ADL:FTT - coastal zone - - - - - Geonames:feature - SHOR - - - - - - - - - - paternoster lake - - ENVO - ENVO:00000487 - One of a series of glacial lakes connected by a single stream or a braided stream system. - https://en.wikipedia.org/wiki/Paternoster_lake - lake - envoPolar - - - USGS:SDTS - lake - - - - - One of a series of glacial lakes connected by a single stream or a braided stream system. - https://en.wikipedia.org/wiki/Paternoster_lake - - - - - - - - - - glacial lake - - - - - - - - - - - - - - A lake which is primarily composed of glacial meltwater and which fills a depression formed as a result of a glacial erosion process. - ENVO - ENVO:00000488 - https://en.wikipedia.org/wiki/Glacial_lake - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - A lake which is primarily composed of glacial meltwater and which fills a depression formed as a result of a glacial erosion process. - https://en.wikipedia.org/wiki/Glacial_lake - - - - - - - - - - palsa - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A low oval elevation in areas with permafrost, frequently peat bogs, where a perennial ice lens has developed within the soil. A palsa consists, similarly to a pingo, of an ice core and overlying soil materials, in case of a palsa usually boggy soil. Palsas are characteristically found in areas with discontinuous permafrost and in such areas bay be the only reliable surface evidence of permafrost. A palsa needs large quantities of water for the formation of its ice core (i.e. ice lens), which is why they frequently emerge from and are bound by boggy soils, which can store enormous quantities of water in their pores. Palsas develop particularly in moorlands and are therefore also named palsamoors. - ENVO - ENVO:00000489 - https://en.wikipedia.org/wiki/Palsa - palsa bog - wetland - - - USGS:SDTS - wetland - - - - - A low oval elevation in areas with permafrost, frequently peat bogs, where a perennial ice lens has developed within the soil. A palsa consists, similarly to a pingo, of an ice core and overlying soil materials, in case of a palsa usually boggy soil. Palsas are characteristically found in areas with discontinuous permafrost and in such areas bay be the only reliable surface evidence of permafrost. A palsa needs large quantities of water for the formation of its ice core (i.e. ice lens), which is why they frequently emerge from and are bound by boggy soils, which can store enormous quantities of water in their pores. Palsas develop particularly in moorlands and are therefore also named palsamoors. - https://en.wikipedia.org/wiki/Palsa - - - - - - - - - - consequent stream - - A stream whose course is a direct consequence of the original slope of the surface upon which it developed, i.e., a stream that follows the slope of the original land. - ENVO - ENVO:00000490 - https://en.wikipedia.org/wiki/Consequent_stream - - - A stream whose course is a direct consequence of the original slope of the surface upon which it developed, i.e., a stream that follows the slope of the original land. - https://en.wikipedia.org/wiki/Obsequent_stream - - - - - - - - - - subsequent stream - - A stream whose course has been determined by selective headward erosion along weak strata. These streams have generally developed after the original stream. Subsequent streams developed independently of the original relief of the land and generally follow paths determined by the weak rock belts. - ENVO - ENVO:00000491 - https://en.wikipedia.org/wiki/Subsequent_stream - - - A stream whose course has been determined by selective headward erosion along weak strata. These streams have generally developed after the original stream. Subsequent streams developed independently of the original relief of the land and generally follow paths determined by the weak rock belts. - https://en.wikipedia.org/wiki/Obsequent_stream - - - - - - - - - - resequent stream - - A stream whose course follows the original relief, but at a lower level than the original slope (e.g., flows down a course determined by the underlying strata in the same direction). These streams develop later and are generally a tributary to a subsequent stream. - ENVO - ENVO:00000492 - https://en.wikipedia.org/wiki/Resequent_stream - - - A stream whose course follows the original relief, but at a lower level than the original slope (e.g., flows down a course determined by the underlying strata in the same direction). These streams develop later and are generally a tributary to a subsequent stream. - https://en.wikipedia.org/wiki/Obsequent_stream - - - - - - - - - - obsequent stream - - A stream flowing in the opposite direction of the consequent drainage. - ENVO - ENVO:00000493 - https://en.wikipedia.org/wiki/Obsequent_stream - watercourse - - - USGS:SDTS - watercourse - - - - - A stream flowing in the opposite direction of the consequent drainage. - https://en.wikipedia.org/wiki/Obsequent_stream - - - - - - - - - - insequent stream - - A stream that has an almost random drainage often forming dendritic patterns. These are typically tributaries and have developed by a headward erosion on a horizontally stratified belt or on homogeneous rocks. These streams follow courses that apparently were not controlled by the original slope of the surface, its structure or the type of rock. - ENVO - ENVO:00000494 - https://en.wikipedia.org/wiki/Insequent_stream - - - A stream that has an almost random drainage often forming dendritic patterns. These are typically tributaries and have developed by a headward erosion on a horizontally stratified belt or on homogeneous rocks. These streams follow courses that apparently were not controlled by the original slope of the surface, its structure or the type of rock. - https://en.wikipedia.org/wiki/Obsequent_stream - - - - - - - - - - tributary - - - - - - - - - - - - - - - - - - - A stream or river which flows into another river (a parent river) or body of water but which may not flow directly into the sea. - ENVO - ENVO:00000495 - EcoLexicon:affluent - FTT:105 - FTT:1261 - SWEETRealm:Tributary - TGN:21157 - affluent - affluent stream - confluent stream - https://en.wikipedia.org/wiki/Tributary - river tributary - stream - watercourse - - - Getty:TGN - river tributary - - - - - USGS:SDTS - watercourse - - - - - ADL:FTT - stream - - - - - ADL:FTT - affluent - - - - - A stream or river which flows into another river (a parent river) or body of water but which may not flow directly into the sea. - https://en.wikipedia.org/wiki/Tributary - - - - - - - - - - rill - - A narrow and shallow incision into soil resulting from erosion by overland flow that has been focused into a thin thread by soil surface roughness. Rilling, the process of rill formation, is common on agricultural land and unvegetated ground. - ENVO - ENVO:00000496 - EcoLexicon:rill - https://en.wikipedia.org/wiki/Rill - - - A narrow and shallow incision into soil resulting from erosion by overland flow that has been focused into a thin thread by soil surface roughness. Rilling, the process of rill formation, is common on agricultural land and unvegetated ground. - https://en.wikipedia.org/wiki/Rill - - - - - - - - - - rincon - - An incised meander on a river. - ENVO - ENVO:00000497 - https://en.wikipedia.org/wiki/Rincon - inlet - - - USGS:SDTS - inlet - - - - - An incised meander on a river. - https://en.wikipedia.org/wiki/Rincon - - - - - - - - - - volcanic dike - - - - - - - - - - - - - - - - An intrusive igneous body. Its thickness is usually much smaller than its other two dimensions. Thickness can vary from sub-centimeter scale to many meters in thickness and the lateral dimensions can extend over many kilometers. A dike is an intrusion into a cross-cutting fissure, meaning a dike cuts across other pre-existing layers or bodies of rock, this means that a dike is always younger than the rocks that contain it. Dikes are usually high angle to near vertical in orientation, but subsequent tectonic deformation may rotate the sequence of strata through which the dike lies so that the latter becomes horizontal. - ENVO - ENVO:00000498 - FTT:654 - dyke (geologic) - ridge - volcanic dyke - igneous dike - - - An intrusive igneous body. Its thickness is usually much smaller than its other two dimensions. Thickness can vary from sub-centimeter scale to many meters in thickness and the lateral dimensions can extend over many kilometers. A dike is an intrusion into a cross-cutting fissure, meaning a dike cuts across other pre-existing layers or bodies of rock, this means that a dike is always younger than the rocks that contain it. Dikes are usually high angle to near vertical in orientation, but subsequent tectonic deformation may rotate the sequence of strata through which the dike lies so that the latter becomes horizontal. - https://en.wikipedia.org/wiki/Trough_%28geology%29 - - - - - ADL:FTT - dyke (geologic) - - - - - USGS:SDTS - ridge - - - - - - - - - - trough - - A linear structural depression that extends laterally over a distance, while being less steep than a trench. A trough can be a narrow basin or a geologic rift. There are various oceanic troughs, troughs found under oceans; examples include the rift along the mid-oceanic ridge and the Cayman Trough. - ENVO - ENVO:00000499 - SWEETRealm:Trough - TGN:21512 - swale - - - A linear structural depression that extends laterally over a distance, while being less steep than a trench. A trough can be a narrow basin or a geologic rift. There are various oceanic troughs, troughs found under oceans; examples include the rift along the mid-oceanic ridge and the Cayman Trough. - https://en.wikipedia.org/wiki/Trough_%28geology%29 - - - - - USGS:SDTS - swale - - - - - - - - - - beaver dam - - An obstruction in a stream constructed by a beaver. - ENVO - ENVO:00000500 - FTT:243 - dam - https://en.wikipedia.org/wiki/Beaver_dam - - - An obstruction in a stream constructed by a beaver. - MA:ma - - - - - USGS:SDTS - dam - - - - - - - - - - bed - - - - - - - - - - - - - - - - - - - - - - - - - BOTTOM - ENVO - ENVO:00000501 - EcoLexicon:bed - FTT:804 - SWEETRealm:Bottom - The portion of the ground surface which lies below water. - https://en.wikipedia.org/wiki/Stream_bed - - - The portion of the ground surface which lies below water. - USGS:SDTS - - - - - BOTTOM - USGS:SDTS - - - - - - - - - - container of an intermittent saline lake - - A depression that is periodically filled with saline water, forming a saline lake. - ENVO - ENVO:00000502 - FTT:221 - FTT:880 - Geonames:H.LKN - Geonames:H.LKSNI - intermittent salt lake - intermittent salt lakes - lake - intermittent saline lake - - - Geonames:feature - intermittent salt lakes - - - - - ADL:FTT - lake - - - - - Geonames:feature - intermittent salt lake - - - - - A depression that is periodically filled with saline water, forming a saline lake. - MA:ma - http://orcid.org/0000-0002-4366-3088 - - - - - - - - - - container of an intermittent oxbow lake - - - A depression which is continous with one or more abandoned meander loops of a river channel. - ENVO - ENVO:00000503 - FTT:221 - FTT:876 - Geonames:H.LKOI - intermittent oxbow lake - - - A depression which is continous with one or more abandoned meander loops of a river channel. - MA:ma - https://www.britannica.com/science/oxbow-lake - http://orcid.org/0000-0002-4366-3088 - - - - - - - - - - container of an intermittent pond - - A container of an intermittent water body which, when filled with water, has a well-illuminated surface layer, is subject to complete mixing of the water it holds, and is smaller than the container of a lake. - ENVO - ENVO:00000504 - FTT:221 - FTT:877 - FTT:878 - Geonames:H.PNDI - Geonames:H.PNDSI - Geonames:H.POOLI - intermittent pond - intermittent ponds - intermittent pool - intermittent pool - intermittent pool - - - ADL:FTT - intermittent pool - - - - - A container of an intermittent water body which, when filled with water, has a well-illuminated surface layer, is subject to complete mixing of the water it holds, and is smaller than the container of a lake. - MA:ma - https://www.britannica.com/science/lacustrine-ecosystem#ref6888 - http://orcid.org/0000-0002-4366-3088 - - - - - Geonames:feature - intermittent pond - - - - - Geonames:feature - intermittent ponds - - - - - Geonames:feature - intermittent pool - - - - - ADL:FTT - intermittent pool - - - - - - - - - - underground irrigation canal - - - A gently inclined underground tunnel bringing water for irrigation from an aquifer. - ENVO - ENVO:00000505 - FTT:129 - FTT:410 - Geonames:H.CNLSB - underground irrigation canal - - - ADL:FTT - underground irrigation canal - - - - - A gently inclined underground tunnel bringing water for irrigation from an aquifer. - Geonames:feature - - - - - Geonames:feature - underground irrigation canal - - - - - - - - - - intermittently filled reservoir - - A reservoir that is not permanently filled with water, at times being dry. - ENVO - ENVO:00000506 - FTT:221 - FTT:588 - FTT:879 - Geonames:H.RSVI - intermittent reservoir - - - A reservoir that is not permanently filled with water, at times being dry. - MA:ma - - - - - Geonames:feature - intermittent reservoir - - - - - - - - - - wadi mouth - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000507 - FTT:157 - FTT:162 - Geonames:H.WADM - The lower terminus of a wadi where it widens into an adjoining floodplain, depression, or water body. - wadi mouth - - - Geonames:feature - wadi mouth - - - - - Geonames:feature - The lower terminus of a wadi where it widens into an adjoining floodplain, depression, or water body. - - - - - - - - - - terrace - - - - - - - - A step-like feature between higher and lower ground: a relatively flat or gently inclined shelf of earth, backed and fronted by steep slopes or manmade detaining walls. - ENVO - ENVO:00000508 - EcoLexicon:terrace - FTT:247 - FTT:248 - Geonames:T.BNCH - Geonames:T.TRR - TERRACE - TGN:21498 - TGN:21513 - bench - bench - bench (natural) - https://en.wikipedia.org/wiki/Terrace - ledge - rock terrace - terrace - - - Geonames:feature - bench - - - - - ADL:FTT - bench (natural) - - - - - Getty:TGN - bench - - - - - Geonames:feature - terrace - - - - - TERRACE - USGS:SDTS - - - - - USGS:SDTS - bench - - - - - A step-like feature between higher and lower ground: a relatively flat or gently inclined shelf of earth, backed and fronted by steep slopes or manmade detaining walls. - USGS:SDTS - - - - - ADL:FTT - ledge - - - - - USGS:SDTS - rock terrace - - - - - - - - - - marine terrace - - ENVO - ENVO:00000509 - EcoLexicon:bench - FTT:249 - Geonames:BNCU - bench - bench (seafloor) - https://en.wikipedia.org/wiki/Marine_terrace - marine bench - - - USGS:SDTS - marine bench - - - - - ADL:FTT - bench (seafloor) - - - - - Geonames:feature - bench - - - - - - - - - - meander neck - - - - - - - - ENVO - ENVO:00000510 - FTT:947 - FTT:96 - Geonames:T.NKM - meander neck - physiographic feature - - - Geonames:feature - meander neck - - - - - ADL:FTT - physiographic feature - - - - - - - - - - blanket bog - - A peatland whose development is mostly independent of basins or topographical features where water collects; it simply covers the landscape like a blanket. Peat develops due to a continuous supply of water from rainfall, maintaining waterlogged conditions on the ground. Blanket bogs are ombrotrophic or rain fed, and as a result their pH lies between 3.5 and 4.2. - ENVO - ENVO:00000511 - SWEETRealm:BlanketBog - https://en.wikipedia.org/wiki/Blanket_bog - wetland - - - USGS:SDTS - wetland - - - - - A peatland whose development is mostly independent of basins or topographical features where water collects; it simply covers the landscape like a blanket. Peat develops due to a continuous supply of water from rainfall, maintaining waterlogged conditions on the ground. Blanket bogs are ombrotrophic or rain fed, and as a result their pH lies between 3.5 and 4.2. - IPCC:http://www.ipcc.ie/infoblanketbogfs.html - - - - - - - - - - pond bed - - - - - - - - ENVO - ENVO:00000512 - The ground surface that lies beneath a pond. - pond bottom - - - MA:ma - The ground surface that lies beneath a pond. - - - - - - - - - - reservoir bed - - - - - - - - ENVO - ENVO:00000513 - The ground surface that lies beneath a reservoir. - reservoir bottom - - - MA:ma - The ground surface that lies beneath a reservoir. - - - - - - - - - - crater - - A generally circular saucer or bowl-shaped depression caused by volcanic or meteorite explosive action. - CRATER - FTT:219 - Geonames:T.CRTR - SWEETRealm:Crater - TGN:21408 - caldera - https://en.wikipedia.org/wiki/Crater - - - A generally circular saucer or bowl-shaped depression caused by volcanic or meteorite explosive action. - Geonames:feature - - - - - USGS:SDTS - caldera - - - - - CRATER - USGS:SDTS - - - - - - - - - - road cut - - - - - - - - - - - - - - - - - - - A cut to provide passage for a road. - ENVO - ENVO:00000515 - Geonames:R.RDCUT - road cut - - - A cut to provide passage for a road. - MA:ma - - - - - Geonames:feature - road cut - - - - - - - - - - hammock - - A patch of ground, distinct from and slightly above the surrounding plain or wetland. Often occurs in groups. - ENVO - ENVO:00000516 - FTT:783 - Geonames:T.HMCK - SWEETRealm:Hummock - https://en.wikipedia.org/wiki/Hammock - hummock - - - A patch of ground, distinct from and slightly above the surrounding plain or wetland. Often occurs in groups. - Geonames:feature - - - - - Geonames:feature - hummock - - - - - - - - - - lost stream - - A surface stream that disappears into an underground channel, or dries up in an arid area. - ENVO - ENVO:00000517 - FTT:105 - FTT:931 - Geonames:H.STMSB - TGN:21112 - lost river - lost river - lost watercourse - stream - - - Getty:TGN - lost watercourse - - - - - ADL:FTT - stream - - - - - A surface stream that disappears into an underground channel, or dries up in an arid area. - Geonames:feature - - - - - Geonames:feature - lost river - - - - - Geonames:feature - lost river - - - - - ADL:FTT - lost river - - - - - Geonames:feature - lost watercourse - - - - - - - - - - ditch mouth - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00000518 - FTT:129 - FTT:399 - Geonames:H.DTCHM - The exit or point of discharge of a ditch. - ditch mouth - - - MA:ma - The exit or point of discharge of a ditch. - - - - - Geonames:feature - ditch mouth - - - - - ADL:FTT - ditch mouth - - - - - - - - - - agricultural terrace - - - ENVO - ENVO:00000519 - https://en.wikipedia.org/wiki/Agricultural_terrace - - - - - - - - landslide - - - - - - - - - - - - - - - - - - - - - - - - - A mound of earth material, at the base of a slope and the associated scoured area. - EcoLexicon:landslide - FTT:1076 - FTT:914 - FTT:96 - Geonames:T.SLID - SWEETRealm:Landslide - TGN:21507 - https://en.wikipedia.org/wiki/Landslide - landslip - physiographic feature - slide - slide (natural) - - - ADL:FTT - slide (natural) - - - - - ADL:FTT - physiographic feature - - - - - Getty:TGN - slide - - - - - Geonames:feature - slide - - - - - - - - - - rockfall - - - - - - - - - - - - - - - - - - - - - - - - - - - An irregular mass of fallen rock at the base of a cliff or steep slope. - EcoLexicon:rockfall - FTT:1072 - FTT:96 - Geonames:T.RKFL - TGN:21504 - https://en.wikipedia.org/wiki/Rockfall - rockfall - - - Geonames:feature - rockfall - - - - - - - - - - canal tunnel - - A tunnel through which a canal passes. - ENVO - ENVO:00000522 - FTT:396 - FTT:397 - Geonames:H.TNLC - canal tunnel - https://en.wikipedia.org/wiki/Canal_tunnel - tunnel - - - A tunnel through which a canal passes. - Geonames:feature - - - - - Geonames:feature - canal tunnel - - - - - ADL:FTT - tunnel - - - - - - - - - - cutoff - - A channel formed as a result of a stream cutting through a meander neck. - ENVO - ENVO:00000523 - FTT:462 - Geomames:CUTF - TGN:21134 - cut off - cutoff (hydrographic) - cuttoff - https://en.wikipedia.org/wiki/Cutoff - - - ADL:FTT - cutoff (hydrographic) - - - - - USGS:SDTS - cut off - - - - - Geonames:feature - cuttoff - - - - - A channel formed as a result of a stream cutting through a meander neck. - Geonames:feature - - - - - - - - - - abandoned watercourse - - A former stream or distributary no longer carrying flowing water, but still evident due to lakes, wetland, topographic or vegetation patterns. - ENVO - ENVO:00000524 - Geonames:H.STMQ - TGN:21113 - abandoned watercourse - - - Geonames:feature - abandoned watercourse - - - - - A former stream or distributary no longer carrying flowing water, but still evident due to lakes, wetland, topographic or vegetation patterns. - Geonames:feature - - - - - - - - - - canalized stream - - A stream that has been substantially ditched, diked, or straightened. - ENVO - ENVO:00000525 - FTT:129 - FTT:398 - Geonames:H.STMC - canal - canalised stream - canalized stream - - - Geonames:feature - canalized stream - - - - - A stream that has been substantially ditched, diked, or straightened. - Geonames:feature - - - - - ADL:FTT - canal - - - - - - - - - - cleft - - - - - - - - A deep narrow slot, notch, or groove in a cliff. - ENVO - ENVO:00000526 - Geonames:T.CFT - cleft - https://en.wikipedia.org/wiki/Cleft - - - A deep narrow slot, notch, or groove in a cliff. - Geonames:feature - - - - - Geonames:feature - cleft - - - - - - - - - - interfluve - - A relatively undissected upland between adjacent stream valleys. - ENVO - ENVO:00000527 - FTT:707 - FTT:874 - Geonames:T.INTF - TGN:21450 - interfluve - plain - - - A relatively undissected upland between adjacent stream valleys. - Geonames:feature - - - - - Geonames:feature - interfluve - - - - - ADL:FTT - plain - - - - - - - - - - ice cap ridge - - - - - - - - - - - - - - - - - - - A linear elevation on an icecap. - ENVO - ENVO:00000528 - FTT:155 - FTT:844 - Geonames:H.RDGG - icecap reach - ridge - envoPolar - - - ADL:FTT - ridge - - - - - A linear elevation on an icecap. - Geonames:feature - - - - - Geonames:feature - icecap reach - - - - - - - - - - beach ridge - - - - - - - - - - - - - - - - - - - A ridge of sand just inland and parallel to the beach, usually in series. - ENVO - ENVO:00000529 - FTT:236 - Geonames:T.RDGB - beach ridge - https://en.wikipedia.org/wiki/Beach_ridge - - - A ridge of sand just inland and parallel to the beach, usually in series. - Geonames:feature - - - - - Geonames:feature - beach ridge - - - - - - - - - - apron - - A gentle slope, with a generally smooth surface, particularly found around groups of islands and seamounts. - ENVO - ENVO:00000530 - EcoLexicon:apron - FTT:122 - Geonames:U.APNU - TGN:23187 - apron - apron (geological) - archipelago apron - https://en.wikipedia.org/wiki/Apron - undersea apron - - - USGS:SDTS - archipelago apron - - - - - A gentle slope, with a generally smooth surface, particularly found around groups of islands and seamounts. - Geonames:feature - - - - - Geonames:feature - apron - - - - - ADL:FTT - apron (geological) - - - - - Getty:TGN - undersea apron - - - - - - - - - - ice cap depression - - - - - - - - - - - - - - - - - - - A depression which is part of an ice cap. - ENVO - ENVO:00000531 - FTT:839 - Geonames:H.DPRG - TGN:21145 - icecap depression - icecap depression - envoPolar - - - ADL:FTT - icecap depression - - - - - Geonames:feature - icecap depression - - - - - - - - - - intermittent saline evaporation pond - - ENVO - ENVO:00000532 - FTT:881 - Geonames:H.PNDNI - intermittent salt pond - lake - - - Geonames:feature - intermittent salt pond - - - - - ADL:FTT - intermittent salt pond - - - - - ADL:FTT - lake - - - - - - - - - - landfill - - A site at which refuse is dumped, normally filling a natural or artificial depression. - ENVO - ENVO:00000533 - FTT:621 - FTT:624 - disposal site - https://en.wikipedia.org/wiki/Landfill - garbage dump - rubbish dump - - - ADL:FTT - disposal site - - - - - A site at which refuse is dumped, normally filling a natural or artificial depression. - MA:ma - - - - - - - - - - pothole - - ENVO - ENVO:00000534 - FTT:1071 - https://en.wikipedia.org/wiki/Pothole - - - - - - - - weir - - A low obstruction built across the path of s stream to raise its level. - ENVO - ENVO:00000535 - FTT:603 - Geonames:S.WEIR - TGN:51265 - https://en.wikipedia.org/wiki/Weir - weir - - - A low obstruction built across the path of s stream to raise its level. - MA:ma - - - - - Geonames:feature - weir - - - - - - - - - - moatan - - - - - - - - An annular depression that may not be continuous, located at the base of many seamounts, islands, and other isolated elevations. - ENVO - ENVO:00000536 - Geonames:U.MOTU - moatan - - - Geonames:feature - moatan - - - - - An annular depression that may not be continuous, located at the base of many seamounts, islands, and other isolated elevations. - Geonames:feature - - - - - - - - - - boulder field - - - - - - - - A high altitude or high latitude bare, flat area covered with large angular rocks. - ENVO - ENVO:00000537 - FTT:289 - Geonames:T.BLDR - TGN:21501 - boulder field - - - A high altitude or high latitude bare, flat area covered with large angular rocks. - Geonames:feature - - - - - Geonames:feature - boulder field - - - - - - - - - - arrugado - - - - - - - - - - - - - - - - - - - An undersea area of subdued corrugations off Baja California. - ENVO - ENVO:00000538 - FTT:167 - Geonames:U.ARRU - arrugado - Add partially surrounded by marine water or similar - - - An undersea area of subdued corrugations off Baja California. - Geonames:feature - - - - - ADL:FTT - arrugado - - - - - Geonames:feature - arrugado - - - - - - - - - - sill - - ENVO - ENVO:00000539 - EcoLexicon:sill - FTT:740 - Geonames:H.SILL - SWEETRealm:Sill - TGN:21367 - The low part of a gap or saddle separating basins. - gap - https://en.wikipedia.org/wiki/Sill - sill - sill (physiographic) - - - ADL:FTT - sill (physiographic) - - - - - Geonames:feature - The low part of a gap or saddle separating basins. - - - - - Geonames:feature - sill - - - - - USGS:SDTS - sill - - - - - ADL:FTT - gap - - - - - - - - - - brackish lake - - - - - - - - A lake which is primarily composed of brackish water, having a higher salinity than fresh water but a lower salinity than marine water. - - - - - - - - brackish pond - - ENVO - ENVO:00000541 - - - - - - - - kame - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An irregularly shaped hill or mound composed of sorted or stratified sand and gravel that is deposited in contact with the glacial ice. It can have an irregular shape. Kames are often associated with kettles, and this is referred to as kame and kettle topography. When the ice retreats further, the delta kame often collapses. Kame terraces are frequently found along the side of a glacial valley and are the deposits of meltwater streams flowing between the ice and the adjacent valley side. - ENVO - ENVO:00000542 - EcoLexicon:kame - https://en.wikipedia.org/wiki/Kame - mount - ridge - - - USGS:SDTS - ridge - - - - - An irregularly shaped hill or mound composed of sorted or stratified sand and gravel that is deposited in contact with the glacial ice. It can have an irregular shape. Kames are often associated with kettles, and this is referred to as kame and kettle topography. When the ice retreats further, the delta kame often collapses. Kame terraces are frequently found along the side of a glacial valley and are the deposits of meltwater streams flowing between the ice and the adjacent valley side. - https://en.wikipedia.org/wiki/Kame - - - - - USGS:SDTS - mount - - - - - - - - - - swale - - A low tract of land, especially when moist or marshy. The term can refer to a natural landscape feature or a human-created one. When created by humans, this open drain system is designed to manage water runoff. - ENVO - ENVO:00000543 - EcoLexicon:swale - trough - - - A low tract of land, especially when moist or marshy. The term can refer to a natural landscape feature or a human-created one. When created by humans, this open drain system is designed to manage water runoff. - https://en.wikipedia.org/wiki/Swale_%28geographical_feature%29 - - - - - USGS:SDTS - trough - - - - - - - - - - leat - - A man-made watercourse, or makeshift aqueduct, often an artificial channel which supplies water to a watermill or its mill pond, collecting water from upstream of the mill so that the natural level of the driving water is above the level of the stream at the mill. Alternatively to may deliver water for mineral washing and concentration, irrigation or to a dye works. - ENVO - ENVO:00000544 - https://en.wikipedia.org/wiki/Leat - lete - - - A man-made watercourse, or makeshift aqueduct, often an artificial channel which supplies water to a watermill or its mill pond, collecting water from upstream of the mill so that the natural level of the driving water is above the level of the stream at the mill. Alternatively to may deliver water for mineral washing and concentration, irrigation or to a dye works. - https://en.wikipedia.org/wiki/Leat - - - - - - - - - - shingle beach - - A beach which is armoured with pebbles or small to medium sized cobbles. - ENVO - ENVO:00000545 - https://en.wikipedia.org/wiki/Shingle_beach - pebble beach - - - A beach which is armoured with pebbles or small to medium sized cobbles. - https://en.wikipedia.org/wiki/Shingle_beach - - - - - - - - - - lake sediment - - - - - - - - - - - - - - Lake sediment is sediment which covers the bottom of a lake. Lake sediments are comprised mainly of clastic material (sediment of clay, silt, and sand sizes), organic debris, chemical precipitates, or combinations of these. - SedimentLayer - - - Lake sediment is sediment which covers the bottom of a lake. Lake sediments are comprised mainly of clastic material (sediment of clay, silt, and sand sizes), organic debris, chemical precipitates, or combinations of these. - URL:http://www.britannica.com/EBchecked/topic/328083/lake/59070/Sediments-and-sedimentation - - - - - NASA:earthrealm - SedimentLayer - - - - - - - - - - waterhole - - A pond, often temporary or seasonal, used as a drinking place by mammals and birds. - ENVO - ENVO:00000547 - FTT:828 - Geonames:H.WTRH - TGN:21184 - https://en.wikipedia.org/wiki/Waterhole - water hole - water hole - waterhole - - - USGS:SDTS - water hole - - - - - Geonames:feature - waterhole - - - - - A pond, often temporary or seasonal, used as a drinking place by mammals and birds. - MA:ma - - - - - - - - - - gravel field - - - - - - - - ENVO - ENVO:00000548 - Geonames:L.GVL - TGN:21502 - gravel field area - - - Geonames:feature - gravel field area - - - - - - - - - - container of an intermittent water body - - A depression which is is periodically filled with water when water supply exceeds evapotranspiration and bed seepage. - ENVO - ENVO:00000549 - TGN:21198 - intermittent body of water - intermittent water body - Despite the relocation from its position under 'water body' and the rewording of the definition, the class was not obsoleted as the entity being referenced is effectively the same. - This was formerly represented as a water body, which would not be valid during dry periods. This class more properly refers to the container of the water body, thusfar always some depression, which periodically contains a water body. - - - A depression which is is periodically filled with water when water supply exceeds evapotranspiration and bed seepage. - MA:ma - http://orcid.org/0000-0002-4366-3088 - - - - - Getty:TGN - intermittent body of water - - - - - - - - - - range of seamounts - - - - - - - - ENVO - ENVO:00000550 - Geonames:U.CDAU - TGN:23131 - TGN:23145 - TGN:23344 - cordillera - seamount chain - seamount group - seamount range - undersea cordillera - undersea mountain chain - undersea range - - - USGS:SDTS - seamount range - - - - - Getty:TGN - undersea cordillera - - - - - Getty:TGN - undersea range - - - - - Getty:TGN - undersea mountain chain - - - - - USGS:SDTS - seamount group - - - - - Geonames:feature - cordillera - - - - - USGS:SDTS - seamount chain - - - - - - - - - - endorheic basin - - A drainage basin from which there is no outflow of water, either on the surface as rivers, or underground by flow or diffusion through rock or permeable material. - ENVO - ENVO:00000551 - EcoLexicon:endorheic_basin - closed basin - https://en.wikipedia.org/wiki/Endorheic_basin - terminal basin - - - A drainage basin from which there is no outflow of water, either on the surface as rivers, or underground by flow or diffusion through rock or permeable material. - https://en.wikipedia.org/wiki/Endorheic_basin - - - - - - - - - - talik - - - - - - - - - - - - - - - - - - - An area of unfrozen ground surrounded by permafrost. - ENVO - ENVO:00000552 - Talik - https://en.wikipedia.org/wiki/Talik - - - NASA:earthrealm - Talik - - - - - An area of unfrozen ground surrounded by permafrost. - MA:ma - - - - - - - - - - multipurpose dam - - A dam constructed for more than one purpose. - ENVO - ENVO:00000553 - - - A dam constructed for more than one purpose. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - saddle dam - - An auxiliary dam constructed to confine the reservoir created by a primary dam either to permit a higher water elevation and storage or to limit the extent of a reservoir for increased efficiency. - ENVO - ENVO:00000554 - - - An auxiliary dam constructed to confine the reservoir created by a primary dam either to permit a higher water elevation and storage or to limit the extent of a reservoir for increased efficiency. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - check dam - - A dam designed to reduce flow velocity and control soil erosion. - ENVO - ENVO:00000555 - SWEETRealm:CheckDam - - - A dam designed to reduce flow velocity and control soil erosion. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - wing dam - - A dam that only partly restricts a waterway, creating a faster channel that resists the accumulation of sediment. - ENVO - ENVO:00000556 - https://en.wikipedia.org/wiki/Wing_dam - - - A dam that only partly restricts a waterway, creating a faster channel that resists the accumulation of sediment. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - dry dam - - A dam designed to control flooding. It normally holds back no water and allows the channel to flow freely, except during periods of intense flow that would otherwise cause flooding downstream. - ENVO - ENVO:00000557 - https://en.wikipedia.org/wiki/Dry_dam - - - A dam designed to control flooding. It normally holds back no water and allows the channel to flow freely, except during periods of intense flow that would otherwise cause flooding downstream. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - diversionary dam - - A dam designed to divert all or a portion of the flow of a river from its natural course. - ENVO - ENVO:00000558 - https://en.wikipedia.org/wiki/Diversionary_dam - - - A dam designed to divert all or a portion of the flow of a river from its natural course. - https://en.wikipedia.org/wiki/Dam#By_purpose - - - - - - - - - - weapons test site - - A region at which weapons, typically military, are tested. - ENVO - ENVO:00000559 - - - A region at which weapons, typically military, are tested. - MA:ma - - - - - - - - - - nuclear weapons test site - - A weapons test site at which nuclear weapons are, or have been, tested. - ENVO - ENVO:00000560 - - - A weapons test site at which nuclear weapons are, or have been, tested. - MA:ma - - - - - - - - - - military training area - - A region in which military personnel train. - ENVO - ENVO:00000561 - - - A region in which military personnel train. - MA:ma - - - - - - - - - - park - - A bounded area of land, or water, usually in its natural or semi-natural (landscaped) state and set aside for some purpose, usually to do with recreation or conservation. - ENVO - ENVO:00000562 - https://en.wikipedia.org/wiki/Park - - - A bounded area of land, or water, usually in its natural or semi-natural (landscaped) state and set aside for some purpose, usually to do with recreation or conservation. - https://en.wikipedia.org/wiki/Park - - - - - - - - - - pier - - A raised walkway over water, supported by piles or pillars. - EcoLexicon:pier - - - A raised walkway over water, supported by piles or pillars. - https://en.wikipedia.org/wiki/Pier - - - - - - - - - - archeological site - - A place (or group of physical sites) in which evidence of past activity is preserved (either prehistoric or historic or contemporary), and which is, has been, or may be, investigated using the discipline of archaeology. - ENVO - ENVO:00000564 - https://en.wikipedia.org/wiki/Archeological_site - - - A place (or group of physical sites) in which evidence of past activity is preserved (either prehistoric or historic or contemporary), and which is, has been, or may be, investigated using the discipline of archaeology. - https://en.wikipedia.org/wiki/Archeological_site - - - - - - - - - - sports facility - - A building or region where sports activities can be carried out. - The inclusion of "region" in this definition is problematic. - - - A building or region where sports activities can be carried out. - MA:ma - - - - - - - - - - winter sports facility - - A sports facility constructed for skiing and allied sports that require snow and/or ice. - ENVO - ENVO:00000566 - - - A sports facility constructed for skiing and allied sports that require snow and/or ice. - MA:ma - - - - - - - - - - calanque - - - - - - - - - - - - - - - - - - - - - A deep valley with steep sides, typically of limestone, in part submerged by the sea. - - - A deep valley with steep sides, typically of limestone, in part submerged by the sea. - https://en.wikipedia.org/wiki/Calanque - - - - - - - - - - obsolete aerial habitat - A habitat that is solely in the air. - ENVO - ENVO:00000568 - ENVO:00002005 - true - - - A habitat that is solely in the air. - NM:nm - - - - - - - - - - obsolete marine habitat - A habitat that is in or on a sea or ocean containing high concentrations of dissolved salts and other total dissolved solids (typically >35 grams dissolved salts per litre). - ENVO - ENVO:00000569 - ENVO:01000321 - true - - - - A habitat that is in or on a sea or ocean containing high concentrations of dissolved salts and other total dissolved solids (typically >35 grams dissolved salts per litre). - NM:nm - - - - - - - - - - obsolete brackish water habitat - A habitat that is in or on a body of water (as in estuaries) containing medium concentrations of dissolved salts and other total dissolved solids (typically 0.5 to 35 grams dissolved salts per litre). - ENVO - ENVO:00000570 - ENVO:01000322 - true - - - A habitat that is in or on a body of water (as in estuaries) containing medium concentrations of dissolved salts and other total dissolved solids (typically 0.5 to 35 grams dissolved salts per litre). - NM:nm - - - - - - - - - - obsolete arboreal habitat - A habitat in or on trees. - ENVO - ENVO:00000571 - true - - - A habitat in or on trees. - NM:nm - - - - - - - - - - obsolete subterrestrial habitat - A habitat that is below the surface of the earth. - ENVO - ENVO:00000572 - hypogeal habitat - subterranean habitat - true - underground habitat - - - A habitat that is below the surface of the earth. - NM:nm - - - - - - - - - - city - - ENVO - ENVO:00000856 - EcoLexicon:city - FTT:430 - FTT:483 - FTT:484 - FTT:485 - Incorporated populated place. - SWEETRealm:City - TGN:83020 - TGN:83040 - TGN:83043 - https://en.wikipedia.org/wiki/City - urban area - - - ADL:FTT - Incorporated populated place. - - - - - ADL:FTT - urban area - - - - - - - - - - freshwater biome - - A biome that applies to the freshwater realm. - ENVO - ENVO:00000873 - SPIRE:Freshwater - freshwater realm - envoPolar - - - A biome that applies to the freshwater realm. - MA:ma - - - - - - - - - - obsolete Tundra biome - ENVO - ENVO:00000874 - ENVO:01000180 - true - - - - - - - - obsolete Temperate coniferous forest biome - ENVO - ENVO:00000875 - ENVO:01000211 - true - - - - - - - - obsolete Temperate broadleaf and mixed forest biome - ENVO - ENVO:00000876 - ENVO:01000202 - ENVO:01000212 - true - - - - - - - - obsolete Temperate grasslands, savannas, and shrubland biome - ENVO - ENVO:00000877 - ENVO:01000189 - ENVO:01000193 - ENVO:01000215 - true - - - - - - - - obsolete Mediterranean forests, woodlands, and shrub biome - ENVO - ENVO:00000878 - ENVO:01000199 - ENVO:01000208 - ENVO:01000217 - true - - - - - - - - obsolete Tropical and subtropical moist broadleaf forest biome - ENVO - ENVO:00000879 - ENVO:01000226 - ENVO:01000228 - true - - - - - - - - obsolete Tropical and subtropical dry broadleaf forest biome - ENVO - ENVO:00000880 - ENVO:01000225 - ENVO:01000227 - true - - - - - - - - obsolete Tropical and subtropical grasslands, savannas, and shrubland biome - ENVO - ENVO:00000881 - ENVO:01000187 - ENVO:01000188 - ENVO:01000191 - ENVO:01000192 - ENVO:01000213 - ENVO:01000214 - true - - - - - - - - obsolete Montane grasslands and shrubland biome - ENVO - ENVO:00000882 - ENVO:01000194 - ENVO:01000216 - true - - - - - - - - obsolete Deserts and xeric shrubland biome - ENVO - ENVO:00000883 - ENVO:01000179 - ENVO:01000218 - true - - - - - - - - obsolete Mangrove biome - ENVO - ENVO:00000884 - ENVO:01000181 - true - - - - - - - - obsolete Flooded grasslands and savanna biome - ENVO - ENVO:00000885 - ENVO:01000190 - ENVO:01000195 - true - - - - - - - - obsolete endolithic habitat - A habitat consisting of the spaces within rocks, such as pores between aggregate grains. Inhabited by endolithic organisms. - ENVO - ENVO:00000886 - ENVO:01000303 - true - - - A habitat consisting of the spaces within rocks, such as pores between aggregate grains. Inhabited by endolithic organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - large river biome - - "Large" is ambiguous. For details on "Large rivers" (e.g. the Mekong river) see http://worldwildlife.org/biomes/large-river-ecosystems This class will be replaced with a less ambiguous class. - ENVO - ENVO:00000887 - wwfBiome - - - - - - - - large river headwater biome - - "Large" is ambiguous. For details on "Large river headwaters" (e.g. the Upper Amazon headwaters) see http://worldwildlife.org/biomes/large-river-headwater-ecosystems This class will be replaced with a less ambiguous class. - ENVO - ENVO:00000888 - wwfBiome - - - - - - - - large river delta biome - - "Large" is ambiguous. For details on "Large river deltas" (e.g. the Niger river delta) see http://worldwildlife.org/biomes/large-river-delta-ecosystems This class will be replaced with a less ambiguous class. - ENVO - ENVO:00000889 - wwfBiome - - - - - - - - small river biome - - "Small" is ambiguous. For details on "Small rivers" (e.g. the Salween river) see http://worldwildlife.org/biomes/small-river-ecosystems. This class will be replaced with a less ambiguous class. - ENVO - ENVO:00000890 - wwfBiome - - - - - - - - large lake biome - - "Large" is ambiguous. For details on "Large lakes" (e.g. African rift lakes) see http://worldwildlife.org/biomes/large-lake-ecosystems This class will be replaced with a less ambiguous class. - ENVO - ENVO:00000891 - wwfBiome - - - - - - - - small lake biome - - "Small" is ambiguous. For details on "Small lakes" (e.g. Cameroon crater lakes) see http://worldwildlife.org/biomes/small-lake-ecosystems. This class will be replaced with a less ambiguous class. - ENVO - ENVO:00000892 - wwfBiome - - - - - - - - xeric basin biome - - - - - - - - ENVO - ENVO:00000893 - wwfBiome - The WWF definition is somewhat ambiguous, but workable. - A biome which has little permanent surface water and a low relative abundance of springs. - - - A biome which has little permanent surface water and a low relative abundance of springs. - https://www.worldwildlife.org/biomes/xeric-basin-ecosystems - - - - - - - - - - obsolete polar biome - ENVO - ENVO:00000894 - ENVO:01000186 - true - - - - - - - - obsolete temperate shelf and sea biome - ENVO - ENVO:00000895 - Please refer to the terms in the neritic pelagic zone and neritic benthic zone branches (PLB: 2010-03-15) - true - - - - - - - - obsolete temperate upwelling biome - ENVO - ENVO:00000896 - Please use the appropriate terms in the marine biome branch in combination with the marine upwelling feature to specify an environment characterised by a marine upwelling (2010-03-15, PLB) - true - - - - - - - - obsolete tropical upwelling biome - ENVO - ENVO:00000897 - Please use the appropriate terms in the marine biome branch in combination with the marine upwelling feature to specify an environment characterised by a marine upwelling (2010-03-15, PLB) - true - - - - - - - - obsolete tropical coral biome - ENVO - ENVO:00000898 - ENVO:01000049 - Please use terms in the marine coral reef branch of the Biome hierarchy (2010-03-15, PLB) to describe marine coral reefs. - true - - - - - - - - rock - - - - - - - - - - - - - - - A rock is a naturally occurring solid aggregate of one or more minerals or mineraloids. - ENVO - ENVO:00001995 - EcoLexicon:rock - FTT:1010 - FTT:145 - From https://en.wikipedia.org/wiki/ [A mineral] is different from a rock, which can be an aggregate of minerals or non-minerals and does not have a specific chemical composition. The exact definition of a mineral is under debate, especially with respect to the requirement a valid species be abiogenic, and to a lesser extent with regards to it having an ordered atomic structure. - Geonames:T.RK - Geonames:T.RKS - SWEETRealm:Rock - TGN:21444 - https://en.wikipedia.org/wiki/Rock - - - A rock is a naturally occurring solid aggregate of one or more minerals or mineraloids. - MA:ma - https://en.wikipedia.org/wiki/Rock_(geology) - - - - - - - - - - mine drainage - - - - - - - - ENVO - ENVO:00001996 - The outflow of water from a mine. - acid rock drainage - acid and metalliferous drainage - - - - MA:ma - The outflow of water from a mine. - - - - - acid rock drainage - - - - - - acid and metalliferous drainage - - - - - - - - - - - acid mine drainage - - - - - - - - - - - - - - - - - - - A mine drainage with an acidic pH. - ENVO - ENVO:00001997 - acid rock drainage - https://en.wikipedia.org/wiki/Acid_mine_drainage - - - acid rock drainage - https://en.wikipedia.org/wiki/Acid_mine_drainage - - - - - A mine drainage with an acidic pH. - MA:ma - - - - - - - - - - soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00001998 - LTER:535 - SPIRE:Soil - SWEETRealm:Soil - Soil is an environmental material which is primarily composed of minerals, varying proportions of sand, silt, and clay, organic material such as humus, gases, liquids, and a broad range of resident micro- and macroorganisms. - https://en.wikipedia.org/wiki/Soil - The various 'has part' and 'has quality' relations may not hold true for all soils; however, I have yet to find counter examples. Require input from a pedologist or similar. [pbuttigieg] - regolith - 'In engineering terms, soil is referred to as regolith, or loose rock material that lies above the 'solid geology'. Soil is commonly referred to as "earth" or "dirt"; technically, the term "dirt" should be restricted to displaced soil.' https://en.wikipedia.org/wiki/Soil - -" The upper limit of soil is the boundary between soil and air, shallow water, live plants, or plant materials that have not begun to decompose. Areas are not considered to have soil if the surface is permanently covered by water too deep (typically more than 2.5 meters) for the growth of rooted plants. - -The lower boundary that separates soil from the nonsoil underneath is most difficult to define. Soil consists of horizons near the Earth's surface that, in contrast to the underlying parent material, have been altered by the interactions of climate, relief, and living organisms over time. Commonly, soil grades at its lower boundary to hard rock or to earthy materials virtually devoid of animals, roots, or other marks of biological activity. For purposes of classification, the lower boundary of soil is arbitrarily set at 200 cm." Soil taxonomy, 2nd Ed., quoted in http://www.nrcs.usda.gov/wps/portal/nrcs/detail/soils/edu/?cid=nrcs142p2_054280 - - - - Soil is an environmental material which is primarily composed of minerals, varying proportions of sand, silt, and clay, organic material such as humus, gases, liquids, and a broad range of resident micro- and macroorganisms. - https://en.wikipedia.org/wiki/Soil - - - - - - - - - - marine water body - - - - - - - - A significant accumulation of water which is part of a marine biome. - ENVO - ENVO:00001999 - Ideas like "significant" are fuzzy and need to be modelled more accurately. The definition is a candidate for review. - body of marine water - marine waterbody - - - - - - - - slope - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002000 - EcoLexicon:slope - SWEETRealm:Slope - The part of an elevation or depression between the relatively flat surrounding area and the peak of a mount or the bottom of a depression. - flank - https://en.wikipedia.org/wiki/Slope - side - - - MA:ma - The part of an elevation or depression between the relatively flat surrounding area and the peak of a mount or the bottom of a depression. - - - - - - - - - - waste water - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002001 - EcoLexicon:waste_water - SWEETRealm:Wastewater - Water that has been adversely affected in quality by anthropogenic influence. - https://en.wikipedia.org/wiki/Waste_water - - - - Water that has been adversely affected in quality by anthropogenic influence. - https://en.wikipedia.org/wiki/Wastewater - - - - - - - - - - obsolete food product - ENVO - ENVO:00002002 - FOODON:00001002 - https://en.wikipedia.org/wiki/Food - true - The FAO has the following definition for "food": "Any substance, whether processed, semi-processed, or raw, which is intended for human consumption, and includes drink, chewing gum and any substance which has been used in the manufacture, preparation or treatment of "food" but does not include cosmetics or tobacco or substances used only as drugs." (Nutrition Division/Meeting Programming and Documentation Service, FAO, 2013 (MI198) adopted from Codex Alimentarius Commission, Procedural Manual, Twentieth edition, 2011 (ftp://ftp.fao.org/codex/Publications/ProcManuals/Manual_20e.pdf). ) - - - - - - - - - feces - - - - - - - - ENVO - ENVO:00002003 - EcoLexicon:drop - Feces is an excreta consisting of waste products expelled from an animal's digestive tract through the anus (or cloaca) during defecation. - SPIRE:Dung - SWEETRealm:Drop - This is distinct from classes such as http://purl.obolibrary.org/obo/UBERON_0001988 in that it refers to the environmental material composed primarily of feces rather than 'just' feces. - droppings - faeces - frass - https://en.wikipedia.org/wiki/Feces - pellet - - - Feces is an excreta consisting of waste products expelled from an animal's digestive tract through the anus (or cloaca) during defecation. - https://en.wikipedia.org/wiki/Feces - - - - - - - - - - mesoscopic physical object - - An environmental feature that is, or can be, contained and is predominantly composed of one or a few types of stuff. - discrete solid movable (transportable). - - - An environmental feature that is, or can be, contained and is predominantly composed of one or a few types of stuff. - MA:ma - - - - - - - - - - air - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002005 - EcoLexicon:air - LTER:18 - SWEETRealm:Air - The mixture of gases (roughly (by molar content/volume: 78% nitrogen, 20.95% oxygen, 0.93% argon, 0.038% carbon dioxide, trace amounts of other gases, and a variable amount (average around 1%) of water vapor) that surrounds the planet Earth. - https://en.wikipedia.org/wiki/Air - envoPolar - - - - The mixture of gases (roughly (by molar content/volume: 78% nitrogen, 20.95% oxygen, 0.93% argon, 0.038% carbon dioxide, trace amounts of other gases, and a variable amount (average around 1%) of water vapor) that surrounds the planet Earth. - https://en.wikipedia.org/wiki/Air - - - - - - - - - - water - - - - - - - - - - - - - - An environmental material primarily composed of dihydrogen oxide in its liquid form. - EcoLexicon:water - LTER:617 - https://en.wikipedia.org/wiki/Water - - - An environmental material primarily composed of dihydrogen oxide in its liquid form. - MA:ma - - - - - - - - - - sediment - - - - - - - - - - - - - - EcoLexicon:sediment - EcoLexicon:sedimentation - LTER:492 - LTER:493 - SWEETRealm:Sediment - Sediment is an environmental substance comprised of any particulate matter that can be transported by fluid flow and which eventually is deposited as a layer of solid particles on the bedor bottom of a body of water or other liquid. - https://en.wikipedia.org/wiki/Sediment - It is recommended to use a combination of sediment terms to describe a more specific sediment type. - envoPolar - - - - Sediment is an environmental substance comprised of any particulate matter that can be transported by fluid flow and which eventually is deposited as a layer of solid particles on the bedor bottom of a body of water or other liquid. - https://en.wikipedia.org/wiki/Sediment - - - - - - - - - - dust - - - - - - - - ENVO - ENVO:00002008 - EcoLexicon:dust - Minute solid particles with diameters less than 500 micrometers. Occurs in and may be deposited from, the atmosphere. - SWEETRealm:Dust - https://en.wikipedia.org/wiki/Dust - envoPolar - - - Minute solid particles with diameters less than 500 micrometers. Occurs in and may be deposited from, the atmosphere. - https://en.wikipedia.org/wiki/Dust - - - - - - - - - - obsolete terrestrial habitat - A habitat that is on or at the boundary of the surface of the Earth. - ENVO - ENVO:00002009 - true - - - - A habitat that is on or at the boundary of the surface of the Earth. - NM:nm - - - - - - - - - - saline water - - - - - - - - - - - - - - EcoLexicon:saltwater - SWEETRealm:SalineWater - SWEETRealm:SaltWater - https://en.wikipedia.org/wiki/Saline_water - salt water - The threshold salt concentration for classifying water as saline varies, but typically begins at about 1,000 to 3,000 parts salt per million parts water or 0.1–0.3% salt by weight. - Water which contains a significant concentration of dissolved salts. - - - - - - - - fresh water - - EcoLexicon:fresh_water - LTER:216 - SWEETRealm:FreshWater - https://en.wikipedia.org/wiki/Fresh_water - The lower bound of solute concentration required for water to be considered freshwater is variable, but is always less than that of seawater, and often cited as less than 1 gram of solutes per 1 litre of water. - Water which has a low concentration of dissolved solutes, particularly that of sodium chloride. - freshwater - envoEmpo - envoPolar - sweet water - - - - - - - - hypersaline water - - envoPolar - We make no commitment to a particular threshold; this should be described on the data/information layer according to the norms of a discipline, accepted standard, or similar reference. - The average salinity of sea water is assumed to be around 35,000 ppm, equivalent to 35 grams of salt per one liter (or kilogram) of water. - Water which contains a highly increased concentration of dissolved salts, surpassing the average salinity of seawater. - - - - - - - - igneous rock - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002013 - EcoLexicon:igneous_rock - Rock formed from molten magma. - SWEETRealm:IgneousRock - https://en.wikipedia.org/wiki/Igneous_rock - - - Rock formed from molten magma. - https://en.wikipedia.org/wiki/Rock_%28geology%29 - - - - - - - - - - plutonic rock - - An igneous rock that results from the crystallization of a magma below the surface of the Earth. - ENVO - ENVO:00002014 - SWEETRealm:IntrusiveRock - https://en.wikipedia.org/wiki/Plutonic_rock - intrusive rock - - - An igneous rock that results from the crystallization of a magma below the surface of the Earth. - https://en.wikipedia.org/wiki/Plutonic_rock - - - - - - - - - - volcanic rock - - - - - - - - - - - - - - - - - - - An igneous rock that results from magma reaching the surface either as lava or fragmental ejecta. - Due to the general suggestion that volcanic rock simply comes from a volcanic process, it's not immediately clear whether this is interchangeable with igneous rock. - ENVO - ENVO:00002015 - EcoLexicon:volcanic_rock - SWEETRealm:VolcanicRock - https://en.wikipedia.org/wiki/Volcanic_rock - - - An igneous rock that results from magma reaching the surface either as lava or fragmental ejecta. - https://en.wikipedia.org/wiki/Rock_%28geology%29 - - - - - - - - - - sedimentary rock - - A rock formed by deposition of either clastic sediments, organic matter, or chemical precipitates (evaporites), followed by compaction of the particulate matter and cementation during diagenesis. - ENVO - ENVO:00002016 - EcoLexicon:sedimentary_rock - SWEETRealm:SedimentaryRock - https://en.wikipedia.org/wiki/Sedimentary_rock - - - A rock formed by deposition of either clastic sediments, organic matter, or chemical precipitates (evaporites), followed by compaction of the particulate matter and cementation during diagenesis. - https://en.wikipedia.org/wiki/Rock_%28geology%29 - - - - - - - - - - metamorphic rock - - A rock formed by subjecting any rock type (including previously-formed metamorphic rock) to different temperature and pressure conditions than those in which the original rock was formed. These temperatures and pressures are always higher than those at the Earth's surface and must be sufficiently high so as to change the original minerals into other mineral types or else into other forms of the same minerals (e.g. by recrystallisation). - ENVO - ENVO:00002017 - EcoLexicon:metamorphic_rock - SWEETRealm:MetamorphicRock - https://en.wikipedia.org/wiki/Metamorphic_rock - - - A rock formed by subjecting any rock type (including previously-formed metamorphic rock) to different temperature and pressure conditions than those in which the original rock was formed. These temperatures and pressures are always higher than those at the Earth's surface and must be sufficiently high so as to change the original minerals into other mineral types or else into other forms of the same minerals (e.g. by recrystallisation). - https://en.wikipedia.org/wiki/Rock_%28geology%29 - - - - - - - - - - sewage - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002018 - SWEETRealm:Sewage - Wastewater that is contaminated with feces or urine, - https://en.wikipedia.org/wiki/Sewage - - - Wastewater that is contaminated with feces or urine, - https://en.wikipedia.org/wiki/Wastewater - - - - - - - - - - brackish water - - EcoLexicon:brackish_water - LTER:702 - SPIRE:Brackish_water - SWEETRealm:BrackishWater - https://en.wikipedia.org/wiki/Brackish_water - Water which has a higher salinity than fresh water but a lower salinity than marine water. - envoPolar - - - - - - - - obsolete extreme habitat - A habitat having at least one environmental quality that tends towards either the largest or smallest element of the set. The physical or geochemical extreme conditions found in an extreme habitat are often detrimental to the majority of life on Earth. - ENVO - ENVO:00002020 - true - - - - A habitat having at least one environmental quality that tends towards either the largest or smallest element of the set. The physical or geochemical extreme conditions found in an extreme habitat are often detrimental to the majority of life on Earth. - NM:nm - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete acid habitat - A habitat in which the pH is <pH3. Inhabited by acidophilic organisms. - ENVO - ENVO:00002021 - ENVO:01000315 - true - - - A habitat in which the pH is <pH3. Inhabited by acidophilic organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete alkaline habitat - A habitat in which the pH is >pH9. Inhabited by alkaliphilic organisms. - ENVO - ENVO:00002022 - ENVO:01000316 - true - - - A habitat in which the pH is >pH9. Inhabited by alkaliphilic organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete high pressure habitat - A habitat characterized by high gas or liquid pressure, inhabited by barophilic (piezophilic) organisms. - ENVO - ENVO:00002023 - ENVO:01000304 - true - - - A habitat characterized by high gas or liquid pressure, inhabited by barophilic (piezophilic) organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete haline habitat - A habitat characterized by a concentration of salt at least 2M. Inhabited by halophilic organisms. - ENVO - ENVO:00002024 - ENVO:01000310 - true - - - A habitat characterized by a concentration of salt at least 2M. Inhabited by halophilic organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete high temperature habitat - A habitat characterized by an average temperature of at least 60deg C. Inhabited by thermophilic organisms. - ENVO - ENVO:00002025 - ENVO:01000305 - true - - - A habitat characterized by an average temperature of at least 60deg C. Inhabited by thermophilic organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete cold temperature habitat - A habitat characterized by an average temperature of 15deg C or lower. Inhabited by psychrophilic (cryophilic) organisms. - ENVO - ENVO:00002026 - ENVO:01000309 - true - - - A habitat characterized by an average temperature of 15deg C or lower. Inhabited by psychrophilic (cryophilic) organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete extreme high temperature habitat - A habitat characterized by an average temperature of at least 80deg C. Inhabited by hyperthermophilic organisms. - ENVO - ENVO:00002027 - ENVO:01000318 - true - - - A habitat characterized by an average temperature of at least 80deg C. Inhabited by hyperthermophilic organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete high osmolarity habitat - A habitat characterized by a high osmolarity, typically the result of a high concentration of sugars. Inhabited by osmophilic organisms. - ENVO - ENVO:00002028 - ENVO:01000314 - true - - - A habitat characterized by a high osmolarity, typically the result of a high concentration of sugars. Inhabited by osmophilic organisms. - https://en.wikipedia.org/wiki/Extremophile#Types_of_extremophiles - - - - - - - - - - obsolete extraterrestial habitat - ENVO - ENVO:00002029 - ENVO:01000308 - true - - - - - - - - aquatic biome - - ENVO - ENVO:00002030 - LTER:41 - - - - - - - - obsolete anthropogenic habitat - A habitat that is in or on an environmental feature or material derived from human activity. - ENVO - ENVO:00002031 - true - - - A habitat that is in or on an environmental feature or material derived from human activity. - NM:nm - - - - - - - - - - obsolete organism-associated habitat - A habitat that is in or on a living thing. - ENVO - ENVO:00002032 - true - ENVO:01001000 - - - - A habitat that is in or on a living thing. - NM:nm - - - - - - - - - - carcass - - - - - - - - - - - - - - The dead body of an animal. - corpse - https://en.wikipedia.org/wiki/Carcass - - - MA:ma - The dead body of an animal. - - - - - - - - - - biofilm - - A complex aggregation of microorganisms marked by the excretion of a protective and adhesive matrix; usually adhering to a substratum. - ENVO - ENVO:00002034 - EcoLexicon:biofilm - https://en.wikipedia.org/wiki/Biofilm - - - - A complex aggregation of microorganisms marked by the excretion of a protective and adhesive matrix; usually adhering to a substratum. - https://en.wikipedia.org/wiki/Biofilm - - - - - - - - - - meteorite - - A natural object originating in outer space that survives an impact with a planetary surface without being destroyed. - ENVO - ENVO:00002035 - SWEETRealm:Meteorite - https://en.wikipedia.org/wiki/Meteorite - - - A natural object originating in outer space that survives an impact with a planetary surface without being destroyed. - https://en.wikipedia.org/wiki/Meteorite - - - - - - - - - - obsolete habitat - A spatial region having environmental qualities which may sustain an organism or a community of organisms. - ENVO - ENVO:00002036 - EcoLexicon:habitat - LTER:238 - SWEETRealm:Habitat - This class is under development and its definition will be revised and its subclasses may be made obsolete. A habitat's specificity to a species or population will differentiate it from other environment classes. - biotope - https://en.wikipedia.org/wiki/Habitat - true - ENVO:01000739 - - - A spatial region having environmental qualities which may sustain an organism or a community of organisms. - EnvO:EnvO - - - - - - - - - - obsolete freshwater habitat - A habitat that is in or on a body of water containing low concentrations of dissolved salts and other total dissolved solids (<0.5 grams dissolved salts per litre). - ENVO - ENVO:00002037 - ENVO:01000306 - true - - - - A habitat that is in or on a body of water containing low concentrations of dissolved salts and other total dissolved solids (<0.5 grams dissolved salts per litre). - NM:nm - - - - - - - - - - obsolete WWF biome - ENVO - ENVO:00000446 - ENVO:00002038 - WWF major habitat type - true - This grouping class is now obsolete. A subset for wwfBiome classes now gathers all WWF biome classes. - - - - - - - - obsolete bone - ENVO - ENVO:00002039 - The rigid organs that form part of the endoskeleton of vertebrates. - UBERON:0001474 - https://en.wikipedia.org/wiki/Bone - true - - - The rigid organs that form part of the endoskeleton of vertebrates. - https://en.wikipedia.org/wiki/Bone - - - - - - - - - - wood - - - - - - - - - ENVO - ENVO:00002040 - EcoLexicon:wood - LTER:637 - SWEETRealm:Wood - https://en.wikipedia.org/wiki/Wood - - - - - - - - ground water - - ENVO - ENVO:00002041 - EcoLexicon:groundwater - LTER:235 - SWEETRealm:Groundwater - https://en.wikipedia.org/wiki/Ground_water - - - - - - - - surface water - - ENVO - ENVO:00002042 - EcoLexicon:surface_water - SWEETRealm:SurfaceWater - https://en.wikipedia.org/wiki/Surface_water - - - - - - - - wastewater treatment plant - - ENVO - ENVO:00002043 - EcoLexicon:wastewater_treatment_plant - https://en.wikipedia.org/wiki/Wastewater_treatment_plant - - - - - - - - sludge - - ENVO - ENVO:00002044 - EcoLexicon:sludge - The residual semi-solid material left from domestic or industrial processes, or wastewater treatment processes. - https://en.wikipedia.org/wiki/Sludge - - - - The residual semi-solid material left from domestic or industrial processes, or wastewater treatment processes. - https://en.wikipedia.org/wiki/Sludge - - - - - - - - - - anaerobic sediment - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002045 - Sediment characterised by the absence of oxygen. - anoxic sediment - envoPolar - - - ORCID:0000-0002-4366-3088 - Sediment characterised by the absence of oxygen. - - - - - - - - - - activated sludge - - ENVO - ENVO:00002046 - EcoLexicon:active_sludge - https://en.wikipedia.org/wiki/Activated_sludge - - - - - - - - urine - - - - - - - - ENVO - ENVO:00002047 - Urine is a liquid excreta containing water and waste products made by the kidneys, stored in the bladder, and leaves the body through the urethra. - https://en.wikipedia.org/wiki/Urine - - - MA:ma - URL:http://www.stjude.org/stjude/hospital/med_terms.jsp - Urine is a liquid excreta containing water and waste products made by the kidneys, stored in the bladder, and leaves the body through the urethra. - - - - - - - - - - chondrite - - A stony meteorite that have not been modified due to melting or differentiation of the parent body. - ENVO - ENVO:00002048 - SWEETRealm:Chondrite - https://en.wikipedia.org/wiki/Chondrite - - - A stony meteorite that have not been modified due to melting or differentiation of the parent body. - https://en.wikipedia.org/wiki/Chondrite - - - - - - - - - - stony meteorite - - ENVO - ENVO:00002049 - https://en.wikipedia.org/wiki/Stony_meteorite - - - - - - - - achondrite - - A stony meteorite that is made of material similar to terrestrial basalts or plutonic rocks. - ENVO - ENVO:00002050 - https://en.wikipedia.org/wiki/Achondrite - - - A stony meteorite that is made of material similar to terrestrial basalts or plutonic rocks. - https://en.wikipedia.org/wiki/Achondrite - - - - - - - - - - stony-iron meteorite - - A meteorite that consists of a mixture of iron-nickel metal and silicate minerals. - ENVO - ENVO:00002051 - - - A meteorite that consists of a mixture of iron-nickel metal and silicate minerals. - https://en.wikipedia.org/wiki/Meteorite#Meteorite_types - - - - - - - - - - iron meteorite - - A meteorite that overwhelmingly of nickel-iron alloys. - ENVO - ENVO:00002052 - https://en.wikipedia.org/wiki/Iron_meteorite - - - A meteorite that overwhelmingly of nickel-iron alloys. - https://en.wikipedia.org/wiki/Iron_meteorite - - - - - - - - - - limestone - - A sedimentary rock composed largely of the mineral calcite. - ENVO - ENVO:00002053 - EcoLexicon:limestone - https://en.wikipedia.org/wiki/Limestone - - - A sedimentary rock composed largely of the mineral calcite. - https://en.wikipedia.org/wiki/Limestone - - - - - - - - - - chalk - - A soft, white, porous limestone. - ENVO - ENVO:00002054 - https://en.wikipedia.org/wiki/Chalk - - - A soft, white, porous limestone. - MA:ma - - - - - - - - - - sandstone - - A sedimentary rock composed mainly of sand-size mineral or rock grains. - ENVO - ENVO:00002055 - EcoLexicon:sandstone - https://en.wikipedia.org/wiki/Sandstone - - - A sedimentary rock composed mainly of sand-size mineral or rock grains. - https://en.wikipedia.org/wiki/Sandstone - - - - - - - - - - shale - - A fine-grained sedimentary rock whose original constituents were clays or muds. It is characterized by thin laminae breaking with an irregular curving fracture, often splintery and usually parallel to the often-indistinguishable bedding plane. - ENVO - ENVO:00002056 - https://en.wikipedia.org/wiki/Shale - - - A fine-grained sedimentary rock whose original constituents were clays or muds. It is characterized by thin laminae breaking with an irregular curving fracture, often splintery and usually parallel to the often-indistinguishable bedding plane. - https://en.wikipedia.org/wiki/Shale - - - - - - - - - - raw primary sludge - - ENVO - ENVO:00002057 - - - - - - - - secondary sludge - - ENVO - ENVO:00002058 - - - - - - - - biosolids - - A treated form of sludge, sometimes used as a fertilizer in agriculture. - ENVO - ENVO:00002059 - https://en.wikipedia.org/wiki/Biosolids - - - A treated form of sludge, sometimes used as a fertilizer in agriculture. - https://en.wikipedia.org/wiki/Sludge - - - - - - - - - - oil sludge - - A solid or gel in motor oil caused by the oil gelling or solidifying, usually at temperatures lower than 100deg C. - ENVO - ENVO:00002060 - https://en.wikipedia.org/wiki/Oil_sludge - - - A solid or gel in motor oil caused by the oil gelling or solidifying, usually at temperatures lower than 100deg C. - https://en.wikipedia.org/wiki/Oil_sludge - - - - - - - - - - oil spill - - ENVO - ENVO:00002061 - SWEETRealm:OilSpill - The result of the unintentional release of liquid petroleum hydrocarbon into the environment as a result of human activity. - https://en.wikipedia.org/wiki/Oil_spill - - - The result of the unintentional release of liquid petroleum hydrocarbon into the environment as a result of human activity. - https://en.wikipedia.org/wiki/Oil_spill - - - - - - - - - - obsolete oil - Deleted due to multiple occurence of the same term. - ENVO - ENVO:00002062 - ENVO:00002985 - MA:ma - OBSOLETE. - true - - - MA:ma - OBSOLETE. - - - - - - - - - - oil seep - - - - - - - - ENVO - ENVO:00002063 - The result of the release of natural hydrocarbons to the surface of the earth, including beneath the sea, by natural geological processes. - https://en.wikipedia.org/wiki/Oil_seep - methane seep - petroleam seep - - - MA:ma - The result of the release of natural hydrocarbons to the surface of the earth, including beneath the sea, by natural geological processes. - - - - - - - - - - gold mine drainage - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002112 - - - - - - - - deep marine sediment - - ENVO - ENVO:00002113 - EcoLexicon:marine_sediment - EcoLexicon:marine_sedimentation - SWEETRealm:MarineSediment - Sediment that accumulates in the flat or very gently sloping areas of the deep ocean basin floor. The three main types of deep marine sediment, also known as pelagic sediment, are siliceous oozes, calcareous oozes, and red clays. - https://en.wikipedia.org/wiki/Marine_sediment - pelagic sediment {alternative name} - deep marine sediments - envoPolar - - - Sediment that accumulates in the flat or very gently sloping areas of the deep ocean basin floor. The three main types of deep marine sediment, also known as pelagic sediment, are siliceous oozes, calcareous oozes, and red clays. - https://en.wikipedia.org/wiki/Marine_sediment#_note-8 - - - - - - - - - - contaminated sediment - - ENVO - ENVO:00002114 - - - - - - - - petroleum contaminated sediment - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002115 - - - - - - - - contaminated soil - - - - - - - - - - - - - - - - - - - - - - - - - "contaminant" is more of a disposition - any material entity can be a contaminant in particular circumstances. - A portion of contaminated soil is a portion of soil with elevated levels of some contaminant. - ENVO - ENVO:00002116 - - - - - - - - creosote contaminated soil - - - - - - - - ENVO - ENVO:00002117 - - - - - - - - sea sand - - ENVO - ENVO:00002118 - - - - - - - - alkaline hot spring - - - - - - - - - - - - - - - - - - - A hot spring whose water has an alkaline pH. - ENVO - ENVO:00002119 - - - A hot spring whose water has an alkaline pH. - MA:ma - - - - - - - - - - acid hot spring - - - - - - - - - - - - - - - - - - - A hot spring whose water has an acidic pH. - ENVO - ENVO:00002120 - acidic hot spring - - - A hot spring whose water has an acidic pH. - MA:ma - - - - - - - - - - alkaline salt lake - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002121 - soda lake - - - - - - - - arsenic-rich mud - - - - - - - - - - - - - - - - - - - Mud which has elevated concentrations of arsenic. - - - - - - - - bioreactor - - ENVO - ENVO:00002123 - EcoLexicon:bioreactor - https://en.wikipedia.org/wiki/Bioreactor - - - - - - - - anaerobic bioreactor - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002124 - - - - - - - - anaerobic dechlorinating bioreactor - - A device or system that supports a biologically active environment. A vessel in which is carried out a chemical process which involves organisms or biochemically active substances derived from such organisms. This process can either be aerobic or anaerobic. - ENVO - ENVO:00002125 - - - A device or system that supports a biologically active environment. A vessel in which is carried out a chemical process which involves organisms or biochemically active substances derived from such organisms. This process can either be aerobic or anaerobic. - https://en.wikipedia.org/wiki/Bioreactor - - - - - - - - - - aerobic bioreactor - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002126 - - - - - - - - stream sediment - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002127 - Revise adjacent to. Consider sampled stream sediment. Dry stream sediment. - - - - - - - - mesophilic sulfur spring - - ENVO - ENVO:00002128 - - - - - - - - anaerobic sludge - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002129 - - - - - - - - hypolimnion - - - - - - - - - - - - - - EcoLexicon:hypolimnion - The dense, bottom layer of water in a thermally-stratified lake. It is the layer that lies below the thermocline. - - - The dense, bottom layer of water in a thermally-stratified lake. It is the layer that lies below the thermocline. - https://en.wikipedia.org/wiki/Hypolimnion - - - - - - - - - - epilimnion - - - - - - - - - - - - - - EcoLexicon:epilimnion_ - The top-most layer in a thermally stratified lake, occurring above the deeper hypolimnion. It is warmer and typically has a higher pH and dissolved oxygen concentration than the hypolimnion. - https://en.wikipedia.org/wiki/Epilimnion - - - The top-most layer in a thermally stratified lake, occurring above the deeper hypolimnion. It is warmer and typically has a higher pH and dissolved oxygen concentration than the hypolimnion. - https://en.wikipedia.org/wiki/Epilimnion - - - - - - - - - - metalimnion - - - - - - - - ENVO - ENVO:00002132 - Especially used in connection with lakes. - The layer within a body of water or air where the temperature changes rapidly with depth. - https://en.wikipedia.org/wiki/Metalimnion - - - The layer within a body of water or air where the temperature changes rapidly with depth. - https://en.wikipedia.org/wiki/Metalimnion - - - - - - - - - - anaerobic mud - - - - - - - - - - - - - - - - - - - anoxic mud - Mud which has no or neglible concentrations of dissolved oxygen. - - - - - - - - anaerobic stream sediment - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002134 - - - - - - - - treated wood - - ENVO - ENVO:00002135 - https://en.wikipedia.org/wiki/Treated_wood - - - - - - - - arsenate treated wood - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002136 - - - - - - - - brackish estuary - - ENVO - ENVO:00002137 - - - - - - - - beach sand - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002138 - - - - - - - - pebble - - - - - - - - A clastic rock with a particle size of 4 to 64 millimeters based on the Krumbein phi scale of sedimentology. - ENVO - ENVO:00002139 - EcoLexicon:pebble - SWEETRealm:Pebble - https://en.wikipedia.org/wiki/Pebble - - - A clastic rock with a particle size of 4 to 64 millimeters based on the Krumbein phi scale of sedimentology. - https://en.wikipedia.org/wiki/Pebble - - - - - - - - - - cobble - - A rock or rock fragment with a particle size between 64 and 256 mm. - EcoLexicon:cobble - SWEETRealm:Cobble - - - A rock or rock fragment with a particle size between 64 and 256 mm. - https://en.wikipedia.org/wiki/Cobble - - - - - - - - - - leachate - - ENVO - ENVO:00002141 - The liquid produced when water percolates through any permeable material. It can contain either dissolved or suspended material, or usually both. - https://en.wikipedia.org/wiki/Leachate - - - The liquid produced when water percolates through any permeable material. It can contain either dissolved or suspended material, or usually both. - https://en.wikipedia.org/wiki/Leachate - - - - - - - - - - borax leachate - - ENVO - ENVO:00002142 - - - - - - - - calcite hot spring - - ENVO - ENVO:00002143 - - - - - - - - cave wall - - - - - - - - ENVO - ENVO:00002144 - - - - - - - - chromate contaminated soil - - - - - - - - ENVO - ENVO:00002145 - - - - - - - - xylene contaminated soil - - - - - - - - ENVO - ENVO:00002146 - - - - - - - - coal mine lake sediment - - Coal mine lake sediment is lake sediment which covers the bottom of a coal mine lake. - - - - - - - - coarse beach sand - - ENVO - ENVO:00002148 - - - - - - - - sea water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002149 - EcoLexicon:sea_water - LTER:701 - SWEETRealm:SeaWater - This definition refers to water that is actually in a sea or ocean. This water may have a wide range of salinity levels. - https://en.wikipedia.org/wiki/Sea_water - seawater - When we have more classes representing the various processes which make seawater seawater, we can further axiomatise this class. - ocean water - Water which has physicochemical properties that have been determined by the processes occuring in a sea or ocean. - - - - - - - - coastal sea water - - - - - - - - - - - - - - - - - - - Coastal sea water is sea water that is adjacent to a coast. - ENVO - ENVO:00002150 - The limits of what qualifies as "adjacent to" vary greatly. This should be defined on a data level and is left intentionally fuzzy here. The label is "coastal sea water" rather than "coastal water" as some large lakes are often said to have coasts. - coastal ocean water - coastal oceanic water - coastal seawater - coastal water - envoPolar - - - - - - - - obsolete ocean water - ENVO - ENVO:00002149 - ENVO:00002151 - https://en.wikipedia.org/wiki/Ocean_water - true - - - - - - - - biofilter - - ENVO - ENVO:00002152 - https://en.wikipedia.org/wiki/Biofilter - - - - - - - - compost biofilter - - ENVO - ENVO:00002153 - - - - - - - - radioactive sediment - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002154 - - - - - - - - high-level radioactive sediment - - ENVO - ENVO:00002155 - - - - - - - - Superfund site - - A highly contaminated site designated by the United States of America's Comprehensive Environmental Response, Compensation, and Liability Act. - ENVO - ENVO:00002156 - https://en.wikipedia.org/wiki/Superfund_Site - - - A highly contaminated site designated by the United States of America's Comprehensive Environmental Response, Compensation, and Liability Act. - https://en.wikipedia.org/wiki/Superfund_site - - - - - - - - - - stromatolite mat - - ENVO - ENVO:00002157 - - - - - - - - ditch water - - - - - - - - ENVO - ENVO:00002158 - - - - - - - - drilling bore water - - ENVO - ENVO:00002159 - - - - - - - - estuarine mud - - - - - - - - - - - - - - - - - - - Mud which is part of an estuary. - - - - - - - - obsolete fermented agave juice - ENVO - ENVO:00002161 - FOODON:00001003 - true - - - - - - - - obsolete fermenting sugar cane juice - ENVO - ENVO:00002162 - FOODON:00001004 - true - - - - - - - - obsolete fermenting Elaeis Palm sap - ENVO - ENVO:00002163 - FOODON:00001005 - true - - - - - - - - fossil - - ENVO - SWEETRealm:Fossil - The mineralized or otherwise preserved remains or traces (such as footprints) of animals, plants, and other organisms. - https://en.wikipedia.org/wiki/Fossil - - - - The mineralized or otherwise preserved remains or traces (such as footprints) of animals, plants, and other organisms. - https://en.wikipedia.org/wiki/Fossil - - - - - - - - - - obsolete meat food product - ENVO - ENVO:00002165 - FOODON:00001006 - https://en.wikipedia.org/wiki/Meat - true - - - - - - - - obsolete sausage - ENVO - ENVO:00002166 - FOODON:00001007 - https://en.wikipedia.org/wiki/Sausage - true - - - - - - - - platinum mine - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002167 - - - - - - - - gold mine - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002168 - https://en.wikipedia.org/wiki/Gold_mine - - - - - - - - coal mine - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002169 - https://en.wikipedia.org/wiki/Coal_mine - - - - - - - - compost - - ENVO - ENVO:00002170 - The aerobically decomposed remnants of organic materials. - https://en.wikipedia.org/wiki/Compost - - - The aerobically decomposed remnants of organic materials. - https://en.wikipedia.org/wiki/Compost - - - - - - - - - - hay compost - - ENVO - ENVO:00002171 - - - - - - - - obsolete liver paste - ENVO - ENVO:00002172 - FOODON:00001008 - true - - - - - - - - hospital - - ENVO - ENVO:00002173 - https://en.wikipedia.org/wiki/Hospital - A hospital is a building in which health care services are provided by specialized staff and equipment. - - - A hospital is a building in which health care services are provided by specialized staff and equipment. - https://en.wikipedia.org/wiki/Hospital - - - - - - - - - - obsolete hot dog - ENVO - ENVO:00002174 - FOODON:00001009 - https://en.wikipedia.org/wiki/Hot_dog - true - - - - - - - - obsolete processed meat product - ENVO - ENVO:00002175 - FOODON:00001010 - prepared meat product - true - - - - - - - - contaminated sludge - - ENVO - ENVO:00002176 - - - - - - - - 1,4-dioxane contaminated sludge - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002177 - - - - - - - - iron-reducing zone of petroleum contaminated sediment - - - - - - - - A zone within a portion of petroleum contaminated sediment within which iron-reducing processes occur. - ENVO - ENVO:00002178 - ORCID:0000-0002-4366-3088 - - - - - - - - intertidal sediment - - ENVO - ENVO:00002179 - - - - - - - - naphthalene contaminated sediment - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002180 - - - - - - - - neutral hot spring - - A hot spring whose water has a neutral pH. - ENVO - ENVO:00002181 - - - A hot spring whose water has a neutral pH. - MA:ma - - - - - - - - - - nitrobenzene contaminated sediment - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002182 - - - - - - - - oil tank - - ENVO - ENVO:00002183 - A manufactured container within which oil or other petrochemical products are stored and which these products are usually transported to end users or further storage facilities. - Consider using http://purl.obolibrary.org/obo/OBI_0000967 as a super-class - - - https://en.wikipedia.org/wiki/Oil_terminal - A manufactured container within which oil or other petrochemical products are stored and which these products are usually transported to end users or further storage facilities. - - - - - - - - - - underground physiographic feature - - ENVO - ENVO:00002184 - - - - - - - - oil reservoir - - ENVO - ENVO:00002185 - https://en.wikipedia.org/wiki/Oil_reservoir - - - - - - - - contaminated water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002186 - EcoLexicon:water_pollution - https://en.wikipedia.org/wiki/Contaminated_water - polluted water - - - - - - - - obsolete milk formula - ENVO - ENVO:00002187 - FOODON:00001011 - https://en.wikipedia.org/wiki/Milk_formula - true - - - - - - - - obsolete powdered milk formula - ENVO - ENVO:00002188 - FOODON:00001012 - true - - - - - - - - obsolete cheese product - ENVO - ENVO:00002189 - FOODON:00001013 - https://en.wikipedia.org/wiki/Cheese - true - - - - - - - - obsolete yogurt - ENVO - ENVO:00002190 - FOODON:00001014 - https://en.wikipedia.org/wiki/Yogurt - true - yoghourt - yoghurt - yougert - - - - - - - - animal litter - - Straw or other material strewn in an animal's enclosure (e.g. a stable) for it to sleep on and to absorb its faeces and urine. - - - Straw or other material strewn in an animal's enclosure (e.g. a stable) for it to sleep on and to absorb its faeces and urine. - https://en.wikipedia.org/wiki/Litter_%28disambiguation%29 - - - - - - - - - - poultry litter - - ENVO - ENVO:00002192 - https://en.wikipedia.org/wiki/Poultry_litter - - - - - - - - pulp-bleaching waste water - - ENVO - ENVO:00002193 - - - - - - - - oil field production water - - ENVO - ENVO:00002194 - - - - - - - - pyritic acid mine drainage - - ENVO - ENVO:00002195 - - - - - - - - aquarium - - ENVO - ENVO:00002196 - https://en.wikipedia.org/wiki/Aquarium - An aquarium is a vivarium which simulates the submerged portions of an aquatic environment - - - https://en.wikipedia.org/wiki/Vivarium - An aquarium is a vivarium which simulates the submerged portions of an aquatic environment - - - - - - - - - - saline water aquarium - - ENVO - ENVO:00002197 - salt water aquarium - A saline water aquarium is an aquarium which contains saline water as its primary ecological medium. - - - - - - - - fresh water aquarium - - ENVO - ENVO:00002198 - https://en.wikipedia.org/wiki/Fresh_water_aquarium - A fresh water aquarium is an aquarium which contains fresh water as its primary ecological medium. - - - - - - - - sandy beach - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002199 - - - - - - - - sea ice - - - - - - - - ENVO - ENVO:00002200 - SWEETRealm:SeaIce - https://en.wikipedia.org/wiki/Sea_ice - envoPolar - A frozen portion of sea water. - - - - - - - - cis-dichloroethane contaminated sediment - - ENVO - ENVO:00002201 - - - - - - - - organically contaminated sediment - - ENVO - ENVO:00002202 - - - - - - - - inorganically contaminated sediment - - ENVO - ENVO:00002203 - - - - - - - - anthropogenic contamination feature - - ENVO - ENVO:00002204 - - - - - - - - unexploded-ordnance dump - - ENVO - ENVO:00002205 - - - - - - - - coal mine waste material - - - - - - - - - - - - - - ENVO - ENVO:00002206 - coal refuse - coal mine waste - - - - - - - - self-heating coal mine waste material - - ENVO - ENVO:00002207 - self-heating coal mine waste - - - - - - - - saline lake sediment - - - - - - - - Saline lake sediment is sediment which covers the bottom of a saline lake. - soda lake sediment - - - - - - - - sulfide-oxidizing bioreactor - - ENVO - ENVO:00002210 - - - - - - - - thermophilic anaerobic methanogenic reactor - - - - - - - - ENVO - ENVO:00002211 - - - - - - - - thermophilic granular sludge - - ENVO - ENVO:00002212 - - - - - - - - anaerobic sludge blanket reactor - - ENVO - ENVO:00002213 - - - - - - - - power plant - - ENVO - ENVO:00002214 - SWEETRealm:PowerPlant - https://en.wikipedia.org/wiki/Power_plant - generating station - power station - A power plant is a building which contains one or more generators which convert mechanical energy into electrical energy through the relative motion between a magnetic field and a conductor. The energy source harnessed to turn the generator varies widely. - powerhouse - generating plant - - - https://en.wikipedia.org/wiki/Power_station - A power plant is a building which contains one or more generators which convert mechanical energy into electrical energy through the relative motion between a magnetic field and a conductor. The energy source harnessed to turn the generator varies widely. - - - - - - - - - - geothermal power plant - - ENVO - ENVO:00002215 - SWEETRealm:GeothermalPowerPlant - https://en.wikipedia.org/wiki/Geothermal_power_plant - A geothermal power plant is a power plant which uses heat generated by the decay of radioactive isotopes in the Earth's mantle and crust as well as primordial heat left over from the formation of the Earth to drive its generators. - - - https://en.wikipedia.org/wiki/Geothermal_energy - A geothermal power plant is a power plant which uses heat generated by the decay of radioactive isotopes in the Earth's mantle and crust as well as primordial heat left over from the formation of the Earth to drive its generators. - https://en.wikipedia.org/wiki/Earth's_internal_heat_budget - - - - - - - - - - obsolete plant food product - ENVO - ENVO:00002216 - FOODON:00001015 - https://en.wikipedia.org/wiki/Vegetable - true - Currently, this is limited to the Viridiplantae. This may be changed. - - - - - - - - obsolete cabbage product - ENVO - ENVO:00002217 - FOODON:00001016 - https://en.wikipedia.org/wiki/Cabbage - true - - - - - - - - obsolete commercial yogurt - ENVO - ENVO:00002218 - FOODON:00001017 - true - - - - - - - - obsolete cheese starter culture - ENVO - ENVO:00002219 - FOODON:00001018 - true - - - - - - - - obsolete cheese spoilage - ENVO - ENVO:00002220 - true - - - - - - - - shop - - ENVO - ENVO:00002221 - https://en.wikipedia.org/wiki/Shopping - A building in which a business presents a selection of goods and offers to trade or sell them to customers for money or other goods. - retail store - retailer - retail shop - - - https://en.wikipedia.org/wiki/Shopping - A building in which a business presents a selection of goods and offers to trade or sell them to customers for money or other goods. - - - - - - - - - - food shop - - ENVO - ENVO:00002222 - Whether food is the primary product offered by the business or simply one of the products it offers is not specified in this class. - A shop in which a business offers food products for sale or trade. - - - - - - - - oligotrophic water - - ENVO - ENVO:00002223 - Water with a very low nutrient level. - - - MA:ma - Water with a very low nutrient level. - - - - - - - - - - eutrophic water - - - - - - - - - - - - - - - - - - Water with a high nutrient level. - - - MA:ma - Water with a high nutrient level. - - - - - - - - - - mesotrophic water - - ENVO - ENVO:00002225 - Water with a nutrient level intermediate between eutrophic and oligotrophic. - - - MA:ma - Water with a nutrient level intermediate between eutrophic and oligotrophic. - - - - - - - - - - borehole - - - - - - - - - SWEETRealm:Borehole - https://en.wikipedia.org/wiki/Borehole - - - - - - - - obsolete saline water habitat - A habitat that is in or on a body of water containing medium to high concentrations of dissolved salts and other total dissolved solids (>=0.5 grams dissolved salts per litre). - ENVO - ENVO:00002227 - ENVO:01000307 - salt water habitat - true - - - A habitat that is in or on a body of water containing medium to high concentrations of dissolved salts and other total dissolved solids (>=0.5 grams dissolved salts per litre). - NM:nm - - - - - - - - - - pond water - - - - - - - - ENVO - ENVO:00002228 - - - - - - - - arenosol - - Arenosols are sandy soils, including both soils developed in residual sands after in situ weathering of usually quartz-rich sediments or rock, and soils developed in recently deposited sands such as dunes in deserts and beach lands. - ENVO - ENVO:00002229 - https://en.wikipedia.org/wiki/Arenosol - psamment - sandy soil - - - Arenosols are sandy soils, including both soils developed in residual sands after in situ weathering of usually quartz-rich sediments or rock, and soils developed in recently deposited sands such as dunes in deserts and beach lands. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - ORCID:0000-0001-8743-9574 - sandy soil - - - - - - - - - - anthrosol - - Anthrosols comprise soils that have been modified profoundly through human activities, such as addition of organic materials or household wastes, irrigation and cultivation. - ENVO - ENVO:00002230 - - - Anthrosols comprise soils that have been modified profoundly through human activities, such as addition of organic materials or household wastes, irrigation and cultivation. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - alisol - - Alisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Alisols have a low base saturation at certain depths and high-activity clays throughout the argic horizon. They lack the albeluvic tonguing as in Albeluvisols. They occur predominantly in humid tropical, humid subtropical and warm temperate regions. - ENVO - ENVO:00002231 - - - Alisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Alisols have a low base saturation at certain depths and high-activity clays throughout the argic horizon. They lack the albeluvic tonguing as in Albeluvisols. They occur predominantly in humid tropical, humid subtropical and warm temperate regions. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - andosol - - Andosols are soils that develop in volcanic ejecta or glasses under almost any climate (except under hyperarid climate conditions). However, Andosols may also develop in other silicate-rich materials under acid weathering in humid and perhumid climates. - ENVO - ENVO:00002232 - - - Andosols are soils that develop in volcanic ejecta or glasses under almost any climate (except under hyperarid climate conditions). However, Andosols may also develop in other silicate-rich materials under acid weathering in humid and perhumid climates. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - albeluvisol - - Albeluvisols are soils that have, beginning within 1 m of the soil surface, a clay illuviation horizon with an irregular or broken upper boundary resulting in tonguing of bleached soil material into the illuviation horizon. - ENVO - ENVO:00002233 - - - Albeluvisols are soils that have, beginning within 1 m of the soil surface, a clay illuviation horizon with an irregular or broken upper boundary resulting in tonguing of bleached soil material into the illuviation horizon. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - acrisol - - Acrisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Acrisols have in certain depths a low base saturation and low-activity clays. - ENVO - ENVO:00002234 - https://en.wikipedia.org/wiki/Acrisol - - - Acrisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Acrisols have in certain depths a low base saturation and low-activity clays. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - cambisol - - Cambisols combine soils with at least an incipient subsurface soil formation. Transformation of parent material is evident from structure formation and mostly brownish discoloration, increasing clay percentage, and/or carbonate removal. - ENVO - ENVO:00002235 - - - Cambisols combine soils with at least an incipient subsurface soil formation. Transformation of parent material is evident from structure formation and mostly brownish discoloration, increasing clay percentage, and/or carbonate removal. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - cryosol - - - - - - - - Cryosols comprise mineral soils formed in a permafrost environment. Where water is present, it occurs primarily in the form of ice. Cryogenic processes are the dominant soil-forming processes. - ENVO - ENVO:00002236 - gelisol - https://en.wikipedia.org/wiki/Cryosol - envoPolar - - - Cryosols comprise mineral soils formed in a permafrost environment. Where water is present, it occurs primarily in the form of ice. Cryogenic processes are the dominant soil-forming processes. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - chernozem - - Chernozems are soils with a thick black surface layer that is rich in organic matter. - ENVO - ENVO:00002237 - black earth - boroll - https://en.wikipedia.org/wiki/Chernozem - - - Chernozems are soils with a thick black surface layer that is rich in organic matter. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - durisol - - Durisols are associated mainly with old surfaces in arid and semi-arid environments and accommodate very shallow to moderately deep, moderately well- to well-drained soils that contain cemented secondary silica (SiO2) within 100 cm of the soil surface. - ENVO - ENVO:00002238 - https://en.wikipedia.org/wiki/Durisol - - - Durisols are associated mainly with old surfaces in arid and semi-arid environments and accommodate very shallow to moderately deep, moderately well- to well-drained soils that contain cemented secondary silica (SiO2) within 100 cm of the soil surface. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - calcisol - - Calcisols are soils in which there is substantial secondary accumulation of lime. Calcisols are common in highly calcareous parent materials and widespread in arid and semi-arid environments. - ENVO - ENVO:00002239 - - - Calcisols are soils in which there is substantial secondary accumulation of lime. Calcisols are common in highly calcareous parent materials and widespread in arid and semi-arid environments. - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - - - - - - - - - - kastanozem - - ENVO - ENVO:00002240 - Kastanozems are dry grassland soils, among them the zonal soils of the short-grass steppe belt, south of the Eurasian tall-grass steppe belt with Chernozems. Kastanozems have a similar profile to that of Chernozems but the humus-rich surface horizon is thinner and not as dark as that of the Chernozems and they show more prominent accumulation of secondary carbonates. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Kastanozems are dry grassland soils, among them the zonal soils of the short-grass steppe belt, south of the Eurasian tall-grass steppe belt with Chernozems. Kastanozems have a similar profile to that of Chernozems but the humus-rich surface horizon is thinner and not as dark as that of the Chernozems and they show more prominent accumulation of secondary carbonates. - - - - - - - - - - leptosol - - Leptosols are very shallow soils over continuous rock and soils that are extremely gravelly and/or stony. Leptosols are azonal soils and particularly common in mountainous regions. - gravelly soil - stony soil - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Leptosols are very shallow soils over continuous rock and soils that are extremely gravelly and/or stony. Leptosols are azonal soils and particularly common in mountainous regions. - - - - - - - - - - lixisol - - ENVO - ENVO:00002242 - Lixisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Lixisols have a high base saturation and low-activity clays at certain depths. - https://en.wikipedia.org/wiki/Lixisol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Lixisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Lixisols have a high base saturation and low-activity clays at certain depths. - - - - - - - - - - histosol - - ENVO - ENVO:00002243 - Histosols comprise soils formed in organic material. These vary from soils developed in predominantly moss peat in boreal, arctic and subarctic regions, via moss peat, reeds/ sedge peat (fen) and forest peat in temperate regions to mangrove peat and swamp forest peat in the humid tropics. Histosols are found at all altitudes, but the vast majority occurs in lowlands. - https://en.wikipedia.org/wiki/Histosol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Histosols comprise soils formed in organic material. These vary from soils developed in predominantly moss peat in boreal, arctic and subarctic regions, via moss peat, reeds/ sedge peat (fen) and forest peat in temperate regions to mangrove peat and swamp forest peat in the humid tropics. Histosols are found at all altitudes, but the vast majority occurs in lowlands. - - - - - - - - - - gleysol - - ENVO - ENVO:00002244 - Gleysols are wetland soils that, unless drained, are saturated with groundwater for long enough periods to develop a characteristic gleyic colour pattern. This pattern is essentially made up of reddish, brownish or yellowish colours at ped surfaces and/or in the upper soil layer or layers, in combination with greyish/bluish colours inside the peds and/or deeper in the soil. - gley soil - https://en.wikipedia.org/wiki/Gleysol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Gleysols are wetland soils that, unless drained, are saturated with groundwater for long enough periods to develop a characteristic gleyic colour pattern. This pattern is essentially made up of reddish, brownish or yellowish colours at ped surfaces and/or in the upper soil layer or layers, in combination with greyish/bluish colours inside the peds and/or deeper in the soil. - - - - - - - - - - gypsisol - - ENVO - ENVO:00002245 - Gypsisols are soils with substantial secondary accumulation of gypsum (calcium sulfate). These soils are found in the driest parts of the arid climate zone. - https://en.wikipedia.org/wiki/Gypsisol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Gypsisols are soils with substantial secondary accumulation of gypsum (calcium sulfate). These soils are found in the driest parts of the arid climate zone. - - - - - - - - - - ferralsol - - ENVO - ENVO:00002246 - Ferralsols represent the classical, deeply weathered, red or yellow soils of the humid tropics. These soils have diffuse horizon boundaries, a clay assemblage dominated by low-activity clays (mainly kaolinite) and a high content of sesquioxides. - https://en.wikipedia.org/wiki/Ferralsol - oxisol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Ferralsols represent the classical, deeply weathered, red or yellow soils of the humid tropics. These soils have diffuse horizon boundaries, a clay assemblage dominated by low-activity clays (mainly kaolinite) and a high content of sesquioxides. - - - - - - - - - - nitisol - - ENVO - ENVO:00002247 - Nitisols are deep, well-drained, red, tropical soils with diffuse horizon boundaries and a subsurface horizon with more than 30 percent clay and moderate to strong angular blocky structure elements that easily fall apart into characteristic shiny, polyhedric (nutty) elements. Weathering is relatively advanced but Nitisols are far more productive than most other red, tropical soils. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Nitisols are deep, well-drained, red, tropical soils with diffuse horizon boundaries and a subsurface horizon with more than 30 percent clay and moderate to strong angular blocky structure elements that easily fall apart into characteristic shiny, polyhedric (nutty) elements. Weathering is relatively advanced but Nitisols are far more productive than most other red, tropical soils. - - - - - - - - - - luvisol - - ENVO - ENVO:00002248 - Luvisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Luvisols have high-activity clays throughout the argic horizon and a high base saturation at certain depths. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Luvisols are soils that have a higher clay content in the subsoil than in the topsoil as a result of pedogenetic processes (especially clay migration) leading to an argic subsoil horizon. Luvisols have high-activity clays throughout the argic horizon and a high base saturation at certain depths. - - - - - - - - - - phaeozem - - ENVO - ENVO:00002249 - Phaeozems accommodate soils of relatively wet grassland and forest regions in moderately continental climates. Phaeozems are much like Chernozems and Kastanozems but are leached more intensively. Consequently, they have dark, humus rich surface horizons that, in comparison with Chernozems and Kastanozems, are less rich in bases. Phaeozems may or may not have secondary carbonates but have a high base saturation in the upper metre of the soil. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Phaeozems accommodate soils of relatively wet grassland and forest regions in moderately continental climates. Phaeozems are much like Chernozems and Kastanozems but are leached more intensively. Consequently, they have dark, humus rich surface horizons that, in comparison with Chernozems and Kastanozems, are less rich in bases. Phaeozems may or may not have secondary carbonates but have a high base saturation in the upper metre of the soil. - - - - - - - - - - plinthosol - - ENVO - ENVO:00002250 - Plinthosols are soils with plinthite, petroplinthite or pisoliths. Plinthite is an Fe-rich (in some cases also Mn-rich), humus-poor mixture of kaolinitic clay (and other products of strong weathering such as gibbsite) with quartz and other constituents that changes irreversibly to a layer with hard nodules, a hardpan or irregular aggregates on exposure to repeated wetting and drying. Petroplinthite is a continuous, fractured or broken sheet of connected, strongly cemented to indurated nodules or mottles. Pisoliths are discrete strongly cemented to indurated nodules. Both petroplinthite and pisoliths develop from plinthite by hardening. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Plinthosols are soils with plinthite, petroplinthite or pisoliths. Plinthite is an Fe-rich (in some cases also Mn-rich), humus-poor mixture of kaolinitic clay (and other products of strong weathering such as gibbsite) with quartz and other constituents that changes irreversibly to a layer with hard nodules, a hardpan or irregular aggregates on exposure to repeated wetting and drying. Petroplinthite is a continuous, fractured or broken sheet of connected, strongly cemented to indurated nodules or mottles. Pisoliths are discrete strongly cemented to indurated nodules. Both petroplinthite and pisoliths develop from plinthite by hardening. - - - - - - - - - - planosol - - ENVO - ENVO:00002251 - Planosols are soils with a light-coloured, surface horizon that shows signs of periodic water stagnation and abruptly overlies a dense, slowly permeable subsoil with significantly more clay than the surface horizon. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Planosols are soils with a light-coloured, surface horizon that shows signs of periodic water stagnation and abruptly overlies a dense, slowly permeable subsoil with significantly more clay than the surface horizon. - - - - - - - - - - solonchak - - ENVO - ENVO:00002252 - Solonchaks are soils that have a high concentration of soluble salts at some time in the year. Solonchaks are largely confined to the arid and semi-arid climate zones and to coastal regions in all climates. - https://en.wikipedia.org/wiki/Solonchak - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Solonchaks are soils that have a high concentration of soluble salts at some time in the year. Solonchaks are largely confined to the arid and semi-arid climate zones and to coastal regions in all climates. - - - - - - - - - - umbrisol - - ENVO - ENVO:00002253 - Umbrisols are soils in which organic matter has accumulated within the mineral surface soil (in most cases with low base saturation) to the extent that it significantly affects the behaviour and utilization of the soil. - https://en.wikipedia.org/wiki/Umbrisol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Umbrisols are soils in which organic matter has accumulated within the mineral surface soil (in most cases with low base saturation) to the extent that it significantly affects the behaviour and utilization of the soil. - - - - - - - - - - vertisol - - A soil in which there is a high content of expansive clay known as montmorillonite that forms deep cracks in drier seasons or years. Alternate shrinking and swelling causes self-mulching, where the soil material consistently mixes itself, causing vertisols to have an extremely deep A horizon and no B horizon. - ENVO - ENVO:00002254 - https://en.wikipedia.org/wiki/Vertisol - - - A soil in which there is a high content of expansive clay known as montmorillonite that forms deep cracks in drier seasons or years. Alternate shrinking and swelling causes self-mulching, where the soil material consistently mixes itself, causing vertisols to have an extremely deep A horizon and no B horizon. - https://en.wikipedia.org/wiki/Vertisol - - - - - - - - - - solonetz - - ENVO - ENVO:00002255 - Solonetz are soils with a dense, strongly structured, clayey subsurface horizon that has a high proportion of adsorbed Na and/or Mg ions. Solonetz that contain free soda (Na2CO3) are strongly alkaline (field pH > 8.5). - https://en.wikipedia.org/wiki/Solonetz - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Solonetz are soils with a dense, strongly structured, clayey subsurface horizon that has a high proportion of adsorbed Na and/or Mg ions. Solonetz that contain free soda (Na2CO3) are strongly alkaline (field pH > 8.5). - - - - - - - - - - regosol - - ENVO - ENVO:00002256 - Regosols form a taxonomic remnant group containing all soils that could not be accommodated in any of the other RSGs. In practice, Regosols are very weakly developed mineral soils in unconsolidated materials that do not have a mollic or umbric horizon, are not very shallow or very rich in gravels (Leptosols), sandy (Arenosols) or with fluvic materials (Fluvisols). Regosols are extensive in eroding lands, particularly in arid and semi-arid areas and in mountainous terrain. - https://en.wikipedia.org/wiki/Regosol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Regosols form a taxonomic remnant group containing all soils that could not be accommodated in any of the other RSGs. In practice, Regosols are very weakly developed mineral soils in unconsolidated materials that do not have a mollic or umbric horizon, are not very shallow or very rich in gravels (Leptosols), sandy (Arenosols) or with fluvic materials (Fluvisols). Regosols are extensive in eroding lands, particularly in arid and semi-arid areas and in mountainous terrain. - - - - - - - - - - podzol - - ENVO - ENVO:00002257 - Podzols are soils with a typically ash-grey upper subsurface horizon, bleached by loss of organic matter and iron oxides, on top of a dark accumulation horizon with brown, reddish or black illuviated humus and/or reddish Fe compounds. Podzols occur in humid areas in the boreal and temperate zones and locally also in the tropics. - https://en.wikipedia.org/wiki/Podzol - podosolic soil - podsol - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Podzols are soils with a typically ash-grey upper subsurface horizon, bleached by loss of organic matter and iron oxides, on top of a dark accumulation horizon with brown, reddish or black illuviated humus and/or reddish Fe compounds. Podzols occur in humid areas in the boreal and temperate zones and locally also in the tropics. - - - - - - - - - - loam - - A soil composed of sand, silt, and clay in relatively even concentration (about 40-40-20% concentration respectively). - ENVO - ENVO:00002258 - EcoLexicon:loam - SWEETRealm:Loam - https://en.wikipedia.org/wiki/Loam - - - A soil composed of sand, silt, and clay in relatively even concentration (about 40-40-20% concentration respectively). - https://en.wikipedia.org/wiki/Loam - - - - - - - - - - agricultural soil - - ENVO - ENVO:00002259 - - - - - - - - dune soil - - - - - - - - ENVO - ENVO:00002260 - - - - - - - - forest soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002261 - - - - - - - - clay soil - - - - - - - - ENVO - ENVO:00002262 - - - - - - - - garden soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002263 - - - - - - - - waste material - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00002264 - EcoLexicon:waste - SWEETRealm:Waste - This seems more like a role than a material. Anything can be waste. Thus, a "waste" role or disposition will be created and this class can then be populated by inference: any environmental material which has [role,disposition] waste will be considered a waste material. - https://en.wikipedia.org/wiki/Waste - A material which is not the desired output of a process and which is typically the input of a process which removes it from its producer (e.g. a disposal process). - - - - - - - - obsolete agricultural waste - ENVO - ENVO:00002265 - ENVO:01000371 - Wastewater produced in the course of agricultural activities - https://en.wikipedia.org/wiki/Agricultural_waste - true - - - Wastewater produced in the course of agricultural activities - https://en.wikipedia.org/wiki/Agricultural_wastewater_treatment - - - - - - - - - - chicken breeding waste material - - - - - - - - ENVO - ENVO:00002266 - chicken yard waste - chicken breeding waste - - - - - - - - industrial waste material - - - - - - - - ENVO - ENVO:00002267 - Industrial wastes are liquid, solid and gaseous wastes originating from the manufacture of specific products. - industrial waste - This will become a defined class, with subclasses added through inference based on material having a 'waste role' and being associated with industrial entities. - - - Industrial wastes are liquid, solid and gaseous wastes originating from the manufacture of specific products. - Glossary of Environment Statistics, Studies in Methods, Series F, No. 67, United Nations, New York, 1997. - http://stats.oecd.org/glossary/detail.asp?ID=1340 - - - - - - - - - - sphagnum bog - - A peatland dominated by species of the Bryophyte Sphagnum. - ENVO - ENVO:00002268 - - - A peatland dominated by species of the Bryophyte Sphagnum. - MA:ma - - - - - - - - - - thermocline - - A layer within a fluid where the temperature changes rapidly with depth. - ENVO - ENVO:00002269 - EcoLexicon:thermocline - SWEETRealm:Thermocline - https://en.wikipedia.org/wiki/Thermocline - - - A layer within a fluid where the temperature changes rapidly with depth. - https://en.wikipedia.org/wiki/Thermocline - - - - - - - - - - chemocline - - A layer within a fluid where the chemical composition changes rapidly with depth. - ENVO - ENVO:00002270 - https://en.wikipedia.org/wiki/Chemocline - envoPolar - - - A layer within a fluid where the chemical composition changes rapidly with depth. - MA:ma - - - - - - - - - - nuclear power plant - - ENVO - ENVO:00002271 - https://en.wikipedia.org/wiki/Nuclear_power_plant - A nuclear power plant is a power plant which uses heat generated by a radioactive decay in a nuclear reactor to convert water into steam in order to drive turbines in electrical generators through pressure. - - - A nuclear power plant is a power plant which uses heat generated by a radioactive decay in a nuclear reactor to convert water into steam in order to drive turbines in electrical generators through pressure. - https://en.wikipedia.org/wiki/Nuclear_power_plant - - - - - - - - - - waste treatment plant - - WWTP - - - - - - - - fluvisol - - ENVO - ENVO:00002273 - Fluvisols accommodate genetically young, azonal soils in alluvial deposits. - https://en.wikipedia.org/wiki/Fluvisols - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Fluvisols accommodate genetically young, azonal soils in alluvial deposits. - - - - - - - - - - stagnosol - - ENVO - ENVO:00002274 - Stagnosols are soils with a perched water table showing redoximorphic features caused by surface water. Stagnosols are periodically wet and mottled in the topsoil and subsoil, with or without concretions and/or bleaching. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Stagnosols are soils with a perched water table showing redoximorphic features caused by surface water. Stagnosols are periodically wet and mottled in the topsoil and subsoil, with or without concretions and/or bleaching. - - - - - - - - - - technosol - - - - - - - - ENVO - ENVO:00002275 - Technosols are soils whose properties and pedogenesis are dominated by their technical origin. They contain a significant amount of artefacts (something in the soil recognizably made or extracted from the earth by humans), or are sealed by technic hard rock (material created by humans, having properties unlike natural rock). They include soils from wastes (landfills, sludge, cinders, mine spoils and ashes), pavements with their underlying unconsolidated materials, soils with geomembranes and constructed soils in human-made materials. - - - FAO:http://fao.org/ag/agl/agll/wrb/doc/wrb2006final.pdf - Technosols are soils whose properties and pedogenesis are dominated by their technical origin. They contain a significant amount of artefacts (something in the soil recognizably made or extracted from the earth by humans), or are sealed by technic hard rock (material created by humans, having properties unlike natural rock). They include soils from wastes (landfills, sludge, cinders, mine spoils and ashes), pavements with their underlying unconsolidated materials, soils with geomembranes and constructed soils in human-made materials. - - - - - - - - - - animal waste material - - ENVO - ENVO:00002276 - SWEETRealm:AnimalWaste - https://en.wikipedia.org/wiki/Animal_waste - This will become a defined class, with subclasses added through inference based on material having a 'waste role' and being associated with animal metabolism. - animal waste - - - - - - - - back-arc basin - - - - - - - - - - - - - - A depression in the sea floor that results from the collision of continental plates; the weight of the sinking plate causes the overlying plate to stretch and thin, causing a basin in the overlying plate. Sometimes, the Earth's crust in these basins stretches so much it cracks, allowing magma through from the mantle beneath. Hence, basins often contain active volcanoes and hydrothermal vents. - ENVO - ENVO:00002277 - EcoLexicon:basin - SWEETRealm:BackArcBasin - SWEETRealm:Basin - backarc basin - basin - https://en.wikipedia.org/wiki/Back-arc_basin - - - A depression in the sea floor that results from the collision of continental plates; the weight of the sinking plate causes the overlying plate to stretch and thin, causing a basin in the overlying plate. Sometimes, the Earth's crust in these basins stretches so much it cracks, allowing magma through from the mantle beneath. Hence, basins often contain active volcanoes and hydrothermal vents. - webpage:http://www.venturedeepocean.org/vents/stretching.html - - - - - - - - - - environmental feature - - - - - - - - - - - - - - - - - - - A material entity determines an environmental system when its removal would cause the collapse of that system. For example, a seamount determines a seamount environment, acting as its 'hub'. This class is currently being aligned to the Basic Formal Ontology. Following this alignment, its definition and the definitions of its subclasses will be revised. - A material entity which determines an environmental system. - ENVO - ENVO:00002297 - - - A material entity which determines an environmental system. - DOI:10.1186/2041-1480-4-43 - NM:nm - ORCID:0000-0002-4366-3088 - - - - - - - - - - ocean basin - - - - - - - - - A structural basin that is below sea level. - ENVO - ENVO:00002450 - EcoLexicon:ocean_basin - This class is defined in its geological sense: -https://en.wikipedia.org/wiki/ Hydrologically, an oceanic basin may be anywhere on Earth that is covered by seawater, but geologically ocean basins are large geologic basins that are below sea level. Geologically, there are other undersea geomorphological features such as the continental shelves, the deep ocean trenches, and the undersea mountain ranges (for example, the mid-Atlantic ridge) which are not considered to be part of the ocean basins; while hydrologically, oceanic basins include the flanking continental shelves and shallow, epeiric seas. - https://en.wikipedia.org/wiki/Ocean_basin - envoPolar - - - A structural basin that is below sea level. - https://en.wikipedia.org/wiki/Ocean_basin - - - - - - - - - - hay - - ENVO - ENVO:00002869 - Hay is grass, legumes or other herbaceous plants that have been cut, dried, and stored for use as animal fodder, particularly for grazing livestock such as cattle, horses, goats, and sheep. - https://en.wikipedia.org/wiki/Hay - - - Hay is grass, legumes or other herbaceous plants that have been cut, dried, and stored for use as animal fodder, particularly for grazing livestock such as cattle, horses, goats, and sheep. - https://en.wikipedia.org/wiki/Hay - - - - - - - - - - adobe - - - - - - - - - - - - - - A natural building material mode from sand, clay, water, and some kind of fibrous or organic material (sticks, straw, and/or manure). - ENVO - ENVO:00002870 - - - A natural building material mode from sand, clay, water, and some kind of fibrous or organic material (sticks, straw, and/or manure). - https://en.wikipedia.org/wiki/Adobe - - - - - - - - - - alluvial soil - - ENVO - ENVO:00002871 - https://en.wikipedia.org/wiki/Alluvial_soil - - - - - - - - bagasse - - - - - - - - ENVO - ENVO:00002872 - The biomass remaining after sugarcane stalks are crushed to extract their juice. - https://en.wikipedia.org/wiki/Bagasse - sugarcane bagasse - - - The biomass remaining after sugarcane stalks are crushed to extract their juice. - https://en.wikipedia.org/wiki/Bagasse - - - - - - - - - - organic waste material - - - - - - - - ENVO - ENVO:00002873 - https://en.wikipedia.org/wiki/Organic_waste - This should probably be merged with biological waste material. - organic waste - - - - - - - - air conditioning unit - - ENVO - ENVO:00002874 - - - - - - - - oil contaminated soil - - - - - - - - ENVO - ENVO:00002875 - - - - - - - - warm seep - - - - - - - - - ENVO - ENVO:00002926 - - - - - - - - clay - - - - - - - - - A group of hydrous aluminium phyllosilicate (phyllosilicates being a subgroup of silicate minerals) minerals (see clay minerals), that are typically less than 2 micrometres in diameter. Clay consists of a variety of phyllosilicate minerals rich in silicon and aluminium oxides and hydroxides which include variable amounts of structural water. - EcoLexicon:clay - SWEETRealm:Clay - https://en.wikipedia.org/wiki/Clay - - - A group of hydrous aluminium phyllosilicate (phyllosilicates being a subgroup of silicate minerals) minerals (see clay minerals), that are typically less than 2 micrometres in diameter. Clay consists of a variety of phyllosilicate minerals rich in silicon and aluminium oxides and hydroxides which include variable amounts of structural water. - https://en.wikipedia.org/wiki/Clay - - - - - - - - - - fuel oil - - - - - - - - ENVO - ENVO:00002983 - https://en.wikipedia.org/wiki/Fuel_oil - - - - - - - - petroleum - - - - - - - - ENVO - ENVO:00002984 - a naturally occurring flammable liquid consisting of a complex mixture of hydrocarbons of various molecular weights and other liquid organic compounds, that are found in geologic formations beneath the Earth's surface. - crude oil - https://en.wikipedia.org/wiki/Petroleum - - - a naturally occurring flammable liquid consisting of a complex mixture of hydrocarbons of various molecular weights and other liquid organic compounds, that are found in geologic formations beneath the Earth's surface. - https://en.wikipedia.org/wiki/Petroleum - - - - - - - - - - oil - - - - - - - - - - - - - - A viscous liquid state at ambient temperatures or slightly warmer, and is both hydrophobic and lipophilic. - ENVO - ENVO:00002985 - EcoLexicon:oil - https://en.wikipedia.org/wiki/Oil - - - A viscous liquid state at ambient temperatures or slightly warmer, and is both hydrophobic and lipophilic. - https://en.wikipedia.org/wiki/Oil - - - - - - - - - - obsolete Udvardy biome - ENVO - ENVO:00000446 - ENVO:00002986 - true - - - - - - - - obsolete Evergreen sclerophyllous forests, scrub, or woodlands - ENVO - ENVO:00002987 - ENVO:01000196 - ENVO:01000215 - ENVO:01000216 - ENVO:01000221 - https://en.wikipedia.org/wiki/Evergreen_sclerophyllous_forests,_scrub,_or_woodlands - true - - - - - - - - obsolete Temperate grasslands - ENVO - ENVO:00002988 - ENVO:01000193 - https://en.wikipedia.org/wiki/Temperate_grasslands - true - - - - - - - - obsolete Temperate broad-leaf forests or woodlands and subpolar deciduous thickets - ENVO - ENVO:00002989 - ENVO:01000202 - ENVO:01000221 - true - - - - - - - - obsolete Tropical dry or deciduous forests (including Monsoon forests) or woodlands - ENVO - ENVO:00002990 - ENVO:01000227 - true - - - - - - - - obsolete Subtropical and temperate rainforests or woodlands - ENVO - ENVO:00002991 - ENVO:01000202 - ENVO:01000221 - ENVO:01000222 - ENVO:01000226 - true - - - - - - - - obsolete Temperate needle-leaf forests or woodlands - ENVO - ENVO:00002992 - ENVO:01000211 - ENVO:01000221 - true - - - - - - - - obsolete Tropical humid forests - ENVO - ENVO:00002993 - ENVO:01000228 - true - - - - - - - - obsolete Mixed island systems - ENVO - ENVO:00002994 - true - - - - - - - - obsolete Tundra communities and barren Arctic deserts - ENVO - ENVO:00002995 - ENVO:01000180 - true - - - - - - - - obsolete Mixed mountain and highland systems with complex zonation - ENVO - ENVO:00002996 - true - - - - - - - - obsolete Cold-winter (continental) deserts and semideserts - ENVO - ENVO:00002997 - ENVO:01000182 - ENVO:01000186 - true - - - - - - - - obsolete Warm deserts and semideserts - ENVO - ENVO:00002998 - ENVO:01000182 - ENVO:01000183 - ENVO:01000184 - ENVO:01000218 - true - - - - - - - - obsolete Bailey biome - ENVO - ENVO:00000446 - ENVO:00002999 - true - - - - - - - - obsolete Polar Domain (100) - ENVO - ENVO:00003000 - ENVO:01000186 - true - - - - - - - - obsolete Humid Temperate Domain (200) - ENVO - ENVO:00003001 - true - - - - - - - - obsolete Dry Domain (300) - ENVO - ENVO:00003002 - ENVO:01000179 - true - - - - - - - - obsolete Humid Tropical Domain (400) - ENVO - ENVO:00003003 - ENVO:01000228 - true - - - - - - - - obsolete Tundra Divsion (120) - ENVO - ENVO:00003004 - ENVO:01000180 - true - - - - - - - - obsolete Subarctic Division - Mountain Provinces (M130) - ENVO - ENVO:00003005 - true - - - - - - - - obsolete Subarctic Division (130) - ENVO - ENVO:00003006 - ENVO:01000180 - true - - - - - - - - obsolete Tundra Division - Mountain Provinces (M120) - ENVO - ENVO:00003007 - ENVO:01000180 - true - - - - - - - - obsolete Hot Continental Division (220) - ENVO - ENVO:00003008 - true - - - - - - - - obsolete Subtropical Division (230) - ENVO - ENVO:00003009 - ENVO:01000184 - ENVO:01000187 - ENVO:01000191 - ENVO:01000201 - ENVO:01000209 - ENVO:01000213 - ENVO:01000222 - true - - - - - - - - obsolete Warm Continental Division (210) - ENVO - ENVO:00003010 - true - - - - - - - - obsolete Warm Continental Division - Mountain Provinces (M210) - ENVO - ENVO:00003011 - true - - - - - - - - obsolete Subtropical Division - Mountain Provinces (M230) - ENVO - ENVO:00003012 - true - - - - - - - - obsolete Hot Continental Division - Mountain Provinces (M220) - ENVO - ENVO:00003013 - true - - - - - - - - obsolete Marine Division (240) - ENVO - ENVO:00003014 - true - - - - - - - - obsolete Marine Division - Mountain Provinces (M240) - ENVO - ENVO:00003015 - true - - - - - - - - obsolete Prairie Division (250) - ENVO - ENVO:00003016 - ENVO:01000189 - ENVO:01000193 - ENVO:01000215 - true - - - - - - - - obsolete Mediterranean Division (260) - ENVO - ENVO:00003017 - ENVO:01000199 - ENVO:01000208 - ENVO:01000217 - ENVO:01000224 - ENVO:01000229 - true - - - - - - - - obsolete Mediterranean Division - Mountain Provinces (M260) - ENVO - ENVO:00003018 - true - - - - - - - - obsolete Tropical/Subtropical Desert Division (320) - ENVO - ENVO:00003019 - ENVO:01000183 - ENVO:01000184 - true - - - - - - - - obsolete Rainforest Division (420) - ENVO - ENVO:00003020 - ENVO:01000228 - true - - - - - - - - obsolete Temperate Desert Division (340) - ENVO - ENVO:00003021 - ENVO:01000182 - true - - - - - - - - obsolete Temperate Desert Division - Mountain Provinces (M340) - ENVO - ENVO:00003022 - true - - - - - - - - obsolete Temperate Steppe Division (330) - ENVO - ENVO:00003023 - ENVO:01000189 - ENVO:01000193 - ENVO:01000215 - true - - - - - - - - obsolete Temperate Steppe Division - Mountain Provinces (M330) - ENVO - ENVO:00003024 - true - - - - - - - - obsolete Tropical/Subtropical Steppe Division - Mountain Provinces (M310) - ENVO - ENVO:00003025 - true - - - - - - - - obsolete Tropical/Subtropical Steppe Division (310) - ENVO - ENVO:00003026 - ENVO:01000187 - ENVO:01000188 - ENVO:01000191 - ENVO:01000192 - ENVO:01000213 - ENVO:01000214 - ENVO:01000218 - true - - - - - - - - obsolete Rainforest Division - Mountain Provinces (M420) - ENVO - ENVO:00003027 - ENVO:01000228 - true - - - - - - - - obsolete Savanna Division (410) - ENVO - ENVO:00003028 - ENVO:01000178 - true - - - - - - - - obsolete Savanna Division - Mountain Provinces (M410) - ENVO - ENVO:00003029 - ENVO:01000223 - true - - - - - - - - silage - - A fermented, high-moisture forage that can be fed to ruminants. - ENVO - ENVO:00003030 - https://en.wikipedia.org/wiki/Silage - - - A fermented, high-moisture forage that can be fed to ruminants. - https://en.wikipedia.org/wiki/Silage - - - - - - - - - - animal manure - - ENVO - ENVO:00003031 - This is interesting in that the "role" aspect of "waste" is (or can be) replaced by another role "fertilizer". Thus, the positioning of "manure" under waste may not be totally correct. - - - - - - - - fresh animal manure - - ENVO - ENVO:00003032 - - - - - - - - mushroom compost - - ENVO - ENVO:00003033 - https://en.wikipedia.org/wiki/Mushroom_compost - A compost which generally consists of a combination of wheat straw, dried blood, horse manure and ground chalk, composted together and is the residual compost waste generated by industrial mushroom production. - - - - - - - - obsolete wort - ENVO - ENVO:00003037 - FOODON:00001019 - true - - - - - - - - obsolete beer wort - ENVO - ENVO:00003038 - FOODON:00001020 - true - - - - - - - - obsolete acifified beer wort - ENVO - ENVO:00003039 - FOODON:00001021 - true - - - - - - - - animal house - - ENVO - ENVO:00003040 - While humans are animals, this class does not refer to human houses. - A house used for sheltering non-human animals. - - - - - - - - cow shed - - ENVO - ENVO:00003041 - - - - - - - - piggery - - ENVO - ENVO:00003042 - https://en.wikipedia.org/wiki/Piggery - - - - - - - - sewage plant - - ENVO - ENVO:00003043 - https://en.wikipedia.org/wiki/Sewage_plant - - - - - - - - brine - - EcoLexicon:brine - SWEETRealm:Brine - Water saturated or nearly saturated with salt (NaCl). - https://en.wikipedia.org/wiki/Brine - It is used (now less popular than historically) to preserve vegetables, fish, and meat. - envoPolar - - - Water saturated or nearly saturated with salt (NaCl). - https://en.wikipedia.org/wiki/Brine - - - - - - - - - - bacon curing brine - - ENVO - ENVO:00003045 - - - - - - - - obsolete Bleu de Bresse - Bresse Blue - ENVO - ENVO:00003046 - FOODON:00001022 - true - - - - - - - - obsolete butter - ENVO - ENVO:00003047 - FOODON:00001023 - https://en.wikipedia.org/wiki/Butter - true - - - - - - - - obsolete pickled cabbage - ENVO - ENVO:00003048 - FOODON:00001024 - true - - - - - - - - obsolete Camembert - ENVO - ENVO:00003049 - FOODON:00001025 - https://en.wikipedia.org/wiki/Camembert - true - - - - - - - - obsolete cane sugar - ENVO - ENVO:00003050 - FOODON:00001026 - https://en.wikipedia.org/wiki/Cane_sugar - true - - - - - - - - obsolete Cheddar cheese - ENVO - ENVO:00003051 - FOODON:00001027 - https://en.wikipedia.org/wiki/Cheddar - true - - - - - - - - obsolete Brie - ENVO - ENVO:00003052 - FOODON:00001028 - https://en.wikipedia.org/wiki/Brie - true - - - - - - - - obsolete Gouda - ENVO - ENVO:00003053 - FOODON:00001029 - https://en.wikipedia.org/wiki/Gouda - true - - - - - - - - obsolete halloumi - ENVO - ENVO:00003054 - FOODON:00001030 - https://en.wikipedia.org/wiki/Halloumi - true - - - - - - - - obsolete Gorgonzola - ENVO - ENVO:00003055 - FOODON:00001031 - https://en.wikipedia.org/wiki/Gorgonzola - true - - - - - - - - obsolete Swiss cheese - ENVO - ENVO:00003056 - FOODON:00001032 - https://en.wikipedia.org/wiki/Swiss - true - - - - - - - - obsolete Emmenthal - ENVO - ENVO:00003057 - FOODON:00001033 - true - - - - - - - - obsolete Harzer - ENVO - ENVO:00003058 - FOODON:00001034 - Harzerkaese - true - - - - - - - - obsolete New Zealand Cheddar - ENVO - ENVO:00003059 - FOODON:00001035 - true - - - - - - - - obsolete Pont l'Eveque - ENVO - ENVO:00003060 - FOODON:00001036 - https://en.wikipedia.org/wiki/Pont_l'Eveque - true - - - - - - - - obsolete Vacherin Mont d'Or - ENVO - ENVO:00003061 - FOODON:00001037 - https://en.wikipedia.org/wiki/Vacherin_Mont_d'Or - true - - - - - - - - obsolete pork - ENVO - ENVO:00003062 - FOODON:00001038 - https://en.wikipedia.org/wiki/Pork - true - - - - - - - - obsolete cured meat - ENVO - ENVO:00003063 - FOODON:00001039 - https://en.wikipedia.org/wiki/Cured_meat - true - - - - - - - - drinking water - - ENVO - ENVO:00003064 - EcoLexicon:drinking_water - SWEETRealm:DrinkingWater - https://en.wikipedia.org/wiki/Drinking_water - Drinking water is water which may be consumed by humans with no adverse effects on their health. - potable water - - - - - - - - distilled water - - ENVO - ENVO:00003065 - https://en.wikipedia.org/wiki/Distilled_water - - - - - - - - obsolete chicken meat product - ENVO - ENVO:00003066 - FOODON:00001040 - https://en.wikipedia.org/wiki/Chicken - true - - - - - - - - obsolete beef - ENVO - ENVO:00003067 - FOODON:00001041 - https://en.wikipedia.org/wiki/Beef - true - - - - - - - - obsolete bovine milk - ENVO - ENVO:00003068 - FOODON:00001042 - true - - - - - - - - obsolete ovine milk - ENVO - ENVO:00003069 - FOODON:00001043 - https://en.wikipedia.org/wiki/Sheep_milk - sheep milk - true - - - - - - - - obsolete caprine milk - ENVO - ENVO:00003070 - FOODON:00001044 - true - - - - - - - - grass silage - - ENVO - ENVO:00003071 - - - - - - - - obsolete ice cream - ENVO - ENVO:00003072 - FOODON:00001045 - https://en.wikipedia.org/wiki/Ice_cream - ice-cream - true - - - - - - - - obsolete seafood product - ENVO - ENVO:00003073 - FOODON:00001046 - https://en.wikipedia.org/wiki/Seafood - true - - - - - - - - manufactured product - - - - - - - - - - - - - - - - - - - A material entity that has been processed by humans or their technology in any way, including intermediate products as well as final products. - manufactured good - - - A material entity that has been processed by humans or their technology in any way, including intermediate products as well as final products. - https://en.wikipedia.org/wiki/Manufactured_product - - - - - - - - - - anthropogenic abiotic mesoscopic feature - - ENVO - ENVO:00003075 - - - - - - - - glue - - ENVO - ENVO:00003076 - Glue is any substance applied to the surfaces of materials that binds them together and resists separation. - This sounds more like a role than a material, per se. - adhesive - https://en.wikipedia.org/wiki/Glue - mucilage - paste - - - Glue is any substance applied to the surfaces of materials that binds them together and resists separation. - https://en.wikipedia.org/wiki/Glue - - - - - ORCID:0000-0002-4366-3088 - This sounds more like a role than a material, per se. - - - - - - - - - - obsolete jeotgal - ENVO - ENVO:00003077 - FOODON:00001047 - https://en.wikipedia.org/wiki/Jeotgal - true - - - - - - - - obsolete Meshanger cheese - ENVO - ENVO:00003078 - FOODON:00001048 - true - - - - - - - - obsolete pork chop - ENVO - ENVO:00003079 - FOODON:00001049 - https://en.wikipedia.org/wiki/Pork_chop - true - - - - - - - - obsolete salad - ENVO - ENVO:00003080 - https://en.wikipedia.org/wiki/Salad - true - - - - - - - - metal contaminated soil - - - - - - - - ENVO - ENVO:00003081 - - - - - - - - enriched soil - - - - - - - - - - - - - - - - - - - A portion of enriched soil is a portion of soil with elevated levels of some material entity. - ENVO - ENVO:00003082 - This could be demoted to an inferred class if issues with double inheritance arise. - - - - - - - - sarcosine enriched soil - - - - - - - - - - - - - - - - - - - A portion of sarcosine enriched soil is a portion of soil with elevated levels of sarcosine. - ENVO - ENVO:00003083 - - - - - - - - trimethylamine enriched soil - - - - - - - - - - - - - - - - - - - A portion of trimethylamine enriched soil is a portion of soil with elevated levels of trimethylamine. - ENVO - ENVO:00003084 - - - - - - - - skatole enriched soil - - - - - - - - - - - - - - - - - - - A portion of skatole enriched soil is a portion of soil with elevated levels of skatole. - ENVO - ENVO:00003085 - - - - - - - - ethanol enriched soil - - - - - - - - A portion of ethanol enriched soil is a portion of soil with elevated levels of ethanol. - ENVO - ENVO:00003086 - - - - - - - - acetamide enriched soil - - - - - - - - - - - - - - - - - - - A portion of acetamide enriched soil is a portion of soil with elevated levels of acetamide. - ENVO - ENVO:00003087 - - - - - - - - pantothenate enriched soil - - - - - - - - - - - - - - - - - - - A portion of pantothenate enriched soil is a portion of soil with elevated levels of pantothenate. - ENVO - ENVO:00003088 - - - - - - - - testosterone enriched soil - - - - - - - - - - - - - - - - - - - A portion of testosterone enriched soil is a portion of soil with elevated levels of testosterone. - ENVO - ENVO:00003089 - - - - - - - - kynurenate enriched soil - - - - - - - - - - - - - - - - - - - A portion of kynurenate enriched soil is a portion of soil with elevated levels of kynurenate. - ENVO - ENVO:00003090 - - - - - - - - threonine enriched soil - - - - - - - - - - - - - - - - - - - A portion of threonine enriched soil is a portion of soil with elevated levels of threonine. - ENVO - ENVO:00003091 - - - - - - - - salicylate enriched soil - - - - - - - - - - - - - - - - - - - A portion of salicylate enriched soil is a portion of soil with elevated levels of salicylate. - ENVO - ENVO:00003092 - - - - - - - - poly-beta-hydroxybutyrate enriched soil - - - - - - - - - - - - - - - - - - - A portion of poly-beta-hydroxybutyrate enriched soil is a portion of soil with elevated levels of poly-beta-hydroxybutyrate. - ENVO - ENVO:00003093 - - - - - - - - L-(+)-tartrate enriched soil - - A portion of L-(+)-tartrate enriched soil is a portion of soil with elevated levels of L-(+)-tartrate. - ENVO - ENVO:00003094 - - - - - - - - quinate enriched soil - - - - - - - - - - - - - - - - - - - A portion of quinate enriched soil is a portion of soil with elevated levels of quinate. - ENVO - ENVO:00003095 - - - - - - - - tap water - - ENVO - ENVO:00003096 - https://en.wikipedia.org/wiki/Tap_water - - - - - - - - bore hole water - - ENVO - ENVO:00003097 - - - - - - - - tannery - - ENVO - ENVO:00003323 - https://en.wikipedia.org/wiki/Tannery - A tannery is a building in which the skins of animals are treated with chemicals to alter the structure of their constituent proteins, creating leather. - - - A tannery is a building in which the skins of animals are treated with chemicals to alter the structure of their constituent proteins, creating leather. - https://en.wikipedia.org/wiki/Tannery - - - - - - - - - - obsolete tempeh - ENVO - ENVO:00003779 - FOODON:00001050 - https://en.wikipedia.org/wiki/Tempeh - true - - - - - - - - horse manure - - ENVO - ENVO:00003859 - https://en.wikipedia.org/wiki/Horse_manure - - - - - - - - pig manure - - Manure which is primarily composed of pig feces. - - - - - - - - industrial building - - ENVO - ENVO:00003861 - An industrial building is a building within which goods are produced and, optionally, stored or within which services are rendered. - It's possible that this will become an inferred class in the future. The United Nations' International Standard Industrial Classification should be referred to when expanding this branch. ISIC can also be used to identify processes. See http://unstats.un.org/unsd/cr/registry/regcst.asp?Cl=27&Lg=1. - - - https://en.wikipedia.org/wiki/Industry - An industrial building is a building within which goods are produced and, optionally, stored or within which services are rendered. - - - - - - - - - - dairy - - ENVO - ENVO:00003862 - https://en.wikipedia.org/wiki/Dairy - 'Terminology differs between countries. For example, in the United States, the entire dairy farm is commonly called a "dairy." The building or farm area where milk is harvested from the cow is often called a "milking parlor" or "parlor." The farm area where milk is stored in bulk tanks is known as the farm's "milk house." Milk is then hauled (usually by truck) to a "dairy plant," also referred to as a "dairy", where raw milk is further processed and prepared for commercial sale of dairy products. In New Zealand, farm areas for milk harvesting are also called "milking parlours", and are historically known as "milking sheds."' https://en.wikipedia.org/wiki/Dairy - A dairy is a building in which animal milk is harvested and, optionally, processed for human consumption. - - - https://en.wikipedia.org/wiki/Dairy - A dairy is a building in which animal milk is harvested and, optionally, processed for human consumption. - - - - - - - - - - food processing building - - ENVO - ENVO:00003863 - The semantics of food are being handled by FOODON http://purl.obolibrary.org/obo/foodon.owl - A food processing building is a building in which materials that contain or consist of essential body nutrients - such as carbohydrates, fats, proteins, vitamins, or minerals - and may be ingested and assimilated by an organism to produce energy, stimulate growth, and maintain life are converted alternative forms. - - - - - - - - bakery - - ENVO - ENVO:00003864 - https://en.wikipedia.org/wiki/Bakery - A bakery is a building in which raw flour-based food is baked in an oven to produce food products such as bread, cakes, pastries, and pies. These products are often sold from the bakery itself. - bakeshop - A bakery is a food processing building and a 'food shop' at the same time. This needs to be resolved. - - - https://en.wikipedia.org/wiki/Bakery - A bakery is a building in which raw flour-based food is baked in an oven to produce food products such as bread, cakes, pastries, and pies. These products are often sold from the bakery itself. - - - - - - - - - - straw - - An agricultural byproduct, the dry stalk of a cereal plant, after the nutrient grain or seed has been removed. - ENVO - ENVO:00003869 - https://en.wikipedia.org/wiki/Straw - - - An agricultural byproduct, the dry stalk of a cereal plant, after the nutrient grain or seed has been removed. - https://en.wikipedia.org/wiki/Straw - - - - - - - - - - rice straw - - ENVO - ENVO:00003870 - - - - - - - - obsolete fermented rice beverage - ENVO - ENVO:00003871 - FOODON:00001051 - true - - - - - - - - obsolete amasake - ENVO - ENVO:00003872 - FOODON:00001052 - https://en.wikipedia.org/wiki/Amasake - true - - - - - - - - obsolete fermented dairy product - ENVO - ENVO:00003873 - FOODON:00001053 - https://en.wikipedia.org/wiki/Fermented_dairy_product - true - - - - - - - - obsolete fermented fish product - ENVO - ENVO:00003874 - FOODON:00001054 - https://en.wikipedia.org/wiki/Fermented_fish - true - - - - - - - - obsolete sea water fish product - ENVO - ENVO:00003875 - FOODON:00001055 - https://en.wikipedia.org/wiki/Fish - true - - - - - - - - obsolete flour - ENVO - ENVO:00003876 - FOODON:00001056 - https://en.wikipedia.org/wiki/Flour - true - - - - - - - - obsolete plant fruit food product - ENVO - ENVO:00003877 - FOODON:00001057 - https://en.wikipedia.org/wiki/Fruit - true - - - - - - - - obsolete fruit extract product - ENVO - ENVO:00003878 - FOODON:00001058 - true - - - - - - - - obsolete apple juice - ENVO - ENVO:00003879 - FOODON:00001059 - https://en.wikipedia.org/wiki/Apple_juice - true - - - - - - - - obsolete awamori - ENVO - ENVO:00003880 - FOODON:00001060 - https://en.wikipedia.org/wiki/Awamori - true - - - - - - - - obsolete bacon - ENVO - ENVO:00003881 - FOODON:00001061 - https://en.wikipedia.org/wiki/Bacon - true - - - - - - - - obsolete fermented millet food product - ENVO - ENVO:00003882 - FOODON:00001062 - true - - - - - - - - obsolete millet beer - ENVO - ENVO:00003883 - FOODON:00001063 - bantu beer - https://en.wikipedia.org/wiki/Millet_beer - true - - - - - - - - farmyard manure - - ENVO - ENVO:00003884 - - - - - - - - brewery - - A brewery is a building in which alcoholic beverages are produced by brewing, that is, steeping a starch source (commonly cereal grains) in water and fermenting the resulting sweet liquid with yeast. At times, the products are also sold from the brewery. - ENVO - ENVO:00003885 - - - A brewery is a building in which alcoholic beverages are produced by brewing, that is, steeping a starch source (commonly cereal grains) in water and fermenting the resulting sweet liquid with yeast. At times, the products are also sold from the brewery. - https://en.wikipedia.org/wiki/Brewing - https://en.wikipedia.org/wiki/Brewery - - - - - - - - - - obsolete bottled beer - ENVO - ENVO:00003886 - FOODON:00001064 - true - - - - - - - - obsolete blue cheese - ENVO - ENVO:00003887 - FOODON:00001065 - https://en.wikipedia.org/wiki/Blue_cheese - true - - - - - - - - obsolete bottled fruit product - ENVO - ENVO:00003888 - FOODON:00001066 - true - - - - - - - - obsolete buttermilk - ENVO - ENVO:00003889 - FOODON:00001067 - https://en.wikipedia.org/wiki/Buttermilk - true - - - - - - - - obsolete canned fruit product - ENVO - ENVO:00003890 - FOODON:00001068 - true - - - - - - - - obsolete fermented fruit product - ENVO - ENVO:00003891 - FOODON:00001069 - true - - - - - - - - cosmetic product - - ENVO - ENVO:00003893 - - - - - - - - face cream product - - ENVO - ENVO:00003894 - - - - - - - - paper product - - ENVO - ENVO:00003895 - - - - - - - - currency note - - ENVO - ENVO:00003896 - - - - - - - - obsolete miso - ENVO - ENVO:00003898 - FOODON:00001070 - https://en.wikipedia.org/wiki/Miso - true - - - - - - - - obsolete must - ENVO - ENVO:00003899 - FOODON:00001071 - https://en.wikipedia.org/wiki/Must - true - - - - - - - - rye grass silage - - ENVO - ENVO:00003900 - - - - - - - - aviation fuel - - - - - - - - ENVO - ENVO:00003903 - https://en.wikipedia.org/wiki/Aviation_fuel - jet fuel - - - - - - - - obsolete yeast cake - ENVO - ENVO:00003904 - FOODON:00001072 - true - - - - - - - - obsolete vinegar - ENVO - ENVO:00003905 - FOODON:00001073 - https://en.wikipedia.org/wiki/Vinegar - true - - - - - - - - obsolete malt vinegar - ENVO - ENVO:00003906 - FOODON:00001074 - https://en.wikipedia.org/wiki/Malt_vinegar - true - - - - - - - - obsolete nonfat dry milk - ENVO - ENVO:00003907 - FOODON:00001075 - true - - - - - - - - poultry deep litter - - ENVO - ENVO:00003908 - - - - - - - - sake brewery - - ENVO - ENVO:00003911 - A sake brewery is a brewery which produces rice wine by fermenting rice which has been polished to remove the bran. - - - https://en.wikipedia.org/wiki/Sake - A sake brewery is a brewery which produces rice wine by fermenting rice which has been polished to remove the bran. - - - - - - - - - - obsolete sake - ENVO - ENVO:00003912 - FOODON:00001076 - https://en.wikipedia.org/wiki/Sake - true - - - - - - - - obsolete salt pork - ENVO - ENVO:00003913 - FOODON:00001077 - https://en.wikipedia.org/wiki/Salt_pork - true - - - - - - - - chalk soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00003914 - - - - - - - - obsolete fermented soybean product - ENVO - ENVO:00003915 - FOODON:00001078 - true - - - - - - - - research station - - A building or collection of co-located buildings constructed for the purpose of undertaking scientific research. - - - A building or collection of co-located buildings constructed for the purpose of undertaking scientific research. - MA:ma - https://en.wikipedia.org/wiki/Research_station - - - - - - - - - - stable manure - - ENVO - ENVO:00003927 - - - - - - - - obsolete pickled food product - ENVO - ENVO:00003928 - FOODON:00001079 - https://en.wikipedia.org/wiki/Pickle - true - - - - - - - - obsolete tape kefan - ENVO - ENVO:00003929 - FOODON:00001080 - true - - - - - - - - scum - - A layer of impurities that accumulates at the surface of a liquid (especially water or molten metal). - ENVO - ENVO:00003930 - https://en.wikipedia.org/wiki/Scum - - - A layer of impurities that accumulates at the surface of a liquid (especially water or molten metal). - https://en.wikipedia.org/wiki/Scum - - - - - - - - - - warehouse - - ENVO - ENVO:00003963 - https://en.wikipedia.org/wiki/Warehouse - A warehouse is a building which is used for the storage of goods. - - - https://en.wikipedia.org/wiki/Warehouse - A warehouse is a building which is used for the storage of goods. - - - - - - - - - - tobacco warehouse - - ENVO - ENVO:00003964 - A tobacco warehouse is a warehouse used to store cured leaves of plants from the genus Nicotiana, primarily N. tabacum and N. rustica. - - - https://en.wikipedia.org/wiki/Tobacco - A tobacco warehouse is a warehouse used to store cured leaves of plants from the genus Nicotiana, primarily N. tabacum and N. rustica. - - - - - - - - - - anaerobic digester sludge - - ENVO - ENVO:00003965 - - - - - - - - obsolete Bondon cheese - ENVO - ENVO:00003966 - FOODON:00001081 - true - - - - - - - - creamery - - - - - - - - ENVO - ENVO:00003967 - https://en.wikipedia.org/wiki/Creamery - A creamery is a part of a dairy where cream is separated from whole milk. - - - - - - - - air filter - - - - - - - - An air filter is a device that removes some substance from air. - ENVO - ENVO:00003968 - This is a general definition derived from the definitions for particulate, chemical, and other air filters. Subclasses should be created if needed. - https://en.wikipedia.org/wiki/Air_filter - - - An air filter is a device that removes some substance from air. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Air_filter - - - - - - - - - - obsolete bitter cheese - ENVO - ENVO:00003969 - FOODON:00001082 - true - - - - - - - - obsolete sugar - ENVO - ENVO:00003970 - FOODON:00001083 - https://en.wikipedia.org/wiki/Sugar - true - - - - - - - - obsolete brown sugar - ENVO - ENVO:00003971 - FOODON:00001084 - https://en.wikipedia.org/wiki/Brown_sugar - true - - - - - - - - obsolete evaporated milk product - ENVO - ENVO:00003972 - FOODON:00001085 - https://en.wikipedia.org/wiki/Evaporated_milk - true - - - - - - - - obsolete kefir - ENVO - ENVO:00003973 - FOODON:00001086 - true - - - - - - - - obsolete vegetable oil - ENVO - ENVO:00003975 - ENVO:0010145 - FOODON:00001087 - https://en.wikipedia.org/wiki/Vegetable_oil - true - - - - - - - - obsolete linseed oil - ENVO - ENVO:00003976 - FOODON:00001088 - https://en.wikipedia.org/wiki/Linseed_oil - true - - - - - - - - obsolete maize flour - ENVO - ENVO:00003977 - FOODON:00001089 - true - - - - - - - - potato silage - - ENVO - ENVO:00003978 - - - - - - - - obsolete sour milk - ENVO - ENVO:00003979 - FOODON:00001090 - https://en.wikipedia.org/wiki/Sour_milk - true - - - - - - - - obsolete dried milk product - ENVO - ENVO:00003980 - FOODON:00001091 - https://en.wikipedia.org/wiki/Dried_milk - true - - - - - - - - travertine - - A natural chemical precipitate of carbonate minerals; typically aragonite, but often recrystallized to or primarily calcite; which is deposited from the water of mineral springs (especially hot springs) or streams saturated with calcium carbonate. - ENVO - ENVO:00003982 - https://en.wikipedia.org/wiki/Travertine - - - A natural chemical precipitate of carbonate minerals; typically aragonite, but often recrystallized to or primarily calcite; which is deposited from the water of mineral springs (especially hot springs) or streams saturated with calcium carbonate. - https://en.wikipedia.org/wiki/Travertine - - - - - - - - - - sawmill - - ENVO - ENVO:00004638 - https://en.wikipedia.org/wiki/Sawmill - - - - - - - - karst field - - - - - - - - - - - - - - - - - - - A large flat plain in karst territory with areas usually 5 to 400 sqaure kilometres. - ENVO - ENVO:00004683 - https://en.wikipedia.org/wiki/Karst_field - karst polje - - - A large flat plain in karst territory with areas usually 5 to 400 sqaure kilometres. - https://en.wikipedia.org/wiki/Karst_field - - - - - https://en.wikipedia.org/wiki/Polje - karst polje - - - - - - - - - - foam - - ENVO - ENVO:00005738 - https://en.wikipedia.org/wiki/Foam - This is a state more than a material. - - - - - - - - sea foam - - - - - - - - ENVO - ENVO:00005739 - https://en.wikipedia.org/wiki/Sea_foam - - - - - - - - paddy field soil - - ENVO - ENVO:00005740 - rice paddy soil - - - - - - - - alpine soil - - ENVO - ENVO:00005741 - envoPolar - - - - - - - - arable soil - - ENVO - ENVO:00005742 - - - - - - - - roadside soil - - - - - - - - A portion of soil that is part of a roadside area. - ENVO - ENVO:00005743 - - - - - - - - allotment garden soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005744 - - - - - - - - allotment garden - - ENVO - ENVO:00005745 - https://en.wikipedia.org/wiki/Allotment_garden - - - - - - - - savanna soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005746 - - - - - - - - compost soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005747 - - - - - - - - dry soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005748 - - - - - - - - farm soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005749 - - - - - - - - grassland soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005750 - - - - - - - - jungle soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005751 - - - - - - - - sawah soil - - ENVO - ENVO:00005752 - - - - - - - - urea enriched soil - - - - - - - - - - - - - - - - - - - A portion of urea enriched soil is a portion of soil with elevated levels of urea. - ENVO - ENVO:00005753 - - - - - - - - fertilized soil - - ENVO - ENVO:00005754 - - - - - - - - field soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005755 - - - - - - - - lawn soil - - ENVO - ENVO:00005756 - - - - - - - - bacteria enriched soil - - A portion of bacteria enriched soil is a portion of soil with elevated bacterial abundance. - ENVO - ENVO:00005757 - - - - - - - - alluvial swamp soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005758 - - - - - - - - alluvial paddy field soil - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005759 - - - - - - - - burned soil - - ENVO - ENVO:00005760 - burnt soil - - - - - - - - meadow soil - - - - - - - - ENVO - ENVO:00005761 - - - - - - - - chloropicrin enriched soil - - - - - - - - - - - - - - - - - - - A portion of chloropicrin enriched soil is a portion of soil with elevated levels of chloropicrin. - ENVO - ENVO:00005762 - - - - - - - - humus-rich acidic ash soil - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005763 - - - - - - - - pond soil - - ENVO - ENVO:00005764 - - - - - - - - frozen compost soil - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005765 - - - - - - - - limed soil - - ENVO - ENVO:00005766 - - - - - - - - manured soil - - ENVO - ENVO:00005767 - - - - - - - - orchid soil - - ENVO - ENVO:00005768 - - - - - - - - mountain forest soil - - ENVO - ENVO:00005769 - - - - - - - - beech forest soil - - ENVO - ENVO:00005770 - - - - - - - - muddy soil - - ENVO - ENVO:00005771 - - - - - - - - orchard soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005772 - - - - - - - - pasture soil - - - - - - - - ENVO - ENVO:00005773 - - - - - - - - peat soil - - ENVO - ENVO:00005774 - EcoLexicon:peat - SWEETRealm:Peat - https://en.wikipedia.org/wiki/Peat_soil - peat - - - ENVO:cjm - peat - - - - - - - - - - salt contaminated soil - - - - - - - - - - - - - - ENVO - ENVO:00005775 - salty soil - - - - - - - - peaty paddy field soil - - ENVO - ENVO:00005776 - - - - - - - - steppe soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005777 - - - - - - - - tropical soil - - - - - - - - ENVO - ENVO:00005778 - - - - - - - - vegetable garden soil - - ENVO - ENVO:00005779 - - - - - - - - greenhouse soil - - ENVO - ENVO:00005780 - - - - - - - - heat stressed soil - - ENVO - ENVO:00005781 - - - - - - - - ornithogenic soil - - ENVO - ENVO:00005782 - - - - - - - - leafy wood soil - - ENVO - ENVO:00005783 - - - - - - - - spruce forest soil - - ENVO - ENVO:00005784 - - - - - - - - volcanic soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005785 - https://en.wikipedia.org/wiki/Volcanic_soil - - - - - - - - upland soil - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005786 - - - - - - - - eucalyptus forest soil - - ENVO - ENVO:00005787 - - - - - - - - rubber plantation soil - - ENVO - ENVO:00005788 - - - - - - - - bluegrass field soil - - Bluegrass field soil is a soil which is found in a field of Kentucky Bluegrass (Poa pratensis). - ENVO - ENVO:00005789 - - - - - - - - red soil - - ENVO - ENVO:00005790 - - - - - - - - sterile water - - Sterile water is water which does not contain lliving organisms. - - - - - - - - underground water - - - - - - - - SWEETRealm:UndergroundWater - subterranean water - Water which has physicochemical properties determined by processes which occur beneath the planetary crust. - This class references any water that's under a planetary surface. For water that is in an aquifer, see "groundwater" (ENVO:01001004). Previously, this class included both. - envoPolar - - - - - - - - muddy water - - ENVO - ENVO:00005793 - - - - - - - - water scum - - ENVO - ENVO:00005794 - - - - - - - - marine mud - - - - - - - - - - - - - - - - - - - Mud which is part of a marine ecosystem. - envoPolar - - - - - - - - marine sludge - - ENVO - ENVO:00005796 - - - - - - - - lake bottom mud - - - - - - - - - - - - - - - - - - - Mud which constitutes the bed of a lake. - - - - - - - - acid dune sand - - - - - - - - - - - - - - ENVO - ENVO:00005798 - - - - - - - - rocky sand - - ENVO - ENVO:00005799 - - - - - - - - desert sand - - - - - - - - - - - - - - - - - - - ENVO - ENVO:00005800 - - - - - - - - rhizosphere - - - - - - - - - - - - - - ENVO - ENVO:00005801 - LTER:472 - The narrow region of soil that is directly influenced by root secretions and associated soil microorganisms. - - - The narrow region of soil that is directly influenced by root secretions and associated soil microorganisms. - https://en.wikipedia.org/wiki/Rhizosphere_%28ecology%29 - - - - - - - - - - bulk soil - - ENVO - ENVO:00005802 - Soil that is not penetrated by the root systems of plants. - https://en.wikipedia.org/wiki/Bulk_soil - - - Soil that is not penetrated by the root systems of plants. - https://en.wikipedia.org/wiki/Bulk_soil - - - - - - - - - - animal habitation - - ENVO - ENVO:00005803 - The dwelling of an animal or group of similar animals. - den - nest - - - MA:ma - The dwelling of an animal or group of similar animals. - - - - - - - - - - nest of ant - - A pile of earth, sand, pine needles, or clay or a composite of these and other materials that build up at the entrances of the subterranean dwellings of ant colonies as they are excavated. A colony is built and maintained by legions of worker ants, who carry tiny bits of dirt and pebbles in their mandibles and deposit them near the exit of the colony. They normally deposit the dirt or vegetation at the top of the hill to prevent it from sliding back into the colony, but in some species they actively sculpt the materials into specific shapes, and may create nest chambers within the mound. - ENVO - ENVO:00005804 - ant hill - ant's nest - - - A pile of earth, sand, pine needles, or clay or a composite of these and other materials that build up at the entrances of the subterranean dwellings of ant colonies as they are excavated. A colony is built and maintained by legions of worker ants, who carry tiny bits of dirt and pebbles in their mandibles and deposit them near the exit of the colony. They normally deposit the dirt or vegetation at the top of the hill to prevent it from sliding back into the colony, but in some species they actively sculpt the materials into specific shapes, and may create nest chambers within the mound. - https://en.wikipedia.org/wiki/Ant_colony#Ant-hills - - - - - - - - - - nest of bird - - A bird nest is the spot in which a bird lays and incubates its eggs and raises its young. - ENVO - ENVO:00005805 - bird nest - bird's nest - eyrie - - - A bird nest is the spot in which a bird lays and incubates its eggs and raises its young. - https://en.wikipedia.org/wiki/Bird_nest - - - - - - - - - - obsolete Tropical and subtropical coniferous forest biome - ENVO - ENVO:00005806 - ENVO:01000209 - ENVO:01000210 - true - - - - - - - - obsolete animal-associated habitat - A habitat that is in or on a living animal. Here "animal" denotes an individual of a species that is a sub-taxon of NCBITaxon:33208. - ENVO - ENVO:00006776 - metazoan-associated habitat - true - - - - A habitat that is in or on a living animal. Here "animal" denotes an individual of a species that is a sub-taxon of NCBITaxon:33208. - PATOC:cjm - - - - - - - - - - obsolete plant-associated habitat - A habitat that is in or on a living plant. Here "plant" denotes an individual of a species that is a sub-taxon of NCBITaxon:33090 (viridiplantae). - ENVO - ENVO:00009001 - true - - - - A habitat that is in or on a living plant. Here "plant" denotes an individual of a species that is a sub-taxon of NCBITaxon:33090 (viridiplantae). - PATOC:cjm - - - - - - - - - - obsolete mammalia-associated habitat - A habitat that is in or on a living mammal. Here "mammal" denotes an individual of a species that is a sub-taxon of NCBITaxon:40674. - ENVO - ENVO:00009002 - true - - - A habitat that is in or on a living mammal. Here "mammal" denotes an individual of a species that is a sub-taxon of NCBITaxon:40674. - PATOC:cjm - - - - - - - - - - obsolete human-associated habitat - A habitat that is in or on a living animal. Here "animal" denotes an individual of a species that is a sub-taxon of NCBITaxon:9606. - ENVO - ENVO:00009003 - Used for armpits and other nasty places. - true - - - A habitat that is in or on a living animal. Here "animal" denotes an individual of a species that is a sub-taxon of NCBITaxon:9606. - PATOC:cjm - - - - - - - - - - obsolete insecta-associated habitat - A habitat that is in or on a living insect. Here "insect" denotes an individual of a species that is a sub-taxon of NCBITaxon:50557. - ENVO - ENVO:00009004 - true - - - A habitat that is in or on a living insect. Here "insect" denotes an individual of a species that is a sub-taxon of NCBITaxon:50557. - PATOC:cjm - - - - - - - - - - ice rise - - - - - - - - An ice rise is an elevation which is part of an ice shelf, typically dome shared, and formed by the ice shelf overriding an obstruction in the seabed. An ice rise may be adjacent only to an ice shelf, or to an ice shelf and a sea. For some features, properly ice rises, the term island has become established through usage. - ENVO - ENVO:00009686 - https://en.wikipedia.org/wiki/Ice_rise - envoPolar - - - An ice rise is an elevation which is part of an ice shelf, typically dome shared, and formed by the ice shelf overriding an obstruction in the seabed. An ice rise may be adjacent only to an ice shelf, or to an ice shelf and a sea. For some features, properly ice rises, the term island has become established through usage. - https://en.wikipedia.org/wiki/Ice_rise - web:http://www.antarctica.ac.uk/apc/genericterms.html - - - - - - - - - - ice piedmont - - A glacier covering a coastal strip of low-lying land backed by mountains, and sloping gently seaward over a distance up to 30km or more to terminate in ice cliffs or to merge with an ice shelf. - ENVO - ENVO:00009725 - envoPolar - - - A glacier covering a coastal strip of low-lying land backed by mountains, and sloping gently seaward over a distance up to 30km or more to terminate in ice cliffs or to merge with an ice shelf. - web:http://www.antarctica.ac.uk/apc/genericterms.html - - - - - - - - - - strand crack - - ENVO - ENVO:00009726 - Fissure at the junction between an inland ice sheet, ice piedmont or ice rise and an ice shelf, the latter being subject to the rise and fall of the tide. - envoPolar - - - Fissure at the junction between an inland ice sheet, ice piedmont or ice rise and an ice shelf, the latter being subject to the rise and fall of the tide. - web:http://www.antarctica.ac.uk/apc/genericterms.html - - - - - - - - - - fomite - - A fomite is any inanimate object or substance capable of carrying infectious organisms (such as germs or parasites) and hence transferring them from one individual to another. A fomite can be anything such as a cloth or mop heads so when cleaning this is important to remember that this could aid when spreading pathogenic organisms. - ENVO - ENVO:00010358 - https://en.wikipedia.org/wiki/Fomite - - - A fomite is any inanimate object or substance capable of carrying infectious organisms (such as germs or parasites) and hence transferring them from one individual to another. A fomite can be anything such as a cloth or mop heads so when cleaning this is important to remember that this could aid when spreading pathogenic organisms. - https://en.wikipedia.org/wiki/Fomite - - - - - - - - - - midden - - A dump for domestic waste. A term used to describe any kind of feature containing waste products relating to day-to-day human life. - ENVO - ENVO:00010442 - https://en.wikipedia.org/wiki/Midden - - - A dump for domestic waste. A term used to describe any kind of feature containing waste products relating to day-to-day human life. - https://en.wikipedia.org/wiki/Midden - - - - - - - - - - environmental material - - A portion of environmental material is a fiat object which forms the medium or part of the medium of an environmental system. - Everything under this parent must be a mass noun. All subclasses are to be understood as being composed primarily of the named entity, rather than restricted to that entity. For example, "ENVO:water" is to be understood as "environmental material composed primarly of some CHEBI:water". This class is currently being aligned to the Basic Formal Ontology. Following this alignment, its definition and the definitions of its subclasses will be revised. - portion of environmental material - - - A portion of environmental material is a fiat object which forms the medium or part of the medium of an environmental system. - DOI:10.1186/2041-1480-4-43 - MA:ma - ORCID:0000-0002-4366-3088 - URL:http://ontology.buffalo.edu/smith/articles/niches.html - - - - - - - - - - surface layer - - A surface layer is the uppermost layer of some material entity. - ENVO - ENVO:00010504 - EcoLexicon:surface - SWEETRealm:Surface - This class is distinct from a geometric surface, which is two-dimensional. The idea of "uppermost" may be problematic. Further, the definition of layer (the superclass of surface in rev 133) references surface. This may be another issue. Perhaps this can be made into an inferred class using 'bounding layer of' some material entity, note that 'bounding layer' implies containment, which may not be valid here. - https://en.wikipedia.org/wiki/Surface - - - A surface layer is the uppermost layer of some material entity. - URL:http://www.merriam-webster.com/dictionary/surface - - - - - - - - - - aerosol - - - - - - - - - - - - - - - - - - - - - Airborne solid particles (also called dust or particulate matter (PM)) or liquid droplets. - EcoLexicon:aerosol - SWEETRealm:Aerosol - Should connect to PATO as "quality of an aerosol" - - - Airborne solid particles (also called dust or particulate matter (PM)) or liquid droplets. - https://en.wikipedia.org/wiki/Aerosol - - - - - - - - - - emulsion - - A mixture of two immiscible (unblendable) substances. One substance (the dispersed phase) is dispersed in the other (the continuous phase). - ENVO - ENVO:00010506 - https://en.wikipedia.org/wiki/Emulsion - - - A mixture of two immiscible (unblendable) substances. One substance (the dispersed phase) is dispersed in the other (the continuous phase). - https://en.wikipedia.org/wiki/Emulsion - - - - - - - - - - medical instrument - - ENVO - ENVO:00010621 - https://en.wikipedia.org/wiki/Medical_instrument - - - - - - - - vivarium - - - - - - - - https://en.wikipedia.org/wiki/Vivarium - A vivarium is an enclosure for keeping and raising organisms for observation or research. Often, a portion of the ecosystem for a particular species is simulated on a smaller scale, with controls for environmental conditions. - - - https://en.wikipedia.org/wiki/Vivarium - A vivarium is an enclosure for keeping and raising organisms for observation or research. Often, a portion of the ecosystem for a particular species is simulated on a smaller scale, with controls for environmental conditions. - - - - - - - - - - dolomite - - A sedimentary carbonate rock and a mineral, both composed of calcium magnesium carbonate CaMg(CO3)2 found in crystals. - ENVO - ENVO:00010623 - https://en.wikipedia.org/wiki/Dolomite - - - A sedimentary carbonate rock and a mineral, both composed of calcium magnesium carbonate CaMg(CO3)2 found in crystals. - https://en.wikipedia.org/wiki/Dolomite - - - - - - - - - - botanical garden - - A place where a wide variety of plants primarily categorized and documented for scientific purposes. - ENVO - ENVO:00010624 - botanic garden - https://en.wikipedia.org/wiki/Botanical_garden - - - A place where a wide variety of plants primarily categorized and documented for scientific purposes. - https://en.wikipedia.org/wiki/Botanical_garden - - - - - - - - - - zoological garden - - A facility in which animals are confined within enclosures and displayed to the public, and in which they may also be bred. - ENVO - ENVO:00010625 - zoo - zoological park - - - A facility in which animals are confined within enclosures and displayed to the public, and in which they may also be bred. - https://en.wikipedia.org/wiki/Zoo - - - - - - - - - - ocean time series station - - A research facility consisting of instruments that measure the properties of the oceans over time. Usually of at least approximately fixed location. - - - A research facility consisting of instruments that measure the properties of the oceans over time. Usually of at least approximately fixed location. - MA:ma - - - - - - - - - - aquifer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An underground layer of water-bearing permeable rock or unconsolidated materials (gravel, sand, silt, or clay) from which groundwater can be usefully extracted using a water well. - EcoLexicon:aquifer - SWEETRealm:Aquifer - https://en.wikipedia.org/wiki/Aquifer - envoPolar - - - An underground layer of water-bearing permeable rock or unconsolidated materials (gravel, sand, silt, or clay) from which groundwater can be usefully extracted using a water well. - https://en.wikipedia.org/wiki/Aquifer - - - - - - - - - - karst cave - - - - - - - - ENVO - ENVO:00012411 - - - - - - - - obsolete animal food product - ENVO - ENVO:0010000 - FOODON:00001092 - true - - - - - - - - anthropogenic environmental material - - Anthropogenic material in or on which organisms may live. - ENVO - ENVO:0010001 - - - Anthropogenic material in or on which organisms may live. - MA:ma - - - - - - - - - - obsolete cereal food product - ENVO - ENVO:0010002 - FOODON:00001093 - true - - - - - - - - agricultural environmental material - - ENVO - ENVO:0010003 - This is quite odd and it probably should be obsoleted. Any material that is a participant in an agricultural process can be seen as an agricultural material. - - - ORCID:0000-0002-4366-3088 - This is quite odd and it probably should be obsoleted. Any material that is a participant in an agricultural process can be seen as an agricultural material. - - - - - - - - - - obsolete beverage product - A liquid which is specifically prepared for human consumption. - ENVO - ENVO:0010004 - true - - - A liquid which is specifically prepared for human consumption. - web:http://en.wikipedia.org/wiki/Beverage - - - - - - - - - - obsolete fermented beverage - ENVO - ENVO:0010005 - FOODON:00001094 - alcoholic beverage - true - - - - - - - - obsolete fermented grape beverage - ENVO - ENVO:0010006 - FOODON:00001095 - true - - - - - - - - obsolete fermented Elaeis Palm beverage - ENVO - ENVO:0010007 - FOODON:00001096 - true - - - - - - - - obsolete fermented sugar cane beverage - ENVO - ENVO:0010008 - FOODON:00001097 - true - - - - - - - - obsolete fermented apple beverage - ENVO - ENVO:00003892 - ENVO:0010009 - FOODON:00001098 - fermented apple - true - - - - - - - - obsolete apple beverage - ENVO - ENVO:0010010 - FOODON:00001099 - true - - - - - - - - obsolete orange fruit beverage - ENVO - ENVO:0010011 - FOODON:00001100 - true - - - - - - - - obsolete grape beverage - ENVO - ENVO:0010012 - FOODON:00001101 - true - - - - - - - - obsolete fermented cereal beverage - ENVO - ENVO:0010013 - FOODON:00001102 - true - - - - - - - - obsolete fermented agave beverage - ENVO - ENVO:0010014 - FOODON:00001103 - true - - - - - - - - obsolete fermented soya product - ENVO - ENVO:0010015 - true - - - - - - - - obsolete sea water fish egg product - ENVO - ENVO:0010016 - FOODON:00001104 - true - - - - - - - - obsolete avian egg product - ENVO - ENVO:0010017 - FOODON:00001105 - true - - - - - - - - obsolete camelid dairy product - ENVO - ENVO:0010018 - FOODON:00001106 - true - - - - - - - - obsolete bovine dairy product - ENVO - ENVO:0010019 - FOODON:00001107 - true - - - - - - - - obsolete buffalo dairy product - ENVO - ENVO:0010020 - FOODON:00001108 - true - - - - - - - - obsolete caprine dairy product - ENVO - ENVO:0010021 - FOODON:00001109 - true - - - - - - - - obsolete donkey dairy product - ENVO - ENVO:0010022 - FOODON:00001110 - true - - - - - - - - obsolete equine dairy product - ENVO - ENVO:0010023 - FOODON:00001111 - true - - - - - - - - obsolete ovine dairy product - ENVO - ENVO:0010024 - FOODON:00001112 - true - - - - - - - - obsolete yak dairy product - ENVO - ENVO:0010025 - FOODON:00001113 - true - - - - - - - - obsolete zebra dairy product - ENVO - ENVO:0010026 - FOODON:00001114 - true - - - - - - - - obsolete reindeer dairy product - ENVO - ENVO:0010027 - FOODON:00001115 - true - - - - - - - - obsolete water buffalo dairy product - ENVO - ENVO:0010028 - FOODON:00001116 - true - - - - - - - - obsolete horse dairy product - ENVO - ENVO:0010029 - FOODON:00001117 - true - - - - - - - - obsolete domestic cattle dairy product - ENVO - ENVO:0010030 - FOODON:00001118 - true - - - - - - - - obsolete cervid dairy product - ENVO - ENVO:0010031 - FOODON:00001119 - true - - - - - - - - obsolete camelid milk - ENVO - ENVO:0010032 - FOODON:00001120 - true - - - - - - - - obsolete equine milk - ENVO - ENVO:0010033 - FOODON:00001121 - true - - - - - - - - obsolete cervid milk - ENVO - ENVO:0010034 - FOODON:00001122 - true - - - - - - - - obsolete cow's milk - ENVO - ENVO:0010035 - FOODON:00001123 - true - - - - - - - - obsolete caprine cheese product - ENVO - ENVO:0010036 - FOODON:00001124 - true - - - - - - - - obsolete ovine cheese product - ENVO - ENVO:0010037 - FOODON:00001125 - true - - - - - - - - obsolete bovine cheese product - ENVO - ENVO:0010038 - FOODON:00001126 - true - - - - - - - - obsolete cow's milk cheese - ENVO - ENVO:0010039 - FOODON:00001127 - true - - - - - - - - obsolete Limburger - ENVO - ENVO:0010040 - FOODON:00001128 - true - - - - - - - - obsolete goat's milk cheese - ENVO - ENVO:0010041 - FOODON:00001129 - true - - - - - - - - obsolete sheep's milk cheese - ENVO - ENVO:0010042 - FOODON:00001130 - true - - - - - - - - obsolete poultry meat product - ENVO - ENVO:0010043 - FOODON:00001131 - true - - - - - - - - obsolete porcine meat product - ENVO - ENVO:0010044 - FOODON:00001132 - true - - - - - - - - obsolete condiment - ENVO - ENVO:0010045 - FOODON:00001133 - true - - - - - - - - obsolete bovine meat product - ENVO - ENVO:0010046 - FOODON:00001134 - true - - - - - - - - obsolete distilled fermented grain beverage - ENVO - ENVO:0010047 - FOODON:00001135 - true - - - - - - - - obsolete distilled fermented beverage - ENVO - ENVO:0010048 - FOODON:00001136 - true - - - - - - - - obsolete soya food product - 2010-02-25T08:45:50Z - ENVO - ENVO:0010049 - FOODON:00001137 - michaelashburner - true - - - - - - - - obsolete tea-based beverage - ENVO - ENVO:0010050 - FOODON:00001138 - true - - - - - - - - obsolete coffee-based beverage - ENVO - ENVO:0010051 - FOODON:00001139 - true - - - - - - - - obsolete fruit juice beverage - ENVO - ENVO:0010052 - FOODON:00001140 - true - - - - - - - - obsolete wheat product - ENVO - ENVO:0010053 - FOODON:00001141 - true - - - - - - - - obsolete maize product - ENVO - ENVO:0010054 - FOODON:00001142 - true - - - - - - - - obsolete fungal product - ENVO - ENVO:0010055 - FOODON:00001143 - true - - - - - - - - obsolete yeast product - ENVO - ENVO:0010056 - FOODON:00001144 - true - - - - - - - - obsolete microbial food product - ENVO - ENVO:0010057 - FOODON:00001145 - true - - - - - - - - obsolete solanaceous root product - ENVO - ENVO:0010058 - FOODON:00001146 - true - - - - - - - - obsolete plant root food product - ENVO - ENVO:0010059 - FOODON:00001147 - true - - - - - - - - obsolete potato product - ENVO - ENVO:0010060 - FOODON:00001148 - true - - - - - - - - obsolete confectionery product - ENVO - ENVO:0010061 - FOODON:00001149 - true - - - - - - - - obsolete cucurbit fruit product - ENVO - ENVO:0010062 - FOODON:00001150 - true - - - - - - - - obsolete citrus fruit product - ENVO - ENVO:0010063 - FOODON:00001151 - true - - - - - - - - obsolete melon fruit product - ENVO - ENVO:0010064 - FOODON:00001152 - true - - - - - - - - obsolete Cucumis melo fruit - ENVO - ENVO:0010065 - FOODON:00001153 - true - - - - - - - - obsolete Citrullus lanatus fruit - ENVO - ENVO:0010066 - FOODON:00001154 - true - - - - - - - - obsolete watermelon - ENVO - ENVO:0010067 - FOODON:00001155 - true - - - - - - - - obsolete citrus fruit beverage - ENVO - ENVO:0010068 - FOODON:00001156 - true - - - - - - - - obsolete pomaceous fruit beverage - ENVO - ENVO:0010069 - FOODON:00001157 - true - - - - - - - - obsolete pomaceous fruit product - ENVO - ENVO:0010070 - FOODON:00001158 - true - - - - - - - - obsolete fermented pomaceous fruit beverage - ENVO - ENVO:0010071 - FOODON:00001159 - true - - - - - - - - obsolete pomaceous fruit extract - ENVO - ENVO:0010072 - FOODON:00001160 - true - - - - - - - - obsolete citrus fruit extract - ENVO - ENVO:0010073 - FOODON:00001161 - true - - - - - - - - obsolete grape extract - ENVO - ENVO:0010074 - FOODON:00001162 - true - - - - - - - - obsolete solanaceous fruit product - ENVO - ENVO:0010075 - FOODON:00001163 - true - - - - - - - - obsolete tomato product - ENVO - ENVO:0010076 - FOODON:00001164 - true - - - - - - - - obsolete solanaceous food product - ENVO - ENVO:0010077 - FOODON:00001165 - true - - - - - - - - obsolete plant inflorescence food product - ENVO - ENVO:0010078 - FOODON:00001166 - true - - - - - - - - obsolete amaranthaceous food product - ENVO - ENVO:0010079 - FOODON:00001167 - true - - - - - - - - obsolete leguminous food product - Definitions and types from http://www.fao.org/WAICENT/faoinfo/economic/faodef/fdef04e.htm. - ENVO - ENVO:0010080 - FOODON:00001168 - pulse - true - - - - - - - - obsolete cruciferous food product - ENVO - ENVO:0010081 - FOODON:00001169 - true - - - - - - - - obsolete grape fruit product - ENVO - ENVO:0010082 - FOODON:00001170 - true - - - - - - - - obsolete cruciferous inflorescence food product - ENVO - ENVO:0010083 - FOODON:00001171 - true - - - - - - - - obsolete nut food product - ENVO - ENVO:0010084 - FOODON:00001172 - true - - - - - - - - obsolete plant seed food product - ENVO - ENVO:0010085 - FOODON:00001173 - true - - - - - - - - obsolete plant lipid food product - ENVO - ENVO:0010086 - FOODON:00001174 - true - - - - - - - - obsolete plant stem food product - ENVO - ENVO:0010087 - FOODON:00001175 - true - - - - - - - - obsolete invertebrate food product - ENVO - ENVO:0010088 - FOODON:00001176 - true - - - - - - - - obsolete insect food product - ENVO - ENVO:0010089 - FOODON:00001177 - true - - - - - - - - obsolete honey product - ENVO - ENVO:0010090 - FOODON:00001178 - true - - - - - - - - obsolete amaranthaceous inflorescence food product - ENVO - ENVO:0010091 - FOODON:00001179 - true - - - - - - - - obsolete processed food product - ENVO - ENVO:0010092 - FOODON:00001180 - true - - - - - - - - obsolete cooked food product - ENVO - ENVO:0010093 - FOODON:00001181 - true - - - - - - - - obsolete pickled cruciferous food product - ENVO - ENVO:0010094 - FOODON:00001182 - true - - - - - - - - obsolete bread - ENVO - ENVO:0010095 - FOODON:00001183 - true - - - - - - - - obsolete algal food product - ENVO - ENVO:0010096 - FOODON:00001184 - true - - - - - - - - obsolete rice product - ENVO - ENVO:0010097 - FOODON:00001185 - true - - - - - - - - obsolete buckewheat product - ENVO - ENVO:0010098 - FOODON:00001186 - true - - - - - - - - obsolete sorghum product - ENVO - ENVO:0010099 - FOODON:00001187 - true - - - - - - - - obsolete milet product - ENVO - ENVO:0010100 - FOODON:00001188 - true - - - - - - - - obsolete oats product - ENVO - ENVO:0010101 - FOODON:00001189 - true - - - - - - - - obsolete rye product - ENVO - ENVO:0010102 - FOODON:00001190 - true - - - - - - - - obsolete barley product - ENVO - ENVO:0010103 - FOODON:00001191 - true - - - - - - - - obsolete quinoa product - ENVO - ENVO:0010104 - FOODON:00001192 - true - - - - - - - - obsolete fonio product - ENVO - ENVO:0010105 - FOODON:00001193 - true - - - - - - - - obsolete dry peas product - ENVO - ENVO:0010106 - FOODON:00001194 - true - - - - - - - - obsolete lentil product - ENVO - ENVO:0010107 - FOODON:00001195 - true - - - - - - - - obsolete pigeon pea product - ENVO - ENVO:0010108 - FOODON:00001196 - true - - - - - - - - obsolete bambara groundnut product - ENVO - ENVO:0010109 - FOODON:00001197 - true - - - - - - - - obsolete dry broad beans product - ENVO - ENVO:0010110 - FOODON:00001198 - true - - - - - - - - obsolete chickpea product - ENVO - ENVO:0010111 - FOODON:00001199 - true - - - - - - - - obsolete cowpea product - ENVO - ENVO:0010112 - FOODON:00001200 - true - - - - - - - - obsolete dry beans product - ENVO - ENVO:0010113 - FOODON:00001201 - true - - - - - - - - obsolete winged bean product - ENVO - ENVO:0010114 - FOODON:00001202 - true - - - - - - - - obsolete vetch seed product - ENVO - ENVO:0010115 - FOODON:00001203 - true - - - - - - - - obsolete yam bean product - ENVO - ENVO:0010116 - FOODON:00001204 - true - - - - - - - - obsolete velvet bean product - ENVO - ENVO:0010117 - FOODON:00001205 - true - - - - - - - - obsolete lupin seed product - ENVO - ENVO:0010118 - FOODON:00001206 - true - - - - - - - - obsolete jack bean product - ENVO - ENVO:0010119 - FOODON:00001207 - true - - - - - - - - obsolete hyacinth bean product - ENVO - ENVO:0010120 - FOODON:00001208 - true - - - - - - - - obsolete pulse - ENVO - ENVO:0010121 - FOODON:00001209 - true - This has to be reconciled with "legume". Seems to be a subclass. - According to the FAO: 'The term "pulses" is limited to crops harvested solely for dry grain, thereby excludingcrops harvested green for food (green peas, green beans, etc.) which are classified as vegetable crops. Also excluded are those crops used mainly for oil extraction (e.g.soybeand and groundnuts) and leguminous crops (e.g. seeds of clover and alfalfa) that are used exclusively for sowing purposes.' - - - http://www.fao.org/WAICENT/faoinfo/economic/faodef/fdef04e.htm#4.02 - According to the FAO: 'The term "pulses" is limited to crops harvested solely for dry grain, thereby excludingcrops harvested green for food (green peas, green beans, etc.) which are classified as vegetable crops. Also excluded are those crops used mainly for oil extraction (e.g.soybeand and groundnuts) and leguminous crops (e.g. seeds of clover and alfalfa) that are used exclusively for sowing purposes.' - - - - - - - - - - obsolete wheat flour - ENVO - ENVO:0010122 - FOODON:00001210 - true - - - - - - - - obsolete pasta - ENVO - ENVO:0010123 - FOODON:00001211 - true - - - - - - - - obsolete pastry - ENVO - ENVO:0010124 - FOODON:00001212 - true - - - - - - - - obsolete baked food product - ENVO - ENVO:0010125 - FOODON:00001213 - true - - - - - - - - obsolete candy - ENVO - ENVO:0010126 - FOODON:00001214 - true - - - - - - - - obsolete cacao food product - ENVO - ENVO:0010127 - FOODON:00001215 - true - - - - - - - - obsolete cream - ENVO - ENVO:0010128 - FOODON:00001216 - true - - - - - - - - obsolete milk - ENVO - ENVO:0010129 - FOODON:00001217 - true - - - - - - - - obsolete bee food product - ENVO - ENVO:0010130 - FOODON:00001218 - true - - - - - - - - obsolete cooked smoked sausage - ENVO - ENVO:0010131 - FOODON:00001219 - true - - - - - - - - obsolete smoked sausage - ENVO - ENVO:0010132 - FOODON:00001220 - true - - - - - - - - obsolete fresh smoked sausage - ENVO - ENVO:0010133 - FOODON:00001221 - true - - - - - - - - obsolete fresh sausage - ENVO - ENVO:0010134 - FOODON:00001222 - true - - - - - - - - obsolete dry sausage - ENVO - ENVO:0010135 - FOODON:00001223 - true - - - - - - - - obsolete cooked sausage - ENVO - ENVO:0010136 - FOODON:00001224 - true - - - - - - - - obsolete smoked meat - ENVO - ENVO:0010137 - FOODON:00001225 - true - - - - - - - - obsolete fruit preserve - ENVO - ENVO:0010138 - FOODON:00001226 - true - - - - - - - - obsolete jam - ENVO - ENVO:0010139 - FOODON:00001227 - true - - - - - - - - obsolete rennet product - ENVO - ENVO:0010140 - FOODON:00001228 - true - - - - - - - - obsolete processed cheese product - ENVO - ENVO:0010141 - FOODON:00001229 - true - - - - - - - - obsolete mustard - ENVO - ENVO:0010142 - FOODON:00001230 - true - - - - - - - - obsolete creamy salad dressing - ENVO - ENVO:0010143 - FOODON:00001231 - true - - - - - - - - obsolete vinaigrette - ENVO - ENVO:0010144 - FOODON:00001232 - true - - - - - - - - obsolete nut oil - ENVO - ENVO:0010146 - FOODON:00001233 - true - - - - - - - - obsolete mayonnaise - ENVO - ENVO:0010147 - FOODON:00001234 - true - - - - - - - - obsolete soy sauce - ENVO - ENVO:00003916 - ENVO:0010148 - FOODON:00001235 - https://en.wikipedia.org/wiki/Soy_sauce - true - - - - - - - - obsolete fresh sea water fish - ENVO - ENVO:0010149 - FOODON:00001236 - true - - - - - - - - obsolete natural rennet - ENVO - ENVO:0010150 - FOODON:00001237 - true - - - - - - - - obsolete microbial rennet - ENVO - ENVO:0010151 - FOODON:00001238 - true - - - - - - - - obsolete vegetable rennet - ENVO - ENVO:0010152 - FOODON:00001239 - true - - - - - - - - obsolete genetically engineered rennet - ENVO - ENVO:0010153 - FOODON:00001240 - true - - - - - - - - obsolete processed pork - ENVO - ENVO:0010154 - FOODON:00001241 - true - - - - - - - - obsolete spice product - ENVO - ENVO:0010155 - FOODON:00001242 - true - - - - - - - - obsolete animal lipid food product - ENVO - ENVO:0010156 - FOODON:00001243 - true - - - - - - - - obsolete coffee - ENVO - ENVO:0010157 - FOODON:00001244 - true - - - - - - - - obsolete tea - ENVO - ENVO:0010158 - FOODON:00001245 - true - - - - - - - - obsolete hot chocolate - ENVO - ENVO:0010159 - FOODON:00001246 - true - - - - - - - - obsolete mate - ENVO - ENVO:0010160 - EcoLexicon:mating - FOODON:00001247 - true - - - - - - - - obsolete naturally occuring environmental material - ENVO - ENVO:0010161 - ENVO:01000155 - true - - - - - - - - dry stream valley - - ENVO - ENVO:0010162 - Requires some relation like "formed by" erosion process with participant stream. - - - - - - - - dry river valley - - ENVO - ENVO:0010163 - Requires some relation like "formed by" erosion process with participant river. - - - - - - - - obsolete fish food product - ENVO - ENVO:0010164 - FOODON:00001248 - true - - - - - - - - obsolete freshwater fish product - ENVO - ENVO:0010165 - FOODON:00001249 - true - - - - - - - - obsolete fish egg product - ENVO - ENVO:0010166 - FOODON:00001250 - true - - - - - - - - obsolete avian food product - ENVO - ENVO:0010167 - FOODON:00001251 - true - - - - - - - - obsolete animal derived beverage - 2010-02-25T08:36:43Z - ENVO - ENVO:0010168 - FOODON:00001252 - michaelashburner - true - - - - - - - - obsolete plant derived beverage - 2010-02-25T08:37:10Z - ENVO - ENVO:0010169 - FOODON:00001253 - michaelashburner - true - - - - - - - - obsolete fermented plant derived beverage - 2010-02-25T08:37:36Z - ENVO - ENVO:0010170 - FOODON:00001254 - michaelashburner - true - - - - - - - - obsolete non-fermented plant derived beverage - 2010-02-25T08:38:17Z - ENVO - ENVO:0010171 - FOODON:00001255 - michaelashburner - true - - - - - - - - humus - - - - - - - - - - - - - - ENVO - ENVO:01000000 - EcoLexicon:humus - Organic matter in soil which has reached a point of stability, where it will break down no further and might, if conditions do not change, remain essentially as it is for centuries, or millennia. - SWEETRealm:Humus - https://en.wikipedia.org/wiki/Humus - - - Organic matter in soil which has reached a point of stability, where it will break down no further and might, if conditions do not change, remain essentially as it is for centuries, or millennia. - https://en.wikipedia.org/wiki/Humus - - - - - - - - - - mud - - - - - - - - - - - - - - - - - - - - - - - - - - A liquid or semi-liquid mixture of water and some combination of soil, silt, and clay. - EcoLexicon:mud - LTER:356 - SWEETRealm:Mud - https://en.wikipedia.org/wiki/Mud - - - A liquid or semi-liquid mixture of water and some combination of soil, silt, and clay. - https://en.wikipedia.org/wiki/Mud - - - - - - - - - - water well - - ENVO - ENVO:01000002 - https://en.wikipedia.org/wiki/Water_well - - - - - - - - oil well - - ENVO - ENVO:01000003 - https://en.wikipedia.org/wiki/Oil_well - - - - - - - - concentration basin mediterranean sea biome - - 2010-03-19T09:32:59Z - ENVO - ENVO:01000004 - ORCID:0000-0002-4366-3088 - The concentration basin mediterranean sea biome comprises expressions of the mediterranean sea biome that have higher salinity than bordering oceans due to evaporation. Water exchange consists of inflow of the fresher oceanic water in the upper layer and outflow of the saltier mediterranean water in the lower layer of the connecting channel. - - - ORCID:0000-0002-4366-3088 - The concentration basin mediterranean sea biome comprises expressions of the mediterranean sea biome that have higher salinity than bordering oceans due to evaporation. Water exchange consists of inflow of the fresher oceanic water in the upper layer and outflow of the saltier mediterranean water in the lower layer of the connecting channel. - https://en.wikipedia.org/wiki/Mediterranean_sea - - - - - - - - - - upwelling - - - - - - - - - ENVO - ENVO:01000005 - ENVO:01000063 - EcoLexicon:upwell - EcoLexicon:upwelling - MERGED DEFINITION: -TARGET DEFINITION: An oceanographic feature that involves wind-driven motion of dense, cooler, and usually nutrient-rich water towards the ocean surface, replacing the warmer, usually nutrient-deplete surface water. --------------------- -SOURCE DEFINITION: A marine upwelling is a net flow of marine water to the surface of the water column from deeper regions. This is often a result of surface water displacement off continental coasts by wind action. Localised upwellings may also occur along divergent fronts around eddies and along some of the major oceanographic features. Deeper waters often have higher nutrient content; consequently blooms of primary producers, such as planktonic algae, are generally observed around upwelling zones. - SWEETRealm:Upwelling - This term is specific to marine upwellings. - https://en.wikipedia.org/wiki/Upwelling - marine upwelling - - - MERGED DEFINITION: -TARGET DEFINITION: An oceanographic feature that involves wind-driven motion of dense, cooler, and usually nutrient-rich water towards the ocean surface, replacing the warmer, usually nutrient-deplete surface water. --------------------- -SOURCE DEFINITION: A marine upwelling is a net flow of marine water to the surface of the water column from deeper regions. This is often a result of surface water displacement off continental coasts by wind action. Localised upwellings may also occur along divergent fronts around eddies and along some of the major oceanographic features. Deeper waters often have higher nutrient content; consequently blooms of primary producers, such as planktonic algae, are generally observed around upwelling zones. - https://en.wikipedia.org/wiki/Upwelling - - - - - - - - - - coastal upwelling - - - - - - - - - - - - - - - - - - - An upwelling that is near a coast. - ENVO - ENVO:01000006 - https://en.wikipedia.org/wiki/Coastal_upwelling - - - An upwelling that is near a coast. - ORCID:0000-0002-4366-3088 - - - - - - - - - - microbial feature - - ENVO - ENVO:01000007 - envoPolar - - - - - - - - microbial mat - - A multi-layered sheet of micro-organisms, mainly bacteria and archaea. Microbial mats grow at interfaces between different types of material, mostly on submerged or moist surfaces but a few survive in deserts. - ENVO - ENVO:01000008 - https://en.wikipedia.org/wiki/Microbial_mat - - - - A multi-layered sheet of micro-organisms, mainly bacteria and archaea. Microbial mats grow at interfaces between different types of material, mostly on submerged or moist surfaces but a few survive in deserts. - https://en.wikipedia.org/wiki/Microbial_mat - - - - - - - - - - biotic mesoscopic physical object - - organic material feature - - - - - - - - abiotic mesoscopic physical object - - ENVO - ENVO:01000010 - - - - - - - - obsolete dairy product - ENVO - ENVO:01000011 - FOODON:00001256 - https://en.wikipedia.org/wiki/Dairy_product - true - - - - - - - - obsolete milk product - ENVO - ENVO:01000012 - FOODON:00001257 - https://en.wikipedia.org/wiki/Milk - true - - - - - - - - obsolete fermented food product - ENVO - ENVO:01000013 - FOODON:00001258 - https://en.wikipedia.org/wiki/Fermented_food - true - - - - - - - - obsolete wine - ENVO - ENVO:01000014 - FOODON:00001259 - https://en.wikipedia.org/wiki/Wine - true - - - - - - - - obsolete beer - ENVO - ENVO:01000015 - FOODON:00001260 - https://en.wikipedia.org/wiki/Beer - true - - - - - - - - silt - - - - - - - - - - - - - - - EcoLexicon:silt - SWEETRealm:Silt - Silt is granular material of a size somewhere between sand and clay whose mineral origin is quartz and feldspar. - https://en.wikipedia.org/wiki/ In the Udden-Wentworth scale (due to Krumbein), silt particles range between 0.0039 to 0.0625 mm, larger than clay but smaller than sand particles. ISO 14688 grades silts between 0.002 mm and 0.063 mm. In actuality, silt is chemically distinct from clay, and unlike clay, grains of silt are approximately the same size in all dimensions; furthermore, their size ranges overlap. Clays are formed from thin plate-shaped particles held together by electrostatic forces, so present a cohesion. According to the U.S. Department of Agriculture Soil Texture Classification system, the sand-silt distinction is made at the 0.05 mm particle size. The USDA system has been adopted by the Food and Agriculture Organization (FAO). In the Unified Soil Classification System (USCS) and the AASHTO Soil Classification system, the sand-silt distinction is made at the 0.075 mm particle size (i.e., material passing the #200 sieve). Silts and clays are distinguished mechanically by their plasticity. - https://en.wikipedia.org/wiki/Silt - - - Silt is granular material of a size somewhere between sand and clay whose mineral origin is quartz and feldspar. - https://en.wikipedia.org/wiki/Silt - - - - - - - - - - sand - - - - - - - - A naturally occurring granular material composed of finely divided rock and mineral particles. - ENVO - ENVO:01000017 - EcoLexicon:sand - LTER:484 - SWEETRealm:Sand - https://en.wikipedia.org/wiki/Sand - - - A naturally occurring granular material composed of finely divided rock and mineral particles. - https://en.wikipedia.org/wiki/Sand - - - - - - - - - - gravel - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENVO - ENVO:01000018 - EcoLexicon:gravel - Gravel is an environmental material which is composed of pieces of rock that are at least two millimeters (2mm) in its largest dimension and no more than 75 millimeters. - SWEETRealm:Gravel - https://en.wikipedia.org/wiki/Gravel - The logical def is a little off here - it should really suggest that a gravel is composed of many "pieces" of gravel. - - - Gravel is an environmental material which is composed of pieces of rock that are at least two millimeters (2mm) in its largest dimension and no more than 75 millimeters. - https://en.wikipedia.org/wiki/Gravel - - - - - - - - - - cave floor - - - - - - - - ENVO - ENVO:01000019 - surface layer with role "walking substrate" or similar. Indicate it is some sort of "bottom" - - - - - - - - estuarine biome - - 2010-03-15T11:17:06Z - ENVO - ENVO:01000020 - Expressions of the estuarine biome occur at wide lower courses of a rivers where they flow into a sea. Estuaries experience tidal flows and their water is a changing mixture of fresh and salt. - ORCID:0000-0002-4366-3088 - SPIRE:Estuarine - - - Expressions of the estuarine biome occur at wide lower courses of a rivers where they flow into a sea. Estuaries experience tidal flows and their water is a changing mixture of fresh and salt. - ISBN-10:0618455043 - ORCID:0000-0002-4366-3088 - - - - - - - - - - obsolete mangrove biome - 2010-03-15T11:17:06Z - ENVO - ENVO:01000021 - ENVO:01000181 - Expressions of the mangrove biome are typically found in tropical and sub-tropical tidal areas, in depositional coastal environments where fine sediments (often with high organic content) collect in areas protected from high energy wave action. A variety of characteristic trees and shrubs occur here and are able to withstand a high degree of salinity as well as regions of anoxia and frequent tidal inundation. These areas include estuaries and marine shorelines. - ORCID:0000-0002-4366-3088 - true - - - Expressions of the mangrove biome are typically found in tropical and sub-tropical tidal areas, in depositional coastal environments where fine sediments (often with high organic content) collect in areas protected from high energy wave action. A variety of characteristic trees and shrubs occur here and are able to withstand a high degree of salinity as well as regions of anoxia and frequent tidal inundation. These areas include estuaries and marine shorelines. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Mangrove - - - - - - - - - - marine salt marsh biome - - 2010-03-15T11:17:06Z - ENVO - ENVO:01000022 - ORCID:0000-0002-4366-3088 - The marine salt marsh biome comprises marshes that are transitional intertidals between land and salty or brackish marine water (e.g.: sloughs, bays, estuaries). It is dominated by halophytic (salt tolerant) herbaceous plants. The daily tidal surges bring in nutrients, which tend to settle in roots of the plants within the salt marsh. The natural chemical activity of salty (or brackish) water and the tendency of algae to bloom in the shallow unshaded water also allow for great biodiversity. - - - ORCID:0000-0002-4366-3088 - The marine salt marsh biome comprises marshes that are transitional intertidals between land and salty or brackish marine water (e.g.: sloughs, bays, estuaries). It is dominated by halophytic (salt tolerant) herbaceous plants. The daily tidal surges bring in nutrients, which tend to settle in roots of the plants within the salt marsh. The natural chemical activity of salty (or brackish) water and the tendency of algae to bloom in the shallow unshaded water also allow for great biodiversity. - https://en.wikipedia.org/wiki/Salt_marsh - - - - - - - - - - marine pelagic biome - - - - - - - - 2010-03-15T11:17:06Z - ENVO - ENVO:01000023 - ORCID:0000-0002-4366-3088 - The marine pelagic biome (pelagic meaning open sea) is that of the marine water column, from the surface to the greatest depths. - envoPolar - - - ISBN:0750633840 - The marine pelagic biome (pelagic meaning open sea) is that of the marine water column, from the surface to the greatest depths. - - - - - - - - - - marine benthic biome - - 2010-03-15T11:17:06Z - ENVO - ENVO:01000024 - ORCID:0000-0002-4366-3088 - SPIRE:Benthic - The marine benthic biome (benthic meaning 'bottom') encompasses the seafloor and includes such areas as shores, littoral or intertidal areas, marine coral reefs, and the deep seabed. - envoPolar - - - ISBN:0750633840 - ORCID:0000-0002-4366-3088 - The marine benthic biome (benthic meaning 'bottom') encompasses the seafloor and includes such areas as shores, littoral or intertidal areas, marine coral reefs, and the deep seabed. - - - - - - - - - - marine neritic benthic zone biome - - 2010-03-15T11:18:40Z - ENVO - ENVO:01000025 - ORCID:0000-0002-4366-3088 - The marine neritic zone biome comprises sea floor from the high tide mark to a continental shelf break. This zone generally extends to 200 m below average sea level. - envoPolar - - - ISBN:044482619X - ISBN:0750633840 - ORCID:0000-0002-4366-3088 - The marine neritic zone biome comprises sea floor from the high tide mark to a continental shelf break. This zone generally extends to 200 m below average sea level. - - - - - - - - - - marine bathyal zone biome - - 2010-03-15T11:18:40Z - ENVO - ENVO:01000026 - ORCID:0000-0002-4366-3088 - The mariine bathyal zone biome comprises regions of the marine benthic biome between approximately 200 m and 3000 m depth. This zone generally coincides with the continental slope. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The mariine bathyal zone biome comprises regions of the marine benthic biome between approximately 200 m and 3000 m depth. This zone generally coincides with the continental slope. - - - - - - - - - - marine abyssal zone biome - - 2010-03-15T11:18:40Z - ENVO - ENVO:01000027 - ORCID:0000-0002-4366-3088 - The marine abyssal zone biome comprises regions of the marine benthic biome between approximately 2500 m and 6000 m depth. This zone generally coincides with the continental rise and the abyssal plain. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The marine abyssal zone biome comprises regions of the marine benthic biome between approximately 2500 m and 6000 m depth. This zone generally coincides with the continental rise and the abyssal plain. - - - - - - - - - - marine hadal zone biome - - 2010-03-15T11:18:40Z - ENVO - ENVO:01000028 - ORCID:0000-0002-4366-3088 - The marine hadal zone biome describes sea floor deeper than 6000 m such as that of the oceanic trenches. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The marine hadal zone biome describes sea floor deeper than 6000 m such as that of the oceanic trenches. - - - - - - - - - - marine reef biome - - 2010-03-15T11:18:40Z - A biome expressed by strips or ridges of rocks, sand, or coral that rises to or near the surface of a body of marine water. - ENVO - ENVO:01000029 - ORCID:0000-0002-4366-3088 - - - A biome expressed by strips or ridges of rocks, sand, or coral that rises to or near the surface of a body of marine water. - ISBN-10:0618455043 - ORCID:0000-0002-4366-3088 - - - - - - - - - - marine hydrothermal vent biome - - 2010-03-15T11:18:40Z - ENVO - ENVO:01000030 - ORCID:0000-0002-4366-3088 - The marine hydrothermal vent biome comprises regions of the marine benthic biome where heat generated due to tectonic activity, either at divergent plate boundaries or convergent ocean plates where back-arc spreading occurs, is released or 'vented' to the surface. The resultant high temperature water jets are laden with dissolved metals and minerals. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The marine hydrothermal vent biome comprises regions of the marine benthic biome where heat generated due to tectonic activity, either at divergent plate boundaries or convergent ocean plates where back-arc spreading occurs, is released or 'vented' to the surface. The resultant high temperature water jets are laden with dissolved metals and minerals. - - - - - - - - - - obsolete marine feature - 2010-03-16T12:04:50Z - A prominent or distinctive aspect, quality, or characteristic of a marine biome. - ENVO - ENVO:00001999 - ENVO:01000031 - ORCID:0000-0002-4366-3088 - true - - - A prominent or distinctive aspect, quality, or characteristic of a marine biome. - ISBN-10:0618455043 - ORCID:0000-0002-4366-3088 - - - - - - - - - - neritic pelagic zone biome - - - 2010-03-15T11:19:19Z - ENVO - ENVO:01000032 - ORCID:0000-0002-4366-3088 - The neritic epipelagic zone biome comprises the marine water column above a continental shelf. - - - ISBN:044482619X - ISBN:0750633840 - ORCID:0000-0002-4366-3088 - The neritic epipelagic zone biome comprises the marine water column above a continental shelf. - - - - - - - - - - oceanic pelagic zone biome - - 2010-03-15T11:19:19Z - ENVO - ENVO:01000033 - ORCID:0000-0002-4366-3088 - The oceanic epipelagic zone biome comprises the marine water column offshore, beyond a continental shelf. - - - ISBN:044482619X - ISBN:0750633840 - ORCID:0000-0002-4366-3088 - The oceanic epipelagic zone biome comprises the marine water column offshore, beyond a continental shelf. - - - - - - - - - - oceanic sea surface microlayer biome - - 2010-03-15T11:21:03Z - ENVO - ENVO:01000034 - ORCID:0000-0002-4366-3088 - The oceanic sea surface microlayer (SML) biome comprises the top 1000 micrometers of the marine surface waters occurring offshore, away from a continental shelf. It is the boundary layer where all exchange occurs between the atmosphere and the ocean. The chemical, physical, and biological properties of the SML differ greatly from the sub-surface water just a few centimeters beneath. - - - ORCID:0000-0002-4366-3088 - The oceanic sea surface microlayer (SML) biome comprises the top 1000 micrometers of the marine surface waters occurring offshore, away from a continental shelf. It is the boundary layer where all exchange occurs between the atmosphere and the ocean. The chemical, physical, and biological properties of the SML differ greatly from the sub-surface water just a few centimeters beneath. - https://en.wikipedia.org/wiki/Sea_surface_microlayer - - - - - - - - - - oceanic epipelagic zone biome - - 2010-03-15T11:21:03Z - ENVO - ENVO:01000035 - ORCID:0000-0002-4366-3088 - The oceanic epipelagic zone biome comprises regions of the marine water column that occur offshore, beyond a continental shelf. This biome extends from the surface of the ocean to a depth of ca. 200-250m. Throughout the zone the light field tends to be asymmetrical vertically, so that the direction and elevation of the sun can still be detected. The oceanic epipelagic zone biome encompasses the euphotic zone and, where and when it occurs, the seasonal thermocline. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The oceanic epipelagic zone biome comprises regions of the marine water column that occur offshore, beyond a continental shelf. This biome extends from the surface of the ocean to a depth of ca. 200-250m. Throughout the zone the light field tends to be asymmetrical vertically, so that the direction and elevation of the sun can still be detected. The oceanic epipelagic zone biome encompasses the euphotic zone and, where and when it occurs, the seasonal thermocline. - - - - - - - - - - oceanic mesopelagic zone biome - - 2010-03-15T11:21:03Z - ENVO - ENVO:01000036 - ORCID:0000-0002-4366-3088 - The oceanic mesopelagic zone biome comprises regions of the marine water column that occur offshore, beyond a continental shelf. This biome extends through the water column from approximately 200-1000 m depth - the maximal depth of light penetration in all but the clearest oligotrophic ocean regions. In comparison to the epipelagic zone, dominant forms of pelagic organisms do not change very much; however, there are marked changes in species composition and the proportion of smaller-sized individuals decreases. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The oceanic mesopelagic zone biome comprises regions of the marine water column that occur offshore, beyond a continental shelf. This biome extends through the water column from approximately 200-1000 m depth - the maximal depth of light penetration in all but the clearest oligotrophic ocean regions. In comparison to the epipelagic zone, dominant forms of pelagic organisms do not change very much; however, there are marked changes in species composition and the proportion of smaller-sized individuals decreases. - - - - - - - - - - oceanic bathypelagic zone biome - - 2010-03-15T11:21:03Z - ENVO - ENVO:01000037 - ORCID:0000-0002-4366-3088 - The bathypelagic zone biome comprises the marine water column below approximately 1000 m water depth - the maximum depth to which detectable daylight penetrates in all but the clearest oligotrophic waters - and extends to about 2500 - 2700 m water depth. In the temperate Atlantic, the beginning of the bathypelagic zone biome approximates to the deep oxygen minimum and the base of the permanent thermocline. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The bathypelagic zone biome comprises the marine water column below approximately 1000 m water depth - the maximum depth to which detectable daylight penetrates in all but the clearest oligotrophic waters - and extends to about 2500 - 2700 m water depth. In the temperate Atlantic, the beginning of the bathypelagic zone biome approximates to the deep oxygen minimum and the base of the permanent thermocline. - - - - - - - - - - oceanic abyssopelagic zone biome - - 2010-03-15T11:21:03Z - ENVO - ENVO:01000038 - ORCID:0000-0002-4366-3088 - The abyssopelagic zone biome comprises the marine water column below the bathypelagic zone biome at approximately 2500 -2700 m and extends either to the hadal pelagic zone biome (at approximately 6000 m) or to the benthopelagic zone biome within ca. 100 m of the seafloor. The depth of 2700 m may be critical for physiological reasons as the change in hydrostatic pressure across this depth may preclude organism migration. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The abyssopelagic zone biome comprises the marine water column below the bathypelagic zone biome at approximately 2500 -2700 m and extends either to the hadal pelagic zone biome (at approximately 6000 m) or to the benthopelagic zone biome within ca. 100 m of the seafloor. The depth of 2700 m may be critical for physiological reasons as the change in hydrostatic pressure across this depth may preclude organism migration. - - - - - - - - - - oceanic hadal pelagic zone biome - - 2010-03-15T11:21:03Z - ENVO - ENVO:01000039 - ORCID:0000-0002-4366-3088 - The oceanic hadal pelagic zone biome comprises the water column in oceanic trenches occurring at depths between 6000m and 10,000m. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The oceanic hadal pelagic zone biome comprises the water column in oceanic trenches occurring at depths between 6000m and 10,000m. - - - - - - - - - - oceanic benthopelagic zone biome - - 2010-03-15T11:21:03Z - ENVO - ENVO:01000040 - ORCID:0000-0002-4366-3088 - The benthopelagic zone biome comprises regions of the marine water column which usually coincide with the benthic boundary layer (BBL) - the layer of isothermal and isohaline water contiguous to the sea floor. A general reversal in the declining gradient of pelagic biomass may be observed here, perhaps explained by viable nutrition on the sea floor being resuspended by bottom currents. This zone typically extends 100 m above the seafloor, but may reach upto1000 m during benthic storms. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The benthopelagic zone biome comprises regions of the marine water column which usually coincide with the benthic boundary layer (BBL) - the layer of isothermal and isohaline water contiguous to the sea floor. A general reversal in the declining gradient of pelagic biomass may be observed here, perhaps explained by viable nutrition on the sea floor being resuspended by bottom currents. This zone typically extends 100 m above the seafloor, but may reach upto1000 m during benthic storms. - - - - - - - - - - neritic sea surface microlayer biome - - 2010-03-15T11:22:09Z - ENVO - ENVO:01000041 - ORCID:0000-0002-4366-3088 - The neritic sea surface microlayer (SML) biome comprises the top 1000 micrometers of marine surface waters occurring above a continental shelf. It is the boundary layer where all exchange occurs between the atmosphere and the ocean. The chemical, physical, and biological properties of the SML differ greatly from the sub-surface water just a few centimeters beneath. - - - ORCID:0000-0002-4366-3088 - The neritic sea surface microlayer (SML) biome comprises the top 1000 micrometers of marine surface waters occurring above a continental shelf. It is the boundary layer where all exchange occurs between the atmosphere and the ocean. The chemical, physical, and biological properties of the SML differ greatly from the sub-surface water just a few centimeters beneath. - https://en.wikipedia.org/wiki/Sea_surface_microlayer - - - - - - - - - - neritic epipelagic zone biome - - 2010-03-15T11:22:09Z - ENVO - ENVO:01000042 - ORCID:0000-0002-4366-3088 - The neritic epipelagic zone biome comprises the marine water column that occurs above a continental shelf and extends from the surface of the ocean to a depth of ca. 200-250m. Throughout the zone the light field tends to be asymmetrical vertically, so that the direction and elevation of the sun can still be detected. The epipelagic zone encompasses the euphotic zone and, where and when it occurs, the seasonal thermocline. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The neritic epipelagic zone biome comprises the marine water column that occurs above a continental shelf and extends from the surface of the ocean to a depth of ca. 200-250m. Throughout the zone the light field tends to be asymmetrical vertically, so that the direction and elevation of the sun can still be detected. The epipelagic zone encompasses the euphotic zone and, where and when it occurs, the seasonal thermocline. - - - - - - - - - - neritic mesopelagic zone biome - - 2010-03-15T11:22:09Z - ENVO - ENVO:01000043 - ORCID:0000-0002-4366-3088 - The neritic mesopelagic zone biome comprises the marine column that occurs above a continental shelf and extends from approximately 200 to 1000 m depth - the maximal depth of light penetration in all but the clearest oligotrophic ocean regions. In comparison to the epipelagic zone, dominant forms of pelagic organisms do not change very much; however, there are marked changes in species composition and the proportion of smaller-sized individuals decreases. - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The neritic mesopelagic zone biome comprises the marine column that occurs above a continental shelf and extends from approximately 200 to 1000 m depth - the maximal depth of light penetration in all but the clearest oligotrophic ocean regions. In comparison to the epipelagic zone, dominant forms of pelagic organisms do not change very much; however, there are marked changes in species composition and the proportion of smaller-sized individuals decreases. - - - - - - - - - - marine pelagic feature - - - - - - - - - - - - - - - - - - - - - 2010-03-16T12:10:50Z - A prominent or distinctive aspect, quality, or characteristic of environments occurring within the marine water column. - ENVO - ENVO:01000044 - ORCID:0000-0002-4366-3088 - envoPolar - - - A prominent or distinctive aspect, quality, or characteristic of environments occurring within the marine water column. - ISBN-10:0618455043 - ORCID:0000-0002-4366-3088 - - - - - - - - - - epeiric sea biome - - 2010-03-15T11:23:23Z - ENVO - ENVO:01000045 - ORCID:0000-0002-4366-3088 - The epeiric sea (also known as an epicontinental sea) biome comprises a shallow seas that extend over part of a continent. Epeiric seas are usually associated with the marine transgressions of the geologic past, which have variously been due to either global eustatic sea level changes, local tectonic deformation, or both, and are occasionally semi-cyclic. - epicontinental sea biome - - - epicontinental sea biome - https://en.wikipedia.org/wiki/Epeiric_sea - - - - - ORCID:0000-0002-4366-3088 - The epeiric sea (also known as an epicontinental sea) biome comprises a shallow seas that extend over part of a continent. Epeiric seas are usually associated with the marine transgressions of the geologic past, which have variously been due to either global eustatic sea level changes, local tectonic deformation, or both, and are occasionally semi-cyclic. - https://en.wikipedia.org/wiki/Epeiric_sea - - - - - - - - - - marginal sea biome - - 2010-03-15T11:23:23Z - ENVO - ENVO:01000046 - ORCID:0000-0002-4366-3088 - The marginal sea biome comprises parts of an ocean partially enclosed by land such as islands, archipelagos, or peninsulas. Unlike mediterranean seas, marginal seas have ocean currents caused by ocean winds. Many marginal seas are enclosed by island arcs that were formed from the subduction of one oceanic plate beneath another. - - - ORCID:0000-0002-4366-3088 - The marginal sea biome comprises parts of an ocean partially enclosed by land such as islands, archipelagos, or peninsulas. Unlike mediterranean seas, marginal seas have ocean currents caused by ocean winds. Many marginal seas are enclosed by island arcs that were formed from the subduction of one oceanic plate beneath another. - https://en.wikipedia.org/wiki/Marginal_sea - - - - - - - - - - mediterranean sea biome - - - - - - - - 2010-03-15T11:23:23Z - ENVO - ENVO:01000047 - ORCID:0000-0002-4366-3088 - The mediterranean sea biome comprises mostly enclosed seas that have limited exchange of deep water with outer oceans and where the water circulation is dominated by salinity and temperature differences rather than winds. - - - ORCID:0000-0002-4366-3088 - The mediterranean sea biome comprises mostly enclosed seas that have limited exchange of deep water with outer oceans and where the water circulation is dominated by salinity and temperature differences rather than winds. - https://en.wikipedia.org/wiki/Mediterranean_sea - - - - - - - - - - ocean biome - - - - - - - - 2010-03-15T11:23:23Z - ENVO - ENVO:01000048 - ORCID:0000-0002-4366-3088 - The ocean biome comprises major bodies of saline water, principal components of the hydrosphere. Approximately 71% of the Earth's surface is covered by ocean, a continuous body of water that is customarily divided into several principal oceans and smaller seas. More than half of this area is over 3,000 metres (9,800 ft) deep. Average oceanic salinity is around 35 parts per thousand (ppt) (3.5%), and nearly all seawater has a salinity in the range of 30 to 38 ppt. - envoPolar - - - ORCID:0000-0002-4366-3088 - The ocean biome comprises major bodies of saline water, principal components of the hydrosphere. Approximately 71% of the Earth's surface is covered by ocean, a continuous body of water that is customarily divided into several principal oceans and smaller seas. More than half of this area is over 3,000 metres (9,800 ft) deep. Average oceanic salinity is around 35 parts per thousand (ppt) (3.5%), and nearly all seawater has a salinity in the range of 30 to 38 ppt. - https://en.wikipedia.org/wiki/Ocean - - - - - - - - - - marine coral reef biome - - 2010-03-15T11:27:06Z - ENVO - ENVO:01000049 - ORCID:0000-0002-4366-3088 - The marine coral reef biome comprises constructional wave-resistant entities which are primarily built by corals and are often cemented together. The growth of these structures is aided by zooxanthellae, algae that are symbiotic with the reef-building corals. - - - ISBN:0750633840 - ORCID:0000-0002-4366-3088 - The marine coral reef biome comprises constructional wave-resistant entities which are primarily built by corals and are often cemented together. The growth of these structures is aided by zooxanthellae, algae that are symbiotic with the reef-building corals. - - - - - - - - - - marine subtidal rocky reef biome - - 2010-03-15T11:27:06Z - ENVO - ENVO:01000050 - ORCID:0000-0002-4366-3088 - The marine rocky subtidal reef biome comprises regions of the marine reef biome composed mainly of rock and which harbour abundant communities of algae and invertebrates. These reefs are often very patchy, with alterations of rocks dominated by rich invertebrate assemblages and turf-forming calcareous red algae. - - - ISBN:0750633840 - ORCID:0000-0002-4366-3088 - The marine rocky subtidal reef biome comprises regions of the marine reef biome composed mainly of rock and which harbour abundant communities of algae and invertebrates. These reefs are often very patchy, with alterations of rocks dominated by rich invertebrate assemblages and turf-forming calcareous red algae. - - - - - - - - - - marine black smoker biome - - 2010-03-15T11:29:37Z - A marine black smoker biome comprises regions of the marine hydrothermal vent biome characterised by a black vent plume. This black plume is a consequence of dissolved metals and minerals forming complexes with sulphide and indicates polymetallic sulphide mineral deposits beneath the surface. - ENVO - ENVO:01000051 - ORCID:0000-0002-4366-3088 - - - A marine black smoker biome comprises regions of the marine hydrothermal vent biome characterised by a black vent plume. This black plume is a consequence of dissolved metals and minerals forming complexes with sulphide and indicates polymetallic sulphide mineral deposits beneath the surface. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - - - - - - - - - - marine white smoker biome - - 2010-03-15T11:29:37Z - A marine white smoker biome comprises regions of the marine hydrothermal vent biome characterised by lightly hued plumes, typically containing barium, calcium, and silicon. These vents tend to have lower temperature plumes when compared to black smoker environments. - ENVO - ENVO:01000052 - ORCID:0000-0002-4366-3088 - - - A marine white smoker biome comprises regions of the marine hydrothermal vent biome characterised by lightly hued plumes, typically containing barium, calcium, and silicon. These vents tend to have lower temperature plumes when compared to black smoker environments. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Hydrothermal_vent - - - - - - - - - - marine ultramafic hydrothermal vent biome - - 2010-03-15T11:29:37Z - A marine ultramafic hydrothermal vent biome comprises regions of themarine hydrothermal vent biome hosted on ultramafic (also referred to as ultrabasic) rocks. Ultramafic rocks are igneous and meta-igneous rocks with very low silica content (less than 45%), generally >18% MgO, high FeO, low potassium, and are composed of usually greater than 90% mafic minerals (dark colored, high magnesium and iron content). The Earth's mantle is composed of ultramafic rocks. - ENVO - ENVO:01000053 - ORCID:0000-0002-4366-3088 - - - A marine ultramafic hydrothermal vent biome comprises regions of themarine hydrothermal vent biome hosted on ultramafic (also referred to as ultrabasic) rocks. Ultramafic rocks are igneous and meta-igneous rocks with very low silica content (less than 45%), generally >18% MgO, high FeO, low potassium, and are composed of usually greater than 90% mafic minerals (dark colored, high magnesium and iron content). The Earth's mantle is composed of ultramafic rocks. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Ultramafic - - - - - - - - - - marine basaltic hydrothermal vent biome - - 2010-03-15T11:29:37Z - A marine basaltic hydrothermal vent biome comprises regions of the marine hydrothermal vent biome hosted on basaltic rocks. Basalt generally has a composition of 45 to 55 wt % SiO2, 2 to 6 wt % total alkalis, 0.5 to 2.0 wt % TiO2, 5 to 14 wt % FeO and 14 wt % or more Al2O3. Contents of CaO are commonly near 10 wt %, those of MgO commonly in the range 5 to 12 wt %. - ENVO - ENVO:01000054 - ORCID:0000-0002-4366-3088 - - - A marine basaltic hydrothermal vent biome comprises regions of the marine hydrothermal vent biome hosted on basaltic rocks. Basalt generally has a composition of 45 to 55 wt % SiO2, 2 to 6 wt % total alkalis, 0.5 to 2.0 wt % TiO2, 5 to 14 wt % FeO and 14 wt % or more Al2O3. Contents of CaO are commonly near 10 wt %, those of MgO commonly in the range 5 to 12 wt %. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Basalt - - - - - - - - - - obsolete marine bulk water - 2010-03-16T12:12:30Z - ENVO - ENVO:00002149 - ENVO:01000055 - ENVO:01000061 - ENVO:01000295 - ORCID:0000-0002-4366-3088 - true - - - - - - - - obsolete estuarine bulk water - 2010-03-16T12:12:30Z - ENVO - ENVO:01000056 - ENVO:01000301 - ORCID:0000-0002-4366-3088 - true - - - - - - - - marine algal bloom - - - - - - - - - - - - - - - - - - - 2010-03-16T12:12:30Z - A marine algal bloom is a rapid increase or accumulation in the population of algae in a marine system. Typically, only one or a small number of phytoplankton species are involved. Although there is no officially recognized threshold level, algae can be considered to be blooming at concentrations of hundreds to thousands of cells per milliliter, depending on the severity. - ENVO - ENVO:01000057 - EcoLexicon:red_tide - ORCID:0000-0002-4366-3088 - red tide - envoPolar - - - https://en.wikipedia.org/wiki/Red_tide - red tide - - - - - A marine algal bloom is a rapid increase or accumulation in the population of algae in a marine system. Typically, only one or a small number of phytoplankton species are involved. Although there is no officially recognized threshold level, algae can be considered to be blooming at concentrations of hundreds to thousands of cells per milliliter, depending on the severity. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Algal_bloom - - - - - - - - - - kelp forest - - 2010-03-16T12:12:30Z - ENVO - ENVO:01000058 - Kelp forests and beds may extend many meters above the sea floor, thus should not be considered a type of "bed". - Kelp forests are underwater areas with a high density of kelp. They are recognized as one of the most productive and dynamic ecosystems on Earth. Smaller areas of anchored kelp are called kelp beds. - ORCID:0000-0002-4366-3088 - kelp bed - - - https://en.wikipedia.org/wiki/Kelp_forest - kelp bed - - - - - Kelp forests are underwater areas with a high density of kelp. They are recognized as one of the most productive and dynamic ecosystems on Earth. Smaller areas of anchored kelp are called kelp beds. - https://en.wikipedia.org/wiki/Kelp_Forest - - - - - - - - - - sea grass bed - - - - - - - - - - - - - - - 2010-03-16T12:12:30Z - A bed of a marine, saline water body which is covered by one or more speices of seagrass typically belonging to the families Posidoniaceae, Zosteraceae, Hydrocharitaceae, or Cymodoceaceae. - ENVO - ENVO:01000059 - ORCID:0000-0002-4366-3088 - "Seagrass beds are highly diverse and productive ecosystems, and can harbor hundreds of associated species from all phyla, for example juvenile and adult fish, epiphytic and free-living macroalgae and microalgae, mollusks, bristle worms, and nematodes. Few species were originally considered to feed directly on seagrass leaves (partly because of their low nutritional content), but scientific reviews and improved working methods have shown that seagrass herbivory is a highly important link in the food chain, with hundreds of species feeding on seagrasses worldwide, including green turtles, dugongs, manatees, fish, geese, swans, sea urchins and crabs." https://en.wikipedia.org/wiki/Seagrass 2016-01-18 - seagrass bed - seagrass meadow - - - A bed of a marine, saline water body which is covered by one or more speices of seagrass typically belonging to the families Posidoniaceae, Zosteraceae, Hydrocharitaceae, or Cymodoceaceae. - ISBN:0195141725 - https://en.wikipedia.org/wiki/Seagrass - - - - - - - - - - particulate matter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Subclasses should be assigned by inference. - envoPolar - Particulate material is an environmental material which is composed of microscopic portions of solid or liquid material suspended in another environmental material. - - - - - - - - marine wind mixed layer - - - - - - - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000061 - ORCID:0000-0002-4366-3088 - The upper part of the marine water column with generally uniform properties resulting from wind-driven mixing. - envoPolar - epipelagic mixed layer - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The upper part of the marine water column with generally uniform properties resulting from wind-driven mixing. - - - - - - - - - - marine benthic storm - - 2010-03-16T12:16:11Z - Benthic storms are strong benthic (near bottom) currents transporting sediment, created by the input of energy (largely kinetic) to the seabed. In regions with high mesoscale eddy activity, benthic storms are frequent and can create isohaline and isothermal conditions extending as much as 1000m above the seafloor. - ENVO - ENVO:01000062 - ORCID:0000-0002-4366-3088 - - - Benthic storms are strong benthic (near bottom) currents transporting sediment, created by the input of energy (largely kinetic) to the seabed. In regions with high mesoscale eddy activity, benthic storms are frequent and can create isohaline and isothermal conditions extending as much as 1000m above the seafloor. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - - - - - - - - - - planktonic material - - envoPolar - See Issue #251. Awaiting class creation in PCO to attempt logical definitions. - A portion of planktonic material is a portion of environmental material primarily composed of plankton. - - - - - - - - marine downwelling - - 2010-03-16T12:16:11Z - A marine downwelling describes a net current of marine surface water towards deeper regions of the water column. Marine downwellings are usually caused by differences in the density (and hence, temperature and salinity) of seawater. - ENVO - ENVO:01000064 - ORCID:0000-0002-4366-3088 - - - A marine downwelling describes a net current of marine surface water towards deeper regions of the water column. Marine downwellings are usually caused by differences in the density (and hence, temperature and salinity) of seawater. - ORCID:0000-0002-4366-3088 - - - - - - - - - - marine oxygen minimum zone - - - - - - - - - - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000065 - ORCID:0000-0002-4366-3088 - envoPolar - - - - - - - - marine anoxic zone - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000066 - Marine anoxic zones are areas of marine water that are depleted of dissolved oxygen. This condition is generally found in areas that have restricted water exchange. In most cases, oxygen is prevented from reaching the deeper levels by a physical barrier (sill) as well as by a pronounced density stratification. Anoxic conditions will occur if the rate of oxidation of organic matter by bacteria is greater than the supply of dissolved oxygen. - ORCID:0000-0002-4366-3088 - SWEETRealm:DeadZone - dead zone - envoPolar - - - Marine anoxic zones are areas of marine water that are depleted of dissolved oxygen. This condition is generally found in areas that have restricted water exchange. In most cases, oxygen is prevented from reaching the deeper levels by a physical barrier (sill) as well as by a pronounced density stratification. Anoxic conditions will occur if the rate of oxidation of organic matter by bacteria is greater than the supply of dissolved oxygen. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Anoxic_waters - - - - - - - - - - marine current - - 2010-03-16T12:16:11Z - A marine current is a continuous, directed movement of marine water generated by the forces acting upon this mean flow, such as breaking waves, wind, Coriolis force, temperature and salinity differences and tides caused by the gravitational pull of the Moon and the Sun. Depth contours, shoreline configurations and interaction with other currents influence a current's direction and strength. - ENVO - ENVO:01000067 - EcoLexicon:marine_current - ORCID:0000-0002-4366-3088 - envoPolar - - - A marine current is a continuous, directed movement of marine water generated by the forces acting upon this mean flow, such as breaking waves, wind, Coriolis force, temperature and salinity differences and tides caused by the gravitational pull of the Moon and the Sun. Depth contours, shoreline configurations and interaction with other currents influence a current's direction and strength. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Ocean_current - - - - - - - - - - marine streamer - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000068 - Marine streamers are tongues of cold water that extend > 100 km offshore from upwelling regions. Enhanced primary productivity may occur in these waters as they are typically more nutrient rich than marine surface waters. - ORCID:0000-0002-4366-3088 - - - ISBN:044482619X - Marine streamers are tongues of cold water that extend > 100 km offshore from upwelling regions. Enhanced primary productivity may occur in these waters as they are typically more nutrient rich than marine surface waters. - ORCID:0000-0002-4366-3088 - - - - - - - - - - mesoscale marine eddy - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000069 - Mesoscale marine eddies are characterized by currents which flow in a roughly circular motion around the center of the eddy. The sense of rotation of these currents may either be cyclonic or anticyclonic. Ocean eddies are also usually made of water masses that are different to those outside of the eddy. Marine mesoscale eddies are between about 10 and 500 km in diameter, and persist for periods of days to months. They may be formed when an ocean current develops an instability. This instability grows, causing the current to meander, and eventually an eddy is pinched off from the meander. - ORCID:0000-0002-4366-3088 - - - ISBN:044482619X - Mesoscale marine eddies are characterized by currents which flow in a roughly circular motion around the center of the eddy. The sense of rotation of these currents may either be cyclonic or anticyclonic. Ocean eddies are also usually made of water masses that are different to those outside of the eddy. Marine mesoscale eddies are between about 10 and 500 km in diameter, and persist for periods of days to months. They may be formed when an ocean current develops an instability. This instability grows, causing the current to meander, and eventually an eddy is pinched off from the meander. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Eddy_(fluid_dynamics) - - - - - - - - - - terrigenous sediment - - 2010-03-17T01:14:02Z - ENVO - ENVO:01000070 - EcoLexicon:terrigenous_sediment - ORCID:0000-0002-4366-3088 - SWEETRealm:TerrigenousSediment - Sediment comprised of weathered continental rocks, wind blown dust, volcanic ash or other terrestrial material. - - - ORCID:0000-0002-4366-3088 - Sediment comprised of weathered continental rocks, wind blown dust, volcanic ash or other terrestrial material. - - - - - - - - - - oceanic front - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - An oceanic front is a narrow zone of enhanced horizontal gradients of water properties (temperature, salinity, nutrients, etc.) that separates broader areas with different water masses or different vertical structure (stratification). - ENVO - ENVO:01000071 - ORCID:0000-0002-4366-3088 - - - An oceanic front is a narrow zone of enhanced horizontal gradients of water properties (temperature, salinity, nutrients, etc.) that separates broader areas with different water masses or different vertical structure (stratification). - DOI:10.1016/j.pocean.2009.04.015 - ISBN10::0717259463 - - - - - - - - - - marine Taylor column - - - - - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - A marine Taylor column is a Taylor column that is formed in a marine body of water. Currents flowing over shoaling topography such as seamounts are accelerated and destabilised, resulting in Taylor columns. Eddies and internal waves are generated downstream of the topological feature and may extend 1000 m or so above them. This may result in a localised increase in primary production where the Taylor column reaches surface waters. - ENVO - ENVO:01000072 - ORCID:0000-0002-4366-3088 - - - A marine Taylor column is a Taylor column that is formed in a marine body of water. Currents flowing over shoaling topography such as seamounts are accelerated and destabilised, resulting in Taylor columns. Eddies and internal waves are generated downstream of the topological feature and may extend 1000 m or so above them. This may result in a localised increase in primary production where the Taylor column reaches surface waters. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Taylor_column - - - - - - - - - - marine oligotrophic desert - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - An expanse of marine water characterised by low concentrations of nutrients such as phosphate, nitrate as well as organic matter and, hence, low primary productivity. These regions tend to have high dissolved oxygen levels due to a lack of respiration. - ENVO - ENVO:01000073 - ORCID:0000-0002-4366-3088 - - - An expanse of marine water characterised by low concentrations of nutrients such as phosphate, nitrate as well as organic matter and, hence, low primary productivity. These regions tend to have high dissolved oxygen levels due to a lack of respiration. - ORCID:0000-0002-4366-3088 - - - - - - - - - - oceanic gyre - - 2010-03-16T12:16:11Z - A gyre in oceanography is any large system of rotating ocean currents, particularly those involved with large wind movements. Gyres are caused by the Coriolis Effect; planetary vorticity along with horizontal and vertical friction, which determine the circulation patterns from the wind curl (torque). - ENVO - ENVO:01000074 - ORCID:0000-0002-4366-3088 - SWEETRealm:OceanGyre - - - A gyre in oceanography is any large system of rotating ocean currents, particularly those involved with large wind movements. Gyres are caused by the Coriolis Effect; planetary vorticity along with horizontal and vertical friction, which determine the circulation patterns from the wind curl (torque). - https://en.wikipedia.org/wiki/Ocean_gyre - - - - - - - - - - marine thermocline - - - - - - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000075 - ORCID:0000-0002-4366-3088 - The marine thermocline describes a sharp change in the temperature of seawater (in relation to the temperature gradients of the water mass surrounding it) in the marine water column, which is usually associated with rapid changes in water density and salinity. - envoPolar - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The marine thermocline describes a sharp change in the temperature of seawater (in relation to the temperature gradients of the water mass surrounding it) in the marine water column, which is usually associated with rapid changes in water density and salinity. - - - - - - - - - - marine chemocline - - - - - - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - A marine chemocline is a marine cline caused by a strong, vertical chemistry gradient within a body of marine water. Chemoclines most commonly occur where local conditions favor the formations of anoxic bottom water. - ENVO - ENVO:01000076 - ORCID:0000-0002-4366-3088 - envoPolar - - - A marine chemocline is a marine cline caused by a strong, vertical chemistry gradient within a body of marine water. Chemoclines most commonly occur where local conditions favor the formations of anoxic bottom water. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Chemocline - - - - - - - - - - marine pycnocline - - - - - - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000077 - ORCID:0000-0002-4366-3088 - The marine pycnocline describes a sharp change in the density of seawater (in relation to the gradients of the water mass surrounding it) in the marine water column. Pycnoclines are usually associated with thermo- and haloclines. - envoPolar - - - ORCID:0000-0002-4366-3088 - The marine pycnocline describes a sharp change in the density of seawater (in relation to the gradients of the water mass surrounding it) in the marine water column. Pycnoclines are usually associated with thermo- and haloclines. - https://en.wikipedia.org/wiki/Mixed_layer - - - - - - - - - - marine nutricline - - - - - - - - - - - - - - - - - - - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000078 - ORCID:0000-0002-4366-3088 - The marine nutricline describes a sharp change in the nutrient content of seawater (in relation to the gradients of the water mass surrounding it) in the marine water column. - envoPolar - - - ORCID:0000-0002-4366-3088 - The marine nutricline describes a sharp change in the nutrient content of seawater (in relation to the gradients of the water mass surrounding it) in the marine water column. - https://en.wikipedia.org/wiki/Mixed_layer - - - - - - - - - - marine lysocline - - 2010-03-16T12:16:11Z - ENVO - ENVO:01000079 - ORCID:0000-0002-4366-3088 - The marine lysocline denotes the depth in the ocean below which the rate of dissolution of calcite increases dramatically. As water column depth and therefore pressure increases, the corresponding calcite saturation of seawater decreases and the calcite begins dissolve. - envoPolar - - - ORCID:0000-0002-4366-3088 - The marine lysocline denotes the depth in the ocean below which the rate of dissolution of calcite increases dramatically. As water column depth and therefore pressure increases, the corresponding calcite saturation of seawater decreases and the calcite begins dissolve. - https://en.wikipedia.org/wiki/Lysocline - - - - - - - - - - pelagic isothermal surface - - - - - - - - 2010-03-16T12:16:11Z - A roughly planar, pelagic region characterised by equal water temperature. - ENVO - ENVO:01000080 - ORCID:0000-0002-4366-3088 - envoPolar - - - A roughly planar, pelagic region characterised by equal water temperature. - ORCID:0000-0002-4366-3088 - - - - - - - - - - pelagic isohaline surface - - - - - - - - 2010-03-16T12:16:11Z - A roughly planar, pelagic region characterised by equal salinity. - ENVO - ENVO:01000081 - ORCID:0000-0002-4366-3088 - envoPolar - - - A roughly planar, pelagic region characterised by equal salinity. - ORCID:0000-0002-4366-3088 - - - - - - - - - - biogenous sediment - - 2010-03-17T01:14:02Z - Biogenous sediment is derived from living organisms, typically planktonic organisms possessing shells, frustules or coccoliths. - ENVO - ENVO:01000082 - ORCID:0000-0002-4366-3088 - envoPolar - - - Biogenous sediment is derived from living organisms, typically planktonic organisms possessing shells, frustules or coccoliths. - ORCID:0000-0002-4366-3088 - - - - - - - - - - pelagic isopycnal surface - - - - - - - - 2010-03-16T12:16:11Z - A roughly planar, pelagic region characterised by equal water density. - ENVO - ENVO:01000083 - ORCID:0000-0002-4366-3088 - envoPolar - - - A roughly planar, pelagic region characterised by equal water density. - ORCID:0000-0002-4366-3088 - - - - - - - - - - estuarine front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000084 - ORCID:0000-0002-4366-3088 - - - - - - - - plume front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000085 - ORCID:0000-0002-4366-3088 - - - - - - - - coastal buoyancy current front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000086 - ORCID:0000-0002-4366-3088 - - - - - - - - tidal mixing front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000087 - ORCID:0000-0002-4366-3088 - - - - - - - - mid-shelf fronts - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000088 - ORCID:0000-0002-4366-3088 - - - - - - - - shelf-slope/shelf-break front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000089 - ORCID:0000-0002-4366-3088 - - - - - - - - coastal upwelling front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000090 - ORCID:0000-0002-4366-3088 - - - - - - - - topographic upwelling front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000091 - ORCID:0000-0002-4366-3088 - - - - - - - - equatorial upwelling front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000092 - ORCID:0000-0002-4366-3088 - - - - - - - - boundary current front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000093 - ORCID:0000-0002-4366-3088 - - - - - - - - subtropical convergence front - - - - - - - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000094 - ORCID:0000-0002-4366-3088 - - - - - - - - marginal ice zone front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000095 - ORCID:0000-0002-4366-3088 - - - - - - - - water mass front - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000096 - ORCID:0000-0002-4366-3088 - - - - - - - - surface convergence - - 2010-03-16T12:23:26Z - ENVO - ENVO:01000097 - ORCID:0000-0002-4366-3088 - - - - - - - - deep ocean current - - 2010-03-16T12:24:56Z - A marine current that generally occurs below the permanent thermocline (where it occurs) or below 400 m depth and that is driven by density and temperature gradients. - ENVO - ENVO:01000098 - ORCID:0000-0002-4366-3088 - - - A marine current that generally occurs below the permanent thermocline (where it occurs) or below 400 m depth and that is driven by density and temperature gradients. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Ocean_current - - - - - - - - - - marine surface current - - 2010-03-16T12:24:56Z - A marine current bordered by the surface of the water column and the permanent thermocline, where it occurs. Surface currents are mostly wind driven and mostly limited to the top 400 m of the water column. Ocean currents are driven by the circulation of wind above surface waters. Frictional stress at the interface between the ocean and the wind causes the water to move in the direction of the wind. Large ocean currents are a response of the atmosphere and ocean to the flow of energy from the tropics to polar regions. In some cases, currents are transient features and affect only a small area. Other ocean currents are essentially permanent and extend over large horizontal distances. - ENVO - ENVO:01000099 - ORCID:0000-0002-4366-3088 - - - A marine current bordered by the surface of the water column and the permanent thermocline, where it occurs. Surface currents are mostly wind driven and mostly limited to the top 400 m of the water column. Ocean currents are driven by the circulation of wind above surface waters. Frictional stress at the interface between the ocean and the wind causes the water to move in the direction of the wind. Large ocean currents are a response of the atmosphere and ocean to the flow of energy from the tropics to polar regions. In some cases, currents are transient features and affect only a small area. Other ocean currents are essentially permanent and extend over large horizontal distances. - ORCID:0000-0002-4366-3088 - URL:http://www.physicalgeography.net/fundamentals/8q.html - https://en.wikipedia.org/wiki/Ocean_current - - - - - - - - - - along-front current - - 2010-03-16T12:26:13Z - A marine surface current that flows along an oceanic front. - ENVO - ENVO:01000100 - ORCID:0000-0002-4366-3088 - - - A marine surface current that flows along an oceanic front. - ORCID:0000-0002-4366-3088 - - - - - - - - - - warm surface current - - 2010-03-16T12:26:13Z - ENVO - ENVO:01000101 - ORCID:0000-0002-4366-3088 - - - - - - - - cold surface current - - 2010-03-16T12:26:13Z - ENVO - ENVO:01000102 - ORCID:0000-0002-4366-3088 - - - - - - - - western boundary current - - 2010-03-16T12:26:13Z - A warm water, narrow marine surface current flowing from the equator to high latitudes at speeds between 40 and 120 kilometers per day. Western boundary currents are the deepest ocean surface flows, usually extending 1000 meters below the ocean surface. - ENVO - ENVO:01000103 - ORCID:0000-0002-4366-3088 - SWEETRealm:WesternBoundaryCurrent - - - A warm water, narrow marine surface current flowing from the equator to high latitudes at speeds between 40 and 120 kilometers per day. Western boundary currents are the deepest ocean surface flows, usually extending 1000 meters below the ocean surface. - ORCID:0000-0002-4366-3088 - URL:http://www.physicalgeography.net/fundamentals/8q.html - - - - - - - - - - eastern boundary current - - 2010-03-16T12:26:13Z - A cold water, broad marine surface current flowing from high latitudes to the equator at speeds between 3 and 7 kilometers per day. - ENVO - ENVO:01000104 - ORCID:0000-0002-4366-3088 - SWEETRealm:EasternBoundaryCurrent - - - A cold water, broad marine surface current flowing from high latitudes to the equator at speeds between 3 and 7 kilometers per day. - ORCID:0000-0002-4366-3088 - URL:http://www.physicalgeography.net/fundamentals/8q.html - - - - - - - - - - marine benthic feature - - - - - - - - - - - - - - - - - - - 2010-03-16T12:27:00Z - A prominent or distinctive aspect, quality, or characteristic of environments occurring on or along marine benthic environments. - ENVO - ENVO:01000105 - ORCID:0000-0002-4366-3088 - - - A prominent or distinctive aspect, quality, or characteristic of environments occurring on or along marine benthic environments. - ISBN-10:0618455043 - ORCID:0000-0002-4366-3088 - - - - - - - - - - permanent marine thermocline - - 2010-03-16T02:31:24Z - ENVO - ENVO:01000106 - ORCID:0000-0002-4366-3088 - The permanent marine thermocline describes a marine thermocline found in temperate to tropical latitudes, which marks the transition between warm waters and cold deep waters. The permanent thermocline separates the marine cold-water sphere and the marine warm-water sphere - envoPolar - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The permanent marine thermocline describes a marine thermocline found in temperate to tropical latitudes, which marks the transition between warm waters and cold deep waters. The permanent thermocline separates the marine cold-water sphere and the marine warm-water sphere - - - - - - - - - - seasonal marine thermocline - - 2010-03-16T02:31:24Z - ENVO - ENVO:01000107 - ORCID:0000-0002-4366-3088 - The seasonal marine thermocline is a marine thermocline, which generally occurs below the marine wind mixed layer. - envoPolar - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The seasonal marine thermocline is a marine thermocline, which generally occurs below the marine wind mixed layer. - - - - - - - - - - marine cold-water sphere - - - - - - - - - - - - - - - - - - - - - 2010-03-16T02:39:37Z - ENVO - ENVO:01000108 - ORCID:0000-0002-4366-3088 - The marine cold-water sphere describes a water mass extending from the polar seas and across low latitudes at depths of ca. 800 to 1000 m, which is separated from the marine warm-water sphere by the permanent marine thermocline - envoPolar - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The marine cold-water sphere describes a water mass extending from the polar seas and across low latitudes at depths of ca. 800 to 1000 m, which is separated from the marine warm-water sphere by the permanent marine thermocline - - - - - - - - - - marine warm-water sphere - - - - - - - - - - - - - - 2010-03-16T02:42:39Z - ENVO - ENVO:01000109 - ORCID:0000-0002-4366-3088 - The marine warm-water sphere describes a water mass extending to depths of ca. 800 to 1000 m in low and middle latitudes. It is separated from the marine cold-water sphere by the permanent marine thermocline - - - ISBN:044482619X - ORCID:0000-0002-4366-3088 - The marine warm-water sphere describes a water mass extending to depths of ca. 800 to 1000 m in low and middle latitudes. It is separated from the marine cold-water sphere by the permanent marine thermocline - - - - - - - - - - hydrogenous sediment - - 2010-03-17T01:14:02Z - Hydrogenous sediment is derived from solutes that precipitate out of sea water by a variety of chemical reactions. These are typically less abundant than other sediment types. - ORCID:0000-0002-4366-3088 - SWEETRealm:HydrogenousSediment - - - Hydrogenous sediment is derived from solutes that precipitate out of sea water by a variety of chemical reactions. These are typically less abundant than other sediment types. - ORCID:0000-0002-4366-3088 - - - - - - - - - - cosmogenous sediment - - 2010-03-17T01:14:02Z - Cosmogenous sediment is derived from extraterrestrial dust and debris in the form of meteorites and similar entities. - ENVO - ENVO:01000111 - ORCID:0000-0002-4366-3088 - - - Cosmogenous sediment is derived from extraterrestrial dust and debris in the form of meteorites and similar entities. - ORCID:0000-0002-4366-3088 - - - - - - - - - - polymetallic nodule - - 2010-03-17T01:14:02Z - ENVO - ENVO:01000112 - ORCID:0000-0002-4366-3088 - Polymetallic nodules, also called manganese nodules, are rock concretions on the sea bottom formed of concentric layers of iron and manganese hydroxides around a core. Nodules vary in size from tiny particles visible only under a microscope to large pellets more than 20 centimetres (8 in) across. However, most nodules are between 5 and 10 cm in diameter. - manganese nodule - - - https://en.wikipedia.org/wiki/Manganese_nodule - manganese nodule - - - - - Polymetallic nodules, also called manganese nodules, are rock concretions on the sea bottom formed of concentric layers of iron and manganese hydroxides around a core. Nodules vary in size from tiny particles visible only under a microscope to large pellets more than 20 centimetres (8 in) across. However, most nodules are between 5 and 10 cm in diameter. - https://en.wikipedia.org/wiki/Manganese_nodule - - - - - - - - - - suspended sediment - - 2010-03-17T01:17:02Z - ENVO - ENVO:01000113 - ORCID:0000-0002-4366-3088 - Suspended sediment, or suspended load, is the term for the particles settle slowly enough to be carried in flowing water (such as a stream or coastal area) either without touching the bed or while only intermittently touching it. These particles are generally of the fine sand, silt and clay size, although larger particles may be carried as well depending on the intensity of the flow. - - - ORCID:0000-0002-4366-3088 - Suspended sediment, or suspended load, is the term for the particles settle slowly enough to be carried in flowing water (such as a stream or coastal area) either without touching the bed or while only intermittently touching it. These particles are generally of the fine sand, silt and clay size, although larger particles may be carried as well depending on the intensity of the flow. - https://en.wikipedia.org/wiki/Suspended_load - - - - - - - - - - boulder sediment - - - - - - - - 2010-03-17T01:58:08Z - ENVO - ENVO:01000114 - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter greater than 256 mm. - - - Sediment characterised by an average particle diameter greater than 256 mm. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - cobble sediment - - 2010-03-17T01:58:08Z - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter between 64 and 256 mm. - - - Sediment characterised by an average particle diameter between 64 and 256 mm. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - pebble sediment - - 2010-03-17T01:58:08Z - ENVO - ENVO:01000116 - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter between 4 and 32 mm. - - - Sediment characterised by an average particle diameter between 4 and 32 mm. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - granular sediment - - 2010-03-17T01:58:08Z - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter between 2 and 4 mm. - - - Sediment characterised by an average particle diameter between 2 and 4 mm. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - sandy sediment - - 2010-03-17T01:58:08Z - ENVO - ENVO:01000118 - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter between 62.5 micrometers and 2 mm. - - - Sediment characterised by an average particle diameter between 62.5 micrometers and 2 mm. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - silty sediment - - 2010-03-17T01:58:08Z - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter between 3.9 and 62.5 micrometers. - - - Sediment characterised by an average particle diameter between 3.9 and 62.5 micrometers. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - clay sediment - - - - - - - - 2010-03-17T01:58:08Z - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter between 1 and 3.9 micrometers. - - - Sediment characterised by an average particle diameter between 1 and 3.9 micrometers. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - colloidal sediment - - 2010-03-17T01:58:08Z - ORCID:0000-0002-4366-3088 - Sediment characterised by an average particle diameter below 1 micrometer. - - - Sediment characterised by an average particle diameter below 1 micrometer. - https://en.wikipedia.org/wiki/Particle_size - - - - - - - - - - marine hydrothermal vent - - - - - - - - - - - - - - - - - - - 2010-03-17T02:13:33Z - A marine hydrothermal vent is a marine benthic feature where heat generated due to tectonic activity, either at divergent plate boundaries or convergent ocean plates where back-arc spreading occurs, is released or 'vented' to the surface. The resultant high temperature water jets are laden with dissolved metals and minerals. - ENVO - ENVO:01000122 - ORCID:0000-0002-4366-3088 - - - A marine hydrothermal vent is a marine benthic feature where heat generated due to tectonic activity, either at divergent plate boundaries or convergent ocean plates where back-arc spreading occurs, is released or 'vented' to the surface. The resultant high temperature water jets are laden with dissolved metals and minerals. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - - - - - - - - - - marine sponge reef biome - - 2010-03-17T04:43:05Z - ENVO - ENVO:01000123 - ORCID:0000-0002-4366-3088 - The marine sponge reef biome comprises marine reefs primarily built by marine sponges. The primary frame-building sponges are all members of the order Hexactinosa. They are found only in glacier-scoured troughs of low-angle continental shelf. The seafloor is stable and consists of rock, coarse gravel, and large boulders. - - - ORCID:0000-0002-4366-3088 - The marine sponge reef biome comprises marine reefs primarily built by marine sponges. The primary frame-building sponges are all members of the order Hexactinosa. They are found only in glacier-scoured troughs of low-angle continental shelf. The seafloor is stable and consists of rock, coarse gravel, and large boulders. - https://en.wikipedia.org/wiki/Sponge_reef - - - - - - - - - - marine supra-littoral zone - - - - - - - - - - - - - - 2010-03-17T09:01:45Z - ENVO - ENVO:01000124 - ORCID:0000-0002-4366-3088 - The supralittoral zone is the area above the spring high tide line that is regularly splashed, but not submerged by ocean water. Seawater penetrates these elevated areas only during storms with high tides. - marine supralittoral zone - splash zone - spray zone - supralittoral zone - supratidal zone - - - supralittoral zone - https://en.wikipedia.org/wiki/Littoral_zone - - - - - spray zone - https://en.wikipedia.org/wiki/Littoral_zone - - - - - splash zone - https://en.wikipedia.org/wiki/Littoral_zone - - - - - The supralittoral zone is the area above the spring high tide line that is regularly splashed, but not submerged by ocean water. Seawater penetrates these elevated areas only during storms with high tides. - https://en.wikipedia.org/wiki/Littoral_zone - - - - - supratidal zone - https://en.wikipedia.org/wiki/Littoral_zone - - - - - - - - - - marine littoral zone - - - - - - - - 2010-03-17T09:01:45Z - ENVO - ENVO:01000125 - ORCID:0000-0002-4366-3088 - The marine littoral zone is a littoral zone which extends, approximately, from the spray region above the high tide mark to the edge of the coninental shelf. - - - The marine littoral zone is a littoral zone which extends, approximately, from the spray region above the high tide mark to the edge of the coninental shelf. - https://en.wikipedia.org/wiki/Littoral_zone - - - - - - - - - - marine sub-littoral zone - - - - - - - - - - - - - - 2010-03-17T09:01:45Z - ENVO - ENVO:01000126 - ORCID:0000-0002-4366-3088 - The marine sublittoral zone is part of the marine littoral zone which is permanently covered by seawater. In physical oceanography, the sublittoral zone refers to coastal regions with significant tidal flows and energy dissipation, including non-linear flows, internal waves, river outflows and oceanic fronts. In practice, this typically extends to the edge of the continental shelf, with depths around 200 meters. In marine biology, the sublittoral refers to the areas where sunlight reaches the ocean floor, that is, where the water is never so deep as to take it out of the photic zone. - marine sublittoral zone - sublittoral zone - - - The marine sublittoral zone is part of the marine littoral zone which is permanently covered by seawater. In physical oceanography, the sublittoral zone refers to coastal regions with significant tidal flows and energy dissipation, including non-linear flows, internal waves, river outflows and oceanic fronts. In practice, this typically extends to the edge of the continental shelf, with depths around 200 meters. In marine biology, the sublittoral refers to the areas where sunlight reaches the ocean floor, that is, where the water is never so deep as to take it out of the photic zone. - https://en.wikipedia.org/wiki/Littoral_zone - - - - - - - - - - marine cold seep biome - - 2010-03-19T08:33:56Z - ENVO - ENVO:01000127 - ORCID:0000-0002-4366-3088 - The marine cold seep biome comprises regions of the marine benthic biome where seepage of methane, hydrogen sulphide, hydrocarbon rich fluids and other fluids occurs. - - - ORCID:0000-0002-4366-3088 - The marine cold seep biome comprises regions of the marine benthic biome where seepage of methane, hydrogen sulphide, hydrocarbon rich fluids and other fluids occurs. - https://en.wikipedia.org/wiki/Cold_seep - - - - - - - - - - dilution basin mediterranean sea biome - - 2010-03-19T09:32:59Z - ENVO - ENVO:01000128 - ORCID:0000-0002-4366-3088 - The dilution basin mediterranean sea biome comprises expressions of the mediterranean sea biome with lower salinity than the surrounding ocean due to freshwater gains such as rainfall and rivers. Water exchange consists of outflow of the fresher mediterranean water in the upper layer and inflow of the saltier oceanic water in the lower layer of the channel. Renewal of deep water may not be sufficient to supply oxygen to the bottom. - - - ORCID:0000-0002-4366-3088 - The dilution basin mediterranean sea biome comprises expressions of the mediterranean sea biome with lower salinity than the surrounding ocean due to freshwater gains such as rainfall and rivers. Water exchange consists of outflow of the fresher mediterranean water in the upper layer and inflow of the saltier oceanic water in the lower layer of the channel. Renewal of deep water may not be sufficient to supply oxygen to the bottom. - https://en.wikipedia.org/wiki/Mediterranean_sea - - - - - - - - - - marine hydrothermal vent chimney - - - - - - - - 2010-03-20T06:23:38Z - ENVO - ENVO:01000129 - - - - - - - - marine hydrothermal plume - - - - - - - - 2010-03-20T06:23:38Z - A marine hydrothermal vent plume, part of a marine hydrothermal vent, is a high temperature water jet laden with dissolved metals and minerals that is driven by heat generated due to tectonic activity below the vent. - ENVO - ENVO:01000130 - - - A marine hydrothermal vent plume, part of a marine hydrothermal vent, is a high temperature water jet laden with dissolved metals and minerals that is driven by heat generated due to tectonic activity below the vent. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - - - - - - - - - - mesophilic sediment - - 2010-03-20T07:15:20Z - ENVO - ENVO:01000131 - ORCID:0000-0002-4366-3088 - Sediment characterised by a temperature of 15-45 degrees Celsius and high-to-low oxygenation. Often impacted by hydrothermal fluid flows. - - - ORCID:0000-0002-4366-3088 - Sediment characterised by a temperature of 15-45 degrees Celsius and high-to-low oxygenation. Often impacted by hydrothermal fluid flows. - - - - - - - - - - thermophilic sediment - - 2010-03-20T07:18:16Z - ENVO - ENVO:01000132 - ORCID:0000-0002-4366-3088 - Sediment characterised by a temperature of 45-75 degrees Celsius and low to no oxygen content. Often impacted by hydrothermal fluid flows. - - - ORCID:0000-0002-4366-3088 - Sediment characterised by a temperature of 45-75 degrees Celsius and low to no oxygen content. Often impacted by hydrothermal fluid flows. - - - - - - - - - - hyperthermophilic sediment - - 2010-03-20T07:18:16Z - ENVO - ENVO:01000133 - ORCID:0000-0002-4366-3088 - Sediment characterised by a temperature of 80-125 degrees Celsius and no oxygen content. Often impacted by hydrothermal fluid flows. - - - ORCID:0000-0002-4366-3088 - Sediment characterised by a temperature of 80-125 degrees Celsius and no oxygen content. Often impacted by hydrothermal fluid flows. - - - - - - - - - - hydrothermal fluid - - 2010-03-20T08:19:19Z - ENVO - ENVO:01000134 - High temperature water ejected from hydrothermal vents and laden with dissolved metals and minerals as a result of percolation through crustal rocks. - ORCID:0000-0002-4366-3088 - - - High temperature water ejected from hydrothermal vents and laden with dissolved metals and minerals as a result of percolation through crustal rocks. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - - - - - - - - - - nitrate-reducing sediment - - 2010-03-20T08:33:33Z - ENVO - ENVO:01000135 - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active nitrate reducing microbial communities. - envoPolar - - - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active nitrate reducing microbial communities. - - - - - - - - - - drop stone - - - - - - - - 2010-03-20T06:25:06Z - An isolated fragment of rock, which fell vertically through the water column into finer-grained water-deposited sedimentary rocks. Drop stones range in size from small pebbles to boulders. - Dropstone - ENVO - ENVO:01000136 - - - Dropstone - https://en.wikipedia.org/wiki/Dropstone - - - - - An isolated fragment of rock, which fell vertically through the water column into finer-grained water-deposited sedimentary rocks. Drop stones range in size from small pebbles to boulders. - https://en.wikipedia.org/wiki/Dropstone - - - - - - - - - - organic matter fall - - - - - - - - - - - - - - - - - - - - 2010-03-20T06:25:30Z - An accumulation of organic matter that has fallen to the bottom of a body of water. - ENVO - ENVO:01000137 - ORCID:0000-0002-4366-3088 - - - An accumulation of organic matter that has fallen to the bottom of a body of water. - ORCID:0000-0002-4366-3088 - - - - - - - - - - plant matter fall - - 2010-03-20T06:26:07Z - A accumulation of plant matter that has fallen to the bottom of a body of water. - ORCID:0000-0002-4366-3088 - - - A accumulation of plant matter that has fallen to the bottom of a body of water. - ORCID:0000-0002-4366-3088 - - - - - - - - - - animal carcass fall - - - - - - - - - - - - - - - - - - - - 2010-03-20T06:26:07Z - ENVO - ENVO:01000139 - ORCID:0000-0002-4366-3088 - The carcass of an animal that has fallen to the bottom of a body of water. - - - ORCID:0000-0002-4366-3088 - The carcass of an animal that has fallen to the bottom of a body of water. - - - - - - - - - - whale fall - - 2010-03-20T06:26:13Z - ENVO - ENVO:01000140 - ORCID:0000-0002-4366-3088 - Whale fall is the term used for a whale carcass that has fallen to the ocean floor. When a whale dies in shallow water, its carcass is typically devoured by scavengers over a relatively short period of time: within several months. However, in deeper water (depths of 2,000 m/6,600 ft or greater), fewer scavenger species exist, and the carcass can provide sustenance for a complex localized ecosystem over periods of decades. - - - Whale fall is the term used for a whale carcass that has fallen to the ocean floor. When a whale dies in shallow water, its carcass is typically devoured by scavengers over a relatively short period of time: within several months. However, in deeper water (depths of 2,000 m/6,600 ft or greater), fewer scavenger species exist, and the carcass can provide sustenance for a complex localized ecosystem over periods of decades. - https://en.wikipedia.org/wiki/Whale_fall - - - - - - - - - - seal fall - - 2010-03-20T06:26:44Z - ENVO - ENVO:01000141 - ORCID:0000-0002-4366-3088 - Seal fall is the term used for a seal carcass that has fallen to the ocean floor. - - - ORCID:0000-0002-4366-3088 - Seal fall is the term used for a seal carcass that has fallen to the ocean floor. - - - - - - - - - - wood fall - - 2010-03-20T06:27:01Z - A wood fall describes an accumulation of woody plant material that has fallen to the ocean floor. - ENVO - ENVO:01000142 - ORCID:0000-0002-4366-3088 - - - A wood fall describes an accumulation of woody plant material that has fallen to the ocean floor. - ORCID:0000-0002-4366-3088 - - - - - - - - - - marine reef - - - - - - - - - - - - - - - - - - - 2010-03-20T06:43:45Z - ENVO - ENVO:01000143 - ORCID:0000-0002-4366-3088 - - - - - - - - marine coral reef flat zone - - - - - - - - 2010-03-20T06:52:40Z - ENVO - ENVO:01000144 - ORCID:0000-0002-4366-3088 - - - - - - - - marine coral reef back reef - - - - - - - - 2010-03-20T06:52:40Z - ENVO - ENVO:01000145 - ORCID:0000-0002-4366-3088 - - - - - - - - marine coral reef crest - - - - - - - - 2010-03-20T06:52:40Z - ENVO - ENVO:01000146 - ORCID:0000-0002-4366-3088 - - - - - - - - marine coral reef fore reef - - - - - - - - 2010-03-20T06:52:40Z - ENVO - ENVO:01000147 - ORCID:0000-0002-4366-3088 - - - - - - - - marine coral reef buttress zone - - - - - - - - 2010-03-20T06:52:40Z - ENVO - ENVO:01000148 - ORCID:0000-0002-4366-3088 - - - - - - - - marine coral reef deep fore reef - - - - - - - - 2010-03-20T06:52:40Z - ENVO - ENVO:01000149 - ORCID:0000-0002-4366-3088 - - - - - - - - marine subtidal rocky reef - - 2010-03-20T06:55:18Z - ENVO - ENVO:01000150 - ORCID:0000-0002-4366-3088 - - - - - - - - manganese-reducing sediment - - 2010-03-20T08:33:33Z - ENVO - ENVO:01000151 - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active manganese reducing microbial communities. - envoPolar - - - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active manganese reducing microbial communities. - - - - - - - - - - iron-reducing sediment - - 2010-03-20T08:33:33Z - ENVO - ENVO:01000152 - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active iron reducing microbial communities. - envoPolar - - - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active iron reducing microbial communities. - - - - - - - - - - sulphate-reducing sediment - - 2010-03-20T08:33:33Z - ENVO - ENVO:01000153 - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active sulphate reducing microbial communities. - envoPolar - - - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active sulphate reducing microbial communities. - - - - - - - - - - carbon dioxide-reducing sediment - - 2010-03-20T08:33:33Z - ENVO - ENVO:01000154 - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active carbon dioxide reducing microbial communities. - envoPolar - - - ORCID:0000-0002-4366-3088 - Sediment hosting and characterised by active carbon dioxide reducing microbial communities. - - - - - - - - - - organic material - - - - - - - - 2010-03-20T08:40:04Z - EcoLexicon:organic_material - Environmental material derived from living organisms. - ORCID:0000-0002-4366-3088 - biomass - - - Environmental material derived from living organisms. - ISBN-10:0618455043 - ORCID:0000-0002-4366-3088 - - - - - - - - - - biofilm material - - 2010-03-20T08:51:49Z - ENVO - ENVO:01000156 - Material derived from a biofilm, an aggregate of microorganisms in which cells adhere to each other and/or to a surface. These adherent cells are frequently embedded within a self-produced matrix of extracellular polymeric substance (EPS). Biofilm EPS, which is also referred to as slime, is a polymeric conglomeration generally composed of extracellular DNA, proteins, and polysaccharides in various configurations. - ORCID:0000-0002-4366-3088 - - - Material derived from a biofilm, an aggregate of microorganisms in which cells adhere to each other and/or to a surface. These adherent cells are frequently embedded within a self-produced matrix of extracellular polymeric substance (EPS). Biofilm EPS, which is also referred to as slime, is a polymeric conglomeration generally composed of extracellular DNA, proteins, and polysaccharides in various configurations. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Biofilm - - - - - - - - - - microbial mat material - - - - - - - - - - - - - - - - - - - 2010-03-20T08:51:49Z - ENVO - ENVO:01000157 - Material derived from a microbial mat, a multi-layered sheet of micro-organisms, mainly bacteria and archaea. Microbial mats create a wide range of internal chemical environments. - ORCID:0000-0002-4366-3088 - envoPolar - - - Material derived from a microbial mat, a multi-layered sheet of micro-organisms, mainly bacteria and archaea. Microbial mats create a wide range of internal chemical environments. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Microbial_mat - - - - - - - - - - marine snow - - 2010-03-20T08:51:49Z - EcoLexicon:marine_snow - Marine snow is a continuous shower of mostly organic detritus falling from the upper layers of the water column. Its origin lies in activities within the productive photic zone. - ORCID:0000-0002-4366-3088 - envoPolar - - - Marine snow is a continuous shower of mostly organic detritus falling from the upper layers of the water column. Its origin lies in activities within the productive photic zone. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Marine_snow - - - - - - - - - - organic feature - - 2010-03-20T09:00:40Z - A prominent or distinctive aspect, quality, or characteristic pertaining to or derived from living organisms. - ENVO - ENVO:01000159 - ORCID:0000-0002-4366-3088 - - - A prominent or distinctive aspect, quality, or characteristic pertaining to or derived from living organisms. - ORCID:0000-0002-4366-3088 - - - - - - - - - - marine pockmark - - 2010-03-20T09:14:38Z - ENVO - ENVO:01000160 - ORCID:0000-0002-4366-3088 - Pockmarks are craters in the seabed resulting from the release of gas or liquid. Generally, they are formed in soft, fine-grained seabed sediments by the escape of fluids (gas or water, but mainly methane) into the water column. - envoPolar - - - ORCID:0000-0002-4366-3088 - Pockmarks are craters in the seabed resulting from the release of gas or liquid. Generally, they are formed in soft, fine-grained seabed sediments by the escape of fluids (gas or water, but mainly methane) into the water column. - https://en.wikipedia.org/wiki/Pockmark - - - - - - - - - - marine sponge reef - - 2010-03-20T09:18:54Z - A marine sponge reef is marine reefs primarily built by marine sponges. The primary frame-building sponges are all members of the order Hexactinosa. They are found only in glacier-scoured troughs of low-angle continental shelf. The seafloor is stable and consists of rock, coarse gravel, and large boulders. - ENVO - ENVO:01000161 - ORCID:0000-0002-4366-3088 - - - A marine sponge reef is marine reefs primarily built by marine sponges. The primary frame-building sponges are all members of the order Hexactinosa. They are found only in glacier-scoured troughs of low-angle continental shelf. The seafloor is stable and consists of rock, coarse gravel, and large boulders. - https://en.wikipedia.org/wiki/Sponge_reef - - - - - - - - - - organ - - 2010-03-20T09:21:27Z - A collection of tissues joined in structural unit to serve a common function. - ENVO - ENVO:01000162 - LTER:395 - ORCID:0000-0002-4366-3088 - - - A collection of tissues joined in structural unit to serve a common function. - https://en.wikipedia.org/wiki/Organ - - - - - - - - - - photophore - - 2010-03-20T09:23:50Z - A photophore is a light-emitting organ which appears as luminous spots on various marine animals, including fish and cephalopods. The organ can be simple, or as complex as the human eye; equipped with lenses, shutters, color filters and reflectors. The light can be produced from compounds during the digestion of prey, from specialized mitochondrial cells in the organism, called photocytes ("light producing" cells) , or, similarly, associated with symbiotic bacteria in the organism. - ENVO - ENVO:01000163 - EcoLexicon:photophore - ORCID:0000-0002-4366-3088 - - - A photophore is a light-emitting organ which appears as luminous spots on various marine animals, including fish and cephalopods. The organ can be simple, or as complex as the human eye; equipped with lenses, shutters, color filters and reflectors. The light can be produced from compounds during the digestion of prey, from specialized mitochondrial cells in the organism, called photocytes ("light producing" cells) , or, similarly, associated with symbiotic bacteria in the organism. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Photophore - - - - - - - - - - root nodule - - 2010-03-20T09:23:50Z - ENVO - ENVO:01000164 - ORCID:0000-0002-4366-3088 - Root nodules occur on the roots of plants that associate with symbiotic nitrogen-fixing bacteria. - - - Root nodules occur on the roots of plants that associate with symbiotic nitrogen-fixing bacteria. - https://en.wikipedia.org/wiki/Root_nodule - - - - - - - - - - trophosome - - 2010-03-20T09:23:50Z - A specialised organ found in deep-sea tube worms populating hydrothermal vent environments that is colonised by chemosynthetic bacteria which supply the host worm with organic compounds. The term may be applied to similar organs in other worms. - ENVO - ENVO:01000165 - ORCID:0000-0002-4366-3088 - - - A specialised organ found in deep-sea tube worms populating hydrothermal vent environments that is colonised by chemosynthetic bacteria which supply the host worm with organic compounds. The term may be applied to similar organs in other worms. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Giant_tube_worm - - - - - - - - - - mycetome - - 2010-03-20T09:23:50Z - A specialized organ that is linked to the gut in beetles and host to a symbiotic yeast. The yeast cells assist in the digestion of less nutritious foods, supply needed B-vitamins and sterols, and provide resistance to certain toxins. - ENVO - ENVO:01000166 - ORCID:0000-0002-4366-3088 - - - A specialized organ that is linked to the gut in beetles and host to a symbiotic yeast. The yeast cells assist in the digestion of less nutritious foods, supply needed B-vitamins and sterols, and provide resistance to certain toxins. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Lasioderma_serricorne - - - - - - - - - - determinate root nodule - - 2010-03-20T09:34:55Z - Determinate nodules are root nodules found on tropical (sub)legumes, such as those of the genera Glycine (soybean), Phaseolus (common bean), Lotus, and Vigna. Determinate nodules lose meristematic activity shortly after initiation, thus growth is due to cell expansion resulting in mature nodules which are spherical in shape. - ENVO - ENVO:01000167 - ORCID:0000-0002-4366-3088 - - - Determinate nodules are root nodules found on tropical (sub)legumes, such as those of the genera Glycine (soybean), Phaseolus (common bean), Lotus, and Vigna. Determinate nodules lose meristematic activity shortly after initiation, thus growth is due to cell expansion resulting in mature nodules which are spherical in shape. - https://en.wikipedia.org/wiki/Root_nodule - - - - - - - - - - indeterminate root nodule - - 2010-03-20T09:34:55Z - ENVO - ENVO:01000168 - Indeterminate nodules are found on temperate legumes like Pisum (pea), Medicago (alfalfa), Trifolium (clover), and Vicia (vetch). They earned the moniker "indeterminate" because they maintain an active apical meristem that produces new cells for growth over the life of the nodule. Because they are actively growing, indeterminate nodules manifest zones which demarcate different stages of development/symbiosis. - ORCID:0000-0002-4366-3088 - - - Indeterminate nodules are found on temperate legumes like Pisum (pea), Medicago (alfalfa), Trifolium (clover), and Vicia (vetch). They earned the moniker "indeterminate" because they maintain an active apical meristem that produces new cells for growth over the life of the nodule. Because they are actively growing, indeterminate nodules manifest zones which demarcate different stages of development/symbiosis. - https://en.wikipedia.org/wiki/Root_nodule - - - - - - - - - - indeterminate root nodule active meristem - - - - - - - - 2010-03-20T09:38:56Z - A part of an indeterminate root nodule where new nodule tissue is formed which will later differentiate into the other zones of the nodule. - ENVO - ENVO:01000169 - ORCID:0000-0002-4366-3088 - - - A part of an indeterminate root nodule where new nodule tissue is formed which will later differentiate into the other zones of the nodule. - https://en.wikipedia.org/wiki/Root_nodule - - - - - - - - - - indeterminate root nodule infection zone - - - - - - - - 2010-03-20T09:38:56Z - A part of an indeterminate root nodule permeated with infection threads full of bacteria. The plant cells are larger than in the previous zone and cell division is halted. - ENVO - ENVO:01000170 - ORCID:0000-0002-4366-3088 - - - A part of an indeterminate root nodule permeated with infection threads full of bacteria. The plant cells are larger than in the previous zone and cell division is halted. - https://en.wikipedia.org/wiki/Root_nodule - - - - - - - - - - indeterminate root nodule nitrogen fixation zone - - - - - - - - 2010-03-20T09:38:56Z - A part of an indeterminate root nodule where each cell contains a large, central vacuole and the cytoplasm is filled with fully differentiated bacteroids which are actively fixing nitrogen. Typically, the plant provides these cells with leghemoglobin, resulting in a distinct pink color. - ENVO - ENVO:01000171 - ORCID:0000-0002-4366-3088 - - - A part of an indeterminate root nodule where each cell contains a large, central vacuole and the cytoplasm is filled with fully differentiated bacteroids which are actively fixing nitrogen. Typically, the plant provides these cells with leghemoglobin, resulting in a distinct pink color. - https://en.wikipedia.org/wiki/Root_nodule - - - - - - - - - - indeterminate root nodule senescent zone - - - - - - - - 2010-03-20T09:38:56Z - A part of an indeterminate root nodule where plant cells and their bacteroid contents are being degraded. The breakdown of the heme component of leghemoglobin results in a visible greening at the base of the nodule. - ENVO - ENVO:01000172 - ORCID:0000-0002-4366-3088 - - - A part of an indeterminate root nodule where plant cells and their bacteroid contents are being degraded. The breakdown of the heme component of leghemoglobin results in a visible greening at the base of the nodule. - https://en.wikipedia.org/wiki/Root_nodule - - - - - - - - - - anoxic water - - - - - - - - - - - - - - - - - - - - - - 2010-03-21T06:05:53Z - ORCID:0000-0002-4366-3088 - Water depleted of dissolved oxygen. - anaerobic water - reducing water - - - ORCID:0000-0002-4366-3088 - Water depleted of dissolved oxygen. - - - - - - - - - - forest biome - - - - - - - - 2013-04-07T14:26:46Z - A forest biome is a terrestrial biome which includes, across its entire spatial extent, densely packed vegetation which strongly limits light penetration to the forest floor. - ENVO - ENVO:01000174 - ORCID:0000-0002-4366-3088 - Preliminary definition. - SPIRE:Forest - LTER:212 - - - - - - - - woodland biome - - - - - - - - 2013-04-07T14:26:46Z - A woodland biome is a terrestrial biome which includes, across its entire spatial extent, woody plants spaced sufficiently far apart to allow light penetration to support communities of herbaceous plants or shrubs living closer to the woodland floor. - ENVO - ENVO:01000175 - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - - - - - - shrubland biome - - 2013-04-07T14:26:46Z - A shrubland biome is a terrestrial biome which includes, across its entire spatial extent, dense groups of shrubs. - ENVO - ENVO:01000176 - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - - - - - - grassland biome - - - - - - - - 2013-04-07T14:26:46Z - A grassland biome is a terrestrial biome which includes, across its entire spatial extent, an unbroken layer of grasses (Gramineae), sedges (Cyperaceae) or rushes (Juncaceae). - ENVO - ENVO:01000177 - ORCID:0000-0002-4366-3088 - SPIRE:Savannah_or_grassland - - - - - - - - savanna biome - - 2013-04-07T14:26:46Z - A savanna biome is a woodland biome which has seasonal water availability and includes, across its entire spatial extent, trees spaced sufficiently far apart to allow an unbroken layer of grass, sedge (Cyperaceae) or rush (Juncaceae) communities to live. - ENVO - ENVO:01000178 - ORCID:0000-0002-4366-3088 - Preliminary definition - SPIRE:Savannah_or_grassland - - - - - - - - desert biome - - - - - - - - - - - - - - 2013-04-07T14:26:46Z - A desert biome is a terrestrial biome which loses more liquid water by evapotranspiration than is supplied by precipitation and includes communities adapted to these conditions. - ORCID:0000-0002-4366-3088 - Preliminary definition. - SPIRE:Desert_or_dune - wwfBiome - - - - - - - - tundra biome - - - - - - - - 2013-04-07T14:26:46Z - A tundra is a terrestrial biome which includes, across its spatial extent, only low-growing vegetation such as dwarf shrubs, sedges and grasses, mosses, and lichens. Tundra biomes rarely have monthly average temperatures above 10 degrees Celsius and have low evapotranspiration ratios. - ENVO - ENVO:01000180 - ORCID:0000-0002-4366-3088 - Preliminary definition. - SPIRE:Tundra - envoPolar - wwfBiome - - - - - - - - mangrove biome - - - - - - - - 2013-04-07T14:26:46Z - A mangrove biome is a terrestrial biome which includes, across its spatial extent, mangrove plants (Rhizophoraceae). Mangrove plants are able to withstand high levels of salinity as well as regions of anoxia and frequent tidal inundation. Mangrove biomes often occur near tropical and sub-tropical estuaries and depositional marine coastal environments where fine sediments (often with high organic content) collect in areas protected from high energy wave action. - ENVO - ENVO:01000181 - ORCID:0000-0002-4366-3088 - Preliminary definition. Depending on whether mangrove trees or shrubs are present, this class could be a child of shrubland biome or woodland biome. Consider creating the appropriate classes. - LTER:322 - wwfBiome - - - A mangrove biome is a terrestrial biome which includes, across its spatial extent, mangrove plants (Rhizophoraceae). Mangrove plants are able to withstand high levels of salinity as well as regions of anoxia and frequent tidal inundation. Mangrove biomes often occur near tropical and sub-tropical estuaries and depositional marine coastal environments where fine sediments (often with high organic content) collect in areas protected from high energy wave action. - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Mangrove - - - - - - - - - - temperate desert biome - - - - - - - - 2013-04-07T14:28:08Z - A temperate desert biome is a desert biome which has communities adapted to intermediate insolation, low rainfall, and large temperature variations between winter and summer. Winter temperatures may fall below 0 degrees Celsius. Some precipitation in this biome may fall as snow. - ENVO - ENVO:01000182 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - A temperate desert biome is a desert biome which has communities adapted to intermediate insolation, low rainfall, and large temperature variations between winter and summer. Winter temperatures may fall below 0 degrees Celsius. Some precipitation in this biome may fall as snow. - WWW:http://www.fs.fed.us/land/ecosysmgmt/colorimagemap/images/340.html - - - - - - - - - - tropical desert biome - - - - - - - - 2013-04-07T14:28:08Z - A tropical desert biome is a desert biome which has communities adapted to temperatures above a monthly average of 18 degrees Celsius, high daily temperature ranges of approximately 20 degrees Celsius, very high insolation due to inhibited cloud formation, and very low precipitation. Tropical desert biomes located near coasts with cold upwellings may have cooler temperatures and reduced insolution due to fog. - ENVO - ENVO:01000183 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - A tropical desert biome is a desert biome which has communities adapted to temperatures above a monthly average of 18 degrees Celsius, high daily temperature ranges of approximately 20 degrees Celsius, very high insolation due to inhibited cloud formation, and very low precipitation. Tropical desert biomes located near coasts with cold upwellings may have cooler temperatures and reduced insolution due to fog. - WWW:http://www.earthonlinemedia.com/ebooks/tpe_3e/title_page.html - - - - - - - - - - subtropical desert biome - - - - - - - - 2013-04-07T14:28:08Z - A subtropical desert biome is a desert biome which has communities adapted to temperatures above a monthly average of 18 degrees Celsius, high daily temperature ranges of approximately 20 degrees Celsius, high insolation (but lower than that of a tropical desert biome), inhibited cloud formation, and very low precipitation. Subtropical desert biomes located near coasts with cold upwellings may have cooler temperatures and reduced insolution due to fog. - ENVO - ENVO:01000184 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - A subtropical desert biome is a desert biome which has communities adapted to temperatures above a monthly average of 18 degrees Celsius, high daily temperature ranges of approximately 20 degrees Celsius, high insolation (but lower than that of a tropical desert biome), inhibited cloud formation, and very low precipitation. Subtropical desert biomes located near coasts with cold upwellings may have cooler temperatures and reduced insolution due to fog. - WWW:http://www.earthonlinemedia.com/ebooks/tpe_3e/title_page.html - https://en.wikipedia.org/wiki/Subtropical#Semi-desert.2Fdesert_climate - - - - - - - - - - montane desert biome - - - - - - - - 2013-04-07T14:28:08Z - A montane desert biome is a desert biome which occurs in regions elevated above sea level and which has community structure determined by elevation-dependent environmental conditions. - ENVO - ENVO:01000185 - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - - - - - - polar desert biome - - - - - - - - - 2013-04-07T14:28:08Z - A polar desert biome is a desert biome which is subject to low levels of insolation, annual precipitation less than 250 millimeters, and a mean temperature less than 10 degrees Celsius during its warmest month. Temperature changes in polar deserts frequently cross the freezing point of water. - ENVO - ENVO:01000186 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - envoPolar - - - A polar desert biome is a desert biome which is subject to low levels of insolation, annual precipitation less than 250 millimeters, and a mean temperature less than 10 degrees Celsius during its warmest month. Temperature changes in polar deserts frequently cross the freezing point of water. - https://en.wikipedia.org/wiki/Polar_desert - - - - - - - - - - subtropical savanna biome - - - - - - - - 2013-04-07T14:28:51Z - ENVO - ENVO:01000187 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - tropical savanna biome - - - - - - - - 2013-04-07T14:28:51Z - ENVO - ENVO:01000188 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - temperate savanna biome - - - - - - - - 2013-04-07T14:28:51Z - ENVO - ENVO:01000189 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - prairie biome - - - - - - - - flooded savanna biome - - - - - - - - - - - - - - - - - - 2013-04-07T14:28:51Z - A flooded savanna biome is a savanna biome which has very wet to saturated soil moisture content. - ENVO - ENVO:01000190 - ORCID:0000-0002-4366-3088 - marsh - swamp - wwfBiome - - - A flooded savanna biome is a savanna biome which has very wet to saturated soil moisture content. - https://en.wikipedia.org/wiki/Flooded_grasslands_and_savannas - - - - - - - - - - subtropical grassland biome - - - - - - - - 2013-04-07T14:29:48Z - ENVO - ENVO:01000191 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - tropical grassland biome - - - - - - - - 2013-04-07T14:29:48Z - ENVO - ENVO:01000192 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - temperate grassland biome - - - - - - - - 2013-04-07T14:29:48Z - ENVO - ENVO:01000193 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - prairie biome - - - - - - - - montane grassland biome - - - - - - - - 2013-04-07T14:29:48Z - A montane grassland biome is a grassland biome which occurs in regions elevated above sea level and which has community structure determined by elevation-dependent environmental conditions. - ENVO - ENVO:01000194 - ORCID:0000-0002-4366-3088 - Preliminary definition. - wwfBiome - - - - - - - - flooded grassland biome - - - - - - - - - - - - - - - - - - 2013-04-07T14:29:48Z - ENVO - ENVO:01000195 - ORCID:0000-0002-4366-3088 - wwfBiome - - - - - - - - coniferous forest biome - - 2013-04-07T14:31:01Z - A coniferous forest biome is a forest biome which contains densely packed populations or communities of coniferous trees, strongly limiting light penetration to the forest floor. - ENVO - ENVO:01000196 - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - - - - - - broadleaf forest biome - - 2013-04-07T14:31:01Z - A broadleaf forest biome is a forest biome which contains densely packed populations or communities of broadleaf trees, strongly limiting light penetration to the forest floor. - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - - - - - - mixed forest biome - - 2013-04-07T14:31:01Z - A mixed forest biome is a forest biome which contains densely packed populations or communities of broadleaf and coniferous trees, strongly limiting light penetration to the forest floor. - ENVO - ENVO:01000198 - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - - - - - - mediterranean forest biome - - - - - - - - 2013-04-07T14:31:01Z - A mediterranean forest biome is a forest biome which includes communities adapted to hot to warm, dry summers, mild to cold, rainy winters, and the influence of large, usually marine, bodies of water. - ENVO - ENVO:01000199 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - tropical broadleaf forest biome - - - - - - - - 2013-04-07T14:32:28Z - ENVO - ENVO:01000200 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - - - - - - subtropical broadleaf forest biome - - - - - - - - 2013-04-07T14:32:28Z - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - - - - - - temperate broadleaf forest biome - - - - - - - - 2013-04-07T14:32:28Z - ENVO - ENVO:01000202 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - environmental condition - - 2013-04-07T14:35:18Z - A condition defines a restricted range of a given quality or combination of qualities. If an environment class, E, has_condition C, then all qualities listed in C are restricted to the ranges defined in C in E. This is not intended as a logical conditional. - An environmental condition is a range of a determinate quality or combination of qualities that are present in an environmental system. - ORCID:0000-0002-4366-3088 - envoPolar - - - An environmental condition is a range of a determinate quality or combination of qualities that are present in an environmental system. - DOI:10.1186/2041-1480-4-43 - - - - - - - - - - tropical - - 2013-04-07T14:36:47Z - A tropical condition is an environmental condition in which an environmental system receives high yearly solar irradiance per unit area and, on Earth, the Sun reaches a subsolar point at least once during the solar year. This results in a hot and moist year-round climate at low elevations, which have a monthly average temperature above 18 degrees Celsius. - EcoLexicon:the_tropics - ORCID:0000-0002-4366-3088 - SPIRE:Tropical - - - A tropical condition is an environmental condition in which an environmental system receives high yearly solar irradiance per unit area and, on Earth, the Sun reaches a subsolar point at least once during the solar year. This results in a hot and moist year-round climate at low elevations, which have a monthly average temperature above 18 degrees Celsius. - https://en.wikipedia.org/wiki/Tropical - - - - - - - - - - subtropical - - 2013-04-07T14:36:47Z - A subtropical condition is an environmental condition in which an envrionmental system receives more solar irradiance than those with temperate conditions, but less than those with tropical conditions. At low elevations, this typically results in eight months of the year having average temperatures greater than or equal to 10 degrees Celsius with the coldest monthly temperature averaging between 2 and 13 degrees Celsius. - As with most other climatic zones and conditions, multiple classification schemes have somehat different definitions and criteria. To quote from https://en.wikipedia.org/wiki/ "Several methods have been used to define the subtropical climate. In the Trewartha climate classification, a subtropical region should have at least eight months with a mean temperature of 10 °C (50.0 °F) or above. German climatologists Carl Troll and Karlheinz Paffen defined Warm temperate zones as plain and hilly lands having an average temperature of the coldest month between 2 °C (35.6 °F) and 13 °C (55.4 °F) in the Northern Hemisphere and between 6 °C (42.8 °F) and 13 °C (55.4 °F) in the Southern Hemisphere, excluding oceanic and continental climates. According to the Troll-Paffen climate classification, there generally exists one large subtropical zone named the warm-temperate subtropical zone,[4] which is subdivided into seven smaller areas.[5] - -According to the E. Neef climate classification, the subtropical zone is divided into two parts: Rainy winters of the west sides and Eastern subtropical climate.[6] According to the Wilhelm Lauer & Peter Frankenberg climate classification, the subtropical zone is divided into three parts: high-continental, continental, and maritime.[7] According to the Siegmund/Frankenberg climate classification, subtropical is one of six climate zones in the world.[8]" - ORCID:0000-0002-4366-3088 - - - - - - - - temperate - - 2013-04-07T14:36:47Z - A temperate condition is an environmental condition in which an environmental system receives less solar irradiance than those with subpolar conditions, but greater than those with subtropical conditions. - ORCID:0000-0002-4366-3088 - SPIRE:Temperate - This class' definition is less satisfactory than the other latitudinal conditoins. - tepid climate - - - A temperate condition is an environmental condition in which an environmental system receives less solar irradiance than those with subpolar conditions, but greater than those with subtropical conditions. - https://en.wikipedia.org/wiki/Temperate_climate - - - - - tepid climate - https://en.wikipedia.org/wiki/Temperate_climate - - - - - - - - - - mediterranean - - 2013-04-07T14:36:47Z - A mediterranean condition is a subtropical condition in which hot dry summers and winters with moderate to high rainfall. - ORCID:0000-0002-4366-3088 - These regions are under the constant influence of the subtropical ridge. - - - A mediterranean condition is a subtropical condition in which hot dry summers and winters with moderate to high rainfall. - https://en.wikipedia.org/wiki/Subtropics - - - - - - - - - - mediterranean woodland biome - - - - - - - - 2013-04-07T15:01:04Z - A mediterranean woodland biome is a subtropical woodland biome which includes communities adapted to hot to warm, dry summers, mild to cold, rainy winters, and the influence of large, usually marine, bodies of water. - ENVO - ENVO:01000208 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - - - - - - subtropical coniferous forest biome - - - - - - - - 2013-04-07T14:39:14Z - ENVO - ENVO:01000209 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - tropical coniferous forest biome - - - - - - - - 2013-04-07T14:39:14Z - ENVO - ENVO:01000210 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - temperate coniferous forest biome - - - - - - - - 2013-04-07T14:39:14Z - ENVO - ENVO:01000211 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - temperate mixed forest biome - - - - - - - - 2013-04-07T14:39:30Z - ENVO - ENVO:01000212 - ORCID:0000-0002-4366-3088 - wwfBiome - - - - - - - - subtropical shrubland biome - - - - - - - - 2013-04-07T14:40:32Z - ENVO - ENVO:01000213 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - tropical shrubland biome - - - - - - - - 2013-04-07T14:40:32Z - ENVO - ENVO:01000214 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - temperate shrubland biome - - - - - - - - 2013-04-07T14:40:32Z - ENVO - ENVO:01000215 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - prairie biome - - - - - - - - montane shrubland biome - - - - - - - - 2013-04-07T14:40:32Z - A montane shrubland biome is a shrubland biome which occurs in regions elevated above sea level and which has community structure determined by elevation-dependent environmental conditions. - ENVO - ENVO:01000216 - ORCID:0000-0002-4366-3088 - Preliminary definition. - wwfBiome - - - - - - - - mediterranean shrubland biome - - - - - - - - 2013-04-07T14:40:32Z - A mediterranean shrubland biome is a subtropical shrubland biome which includes communities adapted to hot to warm, dry summers, mild to cold, rainy winters, and the influence of large, usually marine, bodies of water. - ENVO - ENVO:01000217 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - xeric shrubland biome - - 2013-04-07T14:40:32Z - ENVO - ENVO:01000218 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - wwfBiome - - - - - - - - anthropogenic terrestrial biome - - 2013-04-07T14:45:22Z - An anthropogenic terrestrial biome is a terrestrial biome which has community structures determined by human activity. - ORCID:0000-0002-4366-3088 - Preliminary definition. - human biome - anthrome - - - An anthropogenic terrestrial biome is a terrestrial biome which has community structures determined by human activity. - http://www.eoearth.org/view/article/150128/ - - - - - - - - - - tropical woodland biome - - - - - - - - 2013-04-07T15:01:04Z - ENVO - ENVO:01000220 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - - - - - - temperate woodland biome - - - - - - - - 2013-04-07T15:01:04Z - ENVO - ENVO:01000221 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - - - - - - subtropical woodland biome - - - - - - - - 2013-04-07T15:01:04Z - ENVO - ENVO:01000222 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - - - - - - montane savanna biome - - - - - - - - 2013-04-07T16:50:01Z - A montane savanna biome is a savanna biome which occurs in regions elevated above sea level and which has community structure determined by elevation-dependent environmental conditions. - ENVO - ENVO:01000223 - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - - - - - - mediterranean grassland biome - - - - - - - - 2013-04-19T11:42:48Z - A mediterranean grassland biome is a subtropical grassland biome which includes communities adapted to hot to warm, dry summers, mild to cold, rainy winters, and the influence of large, usually marine, bodies of water. - ENVO - ENVO:01000224 - ORCID:0000-0002-4366-3088 - Preliminary definition. The semantics and definitions of "mediterranean", "subtropical", "tropical", "temperate", "polar", and similar climate types may be transferred to an "environmental condition" class once the semantics of this class have been established. - - - - - - - - subtropical dry broadleaf forest biome - - 2013-04-24T12:04:53Z - ORCID:0000-0002-4366-3088 - wwfBiome - - - - - - - - subtropical moist broadleaf forest biome - - 2013-04-24T12:04:53Z - ENVO - ENVO:01000226 - ORCID:0000-0002-4366-3088 - wwfBiome - - - - - - - - tropical dry broadleaf forest biome - - 2013-04-24T12:05:25Z - ENVO - ENVO:01000227 - ORCID:0000-0002-4366-3088 - wwfBiome - - - - - - - - tropical moist broadleaf forest biome - - 2013-04-24T12:05:25Z - ENVO - ENVO:01000228 - ORCID:0000-0002-4366-3088 - SPIRE:Rainforest - rainforest biome - wwfBiome - - - - - - - - mediterranean savanna biome - - - - - - - - 2013-04-24T12:20:42Z - ENVO - ENVO:01000229 - ORCID:0000-0002-4366-3088 - wwfBiome - - - - - - - - arid - - 2013-04-24T13:28:18Z - An environmental condition in which annual precipitation is less than half of annual potential evapotranspiration. - EcoLexicon:aridity - ORCID:0000-0002-4366-3088 - envoPolar - - - - - - - - lava - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2013-05-05T16:52:47Z - ENVO - ENVO:01000231 - EcoLexicon:lava - Lava is a mixture of molten or semi-molten rock, volatiles, and solids which has extruded beyond a planetary crust. - PLB - SWEETRealm:Lava - Some use 'lava' to refer to rock that is formed when lava cools. This is not the intended meaning of this class. See 'igneous rock' or similar. - - - Lava is a mixture of molten or semi-molten rock, volatiles, and solids which has extruded beyond a planetary crust. - https://en.wikipedia.org/wiki/Lava - - - - - - - - - - felsic lava - - 2013-05-05T16:56:29Z - ENVO - ENVO:01000232 - Felsic lava is lava which is high in silica (> 69 percent by weight), aluminium, potassium, sodium, and calcium, forming a polymerized liquid rich in feldspar and quartz. Felsic lava has a higher viscosity than other magma types. Felsic magmas can erupt at temperatures as low as 650 to 750 °C. Unusually hot (>950 °C) rhyolite lavas, however, may flow for distances of many tens of kilometres - PLB - silicic lava - - - https://en.wikipedia.org/wiki/Lava - silicic lava - - - - - Felsic lava is lava which is high in silica (> 69 percent by weight), aluminium, potassium, sodium, and calcium, forming a polymerized liquid rich in feldspar and quartz. Felsic lava has a higher viscosity than other magma types. Felsic magmas can erupt at temperatures as low as 650 to 750 °C. Unusually hot (>950 °C) rhyolite lavas, however, may flow for distances of many tens of kilometres - https://en.wikipedia.org/wiki/Lava - https://en.wikipedia.org/wiki/Igneous_rock - - - - - - - - - - intermediate lava - - 2013-05-05T16:56:29Z - ENVO - ENVO:01000233 - Intermediate lava is lava which, relative to felsic lava, is lower in aluminium and silica (between 52 and 63 percent by weight), and usually somewhat richer in magnesium and iron. The temperature of intermediate lava ranges from 750 to 950 degrees Celsius, destroying polymerized bonds and promoting more fluid behaviour relative to felsic lavas and also a greater tendency to form phenocrysts. Higher iron and magnesium tends to manifest as a darker groundmass, and also occasionally amphibole or pyroxene phenocrysts. - PLB - andesitic lava - - - Intermediate lava is lava which, relative to felsic lava, is lower in aluminium and silica (between 52 and 63 percent by weight), and usually somewhat richer in magnesium and iron. The temperature of intermediate lava ranges from 750 to 950 degrees Celsius, destroying polymerized bonds and promoting more fluid behaviour relative to felsic lavas and also a greater tendency to form phenocrysts. Higher iron and magnesium tends to manifest as a darker groundmass, and also occasionally amphibole or pyroxene phenocrysts. - https://en.wikipedia.org/wiki/Intermediate_composition - - - - - andesitic lava - https://en.wikipedia.org/wiki/Lava - - - - - - - - - - mafic lava - - 2013-05-05T16:56:29Z - ENVO - ENVO:01000234 - Mafic lava is lava which, relative to other lava types other than ultramafic lava, has a high ferromagnesian content and low aluminium and silica content, with silca making up between 45 and 52 percent of its weight. Mafic lava generally erupts at temperatures in excess of 950 degrees Celsius. The high temperature and low polymerisation in mafic lava favors low viscosity and chemical diffusion, promoting the formation of large, well-formed phenocrysts. - PLB - basaltic lava - - - basaltic lava - https://en.wikipedia.org/wiki/Lava - - - - - Mafic lava is lava which, relative to other lava types other than ultramafic lava, has a high ferromagnesian content and low aluminium and silica content, with silca making up between 45 and 52 percent of its weight. Mafic lava generally erupts at temperatures in excess of 950 degrees Celsius. The high temperature and low polymerisation in mafic lava favors low viscosity and chemical diffusion, promoting the formation of large, well-formed phenocrysts. - https://en.wikipedia.org/wiki/Lava - https://en.wikipedia.org/wiki/Igneous_rock - - - - - - - - - - ultramafic lava - - 2013-05-05T16:56:29Z - ENVO - ENVO:01000235 - PLB - Ultramafic lava is lava which, relative to other lava types, has very high magnesium oxide content and less than 45 percent silica by weight is thought to have erupted at temperatures of 1600 degrees Celsius. Due to its high temperature and composition, the viscosity of ultramafic lava is very low. - - - Ultramafic lava is lava which, relative to other lava types, has very high magnesium oxide content and less than 45 percent silica by weight is thought to have erupted at temperatures of 1600 degrees Celsius. Due to its high temperature and composition, the viscosity of ultramafic lava is very low. - https://en.wikipedia.org/wiki/Lava - https://en.wikipedia.org/wiki/Igneous_rock - - - - - - - - - - basalt - - - - - - - - - - - - - - - - - - - 2013-05-05T17:07:15Z - Basalt is a volcanic rock which is formed by the rapid cooling of basaltic lava. - ENVO - ENVO:01000236 - EcoLexicon:basalt - PLB - SWEETRealm:Basalt - - - Basalt is a volcanic rock which is formed by the rapid cooling of basaltic lava. - https://en.wikipedia.org/wiki/Basalt - - - - - - - - - - coastal scrubland - - - - - - - - - - - - - - - - - - - 2013-05-06T09:47:07Z - A coastal scrubland is a scrubland which is part of a coast. - ENVO - ENVO:01000237 - ORCID:0000-0002-4366-3088 - coastal chaparral - - - A coastal scrubland is a scrubland which is part of a coast. - https://en.wikipedia.org/wiki/California_coastal_sage_and_chaparral_ecoregion - https://en.wikipedia.org/wiki/Coastal_sage_scrub - - - - - coastal chaparral - https://en.wikipedia.org/wiki/California_chaparral_and_woodlands - - - - - - - - - - polar - - 2013-05-08T07:49:36Z - A polar condition is an environmental condition in which an environmental system receives low, yearly solar irradiance per unit area, resulting in colder climatic conditions. - ORCID:0000-0002-4366-3088 - On Earth, polar conditions are such that every month has average temperature lower than 10 degrees Celsius. Note that this class refers to a climatic rather than a positional condition. - SPIRE:Polar - SWEETRealm:Polarization - frigid - envoPolar - - - A polar condition is an environmental condition in which an environmental system receives low, yearly solar irradiance per unit area, resulting in colder climatic conditions. - https://en.wikipedia.org/wiki/Polar_climate - - - - - frigid - https://en.wikipedia.org/wiki/Polar_climate - - - - - - - - - - oak woodland - - 2013-06-04T22:33:52Z - An oak woodland is a woodland which has a tree community primarily composed of oak trees. - - - An oak woodland is a woodland which has a tree community primarily composed of oak trees. - ORCID:0000-0001-8743-9574 - - - - - - - - - - conifer woodland - - 2013-06-06T14:39:17Z - A conifer woodland is a woodland which has a tree community primarily composed of coniferous trees, from the Division Pinophyta, also known as Coniferophyta or Coniferae. - - - A conifer woodland is a woodland which has a tree community primarily composed of coniferous trees, from the Division Pinophyta, also known as Coniferophyta or Coniferae. - ORCID:0000-0001-8743-9574 - https://en.wikipedia.org/wiki/Conifer - - - - - - - - - - juniper woodland - - 2013-06-06T14:44:52Z - A juniper woodland is a woodland which has a tree community primarily composed of trees of the genus Juniperus. - ENVO - ENVO:01000241 - PLB - - - A juniper woodland is a woodland which has a tree community primarily composed of trees of the genus Juniperus. - ORCID:0000-0001-8743-9574 - https://en.wikipedia.org/wiki/Juniper - - - - - - - - - - desert scrubland - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2013-06-06T15:02:30Z - A scrubland which is located in a desert. - ENVO - ENVO:01000242 - PLB - desert scrub - - - A scrubland which is located in a desert. - ORCID:0000-0001-8743-9574 - - - - - ORCID:0000-0001-8743-9574 - desert scrub - - - - - - - - - - boulder - - 2013-06-06T15:10:50Z - A piece of rock with a grain size above 300 millimetres in diameter. Smaller boulders are, at times, referred to as rocks or stones. - ENVO - ENVO:01000243 - EcoLexicon:boulder - PLB - SWEETRealm:Boulder - - - A piece of rock with a grain size above 300 millimetres in diameter. Smaller boulders are, at times, referred to as rocks or stones. - ORCID:0000-0001-8743-9574 - https://en.wikipedia.org/wiki/Boulder - - - - - - - - - - pinyon juniper woodland - - 2013-06-06T15:22:52Z - A pinyon juniper woodland is a conifer woodland which has a tree community primarily composed of trees of the subsection Cembroides of the genus Pinus and the genus Juniperus. - ENVO - ENVO:01000244 - PLB - - - A pinyon juniper woodland is a conifer woodland which has a tree community primarily composed of trees of the subsection Cembroides of the genus Pinus and the genus Juniperus. - ORCID:0000-0001-8743-9574 - https://en.wikipedia.org/wiki/Juniper - https://en.wikipedia.org/wiki/Pinyon_pine - - - - - - - - - - cropland biome - - 2013-06-14T11:45:47Z - A cropland biome is an anthropogenic terrestrial biome which is primarily used for agricultural activity and which contains no village or larger human settlement. - ENVO - ENVO:01000245 - ORCID:0000-0002-4366-3088 - - - A cropland biome is an anthropogenic terrestrial biome which is primarily used for agricultural activity and which contains no village or larger human settlement. - DOI:10.1111/j.1466-8238.2010.00540.x - DOI:10.1890/070062 - - - - - - - - - - village biome - - 2013-06-14T11:45:47Z - A village biome is an anthropogenic terrestrial biome which contains settlements such as villages, towns, and/or small cities and which is primarily used for agricultural activity. - ENVO - ENVO:01000246 - ORCID:0000-0002-4366-3088 - Villages are also described as agricultural settlements with greater than 100 persons per square kilometre; however, no upper limit is defined. - - - A village biome is an anthropogenic terrestrial biome which contains settlements such as villages, towns, and/or small cities and which is primarily used for agricultural activity. - DOI:10.1111/j.1466-8238.2010.00540.x - DOI:10.1890/070062 - - - - - - - - - - rangeland biome - - 2013-06-14T11:45:47Z - A rangeland biome is an anthropogenic terrestrial biome which is primarily used for the rearing and grazing of livestock. - ENVO - ENVO:01000247 - ORCID:0000-0002-4366-3088 - - - A rangeland biome is an anthropogenic terrestrial biome which is primarily used for the rearing and grazing of livestock. - DOI:10.1111/j.1466-8238.2010.00540.x - DOI:10.1890/070062 - - - - - - - - - - dense settlement biome - - 2013-06-14T11:45:47Z - A dense settlement biome is an anthropogenic terrestrial biome which is primarily used for human habitation, recreation, and industry within built structures with little other land use. - ENVO - ENVO:01000248 - ORCID:0000-0002-4366-3088 - - - A dense settlement biome is an anthropogenic terrestrial biome which is primarily used for human habitation, recreation, and industry within built structures with little other land use. - DOI:10.1111/j.1466-8238.2010.00540.x - DOI:10.1890/070062 - - - - - - - - - - urban biome - - 2013-06-14T11:45:47Z - An urban biome is a dense settlement biome which has been urbanised. - ENVO - ENVO:01000249 - ORCID:0000-0002-4366-3088 - SPIRE:Urban - - - An urban biome is a dense settlement biome which has been urbanised. - DOI:10.1111/j.1466-8238.2010.00540.x - DOI:10.1890/070062 - - - - - - - - - - subpolar coniferous forest biome - - - - - - - - 2013-09-04T06:41:53Z - A subpolar coniferous forest biome is a coniferous forest biome which includes communities adapted to subpolar conditions. - ENVO - ENVO:01000250 - EcoLexicon:taiga - LTER:72 - SPIRE:Taiga - boreal forest - taiga - wwfBiome - - - - - - - - subpolar - - 2013-09-04T07:08:34Z - A subpolar condition is an environmental condition in which an environmental system receives low, yearly solar irradiance per unit area and is surrounded by large land masses. This results in very cold winters with temperatures potentially falling to around -40 degrees Celsius and summers which last no more than 3 months of the year with a 24-hour average temperature of at least 10 degrees Celsius. - Note that this class refers to a climatic rather than a positional condition. - ORCID:0000-0002-4366-3088 - boreal - subarctic - envoPolar - - - A subpolar condition is an environmental condition in which an environmental system receives low, yearly solar irradiance per unit area and is surrounded by large land masses. This results in very cold winters with temperatures potentially falling to around -40 degrees Celsius and summers which last no more than 3 months of the year with a 24-hour average temperature of at least 10 degrees Celsius. - https://en.wikipedia.org/wiki/Subarctic_climate - - - - - subarctic - https://en.wikipedia.org/wiki/Subarctic_climate - - - - - boreal - https://en.wikipedia.org/wiki/Subarctic_climate - - - - - - - - - - freshwater lake biome - - - - - - - - 2013-09-19T11:11:01Z - ENVO - ENVO:01000252 - - - - - - - - freshwater river biome - - - - - - - - 2013-09-19T11:11:01Z - ENVO - ENVO:01000253 - - - - - - - - environmental system - - 2013-09-23T16:04:08Z - A system which has the disposition to environ one or more material entities. - EcoLexicon:environment - In ENVO's alignment with the Basic Formal Ontology, this class is being considered as a subclass of a proposed BFO class "system". The relation "environed_by" is also under development. Roughly, a system which includes a material entity (at least partially) within its site and causally influences that entity may be considered to environ it. Following the completion of this alignment, this class' definition and the definitions of its subclasses will be revised. - environment - - - A system which has the disposition to environ one or more material entities. - DOI:10.1186/2041-1480-4-43 - - - - - - - - - - mineral deposit - - 2013-10-05T12:23:32Z - A mineral deposit is a physiographic feature which has unusually high concentrations of one or more minerals. - ENVO - ENVO:01000255 - Note that the definition of the term mineral is debatable; however, a mineral generally must be naturally occuring, stable at room temperature, representable by a chemical formula (unlike rocks, which may include a wide variety of components), are usually formed by geophysical processes (i.e. are abiogenic), and have an ordered atomic arrangement. - ORCID:0000-0002-4366-3088 - ore deposit - - - URL:http://www.britannica.com/EBchecked/topic/383726/mineral-deposit?anchor=ref624175 - ore deposit - - - - - A mineral deposit is a physiographic feature which has unusually high concentrations of one or more minerals. - ORCID:0000-0002-4366-3088 - URL:http://www.britannica.com/EBchecked/topic/383726/mineral-deposit?anchor=ref624175 - - - - - - - - - - mineral material - - - - - - - - - - - - - - - - - - - - - - - - - 2013-10-05T12:37:41Z - A mineral material is an environmental material which is primarily composed of some substance that is naturally occurring, solid and stable at room temperature, representable by a chemical formula, usually abiogenic, and that has an ordered atomic structure. - LTER:341 - Look for "mineral" in a chemical or geochemical ontology to formalise the composed primarily of link. -From https://en.wikipedia.org/wiki/ [A mineral] is different from a rock, which can be an aggregate of minerals or non-minerals and does not have a specific chemical composition. The exact definition of a mineral is under debate, especially with respect to the requirement a valid species be abiogenic, and to a lesser extent with regards to it having an ordered atomic structure. - ORCID:0000-0002-4366-3088 - - - A mineral material is an environmental material which is primarily composed of some substance that is naturally occurring, solid and stable at room temperature, representable by a chemical formula, usually abiogenic, and that has an ordered atomic structure. - https://en.wikipedia.org/wiki/Mineral - - - - - - - - - - white smoker - - 2013-10-06T19:57:22Z - A hydrothermal vent found on the ocean floor which emits lighter-hued minerals, such as those containing barium, calcium and silicon. These alkaline hydrothermal vents also continuously generate acetyl thioesters, providing both the starting point for more complex organic molecules and the energy needed to produce them. - ENVO - ENVO:01000257 - ORCID:0000-0002-4366-3088 - - - A hydrothermal vent found on the ocean floor which emits lighter-hued minerals, such as those containing barium, calcium and silicon. These alkaline hydrothermal vents also continuously generate acetyl thioesters, providing both the starting point for more complex organic molecules and the energy needed to produce them. - https://en.wikipedia.org/wiki/Hydrothermal_vent - - - - - - - - - - cline - - 2013-10-06T20:10:13Z - A cline is a comparatively thin, typically horizontal layer within a fluid, in which a property of the fluid varies greatly over a relatively short vertical distance. - A similar term exists in linguistics and mathematics. An ecocline, or biological cline, is a related concept; however, may be better placed as a child of a class like "ecotone". Further, some definitions of "layer" require a layer's constiuent materials to have consistent properties, thus "cline" would not qualify as a subclass. The term "gradient" has been proposed as a more suitable superclass. Discussion in Issue #286) - ENVO - ENVO:01000258 - ORCID:0000-0002-4366-3088 - envoPolar - - - A cline is a comparatively thin, typically horizontal layer within a fluid, in which a property of the fluid varies greatly over a relatively short vertical distance. - https://en.wikipedia.org/wiki/Cline_(hydrology) - - - - - - - - - - pycnocline - - 2013-10-06T20:16:10Z - A layer within a fluid where the density gradient changes rapidly with depth. - ENVO - ENVO:01000259 - ORCID:0000-0002-4366-3088 - stable density gradient - - - https://en.wikipedia.org/wiki/Pycnocline - stable density gradient - - - - - A layer within a fluid where the density gradient changes rapidly with depth. - https://en.wikipedia.org/wiki/Pycnocline - - - - - - - - - - nutricline - - - - - - - - 2013-10-06T20:16:10Z - A layer within a water body where the nutrient content changes rapidly with depth. - ENVO - ENVO:01000260 - ORCID:0000-0002-4366-3088 - - - A layer within a water body where the nutrient content changes rapidly with depth. - CMECS:1345 - https://en.wikipedia.org/wiki/Mixed_layer - - - - - - - - - - lysocline - - - - - - - - - 2013-10-06T20:16:10Z - A layer within a marine water body where the rate of calcite dissolution changes rapidly with depth. The increase in the rate of calcite dissolution with depth is largely due to the concomitant fall in calcite saturation. - ENVO - ENVO:01000261 - ORCID:0000-0002-4366-3088 - - - A layer within a marine water body where the rate of calcite dissolution changes rapidly with depth. The increase in the rate of calcite dissolution with depth is largely due to the concomitant fall in calcite saturation. - https://en.wikipedia.org/wiki/Lysocline - - - - - - - - - - seep - - 2013-10-06T21:13:21Z - A seep is a spring in which water has filtered through permeable earth to the surface. - ENVO - ENVO:01000262 - ORCID:0000-0002-4366-3088 - - - A seep is a spring in which water has filtered through permeable earth to the surface. - https://en.wikipedia.org/wiki/Spring_(hydrology) - - - - - - - - - - cold seep - - - - - - - - - - - - - - 2013-10-06T21:16:39Z - ENVO - ENVO:00000425 - ENVO:01000263 - MERGED DEFINITION: -TARGET DEFINITION: A cold seep is a seep in which methane and other hydrocarbon-rich fluids rise to the sea floor. --------------------- -SOURCE DEFINITION: An area of the ocean floor where hydrogen sulfide, methane and other hydrocarbon-rich fluid seepage occurs. Cold seeps are distinct from hydrothermal vents: the former's emissions are of the same temperature as the surrounding seawater, whereas the latter's emissions are super-heated. - ORCID:0000-0002-4366-3088 - hydrocarbon seep - methane seep - - - MERGED DEFINITION: -TARGET DEFINITION: A cold seep is a seep in which methane and other hydrocarbon-rich fluids rise to the sea floor. --------------------- -SOURCE DEFINITION: An area of the ocean floor where hydrogen sulfide, methane and other hydrocarbon-rich fluid seepage occurs. Cold seeps are distinct from hydrothermal vents: the former's emissions are of the same temperature as the surrounding seawater, whereas the latter's emissions are super-heated. - https://en.wikipedia.org/wiki/Cold_seep - - - - - - - - - - obsolete vapour - 2013-10-10T07:55:56Z - A vapour is an environmental material in the gas phase at a temperature lower than its critical point. - ENVO - ENVO:01000264 - true - vapor - Obsoleted. Not really a material. Use PATO's "quality of a gas" on a material to express vapour forms. - - - A vapour is an environmental material in the gas phase at a temperature lower than its critical point. - https://en.wikipedia.org/wiki/Vapor - - - - - - - - - - hydrothermal seep - - 2013-10-06T21:19:00Z - A hydrothermal seep is a seep in which diffuse flow of geothermally heated fluids with high methane concentrations. This seep has been proposed as an intermediate between cold seeps and hydrothermal vents. - ENVO - ENVO:01000265 - ORCID:0000-0002-4366-3088 - hot seep - - - A hydrothermal seep is a seep in which diffuse flow of geothermally heated fluids with high methane concentrations. This seep has been proposed as an intermediate between cold seeps and hydrothermal vents. - DOI:10.1098/rspb.2012.0205 - - - - - - - - - - water vapour - - - - - - - - - - - - - - 2013-10-10T07:58:18Z - ENVO - ENVO:01000266 - ORCID:0000-0002-4366-3088 - Perhaps a better relation between water vapour and water can be found in or added to RO? - Water vapour is a vapour which is the gas phase of water. - aqueous vapor - aqueous vapour - water vapor - - - aqueous vapor - https://en.wikipedia.org/wiki/Water_vapor - - - - - Water vapour is a vapour which is the gas phase of water. - https://en.wikipedia.org/wiki/Water_vapor - - - - - https://en.wikipedia.org/wiki/Water_vapor - water vapor - - - - - aqueous vapour - https://en.wikipedia.org/wiki/Water_vapor - - - - - - - - - - atmosphere - - - - - - - - - - - - - - - - - - 2013-10-10T08:14:50Z - An atmosphere is a layer of gases surrounding a material body of sufficient mass that is held in place by the gravity of the body. - ENVO - ENVO:01000267 - LTER:48 - ORCID:0000-0002-4366-3088 - - - An atmosphere is a layer of gases surrounding a material body of sufficient mass that is held in place by the gravity of the body. - https://en.wikipedia.org/wiki/Atmosphere - https://en.wikipedia.org/wiki/Physical_geography - - - - - - - - - - atmospheric water vapour - - - - - - - - - - - - - - - - - - - - - - - - - 2013-10-10T08:22:07Z - Atmospheric water vapour is water vapour that is part of an atmosphere. - ENVO - ENVO:01000268 - ORCID:0000-0002-4366-3088 - atmospheric water vapor - envoPolar - - - atmospheric water vapor - https://en.wikipedia.org/wiki/Water_vapor - - - - - Atmospheric water vapour is water vapour that is part of an atmosphere. - https://en.wikipedia.org/wiki/Water_vapor - - - - - - - - - - siltstone - - - - - - - - 2013-10-12T14:51:19Z - A sedimentary rock which is composed mainly of silt. This rock has a grainsize in the silt range, finer than sandstone and coarser than claystones. - ENVO - ENVO:01000269 - ORCID:0000-0002-4366-3088 - - - A sedimentary rock which is composed mainly of silt. This rock has a grainsize in the silt range, finer than sandstone and coarser than claystones. - https://en.wikipedia.org/wiki/Siltstone - - - - - - - - - - claystone - - - - - - - - 2013-10-12T14:51:19Z - A clastic sedimentary rock which is composed primarily of clay sized particles. - ENVO - ENVO:01000270 - ORCID:0000-0002-4366-3088 - - - A clastic sedimentary rock which is composed primarily of clay sized particles. - https://en.wikipedia.org/wiki/Claystone - - - - - - - - - - clastic sedimentary rock - - 2013-10-12T14:51:19Z - Clastic sedimentary rocks are sedimentary rocks that are composed of silicate minerals and rock fragments that were transported by moving fluids. Clastic rocks are composed largely of quartz, feldspar, rock (lithic) fragments, clay minerals, and mica; numerous other minerals may be present as accessories and may be important locally. - ENVO - ENVO:01000271 - ORCID:0000-0002-4366-3088 - - - Clastic sedimentary rocks are sedimentary rocks that are composed of silicate minerals and rock fragments that were transported by moving fluids. Clastic rocks are composed largely of quartz, feldspar, rock (lithic) fragments, clay minerals, and mica; numerous other minerals may be present as accessories and may be important locally. - https://en.wikipedia.org/wiki/Sedimentary_rock#Clastic_sedimentary_rocks - - - - - - - - - - mudstone - - - - - - - - - 2013-10-12T14:51:19Z - A mudstone is a clastic sedimentary rock which contains a mixture of at least one third of silt- and one third of clay-sized particles. - ENVO - ENVO:01000272 - ORCID:0000-0002-4366-3088 - There is debate on the usage of mudstone and mudrock, and some ambiguity is to be expected. https://en.wikipedia.org/wiki/ The terminology of "mudstone" is not to be confused with the Dunham classification scheme for limestones. In Dunham's classification, a mudstone is any limestone containing less than ten percent carbonate grains. Note, a siliciclastic mudstone does not deal with carbonate grains. Friedman, Sanders, and Kopaska-Merkel (1992) suggest the use of "lime mudstone" to avoid confusion with siliciclastic rocks. - - - A mudstone is a clastic sedimentary rock which contains a mixture of at least one third of silt- and one third of clay-sized particles. - https://en.wikipedia.org/wiki/Mudrock#Nomenclature - https://en.wikipedia.org/wiki/Mudstone - - - - - - - - - - lime mudstone - - 2013-10-12T14:51:19Z - ENVO - ENVO:01000273 - Lime mudstone is a limestone which is primarily composed of either clay-size or both silt-size and clay-size detrital (transported) carbonate grains. - ORCID:0000-0002-4366-3088 - calcilutite - cementstone - https://en.wikipedia.org/wiki/ The terminology of "mudstone" is not to be confused with the Dunham classification scheme for limestones. In Dunham's classification, a mudstone is any limestone containing less than ten percent carbonate grains. Note, a siliciclastic mudstone does not deal with carbonate grains. Friedman, Sanders, and Kopaska-Merkel (1992) suggest the use of "lime mudstone" to avoid confusion with siliciclastic rocks. - - - calcilutite - https://en.wikipedia.org/wiki/Calcilutite - - - - - Lime mudstone is a limestone which is primarily composed of either clay-size or both silt-size and clay-size detrital (transported) carbonate grains. - https://en.wikipedia.org/wiki/Calcilutite - https://en.wikipedia.org/wiki/Mudstone - - - - - cementstone - https://en.wikipedia.org/wiki/Calcilutite - - - - - - - - - - slate - - - - - - - - 2013-10-12T14:51:19Z - ENVO - ENVO:01000274 - ORCID:0000-0002-4366-3088 - Slate is a metamorphic rock which is fine-grained, foliated, homogeneous, Slates are derived from clastic sedimentary rocks. - - - Slate is a metamorphic rock which is fine-grained, foliated, homogeneous, Slates are derived from clastic sedimentary rocks. - https://en.wikipedia.org/wiki/Slate - - - - - - - - - - structural basin - - 2013-10-12T16:30:32Z - A structural basin is a geological depression formed by tectonic warping of previously flat lying rock strata. - ENVO - ENVO:01000275 - ORCID:0000-0002-4366-3088 - - - A structural basin is a geological depression formed by tectonic warping of previously flat lying rock strata. - https://en.wikipedia.org/wiki/Structural_basin - - - - - - - - - - ecoregion - - - - - - - - 2013-10-12T17:21:09Z - A large unit of land or water containing a geographically distinct assemblage of species, natural communities, and environmental conditions. - ORCID:0000-0002-4366-3088 - Unlike biomes, ecoregions are geographically defined entities. ENVO's sister project, GAZ, contains terms for instances of ecoregions (e.g. Beringia lowland tundra). Requests for new terms should be directed to GAZ. ENVO will only contain this top-level class. The class' definition is preliminary and will be aligned to BFO. - envoPolar - - - A large unit of land or water containing a geographically distinct assemblage of species, natural communities, and environmental conditions. - DOI:10.1641/0006-3568(2001)051[0933:TEOTWA]2.0.CO;2 - URL:http://worldwildlife.org/biomes - - - - - - - - - - water ice - - - - - - - - 2013-10-13T12:01:28Z - Ice is water frozen into a solid state. It can appear transparent or opaque bluish-white color, depending on the presence of impurities or air inclusions. The addition of other materials such as soil may further alter its appearance. - LTER:262 - ORCID:0000-0002-4366-3088 - ice - envoPolar - - - Ice is water frozen into a solid state. It can appear transparent or opaque bluish-white color, depending on the presence of impurities or air inclusions. The addition of other materials such as soil may further alter its appearance. - https://en.wikipedia.org/wiki/Ice - - - - - http://www.eionet.europa.eu/gemet/concept/4131 - ice - - - - - - - - - - pingo scar - - - - - - - - 2013-10-13T12:15:55Z - A depression caused by the collapse of a pingo. - ENVO - ENVO:01000278 - ORCID:0000-0002-4366-3088 - - - A depression caused by the collapse of a pingo. - DOI:10.1016/0033-5894(76)90039-9 - - - - - - - - - - ice lens - - 2013-10-13T12:20:34Z - A mass which is formed when moisture, diffused within soil or rock, accumulates and freezes in a localized zone, wedging soil or rock apart. - ENVO - ENVO:01000279 - ORCID:0000-0002-4366-3088 - ice lenses - envoPolar - - - ice lenses - - - - - - A mass which is formed when moisture, diffused within soil or rock, accumulates and freezes in a localized zone, wedging soil or rock apart. - https://en.wikipedia.org/wiki/Ice_Lens - - - - - - - - - - ecozone - - - - - - - - - - - - - - 2013-10-13T18:32:46Z - ENVO contains this top-level class, but all instances will be in GAZ. The definition is preliminary and will be aligned to BFO. -https://en.wikipedia.org/wiki/ Ecozones correspond to the floristic kingdoms of botany or zoogeographic regions of zoology. Ecozones are characterized by the evolutionary history of the organisms they contain. They are distinct from biomes, also known as major habitat types, which are divisions of the Earth's surface based on life form, or the adaptation of plants and animals to climatic, soil, and other conditions. Biomes are characterized by similar climax vegetation. Each ecozone may include a number of different biomes. A tropical moist broadleaf forest in Central America, for example, may be similar to one in New Guinea in its vegetation type and structure, climate, soils, etc., but these forests are inhabited by plants and animals with very different evolutionary histories. - Ecozones delineate large areas of a planetary surface within which organisms have been evolving in relative isolation over long periods of time, separated from one another by geographic features, such as oceans, broad deserts, or high mountain ranges, that constitute barriers to migration. - ORCID:0000-0002-4366-3088 - envoPolar - - - Ecozones delineate large areas of a planetary surface within which organisms have been evolving in relative isolation over long periods of time, separated from one another by geographic features, such as oceans, broad deserts, or high mountain ranges, that constitute barriers to migration. - https://en.wikipedia.org/wiki/ecozone - - - - - - - - - - layer - - - - - - - - 2013-10-15T16:42:02Z - A layer is a quantity of some material which has comparable thickness and usually covers some surface. - ENVO - ENVO:01000281 - ORCID:0000-0002-4366-3088 - Preliminary definition. - envoPolar - - - A layer is a quantity of some material which has comparable thickness and usually covers some surface. - Wiktionary:layer - - - - - - - - - - sedimentary stratum - - - - - - - - - - - - - - - 2013-10-15T16:49:04Z - A stratum is a layer which is composed of sedimentary rock or soil with internally consistent characteristics that distinguish it from other layers. - ENVO - ENVO:01000282 - ORCID:0000-0002-4366-3088 - Preliminary definition. Concepts such as "characteristic" may be problematic. - stratum - - - A stratum is a layer which is composed of sedimentary rock or soil with internally consistent characteristics that distinguish it from other layers. - https://en.wikipedia.org/wiki/Stratum - - - - - - - - - - lake layer - - - - - - - - 2013-10-15T16:57:43Z - A layer which is part of a lake. - ENVO - ENVO:01000283 - Note that this class does not contain metalimnion as a subclass. The metaliminon is classified as a thermocline. - ORCID:0000-0002-4366-3088 - envoPolar - - - - - - - - amictic lake - - - - - - - - - - - - - - - - - - - 2013-10-15T17:08:47Z - A lake which is permanently covered by ice, does not mix, and exhibit inverse cold water stratification whereby water temperature increases with depth below the ice surface. - ORCID:0000-0002-4366-3088 - - - A lake which is permanently covered by ice, does not mix, and exhibit inverse cold water stratification whereby water temperature increases with depth below the ice surface. - https://en.wikipedia.org/wiki/Amictic_lake - - - - - - - - - - holomictic lake - - 2013-10-15T17:08:47Z - A holomictic lake is a lake which mixes at least once per year. Mixing is caused by a uniform temperature distribution from the upper to lower layers of the lake. - ENVO - ENVO:01000285 - ORCID:0000-0002-4366-3088 - non-meromictic lake - - - A holomictic lake is a lake which mixes at least once per year. Mixing is caused by a uniform temperature distribution from the upper to lower layers of the lake. - DOI:10.1139/f83-207 - https://en.wikipedia.org/wiki/Holomictic - - - - - DOI:10.1139/f83-207 - https://en.wikipedia.org/wiki/Holomictic - non-meromictic lake - - - - - - - - - - dimictic lake - - - - 2013-10-15T17:08:47Z - A dimitic lake is a holomictic lake which mixes from top to bottom during two mixing periods each year. Mixing typically occurs during the spring and autumn, when the lake is "isothermal" (i.e., at the same temperature from the top to the bottom). At this time the water throughout the lake is about 4°C, and, in the absence of any temperature or density differences, the lake readily mixes from top to bottom. These lakes are common in regions with temperate climates. - ENVO - ENVO:01000286 - ORCID:0000-0002-4366-3088 - - - A dimitic lake is a holomictic lake which mixes from top to bottom during two mixing periods each year. Mixing typically occurs during the spring and autumn, when the lake is "isothermal" (i.e., at the same temperature from the top to the bottom). At this time the water throughout the lake is about 4°C, and, in the absence of any temperature or density differences, the lake readily mixes from top to bottom. These lakes are common in regions with temperate climates. - DOI:10.1139/f83-207 - https://en.wikipedia.org/wiki/Dimictic_lake - - - - - - - - - - polymictic lake - - - 2013-10-15T17:08:47Z - A polymictic lake is a holomictic lake which is too shallow to allow thermal stratification and which can mix from top to bottom through the ice-free period of the year. - ENVO - ENVO:01000287 - ORCID:0000-0002-4366-3088 - - - A polymictic lake is a holomictic lake which is too shallow to allow thermal stratification and which can mix from top to bottom through the ice-free period of the year. - DOI:10.1139/f83-207 - https://en.wikipedia.org/wiki/Polymictic - - - - - - - - - - monomictic lake - - 2013-10-15T17:08:47Z - A monomictic lake is a holomictic lake which mixes from top to bottom during one mixing period each year. - ENVO - ENVO:01000288 - ORCID:0000-0002-4366-3088 - - - A monomictic lake is a holomictic lake which mixes from top to bottom during one mixing period each year. - DOI:10.1139/f83-207 - https://en.wikipedia.org/wiki/Monomictic - - - - - - - - - - cold monomictic lake - - 2013-10-15T17:23:51Z - A monomictic lake which is covered by ice throughout much of the year and only mixes when its surface ice melts and the lake lacks thermal stratification. - ENVO - ENVO:01000289 - ORCID:0000-0002-4366-3088 - - - A monomictic lake which is covered by ice throughout much of the year and only mixes when its surface ice melts and the lake lacks thermal stratification. - https://en.wikipedia.org/wiki/Monomictic - - - - - - - - - - warm monomictic lake - - 2013-10-15T17:26:42Z - A monomictic lake which does not freeze and is thermally stratified throughout most of the year, only mixing in winter when cooler temperatures ease stratification. - ENVO - ENVO:01000290 - ORCID:0000-0002-4366-3088 - - - A monomictic lake which does not freeze and is thermally stratified throughout most of the year, only mixing in winter when cooler temperatures ease stratification. - https://en.wikipedia.org/wiki/Monomictic - - - - - - - - - - cold polymictic lake - - 2013-10-15T17:31:50Z - A cold polymictic lake is a polymictic lake which is covered by ice in winter. - ENVO - ENVO:01000291 - ORCID:0000-0002-4366-3088 - - - A cold polymictic lake is a polymictic lake which is covered by ice in winter. - DOI:10.1139/f83-207 - https://en.wikipedia.org/wiki/Polymictic - - - - - - - - - - warm polymictic lake - - 2013-10-15T17:32:26Z - A warm polymictic lake is a polymictic lake which is not covered by ice at any point during the year. - ENVO - ENVO:01000292 - ORCID:0000-0002-4366-3088 - - - A warm polymictic lake is a polymictic lake which is not covered by ice at any point during the year. - DOI:10.1139/f83-207 - https://en.wikipedia.org/wiki/Polymictic - - - - - - - - - - ice mass - - - - - - - - - - - - - - - - - - - - - - - - - - - 2013-10-15T19:49:11Z - A mass of ice. - ENVO - ENVO:01000293 - ORCID:0000-0002-4366-3088 - envoPolar - Class should be populated by inference and asserted subclasses redistributed. - - - - - - - - crevice - - 2013-10-16T00:42:47Z - A deep fissure in rock. - ENVO - ENVO:01000294 - ORCID:0000-0002-4366-3088 - crevice - - - A deep fissure in rock. - https://en.wikipedia.org/wiki/Fracture - - - - - USGS:SDTS - crevice - - - - - - - - - - marine layer - - - - - - - - - 2013-10-16T11:55:20Z - A layer that is part of a marine water body. - ENVO - ENVO:01000295 - ORCID:0000-0002-4366-3088 - envoPolar - - - A layer that is part of a marine water body. - ORCID:0000-0002-4366-3088 - - - - - - - - - - dry lake bed - - - - - - - - - - - - - - - - - - - - - - - - - 2013-10-16T12:12:53Z - A lake bed which is dry. That is, the bed of a dry lake. - ENVO - ENVO:01000296 - ORCID:0000-0002-4366-3088 - - - - - - - - freshwater river - - - - - - - - - - - - - - - - - - - 2013-10-16T12:56:48Z - A river where fresh water flows. - ENVO - ENVO:01000297 - ORCID:0000-0002-4366-3088 - Preliminary definition. - - - A river where fresh water flows. - ORCID:0000-0002-4366-3088 - - - - - - - - - - continental margin - - 2013-10-18T00:04:57Z - ENVO - ENVO:01000298 - EcoLexicon:continental_margin - ORCID:0000-0002-4366-3088 - SWEETRealm:ContinentalMargin - The continental margin is the zone of the ocean floor that separates the thin oceanic crust from thick continental crust. Together, the continental shelf, continental slope, and continental rise are called continental margin. Continental margins constitute about 28% of the oceanic area. - envoPolar - - - The continental margin is the zone of the ocean floor that separates the thin oceanic crust from thick continental crust. Together, the continental shelf, continental slope, and continental rise are called continental margin. Continental margins constitute about 28% of the oceanic area. - https://en.wikipedia.org/wiki/Continental_margin - - - - - - - - - - Taylor column - - - - - - - - 2013-10-19T11:11:28Z - A Taylor column is a column of deflected fluid flow which is formed in a perturbed, rotating fluid, is parallel to the axis of rotation, and extends above the obstacle perturbing the fluid in a rigid manner. - ENVO - ENVO:01000299 - ORCID:0000-0002-4366-3088 - This is an interesting class. It's not really a column in the sense of a water column, nor is it a current, exactly. It may also occur in any fluid, gaseous or liquid. - - - A Taylor column is a column of deflected fluid flow which is formed in a perturbed, rotating fluid, is parallel to the axis of rotation, and extends above the obstacle perturbing the fluid in a rigid manner. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Taylor_column - - - - - - - - - - atmospheric Taylor column - - - - - - - - - - - - - - - - - - - - 2013-10-19T11:12:43Z - An atmospheric Taylor column is a Taylor column that is formed in the atmosphere. Atmospheric Taylor columns often form above islands resulting in vortex streets in the atmosphere. - ENVO - ENVO:01000300 - ORCID:0000-0002-4366-3088 - vortex street - - - An atmospheric Taylor column is a Taylor column that is formed in the atmosphere. Atmospheric Taylor columns often form above islands resulting in vortex streets in the atmosphere. - ISBN:044482619X - ORCID:0000-0002-4366-3088 - https://en.wikipedia.org/wiki/Taylor_column - - - - - https://en.wikipedia.org/wiki/Kármán_vortex_street - vortex street - - - - - - - - - - estuarine water - - - - - - - - - - - - - - - - - - - 2013-10-19T11:30:46Z - Brackish water which is part of an estuary. - ENVO - ENVO:01000301 - ORCID:0000-0002-4366-3088 - - - Brackish water which is part of an estuary. - https://en.wikipedia.org/wiki/Estuary - - - - - - - - - - outcrop - - - - - - - - - - - - - - - - - - 2014-04-24T13:12:49Z - A portion of environmental material which protrudes through a surface layer. - ENVO - ENVO:01000302 - ORCID:0000-0002-4366-3088 - This is kept as a general class. One can specify subclasses by identifying the protruding material (e.g. rock outcroup, mineral outcrop, etc ) and the material(s) the protrusion emerges from. Possible logical definition: A portion of ENVO:environmental material which has_quality PATO:"protruding out of" a ENVO:surface layer of an ENVO:environmental material. - - - - - - - - endolithic environment - - - - - - - - - - - - - - - - - - - An endolithic environment is an environment that exists within solid rock. - - - - - - - - high pressure environment - - - - - - - - - - - - - - - - - - - A high pressure environment is an environment in which all material entities are exposed to a high ratio of force per unit area. - - - - - - - - high temperature environment - - - - - - - - - - - - - - - - - - - A high temperature environment is an environment in which material entities are exposed to increased levels of heat radiation or which have molecules or atoms moving randomly with increased levels of average kinietic energy. - - - - - - - - freshwater environment - - - - - - - - - - - - - - - - - - - Water (non-saline) - envoOmics - envoPolar - An aquatic environment which is determined by freshwater. - fresh water environment - envoEmpo - - - Water (non-saline) - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - saline water environment - - - - - - - - - - - - - - - - - - - - An environmental system which has its properties and dynamics determined by saline water. - envoPolar - envoEmpo - Water (saline) - envoOmics - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Water (saline) - - - - - - - - - - extraterrestrial environment - - This would need an instance of planet (i.e. Earth) to be fully expressed. Note that this is not necessarily outer space, as it can include planetary environments that are not of Earth. - An environmental system which is located beyond the Earth's exosphere and away from the Earth's core. - - - - - - - - cold environment - - - - - - - - - - - - - - - - - - - envoPolar - The definition of the deprecated 'cold temperature habitat' class, which this class was derived from, quotes an upper threshold of 15 degrees Celsius for 'coldness'. - An environment which has a lower temperature than some local or global average. - - - - - - - - haline environment - - - - - - - - - - - - - - - - - - A haline environment is an environment in which entities are exposed to high concentrations of salt, typically above 2 molar. - - - - - - - - cultivated environment - - A cultivated environment is an environment that has been modified by humans by the preparation of the land, usually for the purposes of growing crops. - CROPLAND - ENVO - EcoLexicon:agriculture - FTT:1248 - FTT:54 - FTT:55 - FTT:56 - Geonames:V.CULT - LTER:17 - SPIRE:Agricultural - SWEETRealm:Range - agricultural region - cropland - cultivated area - cultivated cropland - market garden - range - truck farm - truck garden - - - CROPLAND - USGS:SDTS - - - - - ADL:FTT - cultivated cropland - - - - - USGS:SDTS - truck garden - - - - - A cultivated environment is an environment that has been modified by humans by the preparation of the land, usually for the purposes of growing crops. - MA:ma - - - - - USGS:SDTS - truck farm - - - - - USGS:SDTS - market garden - - - - - Geonames:feature - cultivated area - - - - - ADL:FTT - cropland - - - - - ADL:FTT - range - - - - - - - - - - culturing environment - - A culturing environment is an environment which is maintained by humans for the purposes of preparing cell, organ, tissue and plant tissue cultures. - ENVO - - - A culturing environment is an environment which is maintained by humans for the purposes of preparing cell, organ, tissue and plant tissue cultures. - https://en.wikipedia.org/wiki/Cell_culture - - - - - - - - - - anthropogenic environment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An anthropogenic environment is an environmental system which is the product of human activity. - Unsatisfactory definition here. Must consider the threshold that makes an environmental system anthropogenic. - - - - - - - - high osmolarity environment - - - - - - - - - - - - - - - - - - - A high osmolarity environment is an environment in which entities are exposed to high concentrations of solutes. - - - - - - - - acidic environment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An acidic environment is an environment in which material entities are exposed to a low pH. - - - - - - - - alkaline environment - - - - - - - - - - - - - - - - - - - An alkaline environment is an environment in which entities are exposed to high pH, typically greater than a pH of 9. - - - - - - - - aquatic environment - - - - - - - - - - - - - - - - - - - - An environment whose dynamics are strongly influenced by water. - - - - - - - - extreme high temperature environment - - The lower threshold, 80 degrees Celsius, is derived from the definition of the obsolete class "extreme high temperature habitat" which this class replaces. - An extreme high temperature environment is a high temperature environment in which entities are exposed to temperatures above 80 degrees Celsius. - - - - - - - - rocky slope - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A rocky slope is a slope which has a surface primarily composed of rock. - - - - - - - - marine environment - - - - - - - - - - - - - - - - - - - A marine environment and enviroment which is determined by a marine water body. - ENVO - envoPolar - - - A marine environment and enviroment which is determined by a marine water body. - NM:nm - - - - - - - - - - sea water environment - - - - - - - - - - - - - - - - - - - ocean water environment - envoPolar - An environmental system determined by seawater. - - - - - - - - brackish water environment - - - - - - - - - - - - - - - - - - - envoPolar - This may refer to environments submerged in brackish water or those that are determined by its presence, such as a brackish water pond environment. - An environment determined by the presence of brackish water. - - - - - - - - atmospheric boundary layer - - - - - - - - - - - - - - - - - - - - - - - The atmospheric boundary layer is the lowest layer of an atmosphere which is strongly influenced by its contact with a planetary surface with strong vertical mixing and in which physical quantities such as flow velocity, temperature, and moisture display rapid fluctuations (turbulence). - - - - planetary boundary layer - envoPolar - - - - - - - - planetary surface - - - - - - - - - - - - - - - - - - - - - - a useful class: this can be used to define sub-terrestrial and sub-marine - A planetary surface is a surface layer where the solid or liquid material of a planet comes into contact with atmosphere or outer space. - - - - - - - - aquatic layer - - - - - - - - - - - - - - - - - - - A layer in a water mass, itself composed primarily of water. - This class will eventually be populated by inference, and its asserted subclasses removed. - envoPolar - - - - - - - - deep chlorophyll maximum layer - - - - - - - - - - - - - - Logical def is incomplete. Need to express the idea of maximum chlorophyll. This could follow a pattern like: - -X has_maximum_levels_of Y relative_to Z, i.e. DCM has_maximum_levels_of chlorophyll relative_to subsurface_aquatic_layer - -May also be useful to include has_decreased_levels_of light intensity relative_to surface aquatic layer - -Further discussion in Issue #126. - A subsurface layer in a water body, typically an ocean or lake, in which chlorophyll concentrations reach their maximum. - envoPolar - ORCID:0000-0002-4366-3088 - DCM - subsurface chlorophyll maximum layer - The DCM may or may not indicate greater abundance of photosynthetic, chlorophyll-bearing cells, as shade-adapted cells may have a greater chlorophyll to biomass ration than surface variants. Further, some DCMs may be formed by the sinking of cells from surface zones or the subduction of surface waters, rather than through biotic, community-level processess. - - - The DCM may or may not indicate greater abundance of photosynthetic, chlorophyll-bearing cells, as shade-adapted cells may have a greater chlorophyll to biomass ration than surface variants. Further, some DCMs may be formed by the sinking of cells from surface zones or the subduction of surface waters, rather than through biotic, community-level processess. - https://en.wikipedia.org/wiki/Deep_chlorophyll_maximum - - - - - https://en.wikipedia.org/wiki/Deep_chlorophyll_maximum - A subsurface layer in a water body, typically an ocean or lake, in which chlorophyll concentrations reach their maximum. - - - - - - - - - - strand swamp - - A strand swamp is a swamp that forms linear drainage channels on flatlands. - - - - - - - - dome swamp - - - - - - - - - - - - - - - - - - - A dome swamp is a swamp which occurs in a depression where deeper waters at the centre of the swamp allow trees to grow taller relative to those in shallower regions of the depression. This creates a dome-like shape. - The logical def should be improved with the idea of a vegetation unit growing in a depression expressed. - - - - - - - - cypress dome - - cypress dome swamp - A cypress dome swamp is a dome swamp which has a plant community dominated by Cupressaceae, often swamp cypresses. Swamp cypresses typically belong to the genus Taxodium or the species Glyptostrobus pensilis and Actinostrobus pyramidalis. - Requires import of some taxonomy for differentia - - - - - - - - cypress strand swamp - - A cypress strand swamp is a strand swamp which has a plant community dominated by Cupressaceae, often swamp cypresses. Swamp cypresses typically belong to the genus Taxodium or the species Glyptostrobus pensilis and Actinostrobus pyramidalis. - cypress strand - Requires import of some taxonomy for differentia - - - - - - - - cypress swamp - - A cypress swamp is a swamp which has a plant community dominated by Cupressaceae, often swamp cypresses. Swamp cypresses typically belong to the genus Taxodium or the species Glyptostrobus pensilis and Actinostrobus pyramidalis. - Requires import of some taxonomy for differentia - - - - - - - - gravelly slope - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A gravelly slope is a slope which has a surface primarily composed of gravel. - - - - - - - - hillside - - - - - - - - - - - - - - - - - - - A hillside is a slope that is part of a hill. - brae - - - - - - - - talus slope - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A talus slope is a slope which has a surface layer composed of scree. - scree slope - - - - - - - - understory - - - - - - - - - - - - - - - An understory is a layer of plant life which grows below the canopy without penetrating it. - under story - understorey - - - An understory is a layer of plant life which grows below the canopy without penetrating it. - https://en.wikipedia.org/wiki/Understory - - - - - - - - - - shrub layer - - - - - - - - - - - - - - - - - - - - - A shrub layer is a layer of vegetation in a woodland or forest consisting of low, woody vegetation of frutescent form. - - - A shrub layer is a layer of vegetation in a woodland or forest consisting of low, woody vegetation of frutescent form. - http://www.treeterms.co.uk/definitions/shrub-layer - - - - - - - - - - herb and fern layer - - - - - - - - - - - - - - - - - - - - - A herb and fern layer is a layer of a forest or woodland which is composed of all vascular plant life that are one metre or less in height. - This definition is inclusive of non-herbaceous plants that may be transiently present in the "herb layer". See Gilliam FS (2007) The Ecological Significance of the Herbaceous Layer in Temperate Forest Ecosystems. BioScience. 57(10):845-858. (http://dx.doi.org/10.1641/B571007) for rationale and a review of definitional and terminological variation. - fern layer - ground cover - ground vegetation - herb layer - herb stratum - herbaceous layer - herbaceous stratum - herbaceous understory - regeneration layer - - - A herb and fern layer is a layer of a forest or woodland which is composed of all vascular plant life that are one metre or less in height. - http://dx.doi.org/10.1641/B571007 - - - - - - - - - - litter layer - - - - - - - - - - - - - - - - - - - - - Refers to the ground layer of a forest or woodland where leaf litter or other plant matter accumulates - ground layer - - - - - - - - polar biome - - - - - - - - - - - - - - - - - - - A biome which has the environmental condition polar - This class is primarily for inference and, in general, should not be used directly by annotators. If you're an annotator, please consider using a more informative term such as 'tundra biome'. - envoPolar - - - - - - - - alpine - - An alpine condition is an environmental condition in which the monthly mean temperature is less than 10 degrees Celsius and which occurs at altitudes above the tree line and below the snowline. - LTER:26 - ORCID:0000-0002-4366-3088 - Requested term with preliminary def. See Issue 29 on the envo tracker. - envoPolar - - - An alpine condition is an environmental condition in which the monthly mean temperature is less than 10 degrees Celsius and which occurs at altitudes above the tree line and below the snowline. - https://en.wikipedia.org/wiki/Altitudinal_zonation - - - - - - - - - - subalpline - - A subalpine condition is an environmental condition in which an altitude range falls immediately below the tree line. - ORCID:0000-0002-4366-3088 - Requested in Issue 33 of our tracker. The lower boundry of this condition's range, that is, the lower altitudinal limit of an elevation that is considuered subalpine, is not clear in this definition. - envoPolar - - - - - - - - montane - - A montane condition is an environmental condition in which an altitude range falls between mid-altitude forests and the tree line. - LTER:350 - ORCID:0000-0002-4366-3088 - The exact level of the tree line varies with local climate, but typically the tree line is found where mean monthly soil temperatures never exceed 10.0 degrees C and the mean annual soil temperatures are around 6.7 degrees C. In the tropics, this region is typified by montane rain forest (above 3,000 ft) while at higher latitudes coniferous forests often dominate. - envoPolar - - - The exact level of the tree line varies with local climate, but typically the tree line is found where mean monthly soil temperatures never exceed 10.0 degrees C and the mean annual soil temperatures are around 6.7 degrees C. In the tropics, this region is typified by montane rain forest (above 3,000 ft) while at higher latitudes coniferous forests often dominate. - https://en.wikipedia.org/wiki/Altitudinal_zonation - - - - - A montane condition is an environmental condition in which an altitude range falls between mid-altitude forests and the tree line. - https://en.wikipedia.org/wiki/Altitudinal_zonation - - - - - - - - - - altitudinal condition - - An altitudinal condition is an environmental condition in which ranges of factors such as temperature, humidity, soil composition, solar irradiation, and tree density vary with ranges in altitude. - Depending on the latitude (and, to a lesser extent, other factors), the actual location of the zones where these conditions are in effect will change. - ORCID:0000-0002-4366-3088 - envoPolar - - - An altitudinal condition is an environmental condition in which ranges of factors such as temperature, humidity, soil composition, solar irradiation, and tree density vary with ranges in altitude. - https://en.wikipedia.org/wiki/Altitudinal_zonation - - - - - - - - - - nival - - A nival condition is an environmental condition in which vegetation is extremely limited, soils are silica enriched, and ground cover is dominated by snow and ice at altitudes above the snowline. - envoPolar - ORCID:0000-0002-4366-3088 - - - A nival condition is an environmental condition in which vegetation is extremely limited, soils are silica enriched, and ground cover is dominated by snow and ice at altitudes above the snowline. - https://en.wikipedia.org/wiki/Altitudinal_zonation - - - - - - - - - - upper montane - - An upper montane condition is a montane condition in which an altitude range falls immediately below the tree line. - ORCID:0000-0002-4366-3088 - This definition is somewhat odd in that it doesn't clearly define a lower boundary. - envoPolar - - - - - - - - lower montane - - A lower montane condition is a montane condition in which an altitude range falls immediately above mid-altitude forests. - ORCID:0000-0002-4366-3088 - This definition does not define an upper boundary. - envoPolar - - - - - - - - montane conifer woodland - - - - - - - - A montane conifer woodland is a conifer woodland which is located within an altitude range that falls between mid-altitude forests and the tree line. - ORCID:0000-0002-4366-3088 - Requested in Issue 56. - - - - - - - - maize field - - Requested in Issue 112 as part of the curation of metagenome submissions in the European Nucleotide Archive. - A field used for the cultivation of corn or related crop plants. - - - - - - - - root matter - - - - - - - - Requested in Issue 115 as part of the annotation of metagenomic submissions present in the European Nucleotide Archive. - An organic material primarily composed of a portion of plant root. - - - - - - - - autoclaved sand - - Autoclaved sand is sand that has been sterlised by exposure to high pressure saturated steam at at least 121 degrees Celsius. - Requested in Issue 116 as part of the annotation of metagenomic submissions present in the European Nucleotide Archive. - - - - - - - - - obsolete marine mesoscale eddy - A marine mesoscale eddy is a current of marine water which has a typical horizontal diameter of less than 100 km and persists for approximately one month. - ENVO:01000069 - ORCID:0000-0002-4366-3088 - true - - - A marine mesoscale eddy is a current of marine water which has a typical horizontal diameter of less than 100 km and persists for approximately one month. - http://www.gfdl.noaa.gov/ocean-mesoscale-eddies - - - - - - - - - - field - - An unbroken expanse (as of ice) - ORCID:0000-0002-4366-3088 - This class was created to accommodate "fields" from agricultural fields to marine mesoscale eddy fields. Thus, it has a very broad definition which makes it less than informative when annotating. Please consider using or requesting an appropriate subclass. - envoPolar - - - An unbroken expanse (as of ice) - http://www.merriam-webster.com/dictionary/field - - - - - - - - - - marine mesoscale eddy field - - - - - - - - - - - - - - - - - - - - - - - - - A mesoscale eddy field is an expanse of marine water which includes coherent vortices, as well as a rich cascade of other structures such as filaments, squirts and spirals and is characterized by temperature and salinity anomalies with associated flow anomalies that are nearly in geostrophic balance. Although only the surface expression of mesoscale eddies is visible in satellite images of sea surface height or temperature, they are in fact three dimensional structures that reach down into the pycnocline. - ORCID:0000-0002-4366-3088 - - - A mesoscale eddy field is an expanse of marine water which includes coherent vortices, as well as a rich cascade of other structures such as filaments, squirts and spirals and is characterized by temperature and salinity anomalies with associated flow anomalies that are nearly in geostrophic balance. Although only the surface expression of mesoscale eddies is visible in satellite images of sea surface height or temperature, they are in fact three dimensional structures that reach down into the pycnocline. - http://www.gfdl.noaa.gov/ocean-mesoscale-eddies - - - - - - - - - - ice cap climatic condition - - An ice cap climatic condition is a polar condition in which the montly average temperature does not exceed 0 degrees Celsius. - ORCID:0000-0002-4366-3088 - envoPolar - - - An ice cap climatic condition is a polar condition in which the montly average temperature does not exceed 0 degrees Celsius. - https://en.wikipedia.org/wiki/Polar_climate - - - - - - - - - - vegetation layer - - - - - - - - - - - - - - - A layer which is determined by a form of vegetation. - Usually found in woodlands and forests. - forest layer - forest stratum - woodland layer - woodland stratum - - - - - - - - granite - - A portion of granite is a portion of igneous rock which is intrusive, felsic, granular, and phaneritic. - Requested in issue 45. Some relations to PATO and SWEET classes suggested. - - - A portion of granite is a portion of igneous rock which is intrusive, felsic, granular, and phaneritic. - https://en.wikipedia.org/wiki/Granite - - - - - - - - - - alkaline water - - - - - - - - - - - - - - - - - - - A portion of alkaline water is a portion of water with a pH greater than 7. - Here, we commit to a threshold of pH as this is almost universally accepted. - - - - - - - - acidic water - - - - - - - - - - - - - - - - - - - A portion of acidic water is a portion of water with a pH less than 7. - - - - - - - - limestone cave - - A cave formed in limestone, usually by dissolution of limestone by acidic groundwater. - Can be linked to a solutional environmental process and acidic groundwater. - - - - - - - - solutional cave - - A cave formed by the dissolution of soluble rock or other solid material such as limestone, chalk, dolomite, gypsum, salt or marble. - Can be linked to a solutional environmental process and acidic groundwater. - - - A cave formed by the dissolution of soluble rock or other solid material such as limestone, chalk, dolomite, gypsum, salt or marble. - https://en.wikipedia.org/wiki/Cave - - - - - - - - - - primary cave - - A cave formed at the same time as the surrounding rock. - - - A cave formed at the same time as the surrounding rock. - https://en.wikipedia.org/wiki/Cave - - - - - - - - - - inflationary cave - - A cave that is formed by the action of pressurised lava pushing against surrounding rock and then draining away. - - - A cave that is formed by the action of pressurised lava pushing against surrounding rock and then draining away. - https://en.wikipedia.org/wiki/Lava_cave - - - - - - - - - - erosional cave - - - - - - - - A cave formed by erosion caused by flowing streams carrying rocks or sediments. - - - A cave formed by erosion caused by flowing streams carrying rocks or sediments. - https://en.wikipedia.org/wiki/Cave - - - - - - - - - - glacier cave - - - - - - - - A glacier cave is a cave formed within or under a glacier. - - - A glacier cave is a cave formed within or under a glacier. - https://en.wikipedia.org/wiki/Cave - - - - - - - - - - ice cave - - - - - - - - An ice cave is a bedrock cave which contains year-round ice formations. - - - - - - - - talus cave - - A talus cave is a cave formed by the openings between large boulders which have fallen into a random heap. - - - A talus cave is a cave formed by the openings between large boulders which have fallen into a random heap. - https://en.wikipedia.org/wiki/Cave - - - - - - - - - - anchialine cave - - - - - - - - An anchialine cave is a cave which contains an anchialine pool. - - - An anchialine cave is a cave which contains an anchialine pool. - https://en.wikipedia.org/wiki/Cave - - - - - - - - - - anchialine pool - - An anchialine pool is a landlocked water body with a subterranean connection to the ocean and which has fresh water towards its surface with saline water in its deeper layers. - anchialine pond - - - An anchialine pool is a landlocked water body with a subterranean connection to the ocean and which has fresh water towards its surface with saline water in its deeper layers. - https://en.wikipedia.org/wiki/Anchialine_pool - - - - - - - - - - vadose cave - - - - - - - - A cave that is part of a vadose zone. - - - A cave that is part of a vadose zone. - https://en.wikipedia.org/wiki/Mordloch - - - - - - - - - - tundra climatic condition - - An tundra climatic condition is a polar condition in which at least one month's average temperature exceeds 0 degrees Celsius. - ORCID:0000-0002-4366-3088 - envoPolar - - - An tundra climatic condition is a polar condition in which at least one month's average temperature exceeds 0 degrees Celsius. - https://en.wikipedia.org/wiki/Polar_climate - - - - - - - - - - agricultural waste material - - Agricultural waste is waste produced as a result of various agricultural operations. It includes manure and other wastes from farms, poultry houses and slaughterhouses; harvest waste; fertilizer run- off from fields; pesticides that enter into water, air or soils; and salt and silt drained from fields. - As with other wastes, this is more a role than a material in itself. This should be revised. - agricultural waste - - - Agricultural waste is waste produced as a result of various agricultural operations. It includes manure and other wastes from farms, poultry houses and slaughterhouses; harvest waste; fertilizer run- off from fields; pesticides that enter into water, air or soils; and salt and silt drained from fields. - http://stats.oecd.org/glossary/detail.asp?ID=77 - Glossary of Environment Statistics, Studies in Methods, Series F, No. 67, United Nations, New York, 1997. - - - - - - - - - - household waste material - - - - - - - - Household waste refers to waste material usually generated in the residential environment. Waste with similar characteristics may be generated in other economic activities and can thus be treated and disposed of together with household waste. - household waste - This will become a defined class, with subclasses added through inference based on material having a 'waste role' and being associated with domestic entities. - - - Household waste refers to waste material usually generated in the residential environment. Waste with similar characteristics may be generated in other economic activities and can thus be treated and disposed of together with household waste. - Glossary of Environment Statistics, Studies in Methods, Series F, No. 67, United Nations, New York, 1997. - http://stats.oecd.org/glossary/detail.asp?ID=1261 - - - - - - - - - - biological waste material - - - - - - - - - - - - - - Biological waste is waste containing mostly natural organic materials (remains of plants, animal excrement, biological sludge from waste-water treatment plants and so forth). - This will become a defined class, with subclasses added through inference based on material having a 'waste role' and being composed primarily of some organic or biological matter. - biological waste - - - Biological waste is waste containing mostly natural organic materials (remains of plants, animal excrement, biological sludge from waste-water treatment plants and so forth). - http://stats.oecd.org/glossary/detail.asp?ID=3097 - Glossary of Environment Statistics, Studies in Methods, Series F, No. 67, United Nations, New York, 1997. - - - - - - - - - - dry woodland - - - - - - - - A dry woodland is a woodland which occurs in areas of rain shadow in a tropical marine climate, receives very little rainfall, typically has rapidly draining soils and trees which have adaptations to dry climates such as thick bark, small leaves, and the disposition to shed their leaves. - xerophytic ecosystem - - - A dry woodland is a woodland which occurs in areas of rain shadow in a tropical marine climate, receives very little rainfall, typically has rapidly draining soils and trees which have adaptations to dry climates such as thick bark, small leaves, and the disposition to shed their leaves. - https://en.wikipedia.org/wiki/Tropical_marine_climate - - - - - - - - - - tropical marine condition - - A tropical marine condition is a tropical condition in which the ocean strongly influences the climate and a wet and dry season occur. - ORCID:0000-0002-4366-3088 - - - A tropical marine condition is a tropical condition in which the ocean strongly influences the climate and a wet and dry season occur. - https://en.wikipedia.org/wiki/Tropical_marine_climate - - - - - - - - - - tropical marine semi-evergreen forest - - - - - - - - - - - - - - A semi-evergreen forest is a forest which undergoes a long dry season and, as a consequence, has a two-storey layer structure, a dry canopy, a leaf litter layer that only decays during moist periods trees with very small leaves or which shed their leaves to conserve water and which flower during the dry season and grow during the wet season. - ORCID:0000-0002-4366-3088 - mesophytic ecosystem - semi-evergreen forest - - - mesophytic ecosystem - https://en.wikipedia.org/wiki/Tropical_marine_climate - - - - - A semi-evergreen forest is a forest which undergoes a long dry season and, as a consequence, has a two-storey layer structure, a dry canopy, a leaf litter layer that only decays during moist periods trees with very small leaves or which shed their leaves to conserve water and which flower during the dry season and grow during the wet season. - https://en.wikipedia.org/wiki/Tropical_marine_climate - - - - - - - - - - humid subtropical - - A humid subtropical condition is a subtropical condition in which an environmental system has hot, humid summers, warm to cool dry winters, and average annual precipitation either evenly distributed throughout the year or marked by a dry season or drying trend during winter - In cases where rainfall is evenly distributed throughout the year, this condition falls into the Cfa category of the Köppen climate classification. In cases marked by a dry season or drying trend during winter, this condition falls into the Cwa category of the Köppen climate classification. Environmental systems with this condition usually occur on the eastern side of continents. - ORCID:0000-0002-4366-3088 - - - A humid subtropical condition is a subtropical condition in which an environmental system has hot, humid summers, warm to cool dry winters, and average annual precipitation either evenly distributed throughout the year or marked by a dry season or drying trend during winter - https://en.wikipedia.org/wiki/Subtropics - - - - - In cases where rainfall is evenly distributed throughout the year, this condition falls into the Cfa category of the Köppen climate classification. In cases marked by a dry season or drying trend during winter, this condition falls into the Cwa category of the Köppen climate classification. Environmental systems with this condition usually occur on the eastern side of continents. - https://en.wikipedia.org/wiki/Subtropics - - - - - - - - - - arid subtropical - - An arid subtropical condition is a subtropical condition in which an environmental system has an annual average temperature near 18.2 degrees Celsius with their coldest month averaging between 2 and 13 degrees Celsius, the absence of regular rainfall, and high humidity. - Mild variants are generally located in areas adjacent to powerful cold ocean currents. - ORCID:0000-0002-4366-3088 - desert climate - semi-arid climate - semi-desert climate - - - desert climate - https://en.wikipedia.org/wiki/Subtropics - - - - - An arid subtropical condition is a subtropical condition in which an environmental system has an annual average temperature near 18.2 degrees Celsius with their coldest month averaging between 2 and 13 degrees Celsius, the absence of regular rainfall, and high humidity. - https://en.wikipedia.org/wiki/Subtropics - - - - - semi-desert climate - https://en.wikipedia.org/wiki/Subtropics - - - - - Mild variants are generally located in areas adjacent to powerful cold ocean currents. - https://en.wikipedia.org/wiki/Subtropics - - - - - semi-arid climate - https://en.wikipedia.org/wiki/Subtropics - - - - - - - - - - highland subtropical - - A highland subtropical condition is a subtropical condition in which increased elevation results in mild summers, cooler winters, and, in some instances, snowfall associated with montly temperature averages below 22 but above -3 degrees Celsius. - ORCID:0000-0002-4366-3088 - This is an interesting overlap of a latitudinal and altitudinal condition. Some link between this condition and the altitudinal conditions should be considered. This condition corresponds to the Cfb and Cwb categories of Köppen climate classification. - - - A highland subtropical condition is a subtropical condition in which increased elevation results in mild summers, cooler winters, and, in some instances, snowfall associated with montly temperature averages below 22 but above -3 degrees Celsius. - https://en.wikipedia.org/wiki/Subtropics - - - - - - - - - - oceanic temperate - - An oceanic temperate condition is a temperate condition which is strongly influenced by oceans and oceanic winds. Summers are cool and winters are cool, but not cold, and there is little frozen precipitation at lower elevations. - ORCID:0000-0002-4366-3088 - This condition is typically present on the western coasts of large continental landmasses. - - - An oceanic temperate condition is a temperate condition which is strongly influenced by oceans and oceanic winds. Summers are cool and winters are cool, but not cold, and there is little frozen precipitation at lower elevations. - https://en.wikipedia.org/wiki/Temperate_zone - - - - - - - - - - continental temperate - - A continental temperate condition is a temperate condition which is influenced by large land masses. Summers are warm to hot and winters are often long, cold, and snowy. - ORCID:0000-0002-4366-3088 - - - A continental temperate condition is a temperate condition which is influenced by large land masses. Summers are warm to hot and winters are often long, cold, and snowy. - https://en.wikipedia.org/wiki/Temperate_zone - - - - - - - - - - cold desert - - A cold desert is a desert which has hot summers and cold, dry winters with temperatures below 0 degrees Celsius - This variant of the desert climate is somewhat rare outside of Asia. A cold desert climate is typically found in temperate zones, almost always in the rain shadow of high mountains which restrict precipitation from the westerly winds, or in the case of Central Asia, from the monsoon. The Gobi desert in Mongolia is a classic example of a region with a cold desert climate. Though hot in summer, it shares the very cold winters of the rest of Central Asia. The Kyzyl Kum and Taklamakan deserts of Central Asia and the drier portions of the Great Basin Desert of the western United States are other major examples of BWk climates. The Ladakh region, lying in the Great Himalayas in India also has a cold desert climate. - envoPolar - - - A cold desert is a desert which has hot summers and cold, dry winters with temperatures below 0 degrees Celsius - https://en.wikipedia.org/wiki/Desert_climate#Cold_desert_climates - - - - - - - - - - temperate evergreen needleleaf forest - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - coniferous forest - - - - - - - - tropical lowland evergreen broadleaf rain forest - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - rain forest - - - rain forest - http://www.eionet.europa.eu/gemet/concept/6949 - - - - - - - - - - temperate deciduous broadleaf forest - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - - - - - - - - temperate deciduous needleleaf forest - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - coniferous forest - - - - - - - - tropical deciduous broadleaf forest - - - - - - - - - - - - - - - - - - - - This class corresponds to the "Tropical Deciduous / semi-deciduous broadleaf forest" category of the updated Global Forest Map classification (GFM 2000). To reconstruct the original class, an aggregate class with this and the "tropical semi-deciduous broadleaf forest" class can be made. - rain forest - - - rain forest - http://www.eionet.europa.eu/gemet/concept/6949 - - - - - - - - - - tropical semi-deciduous broadleaf forest - - - - - - - - - - - - - - - - - - - - This class corresponds to the "Tropical Deciduous / semi-deciduous broadleaf forest" category of the updated Global Forest Map classification (GFM 2000). To reconstruct the original class, an aggregate class with this and the "tropical deciduous broadleaf forest" class can be made. - rain forest - - - rain forest - http://www.eionet.europa.eu/gemet/concept/6949 - - - - - - - - - - temperate mixed broadleaf forest - - - - - - - - - - - - - - - - - - - - - This class corresponds to the "Temperate Mixed broadleaf / needleleaf forest" category of the updated Global Forest Map classification (GFM 2000). To reconstruct the original class, an aggregate class with this and the "temperate mixed needleleaf forest" class can be made. - - - - - - - - temperate mixed needleleaf forest - - - - - - - - - - - - - - This class corresponds to the "Temperate Mixed broadleaf / needleleaf forest" category of the updated Global Forest Map classification (GFM 2000). To reconstruct the original class, an aggregate class with this and the "temperate mixed broadleaf forest" class can be made. - coniferous forest - - - - - - - - tropical semi-evergreen moist broadleaf forest - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - rain forest - - - http://www.eionet.europa.eu/gemet/concept/6949 - rain forest - - - - - - - - - - tropical upper montane forest - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - - - - - - - - tropical lower montane forest - - - - - - - - - - - - - - - - - - - - - tropical freshwater swamp forest - - - - - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - - - - - - - - temperate sclerophyllous dry forest - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - - - - - - - - tropical sclerophyllous dry forest - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - - - - - - - - temperate broadleaf evergreen forest - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - - - - - - - - temperate freshwater swamp forest - - - - - - - - - - - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). It is currently unclear how to relate forests and swamps. - - - - - - - - tropical needleleaf forest - - - - - - - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - coniferous forest - - - - - - - - tropical thorn forest - - - - - - - - This class is one of the forest types as identified by the updated Global Forest Map (GFM 2000). - - - - - - - - tropical mixed needleleaf forest - - - - - - - - This class corresponds to the "Tropical Mixed needleleaf / broadleaf forest" category of the updated Global Forest Map classification (GFM 2000). To reconstruct the original class, an aggregate class with this and the "tropical mixed broadleaf forest" class can be made. - coniferous forest - - - - - - - - tropical mixed broadleaf forest - - - - - - - - This class corresponds to the "Tropical Mixed needleleaf / broadleaf forest" category of the updated Global Forest Map classification (GFM 2000). To reconstruct the original class, an aggregate class with this and the "tropical mixed needleleaf forest" class can be made. - - - - - - - - - tropical mangrove - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This class corresponds to the "Tropical Mixed needleleaf / broadleaf forest" category of the updated Global Forest Map classification (GFM 2000). To reconstruct the original class, an aggregate class with this and the "tropical mixed needleleaf forest" class can be made. - -The relationship between this "forest" class and the mangrove swamp must be clarified. - tropical mangrove forest - - - - - - - - plastic - - A (portion of) plastic is an (portion of) anthropogenic environmental material including any of numerous organic synthetic or processed materials which are primarily composed of thermoplastic or thermosetting polymers of high molecular weight. - URL:http://aims.fao.org/aos/agrovoc/c_5998 - URL:http://eurovoc.europa.eu/1837 - envoPolar - - - A (portion of) plastic is an (portion of) anthropogenic environmental material including any of numerous organic synthetic or processed materials which are primarily composed of thermoplastic or thermosetting polymers of high molecular weight. - http://www.merriam-webster.com/dictionary/plastic - - - - - - - - - - respirable suspended particulate matter - - - - - - - - A portion of respirable suspended particulate matter is a form of particulate matter composed primarily of solid particles each with a diameter of 10 micrometers or less. - PM10 - - - https://en.wikipedia.org/wiki/Particulates - A portion of respirable suspended particulate matter is a form of particulate matter composed primarily of solid particles each with a diameter of 10 micrometers or less. - - - - - - - - - - snow - - - - - - - - - - - - - - - - - - - - - - Snow is an environmental material which is primarily composed of flakes of crystalline water ice. - snow - envoPolar - - - http://www.eionet.europa.eu/gemet/concept/7769 - snow - - - - - Snow is an environmental material which is primarily composed of flakes of crystalline water ice. - https://en.wikipedia.org/wiki/Snow - - - - - - - - - - littoral zone - - - - - - - - The littoral zone is the part of a sea, lake, or river that is close to the shore. The adjacency of water has many consequences including the generation of microclimates and impacts on the biology. - This class is intended to capture littoral zones that are associated with marine, freshwater, and any other aquatic environments. Note that there is no single definition of the extent of the "littoral zone", associated with any water body. Here, we use definitions that will be more familiar to marine biologists rather than military organisations, although the latter can be added on request. - - - The littoral zone is the part of a sea, lake, or river that is close to the shore. The adjacency of water has many consequences including the generation of microclimates and impacts on the biology. - https://en.wikipedia.org/wiki/Littoral_zone - - - - - - - - - - environmental zone - - An environmental zone is an environmental feature whose extent is determined by the presence or influence of one or more material entities or processes. An environmental zone may, itself, assume the role of an environmental feature. - For example, a intertidal zone is that part of a coast which is exposed to air and water due to tidal processes. It determines the intertidal zone environment. This class is experimental and not suitable for annotation! "Zone" is likely to become some form of BFO:site. It is intended to capture entities from both physiography and human geography. - environmental area - envoPolar - - - - - - - - freshwater littoral zone - - - - - - - - - - - - - - - A freshwater littoral zone is a littoral zone which extends offshore from the shore of a freshwater body of water to the limit of occupancy of rooted plants. - The littoral zone may form a narrow or broad fringing wetland, with extensive areas of aquatic plants sorted by their tolerance to different water depths. Typically, four zones are recognized, from higher to lower on the shore: wooded wetland, wet meadow, marsh and aquatic vegetation. Keddy, P.A. 2010. Wetland Ecology: Principles and Conservation (2nd edition). Cambridge University Press, Cambridge, UK. Chapter 2. - fringing wetland - - - The littoral zone may form a narrow or broad fringing wetland, with extensive areas of aquatic plants sorted by their tolerance to different water depths. Typically, four zones are recognized, from higher to lower on the shore: wooded wetland, wet meadow, marsh and aquatic vegetation. Keddy, P.A. 2010. Wetland Ecology: Principles and Conservation (2nd edition). Cambridge University Press, Cambridge, UK. Chapter 2. - https://en.wikipedia.org/wiki/Littoral_zone - - - - - A freshwater littoral zone is a littoral zone which extends offshore from the shore of a freshwater body of water to the limit of occupancy of rooted plants. - URL:http://www.epa.gov/ - https://en.wikipedia.org/wiki/Littoral_zone - - - - - - - - - - marine eulittoral zone - - - - - - - - - - - - - - - - - - - - - The eulittoral zone extends from the spring high tide line, which is rarely inundated, to the spring low tide line, which is rarely not inundated. The wave action and turbulence of recurring tides shapes and reforms cliffs, gaps, and caves, offering a huge range of habitats for sedentary organisms. - foreshore - intertidal zone - mediolittoral zone - midlittoral zone - - - mediolittoral zone - https://en.wikipedia.org/wiki/Littoral_zone - - - - - foreshore - https://en.wikipedia.org/wiki/Littoral_zone - - - - - The eulittoral zone extends from the spring high tide line, which is rarely inundated, to the spring low tide line, which is rarely not inundated. The wave action and turbulence of recurring tides shapes and reforms cliffs, gaps, and caves, offering a huge range of habitats for sedentary organisms. - https://en.wikipedia.org/wiki/Littoral_zone - - - - - midlittoral zone - https://en.wikipedia.org/wiki/Littoral_zone - - - - - - - - - - infralittoral zone - - - - - - - - A zone which is part of the sublittoral zone and is dominated by algae. This zone usually extends up to five metres below the low water mark. - - - A zone which is part of the sublittoral zone and is dominated by algae. This zone usually extends up to five metres below the low water mark. - https://en.wikipedia.org/wiki/Littoral_zone - - - - - - - - - - circalittoral zone - - - - - - - - A zone which is part of the sublittoral zone and is dominated by sessile animals such as oysters. This zone usually begins at a depth greater than the infralittoral zone. - - - - - - - - old plant - - - - - - - - - - - - - - - - - - - - A whole plant which is relatively old - - - - - - - - young plant - - - - - - - - - - - - - - - - - - - - A whole plant which is relatively young. - - - - - - - - fine respirable suspended particulate matter - - A portion of fine respirable suspended particulate matter is a form of particulate matter composed primarily of solid particles each with a diameter of 2.5 micrometers or less. - PM2.5 - - - A portion of fine respirable suspended particulate matter is a form of particulate matter composed primarily of solid particles each with a diameter of 2.5 micrometers or less. - https://en.wikipedia.org/wiki/Particulates - - - - - - - - - - ultrafine respirable suspended particulate matter - - Regulations do not exist for this size class of ambient air pollution particles, which are far smaller than the regulated PM10 and PM2.5 particle classes and are believed to have several more aggressive health implications than those classes of larger particulates. - A portion of fine respirable suspended particulate matter is a form of particulate matter composed primarily of solid particles each with a diameter of 100 nanometers or less. - - - A portion of fine respirable suspended particulate matter is a form of particulate matter composed primarily of solid particles each with a diameter of 100 nanometers or less. - https://en.wikipedia.org/wiki/Ultrafine_particle - https://en.wikipedia.org/wiki/Particulates - - - - - - - - - - house - - A house is a building that provides a dwelling-place for a living entity. - The provisioning of a dwelling-place can perhaps be modelled as a role. - - - A house is a building that provides a dwelling-place for a living entity. - https://en.wikipedia.org/wiki/House - https://en.wikipedia.org/wiki/Home - - - - - - - - - - human house - - A human house is a house which provides a dwelling-place for humans. - - - - - - - - domestic garden - - - A garden that is associated with a human house. This association is generally one of spatial proximity or parthood. - - - - - - - - building part - - - - - - - - A building part is a construction which is part of a building. - Not recommended for annotation. This class is likely to be made into an inferred class as its subclasses are distributed among more meaningful superclasses (i.e. ceiling is_a surface layer). See for example, "building floor". The boundaries between building parts may be bona fide or fiat. - - - - - - - - indoor kitchen - - An indoor kitchen is a room or part of a room primarily used for cooking or food preparation, but which may have other funcitons such as dining, food storage, dishwashing, or laundry. - Not a sublcass of room as this may just be part of some room. - ORCID:0000-0002-4366-3088 - - - An indoor kitchen is a room or part of a room primarily used for cooking or food preparation, but which may have other funcitons such as dining, food storage, dishwashing, or laundry. - https://en.wikipedia.org/wiki/Kitchen - - - - - - - - - - bathroom - - A bathroom is a room which contains a washbasin or other fixture, such as a shower or bath, used for bathing by humans. - ORCID:0000-0002-4366-3088 - bathing room - toilet - washroom - - - - - - - - living room - - A living room is a room in a human house which is used for social and domestic leisure activities. - ORCID:0000-0002-4366-3088 - The logical definitions must state which social and leisure activities are included here. Jet-skiing and mass rallies are probably not the range. - living-room - - - A living room is a room in a human house which is used for social and domestic leisure activities. - https://en.wikipedia.org/wiki/Living_room - - - - - - - - - - patio - - - - - - - - A patio is a paved outdoor area, adjacent to a human house, and used for dining or recreation. - - - A patio is a paved outdoor area, adjacent to a human house, and used for dining or recreation. - https://en.wikipedia.org/wiki/Patio - - - - - - - - - - indoor toilet - - - - - - - - An indoor toilet is a room which contains a sanitation fixture used primarily for the disposal of human urine and faeces. - ORCID:0000-0002-4366-3088 - bathroom - indoor lavatory - lavatory - restroom - toilet - toilet room - - - An indoor toilet is a room which contains a sanitation fixture used primarily for the disposal of human urine and faeces. - https://en.wikipedia.org/wiki/Toilet - - - - - - - - - - room - - A room is a building part which is separated from other building parts by one or more interior walls and, optionally, outdoor areas by one or more exterior walls. - ORCID:0000-0002-4366-3088 - - - A room is a building part which is separated from other building parts by one or more interior walls and, optionally, outdoor areas by one or more exterior walls. - https://en.wikipedia.org/wiki/Room - - - - - - - - - - carbon nanotube enriched soil - - - - - - - - A portion of carbon nanotube enriched soil is a portion of soil with elevated levels of carbon nanotubes. - Logical definition will be created pending import of "carbon nanotube" from CHEBI - - - - - - - - rocky shore - - A rocky shore is an intertidal area of a seacoast where solid rock is the predominant substrate. - This label is usually used to refer to 'rocky intertidal shores', i.e. a marine environment. Other types of rocky shore should be requested explicitly. Additionally, "rocky" could be a quality, this would link this with rocky deserts etc. - rocky intertidal shore - - - A rocky shore is an intertidal area of a seacoast where solid rock is the predominant substrate. - https://en.wikipedia.org/wiki/Rocky_shore - - - - - - - - - - burrow - - A burrow is a hole or tunnel excavated into the ground by an animal to create a space suitable for habitation, temporary refuge, or as a byproduct of locomotion - Should be better defined logically aggregating 'hole' or 'tunnel' with some sort of relation to 'habitation' etc. - - - A burrow is a hole or tunnel excavated into the ground by an animal to create a space suitable for habitation, temporary refuge, or as a byproduct of locomotion - https://en.wikipedia.org/wiki/Burrow - - - - - - - - - - broadleaf forest - - A class created to group GFM 2000 terms by the dominant vegetation type. Definitions pending. - - - - - - - - mixed forest - - A class created to group GFM 2000 terms by the dominant vegetation type. Definitions pending. The subclasses of this class need to be checked: are they properly placed under other classes or is this corrected and the dominant form of mixed vegetation noted in the label? - - - - - - - - swamp forest - - A class created to group GFM 2000 terms by the dominant vegetation type. Definitions pending. - - - - - - - - needleleaf forest - - A class created to group GFM 2000 terms by the dominant vegetation type. Definitions pending. - coniferous forest - - - - - - - - sclerophyllous forest - - A class created to group GFM 2000 terms by the dominant vegetation type. Definitions pending. - - - - - - - - montane forest - - A class created to group GFM 2000 terms by the dominant vegetation type. Definitions pending. - - - - - - - - waterborne particulate matter - - - - - - - - - - - - - - This class should be populated by inference, relying on 'composed primarily of', many 'pieces of solid material' and 'surrounded by' some 'water'. - Waterborne particulate matter is a form of particulate matter in which small, solid portions of solid material are surrounded by water. - - - - - - - - lava field - - - - - - - - A lava field is an expanse of flat-lying lava flows. Such features are generally composed of highly fluid basalt lava, and can extend for tens or even hundreds of miles across the underlying terrain. - lava area - lava bed - lava plain - - - lava plain - https://en.wikipedia.org/wiki/Lava_field - - - - - A lava field is an expanse of flat-lying lava flows. Such features are generally composed of highly fluid basalt lava, and can extend for tens or even hundreds of miles across the underlying terrain. - https://en.wikipedia.org/wiki/Lava_field - - - - - lava bed - https://en.wikipedia.org/wiki/Lava_field - - - - - - - - - - lava flow - - - - - - - - - - - - - - - A lava flow is a moving outpouring of lava, which is created during a non-explosive effusive eruption. - environmental_hazards - - - A lava flow is a moving outpouring of lava, which is created during a non-explosive effusive eruption. - https://en.wikipedia.org/wiki/Lava - - - - - - - - - - andesitic volcano - - - - - - - - - dacitic volcano - - - - - - - - - andesite - - - - - - - - - - - - - - - - - - - Andesite is an extrusive igneous, volcanic rock, of intermediate composition, with aphanitic to porphyritic texture. In a general sense, it is the intermediate type between basalt and dacite, and ranges from 57 to 63 percent silicon dioxide as illustrated in TAS diagrams. The mineral assemblage is typically dominated by plagioclase plus pyroxene and/or hornblende. Magnetite, zircon, apatite, ilmenite, biotite, and garnet are common accessory minerals. Alkali feldspar may be present in minor amounts. - - - Andesite is an extrusive igneous, volcanic rock, of intermediate composition, with aphanitic to porphyritic texture. In a general sense, it is the intermediate type between basalt and dacite, and ranges from 57 to 63 percent silicon dioxide as illustrated in TAS diagrams. The mineral assemblage is typically dominated by plagioclase plus pyroxene and/or hornblende. Magnetite, zircon, apatite, ilmenite, biotite, and garnet are common accessory minerals. Alkali feldspar may be present in minor amounts. - https://en.wikipedia.org/wiki/Andesite - - - - - - - - - - dacite - - Dacite is an igneous, volcanic rock. It has an aphanitic to porphyritic texture and is intermediate in composition between andesite and rhyolite. Dacite consists mostly of plagioclase feldspar with biotite, hornblende, and pyroxene (augite and/or enstatite). It has quartz as rounded, corroded phenocrysts, or as an element of the ground-mass. The plagioclase ranges from oligoclase to andesine and labradorite. Sanidine occurs, although in small proportions, in some dacites, and when abundant gives rise to rocks that form transitions to the rhyolites. - - - Dacite is an igneous, volcanic rock. It has an aphanitic to porphyritic texture and is intermediate in composition between andesite and rhyolite. Dacite consists mostly of plagioclase feldspar with biotite, hornblende, and pyroxene (augite and/or enstatite). It has quartz as rounded, corroded phenocrysts, or as an element of the ground-mass. The plagioclase ranges from oligoclase to andesine and labradorite. Sanidine occurs, although in small proportions, in some dacites, and when abundant gives rise to rocks that form transitions to the rhyolites. - https://en.wikipedia.org/wiki/dacite - - - - - - - - - - salt mass - - - - - - - - - - - - - - - - - - - An accumulation of a salt, typically sodium chloride. - - - - - - - - dacitic lava - - - - - - - - - disturbed area - - - - - - - - A disturbed area is an environmental zone which includes an ecosystem which was subject to an ecological disturbance. That is, the ecosystem in the area has undergone a pronounced change in response to a change in environmental conditions or other perturbation. - This is often used by plant collectors when early successional species are observed in an area. - envoPolar - - - A disturbed area is an environmental zone which includes an ecosystem which was subject to an ecological disturbance. That is, the ecosystem in the area has undergone a pronounced change in response to a change in environmental conditions or other perturbation. - https://en.wikipedia.org/wiki/Disturbance_(ecology) - - - - - - - - - - ravine - - A ravine is a small, narrow, steep-sided valley that is larger than a gully and smaller than a canyon and that is usually worn by running water. - - - A ravine is a small, narrow, steep-sided valley that is larger than a gully and smaller than a canyon and that is usually worn by running water. - url:http://www.merriam-webster.com/dictionary/ravine - - - - - - - - - - roadside - - - - - - - - An environmental zone of varying area which is adjacent to a road. - - - - - - - - mixed grassland - - A mixed grassland is a grassland which contains a mixture of tall and short grasses. - - - A mixed grassland is a grassland which contains a mixture of tall and short grasses. - url:http://worldwildlife.org/ecoregions/na0810 - https://en.wikipedia.org/wiki/Central_and_Southern_mixed_grasslands - https://en.wikipedia.org/wiki/Northern_mixed_grasslands - - - - - - - - - - wet meadow - - A wet meadow is a type of wetland with soils that are saturated with water for part or all of the growing season. - Debate exists whether a wet meadow is a type of marsh or a completely separate type of wetland. Wet prairies and wet savannas are hydrologically similar. Wet meadows may occur because of restricted drainage or the receipt of large amounts of water from rain or melted snow. They may also occur in riparian zones and around the shores of large lakes. Unlike a marsh or swamp, a wet meadow does not have standing water present except for brief to moderate periods during the growing season. Instead, the ground in a wet meadow fluctuates between brief periods of inundation and longer periods of saturation. Wet meadows often have large numbers of wetland plant species, which frequently survive as buried seeds during dry periods, and then regenerate after flooding. Wet meadows therefore do not usually support aquatic life such as fish. They typically have a high diversity of plant species, and may attract large numbers of birds, small mammals and insects including butterflies. - - - Debate exists whether a wet meadow is a type of marsh or a completely separate type of wetland. Wet prairies and wet savannas are hydrologically similar. Wet meadows may occur because of restricted drainage or the receipt of large amounts of water from rain or melted snow. They may also occur in riparian zones and around the shores of large lakes. Unlike a marsh or swamp, a wet meadow does not have standing water present except for brief to moderate periods during the growing season. Instead, the ground in a wet meadow fluctuates between brief periods of inundation and longer periods of saturation. Wet meadows often have large numbers of wetland plant species, which frequently survive as buried seeds during dry periods, and then regenerate after flooding. Wet meadows therefore do not usually support aquatic life such as fish. They typically have a high diversity of plant species, and may attract large numbers of birds, small mammals and insects including butterflies. - https://en.wikipedia.org/wiki/Wet_meadow - - - - - A wet meadow is a type of wetland with soils that are saturated with water for part or all of the growing season. - https://en.wikipedia.org/wiki/Wet_meadow - - - - - - - - - - salt glacier - - namakier - salt fountain - A mass of salt which has erupted onto a planetary surface, usually through sedimentary rock. - - - Adapted from URL:http://earthobservatory.nasa.gov/IOTD/view.php?id=86861 - A mass of salt which has erupted onto a planetary surface, usually through sedimentary rock. - - - - - - - - - - atmospheric carbon dioxide - - - - - - - - - - - - - - - - - - - - - - ORCID:0000-0002-4366-3088 - This could also be considered a part of an environmental material like air. - Atmospheric carbon dioxide is an environmental material composed of carbon dioxide in its gaseous form present in the atmosphere. - envoPolar - - - - - - - - environmental disposition - - A disposition which is realised by an environmental system or system parts thereof. - This class and its subclasses are experimental and are being developed with NCEAS use cases in mind. - ORCID:0000-0002-4366-3088 - - - - - - - - carbon pooling disposition - - ORCID:0000-0002-4366-3088 - The disposition of an environmental system to sequester and store carbon. - - - - - - - - carbon dioxide pooling disposition - - The disposition of an environment to sequester carbon dioxide, subsequently storing the carbon component thereof. - ORCID:0000-0002-4366-3088 - - - - - - - - material pooling disposition - - ORCID:0000-0002-4366-3088 - The disposition of an environmental system to sequester and store some material entity. - - - - - - - - concrete masonry unit - - - - - - - - A concrete masonry unit is a large, rectangular masonry unit primarily composed of concrete. - ORCID:0000-0002-4366-3088 - - - A concrete masonry unit is a large, rectangular masonry unit primarily composed of concrete. - https://en.wikipedia.org/wiki/Concrete_masonry_unit - - - - - - - - - - masonry unit - - A masonry unit is a solid piece of material, usually with a regular shape, used as a component in the construction of buildings. Masonry units are usually composed of brick, stone, marble, granite, travertine, limestone, cast stone, concrete block, glass block, stucco, tile, or cob. - ORCID:0000-0002-4366-3088 - - - A masonry unit is a solid piece of material, usually with a regular shape, used as a component in the construction of buildings. Masonry units are usually composed of brick, stone, marble, granite, travertine, limestone, cast stone, concrete block, glass block, stucco, tile, or cob. - https://en.wikipedia.org/wiki/Masonry - - - - - - - - - - concrete - - - - - - - - Concrete is a composite material composed of an aggregate bonded together with a fluid cement which hardens over time. - ORCID:0000-0002-4366-3088 - Missing the class for "aggregate" - tricky to define what it is, exactly. Again, seems more like some sort of material/disposition hybrid. - - - Concrete is a composite material composed of an aggregate bonded together with a fluid cement which hardens over time. - https://en.wikipedia.org/wiki/Concrete - - - - - - - - - - asphalt concrete - - - - - - - - Asphaltic concrete is a concrete which uses refined asphalt as a cement. - ORCID:0000-0002-4366-3088 - asphaltic concrete - road pavement - - - Asphaltic concrete is a concrete which uses refined asphalt as a cement. - https://en.wikipedia.org/wiki/Concrete - - - - - - - - - - asphalt - - Asphalt also known as bitumen is a sticky, black, and highly viscous liquid or semi-solid form of petroleum. - This class refers to naturally-occuring asphalt or bitumen. - asphaltum - bitumen - crude bitumen - pitch - tar - - - Asphalt also known as bitumen is a sticky, black, and highly viscous liquid or semi-solid form of petroleum. - https://en.wikipedia.org/wiki/Asphalt - - - - - - - - - - refined asphalt - - - - - - - - ORCID:0000-0002-4366-3088 - Refined asphalt is a sticky, black, and highly viscous liquid or semi-solid with a boiling point above 500 degrees Celsius, obtained from the fractional distillation of crude oil. - refined bitumen - - - Refined asphalt is a sticky, black, and highly viscous liquid or semi-solid with a boiling point above 500 degrees Celsius, obtained from the fractional distillation of crude oil. - https://en.wikipedia.org/wiki/Asphalt - - - - - - - - - - masonry cement - - "Cement" refers more to a disposition than a specific material. - Masonry cement is a substance used in construction that has the disposition to set and harden and thus may be used to bind materials together. - ORCID:0000-0002-4366-3088 - cement - - - Masonry cement is a substance used in construction that has the disposition to set and harden and thus may be used to bind materials together. - https://en.wikipedia.org/wiki/Cement - - - - - - - - - - hydraulic cement - - Hydraulic cement is a masonry cement which contains activated aluminium silicates or pozzolans, such as fly ash, allowing it to set in wet conditions or underwater. - ORCID:0000-0002-4366-3088 - - - Hydraulic cement is a masonry cement which contains activated aluminium silicates or pozzolans, such as fly ash, allowing it to set in wet conditions or underwater. - https://en.wikipedia.org/wiki/Cement - - - - - - - - - - non-hydraulic cement - - Non-hydraulic cement is a cement which sets by reacting with carbon dioxide in the air and will not set in wet conditions or underwater. It is susceptible to attack by aggresive chemicals after setting. - ORCID:0000-0002-4366-3088 - - - Non-hydraulic cement is a cement which sets by reacting with carbon dioxide in the air and will not set in wet conditions or underwater. It is susceptible to attack by aggresive chemicals after setting. - https://en.wikipedia.org/wiki/Cement - - - - - - - - - - building wall - - Building walls are bulding parts which serve to support roofs, floors and ceilings; enclose a space as part of the building envelope; give buildings form; and to provide shelter and security. - This is a building part and not the same as a standalone wall, which is a building in its own right. - - - Building walls are bulding parts which serve to support roofs, floors and ceilings; enclose a space as part of the building envelope; give buildings form; and to provide shelter and security. - https://en.wikipedia.org/wiki/Wall - - - - - - - - - - boundary wall - - A boundary wall is a constructed barrier which is usually opaque, constructed from masonry, and of greater structural strength than a fence. - This is not the same as a wall that is part of a building. use ENVO:01000420 for the latter. - defensive wall - - - A boundary wall is a constructed barrier which is usually opaque, constructed from masonry, and of greater structural strength than a fence. - https://en.wikipedia.org/wiki/Wall#Boundary_wall - - - - - - - - - - constructed barrier - - A constructed barrier is a freestanding wall, berm, or fence built to limit movement of entities across a boundary. - ORCID:0000-0002-4366-3088 - barrier - - - A constructed barrier is a freestanding wall, berm, or fence built to limit movement of entities across a boundary. - https://en.wikipedia.org/wiki/Border_barrier - - - - - - - - - - fence - - A fence is a constructed barrier which is generally of lighter construction than a wall and used to provide visual sectioning of spaces. - ORCID:0000-0002-4366-3088 - - - A fence is a constructed barrier which is generally of lighter construction than a wall and used to provide visual sectioning of spaces. - https://en.wikipedia.org/wiki/Fence - - - - - - - - - - exterior wall - - An exterior wall is a building wall which separates the interior of a building from the buildings surrounding environment. - ORCID:0000-0002-4366-3088 - - - - - - - - building envelope - - - - - - - - - - - - - - A building envelope is a building part composed of those building parts which physically separate the interior of a building from its surrounding environment. -The building envelope provides resistance to air, water, heat, light, and noise transfer. The three basic elements of a building envelope are a weather barrier, air barrier, and thermal barrier. - ORCID:0000-0002-4366-3088 - building enclosure - - - A building envelope is a building part composed of those building parts which physically separate the interior of a building from its surrounding environment. -The building envelope provides resistance to air, water, heat, light, and noise transfer. The three basic elements of a building envelope are a weather barrier, air barrier, and thermal barrier. - https://en.wikipedia.org/wiki/Building_envelope - - - - - - - - - - ceiling - - - - - - - - A ceiling is an overhead interior surface that covers the upper limit of a room. It is not generally considered a structural element, but a finished surface concealing the underside of the floor or roof structure above. - ORCID:0000-0002-4366-3088 - - - A ceiling is an overhead interior surface that covers the upper limit of a room. It is not generally considered a structural element, but a finished surface concealing the underside of the floor or roof structure above. - https://en.wikipedia.org/wiki/Ceiling - - - - - - - - - - building roof - - - - - - - - A roof is the covering on the uppermost part of a building which provides protection from animals and weather, notably rain, but also heat, wind and sunlight. A roof is also the framing or structure which supports the covering - ORCID:0000-0002-4366-3088 - This class is meant to represent roofs which are parts of buildings, rather than a roofs of cave and other natural formations. - roof - - - A roof is the covering on the uppermost part of a building which provides protection from animals and weather, notably rain, but also heat, wind and sunlight. A roof is also the framing or structure which supports the covering - https://en.wikipedia.org/wiki/Roof - - - - - - - - - - thatch - - Some sort of logical definition towards: -composed_primarily_of some ((straw or 'water reed' or rushes or sedge or heather) and has_quality dry) -should be considered, where "rushes", "sedge", etc are represented as materials rather than some sort of taxon. - Thatch is material composed of dry vegetation such as straw, water reed, sedge (Cladium mariscus), rushes, or heather. - - - Thatch is material composed of dry vegetation such as straw, water reed, sedge (Cladium mariscus), rushes, or heather. - https://en.wikipedia.org/wiki/Thatching - - - - - - - - - - brick material - - A portion of brick material is a material derived from a brick which is composed of kneaded clay-bearing soil, expanded clay aggregate, sand and lime, or concrete that has been fire-hardened or air-dried. - ORCID:0000-0002-4366-3088 - - - A portion of brick material is a material derived from a brick which is composed of kneaded clay-bearing soil, expanded clay aggregate, sand and lime, or concrete that has been fire-hardened or air-dried. - https://en.wikipedia.org/wiki/Brick - - - - - - - - - - brick - - Generally used to refer to the masonry unit rather than a material. - ORCID:0000-0002-4366-3088 - A brick is a masonry unit which is composed of kneaded clay-bearing soil, expanded clay aggregate, sand and lime, or concrete material, fire-hardened or air-dried. - - - https://en.wikipedia.org/wiki/Brick - A brick is a masonry unit which is composed of kneaded clay-bearing soil, expanded clay aggregate, sand and lime, or concrete material, fire-hardened or air-dried. - - - - - - - - - - plaster - - ORCID:0000-0002-4366-3088 - Plaster is a building material which has the disposition to harden when it reacts with water, liberating heat through crystallization. Plaster is manufactured as a dry powder and is mixed with water to form a paste when used. - render - stucco - - - Plaster is a building material which has the disposition to harden when it reacts with water, liberating heat through crystallization. Plaster is manufactured as a dry powder and is mixed with water to form a paste when used. - https://en.wikipedia.org/wiki/Plaster - - - - - - - - - - gypsum plaster - - Gypsum plaster is a plaster which is formed by partially dehydrating gypsum by heating it to approximately 150 degrees Celsius and grinding the product into a powder. Gypsum anhydride - formed by heating gypsum above 200 degrees Celsius - may also be used as plaster. - ORCID:0000-0002-4366-3088 - plaster of Paris - - - Gypsum plaster is a plaster which is formed by partially dehydrating gypsum by heating it to approximately 150 degrees Celsius and grinding the product into a powder. Gypsum anhydride - formed by heating gypsum above 200 degrees Celsius - may also be used as plaster. - https://en.wikipedia.org/wiki/Plaster - - - - - - - - - - cement plaster - - ORCID:0000-0002-4366-3088 - cement render - cement stucco - - - - - - - - lime plaster - - Lime plaster is a plaster which is primarily composed of calcium hydroxide and an inert filler (such as sand). Coversion of the calcium hydroxide to calcium carbonate through a reaction with carbon dioxide in the air causes the plaster to set. - ORCID:0000-0002-4366-3088 - lime render - lime stucco - slaked lime plaster - - - Lime plaster is a plaster which is primarily composed of calcium hydroxide and an inert filler (such as sand). Coversion of the calcium hydroxide to calcium carbonate through a reaction with carbon dioxide in the air causes the plaster to set. - https://en.wikipedia.org/wiki/Plaster - - - - - - - - - - glass - - - - - - - - This class refers to all forms of glass. For the familiar form present in window panes and drinking glasses, consider silica-based glass. - ORCID:0000-0002-4366-3088 - Glass is an amorphous (non-crystalline) solid which is often transparent. - - - https://en.wikipedia.org/wiki/Glass - Glass is an amorphous (non-crystalline) solid which is often transparent. - - - - - - - - - - silica-based glass - - Silica-based glass is a glass composed primarily of silicon dioxide, the primary constituent of sand. - glass - Silica-based glasses are the most common manufactured variety of glass. - - - - - - - - soda-lime glass - - This type of glass constitutes 90% of manufactured glass. - Soda-lime glass is a silica-based glass which is composed of approximately 75% silicon dioxide, with sodium oxide and calcium oxide consituting most of its remaining composition. - soda-lime-silica glass - ORCID:0000-0002-4366-3088 - glass - - - https://en.wikipedia.org/wiki/Glass - This type of glass constitutes 90% of manufactured glass. - - - - - Soda-lime glass is a silica-based glass which is composed of approximately 75% silicon dioxide, with sodium oxide and calcium oxide consituting most of its remaining composition. - https://en.wikipedia.org/wiki/Soda-lime_glass - - - - - - - - - - flat glass - - Flat glass is a soda-lime glass which is composed of approximately 73% silicon dioxide (silica), 14% sodium oxide, 9% calcium oxide, 4% magnesium oxide, 0.15% aluminium oxide, 0.03% potassium oxide, 0.02% titanum dioxide, and 0.01% iron III oxide. - Most flat glass is soda-lime glass produced by the float glass process. It is more water soluble than container glass. - plate glass - sheet glass - ORCID:0000-0002-4366-3088 - - - Flat glass is a soda-lime glass which is composed of approximately 73% silicon dioxide (silica), 14% sodium oxide, 9% calcium oxide, 4% magnesium oxide, 0.15% aluminium oxide, 0.03% potassium oxide, 0.02% titanum dioxide, and 0.01% iron III oxide. - https://en.wikipedia.org/wiki/Soda-lime_glass - - - - - - - - - - container glass - - Container glass is less water soluble than flat glass. - Container glass is a soda-lime glass which is composed of approximately 74% silicon dioxide (silica), 13% sodium oxide, 10.5% calcium oxide, 1.3% aluminium oxide, 0.3% potassium oxide, 0.2% sulphur trioxide, 0.2% magnesium oxide, 0.04% iron III oxide, and 0.01% titanum dioxide. - ORCID:0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Soda-lime_glass - Container glass is a soda-lime glass which is composed of approximately 74% silicon dioxide (silica), 13% sodium oxide, 10.5% calcium oxide, 1.3% aluminium oxide, 0.3% potassium oxide, 0.2% sulphur trioxide, 0.2% magnesium oxide, 0.04% iron III oxide, and 0.01% titanum dioxide. - - - - - - - - - - quartz glass - - fused quartz - fused silica - ORCID:0000-0002-4366-3088 - This is "pure" silica glass. As an ENVO:"environmental material" this class assumes that there remains some possibility that 'contaminants' being present. - Quartz glass is a glass which is composed of silica in amorphous (non-crystalline) form. - - - https://en.wikipedia.org/wiki/Fused_quartz - Quartz glass is a glass which is composed of silica in amorphous (non-crystalline) form. - - - - - - - - - - building floor - - - - - - - - A building floor is a surface layer which is part of a building and used for walking. - ORCID:0000-0002-4366-3088 - To be more precise, a subfloor and a floor covering may be specified. Please request these classes and propose definitions if they are needed. - - - - - - - - brick building floor - - - - - - - - A brick building floor is a building floor that is composed primarily of brick material or is built from bricks. - ORCID:0000-0002-4366-3088 - brick floor - - - - - - - - wooden building floor - - - - - - - - A wooden building floor is a building floor that is composed primarily of wood. - ORCID:0000-0002-4366-3088 - wooden floor - wooden parquet floor - - - - - - - - concrete building floor - - - - - - - - A concrete building floor is a building floor that is composed primarily of concrete - At times, this is called a cement floor, although that is probably not accurate. - ORCID:0000-0002-4366-3088 - cement building floor - cement floor - concrete floor - - - - - - - - sandy building floor - - - - - - - - A sandy building floor is a building floor that is composed primarily of sand. - ORCID:0000-0002-4366-3088 - sand floor - sandy floor - - - - - - - - glass building floor - - - - - - - - A glass building floor is a building floor which is composed primarily of glass. - ORCID:0000-0002-4366-3088 - glass floor - - - - - - - - dung building floor - - - - - - - - - - - - - - - - - - A dung building floor is a building floor which is composed primarily of dried animal feces. - ORCID:0000-0002-4366-3088 - dung floor - - - - - - - - stone building floor - - - - - - - - A stone building floor is a building floor that is composed primarily of rock. - ORCID:0000-0002-4366-3088 - rock floor - stone floor - - - - - - - - thatched exterior wall - - - - - - - - A thatched exterior wall is an exterior wall that is composed primarily of thatch. - ORCID:0000-0002-4366-3088 - thatch exterior wall - thatch wall - thatched wall - - - - - - - - stone exterior wall - - - - - - - - A stone exterior wall is an exterior wall that is composed primarily of rock. - ORCID:0000-0002-4366-3088 - stone wall - - - - - - - - straw exterior wall - - - - - - - - A straw exterior wall is an exterior wall that is composed primarily of straw. - ORCID:0000-0002-4366-3088 - straw wall - - - - - - - - mud exterior wall - - - - - - - - A mud exterior wall is an exterior wall that is composed primarily of mud. - ORCID:0000-0002-4366-3088 - mud wall - - - - - - - - pole - - - - - - - - A solid, cylindrical object or column with its length greater than its diameter. - ORCID:0000-0002-4366-3088 - This was created in response to a user request, but it is an odd class in that it specifies a shape rather than a particular material entity. It may, therefore, be deprecated when more meaningful or sensible alternatives become apparent. - - - A solid, cylindrical object or column with its length greater than its diameter. - https://en.wikipedia.org/wiki/Pole - - - - - - - - - - pole-reinforced mud exterior wall - - - - - - - - A pole-reinforced mud exterior wall is a mud exterior wall which is supported and reinforced by poles. - ORCID:0000-0002-4366-3088 - mud and poles exterior wall - mud and poles wall - - - - - - - - brick exterior wall - - - - - - - - - - - - - - A brick exterior wall is an exterior wall that is built from bricks. - ORCID:0000-0002-4366-3088 - brick wall - - - - - - - - burnt brick - - A burnt brick is a brick which has been dried at an elvated temperature in a kiln, furnace, or with similar technology . - ORCID:0000-0002-4366-3088 - - - - - - - - unburnt brick - - An unburnt brick is a brick which has been air dried rather than dried at an elvated temperature in a kiln, furnace, or with similar technology . - ORCID:0000-0002-4366-3088 - - - - - - - - burnt-brick exterior wall - - - - - - - - - - - - - - A burnt brick exterior wall is an exterior wall that is built from burnt bricks. - ORCID:0000-0002-4366-3088 - burnt brick exterior wall - burnt-brick wall - - - - - - - - unburnt-brick exterior wall - - - - - - - - - - - - - - An unburnt brick exterior wall is an exterior wall that is built from unburnt bricks. - ORCID:0000-0002-4366-3088 - brick wall - unburnt brick exterior wall - - - - - - - - salt dome - - - - - - - - A dome-shaped mass of salt formed when a thick bed of evaporite minerals (mainly salt, or halite) found at depth intrudes vertically into surrounding rock strata, forming a diapir. - - - A dome-shaped mass of salt formed when a thick bed of evaporite minerals (mainly salt, or halite) found at depth intrudes vertically into surrounding rock strata, forming a diapir. - https://en.wikipedia.org/wiki/Salt_dome - - - - - - - - - - concrete exterior wall - - - - - - - - - - - - - - A stone exterior wall is an exterior wall that is composed primarily of rock. - ORCID:0000-0002-4366-3088 - concrete wall - - - - - - - - iron sheet - - - - - - - - An iron sheet is a mass of iron which has been forged into a roughly planar form of less than 6 millimetres in thickness. - ORCID:0000-0002-4366-3088 - - - An iron sheet is a mass of iron which has been forged into a roughly planar form of less than 6 millimetres in thickness. - https://en.wikipedia.org/wiki/Sheet_metal - - - - - - - - - - salt material - - - - - - - - - - - - - - - sheet-iron exterior wall - - - - - - - - A sheet-iron exterior wall is an exterior wall that is built from sheets of iron. - ORCID:0000-0002-4366-3088 - iron sheet wall - sheet iron wall - sheet-iron wall - - - - - - - - sheet-iron building roof - - - - - - - - A sheet-iron building roof is a building roof that is built from sheets of iron. - ORCID:0000-0002-4366-3088 - iron sheet building roof - sheet iron roof - sheet-iron roof - - - - - - - - thatched building roof - - - - - - - - A thatched building roof is a building roof that is built by thatching (or out of thatch). - ORCID:0000-0002-4366-3088 - thatch roof - thatched roof - - - - - - - - wooden building roof - - - - - - - - - - - - - A wooden building roof is a building roof that is built from wood. - ORCID:0000-0002-4366-3088 - wood roof - wooden roof - - - - - - - - asbestos building roof - - An asbestos building roof is a building roof that is built from asbestos. - ORCID:0000-0002-4366-3088 - asbestos exists in CHEBI and will be imported to complete this class' logical def. - asbestos roof - - - - - - - - tile - - A tile is a manufactured piece of hard-wearing material such as ceramic, stone, metal, or even glass, generally used for covering roofs, floors, walls, showers, or other objects such as tabletops. Alternatively, tile can sometimes refer to similar units made from lightweight materials such as perlite, wood, and mineral wool, typically used for wall and ceiling applications. - ORCID:0000-0002-4366-3088 - - - A tile is a manufactured piece of hard-wearing material such as ceramic, stone, metal, or even glass, generally used for covering roofs, floors, walls, showers, or other objects such as tabletops. Alternatively, tile can sometimes refer to similar units made from lightweight materials such as perlite, wood, and mineral wool, typically used for wall and ceiling applications. - https://en.wikipedia.org/wiki/Tile - - - - - - - - - - tiled building roof - - - - - - - - A tile building roof is a building roof that is built using tiles. - ORCID:0000-0002-4366-3088 - tile building roof - tile roof - tiled roof - - - - - - - - toilet fixture - - "disposal" may not be the most precise way to describe fill-in latrines. Note that no assertion is made on whether these fixtures are in- or outdoors. - A fixture which is used primarily for the collection and, in some cases, disposal of human urine and feces. - ORCID:0000-0002-4366-3088 - toilet - - - A fixture which is used primarily for the collection and, in some cases, disposal of human urine and feces. - https://en.wikipedia.org/wiki/Toilet - - - - - - - - - - pit latrine - - - - - - - - A pit latrine is a latrine which is constructed by digging a hole in the ground. - ORCID:0000-0002-4366-3088 - This class refers to human latrines. Note that some pit latrines can use pour-flush mechanisms. "Infectious diarrhea resulted in about 0.7 million deaths in children under five years old in 2011 and 250 million lost school days.[4][5] Pit latrines are the lowest cost method of separating feces from people.[3]" - https://en.wikipedia.org/wiki/Pit_latrine - pit toilet - - - A pit latrine is a latrine which is constructed by digging a hole in the ground. - https://en.wikipedia.org/wiki/Pit_latrine - - - - - - - - - - diapir - - Unclear whether this should be a subclass of intrusion, as diapirism can actually cause fracturing. - A diapir is a type of geologic intrusion in which a more mobile and ductily deformable material is forced into brittle overlying rocks due to its higher buoyancy. - - - - - - - - latrine - - A latrine is a toilet which is of simple construction (relative to a flush or chemical toilet) and typically intended for communal use. - ORCID:0000-0002-4366-3088 - This class refers to human latrines. - - - A latrine is a toilet which is of simple construction (relative to a flush or chemical toilet) and typically intended for communal use. - https://en.wikipedia.org/wiki/Latrine - - - - - - - - - - latrine slab - - - - - - - - A latrine slab is a broad, flat, thick piece of solid material (typically stone or concrete) used as the floor of a latrine and which includes a hole through which excreta are deposited into a latrine pit. - ORCID:0000-0002-4366-3088 - This could be moved to "surface layer" like other floors, although more thought has to be given to "floor": a role of a surface layer? -"The hole in the slab should not be larger than 25 centimeters (9.8 inches) to prevent children falling in." https://en.wikipedia.org/wiki/Pit_latrine - - - A latrine slab is a broad, flat, thick piece of solid material (typically stone or concrete) used as the floor of a latrine and which includes a hole through which excreta are deposited into a latrine pit. - https://en.wikipedia.org/wiki/Pit_latrine - - - - - - - - - - batholith - - - - - - - - - - - - - - - - - - - - - The form of erosion should be further specified. - A batholith is an area of mostly continuous plutonic (igneous intrusive) rock that covers an area larger than 100 square kilometers, formed in the planetary crust, and exposed by erosion. On Earth, Batholiths are almost always made mostly of felsic or intermediate rock-types, such as granite, quartz monzonite, or diorite. - - - https://en.wikipedia.org/wiki/Batholith - A batholith is an area of mostly continuous plutonic (igneous intrusive) rock that covers an area larger than 100 square kilometers, formed in the planetary crust, and exposed by erosion. On Earth, Batholiths are almost always made mostly of felsic or intermediate rock-types, such as granite, quartz monzonite, or diorite. - - - - - - - - - - latrine pit - - - - - - - - - A latrine pit is an artificial hole or cavity in the ground used to collect human excreta. - A latrine pit is typically at least 3 metres (10 feet) deep and 1 metre (3.2 feet) across. - ORCID:0000-0002-4366-3088 - - - A latrine pit is an artificial hole or cavity in the ground used to collect human excreta. - https://en.wikipedia.org/wiki/Pit_latrine - - - - - - - - - - pit latrine with slab floor - - - - - - - - A pit latrine with a slab floor is a pit latrine which has a latrine slab as a floor. - ORCID:0000-0002-4366-3088 - This class refers to human latrines. "Infectious diarrhea resulted in about 0.7 million deaths in children under five years old in 2011 and 250 million lost school days.[4][5] Pit latrines are the lowest cost method of separating feces from people.[3]" - https://en.wikipedia.org/wiki/Pit_latrine - pit toilet - - - A pit latrine with a slab floor is a pit latrine which has a latrine slab as a floor. - https://en.wikipedia.org/wiki/Pit_latrine - - - - - - - - - - outhouse - - "Outside North America, the term "outhouse" refers not to a toilet but to outbuildings in a general sense." - An outhouse is a small structure, separate from a main building, which covers a pit latrine or a dry toilet. - ORCID:0000-0002-4366-3088 - dunny - earth closet - latrine covering - latrine shelter - privy - - - An outhouse is a small structure, separate from a main building, which covers a pit latrine or a dry toilet. - https://en.wikipedia.org/wiki/Outhouse - - - - - "Outside North America, the term "outhouse" refers not to a toilet but to outbuildings in a general sense." - https://en.wikipedia.org/wiki/Outhouse - - - - - - - - - - intrusion - - - - - - - - - - - - - - An intrusion is a mass of rock which has been formed within a pre-existing fracture in a larger mass of rock. While some intrusions are still located in the fracture where they formed, others may be (partially) exposed by erosional processes. - - - - - - - - sedimentary intrusion - - - - - - - - - - - - - - - - - - - Subclasses of this class will be created by inference. - - - - - - - - flush toilet fixture - - A toilet fixture which uses water to flush liquid and solid excreta into a sewage containment or processing facility through a drainpipe. - ORCID:0000-0002-4366-3088 - bog - comfort room - dunny - flush toilet - head - john - lavatory - loo - pot - the heads - toilet - water closet - - - A toilet fixture which uses water to flush liquid and solid excreta into a sewage containment or processing facility through a drainpipe. - https://en.wikipedia.org/wiki/Toilet - - - - - - - - - - dry toilet fixture - - A toilet fixture which uses little to no water; excreta is removed manually or composted in situ. - ORCID:0000-0002-4366-3088 - Subclasses will probably be filled in by inference. - dry toilet - - - A toilet fixture which uses little to no water; excreta is removed manually or composted in situ. - https://en.wikipedia.org/wiki/Toilet - - - - - - - - - - chemical toilet fixture - - "In the past, disinfection was generally carried out by mixing formaldehyde, bleach or similar chemicals with the toilet water when flushed...[F]ormaldehyde is very irritating to the eyes, ears, skin, nose, and throat, it is being replaced by other proprietary blends such as glutaraldehyde and quaternary ammonium compounds, with non-staining dyes and nature-identical perfume oils. Additionally, enzyme hybrids are sometimes used." https://en.wikipedia.org/wiki/Chemical_toilet - A chemical toilet fixture is a toilet fixture which uses chemicals to deodorise and treat excreta which is stored in the fixture. - ORCID:0000-0002-4366-3088 - chemical toilet - - - A chemical toilet fixture is a toilet fixture which uses chemicals to deodorise and treat excreta which is stored in the fixture. - https://en.wikipedia.org/wiki/Chemical_toilet - - - - - - - - - - ventilated improved pit latrine - - - - - - - - A ventilated improved pit latrine is a pit latrine which includes a vent pipe fitted to the pit with a flyscreen covering the pipe's outlet. Air currents moving across the outlet of the vent pipe create a vaccum which draws odors out of the latrine's superstructure. - ORCID:0000-0002-4366-3088 - VIP latrine - ventilated pit latrine - - - A ventilated improved pit latrine is a pit latrine which includes a vent pipe fitted to the pit with a flyscreen covering the pipe's outlet. Air currents moving across the outlet of the vent pipe create a vaccum which draws odors out of the latrine's superstructure. - https://en.wikipedia.org/wiki/Pit_latrine - - - - - - - - - - covered latrine - - - - - - - - - - - - - - - - A covered latrine is a building which comprises a latrine sheltered by an outhouse. - ORCID:0000-0002-4366-3088 - - - A covered latrine is a building which comprises a latrine sheltered by an outhouse. - https://en.wikipedia.org/wiki/Latrine - - - - - - - - - - covered pit latrine - - - - - - - - A covered pit latrine is a building which comprises a pit latrine sheltered by an outhouse. - ORCID:0000-0002-4366-3088 - - - A covered pit latrine is a building which comprises a pit latrine sheltered by an outhouse. - https://en.wikipedia.org/wiki/Latrine - - - - - - - - - - covered pit latrine with slab floor - - - - - - - - A covered pit latrine with slab is a building which comprises a pit latrine with a slab floor sheltered by an outhouse. - ORCID:0000-0002-4366-3088 - - - A covered pit latrine with slab is a building which comprises a pit latrine with a slab floor sheltered by an outhouse. - https://en.wikipedia.org/wiki/Latrine - - - - - - - - - - pour-flush toilet fixture - - A flush toilet fixture into which water is manually poured to dispose of excreta. - ORCID:0000-0002-4366-3088 - bog - comfort room - dunny - flush toilet - head - john - lavatory - loo - pot - pour flush toilet fixture - the heads - toilet - water closet - - - A flush toilet fixture into which water is manually poured to dispose of excreta. - https://en.wikipedia.org/wiki/Toilet - - - - - - - - - - pour-flush pit latrine - - A pit latrine which includes a water seal (U-trap or siphon) used over one or two offset pits instead of a plain hole or seat. Water is manually poured through the trap to flush excreta into the latrine pit. - ORCID:0000-0002-4366-3088 - bog - dunny - head - pour-flush toilet fixture - toilet - - - A pit latrine which includes a water seal (U-trap or siphon) used over one or two offset pits instead of a plain hole or seat. Water is manually poured through the trap to flush excreta into the latrine pit. - https://en.wikipedia.org/wiki/Pit_latrine - - - - - - - - - - factory - - - - - - - - ORCID:0000-0002-4366-3088 - A factory (previously manufactory) or manufacturing plant is an industrial site, usually consisting of buildings and machinery, or more commonly a complex having several buildings, where workers manufacture goods or operate machines processing one product into another. - - - https://en.wikipedia.org/wiki/Factory - A factory (previously manufactory) or manufacturing plant is an industrial site, usually consisting of buildings and machinery, or more commonly a complex having several buildings, where workers manufacture goods or operate machines processing one product into another. - - - - - - - - - - atmospheric ozone - - - - - - - - - - - - - - - - - - - - atmospheric ozone - Atmospheric ozone is an environmental material primarily composed of ozone in its gaseous form and present in the atmosphere. - ORCID:0000-0002-4366-3088 - - - http://www.eionet.europa.eu/gemet/concept/632 - atmospheric ozone - - - - - - - - - - stratosphere - - - - - - - - - - - - - - - - - - - - - - - - ORCID:0000-0002-4366-3088 - Definition from GEMET - will be refined. - The layer of the atmosphere which is sandwiched between the troposphere and mesosphere. Of the energy that reaches the Earth from the sun, only 3% is absorbed in the stratosphere, but that includes the vitally important process of absorption of ultraviolet radiation by the stratospheric ozone layer. The stratosphere is cloudless and dust free, and almost unaffected by the turbulent conditions of the underlying level of the atmosphere. (Source: WRIGHT) - - - The layer of the atmosphere which is sandwiched between the troposphere and mesosphere. Of the energy that reaches the Earth from the sun, only 3% is absorbed in the stratosphere, but that includes the vitally important process of absorption of ultraviolet radiation by the stratospheric ozone layer. The stratosphere is cloudless and dust free, and almost unaffected by the turbulent conditions of the underlying level of the atmosphere. (Source: WRIGHT) - GEMET:http://www.eionet.europa.eu/gemet/concept/8128 - - - - - - - - - - mesosphere - - - - - - - - - - - - - - - - - - - - - - - - ORCID:0000-0002-4366-3088 - The mesosphere is part of the earth's atmosphere which is between the stratosphere and the thermosphere in which temperature decreases with altitude to the atmosphere's absolute minimum - - - The mesosphere is part of the earth's atmosphere which is between the stratosphere and the thermosphere in which temperature decreases with altitude to the atmosphere's absolute minimum - http://www.merriam-webster.com/dictionary/mesosphere - - - - - - - - - - troposphere - - - - - - - - - - - - - - - - - - - - - - - - ORCID:0000-0002-4366-3088 - Definition from GEMET - will be refined. - The lowest of the concentric layers of the atmosphere, occurring between the Earth's surface and the tropopause. It is the zone where atmospheric turbulence is at its greatest and where the bulk of the Earth's weather is generated. It contains almost all the water vapour and aerosols and three-quarters of the total gaseous mass of the atmosphere. Throughout the troposphere temperature decreases with height at a mean rate of 6.5°C/km and the whole zone is capped by either an inversion of temperature or an isothermal layer at the tropopause. (Source: WHIT) - - - The lowest of the concentric layers of the atmosphere, occurring between the Earth's surface and the tropopause. It is the zone where atmospheric turbulence is at its greatest and where the bulk of the Earth's weather is generated. It contains almost all the water vapour and aerosols and three-quarters of the total gaseous mass of the atmosphere. Throughout the troposphere temperature decreases with height at a mean rate of 6.5°C/km and the whole zone is capped by either an inversion of temperature or an isothermal layer at the tropopause. (Source: WHIT) - GEMET:http://www.eionet.europa.eu/gemet/concept/8695 - - - - - - - - - - thermosphere - - - - - - - - - - - - - - - - The thermosphere is a part of the earth's atmosphere that begins at about 50 miles (80 kilometers) above the earth's surface, extends to outer space, and is characterized by steadily increasing temperature with height - - - http://www.merriam-webster.com/dictionary/thermosphere - The thermosphere is a part of the earth's atmosphere that begins at about 50 miles (80 kilometers) above the earth's surface, extends to outer space, and is characterized by steadily increasing temperature with height - - - - - - - - - - ozone layer - - - - - - - - - - - - - - "The ozone layer contains less than 10 parts per million of ozone, while the average ozone concentration in Earth's atmosphere as a whole is only about 0.3 parts per million. The ozone layer is mainly found in the lower portion of the stratosphere, from approximately 20 to 30 kilometres (12 to 19 mi) above Earth, though the thickness varies seasonally and geographically"- https://en.wikipedia.org/wiki/Ozone_layer - The ozone layer is a layer of gases in the stratosphere which contains high concentrations of ozone gas relative to other parts of the atmosphere. - ozone shield - ozone layer - - - ozone layer - http://www.eionet.europa.eu/gemet/concept/5993 - - - - - The ozone layer is a layer of gases in the stratosphere which contains high concentrations of ozone gas relative to other parts of the atmosphere. - https://en.wikipedia.org/wiki/Ozone_layer - - - - - ozone shield - https://en.wikipedia.org/wiki/Ozone_layer - - - - - - - - - - atmospheric layer - - - - - - - - atmospheric layering - This could be made into an inferred class, rather than having asserted subclasses. - ORCID:0000-0002-4366-3088 - A layer that is part of the atmosphere. - envoPolar - - - atmospheric layering - GEMET:http://www.eionet.europa.eu/gemet/concept/627 - - - - - - - - - - boundary layer - - boundary layer - A boundary layer is a layer of fluid in the immediate vicinity of a bounding surface where the effects of viscosity are significant enough to distort the surrounding non-viscous flow. - ORCID:0000-0002-4366-3088 - - - A boundary layer is a layer of fluid in the immediate vicinity of a bounding surface where the effects of viscosity are significant enough to distort the surrounding non-viscous flow. - https://en.wikipedia.org/wiki/Boundary_layer - - - - - boundary layer - http://www.eionet.europa.eu/gemet/concept/976 - - - - - - - - - - ionosphere - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ORCID:0000-0002-4366-3088 - The ionosphere is a layer of the Earth's atmosphere which extends from about 60 to 1,000 kilometers above the planetary surface and is ionised by solar radiation. It includes the thermosphere and parts of the mesosphere and exosphere. - ionosphere - - - The ionosphere is a layer of the Earth's atmosphere which extends from about 60 to 1,000 kilometers above the planetary surface and is ionised by solar radiation. It includes the thermosphere and parts of the mesosphere and exosphere. - https://en.wikipedia.org/wiki/Ionosphere - - - - - ionosphere - GEMET:http://www.eionet.europa.eu/gemet/concept/4492 - - - - - - - - - - exosphere - - - - - - - - The exosphere is an atmospheric layer where molecules are gravitationally bound to a planetary body, but where their density is too low for them to behave as a gas by colliding with each other. In the case of bodies with substantial atmospheres, such as Earth's atmosphere, the exosphere is the uppermost layer, where the atmosphere thins out and merges with interplanetary space. It is located directly above the thermosphere. - ORCID:0000-0002-4366-3088 - - - The exosphere is an atmospheric layer where molecules are gravitationally bound to a planetary body, but where their density is too low for them to behave as a gas by colliding with each other. In the case of bodies with substantial atmospheres, such as Earth's atmosphere, the exosphere is the uppermost layer, where the atmosphere thins out and merges with interplanetary space. It is located directly above the thermosphere. - https://en.wikipedia.org/wiki/Exosphere - - - - - - - - - - glaze ice layer - - - - - - - - - - ORCID:0000-0002-4366-3088 - glaze ice - glaze - glaze - A glaze ice layer is a smooth, transparent and homogeneous ice layer which coats some surface and which is formed when freezing rain or drizzle hits that surface. - - - https://en.wikipedia.org/wiki/Glaze_ice - A glaze ice layer is a smooth, transparent and homogeneous ice layer which coats some surface and which is formed when freezing rain or drizzle hits that surface. - - - - - glaze ice - http://www.eionet.europa.eu/gemet/concept/12091 - - - - - - - - - - eutrophic lake - - - - - - - - - - - - - - - - - - - A lake which has nutrient-rich water. - ORCID:0000-0002-4366-3088 - - - - - - - - mass of biological material - - - - - - - - - composting toilet - - A composting toilet fixture is a dry toilet fixture in which managed, aerobic decomposition converts human excreta into organic matter suitable for the fertilisation or amendment of soils. - - - https://en.wikipedia.org/wiki/Composting_toilet - A composting toilet fixture is a dry toilet fixture in which managed, aerobic decomposition converts human excreta into organic matter suitable for the fertilisation or amendment of soils. - - - - - - - - - - paraffin - - - - - - - - - - - - - - - kerosene - Paraffin is a thin, clear liquid composed of hydrocarbons that typically contain between 6 and 16 carbon atoms per molecule. Paraffin is obtained from the fractional distillation of petroleum between 150 and 275 degrees Celsius, resulting in a mixture with a density of 0.78–0.81 grams per cubic centimetre. It is miscible in petroleum solvents but immiscible in water. Regardless of crude oil source or processing history, kerosene's major components are branched and straight chain alkanes and naphthenes (cycloalkanes), which normally account for at least 70% by volume. Aromatic hydrocarbons in this boiling range, such as alkylbenzenes (single ring) and alkylnaphthalenes (double ring), do not normally exceed 25% by volume of kerosene streams. Olefins are usually not present at more than 5% by volume. - kerosine - - - Paraffin is a thin, clear liquid composed of hydrocarbons that typically contain between 6 and 16 carbon atoms per molecule. Paraffin is obtained from the fractional distillation of petroleum between 150 and 275 degrees Celsius, resulting in a mixture with a density of 0.78–0.81 grams per cubic centimetre. It is miscible in petroleum solvents but immiscible in water. Regardless of crude oil source or processing history, kerosene's major components are branched and straight chain alkanes and naphthenes (cycloalkanes), which normally account for at least 70% by volume. Aromatic hydrocarbons in this boiling range, such as alkylbenzenes (single ring) and alkylnaphthalenes (double ring), do not normally exceed 25% by volume of kerosene streams. Olefins are usually not present at more than 5% by volume. - https://en.wikipedia.org/wiki/Kerosene - - - - - - - - - - natural gas - - - - - - - - Natural gas is a hydrocarbon gas mixture consisting primarily of methane, but commonly includes varying amounts of other higher alkanes and sometimes a usually lesser percentage of carbon dioxide, nitrogen, and/or hydrogen sulfide. Natural gas is a fossil fuel formed when layers of buried plants and gases are exposed to intense heat and pressure over thousands of years. - - - Natural gas is a hydrocarbon gas mixture consisting primarily of methane, but commonly includes varying amounts of other higher alkanes and sometimes a usually lesser percentage of carbon dioxide, nitrogen, and/or hydrogen sulfide. Natural gas is a fossil fuel formed when layers of buried plants and gases are exposed to intense heat and pressure over thousands of years. - https://en.wikipedia.org/wiki/Natural_gas - - - - - - - - - - liquefied petroleum gas - - liquid petroleum gas - Liquified petroleum gas or liquid petroleum gas (LPG or LP gas), also referred to as simply propane or butane, are flammable mixtures of hydrocarbon gases used as fuel in heating appliances, cooking equipment, and vehicles. - LPG - LP gas - liquified natural gas - - - https://en.wikipedia.org/wiki/Liquefied_petroleum_gas - Liquified petroleum gas or liquid petroleum gas (LPG or LP gas), also referred to as simply propane or butane, are flammable mixtures of hydrocarbon gases used as fuel in heating appliances, cooking equipment, and vehicles. - - - - - - - - - - hydrocarbon gas - - - - - - - - - - - - - - A gas that is primarily composed of hydrocarbon molecules. - envoPolar - - - - - - - - compressed natural gas - - - - - - - - Compressed natural gas is a natural gas stored at high pressures, typically 20–25 Megapascals. - - - https://en.wikipedia.org/wiki/Compressed_natural_gas - Compressed natural gas is a natural gas stored at high pressures, typically 20–25 Megapascals. - - - - - - - - - - biogas - - - - - - - - - - - - - - - This is distinct from natural gas which is a fossil fuel product. - Biogas is a mixture of different gases produced by the breakdown of organic matter in the absence of oxygen, is primarily composed of methane and carbon dioxide, and may have small amounts of hydrogen sulfide, water, and siloxanes. - - - https://en.wikipedia.org/wiki/ - Biogas is a mixture of different gases produced by the breakdown of organic matter in the absence of oxygen, is primarily composed of methane and carbon dioxide, and may have small amounts of hydrogen sulfide, water, and siloxanes. - - - - - - - - - - liquefied natural gas - - Liquefied natural gas (LNG) is natural gas (predominantly methane, CH4) that has been converted to liquid form for ease of storage or transport. It takes up about 1/600th the volume of natural gas in the gaseous state. It is odorless, colorless, non-toxic and non-corrosive. LNG achieves a higher reduction in volume than compressed natural gas (CNG) so that the (volumetric) energy density of LNG is 2.4 times greater than that of CNG or 60 percent of that of diesel fuel. - liquified natural gas - LNG - - - https://en.wikipedia.org/wiki/Liquefied_natural_gas - Liquefied natural gas (LNG) is natural gas (predominantly methane, CH4) that has been converted to liquid form for ease of storage or transport. It takes up about 1/600th the volume of natural gas in the gaseous state. It is odorless, colorless, non-toxic and non-corrosive. LNG achieves a higher reduction in volume than compressed natural gas (CNG) so that the (volumetric) energy density of LNG is 2.4 times greater than that of CNG or 60 percent of that of diesel fuel. - - - - - - - - - - liquefied hydrocarbon gas - - - - - - - - - - - - - - - - - - - - - - - - - - envoPolar - - - - - - - - compressed biogas - - - - - - - - Compressed biogas is biogas stored at increased pressures. - This is distinct from compressed natural gas, which refers to the compressed form of a fossil fuel. - - - - - - - - charcoal - - - - - - - - - Charcoal is a light, black residue, consisting of carbon and any remaining ash, obtained by removing water and other volatile constituents from animal and vegetation substances. Charcoal is usually produced by slow pyrolysis, the heating of wood or other substances in the absence of oxygen. - - - https://en.wikipedia.org/wiki/Charcoal - Charcoal is a light, black residue, consisting of carbon and any remaining ash, obtained by removing water and other volatile constituents from animal and vegetation substances. Charcoal is usually produced by slow pyrolysis, the heating of wood or other substances in the absence of oxygen. - - - - - - - - - - paraffin lamp - - A paraffin lamp is a type of lighting device which burns paraffin to generate light and heat. - kerosene lamp - - - https://en.wikipedia.org/wiki/Kerosene_lantern - A paraffin lamp is a type of lighting device which burns paraffin to generate light and heat. - - - - - - - - - - flat-wick lamp - - flat wick lamp - A flat-wick lamp is a simple type of paraffin lamp, which burns paraffin drawn up through a wick by capillary action. - - - A flat-wick lamp is a simple type of paraffin lamp, which burns paraffin drawn up through a wick by capillary action. - https://en.wikipedia.org/wiki/Kerosene_lantern - - - - - - - - - - central-draught lamp - - A central-draught lamp is a paraffin lamp which burns a parrafin saturated, tubular wick contained between two structural tubes and supplied with oxygen by a central draught of air through the innermost of these tube. - central draught lamp - tubular round wick lamp - Argand lamp - - - A central-draught lamp is a paraffin lamp which burns a parrafin saturated, tubular wick contained between two structural tubes and supplied with oxygen by a central draught of air through the innermost of these tube. - https://en.wikipedia.org/wiki/Kerosene_lantern - - - - - - - - - - mantle lamp - - A mantle lamp is a central-draught lamp which includes a pear-shaped, fabric mesh containing thorium or other rare-earth salts placed over the burner. On first use the fabric burns away and the rare-earth salts are converted to oxides, leaving a very fragile structure which incandesces (glows brightly) upon exposure to the heat of the burner flame. - - - A mantle lamp is a central-draught lamp which includes a pear-shaped, fabric mesh containing thorium or other rare-earth salts placed over the burner. On first use the fabric burns away and the rare-earth salts are converted to oxides, leaving a very fragile structure which incandesces (glows brightly) upon exposure to the heat of the burner flame. - https://en.wikipedia.org/wiki/Kerosene_lantern - - - - - - - - - - lantern - - - - - - - - A lantern is a portable device or mounted fixture comprising a light source protected by a translucent case. - - - https://en.wikipedia.org/wiki/Lantern - A lantern is a portable device or mounted fixture comprising a light source protected by a translucent case. - - - - - - - - - - lamp - - A lamp is an object which generates heat, light, or any other form of radiation. - - - A lamp is an object which generates heat, light, or any other form of radiation. - https://en.wikipedia.org/wiki/Lamp - - - - - - - - - - paraffin lantern - - - - - - - - A paraffin lantern is a lantern which houses a parrafin lamp in a structure of soldered or crimped-together sheet metal stampings and glass or other translucent material. - kerosene lantern - barn lantern - hurricane lantern - - - https://en.wikipedia.org/wiki/Kerosene_lantern - A paraffin lantern is a lantern which houses a parrafin lamp in a structure of soldered or crimped-together sheet metal stampings and glass or other translucent material. - - - - - - - - - - tubular paraffin lantern - - A tubular paraffin lantern is a paraffin lantern which includes metal tubes in its casing that direct air to the burning wick. - - - A tubular paraffin lantern is a paraffin lantern which includes metal tubes in its casing that direct air to the burning wick. - https://en.wikipedia.org/wiki/Kerosene_lantern - - - - - - - - - - dead flame paraffin lantern - - A dead-flame paraffin lantern is a paraffin lantern which has a wick housed in a glass globe with airflow channelled upwards by vents below the burning wick and an open chimney above it. - glass globe lantern - - - A dead-flame paraffin lantern is a paraffin lantern which has a wick housed in a glass globe with airflow channelled upwards by vents below the burning wick and an open chimney above it. - https://en.wikipedia.org/wiki/Kerosene_lantern - - - - - - - - - - hot-blast paraffin lantern - - A hot-blast paraffin lantern is a tubular paraffin lantern which collects hot air from the top of the lantern globe and circulates it, through metal tubes, to the burning wick. - - - A hot-blast paraffin lantern is a tubular paraffin lantern which collects hot air from the top of the lantern globe and circulates it, through metal tubes, to the burning wick. - https://en.wikipedia.org/wiki/Kerosene_lantern - - - - - - - - - - cold-blast paraffin lantern - - A cold-blast paraffin lantern is a tubular paraffin lantern which collects cool air from around the top of the lantern globe and circulates it, through metal tubes, to the burning wick. - - - A cold-blast paraffin lantern is a tubular paraffin lantern which collects cool air from around the top of the lantern globe and circulates it, through metal tubes, to the burning wick. - https://en.wikipedia.org/wiki/Kerosene_lantern - - - - - - - - - - electric lamp - - An electric lamp is a lamp which produces light from electricity. - - - - - - - - battery-powered electric lamp - - A battery-powered electric lamp is an electric lamp which draws its power from a device composed of two or more electrochemical cells that convert stored chemical energy into electrical energy. - - - https://en.wikipedia.org/wiki/Lamp_(electrical_component) - A battery-powered electric lamp is an electric lamp which draws its power from a device composed of two or more electrochemical cells that convert stored chemical energy into electrical energy. - https://en.wikipedia.org/wiki/Battery_(electricity) - - - - - - - - - - candle - - - - - - - - A candle is a lamp composed of a wax within which an ignitable wick is embedded. - - - - - - - - wax - - A wax is an environmental material which is primarily composed of lipids or other organic compounds that consist of long alkyl chains. Waxes are are malleable near ambient temperatures and melt at approximately 45 degrees Celsius. - - - https://en.wikipedia.org/wiki/Wax - A wax is an environmental material which is primarily composed of lipids or other organic compounds that consist of long alkyl chains. Waxes are are malleable near ambient temperatures and melt at approximately 45 degrees Celsius. - - - - - - - - - - apiary - - An apiary is a place where beehives of honey bees are kept and maintained by beekeepers. - - - An apiary is a place where beehives of honey bees are kept and maintained by beekeepers. - https://en.wikipedia.org/wiki/Apiary - - - - - - - - - - radio device - - radio receiver - radio - A device capable of receiving and/or transmitting information encoded in electromagnetic radiation through wave modulation. - radio transmitter - - - https://en.wikipedia.org/wiki/Radio - A device capable of receiving and/or transmitting information encoded in electromagnetic radiation through wave modulation. - - - - - - - - - - cassette player - - A cassette deck is a device capable of playing and recording audio compact cassettes. - cassette deck - cassette recorder - - - https://en.wikipedia.org/wiki/Compact_Cassette - A cassette deck is a device capable of playing and recording audio compact cassettes. - - - - - - - - - - television set - - television - telly - A television set is a device that combines a tuner, display, and loudspeakers for the purpose of converting digital or analog information signals into moving images and sound. - TV - tube - - - https://en.wikipedia.org/wiki/Television_set - A television set is a device that combines a tuner, display, and loudspeakers for the purpose of converting digital or analog information signals into moving images and sound. - - - - - - - - - - telephone - - A telephone is a telecommunications device which converts sound into electronic signals suitable for transmission via cables or other transmission media, and reconverts such signals into sound waves. - phone - - - https://en.wikipedia.org/wiki/Telephone - A telephone is a telecommunications device which converts sound into electronic signals suitable for transmission via cables or other transmission media, and reconverts such signals into sound waves. - - - - - - - - - - mobile phone - - cellular phone - A mobile phone is a telephone which transmits sound information to a mobile phone network via radio transmissions. - cell phone - hand phone - - - https://en.wikipedia.org/wiki/Telephone - A mobile phone is a telephone which transmits sound information to a mobile phone network via radio transmissions. - - - - - - - - - - landline telephone - - A landline telephone is a telephone which is connected to a telephone network with wires through which electronic signals are carried. - - - https://en.wikipedia.org/wiki/Telephone - A landline telephone is a telephone which is connected to a telephone network with wires through which electronic signals are carried. - - - - - - - - - - refrigerator - - - - - - - - - - - - - A refrigerator is a device which consists of a thermally insulated compartment and a mechanical, chemical, or electronic heat pump that transfers heat from the inside of the fridge to its external environment such that the inside of the fridge is cooled to a temperature below the ambient temperature of the room - fridge - - - https://en.wikipedia.org/wiki/Refrigerator - A refrigerator is a device which consists of a thermally insulated compartment and a mechanical, chemical, or electronic heat pump that transfers heat from the inside of the fridge to its external environment such that the inside of the fridge is cooled to a temperature below the ambient temperature of the room - - - - - - - - - - table - - A table is a form of furniture with a flat horizontal upper surface used to support objects, for storage, show, and/or manipulation. - - - A table is a form of furniture with a flat horizontal upper surface used to support objects, for storage, show, and/or manipulation. - https://en.wikipedia.org/wiki/Table_(furniture) - - - - - - - - - - desk - - The intentional nature of this definition is problematic, but the restricted range of activities visited upon a desk is of interest. - A desk is a table which is intended for information-manipulation tasks, including writing and use of interactive electronics. - - - https://en.wikipedia.org/wiki/Table_(furniture) - A desk is a table which is intended for information-manipulation tasks, including writing and use of interactive electronics. - - - - - - - - - - chair - - A chair is a piece of furniture with a raised surface commonly used to seat a single person. - This class, along with benches, stools, and the like, can be grouped under "seating furniture" or similar. However, this is probably better as an inferred class using some sort of BFO:function in the subclass annotation. - - - - - - - - piece of furniture - - The assumption is that furniture is manufactured, which is arguable. Further, according to Black's Law Dictionary (http://thelawdictionary.org/furniture/) many classes can be subclasses of 'piece of furntiure': "This term includes that which furnishes, or with which anything is furnished or supplied; whatever must be supplied to a house, a room, or the like, to make it habitable, convenient, or agreeable; goods, vessels, utensils, and other appendages necessary or convenient for housekeeping; whatever is added to the interior of a house or apartment, for use or convenience. Bell v. Holding, 27 Ind. 173.The term “furnitureâ€� embraces everything about the house that has been usually enjoyed there, including plate, linen, china, and pictures. 1 Endicott v. Endicott, 41N. J. Eq. 96, 3 Atl. 157.The word “furnitureâ€� made use of in the disposition of the law. or in the conventions or acts of persons, comprehends only such furniture as is intended for use and ornament of apartments, but not libraries which happen to be there, nor plate. Civ.Code La. art. 477." However, this would eventually be absurd and limit other groupings. Perhaps some sort of 'furnishing' BFO:function would be a better way to handle this. - A piece of furniture is a movable object intended to support various human activities such as seating (e.g., chairs, stools and sofas) and sleeping (e.g., beds). - - - A piece of furniture is a movable object intended to support various human activities such as seating (e.g., chairs, stools and sofas) and sleeping (e.g., beds). - https://en.wikipedia.org/wiki/Furniture - - - - - - - - - - sofa - - couch - settee - A sofa is a bench which is partially or entirely upholstered, and often fitted with springs and tailored cushions. - - - https://en.wikipedia.org/wiki/Couch - A sofa is a bench which is partially or entirely upholstered, and often fitted with springs and tailored cushions. - - - - - - - - - - bench - - A bench is a piece of furniture, on which several people may sit at the same time. - - - A bench is a piece of furniture, on which several people may sit at the same time. - https://en.wikipedia.org/wiki/Bench - - - - - - - - - - mattress - - A mattress is a mass of material which is able to cushion and support a reclining body and is used as or on a bed. - - - A mattress is a mass of material which is able to cushion and support a reclining body and is used as or on a bed. - https://en.wikipedia.org/wiki/Mattress - - - - - - - - - - bed frame - - A bed frame is a piece of furniture which is used to position a mattress and bed base and may include a means of supporting a canopy. - bedstead - - - https://en.wikipedia.org/wiki/Bed_frame - A bed frame is a piece of furniture which is used to position a mattress and bed base and may include a means of supporting a canopy. - - - - - - - - - - bed base - - A bed base is a piece of furniture which supports a mattress. - bed foundation - - - - - - - - framed bed - - - - - - - - - - - - - - - - A framed bed is a piece of furniture which is composed of a mattress supported by a bed base and held in place by a bed frame. - - - A framed bed is a piece of furniture which is composed of a mattress supported by a bed base and held in place by a bed frame. - https://en.wikipedia.org/wiki/Bed - - - - - - - - - - cabinet - - A cabinet is a roughly cuboidal piece of furniture which is used to store miscellaneous items in compartments accessible through doors or drawers. - - - https://en.wikipedia.org/wiki/Cabinetry - A cabinet is a roughly cuboidal piece of furniture which is used to store miscellaneous items in compartments accessible through doors or drawers. - - - - - - - - - - cupboard - - closet - A cupboard is a cabinet which is used indoors to store household objects such as food, crockery, textiles and liquor, and to protect them from dust and dirt - - - A cupboard is a cabinet which is used indoors to store household objects such as food, crockery, textiles and liquor, and to protect them from dust and dirt - https://en.wikipedia.org/wiki/Cupboard - - - - - - - - - - clock - - A clock is an instrument which may indicate, keep, and/or co-ordinate time. - timepiece - - - https://en.wikipedia.org/wiki/Clock - A clock is an instrument which may indicate, keep, and/or co-ordinate time. - - - - - - - - - - pressure lamp - - A pressure lamp is a portable paraffin or oil lamp in which fuel is forced up into the mantle or burner by air pressure in the reservoir, which can be increased by pumping with a plunger. - This may be a paraffin or an oil lamp. It can potentially be filled by inference if we can express that any lamp with pressurised fuel in the lamp reservoir is a pressure lamp. See Issue #228. - - - - - - - - freshwater spring - - A spring which emits fresh water. - - - - - - - - river water - - - - - - - - - - - - - - - rainwater - - - - - - - - Rainwater is liquid water which has precipitated in the form of droplets through the condensation of atmospheric water vapour. - - - Rainwater is liquid water which has precipitated in the form of droplets through the condensation of atmospheric water vapour. - https://en.wikipedia.org/wiki/Rain - - - - - - - - - - motor vehicle - - - - - - - - - - - - - - - - - - - A motor vehicle is a vehicle which is propelled by an engine or motor and that does not operate on rails. - Subclasses will be added by inference. - - - https://en.wikipedia.org/wiki/Motor_vehicle - A motor vehicle is a vehicle which is propelled by an engine or motor and that does not operate on rails. - - - - - - - - - - truck - - - - - - - - lorry - A truck is a motor vehicle which, as its primary funcion, transports cargo rather than human passangers. - - - A truck is a motor vehicle which, as its primary funcion, transports cargo rather than human passangers. - https://en.wikipedia.org/wiki/Truck - - - - - - - - - - water truck - - A water truck is a truck which transports water. - - - - - - - - vehicle - - A vehicle is a mobile machine which transports people or cargo. - - - A vehicle is a mobile machine which transports people or cargo. - https://en.wikipedia.org/wiki/Vehicle - - - - - - - - - - car - - - - - - - - A car is a wheeled motor vehicle used primarily for the transportation of human passengers. Most definitions of the term specify that cars are designed to run primarily on roads, to have seating for one to eight people, to typically have four wheels, and to be constructed principally for the transport of people rather than goods. - - - https://en.wikipedia.org/wiki/Car - A car is a wheeled motor vehicle used primarily for the transportation of human passengers. Most definitions of the term specify that cars are designed to run primarily on roads, to have seating for one to eight people, to typically have four wheels, and to be constructed principally for the transport of people rather than goods. - - - - - - - - - - cart - - A cart is a vehicle which has two wheels and is designed to transport human passengers or cargo. - NB: "[A cart]...is different from a dray or wagon, which is a heavy transport vehicle with four wheels and typically two or more horses, or a carriage, which is used exclusively for transporting humans...Over time, the term "cart" has come to mean nearly any small conveyance, from shopping carts to golf carts, without regard to number of wheels, load carried, or means of propulsion." https://en.wikipedia.org/wiki/Cart - - - https://en.wikipedia.org/wiki/Cart - A cart is a vehicle which has two wheels and is designed to transport human passengers or cargo. - - - - - - - - - - animal-drawn cart - - An animal-drawn cart is a cart which is attached to one or more working or draught animals. - - - An animal-drawn cart is a cart which is attached to one or more working or draught animals. - https://en.wikipedia.org/wiki/Cart - - - - - - - - - - boat - - A boat is a watercraft of any size which is able to float or plane on water. - Difficult to distinguish from "ships". Similar to mountains and hills. " In naval terms, a boat is a vessel small enough to be carried aboard another vessel (a ship). Another less restrictive definition is a vessel that can be lifted out of the water. Some definitions do not make a distinction in size, as bulk freighters 1,000 feet (300 m) long on the Great Lakes are called oreboats. For reasons of naval tradition, submarines are usually referred to as 'boats' rather than 'ships', regardless of their size and shape." - https://en.wikipedia.org/wiki/Boat - - - - - - - - motor boat - - - - - - - - - motorized boat - motorised boat - A motor boat is a boat which is propelled by a motor. - - - - - - - - motor - - engine - A motor is a machine designed to convert one or more forms of energy into mechanical energy. - - - A motor is a machine designed to convert one or more forms of energy into mechanical energy. - https://en.wikipedia.org/wiki/Motor - - - - - - - - - - bus - - - - - - - - A bus is a road vehicle designed to carry many passengers. - - - https://en.wikipedia.org/wiki/Bus - A bus is a road vehicle designed to carry many passengers. - - - - - - - - - - taxicab - - cab - Depth can be added with specifications of BFO:role for both the car and the human operator. - taxi - A taxicab is a car which may be hired, along with its operator, to transport passengers between locations of their choosing. - - - https://en.wikipedia.org/wiki/Taxicab - A taxicab is a car which may be hired, along with its operator, to transport passengers between locations of their choosing. - - - - - - - - - - watercraft - - Ships, boats, hovercraft and submarines are all considered watercraft. The term would normally imply some propulsive capability (whether by sail, oar or engine) and hence is distinct from a simple device that merely floats, such as a log raft. - Wikipedia - A watercraft is a vehicle which is able to travel on or through water. - - - https://en.wikipedia.org/wiki/Watercraft - A watercraft is a vehicle which is able to travel on or through water. - - - - - - - - - - bicycle - - cycle - bike - A bicycle is a human-powered, pedal-driven, single-track vehicle, having two wheels attached to a frame, one behind the other. - - - A bicycle is a human-powered, pedal-driven, single-track vehicle, having two wheels attached to a frame, one behind the other. - https://en.wikipedia.org/wiki/Bicycle - - - - - - - - - - motorcycle - - - - - - - - A motorcycle is a two- or three-wheeled motor vehicle. - motorbike - bike - moto - cycle - - - https://en.wikipedia.org/wiki/Motorcycle - A motorcycle is a two- or three-wheeled motor vehicle. - - - - - - - - - - motorscooter - - - - - - - - A scooter or motor scooter is a motorcycle with step-through frame and a platform for the rider's feet. - scooter - motor scooter - - - https://en.wikipedia.org/wiki/Scooter_(motorcycle) - A scooter or motor scooter is a motorcycle with step-through frame and a platform for the rider's feet. - - - - - - - - - - lentic water body - - A lentic water body is a water body in which the accumulated water, in its totality, has very little to no directed flow. - - - - - - - - lotic water body - - A lotic water body is a water body in which the accumulated water, in its totality, is flowing. - - - - - - - - closed ecological system - - A closed ecological system is a vivarium which does not rely on matter exchange with any part outside the system. - This class refers to strictly sealed enclosures such as Biosphere 2 (https://en.wikipedia.org/wiki/Biosphere_2), rather than vivaria which allow matter exchange with external environmental systems. - - - https://en.wikipedia.org/wiki/Closed_ecological_system - A closed ecological system is a vivarium which does not rely on matter exchange with any part outside the system. - - - - - - - - - - mesocosm - - A mesocosm is a vivarium that is embedded within a natural environment and is used to place a relatively small part of that environment under experimental control for the purposes of scientific investigation. - - - https://en.wikipedia.org/wiki/Mesocosm - A mesocosm is a vivarium that is embedded within a natural environment and is used to place a relatively small part of that environment under experimental control for the purposes of scientific investigation. - - - - - - - - - - microcosm - - A microcosm is a vivarium within which a simple ecosystem is artificially established and used to simulate and predict the behaviour of natural ecosystems under controlled conditions. - - - A microcosm is a vivarium within which a simple ecosystem is artificially established and used to simulate and predict the behaviour of natural ecosystems under controlled conditions. - https://en.wikipedia.org/wiki/Microcosm - - - - - - - - - - vaporisation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Note that a vapor describes an element or compound in the gas phase at a temperature lower than its critical point, - Vaporisation of an element or compound is process whereby that element or compound undergoes a phase transition from the liquid to vapor. - vaporization - - - - - - - - boiling - - Boiling is a form of vaporisation which occurs when a liquid is heated to a temperature at which the vapor pressure of the liquid is equal to the pressure exerted on the liquid by the surrounding environmental pressure. - - - https://en.wikipedia.org/wiki/Boiling - Boiling is a form of vaporisation which occurs when a liquid is heated to a temperature at which the vapor pressure of the liquid is equal to the pressure exerted on the liquid by the surrounding environmental pressure. - - - - - - - - - - hydrological condensation process - - - - - - - - - - - - - - - condensation - Hydrological condensation is a process in which atmospheric water vapour undergoes a phase transition from the gas phase to the liquid phase. - "process" is included in the label to make it clear that we are not referring to the condensed material (e.g. water droplets, window fog) - envoPolar - - - https://en.wikipedia.org/wiki/Condensation - Hydrological condensation is a process in which atmospheric water vapour undergoes a phase transition from the gas phase to the liquid phase. - - - - - - - - - - manufactured cage - - cage - A manufactured structure made of interspaced structural elements such as metal or wooden bars or wires held together such that they may be used to confine, contain, or protect something. - - - https://en.wikipedia.org/wiki/Cage_(enclosure) - A manufactured structure made of interspaced structural elements such as metal or wooden bars or wires held together such that they may be used to confine, contain, or protect something. - - - - - - - - - - drylot - - A drylot is an enclosure of limited size usually bare of vegetation and used for fattening livestock. - - - A drylot is an enclosure of limited size usually bare of vegetation and used for fattening livestock. - URL:http://www.merriam-webster.com/dictionary/drylot - - - - - - - - - - feedlot - - A feedlot is a plot of land on which livestock are fattened for market - - - URL:http://www.merriam-webster.com/dictionary/feedlot - A feedlot is a plot of land on which livestock are fattened for market - - - - - - - - - - plant litter - - - - - - - - - - - - - - tree litter - leaf litter - Leaf litter is dead plant material, such as leaves, bark, needles, and twigs, that has fallen to the ground. - litterfall - soil litter - duff - - - https://en.wikipedia.org/wiki/Plant_litter - Leaf litter is dead plant material, such as leaves, bark, needles, and twigs, that has fallen to the ground. - - - - - - - - - - climate change - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The long-term fluctuations in temperature, precipitation, wind, and all other aspects of the Earth's climate. External processes, such as solar-irradiance variations, variations of the Earth's orbital parameters (eccentricity, precession, and inclination), lithosphere motions, and volcanic activity, are factors in climatic variation. Internal variations of the climate system, e.g., changes in the abundance of greenhouse gases, also may produce fluctuations of sufficient magnitude and variability to explain observed climate change through the feedback processes interrelating the components of the climate system. - Definition vebatim from GEMET. Will need to be refined. Further, distinction between "climate change" and (one or many) "climate change process" will need to be discussed. Fluctuations are not processes, per se. - envoPolar - - - GEMET:http://www.eionet.europa.eu/gemet/concept/1471 - The long-term fluctuations in temperature, precipitation, wind, and all other aspects of the Earth's climate. External processes, such as solar-irradiance variations, variations of the Earth's orbital parameters (eccentricity, precession, and inclination), lithosphere motions, and volcanic activity, are factors in climatic variation. Internal variations of the climate system, e.g., changes in the abundance of greenhouse gases, also may produce fluctuations of sufficient magnitude and variability to explain observed climate change through the feedback processes interrelating the components of the climate system. - - - - - - - - - - acidification of an aquatic environment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Acidification of an aquatic environment is a process whereby the pH of an aquatic environment, biome, or water body is lowered. - - - - - - - - ocean acidification - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ocean acidification is a process whereby the pH of a sea or ocean is lowered. - On Earth, the major cause of ocean acidification is the update of carbon dioxide from the atmosphere. - envoPolar - - - - - - - - chonolith - - A chonolith is an igneous rock intrusion of irregular shape with a demonstrable base, absent in other types of irregularly-shaped intrusions. - - - https://en.wikipedia.org/wiki/Chonolith - A chonolith is an igneous rock intrusion of irregular shape with a demonstrable base, absent in other types of irregularly-shaped intrusions. - - - - - - - - - - ecosystem-wide aerobic respiration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - See issue #275 - envoPolar - A process which consists of all aerobic respiration processes instantiated in an ecosystem. - - - - - - - - volcanic eruption - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - A volcanic process is a process during which lava, tephra (ash, lapilli, volcanic bombs and blocks), and assorted gases are expelled from a volcanic vent or fissure. - - - https://en.wikipedia.org/wiki/Types_of_volcanic_eruptions - A volcanic process is a process during which lava, tephra (ash, lapilli, volcanic bombs and blocks), and assorted gases are expelled from a volcanic vent or fissure. - - - - - - - - - - land - - - - - - - - - - - - - - - - - - - - - - - - - - - - Land is a planetary surface that is not covered by liquid. - Land may more properly be represented as part of a planetary surface rather than a sublcass. - ground - - - Land is a planetary surface that is not covered by liquid. - Adpated from https://en.wikipedia.org/wiki/Planetary_surface - - - - - - - - - - liquid planetary surface - - A liquid planetary surface is a planetary surface layer where a liquid material of a planet comes into contact with atmosphere or outer space. - - - A liquid planetary surface is a planetary surface layer where a liquid material of a planet comes into contact with atmosphere or outer space. - https://en.wikipedia.org/wiki/Planetary_surface - - - - - - - - - - outer space - - envoAstro - Outer space is a hard vacuum containing a low density of particles, predominantly a plasma of hydrogen and helium as well as electromagnetic radiation, magnetic fields, neutrinos, dust and cosmic rays that exists between celestial bodies. - space - - - Outer space is a hard vacuum containing a low density of particles, predominantly a plasma of hydrogen and helium as well as electromagnetic radiation, magnetic fields, neutrinos, dust and cosmic rays that exists between celestial bodies. - https://en.wikipedia.org/wiki/Outer_space - - - - - - - - - - planetary crust - - - - - - - - A planetary crust is the outermost solid shell of a rocky planet or natural satellite, which is chemically distinct from the underlying mantle. - This class is meant to be applicable accross planets. Earth's crust would be an instance. - crust - - - https://en.wikipedia.org/wiki/Crust_(geology) - A planetary crust is the outermost solid shell of a rocky planet or natural satellite, which is chemically distinct from the underlying mantle. - - - - - - - - - - planetary structural layer - - - - - - - - Label should be improved to match definition. - A planetary structural layer is laminar part of a terrestrial planet or other rocky body large enough to have differentiation by density. Planetary layers have differing physicochemical properties and composition. - - - - - - - - planetary mantle - - - - - - - - A planetary mantle is a planetary layer which is an interior part of a terrestrial planet or other rocky body large enough to have differentiation by density. - mantle - This class is meant to be applicable accross planets. Earth's mantle would be an instance. - - - A planetary mantle is a planetary layer which is an interior part of a terrestrial planet or other rocky body large enough to have differentiation by density. - https://en.wikipedia.org/wiki/Mantle_(geology) - - - - - - - - - - planetary core - - core - "Not to be confused with planetary core in the core accretion theory, referring to a central accretionary body surrounded by a halo of dust and gas which serves to trap debris and increase the rate of accretion.." WIkipedia:Planetary_core. This class is meant to be applicable accross planets. Earth's core would be an instance. The "layer" aspect of cores may be problematic. - A planetary core is the innermost structural layer or layers of a planet. The core may be entirely liquid, entirely solid, or have both liquid and solid parts. - - - https://en.wikipedia.org/wiki/Planetary_core - A planetary core is the innermost structural layer or layers of a planet. The core may be entirely liquid, entirely solid, or have both liquid and solid parts. - - - - - - - - - - outer planetary core - - Needs a general definition that holds for Earth as well as other planets. - - - - - - - - inner planetary core - - Needs a general definition that holds for Earth as well as other planets. - - - - - - - - liquid planetary core - - - - - - - - - - - - - - - - - - A liquid planetary core is a planetary core which is primarily composed of liquid material. - - - - - - - - solid planetary core - - - - - - - - - - - - - - - - - - A solid planetary core is a planetary core which is primarily composed of solid material. - - - - - - - - lithosphere - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Earth's lithosphere includes the crust and uppermost mantle. - A lithosphere is the outermost shell of a terrestrial-type planet or natural satellite that is defined by its rigid mechanical properties. - - - A lithosphere is the outermost shell of a terrestrial-type planet or natural satellite that is defined by its rigid mechanical properties. - https://en.wikipedia.org/wiki/Lithosphere - - - - - - - - - - asthenosphere - - - - - - - - - - - - - - - - - - - - envoPolar - An asthenosphere is a layer of a terrestrial-type planet or natural satellite which is highly viscous, mechanically weak, and ductilely deforming. - - - https://en.wikipedia.org/wiki/Asthenosphere - An asthenosphere is a layer of a terrestrial-type planet or natural satellite which is highly viscous, mechanically weak, and ductilely deforming. - - - - - - - - - - magma - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Magma is a mixture of molten or semi-molten rock, volatiles, and solids that is found beneath the uppermost solid layer of a planetary body. Besides molten rock, magma may also contain suspended crystals, dissolved gas and sometimes gas bubbles. - - - https://en.wikipedia.org/wiki/Magma - Magma is a mixture of molten or semi-molten rock, volatiles, and solids that is found beneath the uppermost solid layer of a planetary body. Besides molten rock, magma may also contain suspended crystals, dissolved gas and sometimes gas bubbles. - - - - - - - - - - trench - - SWEETRealm:Trench - A trench is a type of excavation or depression in the ground that is generally deeper than it is wide (as opposed to a wider gully or ditch), and narrow compared to its length (as opposed to a simple hole). - EcoLexicon:trench - - - https://en.wikipedia.org/wiki/Trench - A trench is a type of excavation or depression in the ground that is generally deeper than it is wide (as opposed to a wider gully or ditch), and narrow compared to its length (as opposed to a simple hole). - - - - - - - - - - stream channel - - - - - - - - - - - - - - - - - - - - - - - - - - ocean strait - - - - - - - - - - - - - - - - - - - - - - - - - An ocean strait is a strait which connects two oceans. - envoPolar - - - - - - - - river channel - - - - - - - - - - - - - - - slum - - - - - - - - - - - - - - A slum is a heavily populated urban informal settlement with substandard housing in which households lack any one of the following: access to improved water, access to improved sanitation, sufficient-living area, durability of housing, or security of tenure. - - - https://en.wikipedia.org/wiki/Slum - A slum is a heavily populated urban informal settlement with substandard housing in which households lack any one of the following: access to improved water, access to improved sanitation, sufficient-living area, durability of housing, or security of tenure. - URL:http://mdgs.un.org/unsd/mdg/Metadata.aspx?IndicatorId=0&SeriesId=711 - Definition linked to a UN Habitat report entitled "What are slums and why do they exist?" as well as sources from the MDGs and Communitas. - URL:http://www.communitascoalition.org/pdf/Communitas_SDSN_Indicators.pdf - - - - - - - - - - undersea trough - - - - - - - - - - - - - - - - - - - - - - - - - - - - An undersea trough is a trough which is below a marine water body. - ENVO - FTT:1022 - FTT:611 - Geonames:U.DEPU - SWEETRealm:Trough - TGN:21512 - deep - foredeep - swale - - - USGS:SDTS - foredeep - - - - - An undersea trough is a trough which is below a marine water body. - https://en.wikipedia.org/wiki/Trough_%28geology%29 - - - - - USGS:SDTS - swale - - - - - USGS:SDTS - deep - - - - - Geonames:feature - deep - - - - - ADL:FTT - deep - - - - - - - - - - explosive eruption - - An explosive eruption is a volcanic process in which pressurised magma is violently expelled and froths into volcanic ash. Explosive eruptions can eject a cloud of rocks, dust, gas, and pyroclastic material which may then collapse, creating a pyroclastic flow of hot volcanic matter. - environmental_hazards - - - https://en.wikipedia.org/wiki/Explosive_eruption - An explosive eruption is a volcanic process in which pressurised magma is violently expelled and froths into volcanic ash. Explosive eruptions can eject a cloud of rocks, dust, gas, and pyroclastic material which may then collapse, creating a pyroclastic flow of hot volcanic matter. - - - - - - - - - - effusive eruption - - - - - - - - - - - - - - - - - - - - environmental_hazards - An effusive eruption is a volcanic eruption during which lava flows onto the ground. - - - https://en.wikipedia.org/wiki/Effusive_eruption - An effusive eruption is a volcanic eruption during which lava flows onto the ground. - - - - - - - - - - igneous intrusion process - - - - - - - - - - - - - - A process whereby rising magma cools and solidifies without reaching the surface. Instead, the cooled and solidified igneous mass crystallises within the crust to form an igneous intrusion. - - - https://en.wikipedia.org/wiki/Volcanism - A process whereby rising magma cools and solidifies without reaching the surface. Instead, the cooled and solidified igneous mass crystallises within the crust to form an igneous intrusion. - - - - - - - - - - dense settlement - - A settlement with a high density of buildings and inhabitants. - The thresholds for what makes a settlment "dense" can be determined as needed. If there is a specific threshold that should be added to ENVO, please make a new class request. - See also: http://www.ecotope.org/anthromes/v1/guide/urban/12_dense_settlements/default.aspx - - - - - - - - igneous intrusion - - - - - - - - - - - - - - - - - - - - - - - - - "Intrusion" can refer to the solidified mass or the molten rock. - An igneous intrusion is a mass of rock and minerals formed when magma cools, solidifies, and undergoes fractional crystallisation without reaching the surface. - Subclasses of this class will be created by inference. - - - An igneous intrusion is a mass of rock and minerals formed when magma cools, solidifies, and undergoes fractional crystallisation without reaching the surface. - https://en.wikipedia.org/wiki/Volcanism - - - - - - - - - - tephra - - - - - - - - - - - - - - - - Tephra is fragmental material produced by a volcanic eruption regardless of composition, fragment size or emplacement mechanism. - - - https://en.wikipedia.org/wiki/Tephra - Tephra is fragmental material produced by a volcanic eruption regardless of composition, fragment size or emplacement mechanism. - - - - - - - - - - tuff - - - - - - - - Tuff is a type of rock made of volcanic ash ejected from a vent during a volcanic eruption. - - - https://en.wikipedia.org/wiki/Tuff - Tuff is a type of rock made of volcanic ash ejected from a vent during a volcanic eruption. - - - - - - - - - - scoria - - - - - - - - Scoria is a highly vesicular, dark colored volcanic rock that may or may not contain crystals. - cinder - Scoria differs from pumice in having larger vesicles, thicker vesicle walls and being dark colored and denser. - - - https://en.wikipedia.org/wiki/Scoria - Scoria is a highly vesicular, dark colored volcanic rock that may or may not contain crystals. - - - - - - - - - - pumice - - - - - - - - Pumice is a volcanic rock that consists of highly vesicular rough textured volcanic glass, which may or may not contain crystals. - Scoria differs from pumice in having larger vesicles, thicker vesicle walls and being dark colored and denser. - - - https://en.wikipedia.org/wiki/Pumice - Pumice is a volcanic rock that consists of highly vesicular rough textured volcanic glass, which may or may not contain crystals. - - - - - - - - - - tuff cone - - - - - - - - - - - - - - A cone that is composed of consolidated volcanic ash. - - - - - - - - waste role - - This definition is preliminary. - A role that is realized in some process wherein the bearer is discarded or not utilized further. - - - - - - - - area of open water - - - - - - - - - - - - - - - - - - - - According to the NLCD 2011, areas of open water generally have less than 25% cover of vegetation or soil. A specific threshold is not asserted in this definition. - nlcd2011 - An area of a planet's surface which is primarily composed of water in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - NLCD:11 - envoPolar - open water - - - https://en.wikipedia.org/wiki/Planetary_surface - An area of a planet's surface which is primarily composed of water in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Exosphere - - - - - - - - - - geological fracture - - - - - - - - - - - - - - - - - - A geological fracture is any separation in a geologic formation, such as a joint or a fault that divides a mass of rock into two or more pieces. - fissure - SWEETRealm:Fissure - fracture - - - https://en.wikipedia.org/wiki/Fracture_(geology) - A geological fracture is any separation in a geologic formation, such as a joint or a fault that divides a mass of rock into two or more pieces. - - - - - Genomes:fissure - fissure - - - - - - - - - - geological fault - - A geological fault is a planar fracture or discontinuity in a volume of rock, across which there has been significant displacement as a result of rock mass movement. - fault - The relationship between faults and active plate boundaries must be further developed, as there is some overlap. - - - - - - - - active geological fault - - - - - - - - environmental_hazards - An active fault is a fault that is likely to become the source of another earthquake sometime in the future. Geologists commonly consider faults to be active if there has been movement observed or evidence of seismic activity during the last 10,000 years. - active fault - - - - - - - - vein - - - - - - - - A vein is a geological fracture which is filled with minerals precipitated out of an aqueous solution. - - - - - - - - dike - - - - - - - - - - - - - - - dyke - A sheet of rock that formed in a fracture in a pre-existing rock body. - - - Adpated from https://en.wikipedia.org/wiki/Dike_(geology) - A sheet of rock that formed in a fracture in a pre-existing rock body. - - - - - - - - - - geological joint - - joint - A joint is a geological fracture which has no measureable shear displacement - - - - - - - - shear fracture - - A geological fracture across which shear displacement has occurred - Sounds like this should be populated by inference. - - - - - - - - microfracture - - - - - - - - A microfracture is a small fracture which is found in a portion of solid material along which further fracturing tends to occur. Microfractures are considered imperfections which to pre-exist any fractures formed by the application of stress to a material. - Griffith crack - - - - - - - - atmospheric column - - - - - - - - - - - - - - - - - - - - - - - - - - This should be relocated under "fiat object part" of the BFO during next refactoring. Also, the "part of" relation to atomosphere should be updated to express that this is a fiat part of the atmosphere. - A vertical pillar defined by a unit area on a planetary surface and bounded by the top of the atmosphere that is used to quantify an atmospheric parameter such as pressure, ozone or precipitable water. - envoPolar - - - https://mynasadata.larc.nasa.gov/glossary/atmospheric-column-2/ - A vertical pillar defined by a unit area on a planetary surface and bounded by the top of the atmosphere that is used to quantify an atmospheric parameter such as pressure, ozone or precipitable water. - - - - - - - - - - contaminated air - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Contaminated air is air which has sufficient concentrations of environmental pollutants such that it may adversely affect a given ecosystem. - - - - - - - - earthquake - - - - - - - - - - - - - - An earthquake is a process whereby part of the surface of a planet shakes due to the passage of seismic waves through rocks. Seismic waves are produced when some form of energy stored in a planet's crust is suddenly released. Elastic strain, gravity, chemical reactions, or even the motion of massive bodies can produce earthquakes. - environmental_hazards - - - Adapted from URL:http://www.britannica.com/science/earthquake-geology - https://en.wikipedia.org/wiki/Earthquake - An earthquake is a process whereby part of the surface of a planet shakes due to the passage of seismic waves through rocks. Seismic waves are produced when some form of energy stored in a planet's crust is suddenly released. Elastic strain, gravity, chemical reactions, or even the motion of massive bodies can produce earthquakes. - - - - - - - - - - tectonic earthquake - - - - - - - - - - - - - - A tectonic earthquake is an earthquake caused by the release of elastic strain. A tectonic earthquake occurs when strains in rock masses have accumulated to a point where the resulting stresses exceed the strength of the rocks, and sudden fracturing results. - environmental_hazards - - - URL:http://www.britannica.com/science/earthquake-geology - A tectonic earthquake is an earthquake caused by the release of elastic strain. A tectonic earthquake occurs when strains in rock masses have accumulated to a point where the resulting stresses exceed the strength of the rocks, and sudden fracturing results. - - - - - - - - - - megathrust earthquake - - - - - - - - A megathrust earthquake is a tectonic earthquake which occurs at subduction zones at destructive plate boundaries (convergent boundaries). These interplate earthquakes are the planet's most powerful, with moment magnitudes that can exceed 9.0. - environmental_hazards - - - Adapted from URL:http://www.britannica.com/science/earthquake-geology - https://en.wikipedia.org/wiki/Earthquake - A megathrust earthquake is a tectonic earthquake which occurs at subduction zones at destructive plate boundaries (convergent boundaries). These interplate earthquakes are the planet's most powerful, with moment magnitudes that can exceed 9.0. - - - - - - - - - - polluted lake - - - - - - - - - - - - - - - - - - - environmental_hazards - A lake which has concentrations of environmental contaminants high enough to harm the ecosystems associated with it. - - - - - - - - sodium chloride salt - - - - - - - - A mineral material composed primarily of sodium chloride. - salt - envoPolar - This class is for material primarily composed of sodium chloride. For other pure chemical salts, consider a CHEBI class. Request new ENVO terms for environmental samples of other chemical salts. - - - - - - - - glacial abrasion - - - - - - - - - - - - - - A glacial abrasion process is an erosional process during which debris in the basal ice scrapes along the bed, polishing and gouging the underlying rocks, similar to sandpaper on wood. - abrasion - envoPolar - scouring - glacial scouring - - - https://en.wikipedia.org/wiki/Erosion - A glacial abrasion process is an erosional process during which debris in the basal ice scrapes along the bed, polishing and gouging the underlying rocks, similar to sandpaper on wood. - - - - - - - - - - glacial plucking - - - - - - - - - - - - - - Glacial plucking is an erosional process during which pieces of bedrock are cracked off due to the mechanical force of a moving glacier. - glacial quarrying - quarrying - envoPolar - - - Glacial plucking is an erosional process during which pieces of bedrock are cracked off due to the mechanical force of a moving glacier. - https://en.wikipedia.org/wiki/Erosion - - - - - - - - - - glacial ice thrusting - - - - - - - - - - - - - - Glacial ice thrusting is an erosional process during which a moving glacier which has frozen to its bed surges forward and moves large sheets of sediment frozen to the glacial mass. - ice thrusting - envoPolar - - - https://en.wikipedia.org/wiki/Erosion - Glacial ice thrusting is an erosional process during which a moving glacier which has frozen to its bed surges forward and moves large sheets of sediment frozen to the glacial mass. - - - - - - - - - - water mass - - - - - - - - A mass of water. - - - - - - - - marine water mass - - - - - - - - - envoPolar - A mass of marine water. - - - - - - - - coast - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A coast is the area where land meets the sea, ocean, or lake. - Used for both marine and lake coasts. The boundary of the coast is fuzzy and it overlaps both the water body and land in quesiton. Compared to 'shore' - - - A coast is the area where land meets the sea, ocean, or lake. - https://en.wikipedia.org/wiki/Coast - - - - - - - - - - lake coast - - - - - - - - - - - - - - Usually reserved for large lakes. - The general region of indefinite width that extends from a lake inland to the first major change in terrain features. - - - Adapted from USGS:SDTS - The general region of indefinite width that extends from a lake inland to the first major change in terrain features. - - - - - - - - - - tsunami - - - - - - - - - - - - - - - - environmental_hazards - tidal wave - A tsunami is a process during which a series of waves is generated in a water body, typically an ocean or large lake, by the displacement of a large volume of water. Earthquakes, volcanic eruptions and other underwater explosions (including detonations of underwater nuclear devices), landslides, glacier calvings, meteorite impacts and other disturbances above or below water all have the potential to generate a tsunami. - seismic sea wave - - - https://en.wikipedia.org/wiki/Tsunami - A tsunami is a process during which a series of waves is generated in a water body, typically an ocean or large lake, by the displacement of a large volume of water. Earthquakes, volcanic eruptions and other underwater explosions (including detonations of underwater nuclear devices), landslides, glacier calvings, meteorite impacts and other disturbances above or below water all have the potential to generate a tsunami. - - - - - - - - - - mass wasting - - - - - - - - - - - - - - - - - - - - - - - - slope movement - environmental_hazards - Of interest for future development: Some causes of mass wasting earthquakes, increased overburden from structures, increased soil moisture, reduction of roots holding the soil to bedrock, undercutting of the slope by excavation or erosion, weathering by frost heave, bioturbation, volcanic edifice over-steepening. Some processes that reduce mass wasting: Afforestation, Reforestation, Terracing steps on slopes (reduce angle of slope). https://en.wikipedia.org/wiki/Mass_wasting. - mass movement - envoPolar - Mass wasting is the geomorphic process by which solid environmental material such as soil, sand, regolith, and/or rock move downslope typically as a mass, largely under the force of gravity, but frequently affected by water and water content as in submarine environments and mudslides. - - - https://en.wikipedia.org/wiki/Mass_wasting - Mass wasting is the geomorphic process by which solid environmental material such as soil, sand, regolith, and/or rock move downslope typically as a mass, largely under the force of gravity, but frequently affected by water and water content as in submarine environments and mudslides. - - - - - - - - - - avalanche - - - - - - - - - - - - - - - - - - snowslip - envoPolar - environmental_hazards - An avalanche is a rapid flow of snow down a sloping surface. - snowslide - - - https://en.wikipedia.org/wiki/Mass_wasting - An avalanche is a rapid flow of snow down a sloping surface. - - - - - - - - - - landslide process - - - - - - - - - - - - - - - - - - - landslip - GEMET:http://www.eionet.europa.eu/gemet/concept/4668 - A landslide is a process whereby a large mass of earth and rocks moves down a hill or a mountainside. - environmental_hazards - - - A landslide is a process whereby a large mass of earth and rocks moves down a hill or a mountainside. - https://en.wikipedia.org/wiki/Mass_wasting - - - - - - - - - - rockfall - - environmental_hazards - - - - - - - - geological subsidence - - - - - - - - - - - - - - - A subsidence process is a geomorphologic process in which a surface shifts downward relative to a datum such as sea-level. - subsidence - environmental_hazards - - - https://en.wikipedia.org/wiki/Subsidence - A subsidence process is a geomorphologic process in which a surface shifts downward relative to a datum such as sea-level. - - - - - - - - - - mudslide - - - - - - - - - - - - - - - - - - environmental_hazards - - - - - - - - mass wasting flow - - envoPolar - A mass wasting flow is a form of mass wasting during which the moving materials behave similarly to a flowing fluid. Water, air and ice are often involved in enabling fluidlike motion of the material. - environmental_hazards - flow - - - https://en.wikipedia.org/wiki/Mass_wasting - A mass wasting flow is a form of mass wasting during which the moving materials behave similarly to a flowing fluid. Water, air and ice are often involved in enabling fluidlike motion of the material. - - - - - - - - - - mudflow - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - "Mudflows are often called mudslides, a term applied indiscriminately by the mass media to a variety of mass wasting events. Mudflows often start as slides, becoming flows as water is entrained along the flow path; such events are often called flow slides." https://en.wikipedia.org/wiki/Mudflow - A mudflow is a form of mass wasting which involves very rapid to extremely rapid surging flow of debris that has become partially or fully liquified by the addition of significant amounts of water to clay-rich source material. - mud flow - - - A mudflow is a form of mass wasting which involves very rapid to extremely rapid surging flow of debris that has become partially or fully liquified by the addition of significant amounts of water to clay-rich source material. - https://en.wikipedia.org/wiki/Mudflow - - - - - - - - - - debris flow - - environmental_hazards - - - - - - - - lahar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A lahar is a type of mudflow or debris flow composed of a slurry of pyroclastic material, rocky debris, and water. The material flows down from a volcano, typically along a river valley. - environmental_hazards - - - https://en.wikipedia.org/wiki/Lahar - A lahar is a type of mudflow or debris flow composed of a slurry of pyroclastic material, rocky debris, and water. The material flows down from a volcano, typically along a river valley. - - - - - - - - - - sturzstrom - - A sturzstrom is a landslide consisting which has a great amount of kinetic energy resulting in greater horizontal movement when compared to its initial vertical drop — as much as 20 or 30 times the vertical distance. By contrast a normal landslide will typically travel a horizontal distance that is less than twice the distance that the material has fallen. - - - A sturzstrom is a landslide consisting which has a great amount of kinetic energy resulting in greater horizontal movement when compared to its initial vertical drop — as much as 20 or 30 times the vertical distance. By contrast a normal landslide will typically travel a horizontal distance that is less than twice the distance that the material has fallen. - https://en.wikipedia.org/wiki/Sturtzstrom - - - - - - - - - - volcanic ash - - - - - - - - - - - - - - Volcanic ash is an environmental material which consists of fragments of pulverized rock, minerals, and volcanic glass, created during volcanic eruptions and measuring less than 2 millimetres in diameter. Volcanic ash is formed during explosive volcanic eruptions, phreatomagmatic eruptions and during transport in pyroclastic density currents. - - - Volcanic ash is an environmental material which consists of fragments of pulverized rock, minerals, and volcanic glass, created during volcanic eruptions and measuring less than 2 millimetres in diameter. Volcanic ash is formed during explosive volcanic eruptions, phreatomagmatic eruptions and during transport in pyroclastic density currents. - https://en.wikipedia.org/wiki/Volcanic_ash - - - - - - - - - - ash fall process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - An ash fall process is a process in which volcanic ash formed during an explosive volcanic eruption, phreatomagmatic eruption, or during material transport in pyroclastic density currents is pulled towards the planetary surface by gravity. - - - https://en.wikipedia.org/wiki/Volcanic_ash - An ash fall process is a process in which volcanic ash formed during an explosive volcanic eruption, phreatomagmatic eruption, or during material transport in pyroclastic density currents is pulled towards the planetary surface by gravity. - - - - - - - - - - hydrological precipitation process - - - - - - - - - - - - - - - - - - - - - - - - - - precipitation - Hydrological precipitation is a process during which any product of the condensation of atmospheric water vapour is pulled to the planetary surface by gravity. - "process" is included in the label to make it clear that we are not referring to the precipitated material (e.g. snow, rain, sleet) - - - Hydrological precipitation is a process during which any product of the condensation of atmospheric water vapour is pulled to the planetary surface by gravity. - https://en.wikipedia.org/wiki/Precipitation - - - - - - - - - - hydrological evaporation - - - - - - - - - Hydrological evaporation is the evaporation of water, generally as part of a planetary water cycle. - - - - - - - - soil degradation - - Soil degradation is a process which results in a change in soil health status resulting in a diminished capacity of the ecosystem in which the soil occurs to provide goods and services for its beneficiaries. - - - Soil degradation is a process which results in a change in soil health status resulting in a diminished capacity of the ecosystem in which the soil occurs to provide goods and services for its beneficiaries. - FAO:http://www.fao.org/soils-portal/soil-degradation-restoration/en/ - - - - - - - - - - soil erosion - - - - - - - - Soil erosion is a process in which exogenic processes remove soil from one location on the Earth's crust and transport it to another location where it is deposited. - "Soil Erosion is a common term that is often confused with soil degradation as a whole, but in fact refers only to absolute soil losses in terms of topsoil and nutrients. This is indeed the most visible effect of soil degradation, but does not cover all of its aspects. Soil erosion is a natural process in mountainous areas, but is often made much worse by poor management practices." http://www.fao.org/soils-portal/soil-degradation-restoration/en/ - envoPolar - - - - - - - - coastal flooding - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - Coastal flooding is a process in which normally dry, low-lying land near a coast is flooded by sea water. - - - https://en.wikipedia.org/wiki/Coastal_flood - Coastal flooding is a process in which normally dry, low-lying land near a coast is flooded by sea water. - - - - - - - - - - riverine flooding - - A disposition class such as 'flooding disposition' may be interesting, especially when attached to things like meanders and bends. - Riverine flooding is a process in which the flow rate of river water exceeds the capacity of its channel, thus flooding neighbouring land. Bends and meanders in a river channel are particularly disposed to such flooding. - environmental_hazards - - - Riverine flooding is a process in which the flow rate of river water exceeds the capacity of its channel, thus flooding neighbouring land. Bends and meanders in a river channel are particularly disposed to such flooding. - https://en.wikipedia.org/wiki/Flood#Riverine - - - - - - - - - - flash flooding - - - - - - - - environmental_hazards - Flash flooding is a process in which low-lying land is inundated with water for a short period of time and are usually the result of precipitation or a breach in the container of a water body. - Flash floods generally last no more than six hours. http://www.srh.noaa.gov/mrx/hydro/flooddef.php - - - https://en.wikipedia.org/wiki/Flash_flood - Flash flooding is a process in which low-lying land is inundated with water for a short period of time and are usually the result of precipitation or a breach in the container of a water body. - - - - - - - - - - flood - - - - - - - - environmental_hazards - An unusual accumulation of water above the ground caused by high tide, heavy rain, melting snow or rapid runoff from paved areas. - - - GEMET:http://www.eionet.europa.eu/gemet/concept/3298 - An unusual accumulation of water above the ground caused by high tide, heavy rain, melting snow or rapid runoff from paved areas. - - - - - - - - - - coastal flood - - - - - - - - - - - - - - A coastal flood is a flood which is formed as a result of large amounts of water from marine water bodies or large lakes being transported to usually dry land by displacement processes such as high winds or seismic activity. - environmental_hazards - - - https://en.wikipedia.org/wiki/Flood#Estuarine_and_coastal - A coastal flood is a flood which is formed as a result of large amounts of water from marine water bodies or large lakes being transported to usually dry land by displacement processes such as high winds or seismic activity. - - - - - - - - - - riverine flood - - - - - - - - - - - - - - environmental_hazards - A riverine flood is a flood which is formed as a result of a river's flow rate exceeding the capacity of its channel. - - - - - - - - flash flood - - - - - - - - environmental_hazards - A flash flood is a flood formed by the rapid flooding of geomorphic low-lying areas. It may be caused by heavy rain associated with a severe thunderstorm, hurricane, tropical storm, or meltwater from ice or snow flowing over ice sheets or snowfields. Flash floods may also occur after the collapse of a natural ice or debris dam, or a human structure such as a man-made dam. Flash floods are distinguished from a regular flood by a timescale of less than six hours. - - - A flash flood is a flood formed by the rapid flooding of geomorphic low-lying areas. It may be caused by heavy rain associated with a severe thunderstorm, hurricane, tropical storm, or meltwater from ice or snow flowing over ice sheets or snowfields. Flash floods may also occur after the collapse of a natural ice or debris dam, or a human structure such as a man-made dam. Flash floods are distinguished from a regular flood by a timescale of less than six hours. - https://en.wikipedia.org/wiki/Flash_flood - - - - - - - - - - storm surge - - - - - - - - A storm surge is a coastal flood which is caused by low-pressure weather systems such as tropical cyclones and strong extratropical cyclones, the severity of which is affected by the shallowness and orientation of the water body relative to storm path, and the timing of tides. - Needs links to weather when these phenomena are added. - environmental_hazards - - - https://en.wikipedia.org/wiki/Storm_surge - A storm surge is a coastal flood which is caused by low-pressure weather systems such as tropical cyclones and strong extratropical cyclones, the severity of which is affected by the shallowness and orientation of the water body relative to storm path, and the timing of tides. - - - - - - - - - - metotsunami - - Ambiguity as to whether this label refers to the process or the material entities (the waves). The material entities are a type of severe storm surge. - environmental_hazards - A meteotsunami is a tsunami caused by atmospheric processes and differences in air pressure. - - - https://en.wikipedia.org/wiki/Meteotsunami - A meteotsunami is a tsunami caused by atmospheric processes and differences in air pressure. - - - - - - - - - - storm surge process - - A storm surge process is a coastal flooding process which is caused by low pressure weather systems such as tropical cyclones and strong extratropical cyclones, the severity of which is affected by the shallowness and orientation of the water body relative to storm path, and the timing of tides. - Should be linked to the relevant weather classes when these are created. - environmental_hazards - - - https://en.wikipedia.org/wiki/Storm_surge - A storm surge process is a coastal flooding process which is caused by low pressure weather systems such as tropical cyclones and strong extratropical cyclones, the severity of which is affected by the shallowness and orientation of the water body relative to storm path, and the timing of tides. - - - - - - - - - - areal flooding - - - - - - - - - - - - - - - environmental_hazards - Areal flooding is a flooding process in which flat or low-lying areas become inundated with water due to water input exceeding infiltration, evaporation, or run off. - - - https://en.wikipedia.org/wiki/Flood#Areal - Areal flooding is a flooding process in which flat or low-lying areas become inundated with water due to water input exceeding infiltration, evaporation, or run off. - - - - - - - - - - urban flooding - - - - - - - - - - - - - - - environmental_hazards - Relevant to built environments and can be linked to urban flows. Also relevant to water and sanitation SDGs. - Urban flooding is a flooding process in which land or property in a built environment, particularly in more densely populated areas, is inundated due to the rate of water input exceeding that of water drainage provided by the environment's drainage systems. - - - Urban flooding is a flooding process in which land or property in a built environment, particularly in more densely populated areas, is inundated due to the rate of water input exceeding that of water drainage provided by the environment's drainage systems. - https://en.wikipedia.org/wiki/Flood#Urban_flooding - - - - - - - - - - snowmelt - - - - - - - - - - - - - - Snowmelt is a hydrological process in which water is produced by the melting of snow and becomes part of the hydrological surface runoff. - The assertion that the output is freshwater seems reasonable; however, this can certianly be changed if a counter example is provided. - envoPolar - - - Snowmelt is a hydrological process in which water is produced by the melting of snow and becomes part of the hydrological surface runoff. - https://en.wikipedia.org/wiki/Snowmelt - - - - - - - - - - hydrological melting process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoPolar - - - - - - - - icemelt - - - - - - - - - - - - - - Icemelt is a hydrological process in which water is produced by the melting of ice and becomes part of the hydrological surface runoff. - The assertion that the output is freshwater seems reasonable; however, this can certianly be changed if a counter example is provided. - envoPolar - - - https://en.wikipedia.org/wiki/Meltwater - Icemelt is a hydrological process in which water is produced by the melting of ice and becomes part of the hydrological surface runoff. - - - - - - - - - - meltwater - - - - - - - - Meltwater is the water released by the melting of snow or ice, including glacial ice, tabular icebergs and ice shelves over oceans. - - - Meltwater is the water released by the melting of snow or ice, including glacial ice, tabular icebergs and ice shelves over oceans. - https://en.wikipedia.org/wiki/Meltwater - - - - - - - - - - melting - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Melting is a physical process that results in the phase transition of a substance from a solid to a liquid. - could replace with http://purl.obolibrary.org/obo/REX_0000177 - melting process - fusion - envoPolar - - - https://en.wikipedia.org/wiki/Melting - Melting is a physical process that results in the phase transition of a substance from a solid to a liquid. - - - - - - - - - - condensation process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Condensation is a process during which a gas undergoes a phase transition into a liquid. - - - https://en.wikipedia.org/wiki/Condensation - Condensation is a process during which a gas undergoes a phase transition into a liquid. - - - - - - - - - - chemical precipitation process - - Chemical precipitation is a process in which a portion of some solid substance segregates from a material in which that substance or its precursors were dissolved in and settles due to a force such as gravity or centrifugal force. Segregation may occur due to the solubility limits of the precipitating substance being exceeded or due to a chemical reaction that forms a solid product from aqueous reagents. - - - Chemical precipitation is a process in which a portion of some solid substance segregates from a material in which that substance or its precursors were dissolved in and settles due to a force such as gravity or centrifugal force. Segregation may occur due to the solubility limits of the precipitating substance being exceeded or due to a chemical reaction that forms a solid product from aqueous reagents. - https://en.wikipedia.org/wiki/Precipitation_(chemistry) - - - - - - - - - - desublimation process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - deposition - Desublimation is a process in which a portion of some gas undergoes a phase transition into a portion of some solid. - - - Desublimation is a process in which a portion of some gas undergoes a phase transition into a portion of some solid. - https://en.wikipedia.org/wiki/Deposition_(phase_transition) - - - - - - - - - - sublimation process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sublimation is a process during which a portion of some solid undergoes a phase transition into a portion of some gas. - - - https://en.wikipedia.org/wiki/Sublimation_(phase_transition) - Sublimation is a process during which a portion of some solid undergoes a phase transition into a portion of some gas. - - - - - - - - - - tectonic uplift process - - - - - - - - - - - - - - - A tectonic uplift process is a geomorphologic process in which a geological surface shifts upward relative to a datum such as sea-level due to forces other than isostatic responses to unloading. - - - A tectonic uplift process is a geomorphologic process in which a geological surface shifts upward relative to a datum such as sea-level due to forces other than isostatic responses to unloading. - https://en.wikipedia.org/wiki/Tectonic_uplift - - - - - - - - - - atmospheric subsidence - - - - - - - - - - - - - - - - - - Atmospheric subsidence is a process in which a mass of air moves through an atmosphere towards a planetary surface. - - - https://en.wikipedia.org/wiki/Subsidence_(atmosphere) - Atmospheric subsidence is a process in which a mass of air moves through an atmosphere towards a planetary surface. - - - - - - - - - - lava flow process - - - - - - - - - - - - - - environmental_hazards - A process in which a volume of lava emitted during an effusive eruption moves along a solid surface. - - - A process in which a volume of lava emitted during an effusive eruption moves along a solid surface. - https://en.wikipedia.org/wiki/Lava - - - - - - - - - - igneous extrusion - - - - - - - - - - - - - - - A mass of igneous rock formed when hot magma flows out (extrudes) onto a planetary surface as lava or explodes violently into the atmosphere to fall back as pyroclastics or tuff. - - - https://en.wikipedia.org/wiki/Extrusive - A mass of igneous rock formed when hot magma flows out (extrudes) onto a planetary surface as lava or explodes violently into the atmosphere to fall back as pyroclastics or tuff. - - - - - - - - - - clastic dike - - - - - - - - - A dike formed when sediment fills a pre-existing fracture in a mass of rock. - clastic dyke - - - - - - - - stock - - - - - - - - - - - - - - - - - - - - - Some assertion to indicate that stocks are smaller than batholiths should be made. - A stock is a discordant igneous intrusion having a surface exposure of less than 100 square kilometres. Stocks differ from batholiths only in being smaller. - - - - - - - - laccolith - - A sheet intrusion (or concordant pluton) that has been injected between two layers of sedimentary rock. The pressure of the magma is high enough that the overlying strata are forced upward, giving the laccolith a dome or mushroom-like form with a generally planar base. - - - Adapated from https://en.wikipedia.org/wiki/Laccolith - A sheet intrusion (or concordant pluton) that has been injected between two layers of sedimentary rock. The pressure of the magma is high enough that the overlying strata are forced upward, giving the laccolith a dome or mushroom-like form with a generally planar base. - - - - - - - - - - lopolith - - A large igneous intrusion which is lenticular in shape with a depressed central region. - - - A large igneous intrusion which is lenticular in shape with a depressed central region. - Adapated from https://en.wikipedia.org/wiki/Lopolith - - - - - - - - - - phacolith - - A phacolith is an intrusion parallel to the bedding plane or foliation of folded country rock. More specifically, it is a typically lens-shaped intrusion that occupies either the crest of an anticline or the trough of a syncline. - - - Adapated from https://en.wikipedia.org/wiki/Phacolith - A phacolith is an intrusion parallel to the bedding plane or foliation of folded country rock. More specifically, it is a typically lens-shaped intrusion that occupies either the crest of an anticline or the trough of a syncline. - - - - - - - - - - sill - - concordant intrusive sheet - A tabular sheet intrusion that has intruded between older layers of sedimentary rock, beds of volcanic lava or tuff, or along the direction of foliation in metamorphic rock. - - - https://en.wikipedia.org/wiki/Sill_(geology) - A tabular sheet intrusion that has intruded between older layers of sedimentary rock, beds of volcanic lava or tuff, or along the direction of foliation in metamorphic rock. - - - - - - - - - - intrusion process - - A process whereby the precursors of rock, such as magma or sedimentary particles, fill a fracture in a mass of rock. - - - - - - - - habitat - - - - - - - - - - - - - - A habitat's specificity to an ecological population differentiates it from other environment classes. - An environmental system which can sustain and allow the growth of an ecological population. - ENVO - EcoLexicon:habitat - LTER:238 - SWEETRealm:Habitat - https://en.wikipedia.org/wiki/Habitat - - - An environmental system which can sustain and allow the growth of an ecological population. - EnvO:EnvO - - - - - - - - - - area of perennial water ice - - - - - - - - - - - - - - - - - - - - - - - - - - - - An area of a planet's surface which is primarily composed of water ice, present throughout multiple years, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - nlcd2011 - This class covers part of the NLCD "Perennial Ice/Snow" class. - envoPolar - - - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is primarily composed of water ice, present throughout multiple years, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - - - - - - - - recycling process - - This has been created for SDGIO. Revision is likely, but the general meaning should be stable. The frame of reference for determining what is 'waste' and what is a 'resource' is unclear. - A process in which some input bearing a waste role is consumed to produce an output which bears a resource role. - - - https://stats.oecd.org/glossary/detail.asp?ID=2260 - A process in which some input bearing a waste role is consumed to produce an output which bears a resource role. - - - - - - - - - - carbon-bearing gas emission process - - - - - - - - - - - - - - - - - - - - - A carbon emission process is any environmental process which outputs a carbon-bearing gas. - envoPolar - Requested for SDGIO. Likely to be revised. - carbon emission process - - - - - - - - land consumption process - - These anthropogenic ecosystems may include urban or other built-up settlements or anthropogenic ecosystems used for activities such as forestry or agriculture. - A process in which natural ecosystems present over an expanse of land are removed and replaced with anthropogenic ecosystems. - An SDGIO request. Likely to be refined and revised. This looks like an aggregate class, subsuming a range of processes which can lead to degradation. - - - A process in which natural ecosystems present over an expanse of land are removed and replaced with anthropogenic ecosystems. - Adapted from EEA (1997) The concept of environmental space, Copenhagen, URL: http://www.eea.europa.eu/publications/92-9167-078-2/at_download/file - - - - - - - - - - human dwelling - - A self-contained constructed feature used by one or more households as a home, such as a house, apartment, mobile home, houseboat or other 'substantial' structure. A dwelling typically includes nearby outbuildings, sheds etc. within the curtilage of the property, excluding any 'open fields beyond'. It has significance in relation to search and seizure, conveyancing of real property, burglary, trespass, and land use planning. - See https://github.com/EnvironmentOntology/envo/issues/264 for discussion. This definition needs a lot of clean up and links to household and related classes must be made to form logical definitions for inference to work. - Subclasses will be added by inference. - - - https://en.wikipedia.org/wiki/Dwelling accessed 11/25/2015 - A self-contained constructed feature used by one or more households as a home, such as a house, apartment, mobile home, houseboat or other 'substantial' structure. A dwelling typically includes nearby outbuildings, sheds etc. within the curtilage of the property, excluding any 'open fields beyond'. It has significance in relation to search and seizure, conveyancing of real property, burglary, trespass, and land use planning. - - - - - - - - - - area of perennial snow - - - - - - - - - - - - - - - - - - - - - - - - - - - - An area of a planet's surface which is primarily composed of snow, present throughout multiple years, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - envoPolar - nlcd2011 - This class covers part of the NLCD "Perennial Ice/Snow" class. - - - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is primarily composed of snow, present throughout multiple years, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - - - - - - - - area of perennial ice or snow - - - - - - - - - - - - - - - - - - - - - - - - - - - - According to the NLCD 2011, these areas are characterised by ice and/or snow cover generally greater than 25% of total cover. The definition of perennial needs clarification. - perennial ice/snow - NLCD:12 - An area of a planet's surface which is primarily composed of snow or water ice, present throughout multiple years, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - nlcd2011 - envoPolar - - - https://en.wikipedia.org/wiki/Planetary_surface - https://en.wikipedia.org/wiki/Exosphere - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is primarily composed of snow or water ice, present throughout multiple years, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - - - - - - - - regolith - - - - - - - - A layer of loose, heterogeneous, superficial material covering solid rock. It includes dust, soil, broken rock, and other related materials. - The various parts of the regolith are highly variable. Perhaps some sort of "unconsolidated" quality should be used here with "environmental material" to cover this scope. Note that organisms, their parts, or their derivatives are also included. - - - https://en.wikipedia.org/wiki/Regolith - A layer of loose, heterogeneous, superficial material covering solid rock. It includes dust, soil, broken rock, and other related materials. - - - - - - - - - - continental crust - - - - - - - - This is an Earth-centred class, but can be generalised to include other planetary bodies. - envoPolar - A layer of igneous, sedimentary, and metamorphic rocks that forms continents and the areas of shallow seabed close to their shores, known as continental shelves. - On Earth, all continental crust ultimately derives from the fractional differentiation of oceanic crust over many eons. - - - https://en.wikipedia.org/wiki/Crust_(geology) - A layer of igneous, sedimentary, and metamorphic rocks that forms continents and the areas of shallow seabed close to their shores, known as continental shelves. - - - - - On Earth, all continental crust ultimately derives from the fractional differentiation of oceanic crust over many eons. - https://en.wikipedia.org/wiki/Continental_crust - - - - - - - - - - oceanic crust - - - - - - - - envoPolar - Oceanic crust is the uppermost layer of the oceanic portion of a tectonic plate. - - - Oceanic crust is the uppermost layer of the oceanic portion of a tectonic plate. - https://en.wikipedia.org/wiki/Crust_(geology) - - - - - - - - - - Mohorovicic discontinuity - - This is and Earth-centred definition, but can likely be applied to other differentiated planetary bodies. - The Mohorovicic discontinuity, usually referred to as the Moho, is the boundary between the Earth's crust and the mantle, indicating a change in composition. - Moho - MohoroviÄ�ić discontinuity - - - https://en.wikipedia.org/wiki/Mohorovi%C4%8Di%C4%87_discontinuity - The Mohorovicic discontinuity, usually referred to as the Moho, is the boundary between the Earth's crust and the mantle, indicating a change in composition. - - - - - - - - - - bedrock - - A lithified mass of rock that lies under the loose softer material (regolith) at the surface of the Earth or other terrestrial planet. - - - https://en.wikipedia.org/wiki/Bedrock - A lithified mass of rock that lies under the loose softer material (regolith) at the surface of the Earth or other terrestrial planet. - - - - - - - - - - area of barren land - - - - - - - - - - - - - - nlcd2011 - An area of a planet's surface which is primarily composed of bedrock, desert pavement, scarp rock, talus, material exposed by slides, volcanic material, glacial debris, sand, material exposed during strip mining, gravel, and other accumulations of earthen material in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - envoPolar - NLCD:31 - Barren Land (Rock/Sand/Clay) - According to the NLCD 2011, areas of barren land generally have less than 15% cover of vegetation. A specific threshold is not asserted in this definition. - The range of entities that are considered "barren land" are not exhaustive, making axiomatisation risky at this stage. - - - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Planetary_surface - An area of a planet's surface which is primarily composed of bedrock, desert pavement, scarp rock, talus, material exposed by slides, volcanic material, glacial debris, sand, material exposed during strip mining, gravel, and other accumulations of earthen material in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://en.wikipedia.org/wiki/Exosphere - - - - - - - - - - obsolete air temperature - ENVO:09200001 - true - Draft class. In discussion in Issue #278. - A temperature that inheres in some portion of air. - - - URL:https://github.com/EnvironmentOntology/envo/issues/278 - A temperature that inheres in some portion of air. - - - - - - - - - - fumarole-derived ice tower - - - - - - - - - - - - - - - - ice tower - envoPolar - ice chimney - A hollow tower of ice formed by the freezing of steam escaping a fumarole. - - - - - - - - aeroform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This may not need to be in the atmosphere, also note that "meteor" will do much of the same work. - An aeroform is a geographic feature which is primarily composed of a continuous volume of gaseous or aerosolised material held in shape by one or more environmental processes. - Similar, in spirit, to landform. This class may need to be split into aerosols and 'pure' volumes of gas. - - - - - - - - obsolete vegetable - FOODON:00001261 - true - According to the FAO definition, vegetables grown principally for animal feed or seed should be separated from those grown for human consumption. They both, however, fall under the label "vegetable". - This class represents a somewhat arbitrary grouping of plant products which varies along various axes (socio-political, economic, cultural, etc). It's likely we'll need to create more informative subclasses and use synonomy to tie them together. - - - - - - - - obsolete fruit - FOODON:00001262 - true - This class represents a somewhat arbitrary grouping of plant products which varies along various axes (socio-political, economic, cultural, etc). It's likely we'll need to create more informative subclasses and use synonomy to tie them together. - - - - - - - - obsolete nut - FOODON:00001263 - true - This class represents a somewhat arbitrary grouping of plant products which varies along various axes (socio-political, economic, cultural, etc). It's likely we'll need to create more informative subclasses and use synonomy to tie them together. The definition, too, requires greater refinement. - - - - - - - - obsolete legume - FOODON:00001264 - true - - - - - - - - cloud - - - - - - - - A cloud is a visible mass of aerosolised liquid droplets or frozen crystals suspended in an atmosphere above the surface of a planetary body. On Earth clouds are formed by the saturation of air in the homosphere when air cools or gains water vapor. - Note that this class describes clouds as countable objects, rather than 'cloud material'. It also refers to water-based clouds. - cloud mass - - - https://en.wikipedia.org/wiki/Cloud - A cloud is a visible mass of aerosolised liquid droplets or frozen crystals suspended in an atmosphere above the surface of a planetary body. On Earth clouds are formed by the saturation of air in the homosphere when air cools or gains water vapor. - - - - - - - - - - polar stratospheric cloud - - envoPolar - Polar stratospheric clouds are clouds which form in the winter polar stratosphere at altitudes of 15,000–25,000 metres and which support chemical reactions that produce active chlorine and remove gaseous nitric acid, catalysing ozone destruction. - PSC - This class should be linked to ozone layer depletion processes. - nacreous cloud - - - https://en.wikipedia.org/wiki/Polar_stratospheric_cloud - Polar stratospheric clouds are clouds which form in the winter polar stratosphere at altitudes of 15,000–25,000 metres and which support chemical reactions that produce active chlorine and remove gaseous nitric acid, catalysing ozone destruction. - - - - - - - - - - sparsely populated settlement - - A settlement with a low density of buildings and inhabitants. - The thresholds for what makes a settlment "sparsely populated" can be determined as needed. These are usually "sparse" in relation to urban environments. If there is a specific threshold that should be added to ENVO, please make a new class request. - - - - - - - - rural settlement - - - - - - - - A settlement which has lower population density than a town, city, or other urban environment and is primarily used for agricultural or pastoral activity. - A class created fro SDGIO. The definition of rural is highly varied, dealing with areas, settlements, and populations interchangeably. The 'rural' classes in ENVO aim to clarify these differing definitions. See issue #272. - - - https://en.wikipedia.org/wiki/Rural_area - A settlement which has lower population density than a town, city, or other urban environment and is primarily used for agricultural or pastoral activity. - http://www.fao.org/docrep/015/am085e/am085e.pdf - - - - - - - - - - formal settlement - - A settlement which has been established and is managed through officially sanctioned processes and is recognised as legal by a competent authority. - This is merely a defined class and should not have too many subclasses. - - - - - - - - informal settlement - - Informal settlements need not be illegal. - This is merely a defined class and should not have too many subclasses. - Can a formerly formal settlement become an informal settlement? - A settlement which is not associated with or directed by official planning processes and which typically lacks municipal services and infrastructure such as sanitation, water services, and waste management services. - - - - - - - - legal settlement - - A settlement on land that the inhabitants have a legal claim to. - This is merely a defined class and should not have too many subclasses. - - - - - - - - illegal settlement - - A settlement on land that the inhabitants have no legal claim to or occupy illegally. - This is merely a defined class and should not have too many subclasses. - - - http://stats.oecd.org/glossary/detail.asp?ID=1351 - A settlement on land that the inhabitants have no legal claim to or occupy illegally. - - - - - - - - - - primary forest - - Forest which originally covered a region before changes in the environment brought about by people. (Source: PHC) - - - http://www.eionet.europa.eu/gemet/concept?cp=6622 - Forest which originally covered a region before changes in the environment brought about by people. (Source: PHC) - - - - - - - - - - carbon dioxide emission process - - - - - - - - - - - - - - - - - - - - - - - - A carbon emission process is any environmental process which releases carbon dioxide gas into the atmosphere. - envoPolar - Requested for SDGIO. This class may be revised in future once the offical definitions become more clear. - - - - - - - - carbon dioxide emission - - - - - - - - - - - - - - - - - - - - A volume of carbon dioxide gas emitted by a carbon dioxide emission process. - This is a working definition for #280. Which processes will ultimately be included in the axioms is still open. - - - - - - - - all season road - - permanent road - A road which is usable across all seasons. - Created for SDGIO, indicator 9.1.1. See #272. - all-season road - - - http://www.nationsencyclopedia.com/WorldStats/ADI-access-season-road-definition.html - A road which is usable across all seasons. - - - - - - - - - - rural area - - - - - - - - A class created fro SDGIO. The definition of rural is highly varied, dealing with areas, settlements, and populations interchangeably. The 'rural' classes in ENVO aim to clarify these differing definitions. See issue #272. - An area which is outside of a town, city, or urban area. Rural areas are primarily used for agriculture or pastoralism and may contain rural settlements. - - - http://www.fao.org/docrep/015/am085e/am085e.pdf - An area which is outside of a town, city, or urban area. Rural areas are primarily used for agriculture or pastoralism and may contain rural settlements. - - - - - - - - - - village - - A village is a clustered human settlement or community, larger than a hamlet but smaller than a town, with a population ranging from a few hundred to a few thousand. Though often located in rural areas, the term urban village is also applied to certain urban neighbourhoods. Villages are normally permanent, with fixed dwellings; however, transient villages can occur. Further, the dwellings of a village are fairly close to one another, not scattered broadly over the landscape, as a dispersed settlement. - This class may be split. "urban village" doesn't sit well and prevents relations to village biomes. - - - https://en.wikipedia.org/wiki/Village - A village is a clustered human settlement or community, larger than a hamlet but smaller than a town, with a population ranging from a few hundred to a few thousand. Though often located in rural areas, the term urban village is also applied to certain urban neighbourhoods. Villages are normally permanent, with fixed dwellings; however, transient villages can occur. Further, the dwellings of a village are fairly close to one another, not scattered broadly over the landscape, as a dispersed settlement. - - - - - - - - - - oligotrophic lake - - - - - - - - A lake which has nutrient-poor water. - See issue #282 - - - https://en.wikipedia.org/wiki/Trophic_state_index - A lake which has nutrient-poor water. - - - - - - - - - - mesotrophic lake - - - - - - - - A lake with medium nutrient levels, which allow moderate productivity. - What constitutes a "medium" nutrient level is subject to debate. The thresholds should be set either on a data level or through new subclasses. - See Issue #281. - - - - - - - - piece of plastic - - - - - - - - An abiotic mesoscopic physical object which is primarily composed of plastic. - - - - - - - - nurdle - - A cylindrical shaped pre-production plastic pellet used in manufacturing and packaging. - See Issue #289. - - - A cylindrical shaped pre-production plastic pellet used in manufacturing and packaging. - https://en.wiktionary.org/wiki/nurdle - - - - - - - - - - important site - - - - - - - - - - - - - - - Ramsar Sites - The selection process which determines the whether an area is an important site must follow the best practice specifications and guidelines developed by the International Union for Conservation of Nature (IUCN), using globally standardised criteria and thresholds. Note that the label 'important site' is chosen to align with SDGIO. The definition is that of "key biodiversity area". - Important Mammal Area - Prime Butterfly Area - Ecologically and Biologically Significant Area - Alliance for Zero Extinction Sites - IUCN Important Site for Freshwater Biodiversity - envoPolar - key biodiversity area - Important Bird Area - Important Plant Area - The narrow synonyms will be made into subclasses in their own right. - Important Site for Freshwater Biodiversity - An environmental zone which contains, as determined by an officially mandated selection process, one or more ecosystems which include, as parts, ecological communities of global significance for conservation due to their vulnerability and irreplaceability. - - - http://www.iucn.org/about/union/secretariat/offices/iucnmed/iucn_med_programme/species/key_biodiversity_areas/ - An environmental zone which contains, as determined by an officially mandated selection process, one or more ecosystems which include, as parts, ecological communities of global significance for conservation due to their vulnerability and irreplaceability. - https://en.wikipedia.org/wiki/Key_Biodiversity_Area - - - - - - - - - - public infrastructure - - infrastructure - We label this as 'public infrastructure', as the OECD definition refers specifically to public constructed features. The parts of public infrastructure are not exhaustive and should be extended as needed. - The system of public works in a country, state or region, including roads, utility lines and public buildings. - - - https://stats.oecd.org/glossary/detail.asp?ID=4511 - The system of public works in a country, state or region, including roads, utility lines and public buildings. - - - - - - - - - - public road - - - - - - - - This class is created for the SDGIO and the 'public infrastructure' class. The publically accessible attribute could be axiomatised. - A road which is publically accessible. - - - - - - - - public building - - - - - - - - A building which is publically accessible. - Created for SDGIO, we treat "public" as "publically accessible" where the semantics of access are dealt with in SDGIO. - - - - - - - - utility line - - A cable used to trasmit electricity from its point of production to its point of consumption. - - - - - - - - public utility line - - - - - - - - A utility line which services the public power grid. - Created for SDGIO, we treat "public" as "publically accessible" where the semantics of access are dealt with in SDGIO. - - - - - - - - illegal informal settlement - - A populated place where groups of housing units have been constructed on land that the occupants have no legal claim to, or occupy illegally, or where dwellings are not in compliance with current planning and building regulations. - Informal settlements may be urban or rural. - informal settlement - - - A populated place where groups of housing units have been constructed on land that the occupants have no legal claim to, or occupy illegally, or where dwellings are not in compliance with current planning and building regulations. - unstats.un.org/unsd/publication/SeriesF/SeriesF_67E.pdf - - - - - - - - - - material extraction process - - - - - - - - A planned process during which a portion of environmental material is removed from a material entity. - Created for SDGIO and intended to be a more general form of resource extraction process. - This should be an OBI planned process. Pending import. - - - - - - - - fire - - A fire is a process whereby rapid and exothermic oxidation of a material through a combustion process releases heat, light, and other products. - Not to be confused with a flame - the visible portion of gas released by a fire . Oxidation processes such as rusting or biological digestion are not subsumed here. - - - https://en.wikipedia.org/wiki/Fire - http://www.eionet.europa.eu/gemet/concept?cp=3212 - A fire is a process whereby rapid and exothermic oxidation of a material through a combustion process releases heat, light, and other products. - - - - - - - - - - wildfire - - - - - - - - - - - - - - - - - - - - - - - - - - - A conflagration which is uncontrolled and combusts material in a vegetated area, be it rural or wild. - wildland fire - The definition of "wildland" or "wild" is ambiguous. - environmental_hazards - - - - - - - - conflagration - - A fire which occurs in a large spatial area poses a risk to human life, animal life, health, and/or property. - large fire - blaze - - - A fire which occurs in a large spatial area poses a risk to human life, animal life, health, and/or property. - https://en.wikipedia.org/wiki/Conflagration - - - - - - - - - - flame - - - - - - - - - - - - - - A portion of gas which is emitted by a fire or other exothermic reaction, is of increased temperature, and typically emits light in the visible range. - - - A portion of gas which is emitted by a fire or other exothermic reaction, is of increased temperature, and typically emits light in the visible range. - https://en.wikipedia.org/wiki/Flame - - - - - - - - - - hydrocarbon flame - - - - - - - - - - - - - - - - - A flame which is produced by the combustion of hydrocarbon fuel. - - - - - - - - forest fire - - - - - - - - - - - - - - A wildfire which occurs in a forest, primarily consuming vegetation as fuel. - - - - - - - - mass gaseous flow - - - - - - - - wind - This class refers to all forms of "wind": from the familiar movement of air in the Earth's atmosphere to the solar wind. Use a subclass to be more precise. - envoPolar - A process whereby a large volume of gas moves due to a disequilibrium of physical forces. - - - https://en.wikipedia.org/wiki/Wind - A process whereby a large volume of gas moves due to a disequilibrium of physical forces. - - - - - - - - - - atmospheric wind - - - - - - - - - envoPolar - A mass gaseous flow which occurrs in a planet's atmosphere due to internal pressure disequilibria. - - - https://en.wikipedia.org/wiki/Wind - A mass gaseous flow which occurrs in a planet's atmosphere due to internal pressure disequilibria. - - - - - - - - - - stellar wind - - - - - - - - Solar wind - A stream of plasma primarily composed of electrons, protons, and alpha particles ejected from the upper atmosphere of a star. - - - https://en.wikipedia.org/wiki/Wind - A stream of plasma primarily composed of electrons, protons, and alpha particles ejected from the upper atmosphere of a star. - https://en.wikipedia.org/wiki/Solar_wind - - - - - - - - - - planetary wind - - - - - - - - - - - - - - - - - - A mass gaseous flow in which planetary atmospheric gases flow into outer space. - atmospheric escape - envoPolar - - - - - - - - mass plasma flow - - - - - - - - A process whereby a large volume of plasma moves due to a disequilibrium of physical forces. - - - - - - - - gaseous environmental material - - - - - - - - - - - - - - - - - - - This class is to be populated by inference. - gas - A material entity which is composed of one or more chemical entities and has neither independent shape nor volume but tends to expand indefinitely. - - - A material entity which is composed of one or more chemical entities and has neither independent shape nor volume but tends to expand indefinitely. - http://www.merriam-webster.com/dictionary/gas - - - - - - - - - - plasma - - - - - - - - A material entity which is composed of a volume of unbound positive and negative particles in roughly equal numbers, conducts electricity, and possesses internal magnetic fields. - An NTR for `quality of a plasma` has been posted on the PATO tracker: https://github.com/pato-ontology/pato/issues/88 - - - A material entity which is composed of a volume of unbound positive and negative particles in roughly equal numbers, conducts electricity, and possesses internal magnetic fields. - https://en.wikipedia.org/wiki/Plasma_%28physics%29 - http://www.merriam-webster.com/dictionary/plasma - - - - - - - - - - astronomical body - - celestial body - Astronomical bodies are usually cohesive, thus the use of the term 'object' sensu BFO 'object'. - An object which is naturally occuring, bound together by gravitational or electromagnetic forces, and surrounded by space. - envoAstro - - - An object which is naturally occuring, bound together by gravitational or electromagnetic forces, and surrounded by space. - https://en.wikipedia.org/wiki/Astronomical_object - - - - - - - - - - planet - - envoPolar - envoAstro - A planet is an astronomical body orbiting a star or stellar remnant that is massive enough to be rounded by its own gravity, is not massive enough to cause thermonuclear fusion, and has cleared its neighbouring region of planetesimals. - Considerable debate on the definition of planet exists. - - - A planet is an astronomical body orbiting a star or stellar remnant that is massive enough to be rounded by its own gravity, is not massive enough to cause thermonuclear fusion, and has cleared its neighbouring region of planetesimals. - https://en.wikipedia.org/wiki/Planet - http://solarsystem.nasa.gov/planets/whatisaplanet - - - - - - - - - - star - - - - - - - - envoAstro - An astronomical object which is composed primarily of luminous plasma held in a spherical form by gravitational forces. - envoPolar - Add qualities such as spherical. Request NTRs if not available in PATO. - - - https://en.wikipedia.org/wiki/Star - An astronomical object which is composed primarily of luminous plasma held in a spherical form by gravitational forces. - - - - - - - - - - planetary moon - - At times, a moon is equated to a natural satellite, however, the latter class includes a broader range of entities. Here, we currently separate moons from other satellites. We can create a logical definition of satellite using an orbital process class. - natural satellite - An astronomical body which orbits a planet of comparatively greater mass. - envoAstro - moon - - - An astronomical body which orbits a planet of comparatively greater mass. - http://solarsystem.nasa.gov/planets/solarsystem/sats - https://en.wikipedia.org/wiki/Natural_satellite - - - - - - - - - - asteroid - - envoAstro - This class is hard to define and is sometimes treated as equivalent to 'minor planet'. - - - - - - - - astronomical object - - - - - - - - - - - - 1 - - - celestial object - If there is only one astronomical body involved, this class is equivalent to ENVO:01000799. This may be problematic with reasoning, but it seems to be true to the rather fuzzy definitions found thus far. - envoAstro - An object which is composed of one or more gravitationally bound structures that are associated with a position in space. - - - An object which is composed of one or more gravitationally bound structures that are associated with a position in space. - https://en.wikipedia.org/wiki/Astronomical_object - - - - - - - - - - globular star cluster - - envoAstro - There is a need to account for open star clusters which are not gravitationally bound. This would need a superclass other than 'astronomical object', as currently defined. - A group of gravitationally bound stars. - - - A group of gravitationally bound stars. - https://en.wikipedia.org/wiki/Star_cluster - - - - - - - - - - nebula - - An interstellar cloud of dust, hydrogen, helium and other ionized gases - envoAstro - - - https://en.wikipedia.org/wiki/Nebula - An interstellar cloud of dust, hydrogen, helium and other ionized gases - - - - - - - - - - galaxy - - envoAstro - A galaxy is a gravitationally bound system of stars, stellar remnants, interstellar gas, dust, and dark matter. - - - A galaxy is a gravitationally bound system of stars, stellar remnants, interstellar gas, dust, and dark matter. - https://en.wikipedia.org/wiki/Galaxy - - - - - - - - - - dwarf planet - - Considerable debate on this definition exists. - envoAstro - An astronomical body which is in direct orbit of a star and is massive enough for its own gravity to compress it into a shape preserved by hydrostatic equilibrium (usually a spheroid), but which shares its orbit with other bodies, such as asteroids or comets. - - - An astronomical body which is in direct orbit of a star and is massive enough for its own gravity to compress it into a shape preserved by hydrostatic equilibrium (usually a spheroid), but which shares its orbit with other bodies, such as asteroids or comets. - https://en.wikipedia.org/wiki/Dwarf_planet - http://solarsystem.nasa.gov/planets/Dwarf - - - - - - - - - - minor planet - - This definition is in need of revision - it relies on negation and seems to straddle class and instance level. The definitional space here is contested and quite inhomogeneous. - A minor planet is an astronomical object in direct orbit around the Sun that is neither a planet nor exclusively classified as a comet. Minor planets can be dwarf planets, asteroids, trojans, centaurs, Kuiper belt objects, and other trans-Neptunian objects. - "Before 2006, the IAU had officially used the term minor planet. During its 2006 meeting, the IAU reclassified minor planets and comets into dwarf planets and small Solar System bodies (SSSB). Objects are called dwarf planets if their self-gravity is sufficient to achieve hydrostatic equilibrium and form an ellipsoidal shape. All other minor planets and comets are called small Solar System bodies. The IAU stated that the term minor planet may still be used, but the term small Solar System body will be preferred. However, for purposes of numbering and naming, the traditional distinction between minor planet and comet is still used." - envoAstro - - - "Before 2006, the IAU had officially used the term minor planet. During its 2006 meeting, the IAU reclassified minor planets and comets into dwarf planets and small Solar System bodies (SSSB). Objects are called dwarf planets if their self-gravity is sufficient to achieve hydrostatic equilibrium and form an ellipsoidal shape. All other minor planets and comets are called small Solar System bodies. The IAU stated that the term minor planet may still be used, but the term small Solar System body will be preferred. However, for purposes of numbering and naming, the traditional distinction between minor planet and comet is still used." - https://en.wikipedia.org/wiki/Minor_planet - - - - - A minor planet is an astronomical object in direct orbit around the Sun that is neither a planet nor exclusively classified as a comet. Minor planets can be dwarf planets, asteroids, trojans, centaurs, Kuiper belt objects, and other trans-Neptunian objects. - https://en.wikipedia.org/wiki/Minor_planet - - - - - - - - - - planetary atmosphere - - - - - - - - An atmosphere which surrounds a planet. - envoPolar - - - - - - - - nitrogen-oxygen planetary atmosphere - - - - - - - - - - - - - - - A planetary atmosphere which is composted primarily of dinitrogen and dioxygen gas. - envoPolar - An instance of this class would be Earth's atmosphere. - - - - - - - - desert pavement - - - - - - - - - - - - - - - - - - - - - serir - reg - saï - gibber - A desert surface covered with closely packed, interlocking angular or rounded rock fragments of pebble and cobble size. - - - https://en.wikipedia.org/wiki/Desert_pavement - A desert surface covered with closely packed, interlocking angular or rounded rock fragments of pebble and cobble size. - - - - - - - - - - astronomical body part - - - - - - - - A material part of an astronomical body. - envoPolar - envoAstro - - - - - - - - solid environmental material - - - - - - - - - - - - - - - - - - - An environmental material which is in a solid state. - This is a defined class: its subclasses will not be asserted, but filled by inference. - - - - - - - - liquid environmental material - - - - - - - - - - - - - - - - - - - An environmental material which is in a liquid state. - This is a defined class: its subclasses will not be asserted, but filled by inference. - envoPolar - - - - - - - - area of deciduous forest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - deciduous forest - nlcd2011 - NLCD:41 - According to the NLCD 2011, areas of deciduous forest are dominated by trees generally greater than 5 meters tall, and making up more than 20% of total vegetation cover. The NLCD 2011 continues to state that more than 75% of these trees should shed foliage simultaneously in response to seasonal change. Such thresholds - which are themselves fuzzy - are not asserted in this definition. - An area of a planet's surface which is primarily covered by a forest in which the majority of trees shed foliage simultaneously in response to seasonal change. The surfaces of this area (including the surface of the forest canopy) are in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - https://en.wikipedia.org/wiki/Exosphere - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Planetary_surface - An area of a planet's surface which is primarily covered by a forest in which the majority of trees shed foliage simultaneously in response to seasonal change. The surfaces of this area (including the surface of the forest canopy) are in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - - - - - - - - biosphere - - - - - - - - - Whether this class should be grouped with classes such as "hydrosphere" and "cryosphere" requires some discussion. - The gravitational sphere of influence referenced in this class' definition is the Hill sphere: a region in which an object dominates the attraction of satellites despite gravitational perturbations. - A biosphere is an environmental system which includes, as parts, all the living entities within the gravitational sphere of influence of an astronomical body, and the non-living and dead entities which they interact with. - envoPolar - envoAstro - - - A biosphere is an environmental system which includes, as parts, all the living entities within the gravitational sphere of influence of an astronomical body, and the non-living and dead entities which they interact with. - http://www.biology-online.org/dictionary/Biosphere - https://en.wikipedia.org/wiki/Biosphere - - - - - - - - - - cryosphere - - - - - - - - - envoPolar - envoAstro - A cryosphere is that part of a planet which is primarily composed of water is in solid form. - This is a very broad and, in practice, poorly defined term. Please consider using or requesting a more specific class. - - - A cryosphere is that part of a planet which is primarily composed of water is in solid form. - https://en.wikipedia.org/wiki/Cryosphere - - - - - - - - - - hydrosphere - - - - - - - - This is a very broad and, in practice, poorly defined term. Please consider using or requesting a more specific class. - envoAstro - An astronomical body part which is composed of the combined mass of water found on, under, and over the surface of a planet. - envoPolar - - - https://en.wikipedia.org/wiki/Hydrosphere - An astronomical body part which is composed of the combined mass of water found on, under, and over the surface of a planet. - - - - - - - - - - pedosphere - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoAstro - This is a very broad and, in practice, poorly defined term. Please consider using or requesting a more specific class. - An astronomical body part which is composed of soil, subject to soil formation processes, and found on the surface of a lithosphere. - - - https://en.wikipedia.org/wiki/Pedosphere - An astronomical body part which is composed of soil, subject to soil formation processes, and found on the surface of a lithosphere. - - - - - - - - - - photosphere - - - - - - - - An astronomical body part which is composed of those parts of a star, distal from the star's core, from which light is radiated into space. - envoAstro - - - https://en.wikipedia.org/wiki/Photosphere - An astronomical body part which is composed of those parts of a star, distal from the star's core, from which light is radiated into space. - - - - - - - - - - planetary photic zone - - envoPolar - photosphere - A planetary part which is exposed, at least periodically, to light. - In some literature, the term photosphere is used; however, this is more correctly reserved for a part of a star. - - - A planetary part which is exposed, at least periodically, to light. - http://dx.doi.org/10.1126/science.1155495 - - - - - - - - - - illuminated biosphere part - - - - - - - - An astronomical body part which includes those parts of a biosphere that are, at least periodically, illuminated and in which photosynthesis may occur. - envoPolar - Somewhat awkward at the moment, see #314. - - - http://dx.doi.org/10.1126/science.1155495 - An astronomical body part which includes those parts of a biosphere that are, at least periodically, illuminated and in which photosynthesis may occur. - - - - - - - - - - exorheic lake - - - - - - - - open lake - A lake from which water constantly flows out of under almost all climatic circumstances, maintaining low concentrations of dissolved solid relative to endorheic lakes. - - - https://en.wikipedia.org/wiki/Open_and_closed_lakes - A lake from which water constantly flows out of under almost all climatic circumstances, maintaining low concentrations of dissolved solid relative to endorheic lakes. - - - - - - - - - - eaves - - A part of a building roof which overhangs the face of a wall and, normally, projects beyond the side of a building. - - - A part of a building roof which overhangs the face of a wall and, normally, projects beyond the side of a building. - https://en.wikipedia.org/wiki/Eaves - - - - - - - - - - open eaves - - Overhanging eaves where the rafters and underside of the roof are visible from below. - - - Open eaves. (n.d.) McGraw-Hill Dictionary of Architecture and Construction. (2003). Retrieved May 16 2016 from http://encyclopedia2.thefreedictionary.com/Open+eaves - Overhanging eaves where the rafters and underside of the roof are visible from below. - - - - - - - - - - closed eaves - - Eaves in which projecting roof members are not visible, being closed from view by boarding. - - - closed eaves. (n.d.) McGraw-Hill Dictionary of Architecture and Construction. (2003). Retrieved May 16 2016 from http://encyclopedia2.thefreedictionary.com/closed+eaves - Eaves in which projecting roof members are not visible, being closed from view by boarding. - - - - - - - - - - humid air - - - - - - - - - - - - - - Air which has increased levels of water vapour. - - - - - - - - water vapour saturated air - - "Near equal" is meant to reflect that there will be fluctuations around the equilibrium point. - Air which has a partial pressure of water vapour equal or near equal to its equilibrium vapor pressure at a given temperature. - wet air - water-vapour-saturated air - - - - - - - - water-based rainfall - - - - - - - - - - - - - - rainfall - rain fall - A hydrological precipitation process in which atmospheric water vapour condenses to form droplets of liquid water massive enough to fall to a planetary surface due to the planet's gravity. - This is the process which typically happens on Earth. Other planets may have different liquids involved in the process. - envoPolar - rain - - - A hydrological precipitation process in which atmospheric water vapour condenses to form droplets of liquid water massive enough to fall to a planetary surface due to the planet's gravity. - https://en.wikipedia.org/wiki/Rain - - - - - - - - - - droplet - - - - - - - - drop - No attempt is made to differentiate between drops and droplets. This may be added, if requested. - A droplet is a small column of liquid, bounded completely or almost completely by free surfaces which maintains its shape due to the surface tension of the liquid. - - - A droplet is a small column of liquid, bounded completely or almost completely by free surfaces which maintains its shape due to the surface tension of the liquid. - https://en.wikipedia.org/wiki/Drop_%28liquid%29 - - - - - - - - - - raindrop - - - - - - - - A droplet formed by condensation of vapour in an atmosphere and which is sufficiently massive to overcome atmospheric resistance and fall to a planetary surface due to gravity. - - - - - - - - water droplet - - - - - - - - - - - - - - - - - - - A droplet of water - A defined class which should be filled by inference. - - - - - - - - water raindrop - - - - - - - - - raindrop - This is the class intended for use when describing raindrops on Earth. These typically have a diamter of 0.1 to 9 millimetres. - - - - - - - - cloud droplet - - A droplet which is spherical in shape and suspended in an atmosphere, being of too small a mass to be pulled to a planetary surface by gravity. - - - https://en.wikipedia.org/wiki/Rain - A droplet which is spherical in shape and suspended in an atmosphere, being of too small a mass to be pulled to a planetary surface by gravity. - - - - - - - - - - water-based cloud droplet - - - - - - - - - water based cloud droplet - cloud droplet - cloud drop - A cloud droplet composed primarily of water. - - - - - - - - virga - - A process in which precipitation falls from a cloud but evaporates or sublimes before making contact with a planetary surface. - - - https://en.wikipedia.org/wiki/Rain - A process in which precipitation falls from a cloud but evaporates or sublimes before making contact with a planetary surface. - - - - - - - - - - smoke - - - - - - - - - - - - - - - - - - - - - - - - - - Smoke is a collection of airborne solid and liquid particulates and gases emitted when a material undergoes combustion or pyrolysis, together with the quantity of gas that is entrained or otherwise mixed into the mass - - - Smoke is a collection of airborne solid and liquid particulates and gases emitted when a material undergoes combustion or pyrolysis, together with the quantity of gas that is entrained or otherwise mixed into the mass - https://en.wikipedia.org/wiki/Smoke - - - - - - - - - - combustion process - - - - - - - - Combustion or burning is a high-temperature exothermic redox chemical reaction between a fuel and an oxidant that produces oxidized, often gaseous products, in a mixture termed as smoke. - Unlike the "combustion" class in the Chemical Methods Ontology, this class is not necessarily a planned process. http://purl.obolibrary.org/obo/CHMO_0001473 - This class may be surrendered to REX. - - - Combustion or burning is a high-temperature exothermic redox chemical reaction between a fuel and an oxidant that produces oxidized, often gaseous products, in a mixture termed as smoke. - https://en.wikipedia.org/wiki/Combustion - - - - - - - - - - thermolysis - - - - - - - - - pyrolysis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A thermolysis process in which organic material is decomposed in the absence of oxygen. - - - - - - - - smog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A fog which is intermixed with smoke or other combustion products and their derivatives. - - - - - - - - area of evergreen forest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An area of a planet's surface which is primarily covered by a forest in which the majority of trees maintain their foliage despite seasonal change. The surfaces of this area (including the surface of the forest canopy) are in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - nlcd2011 - NLCD:42 - According to the NLCD 2011, areas of evergreen forest are dominated by trees generally greater than 5 meters tall, and making up more than 20% of total vegetation cover. The NLCD 2011 continues to state that more than 75% of these trees should maintain their foliage despite seasonal change - the canopy is never without green foliage. Such thresholds - which are themselves fuzzy - are not asserted in this definition. - evergreen forest - - - An area of a planet's surface which is primarily covered by a forest in which the majority of trees maintain their foliage despite seasonal change. The surfaces of this area (including the surface of the forest canopy) are in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Exosphere - https://en.wikipedia.org/wiki/Planetary_surface - - - - - - - - - - fog - - - - - - - - - - - - - - - - - - - - - A visible mass of cloud water droplets or ice crystals suspended in the air at or near a planetary surface. - haar - This class refers only to fog formed by materials primarily composed of water. "Fog can be considered a type of low-lying cloud and is heavily influenced by nearby bodies of water, topography, and wind conditions. In turn, fog has affected many human activities, such as shipping, travel, and warfare." https://en.wikipedia.org/wiki/Fog - - - A visible mass of cloud water droplets or ice crystals suspended in the air at or near a planetary surface. - https://en.wikipedia.org/wiki/Fog - - - - - - - - - - crystal - - - - - - - - - - - - - - This class refers to a portion of crystal and not an individual crystal. - A solid material whose constituents, such as atoms, molecules or ions, are arranged in a highly ordered microscopic structure, forming a crystal lattice that extends in all directions. - - - A solid material whose constituents, such as atoms, molecules or ions, are arranged in a highly ordered microscopic structure, forming a crystal lattice that extends in all directions. - https://en.wikipedia.org/wiki/Crystal - - - - - - - - - - water ice crystal - - - - - - - - - - A crystal which is primarily composed of water ice. - ice crystal - envoPolar - - - - - - - - hair ice - - - - - - - - A type of water ice that forms on dead wood with the assistance of the fungus Exidiopsis effusa and takes the shape of fine, silky hair. - envoPolar - ice wool - frost beard - - - A type of water ice that forms on dead wood with the assistance of the fungus Exidiopsis effusa and takes the shape of fine, silky hair. - https://en.wikipedia.org/wiki/Hair_ice - - - - - - - - - - flower strip - - A vegetated area which includes a community of flowering plants that provide food for local pollinators. - Flower strips are often the last refuge organsims whose habitats have been replaced by croplands, urban areas, and othe anthropogenic environments. This has considerable consequences for pollination and other ecosystem services. - This may or may not be an anthropogenic environment, but its boundaries are maintained by human activity. - - - A vegetated area which includes a community of flowering plants that provide food for local pollinators. - http://dx.doi.org/10.1111/1365-2664.12605 - - - - - https://jappliedecologyblog.wordpress.com/2016/02/09/flower-strips-support-ecosystem-services-only-when-they-have-the-right-flowers/?platform=hootsuite - Flower strips are often the last refuge organsims whose habitats have been replaced by croplands, urban areas, and othe anthropogenic environments. This has considerable consequences for pollination and other ecosystem services. - - - - - - - - - - flower-rich field margin strip - - - - - - - - Flower strips are often the last refuge organsims whose habitats have been replaced by croplands, urban areas, and othe anthropogenic environments. This has considerable consequences for pollination and other ecosystem services. - A flower strip which is present at the margins of cultivated fields. - - - A flower strip which is present at the margins of cultivated fields. - http://dx.doi.org/10.1111/1365-2664.12605 - - - - - Flower strips are often the last refuge organsims whose habitats have been replaced by croplands, urban areas, and othe anthropogenic environments. This has considerable consequences for pollination and other ecosystem services. - https://jappliedecologyblog.wordpress.com/2016/02/09/flower-strips-support-ecosystem-services-only-when-they-have-the-right-flowers/?platform=hootsuite - - - - - - - - - - clathrate material - - clathrate compound material - This class is not to be confused with CHEBI's "clathrate". The latter refers to the pure substance, while this class refers to clathrates found in nature. -"Traditionally, clathrate compounds are polymeric and completely envelop the guest molecule, but in modern usage clathrates also include host-guest complexes and inclusion compounds." https://en.wikipedia.org/wiki/Clathrate_compound - Not sure if this should be a subclass of crystal. If it is removed, remember to assert that it is a solid. - A material which is primarily composed of a substance arranged as a lattice which can trap or contain other molecules. - clathrate crystal material - envoPolar - - - A material which is primarily composed of a substance arranged as a lattice which can trap or contain other molecules. - https://en.wikipedia.org/wiki/Clathrate_compound - - - - - - - - - - methane clathrate - - A clathrate material in which a large amount of methane is trapped within a crystal structure of water, forming a solid similar to ice. - envoPolar - methane ice - hydromethane - fire ice - methane hydrate - natural gas hydrate - gas hydrate - - - https://en.wikipedia.org/wiki/Methane_clathrate - A clathrate material in which a large amount of methane is trapped within a crystal structure of water, forming a solid similar to ice. - - - - - - - - - - coral bleaching process - - - - - - - - orcid.org/0000-0001-8369-8114 - Add relations to coral organisms in NCBI taxonomy. - coral bleaching - An environmental process in which coral expels the symbiotic algae living in its tissue as a result of stress, causing the coral to turn white. - - - http://oceanservice.noaa.gov/facts/coral_bleach.html - An environmental process in which coral expels the symbiotic algae living in its tissue as a result of stress, causing the coral to turn white. - - - - - - - - - - marl - - - - - - - - - - - - - - - - - - - - A request from the Agronomy Ontology in Issue #345. - Marl is a mass of calcium carbonate derived from mollusk shells and mixed with silt and clay. - - - http://corn.agronomy.wisc.edu/Management/pdfs/a3671.pdf - Marl is a mass of calcium carbonate derived from mollusk shells and mixed with silt and clay. - - - - - - - - - - tropical marine coral reef biome - - - - - - - - A marine coral reef biome which is occurs in a region with a tropical climate. - wwfBiome - - - - - - - - area of mixed forest - - - - - - - - - - - - - - - - - - - - NLCD:43 - nlcd2011 - mixed forest - An area of a planet's surface which is primarily covered by a forest in which the majority of trees maintain their foliage despite seasonal change. The surfaces of this area (including the surface of the forest canopy) are in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - According to the NLCD 2011, areas of mixed forest are dominated by trees generally greater than 5 meters tall, and making up more than 20% of total vegetation cover. The NLCD 2011 continues to state that neither deciduous or evergreen trees make up more than 75% of the total tree cover. Such thresholds - which are themselves fuzzy - are not asserted in this definition. - - - https://en.wikipedia.org/wiki/Exosphere - An area of a planet's surface which is primarily covered by a forest in which the majority of trees maintain their foliage despite seasonal change. The surfaces of this area (including the surface of the forest canopy) are in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://en.wikipedia.org/wiki/Planetary_surface - https://www.mrlc.gov/nlcd11_leg.php - - - - - - - - - - temperate marginal sea biome - - wwfBiome - A component of the WWF Temperate Shelf and seas ecoregions grouping - - - - - - - - temperate mediterranean sea biome - - wwfBiome - - - - - - - - marine upwelling biome - - - - - - - - - - - - - - - - - - A marine biome which contains communities adapted to living in an environment determined by an upwelling process. - - - - - - - - tropical marine upwelling biome - - - - - - - - wwfBiome - - - - - - - - temperate marine upwelling biome - - - - - - - - wwfBiome - - - - - - - - area of dwarf scrub - - - - - - - - - - - - - - - - - - - - dwarf scrub - According to the NLCD 2011, areas of dwarf scrub are dominated by shrubs less than 20 centimeters tall with shrub canopy typically greater than 20% of total vegetation. This type is often co-associated with grasses, sedges, herbs, and non-vascular vegetation. The NLCD 2011 notes that this is intended as an Alaska only land cover. Such thresholds - which are themselves fuzzy - are not asserted in this definition. - An area of a planet's surface which is partly covered by shrubs with ground-hugging stems or low growth habit, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - area of subshrub - NLCD:51 - nlcd2011 - As noted in Wikipedia: "Because the criteria are matters of degree rather than of kind, the definition of a subshrub is not sharply distinguishable from that of a shrub" - - - https://en.wikipedia.org/wiki/Subshrub - As noted in Wikipedia: "Because the criteria are matters of degree rather than of kind, the definition of a subshrub is not sharply distinguishable from that of a shrub" - - - - - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Planetary_surface - https://en.wikipedia.org/wiki/Exosphere - https://en.wikipedia.org/wiki/Subshrub - An area of a planet's surface which is partly covered by shrubs with ground-hugging stems or low growth habit, in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - - - - - - - - turbulent aquatic surface layer - - - - - - - - - - - - - - - overfall - A turbulent surface layer of a water body maintained by strong currents setting over submerged ridges or shoals or by winds opposing a current. - This should likely be a part of the surface layer rather than a subclass. - - - A turbulent surface layer of a water body maintained by strong currents setting over submerged ridges or shoals or by winds opposing a current. - http://www.merriam-webster.com/dictionary/overfall - - - - - - - - - - overflow structure - - A structure which is built into the container of a water body which allows water to flow out of the container when the volume of the water contained exceeds that of its cavity. - overfall - - - http://www.merriam-webster.com/dictionary/overfall - A structure which is built into the container of a water body which allows water to flow out of the container when the volume of the water contained exceeds that of its cavity. - - - - - - - - - - mouth of liquid discharge conduit - - overfall - A site at the terminus of a liquid conveyance conduit where the liquid carried is discharged into the sea or a river. - - - http://www.collinsdictionary.com/dictionary/english/overfall - A site at the terminus of a liquid conveyance conduit where the liquid carried is discharged into the sea or a river. - - - - - - - - - - electric power system - - An electric power system is a network of electrical components used to supply, transfer and use electric power. - - - https://en.wikipedia.org/wiki/Electric_power_system - An electric power system is a network of electrical components used to supply, transfer and use electric power. - - - - - - - - - - photovoltaic system - - - - - - - - A photovoltaic system is a power system designed to supply usable solar power by means of photovoltaics. It consists of an arrangement of several components, including solar panels to absorb and convert sunlight into electricity, a solar inverter to change the electric current from DC to AC, as well as mounting, cabling and other electrical accessories to set up a working system. - - - A photovoltaic system is a power system designed to supply usable solar power by means of photovoltaics. It consists of an arrangement of several components, including solar panels to absorb and convert sunlight into electricity, a solar inverter to change the electric current from DC to AC, as well as mounting, cabling and other electrical accessories to set up a working system. - https://en.wikipedia.org/wiki/Photovoltaic_system - - - - - - - - - - solar panel array - - photovoltaic panel array - A group of solar panels, typically belonging to the same photovoltaic system, arranged to maximise interception of solar radiation. - - - https://en.wikipedia.org/wiki/Photovoltaic_system - A group of solar panels, typically belonging to the same photovoltaic system, arranged to maximise interception of solar radiation. - - - - - - - - - - domestic solar panel array - - - - - - - - domestic photovoltaic panel array - A solar panel array that is integrated into the power system of a human dwelling. - - - - - - - - area of scrub - - - - - - - - - - - - - - - - - - - - NLCD:52 - As noted in Wikipedia: "Because the criteria are matters of degree rather than of kind, the definition of a subshrub is not sharply distinguishable from that of a shrub" - - According to the NLCD 2011, areas of scrub or shrub are dominated by shrubs; less than 5 meters tall with shrub canopy typically greater than 20% of total vegetation. This class includes true shrubs, young trees in an early successional stage or trees stunted from environmental conditions. Such thresholds - which are themselves fuzzy - are not asserted in this definition. - nlcd2011 - shrub/scrub - area of shrub - - - https://en.wikipedia.org/wiki/Subshrub - As noted in Wikipedia: "Because the criteria are matters of degree rather than of kind, the definition of a subshrub is not sharply distinguishable from that of a shrub" - - - - - https://en.wikipedia.org/wiki/Planetary_surface - http://dx.doi.org/10.1016/j.rse.2015.07.014 - https://www.mrlc.gov/nlcd11_leg.php - - https://en.wikipedia.org/wiki/Exosphere - https://en.wikipedia.org/wiki/Subshrub - - - - - - - - - - ground deformation process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This is a class to be filled by inference. - A process in which a solid planetary surface is deformed. - - - - - - - - puddle of water - - This class refers only to puddles of water, see https://github.com/EnvironmentOntology/envo/issues/337 - A puddle is a small accumulation of water, on a surface. It can form either by pooling in a depression on the surface, or by surface tension upon a flat surface. - - - A puddle is a small accumulation of water, on a surface. It can form either by pooling in a depression on the surface, or by surface tension upon a flat surface. - https://en.wikipedia.org/wiki/Puddle - - - - - - - - - - balast water - - - - - - - - This definition could be improved, as ballast water is often used in more general ways, beyond the water contained in a ballast tank at any given time. For example, water which has just been released from a ballast tank is often still refered to as ballast water. - Ballast water is water contained in the ballast tanks of sea-going vessels. - - - https://en.wikipedia.org/wiki/Sailing_ballast#Water_ballast - https://en.wikipedia.org/wiki/Ballast_water_discharge_and_the_environment - http://www.nature.com/news/four-routes-to-better-maritime-governance-1.21051?WT.mc_id=TWT_NatureNews - Ballast water is water contained in the ballast tanks of sea-going vessels. - - - - - - - - - - ballast tank - - Consider using http://purl.obolibrary.org/obo/OBI_0000967 as a super-class - A ballast tank is a compartment within a boat, ship or other floating structure that holds water, which is used as ballast to provide stability for a vessel. - - - https://en.wikipedia.org/wiki/Ballast_tank - A ballast tank is a compartment within a boat, ship or other floating structure that holds water, which is used as ballast to provide stability for a vessel. - - - - - - - - - - hailfall - - - - - - - - - environmental_hazards - hail fall - envoPolar - Hailfall is a hydrological process in which balls or irregular lumps of water ice formed in thunderstorm or cumulonimbus clouds fall to a planetary surface. - - - Hailfall is a hydrological process in which balls or irregular lumps of water ice formed in thunderstorm or cumulonimbus clouds fall to a planetary surface. - https://en.wikipedia.org/wiki/Hail - - - - - - - - - - precipitation process - - A precipitation process is a process in which a portion of some substance segregates from a material in which that substance or its precursors were dissolved or suspended in and settles due to a force such as gravity or centrifugal force. - - - https://en.wikipedia.org/wiki/Precipitation - A precipitation process is a process in which a portion of some substance segregates from a material in which that substance or its precursors were dissolved or suspended in and settles due to a force such as gravity or centrifugal force. - https://en.wikipedia.org/wiki/Precipitation_%28chemistry%29 - - - - - - - - - - storm - - The threshold of what constitutes "strong" perturbation is not defined here due to considerable semantic variation. If a specific threshold is required, please request a new term. - A storm is an environmental process in which an environmental system and the processes it participates in are strongly perturbed by external forcings. These forcings typically increase the rates of processes unfolding in the system, relative to their normal rates. - environmental_hazards - - - - - - - - atmospheric storm - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - An atmospheric storm is a process in which a portion of an astronomical body's atmosphere is strongly perturbed from its prevaling weather. - - - https://en.wikipedia.org/wiki/Storm - An atmospheric storm is a process in which a portion of an astronomical body's atmosphere is strongly perturbed from its prevaling weather. - - - - - - - - - - thunderstorm - - - - - - - - lightning storm - An atmospheric storm which occurs in cumulonimbus clouds and during which lightning and thunder occur. - electrical storm - environmental_hazards - Thunderstorms may or may not involve processes which result in strong winds, heavy rain, snow, sleet, hail, or other forms of precipitation. - - - - - - - - rainstorm - - - - - - - - - - - - - - - - - - environmental_hazards - An atmospheric storm during which intense rainfall occurs. - - - - - - - - hailstorm - - - - - - - - - - - - - - - - - - - An atmospheric storm which intense hailfall occurs. - environmental_hazards - envoPolar - - - - - - - - snowstorm - - - - - - - - - - - - - - - - - - envoPolar - environmental_hazards - An atmospheric storm during which intense snowfall occurs. - - - - - - - - icestorm - - envoPolar - glaze event - silver thaw - An atmospheric storm during which freezing rain falls and accumulates as ice on exposed surfaces. - environmental_hazards - The U.S. National Weather Service defines an ice storm as a storm which results in the accumulation of at least 0.25-inch (6.4 mm) of ice on exposed surfaces. - - - The U.S. National Weather Service defines an ice storm as a storm which results in the accumulation of at least 0.25-inch (6.4 mm) of ice on exposed surfaces. - Hauer RJ, Dawson JO, Werner LP (2006) Trees and Ice Storms - The Development of Ice Storm-Resistant Urban Tree Populations (2 ed.). College of Natural Resources, University of Wisconsin–Stevens Point, and the Department of Natural Resources and Environmental Sciences and the Office of Continuing Education, University of Illinois at Urbana-Champaign. http://web.extension.uiuc.edu/forestry/publications/pdf/urban_community_forestry/trees_and_ice_storms_2006.pdf - https://en.wikipedia.org/wiki/Ice_storm - - - - - https://en.wikipedia.org/wiki/Ice_storm - An atmospheric storm during which freezing rain falls and accumulates as ice on exposed surfaces. - - - - - - - - - - area of developed open space - - - - - - - - - - - - - - - - - - - - According to the NLCD 2011, areas of developed open space are dominated by vegetation such as lawn grasses and include large-lot single-family housing units, parks, golf courses. Further, it is asserted that "impervious surfaces", most likely referring to concrete and related substances, cover less than 20% of the area. Such thresholds - which are themselves fuzzy - are not asserted in this definition. - developed, open space - nlcd2011 - This class is in need of refinement, particularly in linking to other entities in the ontology. This would be helped by more clear listings of entities included in this classification. However, the class is suitable for use in annotating remotely sensed land types. - NLCD:21 - An area of a planet's surface which is primarily covered by cultivated or anthropically maintained vegetation planted for recreation, erosion control, or aesthetic purposes interspersed by constructed or manufactured objects and materials. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - https://en.wikipedia.org/wiki/Exosphere - An area of a planet's surface which is primarily covered by cultivated or anthropically maintained vegetation planted for recreation, erosion control, or aesthetic purposes interspersed by constructed or manufactured objects and materials. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://en.wikipedia.org/wiki/Planetary_surface - https://www.mrlc.gov/nlcd11_leg.php - - - - - - - - - - area of developed space with low usage intensity - - - - - - - - - - - - - - - - - - - - developed, low intensity - An area of a planet's surface which is primarily covered by cultivated or anthropically maintained vegetation and by constructed or manufactured objects and materials covering up to approximately half its extent. Such areas are used for low intensity purposes such as accommodating collections of single-family residential units. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - NLCD:22 - According to the NLCD 2011, areas of developed space under low intensity usage are dominated by vegetation such as lawn grasses and include collections of single-family housing units. Further, it is asserted that "impervious surfaces", most likely referring to concrete and related substances, cover between than 20 - 49% of the area. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. - This class is in need of refinement, particularly in linking to other entities in the ontology. This would be helped by more clear listings of entities included in this classification. However, the class is suitable for use in annotating remotely sensed land types. - nlcd2011 - - - https://en.wikipedia.org/wiki/Exosphere - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is primarily covered by cultivated or anthropically maintained vegetation and by constructed or manufactured objects and materials covering up to approximately half its extent. Such areas are used for low intensity purposes such as accommodating collections of single-family residential units. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://en.wikipedia.org/wiki/Planetary_surface - - - - - - - - - - area of developed space with medium usage intensity - - - - - - - - - - - - - - - - - - - - nlcd2011 - This class is in need of refinement, particularly in linking to other entities in the ontology. This would be helped by more clear listings of entities included in this classification. However, the class is suitable for use in annotating remotely sensed land types. - developed, medium intensity - NLCD:23 - According to the NLCD 2011, areas of developed space under medium intensity usage are dominated by vegetation such as lawn grasses and include collections of single-family housing units. Further, it is asserted that "impervious surfaces", most likely referring to concrete and related substances, cover between than 50 - 79% of the area. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. - An area of a planet's surface which is primarily covered by constructed or manufactured objects and materials covering from half to three-forths of its extent and by cultivated or anthropically maintained vegetation. Such areas are used for medium intensity purposes such as accommodating dense collections of single-family residential units. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - An area of a planet's surface which is primarily covered by constructed or manufactured objects and materials covering from half to three-forths of its extent and by cultivated or anthropically maintained vegetation. Such areas are used for medium intensity purposes such as accommodating dense collections of single-family residential units. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Exosphere - https://en.wikipedia.org/wiki/Planetary_surface - - - - - - - - - - area of developed space with high usage intensity - - - - - - - - - - - - - - - - - - - - According to the NLCD 2011, areas of developed space under high intensity usage are dominated by constructed features where humans reside and work. Examples include apartment complexes, row houses and commercial/industrial facilities. Further, it is asserted that "impervious surfaces", most likely referring to concrete and related substances, cover between than 80 - 100% of the area. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. - This class is in need of refinement, particularly in linking to other entities in the ontology. This would be helped by more clear listings of entities included in this classification. However, the class is suitable for use in annotating remotely sensed land types. - nlcd2011 - NLCD:24 - An area of a planet's surface which is primarily covered by constructed or manufactured objects and materials, possibly interspersed with cultivated or anthropically maintained vegetation. Such areas are used for hgih intensity purposes such as accommodating dense and multi-occupant residential, commercial, and industrial units. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - developed, high intensity - - - https://en.wikipedia.org/wiki/Exosphere - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is primarily covered by constructed or manufactured objects and materials, possibly interspersed with cultivated or anthropically maintained vegetation. Such areas are used for hgih intensity purposes such as accommodating dense and multi-occupant residential, commercial, and industrial units. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://en.wikipedia.org/wiki/Planetary_surface - - - - - - - - - - area of sedge- and forb-dominated herbaceious vegetation - - - - - - - - - - - - - - nlcd2011 - sedge/herbaceous - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - According to the NLCD 2011, at least 80% of these areas are covered by sedge or forbs. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. The NLCD description also notes that land covered by sedge tundra and sedge tussock tundra are subsumed in this category. The original definition notes that this is intended as an "Alaska only" category. - NLCD:72 - An area of a planet's surface which is primarily covered by sedges or forbs, possibly interpersed with grasses or grass-like plants. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - https://en.wikipedia.org/wiki/Exosphere - https://en.wikipedia.org/wiki/Planetary_surface - An area of a planet's surface which is primarily covered by sedges or forbs, possibly interpersed with grasses or grass-like plants. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://www.mrlc.gov/nlcd11_leg.php - - - - - - - - - - area of gramanoid or herbaceous vegetation - - - - - - - - - - - - - - - - - - - - NLCD:71 - An area of a planet's surface which is primarily covered by gramanoid or herbaceous vegetation and which is not subject to intensive management by humans. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - grassland/herbaceous - According to the NLCD 2011, at least 80% of these areas are covered by grasslands or non-woody, herbaceous plants. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. The NLCD description also notes that, while no "intensive" management such as tilling is performed in these areas, they may be used for grazing. - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - nlcd2011 - - - An area of a planet's surface which is primarily covered by gramanoid or herbaceous vegetation and which is not subject to intensive management by humans. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Planetary_surface - https://en.wikipedia.org/wiki/Exosphere - - - - - - - - - - area of lichen-dominated vegetation - - - - - - - - - - - - - - - - - - - - lichens - According to the NLCD 2011, at least 80% of these areas are covered by lichens. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. The original definition notes that this is intended as an "Alaska only" category. - NLCD:73 - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - An area of a planet's surface which is primarily covered by fruticose or foliose lichens and which is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - nlcd2011 - envoPolar - - - An area of a planet's surface which is primarily covered by fruticose or foliose lichens and which is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://www.mrlc.gov/nlcd11_leg.php - https://en.wikipedia.org/wiki/Planetary_surface - https://en.wikipedia.org/wiki/Exosphere - - - - - - - - - - area of moss-dominated vegetation - - - - - - - - - - - - - - NLCD:74 - moss - An area of a planet's surface which is primarily covered by mosses and which is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - According to the NLCD 2011, at least 80% of these areas are covered by mosses. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. The original definition notes that this is intended as an "Alaska only" category. - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - nlcd2011 - - - https://en.wikipedia.org/wiki/Planetary_surface - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is primarily covered by mosses and which is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://en.wikipedia.org/wiki/Exosphere - - - - - - - - - - area of pastureland or hayfields - - - - - - - - - - - - - - - - - - - - - - - - - - - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - nlcd2011 - pasture/hay - NLCD:81 - An area of a planet's surface which is partly covered by planted grasses, legumes, or mixtures of grass and legumes and used for livestock grazing or the production of seed or hay crops. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - According to the NLCD 2011, at least 20% of these areas are covered by pasturelands or hayfields. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. The NLCD also notes that the crops are grown on a perennial cycle in these areas. - - - https://en.wikipedia.org/wiki/Planetary_surface - https://en.wikipedia.org/wiki/Exosphere - An area of a planet's surface which is partly covered by planted grasses, legumes, or mixtures of grass and legumes and used for livestock grazing or the production of seed or hay crops. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://www.mrlc.gov/nlcd11_leg.php - - - - - - - - - - area of cropland - - - - - - - - - - - - - - - - - - - - NLCD:82 - nlcd2011 - An area of a planet's surface which is partly covered either by annual crops and perennial woody crops or by actively tilled land. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - According to the NLCD 2011, at least 20% of these areas are covered by croplands or actively tilled land. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. The NLCD provides corn, soybeans, vegetables, tobacco, and cotton as examples of annual crops and the trees and vines in orchards and vineyards as examples of perennial woody crops. - cultivated crops - - - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is partly covered either by annual crops and perennial woody crops or by actively tilled land. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - https://en.wikipedia.org/wiki/Planetary_surface - https://en.wikipedia.org/wiki/Exosphere - - - - - - - - - - area of woody wetland - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - nlcd2011 - An area of a planet's surface which is partly covered by forest or shrubland vegetation and where the underlying soil or substrate is periodically saturated with or covered by water. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - According to the NLCD 2011, at least 20% of these areas are covered by forest or shrubland vegetation. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. - woody wetlands - NLCD:90 - - - https://en.wikipedia.org/wiki/Exosphere - https://en.wikipedia.org/wiki/Planetary_surface - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is partly covered by forest or shrubland vegetation and where the underlying soil or substrate is periodically saturated with or covered by water. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - - - - - - - - area of emergent herbaceous wetland - - - - - - - - - - - - - - - - - - - - nlcd2011 - NLCD:95 - This class is in need of refinement, particularly in linking to other entities in the ontology. However, it is suitable for use in annotating remotely sensed land types. - An area of a planet's surface which is primarily covered by perennial herbaceous vegetation and where the underlying soil or substrate is periodically saturated with or covered by water. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - emergent herbaceous wetlands - According to the NLCD 2011, at least 80% of these areas are covered by herbaceous vegetation. Such thresholds - which are themselves fuzzy - are not strictly asserted in this definition. - - - https://en.wikipedia.org/wiki/Planetary_surface - https://en.wikipedia.org/wiki/Exosphere - https://www.mrlc.gov/nlcd11_leg.php - An area of a planet's surface which is primarily covered by perennial herbaceous vegetation and where the underlying soil or substrate is periodically saturated with or covered by water. This area is in contact with an atmospheric column extending from the planetary boundary layer to the planet's exosphere with little to no physical obstruction. - - - - - - - - - - snowfall - - - - - - - - A hydrological process in which irregular aggregates of snow fall to a planetary surface. - envoPolar - snow fall - environmental_hazards - - - - - - - - freezing rainfall - - - - - - - - - - - - - - - - - - environmental_hazards - freezing rain - METAR:FZRA - Rainfall which occurs when the temperature of a planetary surface and its surrounding atmosphere are below the freezing point of water, resulting in supercooled raindrops which freeze upon impact with solid surfaces. - envoPolar - freezing rain fall - - - Rainfall which occurs when the temperature of a planetary surface and its surrounding atmosphere are below the freezing point of water, resulting in supercooled raindrops which freeze upon impact with solid surfaces. - https://en.wikipedia.org/wiki/Freezing_rain - - - - - - - - - - electrostatic discharge process - - This should probably be moved to an ontology of physical processes when one is created, and be imported back into ENVO. - A process during which a sudden flow of electricity occurs, often accompanied by a visible release of photons, between two electrically charged objects due to contact, an electrical short, or dielectric breakdown. - - - A process during which a sudden flow of electricity occurs, often accompanied by a visible release of photons, between two electrically charged objects due to contact, an electrical short, or dielectric breakdown. - https://en.wikipedia.org/wiki/Electrostatic_discharge - - - - - - - - - - atmospheric lightning - - - - - - - - - - - - - - - - - - - 1 - - - A sudden electrostatic discharge which occurs during an electrical storm as differentially charged atmospheric entities equalise their charge. - lightning - environmental_hazards - - - A sudden electrostatic discharge which occurs during an electrical storm as differentially charged atmospheric entities equalise their charge. - https://en.wikipedia.org/wiki/Lightning - - - - - - - - - - intercloud lightning - - - - - - 2 - - - environmental_hazards - A lightning process during which electrostatic discharge occurs between at least two clouds. - CC lightning - cloud-cloud lightning - - - - - - - - intracloud lightning - - - - - - 1 - - - A lightning process during which electrostatic discharge occurs within a single cloud. - IC lightning - environmental_hazards - - - - - - - - lightning strike - - - - - - - - - - - - - - - - - - - - - - - cloud-ground lightning - environmental_hazards - CG lightning - A lightning process during which electrostatic discharge occurs between a cloud and an object on a planetary surface, or a planetary surface itself. - - - - - - - - lightning flash - - - - - - 1 - - - A lightning process during which electrostatic discharge occurs within a single cloud or between multiple clouds. - environmental_hazards - - - - - - - - blizzard - - - - - - - - environmental_hazards - To qualify a snowstorm as a blizzard, some sources require the windspeed to be at least 56 km/h and the duration of the storm to be at least three hours. We set no such hard boundaries in this definition, as this should be done with reference to local standards. - A blizzard is a severe snowstorm during which snowfall is transported by strong winds, sustained for several hours. - envoPolar - - - To qualify a snowstorm as a blizzard, some sources require the windspeed to be at least 56 km/h and the duration of the storm to be at least three hours. We set no such hard boundaries in this definition, as this should be done with reference to local standards. - https://en.wikipedia.org/wiki/Blizzard - - - - - https://en.wikipedia.org/wiki/Blizzard - A blizzard is a severe snowstorm during which snowfall is transported by strong winds, sustained for several hours. - - - - - - - - - - ground blizzard - - This form of blizzard does not involve snowfall as the snow which is blown by the winds is already present on the ground. To qualify a snowstorm as a blizzard, some sources require the windspeed to be at least 56 km/h and the duration of the storm to be at least three hours. We set no such hard boundaries in this definition, as this should be done with reference to local standards. - environmental_hazards - A ground blizzard is a storm during which snow which has settled on a planetary surface is resuspended in and transported through its atmosphere by strong winds, sustained for several hours. - - - https://en.wikipedia.org/wiki/Blizzard - This form of blizzard does not involve snowfall as the snow which is blown by the winds is already present on the ground. To qualify a snowstorm as a blizzard, some sources require the windspeed to be at least 56 km/h and the duration of the storm to be at least three hours. We set no such hard boundaries in this definition, as this should be done with reference to local standards. - - - - - https://en.wikipedia.org/wiki/Blizzard - A ground blizzard is a storm during which snow which has settled on a planetary surface is resuspended in and transported through its atmosphere by strong winds, sustained for several hours. - - - - - - - - - - shrimp pond - - "Shrimp" is a common language term that may refer to multiple crustacean species, typically in the groups Caridea or Dendrobranchiatamarine. These may be marine or freshwater organisms. - There are multiple subclasses possible for this term, including ponds managed by the traditional (extensive), improved traditional (semi-intensive), and intensive methods of cultivation. - A pond or lake used for the artificial culture of shrimp. - - - https://en.wikipedia.org/wiki/Shrimp_farming - A pond or lake used for the artificial culture of shrimp. - http://www.fao.org/docrep/003/x6941e/x6941e04.htm#bm04 - http://www.fao.org/3/contents/76b2641d-29e4-51b0-b9e5-6ca46beb0d9f/AC210E02.htm - http://orcid.org/0000-0002-8260-7097 - - - - - - - - - - aquaculture process - - - - - - - - - - - - - - - - - - - - - A process in which humans rear animals or plants in bodies of water for harvest and consumption. - In 1988, the FAO introduced a definition of aquaculture which reduces its confusion with capture fisheries: Aquaculture is the farming of aquatic organisms, including fish, molluscs, crustaceans and aquatic plants. Farming implies some form of intervention in the rearing process to enhance production, such as regular stocking, feeding, protection from predators, etc. Farming also implies individual or corporate ownership of the stock being cultivated. For statistical purposes, aquatic organisms which are harvested by an individual or corporate body which has owned them throughout their rearing period contribute to aquaculture, while aquatic organisms which are exploitable by the public as a common property resources, with or without appropriate licences, are the harvest of fisheries. - Expand the sites of occurrence listed as axioms as new terms emerge. - - - http://www.fao.org/docrep/003/x6941e/x6941e04.htm#bm04 - A process in which humans rear animals or plants in bodies of water for harvest and consumption. - - - - - - - - - - feasting pit site - - An archeological site which contains holes humans had dug in the ground, or their remnants, for the purpose of storing and distributing food, drink, and both functional or ritualistic implements during communal eating and drinking. - Feasting pits had a wide variety of social functions throughout time, which extended in scope from the single family group to multiple tribes or villages. - - - Romero, D., & Lauzon, A. (2015). The Art of Feasting: Style and Identity in a Ritual Area at the Harris Site. In. In L. Ludeman (Ed.), Collected Papers from the 18th Biennial Mogollon Archaeology Conference (pp. 43-50). Las Cruces, New Mexico: Privately published by Lonnie Ludeman. - An archeological site which contains holes humans had dug in the ground, or their remnants, for the purpose of storing and distributing food, drink, and both functional or ritualistic implements during communal eating and drinking. - Pappa, M., Halstead, P., Kotsakis, K., & Urem-Kotsou, D. (2004). Evidence for large-scale feasting at Late Neolithic Makriyalos, N Greece. Food, cuisine and society in prehistoric Greece, 5, 16. - - - - - - - - - - geothermally heated river - - A river which is heated by geothermal processes such as heat exchange with lava or hydrothermal percolation. - boiling river - A key example is the Boiling River, or Shanay-timpishka, of the Peruvian Amazon. This river is of high cultural significance and is protected by the shaman of the small town Mayantuyacu, a secluded healing center. - - - http://www.atlasobscura.com/places/the-boiling-river-of-the-amazon - A key example is the Boiling River, or Shanay-timpishka, of the Peruvian Amazon. This river is of high cultural significance and is protected by the shaman of the small town Mayantuyacu, a secluded healing center. - - - - - A river which is heated by geothermal processes such as heat exchange with lava or hydrothermal percolation. - http://www.atlasobscura.com/places/the-boiling-river-of-the-amazon - - - - - - - - - - biocrust - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A surface layer of a solid environmental material which is formed by the presence and activity of photosynthetic microbial assemblages colonising it. - biological crust - - - A surface layer of a solid environmental material which is formed by the presence and activity of photosynthetic microbial assemblages colonising it. - http://dx.doi.org/10.1038/ncomms10373 - https://en.wikipedia.org/wiki/Biological_soil_crust - - - - - - - - - - soil biocrust - - - - - - - - soil biological crust - biological soil crust - Couradeau et al. (2016) assert that any albedo reductions associated with biocrust development are due largely to the accumulation of the microbial sunscreen, scytonemin. - A biocrust which is formed by photosynthetic microbial assemblages colonising the surface layer of a portion of arid soil. Through their successional dynamics, these communities reduce the soil surface's albedo, impart it with stability against erosion, modify its hydrology, and promote its fertility. - microbiotic soil - cryptobiotic soil - microphytic soil - cryptogamic soil - - - https://en.wikipedia.org/wiki/Biological_soil_crust - A biocrust which is formed by photosynthetic microbial assemblages colonising the surface layer of a portion of arid soil. Through their successional dynamics, these communities reduce the soil surface's albedo, impart it with stability against erosion, modify its hydrology, and promote its fertility. - http://dx.doi.org/10.1038/ncomms10373 - - - - - http://dx.doi.org/10.1038/ncomms10373 - Couradeau et al. (2016) assert that any albedo reductions associated with biocrust development are due largely to the accumulation of the microbial sunscreen, scytonemin. - - - - - - - - - - automated teller machine - - cashpoint - automatic telling machine - bankomat - cash machine - automatic teller machine - cashline - automated banking machine - An electronic telecommunications device that enables the customers of a financial institution to perform financial transactions, particularly cash withdrawal, without the need for a human cashier, clerk or bank teller. - minibank - - - An electronic telecommunications device that enables the customers of a financial institution to perform financial transactions, particularly cash withdrawal, without the need for a human cashier, clerk or bank teller. - https://en.wikipedia.org/wiki/Automated_teller_machine - http://dx.doi.org/10.1128/mSphere.00226-16 - - - - - - - - - - cloud condensation nucleus - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CCN - A solid or liquid particle, usually 0.2 micrometers in diameter, on which water vapour condenses, seeding cloud formation. - envoPolar - cloud seed - - - A solid or liquid particle, usually 0.2 micrometers in diameter, on which water vapour condenses, seeding cloud formation. - https://en.wikipedia.org/wiki/Cloud_condensation_nuclei - - - - - - - - - - nucleation of cloud condensation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cloud seeding process - A process during which a solid particle or liquid droplet catalyses the condensation of water vapour in an atmosphere. - - - A process during which a solid particle or liquid droplet catalyses the condensation of water vapour in an atmosphere. - https://en.wikipedia.org/wiki/Cloud_condensation_nuclei - - - - - - - - - - ablation zone - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - An environmental zone which is primarily composed of water ice, present as a glacier or an ice sheet, and in which ice loss exceeds ice gain. - envoPolar - - - An environmental zone which is primarily composed of water ice, present as a glacier or an ice sheet, and in which ice loss exceeds ice gain. - https://en.wikipedia.org/wiki/Ablation_zone - - - - - - - - - - ice loss process - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - Ice loss could likely become a defined class with some equivalence axioms linking it to processes, along the lines of: 'has part' some (icemelt or 'ice calving process' or 'water ice sublimation process'). - ice loss - A material decumulation process during which the mass of an existing ice mass decreases in size. - http://orcid.org/0000-0002-4366-3088 - - - A material decumulation process during which the mass of an existing ice mass decreases in size. - http://dx.doi.org/10.1038/nrmicro3522 - https://en.wikipedia.org/wiki/Ablation_zone - - - - - - - - - - rubbish landslide - - Of interest to sustainable development goals, linking production and consumption to human health and environmental impacts. - refuse landslide - trash landslide - A mass wasting process during which refuse from human activities, usually accumulated at a dumping site, falls down a slope under the force of gravity. - garbage landslide - "At least 48 people have been killed in a landslide at a vast rubbish dump on the outskirts of Ethiopia's capital Addis Ababa, officials say...Hundreds of people attempt to make a living by scavenging at the landfill site, sifting through the rubbish for items they can sell, the BBC's Emmanuel Igunza in Addis Ababa reports" BBC Africa reports - environmental_hazards - - - http://www.bbc.com/news/world-africa-39247381 - A mass wasting process during which refuse from human activities, usually accumulated at a dumping site, falls down a slope under the force of gravity. - - - - - - - - - - ice calving process - - - - - - - - http://orcid.org/0000-0002-4366-3088 - envoPolar - A process during which a part of an ice mass breaks away from the main mass. - http://orcid.org/0000-0002-3410-4655 - - - http://dx.doi.org/10.1038/nrmicro3522 - A process during which a part of an ice mass breaks away from the main mass. - - - - - - - - - - open animal house - - - - - - - - - - - - - - - - - - An animal house which is only partially surrounded by a building envelope. - - - - - - - - ice ablation process - - - - - - - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - An ice loss process which occurs in the low-altitude area of a glacier or ice sheet below the firn layer. - - - An ice loss process which occurs in the low-altitude area of a glacier or ice sheet below the firn layer. - http://dx.doi.org/10.1038/nrmicro3522 - - - - - - - - - - water ice sublimation process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A sublimation process during which water ice transitions into a gaseous state. - envoPolar - - - - - - - - closed animal house - - - - - - - - - - - - - - - - - - An animal house which has a complete building envelope. - - - - - - - - animal cage - - A manufactured cage which may be used to confine, contain, or protect an animal. - cage - - - https://en.wikipedia.org/wiki/Cage_(enclosure) - A manufactured cage which may be used to confine, contain, or protect an animal. - - - - - - - - - - petting zoo - - Petting zoos are often nested within a zoological garden featuring wild non-human animals, not docile enough for humans to touch. - A petting zoo is a zoological garden which contains domesticated non-human animals and some wild non-human animals that are docile enough for humans to touch and feed. - children's zoo - petting farm - - - https://en.wikipedia.org/wiki/Petting_zoo - A petting zoo is a zoological garden which contains domesticated non-human animals and some wild non-human animals that are docile enough for humans to touch and feed. - - - - - - - - - - plumbing drain - - An artificial channel which transports unwanted water or waste liquids away from their source, either to a more useful area, a receptacle, or into sewers or stormwater mains as waste discharge to be released or processed. - drain - drainage channel - - - https://en.wikipedia.org/wiki/Drain_(plumbing) - An artificial channel which transports unwanted water or waste liquids away from their source, either to a more useful area, a receptacle, or into sewers or stormwater mains as waste discharge to be released or processed. - - - - - - - - - - abattoir - - meat processing building - A facility in which non-human animals are slaughtered and processed for human consumption. - slaughterhouse - - - A facility in which non-human animals are slaughtered and processed for human consumption. - https://en.wikipedia.org/wiki/Slaughterhouse - - - - - - - - - - knackery - - A facility in which non-human animals are slaughtered and processed, but not for human consumption. - knacker's yard - Animals killed in knacker's yards are not fit for human consumption or can no longer be used to perform work. - - - A facility in which non-human animals are slaughtered and processed, but not for human consumption. - https://en.wikipedia.org/wiki/Slaughterhouse - - - - - - - - - - day care building - - This is a kind of day care facility. A facility need not be a building. - A building which is used to care for a human child during the working day by a person, outside the child's immediate family, other than that child's legal guardians. - child care building - - - https://en.wikipedia.org/wiki/Day_care - A building which is used to care for a human child during the working day by a person, outside the child's immediate family, other than that child's legal guardians. - - - - - - - - - - fish processing building - - fish factory - A building in which fish are subject to a series of operations to prepare them for human consumption. - This is a kind of fish processing facility. Facilities need not be buildings, factory ships may be considered fish processing facilities. - - - https://en.wikipedia.org/wiki/Fish_factory - A building in which fish are subject to a series of operations to prepare them for human consumption. - - - - - - - - - - mushroom environment - - - - - - - - - - - - - - - - - - - An environment determined by the presence of a mushroom. - - - - - - - - ecological corridor - - animal corridor - wildlife corridor - An ecosystem which bridges two or more adjoing ecosystems and through which organisms may move or propagate. - Ecological corridors may or may not provide habitats for the organisms which move through them. They serve to mitigate the effects of habitat fragmentation by allowing genetic exchange between populations that would otherwise be separated by, e.g., human activity. - habitat corridor - green corridor - - - An ecosystem which bridges two or more adjoing ecosystems and through which organisms may move or propagate. - https://www.eionet.europa.eu/gemet/concept/3756 - http://www.eionet.europa.eu/gemet/concept/10510 - - - - - - - - - - migration path - - This term refers to the ecosystem(s) the organisms traverse, rather than the spatial track they cover. The latter is better placed in a geospatial ontology. - Should be axiomatised with PCO's migration process once it is released. - migratory route - migration corridor - envoPolar - An ecological corridor through which organisms move during a migration process. - - - - - - - - nursing home - - skilled nursing facility - rest home - intermediate care facility - A building in which nursing aides and skilled nurses provide care and treatment to residents who have significant difficulty coping with the required activities of daily living. - long-term care facility - care home - This class should be linked to SDGIO. - convalescent home - - - https://en.wikipedia.org/wiki/Nursing_home_care - A building in which nursing aides and skilled nurses provide care and treatment to residents who have significant difficulty coping with the required activities of daily living. - - - - - - - - - - residential building - - This is under "human house" due to the broad definition of "house". - A human house which serves as a long-term shelter for its inhabitants and within which they store personal property. - This term is not to be used for hotels, hostels, inns and the like, which provides shorter-term stays. - - - - - - - - restaurant - - A building within which food and drink are prepared and served to customers in exchange for money or other goods and/or services. - eatery - - - https://en.wikipedia.org/wiki/Restaurant - A building within which food and drink are prepared and served to customers in exchange for money or other goods and/or services. - - - - - - - - - - campground - - camping ground - A part of an ecosystem which may be or has been used for one or more overnight stays by humans sheltering in tents, camper vans, caravans, or improvised shelters. - This is a very ambiguous term with wide-ranging usage patterns across cultural groups and regions. - camping site - campsite - camping pitch - - - https://en.wikipedia.org/wiki/Campsite - A part of an ecosystem which may be or has been used for one or more overnight stays by humans sheltering in tents, camper vans, caravans, or improvised shelters. - - - - - - - - - - dedicated campground - - A campground which has been modified by humans to provide and maintain facilities for camping such as fire pits, road access, latrines, and garbage bins. - - - https://en.wikipedia.org/wiki/Campsite - A campground which has been modified by humans to provide and maintain facilities for camping such as fire pits, road access, latrines, and garbage bins. - - - - - - - - - - impromptu campground - - A campground which has no pre-existing facilities installed or maintained by humans, usually found outside of anthropised ecosystems. - - - A campground which has no pre-existing facilities installed or maintained by humans, usually found outside of anthropised ecosystems. - https://en.wikipedia.org/wiki/Campsite - - - - - - - - - - hot tub - - A manufactured product which may hold a volume of heated water suitable for one or more humans to bathe in, usually for the purposes of hydrotherapy or pleasure. - spa - Jacuzzi - - - https://en.wikipedia.org/wiki/Hot_tub - A manufactured product which may hold a volume of heated water suitable for one or more humans to bathe in, usually for the purposes of hydrotherapy or pleasure. - - - - - - - - - - time crystal - - space-time crystal - An open system in non-equilibrium with its environment that exhibits time translation symmetry breaking. - While the usage of the term is still debated, the general idea is that time crystals (which have been made using ytterbium ions and defect-bearing diamonds) break temporal symmetry analogously to how mineral crystal break spatial symmetry. While spatial crystals are inhomogeneous in space (vs a gas, which is distributed evenly) due to the ordering of their atoms, the properties of atoms in a time crystal are inhomogeneous in the time dimension. - - - https://dx.doi.org/10.1038/543164a - An open system in non-equilibrium with its environment that exhibits time translation symmetry breaking. - https://en.wikipedia.org/wiki/Time_crystal - - - - - - - - - - fissure water - - - - - - - - The axiomatisation should be more tuned to the site within the fissure. - While containment is often enough to classify this subtype of water, it is expected that the water's composition is altered by contact with the solid material bounding the fissure's site. - Water which is partially contained within a fissure or a geological fracture. - fracture water - - - Water which is partially contained within a fissure or a geological fracture. - https://github.com/EnvironmentOntology/envo/issues/466 - - - - - - - - - - planetary subsurface zone - - - - - - 1 - - - - - - - - - Regions of a planet which are not exposed to the planet's atmosphere or space, often comprising parts of one or more planetary structural layers. - - - - - - - - continental subsurface zone - - - - - - - - - - - - - - We may have to soften dependence on planetary structural layers as some planets haven't differentiated by density. - A region which overlaps parts of one or more planetary structural layers which are located below a continental landmass. - - - https://github.com/EnvironmentOntology/envo/issues/466 - A region which overlaps parts of one or more planetary structural layers which are located below a continental landmass. - - - - - - - - - - vegetated hill - - This class will be axiomatised to coordinate with the 'vegetated area' class. - A hill which has a surface that is partially or wholly covered by plant communities. - - - - - - - - microplastic particle - - microplastic - A piece of plastic which has a diameter less than five millimetres. - - - https://marinedebris.noaa.gov/file/2192/download?token=5dvqb-YY - https://en.wikipedia.org/wiki/Microplastics - A piece of plastic which has a diameter less than five millimetres. - - - - - - - - - - primary microplastic particle - - A microplastic particle which is the direct output of a manufacturing process. - microplastic - - - https://marinedebris.noaa.gov/file/2192/download?token=5dvqb-YY - https://en.wikipedia.org/wiki/Microplastics - A microplastic particle which is the direct output of a manufacturing process. - - - - - - - - - - secondary microplastic particle - - microplastic - The debris that make up the Great Pacific Garbage Patch constantly release microplastics as they break down. - A microplastic particle which is derived from the breakdown of larger plastic debris. - - - https://en.wikipedia.org/wiki/Microplastics - A microplastic particle which is derived from the breakdown of larger plastic debris. - https://marinedebris.noaa.gov/file/2192/download?token=5dvqb-YY - - - - - - - - - - ecotone - - - - - - 2 - - - An envirommental system which bridges two or more biomes and which includes ecological communities which blend these biomes' phylogenetic and phenotypic compositions. - There are many subtypes of ecotone, some with sharp transitions and others with gradual, patchy transitions between communities. From Wikipedia:Ecotone - The word ecotone was coined from a combination of eco(logy) plus -tone, from the Greek tonos or tension – in other words, a place where ecologies are in tension. - - - An envirommental system which bridges two or more biomes and which includes ecological communities which blend these biomes' phylogenetic and phenotypic compositions. - https://github.com/EnvironmentOntology/envo/issues/501 - ISBN:0030584140 9780030584145 - https://www.merriam-webster.com/dictionary/ecotone - https://en.wikipedia.org/wiki/Ecotone - - - - - - - - - - polar tree-line ecotone - - - - - - - - - - - - - - - An ecotone which bridges a subpolar coniferous forest biome and a tundra biome. - Arctic tree-line ecotone - This assumes, of course, that the planet's or planetoid's poles receive less stellar radiation and/or thermal energy than equatorial regions. - Major vegetational ecotones such as that between the northern edge of the Boreal Forest in North America (or taiga in Russia) and the arctic tundra, known as the arctic tree-line ecotone, are controlled largely by large-scale airmass contrasts and are sensitive to climatic change, as noted by R. A. Bryson (1966). -Harvey Nichols, Ph.D. , April 23, 2017 -Emeritus Professor of Biology. - - - https://github.com/EnvironmentOntology/envo/issues/501 - https://en.wikipedia.org/wiki/Tree_line - An ecotone which bridges a subpolar coniferous forest biome and a tundra biome. - - - - - - - - - - lichen woodland - - A woodland which has an understory partially covered by lichen mats and tundra-like vegetation. - - - https://www.britannica.com/science/taiga#ref589262 - A woodland which has an understory partially covered by lichen mats and tundra-like vegetation. - - - - - - - - - - water ice formation process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A material transformation process during which water ice is formed. - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - - - http://www.waterencyclopedia.com/Re-St/Sea-Water-Freezing-of.html - A material transformation process during which water ice is formed. - - - - - - - - - - natural environment - - - - - - - - - - - - - - - - - An environmental system in which minimal to no anthropisation has occurred and non-human agents are the primary determinants of the system's dynamics and composition. - non-anthropised environment - In most contexts, 'natural' is defined by the lack of intervention or influence by humans and their activities. On Earth, most environments fall on a scale between completely natural and anthropised. - non-anthropized environment - - - https://en.wikipedia.org/wiki/Natural_environment - An environmental system in which minimal to no anthropisation has occurred and non-human agents are the primary determinants of the system's dynamics and composition. - https://en.wikipedia.org/wiki/Anthropization - - - - - - - - - - anthropisation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - anthropization - An area may be classified as anthropized even though it looks natural, such as grasslands that have been deforested by humans. It can be difficult to determine how much a site has been anthropized in the case of urbanization because one must be able to estimate the state of the landscape before significant human action. - A process during which a natural environmental system is altered by human action. - - - An area may be classified as anthropized even though it looks natural, such as grasslands that have been deforested by humans. It can be difficult to determine how much a site has been anthropized in the case of urbanization because one must be able to estimate the state of the landscape before significant human action. - https://en.wikipedia.org/wiki/Anthropization - - - - - A process during which a natural environmental system is altered by human action. - https://en.wikipedia.org/wiki/Anthropization - - - - - - - - - - tree line ecotone - - tree-line - An ecotone which overlaps at least one biome which supports the growth and persistence of trees and at least one that does not. Before ceasing altogether, tree growth becomes sparse and trees appear stunted as conditions become less favourable along this ecotone. - tree line - treeline - - - https://en.wikipedia.org/wiki/Tree_line - An ecotone which overlaps at least one biome which supports the growth and persistence of trees and at least one that does not. Before ceasing altogether, tree growth becomes sparse and trees appear stunted as conditions become less favourable along this ecotone. - - - - - - - - - - alpine tree line ecotone - - - - - - - - alpine tree-line - alpine treeline - alpine tree line - A tree line ecotone across which trees cease to grow due to the low temperatures or duration of snow cover that occur at increased elevations above mean sea level. - - - https://en.wikipedia.org/wiki/Tree_line - A tree line ecotone across which trees cease to grow due to the low temperatures or duration of snow cover that occur at increased elevations above mean sea level. - - - - - - - - - - desert tree line ecotone - - - - - - - - desert tree-line - A tree line ecotone across which trees cease to grow due to insufficient water availability due to a lack of water-based precipitation. - desert tree line - desert treeline - - - A tree line ecotone across which trees cease to grow due to insufficient water availability due to a lack of water-based precipitation. - https://en.wikipedia.org/wiki/Tree_line - - - - - - - - - - desert-alpine tree line ecotone - - - - - - - - desert-alpine treeline - A tree line ecotone across which trees cease to grow due to insufficient water availability caused by exposure to increased solar radiation and a lack of rainfall. - desert-alpine tree-line - desert-alpine tree line - The lack of rainfall in these ecotones is often due to their elevation above the condensation line of atmospheric water vapour. - - - https://en.wikipedia.org/wiki/Tree_line - A tree line ecotone across which trees cease to grow due to insufficient water availability caused by exposure to increased solar radiation and a lack of rainfall. - - - - - - - - - - double tree line ecotone - - double treeline - A tree line ecotone which contains gaps in tree coverage due to decreased biodiversity in tree-forming plant species: gaps are above the alpine tree line for some species yet below the desert tree line for others, and no species with intermediate tolerances are present. - double tree-line - Mountain ranges isolated by oceans or deserts may have restricted repertoires of tree species and contain double tree lines. - double tree line - - - Mountain ranges isolated by oceans or deserts may have restricted repertoires of tree species and contain double tree lines. - https://en.wikipedia.org/wiki/Tree_line#Double_tree_line - - - - - A tree line ecotone which contains gaps in tree coverage due to decreased biodiversity in tree-forming plant species: gaps are above the alpine tree line for some species yet below the desert tree line for others, and no species with intermediate tolerances are present. - https://en.wikipedia.org/wiki/Tree_line - - - - - - - - - - terrestrial planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - telluric planet - A planet that is composed primarily of silicate rocks or metals. - rocky planet - envoAstro - Earth-like planet - - - https://en.wikipedia.org/wiki/Terrestrial_planet - A planet that is composed primarily of silicate rocks or metals. - - - - - - - - - - primary atmosphere - - A planetary atmosphere which is formed as a result of the accretion of gaseous matter from the accretion disc of the planet's star. - Planets such as Jupiter and Saturn have primary atmospheres. Primary atmospheres are very thick compared to secondary atmospheres like the one found on Earth. The primary atmosphere was lost on the terrestrial planets due to a combination of surface temperature, mass of the atoms and escape velocity of the planet. - - - Planets such as Jupiter and Saturn have primary atmospheres. Primary atmospheres are very thick compared to secondary atmospheres like the one found on Earth. The primary atmosphere was lost on the terrestrial planets due to a combination of surface temperature, mass of the atoms and escape velocity of the planet. - https://en.wikipedia.org/wiki/Primary_atmosphere - - - - - https://en.wikipedia.org/wiki/Primary_atmosphere - A planetary atmosphere which is formed as a result of the accretion of gaseous matter from the accretion disc of the planet's star. - http://abyss.uoregon.edu/~js/ast121/lectures/lec14.html - - - - - - - - - - secondary atmosphere - - A planetary atmosphere which has formed as a result of its planet's volcanic activity, or by accumulation of material from comet impacts. - A secondary atmosphere is found on many terrestrial planets such as Mercury, Venus, and Mars. Secondary atmospheres are relatively thin compared to primary atmospheres like Jupiter's. Earth has a tertiary atmosphere due to biotic processes. - - - A planetary atmosphere which has formed as a result of its planet's volcanic activity, or by accumulation of material from comet impacts. - http://abyss.uoregon.edu/~js/ast121/lectures/lec14.html - https://en.wikipedia.org/wiki/Secondary_atmosphere - - - - - http://abyss.uoregon.edu/~js/ast121/lectures/lec14.html - https://en.wikipedia.org/wiki/Secondary_atmosphere - A secondary atmosphere is found on many terrestrial planets such as Mercury, Venus, and Mars. Secondary atmospheres are relatively thin compared to primary atmospheres like Jupiter's. Earth has a tertiary atmosphere due to biotic processes. - - - - - - - - - - tertiary atmosphere - - Further processing of a secondary atmosphere, for example by the processes of biological life, can produce a tertiary atmosphere, such as that of Earth. - A planetary atmosphere which has formed as a result of biotic processes modifying a secondary atmosphere. - This definition cites biotic processes; however, the source indicated that other processes may cause a secondary atmosphere to transition into a tertiary one. More input is needed. - - - A planetary atmosphere which has formed as a result of biotic processes modifying a secondary atmosphere. - http://abyss.uoregon.edu/~js/ast121/lectures/lec14.html - https://en.wikipedia.org/wiki/Secondary_atmosphere - - - - - https://en.wikipedia.org/wiki/Secondary_atmosphere - Further processing of a secondary atmosphere, for example by the processes of biological life, can produce a tertiary atmosphere, such as that of Earth. - http://abyss.uoregon.edu/~js/ast121/lectures/lec14.html - - - - - - - - - - diatomite - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - kieselguhr - This material is easily crumbled into a fine white to off-white powder. The powder has a particle size ranging from less than 3 micrometres to more than 1 millimetre, but typically 10 to 200 micrometres. The diatoms in each deposit contain different amounts of silica, depending on the age of the deposit. The species of diatom may differ among deposits. The species of diatom is dependent upon the age and paleo-environment of the deposit. In turn, the shape of a diatom is determined by its species. The typical chemical composition of oven-dried diatomaceous earth is 80 to 90% silica, with 2 to 4% alumina (attributed mostly to clay minerals) and 0.5 to 2% iron oxide. - D.E. - A sedimentary rock which is primarily composed of the fossilized, siliceous remains of diatoms mixed with varying amounts of other clays and minerals. - diatomaceous earth - kieselgur - - - This material is easily crumbled into a fine white to off-white powder. The powder has a particle size ranging from less than 3 micrometres to more than 1 millimetre, but typically 10 to 200 micrometres. The diatoms in each deposit contain different amounts of silica, depending on the age of the deposit. The species of diatom may differ among deposits. The species of diatom is dependent upon the age and paleo-environment of the deposit. In turn, the shape of a diatom is determined by its species. The typical chemical composition of oven-dried diatomaceous earth is 80 to 90% silica, with 2 to 4% alumina (attributed mostly to clay minerals) and 0.5 to 2% iron oxide. - https://en.wikipedia.org/wiki/Diatomaceous_earth#Geology_and_occurrence - - - - - https://en.wikipedia.org/wiki/Diatomaceous_earth - A sedimentary rock which is primarily composed of the fossilized, siliceous remains of diatoms mixed with varying amounts of other clays and minerals. - - - - - - - - - - diatomite particle - - - - - - - - Diatomite is easily crumbled into a fine white to off-white powder. The powder has a particle size ranging from less than 3 micrometres to more than 1 millimetre, but typically 10 to 200 micrometres. The diatoms in each deposit contain different amounts of silica, depending on the age of the deposit. The species of diatom may differ among deposits. The species of diatom is dependent upon the age and paleo-environment of the deposit. In turn, the shape of a diatom is determined by its species. The typical chemical composition of oven-dried diatomaceous earth is 80 to 90% silica, with 2 to 4% alumina (attributed mostly to clay minerals) and 0.5 to 2% iron oxide. - piece of diatomaceous earth - particle of diatomaceous earth - piece of diatomite - A piece of rock which is primarily composed of diatomite: the fossilized, siliceous remains of diatoms mixed with varying amounts of other clays and minerals. - particle of diatomite - kieselgur particle - D.E. - kieselguhr particle - diatomaceous earth - - - Diatomite is easily crumbled into a fine white to off-white powder. The powder has a particle size ranging from less than 3 micrometres to more than 1 millimetre, but typically 10 to 200 micrometres. The diatoms in each deposit contain different amounts of silica, depending on the age of the deposit. The species of diatom may differ among deposits. The species of diatom is dependent upon the age and paleo-environment of the deposit. In turn, the shape of a diatom is determined by its species. The typical chemical composition of oven-dried diatomaceous earth is 80 to 90% silica, with 2 to 4% alumina (attributed mostly to clay minerals) and 0.5 to 2% iron oxide. - https://en.wikipedia.org/wiki/Diatomaceous_earth#Geology_and_occurrence - - - - - A piece of rock which is primarily composed of diatomite: the fossilized, siliceous remains of diatoms mixed with varying amounts of other clays and minerals. - https://en.wikipedia.org/wiki/Diatomaceous_earth - - - - - - - - - - industrial wastewater - - Wastewater which is produced by industrial activity and which contains chemical contaminants other than those associated with urine and fecal matter. - - - - - - - - constructed swimming pool - - A construction which is designed to hold water in which humans may swim or perform other leisure activities. - paddling pool - wading pool - swimming bath - swimming pool - pool - - - https://en.wikipedia.org/wiki/Swimming_pool - A construction which is designed to hold water in which humans may swim or perform other leisure activities. - - - - - - - - - - private swimming pool - - swimming pool - pool - A constructed swimming pool which is owned by a non-governmental legal entity or a collective of such entities. - - - https://en.wikipedia.org/wiki/Private_ownership - A constructed swimming pool which is owned by a non-governmental legal entity or a collective of such entities. - https://en.wikipedia.org/wiki/Swimming_pool - - - - - - - - - - public swimming pool - - A constructed swimming pool which is owned by a governmental or state entity. - pool - swimming pool - - - https://en.wikipedia.org/wiki/Private_ownership - https://en.wikipedia.org/wiki/Swimming_pool - A constructed swimming pool which is owned by a governmental or state entity. - - - - - - - - - - water intake - - - - - - - - - - - - - - - Sources of water include rivers, lakes, reservoirs, and other water bodies. Conduits include canals, pipelines, and tunnels. Water intakes typically transport water for purposes of hydroelectric power engineering, water supply, or irrigation. - A hydraulic-engineering installation which transports water - in specified amounts, of a specified quality, and in accordance with a water-consumption plan - from a source of supply into a conduit. - - - A hydraulic-engineering installation which transports water - in specified amounts, of a specified quality, and in accordance with a water-consumption plan - from a source of supply into a conduit. - http://encyclopedia2.thefreedictionary.com/Water+Intake+Works - - - - - - - - - - cafeteria - - A building which provides the site for food services with little or no waiting staff furnishing table service. - - - https://en.wikipedia.org/wiki/Cafeteria - A building which provides the site for food services with little or no waiting staff furnishing table service. - - - - - - - - - - delicatessen - - A food shop which sells a selection of food products that are not typical dietary components of the human population it is co-located with. - The food products sold in a delicatessen are often considered unusual by the majority of its customers and may come from foreign food supplies which are not widely imported into its region of operation. - - - https://en.wikipedia.org/wiki/Delicatessen - A food shop which sells a selection of food products that are not typical dietary components of the human population it is co-located with. - - - - - - - - - - food truck - - Due to the facilities on board, food trucks are often larger than other trucks with comparable mechanics. - A truck which is equipped to cook and sell food. - - - A truck which is equipped to cook and sell food. - https://en.wikipedia.org/wiki/Food_truck - - - - - - - - - - take-out restaurant - - take-away - A restaurant which provides prepared meals or other food products that the purchaser must eat off its premises. - take out restaurant - - - http://orcid.org/0000-0002-8844-9165 - https://en.wikipedia.org/wiki/Restaurant - A restaurant which provides prepared meals or other food products that the purchaser must eat off its premises. - - - - - - - - - - kiosk - - The relation between booths and buildings needs to be clarified. Booth should be its own class. - A booth with an open window on one side. - This definition of kiosk is characteristic of the Western hemisphere and used in English-speaking countries. - - - https://en.wikipedia.org/wiki/Kiosk - A booth with an open window on one side. - - - - - - - - - - food kiosk - - This definition of kiosk is characteristic of the Western hemisphere and used in English-speaking countries. - The relation between booths and buildings needs to be clarified. Booth should be its own class. - A kiosk from which food products are sold. - - - A kiosk from which food products are sold. - https://en.wikipedia.org/wiki/Kiosk - - - - - - - - - - animal trap - - envoCesab - A manufactured product which is designed to catch and hold animals. - - - http://www.thefreedictionary.com/trap - A manufactured product which is designed to catch and hold animals. - - - - - - - - - - pitfall trap - - envoCesab - An animal trap which consists of a container set flush with the ground such that animals moving along the ground may fall in and be available for examination or collection. - - - An animal trap which consists of a container set flush with the ground such that animals moving along the ground may fall in and be available for examination or collection. - Barber H (1931) Traps for cave-inhabiting insects. J Elisha Mitchell Sci Soc. 46:259–266. - Mitchell B (1963) Ecology of two carabid beetles, Bembidion lampros (Herbst) and Trechus quadristriatus (Shrank). J Animal Ecol. 32(3): 377-392. - Hertz M (1927) Huomioita petokuoriaisten olinpaikoista. Luonnon Ystava. 31:218–222. - - - - - - - - - - dry pitfall trap - - envoCesab - A pitfall trap in which a glass, plastic, or metal container devoid of accumulations of any liquid is used to contain any animal that falls inside. - - - Upton MS (1991) Methods for collecting, preserving, and studying insects and allied forms. The Aust Entomological Soc. Miscellaneous Publication No. 3, 4th edition. - http://www.animalethics.org.au/policies-and-guidelines/wildlife-research/pitfall-traps - Southwood TRE (1978) Ecological Methods : With Particular Reference to the Study of Insect Population. Chapman and Hall. London. 524pp. - A pitfall trap in which a glass, plastic, or metal container devoid of accumulations of any liquid is used to contain any animal that falls inside. - - - - - - - - - - wet pitfall trap - - A pitfall trap in which the container used to hold trapped animals is filled with a liquid solution formulated to hold, kill, and preserve any animal or animals which falls within it. - envoCesab - Aqueous solutions used in these traps include: formalin (10% formaldehyde), alcohol, methylated spirits, trisodium phosphate and picric acid. - - - A pitfall trap in which the container used to hold trapped animals is filled with a liquid solution formulated to hold, kill, and preserve any animal or animals which falls within it. - Upton MS (1991) Methods for collecting, preserving, and studying insects and allied forms. The Aust Entomological Soc. Miscellaneous Publication No. 3, 4th edition. - http://www.animalethics.org.au/policies-and-guidelines/wildlife-research/pitfall-traps - Southwood TRE (1978) Ecological Methods : With Particular Reference to the Study of Insect Population. Chapman and Hall. London. 524pp. - - - - - - - - - - channel of an intermittent river - - A channel of an intermittent stream which contains a river when water supply exceeds evapotranspiration and bed seepage. - intermittent river - ephemeral river - temporary river - envoCesab - - - https://en.wikipedia.org/wiki/Intermittent_river - A channel of an intermittent stream which contains a river when water supply exceeds evapotranspiration and bed seepage. - IRBAS working group (CESAB) - - - - - - - - - - channel of an intermittent stream - - - - - - - - - - - - - - - - - - intermittent stream - A channel through which a directional flow of water periodically occurs, ceasing when bed seepage and evapotranspiration exceed the available water supply. - - - A channel through which a directional flow of water periodically occurs, ceasing when bed seepage and evapotranspiration exceed the available water supply. - http://encyclopedia2.thefreedictionary.com/Intermittent+stream - - - - - - - - - - mass liquid flow - - - - - - - - A process whereby a volume of liquid moves due to a disequilibrium of physical forces. - envoPolar - This class can refer to the flow of any material in a liquid phase. - - - https://en.wikipedia.org/wiki/Wind - A process whereby a volume of liquid moves due to a disequilibrium of physical forces. - - - - - - - - - - water flow process - - - - - - - - - - - - - - A process during which a volume of water is transported due to a disequilibria in physical forces. - environmental_hazards - - - A process during which a volume of water is transported due to a disequilibria in physical forces. - https://en.wikipedia.org/wiki/Lava - - - - - - - - - - technosphere - - - - - - - - - - - - - - - - - - - - The gravitational sphere of influence referenced in this class' definition is the Hill sphere: a region in which an object dominates the attraction of satellites despite gravitational perturbations. - An environmental system which includes, as parts, all the entities which have been constructed or manufactured by humans or their technology within the gravitational sphere of influence of an astronomical body. - envoAstro - - - http://www.yourdictionary.com/technosphere - http://dx.doi.org/10.1177/2053019616677743 - An environmental system which includes, as parts, all the entities which have been constructed or manufactured by humans or their technology within the gravitational sphere of influence of an astronomical body. - https://www.sciencedaily.com/releases/2016/11/161130085021.htm - - - - - - - - - - grocery store - - A food shop in which food products are the primary offer for sale or trade. - - - http://orcid.org/0000-0002-8844-9165 - A food shop in which food products are the primary offer for sale or trade. - - - - - - - - - - fairground - - Fairgrounds, or parts thereof, may be constructed (e.g. concreted over) or be natural (e.g. clearings or heaths), thus land use is the key differentia. - A part of an ecosystem which has been allocated to host a gathering of people for multiple entertainment or commercial activities. - A good candidate to draft land use semantics around - - - https://en.wikipedia.org/wiki/Fair - A part of an ecosystem which has been allocated to host a gathering of people for multiple entertainment or commercial activities. - https://en.wikipedia.org/wiki/Fairground - - - - - - - - - - agricultural fairground - - A fairground which is used to exhibit agricultural technology, livestock, and farm-related activity. - - - http://orcid.org/0000-0002-8844-9165 - https://en.wikipedia.org/wiki/Fair - https://en.wikipedia.org/wiki/Fairground - A fairground which is used to exhibit agricultural technology, livestock, and farm-related activity. - - - - - - - - - - market - - palengke - marketplace - mercado - Hierarchies based on land use should replace the anthropogenic feature class once we have a stable rationale. - tianguis - As with campgrounds and fairgrounds, land use is the key differentia here. The regularity of marketplace activities may provide a differentia for further growth of this branch. - bazaar - souk - A part of an ecosystem where people gather for the purchase and sale of provisions, livestock, and other goods. - - - https://en.wikipedia.org/wiki/Market_(place) - A part of an ecosystem where people gather for the purchase and sale of provisions, livestock, and other goods. - - - - - - - - - - ethnic food shop - - ethnic speciality shop - ethnic food store - A food shop in which the food products on offer are restricted to those produced in a region and cultural setting other than that of the shop's locality. - ethnic speciality store - - - - - - - - plumbing fixture - - An exchangeable device which can be connected to a plumbing system to deliver and drain water. - - - https://en.wikipedia.org/wiki/Plumbing_fixture - An exchangeable device which can be connected to a plumbing system to deliver and drain water. - - - - - - - - - - sink fixture - - A plumbing fixture which is bowl-shaped and used for washing hands, dishwashing, and other purposes. - sink - sinker - wash basin - hand basin - washbowl - - - https://en.wikipedia.org/wiki/Sink - A plumbing fixture which is bowl-shaped and used for washing hands, dishwashing, and other purposes. - - - - - - - - - - bathtub fixture - - bath - bathtub - Of course, there are other uses for bathtubs. - tub - A plumbing fixture which may serve as a container for water in which humans or other animals may bathe. - - - - - - - - shower fixture - - Indoors, there is a drain in the floor. Most showers have temperature, spray pressure and adjustable showerhead nozzle. Showering is common in Western culture due to the efficiency of using it compared with a bathtub. Its use in hygiene is, therefore, common practice. A shower uses less water on average than a bath: 80 litres for a shower compared with 150 litres for a bath. - shower - As some showers have no drain, this may cause issues with the definition of plumbing fixture. - A plumbing fixture within which a human or other animal may bathe under a spray of water. - - - https://en.wikipedia.org/wiki/Shower - A plumbing fixture within which a human or other animal may bathe under a spray of water. - - - - - Indoors, there is a drain in the floor. Most showers have temperature, spray pressure and adjustable showerhead nozzle. Showering is common in Western culture due to the efficiency of using it compared with a bathtub. Its use in hygiene is, therefore, common practice. A shower uses less water on average than a bath: 80 litres for a shower compared with 150 litres for a bath. - https://en.wikipedia.org/wiki/Shower - - - - - - - - - - manufacturing process - - - - - - - - - - - - - - - - - - - The term may refer to a range of human activity, from handicraft to high tech, but is most commonly applied to industrial production, in which raw materials are transformed into finished goods on a large scale. - A planned process during which raw or recycled materials are transformed into products for use or sale using labour and machines, tools, chemical and biological processing, or formulation. - - - https://en.wikipedia.org/wiki/Manufacturing - The term may refer to a range of human activity, from handicraft to high tech, but is most commonly applied to industrial production, in which raw materials are transformed into finished goods on a large scale. - - - - - https://en.wikipedia.org/wiki/Manufacturing - A planned process during which raw or recycled materials are transformed into products for use or sale using labour and machines, tools, chemical and biological processing, or formulation. - - - - - - - - - - planetary manufacturing process - - - - - - - - - - - - - - A manufacturing process which occurs on a planet. - Whether this is within the planet's Hill sphere, the region which extends from its exosphere to its core, or some other planetary region is not clear. - See https://github.com/EnvironmentOntology/envo/issues/513 for discussion. - - - - - - - - dry river - - - - - - - - A dry stream channel through which a river had flowed, but now contains no appreciable accumulations of water. - See http://purl.obolibrary.org/obo/ENVO_01000979 for the channel of an intermittent river. - - - A dry stream channel through which a river had flowed, but now contains no appreciable accumulations of water. - http://orcid.org/0000-0002-4366-3088 - - - - - - - - - - construction process - - - - - - - - - - - - - - - - - - - The nature of "structures" must be further specified. - An process during which natural or manufactured materials and products are processed and arranged by humans or their technology into structures. - - - - - - - - environmental system determined by a quality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Organisational class. Not intended for annotation. - An environmental system which is determined by materials bearing roughly homogeneous qualities. - - - - - - - - environmental system determined by a material - - - - - - - - - - - - - - - - - - - An environmental system within which an environmental material strongly influences the system's composition and properties. - Organisational class. Not intended for annotation. Subclasses describe environments which are usually permeated by an environmental material. They may also describe environments which are sufficiently close to a material, that their dynamics are strongly influenced by it (e.g. a patch of forest ecosystem neighbouring a uranium dump). - - - - - - - - rhizosphere environment - - - - - - - - - - - - - - An environmental system determined by the presence of a plant rhizosphere. - envoOmics - envoEmpo - Plant rhizosphere - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Plant rhizosphere - - - - - - - - - - environmental system determined by an organism - - - - - - - - - - - - - - - - - - - An environmental system which is determined by a living organism. - envoEmpo - envoOmics - host-associated environment - - - - - - - - plant-associated environment - - - - - - - - - - - - - - - - - - - Plant - An environmental system determined by a green plant. - plant environment - envoEmpo - envoOmics - Viridiplantae-associated environment - - - Plant - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - animal-associated environment - - - - - - - - - - - - - - - - - - - An environmental system determined by an animal. - envoOmics - envoEmpo - animal environment - Metazoan-associated environment - Animal - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Animal - - - - - - - - - - non-saline environment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This class (term) is defined by the lack of a quality (i.e. the lack of salinity or increased osmolarity), which is not best-practice ontologically. Use for annotation is generally discouraged and users should use classes which positively describe the material or environment sampled (i.e. stating the qualities the entity has, rather than those it does not). - envoEmpo - Non-saline - - - Non-saline - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - groundwater - - - - - - - - ground water - Underground water which is located in pore spaces found in rock or unconsolidated deposits such as soil, clay, or gravel. - The definition of aquifer is quite permissive, referencing any water bearing rock or unconsolidated material. - - - Underground water which is located in pore spaces found in rock or unconsolidated deposits such as soil, clay, or gravel. - https://en.wikipedia.org/wiki/Groundwater - - - - - - - - - - lunar rainbow - - A lunar rainbow is a rainbow produced by the refraction of light, which has been reflected from a moon's surface, by water droplets in an astronomical body's atmosphere. - moonbow - white rainbow - - - https://en.wikipedia.org/wiki/Rainbow - A lunar rainbow is a rainbow produced by the refraction of light, which has been reflected from a moon's surface, by water droplets in an astronomical body's atmosphere. - - - - - - - - - - rainbow - - - - - - - - - - - - - - A rainbow is a photometeor which consists of a spectral separation of light, formed as a result of the reflection, refraction, and dispersion of light in water droplets suspended in an astronomical body's atmosphere. - The term 'rainbow' is usually used to refer to solar rainbows, but greater specificity should be used when possible. - - - https://en.wikipedia.org/wiki/Rainbow - A rainbow is a photometeor which consists of a spectral separation of light, formed as a result of the reflection, refraction, and dispersion of light in water droplets suspended in an astronomical body's atmosphere. - - - - - - - - - - solar rainbow - - The astronomical body where the rainbow occurs is understood to orbit the star which produces the light which forms the rainbow. - stellar rainbow - A solar rainbow is a rainbow produced by the refraction of light. which has been emitted by a star, by water droplets in the atmosphere of an astronomical body. - - - https://en.wikipedia.org/wiki/Rainbow - A solar rainbow is a rainbow produced by the refraction of light. which has been emitted by a star, by water droplets in the atmosphere of an astronomical body. - - - - - - - - - - meteor - - - - - - - - - - - - - - - - - - - A meteor is any matter- or energy-based entity which is located in the atmosphere of an astronomical body. - - - - - - - - photometeor - - Requires radiative phenomena to be added for axiomatisation. - A meteor that is primarily composed of light. - - - - - - - - hydrometeor - - - - - - - - - - - - - - - - - - - A meteor which is primarily composed of water. - - - - - - - - light emitted by lightning - - - - - - - - This phenomenon is often treated as interchangeable with the process of electrostatic discharge that causes it. - A photometeor which is formed as a result of sudden electrostatic discharge in the atmosphere. - lightning - lightning flash - - - - - - - - lithometeor - - - - - - - - - - - - - - - - - - - - - - - - - A meteor which is primarily composed of rock. - - - - - - - - reflection rainbow - - A rainbow which forms from sunlight which has been reflected off a body of water prior to its interaction with water droplets in an atmosphere. - Not to be confused with a reflected rainbow, which is not a photometeor. - - - https://en.wikipedia.org/wiki/Rainbow - A rainbow which forms from sunlight which has been reflected off a body of water prior to its interaction with water droplets in an atmosphere. - - - - - - - - - - monochrome solar rainbow - - monochrome rainbow - red rainbow - A solar rainbow which is formed by a narrow band of wavelengths, the rest of the spectrum having been scattered away by an atmosphere. - - - https://en.wikipedia.org/wiki/Rainbow - A solar rainbow which is formed by a narrow band of wavelengths, the rest of the spectrum having been scattered away by an atmosphere. - - - - - - - - - - fogbow - - - - - - - - - - - - - - - Often, fogbows are treated as separate from rainbows; however, as the formation processes are much the same, we currently classify these as a subclass of rainbow pending input from domain experts. - fog bow - A rainbow which forms through the interaction of sunlight with the water droplets which constitute fog or clouds; light is diffracted by these droplets such that the photometeor appears almost white with faint reds on the sky-facing side and faint blues on the planet-facing side of the bow. - - - A rainbow which forms through the interaction of sunlight with the water droplets which constitute fog or clouds; light is diffracted by these droplets such that the photometeor appears almost white with faint reds on the sky-facing side and faint blues on the planet-facing side of the bow. - https://en.wikipedia.org/wiki/Rainbow - - - - - - - - - - glory - - A photometeor which is formed by wave interference of light refracted within water droplets which constitute mist or clouds and consists of one or more concentric, successively dimmer rings, each of which has red wavelengths distant to the glory's centre and blue wavelengths towards the centre. - This is not to be confused with a circular rainbow, which is formed through different processes. - - - https://en.wikipedia.org/wiki/Glory_(optical_phenomenon) - A photometeor which is formed by wave interference of light refracted within water droplets which constitute mist or clouds and consists of one or more concentric, successively dimmer rings, each of which has red wavelengths distant to the glory's centre and blue wavelengths towards the centre. - - - - - - - - - - halo - - A photometeor which is produced by light that is relected, refracted, and dispersed by ice crystals, capable of acting as prisms and mirrors, suspended in an astronomical body's atmosphere. - - - https://en.wikipedia.org/wiki/Halo_(optical_phenomenon) - A photometeor which is produced by light that is relected, refracted, and dispersed by ice crystals, capable of acting as prisms and mirrors, suspended in an astronomical body's atmosphere. - - - - - - - - - - hypereutrophic water - - The thresholds of eutrophy are fluid and often locally defined. - Water which has a very high concentration of nutrients. - - - https://github.com/EnvironmentOntology/envo/issues/528 - Water which has a very high concentration of nutrients. - - - - - - - - - - hypereutrophic lake - - - - - - - - - - - - - - - - - - - A lake which is composed primarily of water with very high nutrient concentrations. - - - https://github.com/EnvironmentOntology/envo/issues/529 - A lake which is composed primarily of water with very high nutrient concentrations. - - - - - - - - - - hypersaline lake - - - - - - - - - - - - - - - - - - - A lake which is primarily composed of water with a concentration of dissolved salts greater than that of ocean water. - - - A lake which is primarily composed of water with a concentration of dissolved salts greater than that of ocean water. - https://en.wikipedia.org/wiki/Hypersaline_lake - - - - - - - - - - humic lake - - In response to historical misuse of the term in literature, these lakes are better referred to as "humic lakes". Although dystrophic lakes are often considered acidic and nutrient-poor (oligotrophic), these lakes actually vary greatly in terms of both pH and productivity. Due to the low pH associated with dystrophic lakes, few bacterial species and other aquatic life are able to survive. They are common in the taiga of North America and Eurasia. - dystrophic lake - A lake which is composed primarily water with high concentrations of humic substances and organic acids, resulting in brown- or tea-coloured colouration. - - - In response to historical misuse of the term in literature, these lakes are better referred to as "humic lakes". Although dystrophic lakes are often considered acidic and nutrient-poor (oligotrophic), these lakes actually vary greatly in terms of both pH and productivity. Due to the low pH associated with dystrophic lakes, few bacterial species and other aquatic life are able to survive. They are common in the taiga of North America and Eurasia. - https://en.wikipedia.org/wiki/Dystrophic_lake - - - - - A lake which is composed primarily water with high concentrations of humic substances and organic acids, resulting in brown- or tea-coloured colouration. - https://en.wikipedia.org/wiki/Dystrophic_lake - - - - - - - - - - natural lake - - - - - - - - - - - - - - - - - - - - - - A lake which has formed as the result of processes that are not or are only minimally driven by human activity. - This class is to be filled by inference. - - - - - - - - radiation - - - - - - - - - - - - - - Requires addition of waves for full axiomatisation. This should be linked to "subatomic particle" with an "or". Note that ENVO represents space as an environmental material (a hard vacuum with sparse material inclusions). - A process during which energy is emitted or transmitted in the form of waves or particles through space or a material medium. - envoAstro - - - A process during which energy is emitted or transmitted in the form of waves or particles through space or a material medium. - https://en.wikipedia.org/wiki/Radiation - - - - - - - - - - particle radiation - - envoAstro - A radiation process during which energy is transmitted or emitted by means of fast-moving subatomic particles. - - - https://en.wikipedia.org/wiki/Particle_radiation - A radiation process during which energy is transmitted or emitted by means of fast-moving subatomic particles. - - - - - - - - - - particle beam radiation - - A particle radiation process during which subatomic particles move in the same direction. - envoAstro - - - A particle radiation process during which subatomic particles move in the same direction. - https://en.wikipedia.org/wiki/Particle_radiation - - - - - - - - - - electromagnetic radiation - - A radiation process during which waves (or their quanta, photons) of the electromagnetic field propagate (radiate) through space carrying electromagnetic energy. - envoAstro - - - https://en.wikipedia.org/wiki/Electromagnetic_radiation - A radiation process during which waves (or their quanta, photons) of the electromagnetic field propagate (radiate) through space carrying electromagnetic energy. - - - - - - - - - - acoustic radiation - - A radiation process during which mechanical waves generated by oscillations radiate through an environmental material. - The mechanical waves generated by this process are also referred to as pressure waves. - envoAstro - - - https://en.wikipedia.org/wiki/Mechanical_wave - A radiation process during which mechanical waves generated by oscillations radiate through an environmental material. - https://en.wikipedia.org/wiki/Vibration - https://en.wikipedia.org/wiki/Acoustics - - - - - - - - - - sediment permeated by freshwater - - - - - - - - envoEmpo - Sediment which is permeated by freshwater. - envoOmics - - - - - - - - fecal environment - - - - - - - - - - - - - - - - - - - An environmental system which has its properties and dynamics determined by feces. - envoOmics - Animal distal gut - envoEmpo - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - The label of this EMPO class is ambiguous, but pers. comm. with L Thompson (http://orcid.org/0000-0002-3911-1280) reveals that this is essentially limited to fecal samples. - Animal distal gut - - - - - - - - - - environment determined by a metazoan secretion - - - - - - - - - - - - - - - - - - - envoOmics - envoEmpo - Animal secretion - An environmental system which has its properties and dynamics determined by a bodily secretion of a metazoan. - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Animal secretion - - - - - - - - - - environment determined by a plant substance - - - - - - - - - - - - - - - - - - - - Plant secretion - envoOmics - An environmental system which has its properties and dynamics determined by a substance produced by a plant. - envoEmpo - - - Plant secretion - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - environment determined by a biofilm on a plant surface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Plant surface - envoEmpo - An environmental system which has its properties and dynamics determined by a biofilm on the surface of a plant. - envoOmics - - - Plant surface - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - digestive tract environment - - - - - - - - - - - - - - - - - - - - An environmental system which has its properties and dynamics determined by a digestive tract. - envoOmics - envoEmpo - Animal proximal gut - - - This EMPO class includes examples of microbial environments determined by the "gut intestine, gizzard, crop, lumen, [and] mucosa". - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Animal proximal gut - - - - - - - - - - environment determined by a biofilm on an animal surface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Animal surface - envoEmpo - envoOmics - An environmental system which has its properties and dynamics determined by a biofilm on the surface of a animal. - - - Animal surface - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - environment determined by a biofilm on a fungal surface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoOmics - An environmental system which has its properties and dynamics determined by a biofilm on the surface of a fungus. - Fungus surface - envoEmpo - - - Fungus surface - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - sediment permeated by saline water - - - - - - - - envoEmpo - envoOmics - Sediment which is permeated by saline water. - - - - - - - - slightly saline water - - - - - - - - - - - - - - EcoLexicon:saltwater - SWEETRealm:SalineWater - SWEETRealm:SaltWater - https://en.wikipedia.org/wiki/Saline_water - slightly salty water - The United States Geological Survey classifies slightly saline water as having around 1,000 to 3,000 ppm (0.1–0.3%) of dissolved salts. - Water which contains a slightly increased concentration of dissolved salts, relative to their concentration in freshwater. - - - - - - - - moderately saline water - - - - - - - - - - - - - - EcoLexicon:saltwater - SWEETRealm:SalineWater - SWEETRealm:SaltWater - https://en.wikipedia.org/wiki/Saline_water - moderately salty water - Water which contains a moderately increased concentration of dissolved salts, relative to their concentration in freshwater. - The United States Geological Survey classifies moderately saline water as having around 3,000 to 10,000 ppm (0.3–1%) of dissolved salts. - - - - - - - - highly saline water - - - - - - - - - - - - - - EcoLexicon:saltwater - SWEETRealm:SalineWater - SWEETRealm:SaltWater - highly salty water - https://en.wikipedia.org/wiki/Saline_water - Water which contains a highly increased concentration of dissolved salts, relative to their concentration in freshwater. - The United States Geological Survey classifies highly saline water as having around 10,000 to 35,000 ppm (1–3.5%) of dissolved salts. - - - - - - - - saline environment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoEmpo - An environment which is determined by materials which bear significant concentrations of salts. - The thresholds for "significant" concentrations of salts vary widely and thus no committment is made in this class. Subclasses with more explicit thresholds can be made upon request. - Saline - - - Saline - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - fungi-associated environment - - - - - - - - - - - - - - - - - - - - - - - - - - fungus environment - An environmental system determined by a fungal structure. - Fungus - envoOmics - envoEmpo - fungus-associated environment - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Fungus - - - - - - - - - - sterile water environment - - - - - - - - - - - - - - - - - - - - - - - - - envoOmics - This term can be understood as a negative experimental control primarily composed of sterile water. The quantity of sterile water used may be contaminated; to express pure sterile water, please use http://purl.obolibrary.org/obo/ENVO_00005791 - An environmental system which has its properties and dynamics determined by sterile water. - envoEmpo - Negative - - - Negative - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - hypersaline water environment - - - - - - - - - - - - - - - - - - - An environmental system which has its properties and dynamics determined by hypersaline water. - envoEmpo - envoPolar - Hypersaline (saline) - envoOmics - - - Hypersaline (saline) - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Examples inlcude water from hypersaline samples or brines (>50 psu) - - - - - - - - - - soil environment - - - - - - - - - - - - - - - - - - - - An environmental system which has its properties and dynamics determined by soil. - envoOmics - Soil (non-saline) - envoEmpo - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Soil (non-saline) - - - - - - - - - - oceanic subsurface zone - - - - - - - - - - - - - - We may have to soften dependence on planetary structural layers as some planets haven't differentiated by density. - A region which overlaps parts of one or more planetary structural layers which are located below an oceanic plate. - - - https://github.com/EnvironmentOntology/envo/issues/466 - A region which overlaps parts of one or more planetary structural layers which are located below an oceanic plate. - - - - - - - - - - planetary subsurface environment - - - - - - - - - - - - - - - - - - - envoOmics - envoEmpo - An environmental system which has its properties and dynamics determined by the subsurface zone of a planet. - - - - - - - - non-saline planetary subsurface environment - - - - - - - - - - - - - - - - - - - - - - - - - - - envoEmpo - envoOmics - Subsurface (non-saline) - An environmental system which has its properties and dynamics determined by those parts of a planetary subsurface zone which are not saline. - - - Subsurface (non-saline) - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - sediment environment - - - - - - - - - - - - - - - - - - - - envoOmics - An environmental system which has its properties and dynamics determined by sediment. - envoEmpo - - - - - - - - non-saline sediment environment - - - - - - - - - - - - - - - - - - - An environmental system which has its properties and dynamics determined by sediment permeated by non-saline water. - envoEmpo - Sediment (non-saline) - envoOmics - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Sediment (non-saline) - - - - - - - - - - saline sediment environment - - - - - - - - - - - - - - - - - - - envoOmics - envoEmpo - An environmental system which has its properties and dynamics determined by sediment permeated by saline water. - Sediment (saline) - - - Sediment (saline) - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - environment determined by a biofilm on a non-saline surface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Surface (non-saline) - envoEmpo - An environmental system which has its properties and dynamics determined by a biofilm on a surface which is exposed to non-saline materials. - envoOmics - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Surface (non-saline) - - - - - - - - - - aerosol environment - - - - - - - - - - - - - - - - - - - envoOmics - envoEmpo - An environmental system which has its properties and dynamics determined by an aerosol. - Aerosol (saline) - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Aerosol (saline) - - - - - - - - - - saline aerosol environment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoOmics - Aerosol (saline) - envoEmpo - An environmental system which has its properties and dynamics determined by a saline aerosol. - - - Aerosol (saline) - seaspray or other aerosolized saline material (>5 psu) - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - non-saline aerosol environment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoEmpo - Aerosol (non-saline) - envoOmics - An environmental system which has its properties and dynamics determined by an aerosol with a low concentration of dissolved solutes. - - - Aerosol (non-saline) - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - aerosolized dust or liquid - - - - - - - - - - environment associated with an animal part or small animal - - - - - - - - - - - - - - - - - - - envoOmics - An environmental system determined by part of a living or dead animal, or a whole small animal. - Animal corpus - envoEmpo - - - Animal corpus - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - environment determined by a biofilm on a saline surface - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoEmpo - An environmental system which has its properties and dynamics determined by a biofilm on a surface which is exposed to saline materials. - Surface (saline) - envoOmics - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Surface (saline) - - - - - - - - - - environment associated with a plant part or small plant - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Plant corpus - envoOmics - An environmental system determined by part of a living or dead plant, or a whole small plant. - envoEmpo - - - Plant corpus - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - environment associated with a fungal tissue - - - - - - - - - - - - - - - - - - - envoEmpo - Fungus corpus - An environmental system determined by part of a living or dead fungus. - envoOmics - - - Fungus corpus - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - mock community - - Mock community - envoOmics - Axiomatise with PCO:'microbial community' once released. - Mock communities are typically used as positive controls in experiments. - A cell culture which is composed of a microbial community of known composition. - envoEmpo - - - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - Mock community - - - - - - - - - - single strain cell culture - - envoEmpo - Single strain - A cell culture which is composed of a single population of bacterial or archaeal cells. - envoOmics - - - Single strain - http://press.igsb.anl.gov/earthmicrobiome/protocols-and-standards/emp-ontology-empo/ - - - - - - - - - - caldera lake - - - - - - - - - - - - - - - - - - - A lake which is contained within a caldera. - - - https://en.wikipedia.org/wiki/Crater_lake - A lake which is contained within a caldera. - - - - - - - - - - crater lake - - - - - - - - - - - - - - - - - - - A lake contained within a crater. - Note that this class does not commit to what kind of crater contains the lake in question. Please see the subclasses for more specificity. - - - A lake contained within a crater. - MA:ma - https://en.wikipedia.org/wiki/Crater_lake - - - - - - - - - - oxic water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2010-03-21T06:05:53Z - ORCID:0000-0002-4366-3088 - Water which has an appreciable concentration of dissolved oxygen. - The threshold dissolved oxygen concentration past which water is considered oxic is variable. Typically, this is understood as the concentration at and beyond which organisms inhabiting that water can sustain aerobic metabolism and good health. For most systems, this is above 80% oxygen saturation. Input is welcome here https://github.com/EnvironmentOntology/envo/issues/536 - - - ORCID:0000-0002-4366-3088 - Water which has an appreciable concentration of dissolved oxygen. - https://en.wikipedia.org/wiki/Hypoxia_(environmental) - - - - - - - - - - hypoxic water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2010-03-21T06:05:53Z - ORCID:0000-0002-4366-3088 - Water depleted of dissolved oxygen. - As with oxic and anoxic water, the thresholds for hypoxia are variable. Typically, a hypoxic state is asserted when dissolved oxygen levels decrease to a level where they have detrimental effects on aerobic aquatic organisms, typically below 30% oxygen saturation. - - - ORCID:0000-0002-4366-3088 - Water depleted of dissolved oxygen. - https://en.wikipedia.org/wiki/Hypoxia_(environmental) - - - - - - - - - - meteorite lake - - - - - - - - - - - - - - - - - - - A lake which is contained in a crater formed by a meteorite impact. - meteorite crater lake - meteorite impact crater lake - - - A lake which is contained in a crater formed by a meteorite impact. - https://en.wikipedia.org/wiki/Lake#Meteorite_.28extraterrestrial_impact.2F_crater.29_lakes - - - - - - - - - - impact event - - - - - - 2 - - - An impact event is a collision between astronomical objects resulting in changes in one or both of those objects. - - - https://en.wikipedia.org/wiki/Impact_event - An impact event is a collision between astronomical objects resulting in changes in one or both of those objects. - - - - - - - - - - meterorite impact - - - - - - - - - - - - - - - An impact event during which a meteoroid collides with another astronomical body. - - - An impact event during which a meteoroid collides with another astronomical body. - https://en.wikipedia.org/wiki/Impact_event - - - - - - - - - - meteoroid - - - - - - - - - - - - - - - - - - - - - An astronomical body which is composed of rocky or metallic materials and is considerably smaller than asteroids. - envoAstro - - - An astronomical body which is composed of rocky or metallic materials and is considerably smaller than asteroids. - https://en.wikipedia.org/wiki/Meteoroid - - - - - - - - - - metallic material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A material which is composed primarily of one or more pure metals and which shows their properties. - metal - Far more axiomatisation can be done should the qualities of metals be added to PATO or a similar quality ontology. However, note that there are many exceptions to the typical qualities of the majority of metals. - While this class allows for some degree of contamination by non-metal substances, the material represented should show at least some of the typical features of a pure metal: hardness (except for liquid metals), opacity, lustre, malleability, fusibility, ductile and good electrical and thermal conductivity. - - - A material which is composed primarily of one or more pure metals and which shows their properties. - https://en.wikipedia.org/wiki/Metal - - - - - - - - - - impact crater lake - - - - - - - - - - - - - - - - - - - A lake which is contained in a crater formed by an impact event. - - - A lake which is contained in a crater formed by an impact event. - https://en.wikipedia.org/wiki/Lake#Meteorite_.28extraterrestrial_impact.2F_crater.29_lakes - - - - - - - - - - impact crater - - - - - - - - A crater which was formed as a result of the impact of one astronomical body on another. - SWEETRealm:ImpactCrater - - - A crater which was formed as a result of the impact of one astronomical body on another. - MA:ma - https://en.wikipedia.org/wiki/Impact_crater - - - - - - - - - - anoxic lake - - - - - - - - - - - - - - - - - - - anaerobic lake - A lake which is primarily composed of anoxic water. - - - - - - - - lake with an anoxic hypolimnion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A lake which has a hypolimnion composed primarily of anoxic water. - anoxic lake - - - http://dx.doi.org/10.4319/lo.1984.29.1.0111 - A lake which has a hypolimnion composed primarily of anoxic water. - - - - - - - - - - lake with a hypoxic hypolimnion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - anoxic lake - A lake which has a hypolimnion composed primarily of anoxic water. - - - http://dx.doi.org/10.4319/lo.1984.29.1.0111 - A lake which has a hypolimnion composed primarily of anoxic water. - - - - - - - - - - hypoxic lake - - - - - - - - - - - - - - - - - - - oxygen-depleted lake - oxygen-poor lake - A lake which is primarily composed of anoxic water. - - - - - - - - oxic lake - - - - - - - - - - - - - - - - - - - oxygenated lake - aerobic lake - A lake which is primarily composed of oxic water. - - - - - - - - lake with an oxic hypolimnion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - oxic lake - A lake which has a hypolimnion composed primarily of oxic water. - aerobic lake - - - http://dx.doi.org/10.4319/lo.1984.29.1.0111 - A lake which has a hypolimnion composed primarily of oxic water. - - - - - - - - - - weather - - This class refers to all weather, including atmospheric and space weather. Please use a subclass for more specificity. - Environmental variability which inheres in an astronomical body part or in outer space. - - - https://en.wikipedia.org/wiki/Space_weather - Environmental variability which inheres in an astronomical body part or in outer space. - https://en.wikipedia.org/wiki/Weather - - - - - - - - - - atmospheric weather - - - - - - - - This class refers to the common usage of "weather", referencing the state of a (part of) an astronomical body's atmosphere. - Weather which inheres in an atmosphere. - - - https://en.wikipedia.org/wiki/Weather - Weather which inheres in an atmosphere. - - - - - - - - - - space weather - - - - - - - - Weather which inheres in outer space. - - - Weather which inheres in outer space. - https://en.wikipedia.org/wiki/Space_weather - - - - - - - - - - environmental variability - - A condition which inheres in an environmental system by virtue of that system undergoing variation in its composition, the distribution of the qualities its components bear, and/or in the processes which occur within it and which it participates in. - This class is very general, but the nature of environmental variability is indeed quite variable. This class may be refined once we have more subclasses to consider. - - - - - - - - climate - - The disposition of an environmental system, particularly those influencing atmospheres, to manifest a cyclic pattern of weather over time. - Climate is commonly defined as the weather averaged, or otherwise summarised, over a period of time much longer than the duration of any phenomenon that constitutes weather. The standard averaging period is 30 years, but other periods may be used depending on the purpose. - The current alignment of "climate" under BFO:disposition is drawing from its very useful etymology (Ancient Greek klima, meaning inclination). The climatic conditions currently used to axiomatise biomes (polar, tropical, etc) may be better placed under this class. - - - https://en.wikipedia.org/wiki/Climate - Climate is commonly defined as the weather averaged, or otherwise summarised, over a period of time much longer than the duration of any phenomenon that constitutes weather. The standard averaging period is 30 years, but other periods may be used depending on the purpose. - - - - - The disposition of an environmental system, particularly those influencing atmospheres, to manifest a cyclic pattern of weather over time. - https://en.wikipedia.org/wiki/Climate - - - - - - - - - - cloud formation process - - - - - - - - - - - - - - - - - - - - - - - - - - - cloud formation - A process during which water vapour condensing in the atmosphere aggregates into clouds. - - - https://en.wikipedia.org/wiki/Cloud_condensation_nuclei - A process during which water vapour condensing in the atmosphere aggregates into clouds. - - - - - - - - - - particle formation process - - - - - - - - A process during which microscopic solid or liquid objects are formed. - particle formation - - - A process during which microscopic solid or liquid objects are formed. - https://en.wikipedia.org/wiki/Particulates - - - - - - - - - - formation of particles in an atmosphere - - - - - - - - - - - - - - - - - - - - - - - - - - atmospheric particle formation - A process during which microscopic solid or liquid objects are formed in an atmosphere. - - - https://en.wikipedia.org/wiki/Particulates - A process during which microscopic solid or liquid objects are formed in an atmosphere. - - - - - - - - - - formation of solid particles in an atmosphere - - - - - - - - - - - - - - - - - - - - - - - - - A process during which microscopic solid particulates are formed in an atmosphere. - - - https://en.wikipedia.org/wiki/Particulates - A process during which microscopic solid particulates are formed in an atmosphere. - - - - - - - - - - formation of liquid droplets in an atmosphere - - - - - - - - - - - - - - - - - - - - - - - - - formation of liquid particles in an atmosphere - A process during which microscopic droplets of liquid are formed in an atmosphere. - - - A process during which microscopic droplets of liquid are formed in an atmosphere. - https://en.wikipedia.org/wiki/Particulates - - - - - - - - - - liquid aerosol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An aerosol which is primarily composed of liquid droplets. - SWEETRealm:Aerosol - - - An aerosol which is primarily composed of liquid droplets. - https://en.wikipedia.org/wiki/Aerosol - - - - - - - - - - solid aerosol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An aerosol which is primarily composed of solid particles. - SWEETRealm:Aerosol - - - An aerosol which is primarily composed of solid particles. - https://en.wikipedia.org/wiki/Aerosol - - - - - - - - - - formation of solid particles from gaseous material in an atmosphere - - - - - - - - - - - - - - - - - - - - - atmospheric formation of a solid aerosol - A process during which microscopic solid particulates are formed from gaseous materials in an atmosphere. - formation of a solid aerosol in an atmosphere - formation of a solid aerosol in the atmosphere - - - https://en.wikipedia.org/wiki/Particulates - A process during which microscopic solid particulates are formed from gaseous materials in an atmosphere. - - - - - - - - - - formation of liquid droplets from gaseous material in an atmosphere - - - - - - - - - - - - - - - - - - - - - formation of a liquid aerosol in an atmosphere - A process during which microscopic liquid droplets are formed from gaseous materials in an atmosphere. - formation of a liquid aerosol in the atmosphere - atmospheric formation of a liquid aerosol - formation of liquid particles from gaseous material in an atmosphere - - - https://en.wikipedia.org/wiki/Particulates - A process during which microscopic liquid droplets are formed from gaseous materials in an atmosphere. - - - - - - - - - - tectonic lake - - - - - - - - - - - - - - - - A lake which is contained in a depression formed by the deformation and resulting lateral and vertical movements of a lithosphere. - - - A lake which is contained in a depression formed by the deformation and resulting lateral and vertical movements of a lithosphere. - https://en.wikipedia.org/wiki/Lake#Tectonic_lakes - - - - - - - - - - tectonic movement - - - - - - - - - - - - - - - - - - - A process during which pieces of a planetary crust and uppermost mantle move. - - - https://en.wikipedia.org/wiki/List_of_tectonic_plates - https://en.wikipedia.org/wiki/Plate_tectonics - A process during which pieces of a planetary crust and uppermost mantle move. - - - - - - - - - - convergent tectonic movement - - - - - - 2 - - - - - - - - - A process during which pieces of a planetary crust and uppermost mantle move towards one another. - - - https://en.wikipedia.org/wiki/Convergent_boundary - https://en.wikipedia.org/wiki/Plate_tectonics - A process during which pieces of a planetary crust and uppermost mantle move towards one another. - https://en.wikipedia.org/wiki/List_of_tectonic_plates - - - - - - - - - - divergent tectonic movement - - - - - - - - - - - - 2 - - - A process during which pieces of a planetary crust and uppermost mantle move away from one another. - constructive tectonic movement - extensional tectonic movement - - - A process during which pieces of a planetary crust and uppermost mantle move away from one another. - https://en.wikipedia.org/wiki/List_of_tectonic_plates - https://en.wikipedia.org/wiki/Divergent_boundary - https://en.wikipedia.org/wiki/Plate_tectonics - - - - - - - - - - transform tectonic movement - - - - - - - - - - - - 2 - - - A process during which pieces of a planetary crust and uppermost mantle move along each other in a predominantly horizontal manner, either in a sinistral (left lateral) or dextral (right lateral) direction. - conservative tectonic movement - - - https://en.wikipedia.org/wiki/Plate_tectonics - A process during which pieces of a planetary crust and uppermost mantle move along each other in a predominantly horizontal manner, either in a sinistral (left lateral) or dextral (right lateral) direction. - https://en.wikipedia.org/wiki/Transform_fault - https://en.wikipedia.org/wiki/List_of_tectonic_plates - - - - - - - - - - tectonic plate - - - - - - - - - - - - - - - - - - - - - - - - - - A part of a lithosphere which is separated by other such parts by geographic faults or similar geomorphological discontinuities. - - - A part of a lithosphere which is separated by other such parts by geographic faults or similar geomorphological discontinuities. - https://en.wikipedia.org/wiki/List_of_tectonic_plates - - - - - - - - - - tectonic plate boundary - - - - - - 2 - - - - - - - - - - - - - - - A geomorphological feature which is formed where two or more tectonic plates move towards, away from, or along one another, resulting in deformation of the lithosphere. - - - https://en.wikipedia.org/wiki/Plate_tectonics - A geomorphological feature which is formed where two or more tectonic plates move towards, away from, or along one another, resulting in deformation of the lithosphere. - - - - - - - - - - divergent plate boundary - - constructive plate boundary - A geomorphological feature which is formed where two or more tectonic plates are actively moving away from one another, resulting in deformation of the lithosphere that forms rifts or ridges. - extensional plate boundary - divergent boundary - extensional boundary - constructive boundary - - - https://en.wikipedia.org/wiki/Plate_tectonics - A geomorphological feature which is formed where two or more tectonic plates are actively moving away from one another, resulting in deformation of the lithosphere that forms rifts or ridges. - https://en.wikipedia.org/wiki/Convergent_boundary - - - - - - - - - - convergent plate boundary - - convergent boundary - destructive plate boundary - destructive boundary - A geomorphological feature which is formed where two or more tectonic plates are actively moving towards one another, resulting in deformation of the lithosphere that forces one plate below the other where it melts in the mantle. - - - https://en.wikipedia.org/wiki/Plate_tectonics - https://en.wikipedia.org/wiki/Convergent_boundary - A geomorphological feature which is formed where two or more tectonic plates are actively moving towards one another, resulting in deformation of the lithosphere that forces one plate below the other where it melts in the mantle. - - - - - - - - - - transform plate boundary - - This class overlaps with the semantics of geographic faults and further work needs to be done to disentangle them. - transform fault - A geomorphological feature which is formed where two or more tectonic plates are actively moving along one another in either a sinistral (left lateral) or dextral (right lateral) horizontal direction. - transform boundary - - - https://en.wikipedia.org/wiki/Plate_tectonics - https://en.wikipedia.org/wiki/Convergent_boundary - A geomorphological feature which is formed where two or more tectonic plates are actively moving along one another in either a sinistral (left lateral) or dextral (right lateral) horizontal direction. - - - - - - - - - - tectonic plate subduction - - - - - - - - - - - - - A convergent tectonic movement process during which one plate moves under another and is forced or sinks due to gravity into a mantle. - subduction - - - https://en.wikipedia.org/wiki/Plate_tectonics - https://en.wikipedia.org/wiki/List_of_tectonic_plates - https://en.wikipedia.org/wiki/Subduction - A convergent tectonic movement process during which one plate moves under another and is forced or sinks due to gravity into a mantle. - https://en.wikipedia.org/wiki/Convergent_boundary - - - - - - - - - - detritus - - - - - - - - An organic material which is primarily composed of dead particulate matter. - - - An organic material which is primarily composed of dead particulate matter. - https://en.wikipedia.org/wiki/Detritus - - - - - - - - - - rift zone - - - - - - - - rift - envoPolar - http://orcid.org/0000-0002-4366-3088 - An environmental zone in which extensional tectonic processes occur and where the lithosphere is being pulled apart. - - - https://en.wikipedia.org/wiki/Rift - An environmental zone in which extensional tectonic processes occur and where the lithosphere is being pulled apart. - - - - - - - - - - aeolian lake - - - - - - - - A lake which fills a basin that has been dammed by wind-blown sand, formed between sand dunes oriented by winds; or formed by wind action under previously arid paleoenvironments. - - - https://en.wikipedia.org/wiki/Lake#Aeolian_lakes - A lake which fills a basin that has been dammed by wind-blown sand, formed between sand dunes oriented by winds; or formed by wind action under previously arid paleoenvironments. - - - - - - - - - - landslide lake - - - - - - - - - - - - - - A lake which fills a depression where drainage is blocked by solid material transported by a landslide. - - - https://en.wikipedia.org/wiki/Lake#Landslide_lakes - A lake which fills a depression where drainage is blocked by solid material transported by a landslide. - - - - - - - - - - rockslide lake - - - - - - - - - - - - - - A lake which fills a depression where drainage is blocked by solid material transported by a rockslide. - - - A lake which fills a depression where drainage is blocked by solid material transported by a rockslide. - https://en.wikipedia.org/wiki/Lake#Landslide_lakes - - - - - - - - - - rockslide process - - - - - - - - - - - - - - - - - - A rockslide is a process whereby a large mass of rock moves down a hill or a mountainside. - environmental_hazards - rockslip - - - A rockslide is a process whereby a large mass of rock moves down a hill or a mountainside. - https://en.wikipedia.org/wiki/Mass_wasting - - - - - - - - - - Karman vortex street - - - - - - - - - - - - - Kármán vortex street - A succession of swirling vortices caused by the unsteady separation of flow of a fluid around one or more blunt bodies. - von Kármán vortex street - These vortices are responsible for such phenomena as the "singing" of suspended telephone or power lines, and the vibration of a car antenna at certain speeds. - - - https://en.wikipedia.org/wiki/K%C3%A1rm%C3%A1n_vortex_street - A succession of swirling vortices caused by the unsteady separation of flow of a fluid around one or more blunt bodies. - - - - - - - - - - ecosystem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This class will be primarily filled by inference, any environmental system which necessarily includes living parts should be autoclassified here. - An environmental system which includes both living and non-living components. - - - https://en.wikipedia.org/wiki/Ecosystem - An environmental system which includes both living and non-living components. - - - - - - - - - - fossil worm burrow - - - - - - - - A channel which was formed as a result of an annelid burrowing through soil, where organic residues lining the burrow have subsequently initiated fossilization. - - - A channel which was formed as a result of an annelid burrowing through soil, where organic residues lining the burrow have subsequently initiated fossilization. - https://doi.org/10.1371/journal.pone.0070920 - - - - - - - - - - fossilization of organic material - - - - - - - - - - - - - - fossilization - A process during which organic substances are replaced with mineral substrances, maintaining part of their anatomical organisation. - - - https://en.wikipedia.org/wiki/Fossil#Fossilization_processes - A process during which organic substances are replaced with mineral substrances, maintaining part of their anatomical organisation. - - - - - - - - - - forage material - - - - - - - - forage - Material which is primarily conposed of the vegetation present in tended pastures: mainly grasses, with an interspersion of legumes and other forbs. - - - https://en.wikipedia.org/wiki/Pasture - Material which is primarily conposed of the vegetation present in tended pastures: mainly grasses, with an interspersion of legumes and other forbs. - - - - - - - - - - feed storage space - - feed storage - A physical space, which may or may not be in a construction, which is used to store animal feed for agricultural purposes. - This should be moved to "zone", and inference should be used to link to agricultural feature. - - - A physical space, which may or may not be in a construction, which is used to store animal feed for agricultural purposes. - http://orcid.org/0000-0002-8844-9165 - - - - - - - - - - manure storage space - - A physical space, which may or may not be in a construction, which is used to store animal manure for agricultural purposes. - This should be moved to "zone", and inference should be used to link to agricultural feature. - manure storage - - - A physical space, which may or may not be in a construction, which is used to store animal manure for agricultural purposes. - http://orcid.org/0000-0002-8844-9165 - - - - - - - - - - bovine dairy liquid manure - - Manure which has been collected directly or indirectly from dairy cattle, as from flushing of manure from concrete feed lanes, free stalls, and milking facilities. - - - Manure which has been collected directly or indirectly from dairy cattle, as from flushing of manure from concrete feed lanes, free stalls, and milking facilities. - http://orcid.org/0000-0002-8844-9165 - http://manuremanagement.ucdavis.edu/files/134369.pdf - - - - - - - - - - poultry manure - - Manure which is composed primarily of the feces of poultry. - - - Manure which is composed primarily of the feces of poultry. - http://orcid.org/0000-0002-8844-9165 - - - - - - - - - - heat-treated animal manure - - Manure which has been subjected to heat treatment for solidification and/or sterilization purposes. - - - Manure which has been subjected to heat treatment for solidification and/or sterilization purposes. - http://orcid.org/0000-0002-8844-9165 - - - - - - - - - - composted animal manure - - Manure which has been subjected to a natural process of 'rotting' or decomposition of its organic matter content by microorganisms under controlled conditions. - - - http://orcid.org/0000-0002-8844-9165 - Manure which has been subjected to a natural process of 'rotting' or decomposition of its organic matter content by microorganisms under controlled conditions. - - - - - - - - - - animal manure product - - - - - - - - A product which is composed primarily of animal manure that has been heat treated and packaged as a product for commercial or consumer use. - - - http://orcid.org/0000-0002-8844-9165 - A product which is composed primarily of animal manure that has been heat treated and packaged as a product for commercial or consumer use. - - - - - - - - - - plant matter - - - - - - - - Organic material which is primarily composed of plant structures, living or dead. - - - - - - - - gas planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gas giants are composed of about 90% hydrogen and helium. Jupiter and Saturn are examples of gas giants. - envoAstro - A planet which is primarily composed of hydrogen and helium. - - - https://en.wikipedia.org/wiki/Planet - https://en.wikipedia.org/wiki/List_of_planet_types - A planet which is primarily composed of hydrogen and helium. - http://solarsystem.nasa.gov/planets/whatisaplanet - - - - - - - - - - dwarf gas planet - - The physical make-up of gas dwarfs limit their size, which gravitate towards a total radius between 1.7 and 3.9 Earth-radii. - A gas planet which 1) is considerably smaller than a gas giant and 2) has a rocky core around which a thick envelope primarily composed of hydrogen, helium, and smaller proportions of volatiles. - envoAstro - - - https://en.wikipedia.org/wiki/Gas_dwarf - The physical make-up of gas dwarfs limit their size, which gravitate towards a total radius between 1.7 and 3.9 Earth-radii. - - - - - https://en.wikipedia.org/wiki/List_of_planet_types - http://solarsystem.nasa.gov/planets/whatisaplanet - A gas planet which 1) is considerably smaller than a gas giant and 2) has a rocky core around which a thick envelope primarily composed of hydrogen, helium, and smaller proportions of volatiles. - https://en.wikipedia.org/wiki/Gas_dwarf - https://en.wikipedia.org/wiki/Planet - - - - - - - - - - giant gas planet - - A gas planet which has mass and size comparable to Jupiter and Saturn. - gas giant - envoAstro - The definition should be revised to avoid relativisation to instances. - - - https://en.wikipedia.org/wiki/Planet - A gas planet which has mass and size comparable to Jupiter and Saturn. - http://solarsystem.nasa.gov/planets/whatisaplanet - https://en.wikipedia.org/wiki/Gas_giant - https://en.wikipedia.org/wiki/List_of_planet_types - - - - - - - - - - ice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An ice is an environmental material which is either frozen or which is maintained in a solid state by gravitational forces or pressure. - This class is defined logically - any material that is frozen is considered a subclass. Note that ice may be formed at very high temperatures, due to gravitational effects and/or pressure. - - - - - - - - astrogeological ice - - ice - envoAstro - This is a term native to the fields of planetary science and astrophysics. Water, ammonia, and methane are considered "ices" with freezing points of 273 K, 195 K, and 91 K, respectively. - An astrogeological volatile which is composed primarily of chemical compounds with freezing points above an approximate threshold of 100 Kelvin. - - - An astrogeological volatile which is composed primarily of chemical compounds with freezing points above an approximate threshold of 100 Kelvin. - https://en.wikipedia.org/wiki/Ice_giant - - - - - - - - - - ice giant - - - - - - - - - - - - - - - - - - - A giant planet which is primarily composed of elements heavier than hydrogen and helium, volatile chemical compounds with freezing points above about 100 Kelvin. - Uranus and Neptune are considered ice giants, a separate class relative to the gas giants, Jupiter and Saturn. Ice giants consist of only about 20% hydrogen and helium in mass. A large portion of the mass in an ice giant was incorporated by the capture of ice (as defined in planetary science) or as gas trapped in water ice. - envoAstro - - - A giant planet which is primarily composed of elements heavier than hydrogen and helium, volatile chemical compounds with freezing points above about 100 Kelvin. - https://en.wikipedia.org/wiki/List_of_planet_types - https://en.wikipedia.org/wiki/Planet - https://en.wikipedia.org/wiki/Ice_giant - http://solarsystem.nasa.gov/planets/whatisaplanet - - - - - - - - - - mini-Neptune - - envoAstro - transitional planet - These planets have a mass up to 10 Earth masses, notably smaller than Uranus or Neptune, which are about 14.5 and 17 Earth masses, respectively. - A gas planet which has an atmosphere composed of hydrogen and helium - probably with deep layers of ice, rock or liquid oceans (made of water, ammonia, a mixture of both, or heavier volatiles) - and a small core made of low-density volatiles. - - - https://en.wikipedia.org/wiki/Gas_dwarf - https://en.wikipedia.org/wiki/Mini-Neptune - A gas planet which has an atmosphere composed of hydrogen and helium - probably with deep layers of ice, rock or liquid oceans (made of water, ammonia, a mixture of both, or heavier volatiles) - and a small core made of low-density volatiles. - - - - - - - - - - super-Jupiter - - Due to their immense size, super-Jupiter class objects straddle the space between planets and other objects such as brown dwarfs. While they may be more massive than Jupiter, super-Jupiters tend to be the same approximate size, with increasing density as their mass increases up to about 80 Jupiter masses. - envoAstro - An astronomical object which is more massive than the planet Jupiter. - - - https://en.wikipedia.org/wiki/Super-Jupiter - An astronomical object which is more massive than the planet Jupiter. - - - - - - - - - - gravitational motion - - envoAstro - A process during which one or more entities move along geodesics in a region of spacetime that has been sufficiently curved towards an entity with sufficient mass and/or energy. - - - https://en.wikipedia.org/wiki/Gravity - A process during which one or more entities move along geodesics in a region of spacetime that has been sufficiently curved towards an entity with sufficient mass and/or energy. - - - - - - - - - - hot Jupiter - - A giant gas planet which has a jovian-scale mass (0.36–11.8 Jupiter masses), a short orbital period (1.3–111 Earth days), and which is close to the star it orbits, resulting in extreme and exotic atmospheric properties. - pegasid - It is assumed that the mass of a hot Jupiter cannot be greater than approximately 13.6 Jupiter masses, beyond which the planet would start burning deuterium and become a brown dwarf. - pegasean planet - roaster planet - - envoAstro - epistellar jovian - - - It is assumed that the mass of a hot Jupiter cannot be greater than approximately 13.6 Jupiter masses, beyond which the planet would start burning deuterium and become a brown dwarf. - https://en.wikipedia.org/wiki/Hot_Jupiter - - - - - - - - - - hot Neptune - - hoptune - envoAstro - A gas planet which has a mass similar to that of Neptune or Uranus and which closely orbits its star (normally at a distance less than 1 Astronomical Unit). - Whether this should be classified as a gas planet or an ice giant must be explored. - - - A gas planet which has a mass similar to that of Neptune or Uranus and which closely orbits its star (normally at a distance less than 1 Astronomical Unit). - https://en.wikipedia.org/wiki/Hot_Neptune - - - - - - - - - - mega-Earth - - A terrestrial exoplanet which is at least ten times the mass of Earth. - envoAstro - - - https://en.wikipedia.org/wiki/Mega-Earth - A terrestrial exoplanet which is at least ten times the mass of Earth. - - - - - - - - - - super-Earth - - A terrestrial planet which has a mass higher than Earth's, but substantially below the masses of Uranus and Neptune (15 and 17 Earth masses, respectively). - envoAstro - The upper bound of a super-Earth's mass is generally agreed on as 10 Earth masses. In general, super-Earths are defined exclusively by their masses, and the term does not imply temperatures, compositions, orbital properties, habitability, or environments. - - - A terrestrial planet which has a mass higher than Earth's, but substantially below the masses of Uranus and Neptune (15 and 17 Earth masses, respectively). - https://en.wikipedia.org/wiki/Super-Earth - - - - - - - - - - desert planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A terrestrial planet which has a surface dominated by hot deserts. - This class of planet is still mostly theoretical. - envoAstro - dry planet - - - - - - - - ocean planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - While this planetary form is still mostly theoretical, strong candidates exist such as the extrasolar planet GJ 1214 b and ocean planet candidate Kepler-22b. - A planet which has a surface layer that nearly completely or completely covered by water, and which has a substantial portion of its mass composed of water. - panthalassic planet - aquaplanet - envoAstro - water world - An axiom to express that the planet has a 'substantial' proportion of its mass in the form of water wound enhance this class. - - - A planet which has a surface layer that nearly completely or completely covered by water, and which has a substantial portion of its mass composed of water. - https://en.wikipedia.org/wiki/Ocean_planet - - - - - - - - - - ice planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoAstro - cryoplanet - While this planetary form is still mostly theoretical, strong candidates exist such as OGLE-2005-BLG-390Lb, OGLE-2013-BLG-0341L b and MOA-2007-BLG-192Lb. Pluto was considered an ice planet until its reclassification in 2006 CE. Surface temperatures of ice planets would have to be below 260 K (−13°C) if composed primarily of water, below 180 K (−93°C) if primarily composed of CO2 and ammonia, and below 80 K (−193°C) if composed primarily of methane. - A planet which has a surface layer that nearly completely or completely covered by ice, and which has a substantial portion of its mass composed of ice. - - - https://en.wikipedia.org/wiki/Ice_planet - A planet which has a surface layer that nearly completely or completely covered by ice, and which has a substantial portion of its mass composed of ice. - - - - - https://en.wikipedia.org/wiki/Ice_planet - While this planetary form is still mostly theoretical, strong candidates exist such as OGLE-2005-BLG-390Lb, OGLE-2013-BLG-0341L b and MOA-2007-BLG-192Lb. Pluto was considered an ice planet until its reclassification in 2006 CE. Surface temperatures of ice planets would have to be below 260 K (−13°C) if composed primarily of water, below 180 K (−93°C) if primarily composed of CO2 and ammonia, and below 80 K (−193°C) if composed primarily of methane. - - - - - - - - - - carbon dioxide ice - - - - - - - - Ice which is primarily composed of carbon dioxide. - dry ice - envoAstro - - - Ice which is primarily composed of carbon dioxide. - https://en.wikipedia.org/wiki/Ice - - - - - - - - - - methane ice - - - - - - - - Ice which is primarily composed of methane. - envoAstro - - - Ice which is primarily composed of methane. - https://en.wikipedia.org/wiki/Ice - - - - - - - - - - ammonia ice - - - - - - - - Ice which is primarily composed of ammonia. - envoAstro - - - Ice which is primarily composed of ammonia. - https://en.wikipedia.org/wiki/Ice - - - - - - - - - - carbon monoxide ice - - - - - - - - Ice which is primarily composed of carbon monoxide. - envoAstro - - - Ice which is primarily composed of carbon monoxide. - https://en.wikipedia.org/wiki/Ice - - - - - - - - - - iron planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cannonball planet - Mercury is the largest iron planet in the Solar System, the other terrestrial planets being composed of silicate rocks. Some extrasolar planet candidates that may be composed mainly of iron are KOI-1843 b,[5] Kepler-70b and Kepler-10b. - A planet which in primarily composed of an iron-rich core with little to no mantle - envoAstro - - - https://en.wikipedia.org/wiki/Iron_planet - Mercury is the largest iron planet in the Solar System, the other terrestrial planets being composed of silicate rocks. Some extrasolar planet candidates that may be composed mainly of iron are KOI-1843 b,[5] Kepler-70b and Kepler-10b. - - - - - https://en.wikipedia.org/wiki/Iron_planet - A planet which in primarily composed of an iron-rich core with little to no mantle - - - - - - - - - - lava planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoAstro - A planet which has a surface layer that nearly completely or completely covered by lava, and which has a substantial portion of its mass composed of lava. - This class of planets is still mostly theoretical, however, lava planets are thought plausible shortly after a terrestrial planet is formed, soon after a terrestrial planet has suffered a large collision event, or if a terrestrial planet is orbiting very close to its star, causing intense irradiation and tidal forces. Likely lava exoplanets include COROT-7b, Kepler-10b, Alpha Centauri Bb, and Kepler-78b. - - - This class of planets is still mostly theoretical, however, lava planets are thought plausible shortly after a terrestrial planet is formed, soon after a terrestrial planet has suffered a large collision event, or if a terrestrial planet is orbiting very close to its star, causing intense irradiation and tidal forces. Likely lava exoplanets include COROT-7b, Kepler-10b, Alpha Centauri Bb, and Kepler-78b. - https://en.wikipedia.org/wiki/Lava_planet - - - - - https://en.wikipedia.org/wiki/Lava_planet - A planet which has a surface layer that nearly completely or completely covered by lava, and which has a substantial portion of its mass composed of lava. - - - - - - - - - - sub-Earth - - The first sub-Earths were discovered by the Kepler Orbiting Observatory space telescope on 2012-01-10, orbiting the star Kepler-42. As of June 2014, Kepler has 45 confirmed planets that are smaller than Earth, with 17 of them being smaller than 0.8 Earth radii. In addition, there are over 310 planet candidates with an estimated radius of less than 1 Earth radius, with 135 of them being smaller than 0.8 Earth radii. - A terrestrial planet which has a mass smaller than Earth's, such that 1) it lacks a magnetic field strong enough to shield its atmosphere from erosion by stellar wind and 2) it has comparatively short periods of geological activity unless it is subject to gravitational tidal forces from a much more massive object. - envoAstro - - - https://en.wikipedia.org/wiki/Sub-Earth - A terrestrial planet which has a mass smaller than Earth's, such that 1) it lacks a magnetic field strong enough to shield its atmosphere from erosion by stellar wind and 2) it has comparatively short periods of geological activity unless it is subject to gravitational tidal forces from a much more massive object. - - - - - The first sub-Earths were discovered by the Kepler Orbiting Observatory space telescope on 2012-01-10, orbiting the star Kepler-42. As of June 2014, Kepler has 45 confirmed planets that are smaller than Earth, with 17 of them being smaller than 0.8 Earth radii. In addition, there are over 310 planet candidates with an estimated radius of less than 1 Earth radius, with 135 of them being smaller than 0.8 Earth radii. - https://en.wikipedia.org/wiki/Sub-Earth - - - - - - - - - - chthonian planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A planet which is formed as a result of a gas giant's hydrogen and helium atmosphere, as well as its outer layers, being stripped away by a stellar wind through hydrodynamic escape. - envoAstro - cthonian planet - This class is largely theoretical, however, some likely candidates exist. HD 209458 b and Gliese 436b are examples of a gas giants that are in the process of having their atmospheres stripped away. COROT-7b is the first exoplanet found that might be chthonian. - - - This class is largely theoretical, however, some likely candidates exist. HD 209458 b and Gliese 436b are examples of a gas giants that are in the process of having their atmospheres stripped away. COROT-7b is the first exoplanet found that might be chthonian. - https://en.wikipedia.org/wiki/Chthonian_planet - - - - - https://en.wikipedia.org/wiki/Chthonian_planet - A planet which is formed as a result of a gas giant's hydrogen and helium atmosphere, as well as its outer layers, being stripped away by a stellar wind through hydrodynamic escape. - - - - - - - - - - photoevaporation - - - - - - - - - - - - - - envoAstro - This process is responsible for the stripping away of gases from the atmosphere of planets and related bodies by acceleration on interaction with high energy photons and other electromagnetic radiation. - A process during which energetic radiation ionises gas and causes it to disperse away from the ionising source. - - - https://en.wikipedia.org/wiki/Chthonian_planet#cite_note-4 - A process during which energetic radiation ionises gas and causes it to disperse away from the ionising source. - arXiv:1604.05220 - https://en.wikipedia.org/wiki/Photoevaporation - - - - - - - - - - helium planet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The placement of this class assumes that some traces of hydrogen are left in the atmosphere. If this is not the case, the axiom on gas planet must be updated. - A gas planet which has an atmosphere composed primarily of helium. - A helium planet might form via hydrogen evaporation from a gaseous planet orbiting close to a star. Low-mass white dwarfs may transition into objects which are essentially helium planets by hydrogen depletion through mass transfer to a massive object such as a neutron star. Gliese 436 b is a candidate helium planet. - envoAstro - - - https://en.wikipedia.org/wiki/Helium_planet - A helium planet might form via hydrogen evaporation from a gaseous planet orbiting close to a star. Low-mass white dwarfs may transition into objects which are essentially helium planets by hydrogen depletion through mass transfer to a massive object such as a neutron star. Gliese 436 b is a candidate helium planet. - - - - - https://en.wikipedia.org/wiki/Helium_planet - A gas planet which has an atmosphere composed primarily of helium. - - - - - - - - - - planetesimal - - envoAstro - An astronomical body which 1) is held together by its own gravity, 2) can attract other, similar bodies through mutual gravitational influence, and 3) has orbital dynamics that are not significantly affected by gas drag. - In the Solar nebula, planetesimals are usually larger than approximately 1 kilometer. - - - In the Solar nebula, planetesimals are usually larger than approximately 1 kilometer. - https://en.wikipedia.org/wiki/Planetesimal - - - - - https://en.wikipedia.org/wiki/Planetesimal - An astronomical body which 1) is held together by its own gravity, 2) can attract other, similar bodies through mutual gravitational influence, and 3) has orbital dynamics that are not significantly affected by gas drag. - - - - - - - - - - protoplanet - - planetary embryo - State that this is derived from a collection of planetesimals. - An astronomical object that forms within a protoplanetary disc when planetesimals and other solid debris aggregate and, due to gravitational forces, fuse and initiate internal melting to produce a differentiated interior. - Protoplanets are thought to form out of kilometer-sized planetesimals that gravitationally perturb each other's orbits and collide, gradually coalescing into the dominant planets. The exact sequence of events which lead to planetary formation from protoplanets is not fully understood. - envoAstro - - - https://en.wikipedia.org/wiki/Protoplanet - An astronomical object that forms within a protoplanetary disc when planetesimals and other solid debris aggregate and, due to gravitational forces, fuse and initiate internal melting to produce a differentiated interior. - - - - - Protoplanets are thought to form out of kilometer-sized planetesimals that gravitationally perturb each other's orbits and collide, gradually coalescing into the dominant planets. The exact sequence of events which lead to planetary formation from protoplanets is not fully understood. - https://en.wikipedia.org/wiki/Protoplanet - - - - - - - - - - protoplanetary disk - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - envoAstro - An astronomical object which is composed of dense gas and dust rotating around a young newly formed star, a T Tauri star, or a Herbig Ae/Be star in a disk-shaped configuration. - - - https://en.wikipedia.org/wiki/Protoplanetary_disk - An astronomical object which is composed of dense gas and dust rotating around a young newly formed star, a T Tauri star, or a Herbig Ae/Be star in a disk-shaped configuration. - - - - - - - - - - proplyd - - - - - - - - - - - - 1 - - - - - - - - - A protoplanetary disk which is externally illuminated and undergoing photoevaporation. - envoAstro - ionized protoplanetary disk - - - A protoplanetary disk which is externally illuminated and undergoing photoevaporation. - https://en.wikipedia.org/wiki/Proplyd - https://en.wikipedia.org/wiki/Protoplanetary_disk - - - - - - - - - - mesoplanet - - envoAstro - A planet which is smaller than Mercury but larger than Ceres. - - - A planet which is smaller than Mercury but larger than Ceres. - https://en.wikipedia.org/wiki/Mesoplanet - - - - - - - - - - circumbinary planet - - A planet which orbits two stars. - Because of the short orbits of some binary stars, the only way for planets to form is by forming outside the orbit of the two stars. - envoAstro - - - A planet which orbits two stars. - https://en.wikipedia.org/wiki/Circumbinary_planet - - - - - Because of the short orbits of some binary stars, the only way for planets to form is by forming outside the orbit of the two stars. - https://en.wikipedia.org/wiki/Circumbinary_planet - - - - - - - - - - volatile astrogeological material - - A material which is composed primarily of chemical elements and compounds with relatively low boiling points, equilibrium condensation temperatures below 1300 Kelvin, and which are part of the crust or atmosphere of a moon or planet. - envoAstro - Examples include nitrogen, water, carbon dioxide, ammonia, hydrogen, methane and sulfur dioxide. In astrogeology, these compounds, in their solid state, often comprise large proportions of the crusts of moons and dwarf planets. - Add and axiomatise with moon and lunar crust - volatile - - - https://en.wikipedia.org/wiki/Volatiles - A material which is composed primarily of chemical elements and compounds with relatively low boiling points, equilibrium condensation temperatures below 1300 Kelvin, and which are part of the crust or atmosphere of a moon or planet. - - - - - Examples include nitrogen, water, carbon dioxide, ammonia, hydrogen, methane and sulfur dioxide. In astrogeology, these compounds, in their solid state, often comprise large proportions of the crusts of moons and dwarf planets. - https://en.wikipedia.org/wiki/Volatiles - - - - - - - - - - astrogeological gas - - This is a term native to the fields of planetary science and astrophysics. Hydrogen has a boiling point of 20.271 Kelvin and a melting point of 13.99 Kelvin. Helium has a boiling point of 4.222 Kelvin and a melting point of 0.95 Kelvin. - gas - An astrogeological volatile which is composed primarily of chemical compounds with boiling points around those of hydrogen and helium. - envoAstro - - - An astrogeological volatile which is composed primarily of chemical compounds with boiling points around those of hydrogen and helium. - https://en.wikipedia.org/wiki/Volatiles - - - - - - - - - - refractory astrogeological material - - Add and axiomatise with moon and lunar crust - envoAstro - The refractory group includes elements and compounds like metals and silicates (commonly termed rocks) which make up the bulk of the mass of the terrestrial planets and asteroids in the inner belt. - A material which is composed primarily of chemical elements and compounds which have equilibrium condensation temperatures above approximately 1300 Kelvin and which are part of the crust or atmosphere of a moon or planet. - refractory material - - - The refractory group includes elements and compounds like metals and silicates (commonly termed rocks) which make up the bulk of the mass of the terrestrial planets and asteroids in the inner belt. - https://en.wikipedia.org/wiki/Refractory_(planetary_science) - - - - - https://en.wikipedia.org/wiki/Refractory_(planetary_science) - A material which is composed primarily of chemical elements and compounds which have equilibrium condensation temperatures above approximately 1300 Kelvin and which are part of the crust or atmosphere of a moon or planet. - - - - - - - - - - atmospheric escape - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A process during which gases that constitute a planetary atmosphere escape that planet's gravitational field and move away into outer space. - envoAstro - - - A process during which gases that constitute a planetary atmosphere escape that planet's gravitational field and move away into outer space. - https://en.wikipedia.org/wiki/Atmospheric_escape - - - - - - - - - - hydrodynamic escape - - - - - - - - - - - - - - An atmospheric escape process during which atoms that are parts of a planetary atmosphere escape into outer space through numerous collisions with lighter atoms in that atmosphere. - envoAstro - - - An atmospheric escape process during which atoms that are parts of a planetary atmosphere escape into outer space through numerous collisions with lighter atoms in that atmosphere. - https://en.wikipedia.org/wiki/Atmospheric_escape - - - - - - - - - - environmental role - - Experimental class. - A role which is may be realised by an environmental system - envoPolar - ORCID:0000-0002-4366-3088 - - - - - - - - oasis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cienaga - ORCID:0000-0002-4366-3088 - An oasis is a vegetated area located in a desert, supplied with water from a water source which it surrounds, and surrounded by arid soil, sand, or rock. - https://en.wikipedia.org/wiki/Oasis - - - - - - - - vegetated area - - envoPolar - ORCID:0000-0002-4366-3088 - A vegetated area is a geographic feature which has ground cover dominated by plant communities. - - - - - - - - bone element environment - - - - - - - - - - - - - - - - - - - - An environment which is determined by a bone element. - - - - - - - - hydroform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A hydroform is a geographic feature which is primarily composed of a continuous volume of liquid water held in shape by an environmental process. - Similar, in spirit, to landform. - Should create links to envrionmental process with new relation like "sustained_by" - - - ORCID:0000-0002-4366-3088 - Should create links to envrionmental process with new relation like "sustained_by" - - - - - - - - - - hypodermic needle - - A hypodermic needle is a medical instrument made from a hollow needle. It is commonly used with a syringe to inject substances into the body of an organism. - ENVO - ENVO:02000000 - https://en.wikipedia.org/wiki/Hypodermic_needle - - - A hypodermic needle is a medical instrument made from a hollow needle. It is commonly used with a syringe to inject substances into the body of an organism. - GEMINA:ag - https://en.wikipedia.org/wiki/Hypodermic_needle - - - - - - - - - - textile - - A textile is a manufactured product comprised of a network of natural or artificial fibers (often referred to as thread or yarn). - ENVO - ENVO:02000001 - https://en.wikipedia.org/wiki/Textile - - - A textile is a manufactured product comprised of a network of natural or artificial fibers (often referred to as thread or yarn). - GEMINA:ag - https://en.wikipedia.org/wiki/Textile - - - - - - - - - - bedclothing - - Bedclothing is a textile covering used on a bed as a sheet, blanket, or pillowcase. - ENVO - ENVO:02000002 - - - Bedclothing is a textile covering used on a bed as a sheet, blanket, or pillowcase. - GEMINA:ag - URL:http://dictionary.reference.com/search?q=bedclothing&r=66 - URL:http://www.m-w.com/dictionary/bedclothes - - - - - - - - - - pockmark field - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A pockmark field is an undersea feature formed by shallow seabed depressions, typically several tens of metres across and a few metres deep. Generally, they are formed in soft, fine-grained seabed sediments by the escape of fluids (gas or water, but mainly methane) into the water column. - ENVO - ENVO:02000003 - - - A pockmark field is an undersea feature formed by shallow seabed depressions, typically several tens of metres across and a few metres deep. Generally, they are formed in soft, fine-grained seabed sediments by the escape of fluids (gas or water, but mainly methane) into the water column. - GEMINA:ag - https://en.wikipedia.org/wiki/Pockmark - - - - - - - - - - nesting material - - ENVO - ENVO:02000004 - Nesting material is an animal habitation consisting of matierals used to cushion, insulate and protect the young of the organism. The adult will use the material to form a protective structure to house and raise their young. Nests are built primarily by birds, but also by mammals, fish, insects and reptiles. - - - Nesting material is an animal habitation consisting of matierals used to cushion, insulate and protect the young of the organism. The adult will use the material to form a protective structure to house and raise their young. Nests are built primarily by birds, but also by mammals, fish, insects and reptiles. - https://en.wikipedia.org/wiki/Nest - - - - - - - - - - obsolete livestock-associated habitat - ENVO - ENVO:02000005 - Livestock is an animal-associated habitat consisting of any domestic or domesticated animal intentionally raised for food or in the production of food or raised as stock to produce food or fibre, in an agricultural setting or for its labour or pen-raised animals raised on licensed game farm operations. Livestock include: bovine animals (including buffalo and bison), ovine animals, porcine animals, caprine animals, , poultry, bees, equine animals, cervidae animals; animals of the genus Lama; ratites (Emu, Ostrich, and Rhea), fish or shellfish in aquaculture facilities, and enclosed domesticated rabbits or hares raised for human food or fiber. - https://en.wikipedia.org/wiki/Livestock - livestock - true - - - Livestock is an animal-associated habitat consisting of any domestic or domesticated animal intentionally raised for food or in the production of food or raised as stock to produce food or fibre, in an agricultural setting or for its labour or pen-raised animals raised on licensed game farm operations. Livestock include: bovine animals (including buffalo and bison), ovine animals, porcine animals, caprine animals, , poultry, bees, equine animals, cervidae animals; animals of the genus Lama; ratites (Emu, Ostrich, and Rhea), fish or shellfish in aquaculture facilities, and enclosed domesticated rabbits or hares raised for human food or fiber. - URL:http://dnr.wi.gov/org/land/er/publications/wolfplan/plan8.htm - URL:http://www.pbs.org/strangedays/glossary/L.html - URL:http://www.vbgov.com/vgn.aspxLivestock - https://en.wikipedia.org/wiki/Livestock - - - - - - - - - - obsolete cultured habitat - Cultured habitat is an controlled habitat created by humans through laboratory techniques usually for the purposes of preparing cell, organ, tissue and plant tissue cultures. - ENVO - ENVO:01000312 - ENVO:02000006 - true - - - - Cultured habitat is an controlled habitat created by humans through laboratory techniques usually for the purposes of preparing cell, organ, tissue and plant tissue cultures. - https://en.wikipedia.org/wiki/Cell_culture - - - - - - - - - - tissue culture - - Tissue culture is the culture of cells, tissues or organs in a nutrient medium under sterile conditions. - https://en.wikipedia.org/wiki/Tissue_culture - - - Tissue culture is the culture of cells, tissues or organs in a nutrient medium under sterile conditions. - URL:http://www.fao.org/DOCREP/003/X3910E/X3910E23.htm#TopOfPage - - - - - - - - - - cell culture - - - - - - - - A cell culture is a growth of cells in vitro in an artificial medium for experimental research. - https://en.wikipedia.org/wiki/Cell_culture - - - A cell culture is a growth of cells in vitro in an artificial medium for experimental research. - URL:http://stemcells.nih.gov/StemCells/Templates/StemCellContentPage.aspx?NRMODE=Published&NRNODEGUID=%7b3C35BAB6-0FE6-4C4E-95F2-2CB61B58D96D%7d&NRORIGINALURL=%2finfo%2fglossary%2easp&NRCACHEHINT=NoModifyGuest#cellculture - - - - - - - - - - plant tissue culture - - Plant tissue culture is the growth or maintenance of plant cells, tissues, organs or whole plants in vitro. - https://en.wikipedia.org/wiki/Plant_tissue_culture - - - Plant tissue culture is the growth or maintenance of plant cells, tissues, organs or whole plants in vitro. - URL:http://www.sivb.org/edu_terminology.asp - - - - - - - - - - organ culture - - ENVO - ENVO:02000010 - Organ culture is the aseptic culture of complete living organs of animals and plants outside the body in a suitable culture medium. Animal organs must be small enough to allow the nutrients in the culture medium to penetrate all the cells. - https://en.wikipedia.org/wiki/Organ_culture - - - Organ culture is the aseptic culture of complete living organs of animals and plants outside the body in a suitable culture medium. Animal organs must be small enough to allow the nutrients in the culture medium to penetrate all the cells. - URL:http://www.fao.org/DOCREP/003/X3910E/X3910E18.htm - - - - - - - - - - obsolete buffalo milk - ENVO - ENVO:02000011 - FOODON:00001265 - true - - - - - - - - obsolete camel milk - ENVO - ENVO:02000012 - FOODON:00001266 - https://en.wikipedia.org/wiki/Camel_milk - true - - - - - - - - obsolete donkey milk - ENVO - ENVO:02000013 - FOODON:00001267 - true - - - - - - - - obsolete horse milk - ENVO - ENVO:02000014 - FOODON:00001268 - true - - - - - - - - obsolete reindeer milk - ENVO - ENVO:02000015 - FOODON:00001269 - true - - - - - - - - obsolete water buffalo milk - ENVO - ENVO:02000016 - FOODON:00001270 - true - - - - - - - - obsolete yak milk - ENVO - ENVO:02000017 - FOODON:00001271 - true - - - - - - - - obsolete zebra milk - ENVO - ENVO:02000018 - FOODON:00001272 - true - - - - - - - - bodily fluid - - - - - - - - A natural bodily fluid or secretion such as blood, semen, saliva, blood plasma, intracellular and interstitial fluids. - ENVO - ENVO:02000019 - https://en.wikipedia.org/wiki/Bodily_fluid - This differs from UBERON's treatment of bodily fluids and will probably be revised. - - - A natural bodily fluid or secretion such as blood, semen, saliva, blood plasma, intracellular and interstitial fluids. - URL:http://medical-dictionary.thefreedictionary.com/bodily+fluid - https://en.wikipedia.org/wiki/Body_fluid - - - - - - - - - - blood - - - - - - - - Blood is a bodily fluid composed of blood plasma and blood cells suspended within the plasma that circulates around the organism's body. Blood performs may important functions including the supplying of oxygen and nutrients, removal of waste, circulation of white blood cells, detection of antibodes, coagulation, transportation of antibodies and the regulation of pH and body temperature. - ENVO - ENVO:02000020 - https://en.wikipedia.org/wiki/Blood - - - Blood is a bodily fluid composed of blood plasma and blood cells suspended within the plasma that circulates around the organism's body. Blood performs may important functions including the supplying of oxygen and nutrients, removal of waste, circulation of white blood cells, detection of antibodes, coagulation, transportation of antibodies and the regulation of pH and body temperature. - https://en.wikipedia.org/wiki/Blood - https://en.wikipedia.org/wiki/Body_fluid - - - - - - - - - - amniotic fluid - - - - - - - - Amniotic fluid is a bodily fluid consisting of watery liquid surrounding and cushioning a growing fetus within the amnion. It allows the fetus to move freely without the walls of the uterus being too tight against its body. Buoyancy is also provided. - ENVO - ENVO:02000021 - https://en.wikipedia.org/wiki/Amniotic_fluid - - - Amniotic fluid is a bodily fluid consisting of watery liquid surrounding and cushioning a growing fetus within the amnion. It allows the fetus to move freely without the walls of the uterus being too tight against its body. Buoyancy is also provided. - URL:http://en.wikipedia.org/wiki/Amniotic_fluid - - - - - - - - - - excreta - - - - - - - - - - - - - - - ENVO - ENVO:02000022 - Excreta are bodily fluids consisting of waste matter, such as sweat or feces, discharged from the body. - https://en.wikipedia.org/wiki/Excreta - - - Excreta are bodily fluids consisting of waste matter, such as sweat or feces, discharged from the body. - URL:http://medical-dictionary.thefreedictionary.com/excreta - - - - - - - - - - bile - - - - - - - - Bile is a bodily fluid consisting of a bitter, yellow or green alkaline fluid secreted by hepatocytes from the liver of most vertebrates. In many species, bile is stored in the gallbladder between meals and upon eating is discharged into the duodenum where the bile aids the process of digestion of lipids. - ENVO - ENVO:02000023 - gall - https://en.wikipedia.org/wiki/Bile - - - Bile is a bodily fluid consisting of a bitter, yellow or green alkaline fluid secreted by hepatocytes from the liver of most vertebrates. In many species, bile is stored in the gallbladder between meals and upon eating is discharged into the duodenum where the bile aids the process of digestion of lipids. - https://en.wikipedia.org/wiki/Bile - - - - - - - - - - aqueous humour - - - - - - - - Aqueous humour is a bodily fluid consisting of a thick watery substance that fills the space between the lens and the cornea. - ENVO - ENVO:02000024 - https://en.wikipedia.org/wiki/Aqueous_humour - - - Aqueous humour is a bodily fluid consisting of a thick watery substance that fills the space between the lens and the cornea. - https://en.wikipedia.org/wiki/Aqueous_humour - - - - - - - - - - sweat - - ENVO - ENVO:02000025 - Sweat is an excreta consisting primarily of water as well as a smaller amount of sodium chloride that is excreted by the sweat glands in the skin of mammals. - https://en.wikipedia.org/wiki/Sweat - - - Sweat is an excreta consisting primarily of water as well as a smaller amount of sodium chloride that is excreted by the sweat glands in the skin of mammals. - wiki:http:://en.wikipedia.org/wiki/Sweat - - - - - - - - - - chyme - - - - - - - - Chyme is a bodily fluid consisting of a liquid substance found in the stomach before passing through the pyloric valve and entering the duodenum. It results from the mechanical and chemical breakdown of a bolus and consists of partially digested food, water, hydrochloric acid, and various digestive enzymes. - ENVO - ENVO:02000026 - chymus - https://en.wikipedia.org/wiki/Chyme - - - Chyme is a bodily fluid consisting of a liquid substance found in the stomach before passing through the pyloric valve and entering the duodenum. It results from the mechanical and chemical breakdown of a bolus and consists of partially digested food, water, hydrochloric acid, and various digestive enzymes. - https://en.wikipedia.org/wiki/Chyme - - - - - - - - - - blood plasma - - - - - - - - Blood plasma is a bodily fluid that comprises the liquid component of blood, in which the blood cells are suspended. It makes up about 55% of total blood volume. - ENVO - ENVO:02000027 - https://en.wikipedia.org/wiki/Blood_plasma - - - Blood plasma is a bodily fluid that comprises the liquid component of blood, in which the blood cells are suspended. It makes up about 55% of total blood volume. - https://en.wikipedia.org/wiki/Blood_plasma - - - - - - - - - - ear wax - - ENVO - ENVO:02000028 - Ear was is a bodily fluid consisting of a yellowish, waxy substance secreted in the ear canal of humans and many other mammals. It plays an important role in the human ear canal, assisting in cleaning and lubrication, and also provides some protection from bacteria, fungi, and insects. - cerumen - https://en.wikipedia.org/wiki/Ear_wax - - - Ear was is a bodily fluid consisting of a yellowish, waxy substance secreted in the ear canal of humans and many other mammals. It plays an important role in the human ear canal, assisting in cleaning and lubrication, and also provides some protection from bacteria, fungi, and insects. - https://en.wikipedia.org/wiki/Cerumen - - - - - - - - - - cerebrospinal fluid - - - - - - - - CSF - Cerebrospinal fluid is a clear bodily fluid that occupies the subarachnoid space and the ventricular system around and inside the brain. CSF is a clear bodily fluid that occupies the subarachnoid space and the ventricular system around and inside the brain. - ENVO - ENVO:02000029 - Liquor cerebrospinalis - https://en.wikipedia.org/wiki/Cerebrospinal_fluid - - - Cerebrospinal fluid is a clear bodily fluid that occupies the subarachnoid space and the ventricular system around and inside the brain. CSF is a clear bodily fluid that occupies the subarachnoid space and the ventricular system around and inside the brain. - https://en.wikipedia.org/wiki/Cerebrospinal_fluid - - - - - - - - - - chyle - - - - - - - - Chyle is a bodily fluid consisting of a milky fluid consisting of lymph and emulsified fats; formed in the small intestine during digestion of ingested fats. - ENVO - ENVO:02000030 - https://en.wikipedia.org/wiki/Chyle - - - Chyle is a bodily fluid consisting of a milky fluid consisting of lymph and emulsified fats; formed in the small intestine during digestion of ingested fats. - URL:http://wordnet.princeton.edu/perl/webwn?s=chyle - https://en.wikipedia.org/wiki/Chyle - - - - - - - - - - breast milk - - - - - - - - Breast milk is a bodily fluid produced that is secreted from two milk-secreting glandular organs on a female's chest. - ENVO - ENVO:02000031 - https://en.wikipedia.org/wiki/Breast_milk - - - Breast milk is a bodily fluid produced that is secreted from two milk-secreting glandular organs on a female's chest. - URL:http://www.fcs.uga.edu/ext/bbb/info/glossary.htm - https://en.wikipedia.org/wiki/Breast_milk - - - - - - - - - - vitreous humor - - - - - - - - ENVO - ENVO:02000032 - Vitreous humor is a bodily fluid consisting of a clear gel that fills the space between the lens and the retina of the eyeball of humans and other vertebrates. - https://en.wikipedia.org/wiki/Vitreous_humor - vitreous body - vitreous humour - - - Vitreous humor is a bodily fluid consisting of a clear gel that fills the space between the lens and the retina of the eyeball of humans and other vertebrates. - https://en.wikipedia.org/wiki/Vitreous_humour - - - - - - - - - - pleural effusion - - - - - - - - ENVO - ENVO:02000033 - Pleural effusion is a bodily fluid that is produced in exess and accumulates in the pleural cavity, the fluid-filled space that surrounds the lungs. Excessive amounts of such fluid can impair breathing by limiting the expansion of the lungs during inhalation. - https://en.wikipedia.org/wiki/Pleural_effusion - - - Pleural effusion is a bodily fluid that is produced in exess and accumulates in the pleural cavity, the fluid-filled space that surrounds the lungs. Excessive amounts of such fluid can impair breathing by limiting the expansion of the lungs during inhalation. - https://en.wikipedia.org/wiki/Pleural_fluid - - - - - - - - - - tears - - ENVO - ENVO:02000034 - Tears is a bodily fluid consisting of a drop of the clear salty liquid secreted by glands (lacrimal glands) in the eyes. Tears wet the membrane covering the eye and help rid the eye of irritating substances. - https://en.wikipedia.org/wiki/Tears - tear - - - Tears is a bodily fluid consisting of a drop of the clear salty liquid secreted by glands (lacrimal glands) in the eyes. Tears wet the membrane covering the eye and help rid the eye of irritating substances. - URL:http://www.thefreedictionary.com/tear - - - - - - - - - - oronasal secretion - - - - - - - - ENVO - ENVO:02000035 - Oronasal secretion is a bodily fluid secreted from the body via the mouth or nose. - - - Gemina:ls - Oronasal secretion is a bodily fluid secreted from the body via the mouth or nose. - - - - - - - - - - saliva - - - - - - - - ENVO - ENVO:02000036 - Saliva is a slightly alkaline secretion of water, mucin, protein, salts, and often a starch-splitting enzyme (as ptyalin) that is secreted into the mouth by salivary glands, lubricates ingested food, and often begins the breakdown of starches. - https://en.wikipedia.org/wiki/Saliva - - - Saliva is a slightly alkaline secretion of water, mucin, protein, salts, and often a starch-splitting enzyme (as ptyalin) that is secreted into the mouth by salivary glands, lubricates ingested food, and often begins the breakdown of starches. - URL:http://medical.merriam-webster.com/medical/saliva - - - - - - - - - - sebum - - - - - - - - ENVO - ENVO:02000037 - Sebum is an oily bodily fluid secreted from the sebaceous glads that is made of fat (lipids) and the debris of dead fat-producing cells. In the glands, sebum is produced within specialized cells and is released as these cells burst. Sebum acts to protect and waterproof hair and skin, and keep them from becoming dry, brittle and cracked. It can also inhibit the growth of microorganisms on skin. - https://en.wikipedia.org/wiki/Sebum - - - Sebum is an oily bodily fluid secreted from the sebaceous glads that is made of fat (lipids) and the debris of dead fat-producing cells. In the glands, sebum is produced within specialized cells and is released as these cells burst. Sebum acts to protect and waterproof hair and skin, and keep them from becoming dry, brittle and cracked. It can also inhibit the growth of microorganisms on skin. - https://en.wikipedia.org/wiki/Sebaceous_gland - - - - - - - - - - pus - - ENVO - ENVO:02000038 - Pus is a bodily fluid consisting of a whitish-yellow or yellow substance produced during inflammatory responses of the body that can be found in regions of pyogenic bacterial infections. Pus is produced from the dead and living cells which travel into the intercellular spaces around the affected cells. - https://en.wikipedia.org/wiki/Pus - - - Pus is a bodily fluid consisting of a whitish-yellow or yellow substance produced during inflammatory responses of the body that can be found in regions of pyogenic bacterial infections. Pus is produced from the dead and living cells which travel into the intercellular spaces around the affected cells. - https://en.wikipedia.org/wiki/Pus - - - - - - - - - - synovial fluid - - - - - - - - ENVO - ENVO:02000039 - Synovial fluid is a bodily fluid secreted by the synovial membrane into the joint cavity to form a thin layer at the surface of cartilage. - https://en.wikipedia.org/wiki/Synovial_fluid - - - Synovial fluid is a bodily fluid secreted by the synovial membrane into the joint cavity to form a thin layer at the surface of cartilage. - https://en.wikipedia.org/wiki/Synovial_fluid - - - - - - - - - - mucus - - - - - - - - ENVO - ENVO:02000040 - Mucus is a bodily fluid consisting of a slippery secretion of the lining of the mucous membranes in the body. It is a viscous colloid containing antiseptic enzymes (such as lysozyme) and immunoglobulins. Mucus is produced by goblet cells in the mucous membranes that cover the surfaces of the membranes. It is made up of mucins and inorganic salts suspended in water. - https://en.wikipedia.org/wiki/Mucus - - - Mucus is a bodily fluid consisting of a slippery secretion of the lining of the mucous membranes in the body. It is a viscous colloid containing antiseptic enzymes (such as lysozyme) and immunoglobulins. Mucus is produced by goblet cells in the mucous membranes that cover the surfaces of the membranes. It is made up of mucins and inorganic salts suspended in water. - https://en.wikipedia.org/wiki/Mucus - - - - - - - - - - lymph - - - - - - - - ENVO - ENVO:02000041 - Lymph is a bodily fluid consisting of a usually clear coagulable fluid that passes from intercellular spaces of body tissue into the lymphatic vessels, is discharged into the blood by way of the thoracic duct and right lymphatic duct, and resembles blood plasma in containing white blood cells and especially lymphocytes but normally few red blood cells and no platelets. - https://en.wikipedia.org/wiki/Lymph - - - Lymph is a bodily fluid consisting of a usually clear coagulable fluid that passes from intercellular spaces of body tissue into the lymphatic vessels, is discharged into the blood by way of the thoracic duct and right lymphatic duct, and resembles blood plasma in containing white blood cells and especially lymphocytes but normally few red blood cells and no platelets. - URL:http://medical.merriam-webster.com/medical/lymph - - - - - - - - - - interstitial fluid - - - - - - - - ENVO - ENVO:02000042 - Interstitial fluid is a bodily fluid consisting of a solution which bathes and surrounds the cells of multicellular animals. It is the main component of the extracellular fluid, which also includes plasma and transcellular fluid. - https://en.wikipedia.org/wiki/Interstitial_fluid - intercellular fluid - tissue fluid - - - Interstitial fluid is a bodily fluid consisting of a solution which bathes and surrounds the cells of multicellular animals. It is the main component of the extracellular fluid, which also includes plasma and transcellular fluid. - https://en.wikipedia.org/wiki/Interstitial_fluid - - - - - - - - - - biological product - - A biological product is an environmental substrate comprised of any virus, therapeutic serum, toxin, antitoxin, or analogous product available to prevent, treat or cure diseases or injuries in man. - ENVO - ENVO:02000043 - This definition should be revised, it is currently too ambiguous. - - - A biological product is an environmental substrate comprised of any virus, therapeutic serum, toxin, antitoxin, or analogous product available to prevent, treat or cure diseases or injuries in man. - URL:http://www3.niaid.nih.gov/research/resources/DAIDSClinRsrch/Glossary/ - - - - - ORCID:0000-0002-4366-3088 - This definition should be revised, it is currently too ambiguous. - - - - - - - - - - siliceous ooze - - ENVO - ENVO:02000044 - Siliceous ooze is a marine sediment composed of the debris of plankton with silica shells, such as diatoms and radiolaria. This ooze is limited to areas with high biological productivity, such as the polar oceans, and upwelling zones near the equator. The least common type of sediment, it covers only 15% of the ocean floor. It accumulates at a slower rate than calcareous ooze: 0.2-1 cm / 1000 yr. - https://en.wikipedia.org/wiki/Siliceous_ooze - envoPolar - - - Siliceous ooze is a marine sediment composed of the debris of plankton with silica shells, such as diatoms and radiolaria. This ooze is limited to areas with high biological productivity, such as the polar oceans, and upwelling zones near the equator. The least common type of sediment, it covers only 15% of the ocean floor. It accumulates at a slower rate than calcareous ooze: 0.2-1 cm / 1000 yr. - https://en.wikipedia.org/wiki/Marine_sediment#_note-8 - - - - - - - - - - red clay - - ENVO - ENVO:02000045 - Red clay, also known as pelagic clay, accumulates in the deepest and most remote areas of the ocean. Containing less than 30% biogenic material, its composition is a varied mix of very fine quartz and clay minerals, authigenic deposits precipitated directly from seawater, and micrometeorites. Though called "red" because it sometimes takes the color of oxidized iron minerals, it is usually brownish in color. Its ultimate origin is uncertain, but red clay seems to be mostly derived from distant rivers, and windblown dust. Covering 38% of the ocean floor, it accumulates more slowly than any other sediment type, at only 0.1-0.5 cm / 1000 yr. - - - Red clay, also known as pelagic clay, accumulates in the deepest and most remote areas of the ocean. Containing less than 30% biogenic material, its composition is a varied mix of very fine quartz and clay minerals, authigenic deposits precipitated directly from seawater, and micrometeorites. Though called "red" because it sometimes takes the color of oxidized iron minerals, it is usually brownish in color. Its ultimate origin is uncertain, but red clay seems to be mostly derived from distant rivers, and windblown dust. Covering 38% of the ocean floor, it accumulates more slowly than any other sediment type, at only 0.1-0.5 cm / 1000 yr. - https://en.wikipedia.org/wiki/Pelagic_sediments - - - - - - - - - - calcareous ooze - - Calcareous ooze is a marine sediment composed primarily of the shells--also known as tests--of foraminifera, coccolithophores, and pteropods. This is the most common pelagic sediment by area, covering 48% of the world ocean's floor. This type of ooze is limited to depths above the Carbonate Compensation Depth at time of burial. It accumulates more rapidly than any other pelagic sediment type, with a rate that varies from 0.3 - 5 cm / 1000 yr. - ENVO - ENVO:02000046 - - - Calcareous ooze is a marine sediment composed primarily of the shells--also known as tests--of foraminifera, coccolithophores, and pteropods. This is the most common pelagic sediment by area, covering 48% of the world ocean's floor. This type of ooze is limited to depths above the Carbonate Compensation Depth at time of burial. It accumulates more rapidly than any other pelagic sediment type, with a rate that varies from 0.3 - 5 cm / 1000 yr. - https://en.wikipedia.org/wiki/Marine_sediment#_note-8 - - - - - - - - - - animal feed - - Animal feed is a biotic mesoscopic physical object consisting of any foodstuff that is used specifically to feed domesticated livestock, such as cattle, goats, sheep, horses, chickens and pigs. Most animal feed is from plants but some is of animal origin. Fodder refers particularly to food given to the animals (including plants cut and carried to them), rather than that which they forage for themselves. It includes hay, straw, silage, compressed and pelleted feeds, oils and mixed rations, and also sprouted grains and legumes. - ENVO - ENVO:02000047 - https://en.wikipedia.org/wiki/Animal_feed - - - Animal feed is a biotic mesoscopic physical object consisting of any foodstuff that is used specifically to feed domesticated livestock, such as cattle, goats, sheep, horses, chickens and pigs. Most animal feed is from plants but some is of animal origin. Fodder refers particularly to food given to the animals (including plants cut and carried to them), rather than that which they forage for themselves. It includes hay, straw, silage, compressed and pelleted feeds, oils and mixed rations, and also sprouted grains and legumes. - https://en.wikipedia.org/wiki/Fodder - - - - - - - - - - contaminated animal feed - - Contaminated animal feed is an animal feed that has become contaminated with or come contact with microorganisms or toxic chemicals. - ENVO - ENVO:02000048 - - - Contaminated animal feed is an animal feed that has become contaminated with or come contact with microorganisms or toxic chemicals. - URL:http://www.cdc.gov/oralhealth/infectioncontrol/glossary.htm - - - - - - - - - - coastal water body - - - - - - - - - - - - - - - - - - - Coastal water is a marine water body bordering a coast. - ENVO - ENVO:02000049 - envoPolar - - - Coastal water is a marine water body bordering a coast. - https://en.wikipedia.org/wiki/Coastal - - - - - - - - - - obsolete spinach - ENVO - ENVO:02000050 - FOODON:00001273 - https://en.wikipedia.org/wiki/Spinach - true - - - - - - - - obsolete unpasteurized milk product - ENVO - ENVO:02000051 - Raw milk which has not undergone the pasteurization process. - https://en.wikipedia.org/wiki/Unpasteurized_milk - raw milk - true - - - Raw milk which has not undergone the pasteurization process. - https://en.wikipedia.org/wiki/Unpasteurized_milk - - - - - - - - - - umbrella - - A canopy designed to protect against precipitation or sunlight. - ENVO - ENVO:02000052 - https://en.wikipedia.org/wiki/Umbrella - - - A canopy designed to protect against precipitation or sunlight. - https://en.wikipedia.org/wiki/Umbrella - - - - - - - - - - hide - - A skin obtained from animals for human use typically from deer or cattle sources used to produce leather, shoes, fashion accessories, musical instruments. - ENVO - ENVO:02000053 - https://en.wikipedia.org/wiki/Hide - - - A skin obtained from animals for human use typically from deer or cattle sources used to produce leather, shoes, fashion accessories, musical instruments. - https://en.wikipedia.org/wiki/Hides - - - - - - - - - - bone meal - - A mixture of crushed and coarsely ground bones that is used as an organic fertilizer for plants and formerly in animal feed. - ENVO - ENVO:02000054 - https://en.wikipedia.org/wiki/Bone_meal - - - A mixture of crushed and coarsely ground bones that is used as an organic fertilizer for plants and formerly in animal feed. - https://en.wikipedia.org/wiki/Bone_meal - - - - - - - - - - plant feed - - ENVO - ENVO:02000055 - Plant feed is a biotic mesoscopic physical object consisting of any foodstuff that is used specifically to feed plants. - - - Plant feed is a biotic mesoscopic physical object consisting of any foodstuff that is used specifically to feed plants. - ls:ls - - - - - - - - - - obsolete egg product - ENVO - ENVO:02000056 - FOODON:00001274 - true - - - - - - - - obsolete hen's egg product - ENVO - ENVO:02000057 - FOODON:00001275 - https://en.wikipedia.org/wiki/Chicken_egg - true - - - - - - - - cloth - - A textile comprised of a pliable material made usually by weaving, felting, or knitting natural or synthetic fibers and filaments. - ENVO - ENVO:02000058 - https://en.wikipedia.org/wiki/Cloth - - - A textile comprised of a pliable material made usually by weaving, felting, or knitting natural or synthetic fibers and filaments. - URL:http://www.merriam-webster.com/dictionary/cloth - - - - - - - - - - surface soil - - A soil consisting of the upper layer of soil on the surface consisting of loose material capable of supporting life composed of a mixture of mineral and organic matter. - ENVO - ENVO:02000059 - - - A soil consisting of the upper layer of soil on the surface consisting of loose material capable of supporting life composed of a mixture of mineral and organic matter. - URL:http://www.answers.com/topic/topsoil?cat=technology - https://en.wikipedia.org/wiki/Soil#_note-0 - - - - - - - - - - obsolete apple cider - ENVO - ENVO:00002208 - ENVO:02000060 - FOODON:00001276 - cider - https://en.wikipedia.org/wiki/Apple_cider - https://en.wikipedia.org/wiki/Cider - true - - - - - - - - obsolete unpasteurized orange juice - ENVO - ENVO:02000061 - FOODON:00001277 - true - - - - - - - - obsolete dessert - ENVO - ENVO:02000062 - https://en.wikipedia.org/wiki/Dessert - true - - - - - - - - obsolete cake - ENVO - ENVO:02000063 - FOODON:00001278 - https://en.wikipedia.org/wiki/Cake - true - - - - - - - - obsolete cake icing - ENVO - ENVO:02000064 - FOODON:00001279 - true - - - - - - - - obsolete chocolate - ENVO - ENVO:02000065 - FOODON:00001280 - https://en.wikipedia.org/wiki/Chocolate - true - - - - - - - - obsolete custard - ENVO - ENVO:02000066 - FOODON:00001281 - https://en.wikipedia.org/wiki/Custard - true - - - - - - - - obsolete ground beef - ENVO - ENVO:02000067 - FOODON:00001282 - beef mince - hamburger meat - https://en.wikipedia.org/wiki/Ground_beef - minced beef - true - - - - - - - - obsolete poultry product - ENVO - ENVO:02000068 - FOODON:00001283 - https://en.wikipedia.org/wiki/Poultry - true - - - - - - - - obsolete duck meat product - ENVO - ENVO:02000069 - FOODON:00001284 - https://en.wikipedia.org/wiki/Duck - true - - - - - - - - obsolete goose meat product - ENVO - ENVO:02000070 - FOODON:00001285 - https://en.wikipedia.org/wiki/Goose - true - - - - - - - - obsolete turkey meat product - ENVO - ENVO:02000071 - FOODON:00001286 - https://en.wikipedia.org/wiki/Turkey - true - - - - - - - - obsolete mushroom - ENVO - ENVO:02000072 - FOODON:00001287 - SWEETRealm:Mushroom - https://en.wikipedia.org/wiki/Mushroom - true - - - - - - - - obsolete bean plant - ENVO - ENVO:02000073 - true - - - - - - - - obsolete cantaloupe - ENVO - ENVO:02000074 - FOODON:00001288 - cantaloup - https://en.wikipedia.org/wiki/Cantaloupe - muskmelon - true - - - - - - - - obsolete peanut plant - ENVO - ENVO:02000075 - true - - - - - - - - obsolete potato salad - ENVO - ENVO:02000076 - FOODON:00001289 - https://en.wikipedia.org/wiki/Potato_salad - true - - - - - - - - obsolete salad dressing - ENVO - ENVO:02000077 - FOODON:00001290 - https://en.wikipedia.org/wiki/Salad_dressing - true - - - - - - - - obsolete clam product - ENVO - ENVO:02000078 - FOODON:00001291 - https://en.wikipedia.org/wiki/Clam - true - - - - - - - - obsolete oyster product - ENVO - ENVO:02000079 - FOODON:00001292 - https://en.wikipedia.org/wiki/Oyster - true - - - - - - - - obsolete shellfish product - ENVO - ENVO:02000080 - FOODON:00001293 - https://en.wikipedia.org/wiki/Shellfish - true - - - - - - - - letter - - A written message from one person to another addressed to a person or organization. - ENVO - ENVO:02000081 - - - A written message from one person to another addressed to a person or organization. - https://en.wikipedia.org/wiki/Letter - - - - - - - - - - obsolete unpasteurized goat milk cheese - ENVO - ENVO:02000082 - FOODON:00001294 - true - - - - - - - - obsolete Pecorino cheese - ENVO - ENVO:02000083 - FOODON:00001295 - true - - - - - - - - goat manure - - ENVO - ENVO:02000084 - - - - - - - - obsolete unpasteurized sheep milk cheese - ENVO - ENVO:02000085 - FOODON:00001296 - true - - - - - - - - obsolete unpasteruized cow milk cheese - ENVO - ENVO:02000086 - FOODON:00001297 - true - - - - - - - - obsolete unpasteurized camel milk - ENVO - ENVO:02000087 - FOODON:00001298 - true - - - - - - - - obsolete unpasteurized caprine milk - ENVO - ENVO:02000088 - FOODON:00001299 - true - - - - - - - - obsolete unpasteurized ovine milk - ENVO - ENVO:02000089 - FOODON:00001300 - true - - - - - - - - coal - - - - - - - - cjm - A combustible black or brownish-black sedimentary rock usually occurring in rock strata in layers or veins called coal beds or coal seams. - - - A combustible black or brownish-black sedimentary rock usually occurring in rock strata in layers or veins called coal beds or coal seams. - - - - - - - - - - - iron mine - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - uranium mine - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - - ore - - cjm - a type of rock that contains sufficient minerals with important elements including metals that can be economically extracted from the rock. - - - - - - - - - uranium ore - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - iron ore - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - gold ore - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - platinum ore - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - coal dust - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - mineral dust - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - fibrous dust - - cjm - - - - - - - - fibrous glass dust - - cjm - - - - - - - - metallic dust - - - - - - - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - cement dust - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - clay dust - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - asbestos dust - - cjm - - - - - - - - grain dust - - cjm - Dust that comes from grain and all the other substances associated with its cultivation & harvesting. - - - http://www.cdc.gov/niosh/npg/npgd0305.html - Dust that comes from grain and all the other substances associated with its cultivation & harvesting. - - - - - - - - - - cotton dust - - cjm - - - - - - - - dust from plant parts - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - open-pit mine - - cjm - A surface mine that utilizes a technique of extracting rock or minerals from the earth by their removal from an open pit or borrow. - - - A surface mine that utilizes a technique of extracting rock or minerals from the earth by their removal from an open pit or borrow. - - - - - - - - - - - copper ore - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - fume - - cjm - A gas, smoke, or vapor that smells strongly or is dangerous to inhale. - - - - - - - - welding fume - - cjm - - - - - - - - paraffin wax fume - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - vanadium fume - - - - - - - - - - - - - - - - - - - cjm - Respirable vapor of vanadium. - - - Respirable vapor of vanadium. - - - - - - - - - - - aluminum welding fume - - cjm - - - - - - - - natural wax - - cjm - A wax that is naturally synthesized by a plant or animal. - - - - - - - - paraffin wax - - cjm - A white or colourless soft solid derivable from petroleum, coal or oil shale, that consists of a mixture of hydrocarbon molecules containing between twenty and forty carbon atoms. - - - A white or colourless soft solid derivable from petroleum, coal or oil shale, that consists of a mixture of hydrocarbon molecules containing between twenty and forty carbon atoms. - - - - - - - - - - - oil shale - - cjm - kerogen shale - An organic-rich fine-grained sedimentary rock containing kerogen from which liquid hydrocarbons called shale oil can be produced. - - - An organic-rich fine-grained sedimentary rock containing kerogen from which liquid hydrocarbons called shale oil can be produced. - - - - - - kerogen shale - - - - - - - - - - - zinc chloride fume - - - - - - - - - - - - - - - - - - - cjm - - - - - - - - peat extraction - - cjm - - - - - - - - peat drainage - - - - - - - - - - - - - - cjm - Typically a part of a peat extraction process - A hydrological process that results in the drainage of water from peatlands - - - A hydrological process that results in the drainage of water from peatlands - - - - - - - - - - - paint - - - - - - - - - cjm - Any liquid, liquefiable, or mastic composition that, after application to a substrate in a thin layer, converts to a solid film. It is most commonly used to protect, color, or provide texture to objects. - - - Any liquid, liquefiable, or mastic composition that, after application to a substrate in a thin layer, converts to a solid film. It is most commonly used to protect, color, or provide texture to objects. - - - - - - - - - - - lead paint - - - - - - - - - - - - - - - - - - - cjm - Paint that contains lead. - - - Paint that contains lead. - - - - - - - - - - - transportation - - cjm - A planned process that is the movement of people, animals and goods from one location to another. - - - A planned process that is the movement of people, animals and goods from one location to another. - - - - - - - - - - - environmental system process - - - - - - - - - - - - - - - - This is a convenience class for organisation and should not be used for annotation. - A process in which includes the components of an environmental system as participants. - - - - - - - - desertification - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a type of land degradation in which a relatively dry land region becomes increasingly arid, typically losing its bodies of water as well as vegetation and wildlife. - - - a type of land degradation in which a relatively dry land region becomes increasingly arid, typically losing its bodies of water as well as vegetation and wildlife. - - - - - - - - - - - flooding - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - A general and temporary condition of partial or complete inundation of normally dry land areas from the overflow of inland and/or tidal waters, and/or the unusual and rapid accumulation or runoff of surface waters from any source. A great flow along a watercourse or a flow causing inundation of lands not normally covered by water. - - - A general and temporary condition of partial or complete inundation of normally dry land areas from the overflow of inland and/or tidal waters, and/or the unusual and rapid accumulation or runoff of surface waters from any source. A great flow along a watercourse or a flow causing inundation of lands not normally covered by water. - GEMET: http://www.eionet.europa.eu/gemet/concept/3301 - - - - - - - - - - atmospheric process - - - - - - - - - - - - - - - - - - - - - - - - - This class will be populated by inference and is primarily organisational. - A process which occurs within an atmosphere. - - - - - - - - greenhouse effect - - envoPolar - A process by which thermal radiation from a planetary surface is absorbed by atmospheric greenhouse gases, and is re-radiated in all directions. Since part of this re-radiation is back towards the surface and the lower atmosphere, it results in an elevation of the average surface temperature above what it would be in the absence of the gases. - - - https://en.wikipedia.org/wiki/Greenhouse_effect - A process by which thermal radiation from a planetary surface is absorbed by atmospheric greenhouse gases, and is re-radiated in all directions. Since part of this re-radiation is back towards the surface and the lower atmosphere, it results in an elevation of the average surface temperature above what it would be in the absence of the gases. - - - - - - - - - - land degradation - - - - - - - - This could include, for example, reducing soil health, pollinator activity, or an ecosystem's ability to sequester carbon. - An SDGIO request. Likely to be refined and revised. - A process which diminishes the functioning of an ecosystem located on land. - - - https://en.wikipedia.org/wiki/Land_degradation - A process which diminishes the functioning of an ecosystem located on land. - http://www.who.int/globalchange/ecosystems/desert/en/ - - - - - - - - - - ecosystem-wide photosynthesis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A process which consists of all photosynthesis processes instantiated in an ecosystem. - envoPolar - See issue #275 - - - - - - - - ecosystem-wide respiration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - See issue #275 - A process which consists of all respiration processes instantiated in an ecosystem. - - - - - - - - biogeochemical cycling - - envoPolar - - - - - - - - carbon cycling - - - - - - - - envoPolar - - - - - - - - afforestation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Establishment of a new forest by seeding or planting of nonforested land. - Prior to afforestation, the land cover of a region must not include forests. - - - Establishment of a new forest by seeding or planting of nonforested land. - GEMET:http://www.eionet.europa.eu/gemet/concept/167 - - - - - - - - - - deforestation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - clearance - The removal of forest and undergrowth to, for example, increase the surface of arable land or to use the timber for construction or industrial purposes. - clearing - - - The removal of forest and undergrowth to, for example, increase the surface of arable land or to use the timber for construction or industrial purposes. - http://www.eionet.europa.eu/gemet/concept?cp=2036 - - - - - - - - - - reforestation - - - - - - - - The planting of trees in areas in where forests have previously been cleared. - reforestation is reestablishment of forest where the forest recently existed[IPCC] - - - Adapted from GEMET:http://www.eionet.europa.eu/gemet/concept/6979 - The planting of trees in areas in where forests have previously been cleared. - - - - - - - - - - forest process - - - - - - - - - - - - - - - - - - - To be populated through inference. Do not use for annotation. - - - - - - - - forest area expansion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - obsolete anthropogenic reforestation - true - ENVO:02500013 - - - - - - - - algal bloom process - - - - - - - - - - - - - - - - - - - - envoPolar - A process during which the populations in a community of algae in a marine or freshwater ecosystem undergo rapid growth, resulting in high concentrations of algal cells that occur only periodically and briefly in that ecosystem, relative to their concentrations through the majority of the planetary orbital period. - This class is under development. Note that cyanobacterial blooms are often confused with algal blooms. There is no globally recognised threshold beyond which community density enters a bloom state. - - - https://en.wikipedia.org/wiki/Algal_bloom - This class is under development. Note that cyanobacterial blooms are often confused with algal blooms. There is no globally recognised threshold beyond which community density enters a bloom state. - - - - - https://en.wikipedia.org/wiki/Algal_bloom - A process during which the populations in a community of algae in a marine or freshwater ecosystem undergo rapid growth, resulting in high concentrations of algal cells that occur only periodically and briefly in that ecosystem, relative to their concentrations through the majority of the planetary orbital period. - - - - - - - - - - alga - - To be ceded to external ontology (e.g. pco) - - - - - - - - algal bloom collapse - - - - - - - - A process during which the rapid growth of algal populations that result in an algal bloom ceases, and cell densities begin to fall due to death, predation, and transport. - - - A process during which the rapid growth of algal populations that result in an algal bloom ceases, and cell densities begin to fall due to death, predation, and transport. - https://en.wikipedia.org/wiki/Algal_bloom - - - - - - - - - - algal bloom process phase - - - - - - - - - - - - - - - - - - - - - - - - - - algal production - - - - - - - - - - - - - - A process during which the algal cells constituting an algal bloom produce biomass from abiotic components during photosynthesis. - - - - - - - - accumulation of toxins from algal bloom process - - TODO; add axioms pointing to GO organismal process; Add axioms pointing to toxin role - - - - - - - - degradation of toxins from algal bloom process - - - - - - - - - anthropogenic modulatory intervention process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Relabel the obo foundry unique label to be generic process - - - - - - - - anthropogenic environmental process - - - - - - - - - - - - - - - - - - - An environmental process which is driven by the action of humans. - - - - - - - - erosion - - - - - - - - - - - - - - - An action of exogenic processes (such as water flow or wind) which remove soil and rock from one location on the Earth's crust, then transport it to another location where it is deposited. - envoPolar - - - An action of exogenic processes (such as water flow or wind) which remove soil and rock from one location on the Earth's crust, then transport it to another location where it is deposited. - https://en.wikipedia.org/wiki/Erosion - - - - - - - - - - bedrock dissolution - - - - - - - - - - - - - - - - - - - - - - - - An erosional process in which bedrock is converted from its solid form into a solute by the action of some solvent. - - - - - - - - biogeochemical process - - envoPolar - - - - - - - - hydrological process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This classes asserted subclasses will be moved away as it should be an inferred class. - - - - - - - - revegetation - - - - - - - - - - - - - - - evapotranspiration - - - - - - - - - - - - - - - - Evapotranspiration is the sum of evaporation and plant transpiration from the Earth's land and ocean surface to the atmosphere. - - - Evapotranspiration is the sum of evaporation and plant transpiration from the Earth's land and ocean surface to the atmosphere. - https://en.wikipedia.org/wiki/Evapotranspiration - - - - - - - - - - evaporation - - - - - - - - - - - - - - - - - - - - - - - - - - - - Evaporation is a form of vaporisation which occurs when a portion of the surface layer of a liquid in contact with a gaseous material, which is not saturated with the evaporating substance, vaporises. - - - Evaporation is a form of vaporisation which occurs when a portion of the surface layer of a liquid in contact with a gaseous material, which is not saturated with the evaporating substance, vaporises. - https://en.wikipedia.org/wiki/Evaporation - - - - - - - - - - transpiration - - - - - - - - Needs a process part "water transport" or similar and some link to plants to be complete. - Transpiration is the process of water movement through a plant and its evaporation from aerial parts of that plant, such as from leaves but also from stems and flowers. - - - - - - - - environmental pollution - - - - - - - - - - - - - - - - - - - - - - - - - - pollution - environmental_hazards - An environmental system process that results in the introduction of contaminants into an environment. - - - An environmental system process that results in the introduction of contaminants into an environment. - - - - - - - - - - - air pollution - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoPolar - environmental_hazards - A pollution process during which particulates or other contaminants are released into a portion of air. - - - - - - - - soil pollution - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - envoPolar - A pollution process during which contaminants are released into soil. - - - A pollution process during which contaminants are released into soil. - - - - - - - - - - - water pollution - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A pollution process during which contaminants are released into water. - envoPolar - environmental_hazards - - - - - - - - plastic pollution - - - - - - - - - - - - - - - - - - - - - - - - - - - - A pollution process during which plastic contaminants are released into an environmental material. - environmental_hazards - envoPolar - - - A pollution process during which plastic contaminants are released into an environmental material. - - - - - - - - - - - environmental monitoring - - An process in which environmental parameters and variables are continually assayed. - monitoring - - - - - - - - pollution control - - - - - - - - - - - - - - - - - - - A planned process during which the amount of pollutants released into an environmental system is regulated. - pollution prevention - - - - - - - - pollution monitoring - - - - - - - - - - - - - - - - - - - envoPolar - A monitoring process that assays the level of environmental pollutants to determine the presence of effect of environmental pollution. - - - - - - - - urban pollution - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental_hazards - A pollution process that results in increased levels of pollutants in an urban environment. - - - - - - - - neve - - - - - - - - - - - - - - névé - envoPolar - http://orcid.org/0000-0002-3410-4655 - Névé that survives a full season of ablation turns into firn. - Partially compacted granular snow, which has undergone several cycles of melting and refreezing while being compacted, usually found on the atmosphere-exposed surface of a glacier. - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/N%C3%A9v%C3%A9 - Partially compacted granular snow, which has undergone several cycles of melting and refreezing while being compacted, usually found on the atmosphere-exposed surface of a glacier. - - - - - - - - - - firn - - - - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - Firn derives from névé which has survived a full season of ablation and has undergone a metamorphic transition. - Granular snow which contains a proportion of fused granules formed through melting and re-thawing while being compacted by the weight of overlying material and which contains interconnected gaseous pores. - http://orcid.org/0000-0002-4366-3088 - - - Granular snow which contains a proportion of fused granules formed through melting and re-thawing while being compacted by the weight of overlying material and which contains interconnected gaseous pores. - https://en.wikipedia.org/wiki/Firn - - - - - - - - - - nivation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Often, the weight of material deposited on top of powdery snow by, for example, mass wasting, can lead to nivation. - http://orcid.org/0000-0002-3410-4655 - A material transformation process during which recently precipitated, powdery snow transitions into firn or névé through compaction and/or through cycles of freezing and thawing. - http://orcid.org/0000-0002-4366-3088 - envoPolar - Link to mass wasting process. - - - https://en.wikipedia.org/wiki/Nivation - A material transformation process during which recently precipitated, powdery snow transitions into firn or névé through compaction and/or through cycles of freezing and thawing. - - - - - - - - - - glacial ice - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - It is suggested that users complement this term with ice terms that are more descriptive of the ice itself, rather than its location/parthood. - Any water ice that is part of a glacier. - - - https://en.wikipedia.org/wiki/Glacier - Any water ice that is part of a glacier. - - - - - - - - - - erosionally enriched glacial ice - - - - - - - - - - - - - - - Glacial ice which contains material liberated during a glacial erosion process. - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - https://www.asf.alaska.edu/blog/why-is-glacier-ice-blue/ - Glacial ice which contains material liberated during a glacial erosion process. - - - - - - - - - - glacial erosion process - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - An erosion process during which the movement of a glacier across a terrestrial surface causes the removal of material from that surface. - - - - - - - - blue ice - - The blue 'appearance' is to be understood as that within the visual range of humans. - http://orcid.org/0000-0002-4366-3088 - Water ice containing little to no air bubbles resulting in a reduction of internal light scattering and, given sufficient volume, a blue appearance. - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - https://en.wikipedia.org/wiki/Blue_ice_(glacial) - Water ice containing little to no air bubbles resulting in a reduction of internal light scattering and, given sufficient volume, a blue appearance. - https://en.wikipedia.org/wiki/Glacier - - - - - - - - - - compaction process - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - A physical process during which atoms, molecules, or other consituents of a material entity are forced closer together. - - - https://en.wikipedia.org/wiki/Compaction - A physical process during which atoms, molecules, or other consituents of a material entity are forced closer together. - - - - - - - - - - material accumulation process - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - A process during which the mass of one or more materials, present within a given site, increases. - http://orcid.org/0000-0002-4366-3088 - Experimental class for structural purposes not recommended for annotation. A material accumulation process ends a material transport process. - - - - - - - - material transport process - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - A process during which material is displaced from it's original location and transported either to a new location or back to the original location. - Experimental class for structural purposes not recommended for annotation. - - - - - - - - ice gain - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - A material accumulation process during which the mass of an existing ice mass increases. - http://orcid.org/0000-0002-4366-3088 - - - A material accumulation process during which the mass of an existing ice mass increases. - https://en.wikipedia.org/wiki/Ablation_zone - - - - - - - - - - glacial transport process - - - - - - - - A material transport process during which the snow and ice constituting a glacier, and anything contained within it, is transported down a slope by gravitation. - glacial movement - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - This must be differentiated from small ice masses simply falling or moving down slopes. - envoPolar - - - - - - - - cirque glacier - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - A small glacier contained within a cirque basin. - http://orcid.org/0000-0002-4366-3088 - - - https://pubs.usgs.gov/of/2004/1216/text.html - A small glacier contained within a cirque basin. - - - - - - - - - - geographic basin - - - - - - - - http://orcid.org/0000-0002-4366-3088 - The general semantics of depression and geographic basin are still to be worked out see https://github.com/EnvironmentOntology/envo/issues/486 - envoPolar - A depression which is part of a planetary crust, is of geographic scale, and is partially or completely enclosed. - http://orcid.org/0000-0002-3410-4655 - - - https://en.wikipedia.org/wiki/Basin - A depression which is part of a planetary crust, is of geographic scale, and is partially or completely enclosed. - - - - - - - - - - material decumulation process - - A process during which the mass of one or more materials, present within a given site, decreases. - Experimental class for structural purposes not recommended for annotation. - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - A process during which the mass of one or more materials, present within a given site, decreases. - https://www.merriam-webster.com/dictionary/decumulation - - - - - - - - - - glacial ice loss - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - A process during which the mass of ice constituting a glacier decreases. - - - - - - - - englacial stream - - - - - - - - - - - - - - - - - - - - - A stream which is primarily composed of meltwater and which flows within a glacier or ice sheet. - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - A stream which is primarily composed of meltwater and which flows within a glacier or ice sheet. - http://oxfordindex.oup.com/view/10.1093/oi/authority.20110803095752518 - - - - - - - - - - aeolian transport process - - - - - - - - - - - - - - æolian - envoPolar - http://orcid.org/0000-0002-4366-3088 - A material transport process during which one or more environmental materials are transported by the action of wind. - eolian - http://orcid.org/0000-0002-3410-4655 - - - https://en.wikipedia.org/wiki/Aeolian_processes - A material transport process during which one or more environmental materials are transported by the action of wind. - - - - - - - - - - soot - - - - - - - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - Particulate matter primarily composed of carbon particles formed through the incomplete combustion of hydrocarbons. - - - https://en.wikipedia.org/wiki/Soot - Particulate matter primarily composed of carbon particles formed through the incomplete combustion of hydrocarbons. - - - - - - - - - - erosionally enriched ice - - envoPolar - http://orcid.org/0000-0002-4366-3088 - Water ice which contains material liberated during an erosion process. - http://orcid.org/0000-0002-3410-4655 - - - https://www.asf.alaska.edu/blog/why-is-glacier-ice-blue/ - Water ice which contains material liberated during an erosion process. - - - - - - - - - - powdery snow - - envoPolar - http://orcid.org/0000-0002-4366-3088 - Uncompacted snow containing trapped atmospheric gases. - http://orcid.org/0000-0002-3410-4655 - Described as having a fluffy appearance. - - - https://en.wikipedia.org/wiki/Types_of_snow - Uncompacted snow containing trapped atmospheric gases. - https://nsidc.org/cryosphere/snow/science/characteristics.html - - - - - - - - - - glacial ice gain - - - - - - - - - - - - - - envoPolar - A process during which the mass of ice constituting a glacier increases. - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - - - - - - - - glacial ice calving process - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A process during which a part of a glacier breaks away from the main mass. - Calving is usually caused by the expansion of glaciers. - glacier calving - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - A process during which a part of a glacier breaks away from the main mass. - http://dx.doi.org/10.1038/nrmicro3522 - - - - - - - - - - iceberg calving process - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - Calving is usually caused by the expansion of glaciers. - A process during which a part of a glacier breaks away from the main mass as an iceberg. - glacier calving - http://orcid.org/0000-0002-4366-3088 - - - http://dx.doi.org/10.1038/nrmicro3522 - A process during which a part of a glacier breaks away from the main mass as an iceberg. - - - - - - - - - - calving of ice from an iceberg - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - glacier calving - A process during which a part of a glacier breaks away from the main mass as an iceberg. - It would be ideal to express that the size of the icemass calved must be smaller than an iceberg. - Calving is usually caused by the expansion of glaciers. - - - http://dx.doi.org/10.1038/nrmicro3522 - A process during which a part of a glacier breaks away from the main mass as an iceberg. - - - - - - - - - - marine sediment - - - - - - - - - - - - - - Particles of marine sediment are primarily generated by 1) processes in terrestrial systems and transported to the marine realm by the action of rivers or aeolian processes (amongst other routes) , 2) marine organisms, 3) chemical processes in seawater, or 4) cosmogeneous input. - marine sediments - Sediment which has been transported through the marine water column, settling on the seafloor. - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - Sediment which has been transported through the marine water column, settling on the seafloor. - https://en.wikipedia.org/wiki/Pelagic_sediment#_note-8 - - - - - - - - - - shallow marine sediment - - - - - - - - - - - - - - - - - - - - - - - - In this definition we refer to sedimentation processes that occured above the shelf, however this should be relaxed to include the continental shelf and slope. - shallow marine sediments - http://orcid.org/0000-0002-4366-3088 - output of sedimentation process which occured in neritic zone biome - neritic marine sediment - Marine sediment soured from either terrestrial systems, marine organisms, seawater and or cosmogeneous sources, which is transported through the marine water column, and accumulates within shallow regions of the oceanic basin close to continents, such as the continental shelf, or continental slope. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - https://en.wikipedia.org/wiki/Pelagic_sediment#_note-8 - https://en.wikipedia.org/wiki/Continental_shelf - Marine sediment soured from either terrestrial systems, marine organisms, seawater and or cosmogeneous sources, which is transported through the marine water column, and accumulates within shallow regions of the oceanic basin close to continents, such as the continental shelf, or continental slope. - - - - - - - - - - supraglacial lake - - - - - - - - A water body which is located in a depression within the surface of a glacier. - supraglacial lakes - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - A water body which is located in a depression within the surface of a glacier. - https://en.wikipedia.org/wiki/Supraglacial_lake - - - - - - - - - - sedimentation in a water body - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - A material accumulation process during which solid particles are pulled through a water body by gravitation or centrifugal force and which ends when they settle on a solid surface. - - - - - - - - ice ablation zone - - - - - - - - http://orcid.org/0000-0002-4366-3088 - An ablation zone in which an ice ablation process occurs. - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - An ablation zone in which an ice ablation process occurs. - https://en.wikipedia.org/wiki/Ablation - - - - - - - - - - cryoconite deposit - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0001-5812-6405 - Particulate matter which is composed primarily of dust, rock, and soot, as well as the microbial communities associated with these materials, deposited on an ice mass by an aeolian process. - envoPolar - http://orcid.org/0000-0002-3410-4655 - This actually is formed as a result of an accumulation process involving the constituents of cryoconite. When their semantics are more stable, we can axiomatise this fully. - http://orcid.org/0000-0002-4366-3088 - - - Particulate matter which is composed primarily of dust, rock, and soot, as well as the microbial communities associated with these materials, deposited on an ice mass by an aeolian process. - http://www.nature.com/nrmicro/journal/v13/n11/full/nrmicro3522.html - https://en.wikipedia.org/wiki/Cryoconite - - - - - - - - - - cryoconite hole - - - - - - - - A vertical thaw hole within an ice mass, formed as a result of ice melt associated with local temperature increases, due to increased absorption of solar radiation by cryoconite deposits. - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - The general semantics of depressions are still to be worked out see https://github.com/EnvironmentOntology/envo/issues/486 - envoPolar - cryoconite holes - This class doesn't refer to the site but instead the depression or hole and therefore the adjacency to the cryoconite itself. - - - A vertical thaw hole within an ice mass, formed as a result of ice melt associated with local temperature increases, due to increased absorption of solar radiation by cryoconite deposits. - http://glaciers.pdx.edu/Projects/Antarctica/CryoconiteHoles/Cryo_main.html - - - - - - - - - - melt pond - - - - - - - - - - - - - - - - - - - - meltponds - http://orcid.org/0000-0001-5812-6405 - A water body which forms as a result of localised melting taking place on the surface of a glacier or a mass of sea ice and which is contained in the cavity formed by such melting. - melt ponds - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - meltpond - - - https://en.wikipedia.org/wiki/Melt_pond - A water body which forms as a result of localised melting taking place on the surface of a glacier or a mass of sea ice and which is contained in the cavity formed by such melting. - - - - - - - - - - brine channel - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - brine channels - http://orcid.org/0000-0002-3410-4655 - envoPolar - A channel through which brine flows. - - - https://askabiologist.asu.edu/brine-channels - A channel through which brine flows. - - - - - - - - - - brine channel formation process - - - - - - - - - - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - A material accumulation process during which brine droplets, trapped between ice crystals formed during seawater freezing, form brine channels. - http://orcid.org/0000-0002-4366-3088 - This process may be considered a material accumulation process as it is the accumulation of brine droplets which form the channels. - - - A material accumulation process during which brine droplets, trapped between ice crystals formed during seawater freezing, form brine channels. - https://nsidc.org/cryosphere/glossary/term/frazil - - - - - - - - - - material transformation process - - http://orcid.org/0000-0002-4366-3088 - A different material transformation process class (or similarly named class) pertaining to the conversion of a specific chemical into another belongs in CHEBI and or REX ontologies. - A process during which a portion of some environmental material is converted into a different material or a collection of materials. - Experimental class for structural purposes not recommended for annotation. A material transformation process only refers to ENVO:environmental material classes (e.g. bulk and typically impure substances), rather than transformations converting a specific chemical into another. - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - - - - - - sea ice formation process - - - - - - - - - - - - - - A material transformation process during which seawater freezes into sea ice. - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - http://www.waterencyclopedia.com/Re-St/Sea-Water-Freezing-of.html - A material transformation process during which seawater freezes into sea ice. - - - - - - - - - - brine rejection from seawater - - - - - - - - - - - - - - - - - - - - - A material transformation process during which brine is formed due to the expulsion of salt during frazil formation or a seawater freezing process. - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - Expelled salt accumulates in brine droplets, which remain in a liquid state due to their increased salinity. - - - https://en.wikipedia.org/wiki/Brine_rejection - A material transformation process during which brine is formed due to the expulsion of salt during frazil formation or a seawater freezing process. - - - - - - - - - - frazil ice - - - - - - - - - - - - - - - Typically 3 to 4 millimeters in diameter. These new ice classes refer to both marine water and fresh water ice. If using this term for annotation, use it in conjunction with another envo term to express whether the ice is in a marine, freshwater, or other system. - Needs to have axioms added pertaining to the semantics of colloids and suspensions once they have been resolved see: https://github.com/pato-ontology/pato/issues/91#issuecomment-290711238 - -Currently the new ice classes are not specific to sea water as they may form in non marine systems, but it would be good to confirm this especially for frazil ice. - New ice which is composed of small, needle-like crystals consisting of nearly pure fresh water. - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - - - New ice which is composed of small, needle-like crystals consisting of nearly pure fresh water. - https://nsidc.org/cryosphere/glossary/term/frazil - - - - - - - - - - frazil ice formation - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - A new ice formation process during which small, needle-like crystals consisting of nearly pure fresh water, form due to the freezing of open, turbulent, supercooled water. - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - https://nsidc.org/cryosphere/glossary/term/frazil - https://en.wikipedia.org/wiki/Frazil_ice#Formation - A new ice formation process during which small, needle-like crystals consisting of nearly pure fresh water, form due to the freezing of open, turbulent, supercooled water. - - - - - - - - - - thaw hole - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A channel which traverses an ice mass floating on a water body and bridges the atmosphere to the underlying water through its internal cavity. - envoPolar - http://orcid.org/0000-0002-3410-4655 - thaw holes - - - https://nsidc.org/cryosphere/glossary-terms/sea-ice - A channel which traverses an ice mass floating on a water body and bridges the atmosphere to the underlying water through its internal cavity. - - - - - - - - - - atmosphere-exposed melt pond - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A melt pond which has a surface exposed to the atmosphere. - http://orcid.org/0000-0001-5812-6405 - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - https://en.wikipedia.org/wiki/Melt_pond - A melt pond which has a surface exposed to the atmosphere. - - - - - - - - - - ice-encased melt pond - - - - - - - - - - - - - - - - - - - - - - - - - - In practice, there may be some openings which are small relative to the surface footprint of the meltpond. - http://orcid.org/0000-0001-5812-6405 - A melt pond which is completely encased in ice and thus not directly exposed to the atmosphere or underlying water. - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - - - A melt pond which is completely encased in ice and thus not directly exposed to the atmosphere or underlying water. - https://phys.org/news/2017-01-arctic-ponds-meltwater-clogs-ice.html - - - - - - - - - - intraglacial lake - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - Add axioms to show that this is on the larger side in a size continuum between ice-encased meltponds and intraglacial lakes. - intraglacial lakes - envoPolar - http://orcid.org/0000-0002-4366-3088 - A lake which is comprised of meltwater located underneath or within a glacier. - - - https://www.researchgate.net/publication/313281555_Antarctic_subglacial_lakes_drain_through_sediment-floored_canals_Theory_and_model_testing_on_real_and_idealized_domains - https://www.researchgate.net/publication/258663667_Detection_of_a_subglacial_lake_in_Glacier_de_Tete_Rousse_Mont_Blanc_area_France - A lake which is comprised of meltwater located underneath or within a glacier. - - - - - - - - - - depositional process - - A process during which material entities are added to a landform or to a feature upon the landform. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Deposition_(geology) - A process during which material entities are added to a landform or to a feature upon the landform. - - - - - - - - - - desublimation of water vapour into ice - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A desublimation process during which water vapour is frozen into water ice. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - - - - - - new ice formation process - - - - - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - An ice formation process during which water is frozen into a form of new ice such as frazil, grease ice, slush, or shuga. - Make this class the union of the following processes: frazil ice formation, grease ice formation process, slush formation process, and shuga formation process. - - - An ice formation process during which water is frozen into a form of new ice such as frazil, grease ice, slush, or shuga. - https://nsidc.org/cryosphere/glossary/term/new-ice - - - - - - - - - - obsolete sea ice formation process - ENVO:03000044 - true - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - An ice formation process during which seawater is frozen into a sea ice. - envoPolar - - - An ice formation process during which seawater is frozen into a sea ice. - https://en.wikipedia.org/wiki/Sea_ice#Formation - - - - - - - - - - nilas formation process - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - A sea ice formation process during which new ice crystals freeze together, forming nilas, a thin, elastic, continuous, ice sheet of a transparent gray color. - - - A sea ice formation process during which new ice crystals freeze together, forming nilas, a thin, elastic, continuous, ice sheet of a transparent gray color. - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - https://nsidc.org/cryosphere/glossary/term/nilas - - - - - - - - - - young ice formation process - - - - - - - - - - - - - - - - - - - - - A sea ice formation process during which water freezes to the bottom of an existing nilas ice floe creating a thicker ice floe known as young ice. - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - A sea ice formation process during which water freezes to the bottom of an existing nilas ice floe creating a thicker ice floe known as young ice. - - - - - - - - - - first year ice formation process - - - - - - - - - - - - - - - - - - - - - A sea ice formation process during which seawater freezes onto young ice during the cold season, forming first year ice. - First year ice that survives melting during spring and summer can transition to second year ice. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - A sea ice formation process during which seawater freezes onto young ice during the cold season, forming first year ice. - - - - - - - - - - second year ice formation - - - - - - - - - - - - - - - - - - - - - A sea ice formation process during which seawater freezes onto first year ice during the cold season, forming second year sea ice. - http://orcid.org/0000-0002-4366-3088 - Second year ice forms from first year ice which has previously survived one melt season. - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - A sea ice formation process during which seawater freezes onto first year ice during the cold season, forming second year sea ice. - - - - - - - - - - multiyear ice formation process - - - - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - Multiyear ice forms from second year ice which has previously survived at least two melt seasons. - A sea ice formation process during which seawater freezes into second year ice during the cold season, forming multiyear ice. - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - A sea ice formation process during which seawater freezes into second year ice during the cold season, forming multiyear ice. - - - - - - - - - - new ice - - - - - - - - - - - - - - Water ice which is formed from freezing water and is suspended in a water body. - http://orcid.org/0000-0002-3410-4655 - envoPolar - Currently the new ice classes are not specific to sea water as they may form in non marine systems, but it would be good to confirm this especially for frazil ice. - sea ice types include frazil, grease ice, slush, and shuga. These new ice classes refer to both marine water and fresh water ice. If using this term for annotation, use it in conjunction with another envo term to express whether the ice is in a marine, freshwater, or other system. - http://orcid.org/0000-0002-4366-3088 - - - https://nsidc.org/cryosphere/glossary/term/new-ice - Water ice which is formed from freezing water and is suspended in a water body. - - - - - - - - - - ice floe - - - - - - - - - - - - - - - - - envoPolar - A cohesive sheet of water ice which floats upon the surface of a water body. - Ice floes can exist in sea ice, in rivers or lakes. - ice floes - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - - - https://nsidc.org/cryosphere/glossary/term/ice-floe - A cohesive sheet of water ice which floats upon the surface of a water body. - - - - - - - - - - sea ice floe - - - - - - - - - - - - - - - - - - - - An ice floe which is formed from frozen sea water, and floats upon the surface of a marine water body. - http://orcid.org/0000-0002-4366-3088 - sea ice floes - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - https://nsidc.org/cryosphere/glossary/term/ice-floe - An ice floe which is formed from frozen sea water, and floats upon the surface of a marine water body. - - - - - - - - - - pancake ice - - - - - - - - - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - A sea ice floe which has a rounded or circular shape and raised rims. - http://orcid.org/0000-0002-4366-3088 - - - A sea ice floe which has a rounded or circular shape and raised rims. - https://en.wikipedia.org/wiki/Pancake_ice - https://web.archive.org/web/20040712022508/http://ice-glaces.ec.gc.ca:80/App/WsvPageDsp.cfm?ID=10992&Lang=eng - - - - - - - - - - nilas - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - A sea ice floe which is thin, elastic, continuous, and of a transparent gray color, which results from the freezing of new ice. - envoPolar - - - http://encyclopedia2.thefreedictionary.com/nilas - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - https://nsidc.org/cryosphere/glossary/term/nilas - A sea ice floe which is thin, elastic, continuous, and of a transparent gray color, which results from the freezing of new ice. - - - - - - - - - - young ice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - A sea ice floe which is inflexible and thicker than nilas. - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - A sea ice floe which is inflexible and thicker than nilas. - - - - - - - - - - first year ice - - - - - - - - - - - - - - Sea ice which is thicker than young ice. - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - First year ice that survives a seasonal melting process becomes second year ice. - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - Sea ice which is thicker than young ice. - http://nsidc.org/arcticseaicenews/tag/first-year-ice/ - - - - - - - - - - second year ice - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - Sea ice which is thicker than first year ice, and has survived a seasonal melting process. - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - Sea ice which is thicker than first year ice, and has survived a seasonal melting process. - - - - - - - - - - multiyear ice - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - Sea ice which is thicker than second year ice, and has survived more than two seasonal melting process. - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Sea_ice#New_ice.2C_nilas_and_young_ice - Sea ice which is thicker than second year ice, and has survived more than two seasonal melting process. - - - - - - - - - - grease ice layer - - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - A layer which consists of a thin aggregate of frazil ice crystals, which float upon the surface of a water body. - Within a marine system, grease ice makes the ocean surface resemble an oil slick. - http://orcid.org/0000-0002-4366-3088 - - - A layer which consists of a thin aggregate of frazil ice crystals, which float upon the surface of a water body. - https://nsidc.org/cryosphere/glossary/term/grease-ice - - - - - - - - - - shuga - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - New ice, which is spongy, lumpy and opaque, and forms from water which freezes in an agitated water body. - These new ice classes refer to both marine water and fresh water ice. If using this term for annotation, use it in conjunction with another envo term to express whether the ice is in a marine, freshwater, or other system. - - - http://encyclopedia2.thefreedictionary.com/shuga - https://nsidc.org/cryosphere/glossary/term/shuga - New ice, which is spongy, lumpy and opaque, and forms from water which freezes in an agitated water body. - - - - - - - - - - slush ice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - These new ice classes refer to both marine water and fresh water ice. If using this term for annotation, use it in conjunction with another envo term to express whether the ice is in a marine, freshwater, or other system. - http://orcid.org/0000-0002-3410-4655 - A slurry of frazil, snow, and liquid water. - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - https://nsidc.org/cryosphere/glossary/term/slush - https://en.wikipedia.org/wiki/Slush - A slurry of frazil, snow, and liquid water. - - - - - - - - - - slush ice layer - - - - - - - - - - - - - - - A layer which consists of slush ice. - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - https://en.wikipedia.org/wiki/Slush - A layer which consists of slush ice. - - - - - - - - - - slush formation process - - - - - - - - - - - - - - - - - - - - - - A new ice formation process in which slush ice is formed. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - - - - - - shuga formation process - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A new ice formation process in which shuga is formed. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - - - - - - thermokarst lake - - - - - - - - - - - - - - - - - - - - - - - - - - Continued thawing of the permafrost substrate can lead to the drainage and eventual disappearance of thermokarst lakes, leaving only the landform, thermokarst depression behind. - envoPolar - http://orcid.org/0000-0002-3410-4655 - cave-in lake - thermokarst lakes - thaw lake - A freshwater lake which fills a depression formed by the erosion of thermokarst caused by permafrost thaw. - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Thermokarst - A freshwater lake which fills a depression formed by the erosion of thermokarst caused by permafrost thaw. - - - - - - - - - - methane-releasing thermokarst lake - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A thermokarst lake through which methane gas released from thawing permafrost, or other methane stores, rises and escapes to the atmosphere. - On Earth, the bright blue appearance, in the light spectrum visible to humans, is due to increased abundances of microorganisms attracted to sulfur compounds associated with the methane release. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - http://www.sciencealert.com/photos-reveal-more-than-200-bright-blue-arctic-lakes-have-started-bubbling-with-methane-gas - A thermokarst lake through which methane gas released from thawing permafrost, or other methane stores, rises and escapes to the atmosphere. - - - - - - - - - - thermokarst depression - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - A geographic basin which is formed due to the erosion of thermokarst by meltwater released from thawing permafrost. - - - A geographic basin which is formed due to the erosion of thermokarst by meltwater released from thawing permafrost. - https://en.wikipedia.org/wiki/Thermokarst - - - - - - - - - - thermokarst - - - - - - - - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - An irregular land surface which consists of marshy hollows, hummocks, thermokarst depressions and thermokarst lakes formed from the erosion of ice-rich thawing permafrost areas. - envoPolar - Thermokarst is usually found in Arctic or mountainous areas. - - - An irregular land surface which consists of marshy hollows, hummocks, thermokarst depressions and thermokarst lakes formed from the erosion of ice-rich thawing permafrost areas. - https://en.wikipedia.org/wiki/Thermokarst - - - - - - - - - - permafrost thawing process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - A process during which permafrost is warmed such that a portion of its constituent water ice is converted into meltwater. - - - https://en.wikipedia.org/wiki/Permafrost - A process during which permafrost is warmed such that a portion of its constituent water ice is converted into meltwater. - - - - - - - - - - methane-laden permafrost - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - bulgunyakh - It would probably be better to assert parthood between the permafrost and cavities filled with gas rather than the gases themselves. - envoPolar - http://orcid.org/0000-0002-3410-4655 - Other hydrocarbon gasses such as carbon dioxide may also be present. These pockets can be sufficently large that the permafrost surface will undulate when pressure is applied. - Permafrost which contains pockets of trapped methane gas. - - - Permafrost which contains pockets of trapped methane gas. - http://www.sciencealert.com/7-000-huge-gas-bubbles-have-formed-under-siberia-and-could-explode-at-any-moment - http://www.nature.com/news/mysterious-siberian-crater-attributed-to-methane-1.15649 - - - - - - - - - - methane-sourced permafrost crater - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - A crater which is found in permafrost and formed as a result of an explosion fuelled by methane formerly contained in that permafrost. - gigantic funnel - - - http://www.sciencealert.com/7-000-huge-gas-bubbles-have-formed-under-siberia-and-could-explode-at-any-moment - http://www.nature.com/news/mysterious-siberian-crater-attributed-to-methane-1.15649 - A crater which is found in permafrost and formed as a result of an explosion fuelled by methane formerly contained in that permafrost. - - - - - - - - - - explosion process - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - Supersonic explosions are known as detonations and subsonic explosions as deflagrations. - A process during which a material entity undergoes a rapid increase in volume, releasing gasses and various forms of energy, often including thermal, light and sound energy. - explosion - - - https://en.wikipedia.org/wiki/Explosion - A process during which a material entity undergoes a rapid increase in volume, releasing gasses and various forms of energy, often including thermal, light and sound energy. - - - - - - - - - - permafrost methane explosion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - An explosion during which methane-rich gas trapped in permafrost combusts. - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - - - http://www.sciencealert.com/7-000-huge-gas-bubbles-have-formed-under-siberia-and-could-explode-at-any-moment - http://www.nature.com/news/mysterious-siberian-crater-attributed-to-methane-1.15649 - An explosion during which methane-rich gas trapped in permafrost combusts. - - - - - - - - - - gas emission process - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A material transport process during which a portion of gaseous environmental material is transported into the atmosphere. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - https://en.wikipedia.org/wiki/Greenhouse_gas - A material transport process during which a portion of gaseous environmental material is transported into the atmosphere. - - - - - - - - - - hydrocarbon gas emission process - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - Some hydrocarbon gasses within the atmosphere contribute to the planetary green house gas effect by increasing absorption of solar energy. - A gas emission process during which a portion of hydrocarbon gas is transported into the atmosphere. - - - https://www.epa.gov/ghgemissions/overview-greenhouse-gases - A gas emission process during which a portion of hydrocarbon gas is transported into the atmosphere. - - - - - - - - - - methane gas emission process - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A hydrocarbon gas emission process during which a portion of methane gas is transported into the atmosphere. - envoPolar - http://orcid.org/0000-0002-3410-4655 - Methane is emitted during the production and transport of coal, natural gas, and oil. Methane emissions also result from livestock and other agricultural practices and by the decay of organic waste in municipal solid waste landfills. - - - A hydrocarbon gas emission process during which a portion of methane gas is transported into the atmosphere. - https://www.epa.gov/ghgemissions/overview-greenhouse-gases - - - - - - - - - - season generating process - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - The seasons that are generated by this process are divisions of time between warm (maximal radiation exposure) and cold (minimum radiation exposure) extremes. Depending on the planet's makeup, the resulting seasonal dynamics may include ecological and meteorological cycles which may form the basis for further divisions of the cycle (e.g. rainy season, dry season, wildfire season). - A process during which the intesity of stellar radiation received by a planet's surface varies in a cyclical regime due to the planet's orbital motion around the barycentre of a planetary system and/or the tilt of its rotational axis relative to its orbital plane. - - - - - - - - season - - Season could be implemented as a subclass of one-dimensional temporal region, however, this will need further thought and discussion with BFO editors. - A one-dimensional temporal region which is delimited by the occurrence of processes which serve as its delimiters. - envoAstro - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - - - - - - warm season - - A season during which the average temperature of a planetary part exceeds that of all other seasons it endures during a season generating process. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - The boundaries of seasons are typically fiat and should be defined on a data/information layer. This also pertains to the amount of time included when averaging measured values of qualities like temperature. - - - - - - - - cold season - - A season during which the average temperature of a planetary part is below that of all other seasons it endures during a season generating process. - The boundaries of seasons are typically fiat and should be defined on a data/information layer. This also pertains to the amount of time included when averaging measured values of qualities like temperature. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - - - - - - seasonal melting process - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A material transformation process during which a material entity melts during a warm season. - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - - - - - - solid-phase sintering - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A compaction process during which a material entity subjected to heat and/or pressure is compacted into a solid mass without undergoing melting. - We should add the subclass axiom: 'has output' some ('environmental material' and 'has quality' some 'decreased porosity') once PATO:decreased porosity is available see ENVO issue #497 - -Additional axioms could also refer to object aggregates becoming objects within an environmental material. - http://orcid.org/0000-0002-3410-4655 - envoPolar - - - https://en.wikipedia.org/wiki/Sintering - A compaction process during which a material entity subjected to heat and/or pressure is compacted into a solid mass without undergoing melting. - - - - - - - - - - glacial sintering - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - - Axioms will probably need to be updated if the axiomatisation of solid-phase sintering changes. - http://orcid.org/0000-0002-3410-4655 - envoPolar - A sintering process during which snow is compacted into glacial ice. - - - A sintering process during which snow is compacted into glacial ice. - https://en.wikipedia.org/wiki/Sintering - - - - - - - - - - aeolian transport of snow - - - - - - - - - - - - - - An aeolian transport process during which powdery snow is displaced and moved. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - https://en.wikipedia.org/wiki/Snow#Drifting - An aeolian transport process during which powdery snow is displaced and moved. - - - - - - - - - - snow drift formation - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - drifting of unsintered snow - An accumulation process during which a powdery snow carried on the wind settles on a solid surface, forming a mound. - http://orcid.org/0000-0002-4366-3088 - - - - - - - - slab avalanche - - environmental_hazards - Slab avalanches account for most back-country fatalities. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - A mass wasting process during which slab snow rapidly moves down a sloping surface. - - - https://en.wikipedia.org/wiki/Snow#Avalanche - A mass wasting process during which slab snow rapidly moves down a sloping surface. - - - - - - - - - - powdery snow avalanche - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - environmental_hazards - An avalanche is a rapid flow of snow down a sloping surface. - powder snow avalanche - - - https://en.wikipedia.org/wiki/Snow#Avalanche - An avalanche is a rapid flow of snow down a sloping surface. - - - - - - - - - - wet snow avalanche - - - - - - - - - - - - - - - - - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - An avalanche during which a suspension of water and snow flows down a sloping surface. - environmental_hazards - http://orcid.org/0000-0002-4366-3088 - Wet snow avalanches travel at a lower velocity than other types of avalanches. - - - https://en.wikipedia.org/wiki/Snow#Avalanche - An avalanche during which a suspension of water and snow flows down a sloping surface. - - - - - - - - - - slab snow - - http://orcid.org/0000-0002-4366-3088 - envoPolar - http://orcid.org/0000-0002-3410-4655 - Snow which is cohesive, hard and overlies weaker snow. - - - Snow which is cohesive, hard and overlies weaker snow. - http://www.fsavalanche.org/slab - - - - - - - - - - cryoform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - A geographic feature which is primarily composed of a continuous mass of snow and/or ice. - Place holder class. Also the axiom should be changed to something along the lines of 'primairly composed of’ some ‘environmental material’ and ‘has quality’ frozen once PATO:frozen is imported. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - - - - - - snow mass - - - - - - - - - - - - - - - - - - - - - A mass of snow. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - - - - - - snow drift - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - snowdrift - An accumulation of powdery snow which was transported and deposited via a snow drifting process. - unsintered snow - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - An accumulation of powdery snow which was transported and deposited via a snow drifting process. - https://en.wikipedia.org/wiki/Snow#Drifting - - - - - - - - - - snow patch - - - - - - - - - - - - - - - - - - - - - - - - - - - An accumulation of snow and firn which rests upon land. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - snowpatch - - - - - - - - seasonal snow patch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Need to find a way of expression the fact that it 'ends during' some 'warm season' (but not with that axiom as that is for processes not a material entity). - A snow patch which forms during a cold season and melts away during the succeeding warm season. - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - seasonal snowpatch - envoPolar - - - - - - - - perennial snow patch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-3410-4655 - envoPolar - A snow patch which persists through at least one seasonal cycle. - http://orcid.org/0000-0002-4366-3088 - perennial snowpatch - A snow patch is defined as perennial if it survives two or more melt seasons. - Need to find a way of expression the fact that it has survived two or more melt seasons. - - - - - - - - snowpack - - - - - - - - envoPolar - http://orcid.org/0000-0002-3410-4655 - http://orcid.org/0000-0002-4366-3088 - Snowpack is found in geographic regions experiencing cold weather for extended periods of time. - A layer which consists of an accumulation of snow. - - - https://en.wikipedia.org/wiki/Snowpack - A layer which consists of an accumulation of snow. - - - - - - - - - - channel - - - - - - - - Intended to be a top level class for wide variety of channel-like entities. It’s particulars may change once more subclasses are accumulated. This is distinct from 'channel of a watercourse', which is a depression. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - A structure which traverses a mass of one or more environmental materials, and encloses a roughly tubular site. - - - A structure which traverses a mass of one or more environmental materials, and encloses a roughly tubular site. - https://www.merriam-webster.com/dictionary/channel - - - - - - - - - - atmosphere and water column exposed melt pond - - - - - - - - open melt pond - A melt pond which and is exposed to the atmosphere and to a lesser degree water underlying the ice mass which contains it. - http://orcid.org/0000-0002-3410-4655 - envoPolar - It would be good to add an axiom such as 'continuous with' some 'water body'. - http://orcid.org/0000-0002-4366-3088 - http://orcid.org/0000-0001-5812-6405 - - - - - - - - water column exposed melt pond - - http://orcid.org/0000-0002-4366-3088 - A melt pond which is formed close to that part of an ice mass which is in contact with some underlying water body, and which has channels connecting it to that water body. - http://orcid.org/0000-0001-5812-6405 - It would be good to add an axiom such as 'continuous with' some 'water body'. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - - - - - - subglacial lake - - - - - - - - - - - - - - subglacial lakes - A lake which is situated beneath a glacier. - http://orcid.org/0000-0002-3410-4655 - envoPolar - http://orcid.org/0000-0002-4366-3088 - - - A lake which is situated beneath a glacier. - https://en.wikipedia.org/wiki/Subglacial_lake - - - - - - - - - - erosion through nivation - - - - - - - - - - - - - - - - - - - - - - - - - - - http://orcid.org/0000-0002-4366-3088 - An erosion process during which rock or soil is removed or degraded due to alternative thawing and freezing of meltwater beneath and at the margins of snowbanks. - envoPolar - http://orcid.org/0000-0002-3410-4655 - - - https://www.merriam-webster.com/dictionary/nivation - An erosion process during which rock or soil is removed or degraded due to alternative thawing and freezing of meltwater beneath and at the margins of snowbanks. - - - - - - - - - - axilla skin environment - - - - - - - - - - - - - - - - - - - - - - - - - 2014-12-15T22:32:00Z - An environment that is determined by an axilla skin. - ENVO - ENVO:08000001 - TermGenie - - - An environment that is determined by an axilla skin. - GOC:TermGenie - - - - - true - - - - - - - - - - - true - - - - - - - - - - - mouth environment - - - - - - - - - - - - - - - - - - - - - - - - - - 2015-04-10T23:34:03Z - An environment that is determined by a mouth. - TermGenie - - - true - - - - - - An environment that is determined by a mouth. - GOC:TermGenie - - - - - true - - - - - - - - - - - - - - - - solubility of carbon atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental material carbon atom solubility - The solubility of a carbon atom when measured in environmental material. - - - - - - - - solubility of carbon atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The solubility of a carbon atom when measured in soil. - soil carbon atom solubility - - - - - - - - solubility of carbon atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - water carbon atom solubility - The solubility of a carbon atom when measured in water. - - - - - - - - amount of carbon atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental material carbon atom amount - The amount of a carbon atom when measured in environmental material. - - - - - - - - amount of carbon atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The amount of a carbon atom when measured in soil. - soil carbon atom amount - - - - - - - - amount of carbon atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - water carbon atom amount - The amount of a carbon atom when measured in water. - - - - - - - - concentration of carbon atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental material carbon atom concentration - The concentration of a carbon atom when measured in environmental material. - - - - - - - - concentration of carbon atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - soil carbon atom concentration - The concentration of a carbon atom when measured in soil. - - - - - - - - concentration of carbon atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The concentration of a carbon atom when measured in water. - water carbon atom concentration - - - - - - - - solubility of nitrogen atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The solubility of a nitrogen atom when measured in environmental material. - environmental material nitrogen atom solubility - - - - - - - - solubility of nitrogen atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - soil nitrogen atom solubility - The solubility of a nitrogen atom when measured in soil. - - - - - - - - solubility of nitrogen atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - water nitrogen atom solubility - The solubility of a nitrogen atom when measured in water. - - - - - - - - amount of nitrogen atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental material nitrogen atom amount - The amount of a nitrogen atom when measured in environmental material. - - - - - - - - amount of nitrogen atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - soil nitrogen atom amount - The amount of a nitrogen atom when measured in soil. - - - - - - - - amount of nitrogen atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The amount of a nitrogen atom when measured in water. - water nitrogen atom amount - - - - - - - - concentration of nitrogen atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The concentration of a nitrogen atom when measured in environmental material. - environmental material nitrogen atom concentration - - - - - - - - concentration of nitrogen atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - soil nitrogen atom concentration - The concentration of a nitrogen atom when measured in soil. - - - - - - - - concentration of nitrogen atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - water nitrogen atom concentration - The concentration of a nitrogen atom when measured in water. - - - - - - - - concentration of chloride in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The concentration of a chloride when measured in water. - water chloride concentration - - - - - - - - dissolved carbon atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The carbon atom in a dissolved state when measured in environmental material. - environmental material dissolved carbon atom - - - - - - - - dissolved carbon atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The carbon atom in a dissolved state when measured in soil. - soil dissolved carbon atom - - - - - - - - dissolved carbon atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - water dissolved carbon atom - The carbon atom in a dissolved state when measured in water. - - - - - - - - dissolved nitrogen atom in environmental material - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - environmental material dissolved nitrogen atom - The nitrogen atom in a dissolved state when measured in environmental material. - - - - - - - - dissolved nitrogen atom in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - soil dissolved nitrogen atom - The nitrogen atom in a dissolved state when measured in soil. - - - - - - - - dissolved nitrogen atom in water - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The nitrogen atom in a dissolved state when measured in water. - water dissolved nitrogen atom - - - - - - - - temperature of environmental material - - - - - - - - - - - - - - - - - - - The temperature of some environmental material. - environmental material temperature - - - - - - - - temperature of air - - - - - - - - - - - - - - - - - - - air temperature - The temperature of some air. - - - - - - - - environmental system process quality - - - - - - - - - - - - - - - - - - - quality of environmental system process - The quality of a environmental system process. - - - - - - - - atmospheric wind intensity - - - - - - - - - - - - - - - - - - - The intensity of a atmospheric wind. - intensity of atmospheric wind - - - - - - - - porosity of soil - - - - - - - - - - - - - - - - - - - - The porosity of some soil. - soil porosity - - - - - - - - mass density of soil - - - - - - - - - - - - - - - - - - - The mass density of some soil. - soil mass density - - - - - - - - concentration of ammonium in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - soil ammonium concentration - The concentration of a ammonium when measured in soil. - - - - - - - - concentration of nitrate in soil - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The concentration of a nitrate when measured in soil. - soil nitrate concentration - - - - - - - - composition of soil - - - - - - - - - - - - - - - - - - - - soil composition - The composition of some soil. - - - - - - - - structure of soil - - - - - - - - - - - - - - - - - - - The structure of some soil. - soil structure - - - - - - - - acidity of soil - - - - - - - - - - - - - - - - - - - The acidity of some soil. - soil acidity - - - - - - - - pressure of air - - - - - - - - - - - - - - - - - - - air pressure - The pressure of some air. - - - - - - - - temperature of soil - - - - - - - - - - - - - - - - - - - The temperature of some soil. - soil temperature - - - - - - - - wetness of soil - - - - - - - - - - - - - - - - - - - The wetness of some soil. - soil wetness - - - - - - - - temperature of water - - - - - - - - - - - - - - - - - - - water temperature - The temperature of some water. - - - - - - - - humidity of soil - - - - - - - - - - - - - - - - - - - soil humidity - The humidity of some soil. - - - - - - - - concentration of nitrate in groundwater - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - groundwater nitrate concentration - ground water nitrate concentration - The concentration of nitrate when measured in groundwater. - - - - - - - - drought - - environmental_hazards - A hydrological precipitation process with a reduced rate relative to some historical average, typically resulting in ecosystemic perturbations. - Drought is often defined as a temporal period of below-average precipitation, however, representing it as a temporal entity seems insufficient. - - - - - - - - marine mucilage - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The formation of marine mucilage is often associated with conditions which stress marine microorganisms such as diatoms. - A gelatinous material primarily composed of exopolymeric compounds with colloidal properties, formed through the aggregation of marine snow particles, often found in large sheets, flocs, and clouds. - sea snot - See issue #276. -This class is complex as marine mucilage is quite complex. It will also requre new class creation in GO process for deeper semantics. - - - DOI:10.1371/journal.pone.0007006 - A gelatinous material primarily composed of exopolymeric compounds with colloidal properties, formed through the aggregation of marine snow particles, often found in large sheets, flocs, and clouds. - - - - - - - - - - exudation of carbohydrates - - A process in which carbohydrates are transported from the interior of an organism to its surroundings. - Class for testing with marine mucilage. - - - - - - - - island formation process - - - - - - - - - - - - - - - - - - - Addressing Issue #268. This top-level class may be converted to an inferred class. - A process which results in the formation of an island. - - - - - - - - microcontinental island - - "Examples are Madagascar and Socotra off Africa, the Kerguelen Islands, New Caledonia, New Zealand, and some of the Seychelles." https://en.wikipedia.org/wiki/Island - An island created when a continent is rifted. - - - https://en.wikipedia.org/wiki/Island - An island created when a continent is rifted. - - - - - - - - - - depositional island - - An island formed by deposition of solid material such as sand or small rocks where a water current loses some of its carrying capacity. - - - https://en.wikipedia.org/wiki/Island - An island formed by deposition of solid material such as sand or small rocks where a water current loses some of its carrying capacity. - - - - - - - - - - barrier island - - An island formed by the accumulation of sand deposited by sea currents on a continental shelves - - - https://en.wikipedia.org/wiki/Island - An island formed by the accumulation of sand deposited by sea currents on a continental shelves - - - - - - - - - - chemical product - - 2013-04-27T10:32:07Z - A manufactured product that is some mixture of chemicals created through some chemical engineering process - ENVO - ENVO:2000000 - cjm - - - A manufactured product that is some mixture of chemicals created through some chemical engineering process - ENVO:cjm - - - - - - - - - - creosote - - 2013-04-27T10:35:14Z - ENVO - ENVO:2000001 - The portion of chemical products obtained by the distillation of a tar that remains heavier than water, notably useful for its anti-septic and preservative properties - cjm - https://en.wikipedia.org/wiki/Creosote - - - The portion of chemical products obtained by the distillation of a tar that remains heavier than water, notably useful for its anti-septic and preservative properties - https://en.wikipedia.org/wiki/Creosote - - - - - - - - - - industrial wastewate treatment plant - - 2013-04-27T03:16:01Z - A wastewater treatment plant that treates industrial wastewater. Industrial wastewater treatment covers the mechanisms and processes used to treat waters that have been contaminated in some way by anthropogenic industrial or commercial activities prior to its release into the environment or its re-use. - ENVO - ENVO:2000002 - cjm - - - A wastewater treatment plant that treates industrial wastewater. Industrial wastewater treatment covers the mechanisms and processes used to treat waters that have been contaminated in some way by anthropogenic industrial or commercial activities prior to its release into the environment or its re-use. - https://en.wikipedia.org/wiki/Industrial_wastewater_treatment - - - - - - - - - - agricultural wastewater treatment plant - - 2013-04-27T03:17:36Z - A wastewater treatment plant that treats agriculatural wastewater. Agricultural wastewater treatment relates to the treatment of wastewaters produced in the course of agricultural activities. Agriculture is a highly intensified industry in many parts of the world, producing a range of wastewaters requiring a variety of treatment technologies and management practices. - ENVO - ENVO:2000003 - cjm - - - A wastewater treatment plant that treats agriculatural wastewater. Agricultural wastewater treatment relates to the treatment of wastewaters produced in the course of agricultural activities. Agriculture is a highly intensified industry in many parts of the world, producing a range of wastewaters requiring a variety of treatment technologies and management practices. - https://en.wikipedia.org/wiki/Agricultural_wastewater_treatment - - - - - - - - - - algal bloom - - 2013-04-27T04:26:24Z - A feature that arises from a rapid increase or accumulation in the population of algae (typically microscopic) in an aquatic system. - ENVO - ENVO:2000004 - EcoLexicon:algal_bloom - SWEETRealm:AlgalBloom - cjm - https://en.wikipedia.org/wiki/Algal_bloom - - - A feature that arises from a rapid increase or accumulation in the population of algae (typically microscopic) in an aquatic system. - https://en.wikipedia.org/wiki/Algal_bloom - - - - - - - - - - freshwater algal bloom - - - - - - - - - - - - - - - - - - - 2013-04-27T04:28:27Z - An algal bloom that is located in freshwater. Freshwater algal blooms are the result of an excess of nutrients, particularly some phosphates. - ENVO - ENVO:2000005 - cjm - envoPolar - - - An algal bloom that is located in freshwater. Freshwater algal blooms are the result of an excess of nutrients, particularly some phosphates. - https://en.wikipedia.org/wiki/Algal_bloom#Freshwater_algal_blooms - - - - - - - - - - nest of termite - - 2013-04-27T04:49:24Z - An animal habitation constructed by termites. Termite workers build and maintain nests which house the colony. These are elaborate structures made using a combination of soil, mud, chewed wood/cellulose, saliva, and faeces. A nest has many functions such as providing a protected living space and water conservation (through controlled condensation). - ENVO - ENVO:2000006 - cjm - termite nest - - - An animal habitation constructed by termites. Termite workers build and maintain nests which house the colony. These are elaborate structures made using a combination of soil, mud, chewed wood/cellulose, saliva, and faeces. A nest has many functions such as providing a protected living space and water conservation (through controlled condensation). - https://en.wikipedia.org/wiki/Termite#Nests - - - - - - - - - - anatomical entity environment - - - - - - - - - - - - - - - - - - - - - - - - - An environment which is determined by an anatomical entity. - - - - - - - - intestine environment - - - - - - - - - - - - - - - - - - - An environmental system determined by an intestine. - - - - - - - - skin environment - - - - - - - - - - - - - - - - - - - - An environment determined by an area or zone of skin tissue. - - - - - - - - integumental system environment - - - - - - - - - - - - - - - - - - - - - - - - - - face skin environment - - - - - - - - - - - - - - - - - - - - - - - - - - feather environment - - - - - - - - - - - - - - - - - - - - - - - - - - - fungal structure - fungal structure ontology - - - - - - - - whole plant phenotype - - - - - - - - whole plant herbaceous - - - - - - - - - whole plant lifeform - - - - - - - - - whole plant therophytic - - therophyte - - - - - - - - whole plant geophytic - - geophyte - - - - - - - - whole plant helophytic - - helophyte - - - - - - - - whole plant hydrophytic - - hydrophyte - - - - - - - - whole plant hemicryptophytic - - hemicryptophyte - - - - - - - - whole plant chamaephytic - - chamaephyte - - - - - - - - whole plant phanerophytic - - phanerophyte - - - - - - - - whole plant epiphytic - - epiphyte - - - - - - - - whole plant cryptophytic - - cryptophyte - - - - - - - - whole plant growth form - - - - - - - - - whole plant arborescent - - tree - - - - - - - - whole plant frutescent - - bush - shrub - - - - - - - - whole plant lianescent - - climber - liana - - - - - - - - whole plant lifestyle - - - - - - - - - whole plant annual - - - - - - - - - whole plant biennial - - - - - - - - - whole plant perennial - - - - - - - - - whole plant litophytic - - litophyte - - - - - - - - product type, foodon - A substance, usually composed primarily of carbohydrates, fats, water and/or proteins, that can be eaten or drunk by an animal or human being for nutrition or pleasure. - - - A substance, usually composed primarily of carbohydrates, fats, water and/or proteins, that can be eaten or drunk by an animal or human being for nutrition or pleasure. - Wikipedia:Food - - - - - - - - - - fungal product - - - - - - - - - microbial food product - - - - - - - - - mushroom - - - A mushroom (or toadstool) is the fleshy, spore-bearing fruiting body of a fungus, typically produced above ground on soil or on its food source. - http://langual.org - WIKIPEDIA:Mushroom - LANGUAL:B1467 - fungi - wild mushroom - - - - - - - - - algae, bacteria or fungus used as food source - - http://langual.org - LANGUAL:B1215 - - - - - - - - - fungus - - http://langual.org - LANGUAL:B1261 - - - - - - - - - food source - http://langual.org - LANGUAL:B1564 - Individual plant or animal from which the food product or its major ingredient is derived; also a chemical food source [FDA CFSAN 1995]. - LanguaL curation note: This term is for CLASSIFICATION ONLY; DO NOT USE term in indexing. Use a more precise narrower term. - - - - - - - - - basidiomycetes - - http://eol.org/pages/5664 - Basidiomycota - LANGUAL:B2035 - http://langual.org - WIKIPEDIA:Basidiomycota - *Basidiomycota* is one of two large phyla that, together with the *Ascomycota*, constitute the subkingdom *Dikarya* (often referred to as the "higher fungi") within the kingdom Fungi. More specifically the *Basidiomycota* include these groups: mushrooms, puffballs, stinkhorns, bracket fungi, other polypores, jelly fungi, boletes, chanterelles, earth stars, smuts, bunts, rusts, mirror yeasts, and the human pathogenic yeast *Cryptococcus*. - basidiomycota - basidiomycotina - basidios - club fungi - teliomycetes - ustomycetes - - - - ITIS:623881 - Basidiomycota - - - - - - - - - - - generation of precursor metabolites and energy - - The chemical reactions and pathways resulting in the formation of precursor metabolites, substances from which energy is derived, and any process involved in the liberation of energy from these substances. - energy pathways - intermediary metabolism - metabolic energy generation - - - - - - - - nitrogen compound metabolic process - - The chemical reactions and pathways involving organic or inorganic compounds that contain nitrogen, including (but not limited to) nitrogen fixation, nitrification, denitrification, assimilatory/dissimilatory nitrate reduction and the interconversion of nitrogenous organic matter and ammonium. - nitrogen compound metabolism - - - - - - - - biological_process - - Any process specifically pertinent to the functioning of integrated living units: cells, tissues, organs, and organisms. A process is a collection of molecular events with a defined beginning and end. - biological process - physiological process - - - - - - - - metabolic process - - The chemical reactions and pathways, including anabolism and catabolism, by which living organisms transform chemical substances. Metabolic processes typically transform small molecules, but also include macromolecular processes such as DNA repair and replication, and protein synthesis and degradation. - metabolic process resulting in cell growth - metabolism - metabolism resulting in cell growth - - - - - - - - biosynthetic process - - The chemical reactions and pathways resulting in the formation of substances; typically the energy-requiring part of metabolism in which simpler substances are transformed into more complex ones. - anabolism - biosynthesis - formation - synthesis - - - - - - - - aerobic respiration - - The enzymatic release of energy from inorganic and organic compounds (especially carbohydrates and fats) which requires oxygen as the terminal electron acceptor. - - - - - - - - anaerobic respiration - - The enzymatic release of energy from inorganic and organic compounds (especially carbohydrates and fats) which uses compounds other than oxygen (e.g. nitrate, sulfate) as the terminal electron acceptor. - - - - - - - - cellular process - - Any process that is carried out at the cellular level, but not necessarily restricted to a single cell. For example, cell communication occurs among more than one cell, but occurs at the cellular level. - cell growth and/or maintenance - cell physiology - cellular physiological process - - - - - - - - methane metabolic process - - The chemical reactions and pathways involving methane, a colorless, odorless, flammable gas with the formula CH4. It is the simplest of the alkanes. - methane metabolism - - - - - - - - methanogenesis - - - - - The chemical reactions and pathways resulting in the formation of methane, a colorless, odorless, flammable gas with the formula CH4. It is the simplest of the alkanes. - methane biosynthesis - methane biosynthetic process - envoPolar - - - - - - - - energy derivation by oxidation of reduced inorganic compounds - - - - The chemical reactions and pathways by which a cell derives energy from inorganic compounds; results in the oxidation of the compounds from which energy is released. - chemolithotrophie - chemolithotrophy - lithotrophy - - - - - - - - photosynthesis - - The synthesis by organisms of organic chemical compounds, especially carbohydrates, from carbon dioxide (CO2) using energy obtained from light rather than from the oxidation of chemical compounds. - envoPolar - - - - - - - - energy derivation by oxidation of organic compounds - - - - The chemical reactions and pathways by which a cell derives energy from organic compounds; results in the oxidation of the compounds from which energy is released. - chemoorganotrophy - - - - - - - - ammonia oxidation - - - - The chemical reactions and pathways by which ammonia or ammonium is converted to molecular nitrogen or another nitrogen compound, with accompanying loss of electrons. - - - - - - - - anaerobic respiration, using ammonium as electron donor - - - - - The oxidation of ammonium (NH4) to nitrogen (N2) in the absence of oxygen, using nitrite (NO2) as the electron acceptor. It is suggested that hydroxylamine and ammonium are combined to yield hydrazine, which is subsequently oxidized to N2. - anaerobic ammonium oxidation - anammox - envoPolar - - - - - - - - aerobic respiration, using nitrite as electron donor - - - - The oxidation of nitrite (NO2) to nitrate (NO3), using oxygen (O2) as the electron acceptor. Nitrite oxidation is the final step in nitrification, the oxidation of ammonia to nitrate, and nitrite oxidoreductase (NOR) is the key enzyme complex that catalyzes the conversion of nitrite to nitrate in nitrite oxidizing species. - nitrite oxidation - envoPolar - - - - - - - - aerobic respiration, using ammonia as electron donor - - - - - The metabolic process in which ammonia (NH3) is oxidized to nitrite (NO2) in the presence of oxygen; enzymatic reactions convert ammonia to hydrazine, and hydrazine to nitrite. - aerobic ammonia oxidation to nitrite via hydrazine - envoPolar - - - - - - - - aerobic respiration, using carbon monoxide as electron donor - - - The metabolic process in which carbon monoxide (CO) is oxidized to carbon dioxide (CO2) to generate energy. Conservation of energy in this process likely uses sodium ion gradients for ATP synthesis and is coupled to quantitative sulfide methylation. - - - - - - - - aerobic respiration, using ferrous ions as electron donor - - - The metabolic process in which ferrous ions (Fe2+) are oxidized to ferric ions (Fe3+) to generate energy, coupled to the reduction of carbon dioxide. - envoPolar - - - - - - - - aerobic respiration, using hydrogen as electron donor - - - The oxidation of hydrogen (H2) to water (H2O), using oxygen (O2) as the electron acceptor. A hydrogenase enzyme binds H2 and the hydrogen atoms are passed through an electron transfer chain to O2 to form water. - hydrogen oxidation - envoPolar - - - - - - - - aerobic respiration, using sulfur or sulfate as electron donor - - - An aerobic respiration process in which a sulfur-containing molecule (hydrogen sulfide, sulfur, sulfite, thiosulfate, and various polythionates) is oxidized. - aerobic respiration, using sulphur or sulphate as electron donor - envoPolar - - - - - - - - aerobic electron transport chain - - - A process in which a series of electron carriers operate together to transfer electrons from donors such as NADH and FADH2 to oxygen to generate a transmembrane electrochemical gradient. - NADH-O2 electron transport - succinate-O2 electron transport - ubiquinone-8-O2 electron transport - - - - - - - - electron transport chain - - - - A process in which a series of electron carriers operate together to transfer electrons from donors to any of several different terminal electron acceptors to generate a transmembrane electrochemical gradient. - - - - - - - - respiratory electron transport chain - - 6-phosphofructokinase reduction - A process in which a series of electron carriers operate together to transfer electrons from donors such as NADH and FADH2 to any of several different terminal electron acceptors to generate a transmembrane electrochemical gradient. - dihydrobiopterin reduction - dihydrolipoamide reduction - dihydrolipoylprotein reduction - dihydropteridine reduction - electron transfer - other pathways of electron transport - oxidized glutathione reduction - protein-disulfide reduction - - - - - - - - cellular nitrogen compound metabolic process - - - The chemical reactions and pathways involving various organic and inorganic nitrogenous compounds, as carried out by individual cells. - cellular nitrogen compound metabolism - - - - - - - - locomotion - - - - - - - - - cellular alkane metabolic process - - - - - The chemical reactions and pathways involving an alkane, any acyclic branched or unbranched hydrocarbon having the general formula CnH2n+2, as carried out by individual cells. - alkane metabolism - - - - - - - - alkane biosynthetic process - - - - - The chemical reactions and pathways resulting in the formation of an alkane, any acyclic branched or unbranched hydrocarbon having the general formula CnH2n+2. - alkane anabolism - alkane biosynthesis - alkane formation - alkane synthesis - - - - - - - - aerobic respiration, using arsenite as electron donor - - - The oxidation of arsenite to arsenate, using oxygen (O2) as the electron acceptor. Arsenite oxidase provides electrons to an electron carrier which transfers them to oxygen utilizing respiratory systems. - - - - - - - - cellular metabolic process - - - The chemical reactions and pathways by which individual cells transform chemical substances. - cellular metabolism - intermediary metabolism - - - - - - - - cellular biosynthetic process - - - The chemical reactions and pathways resulting in the formation of substances, carried out by individual cells. - cellular anabolism - cellular biosynthesis - cellular formation - cellular synthesis - - - - - - - - small molecule metabolic process - - The chemical reactions and pathways involving small molecules, any low molecular weight, monomeric, non-encoded molecule. - small molecule metabolism - - - - - - - - single-organism process - - A biological process that involves only one organism. - single organism process - - - - - - - - single-organism metabolic process - - - A metabolic process - chemical reactions and pathways, including anabolism and catabolism, by which living organisms transform chemical substances - which involves a single organism. - - - - - - - - single-organism biosynthetic process - - - A biosynthetic process - chemical reactions and pathways resulting in the formation of substances - involving a single organism. - - - - - - - - single-organism cellular process - - - Any process that is carried out at the cellular level, occurring within a single organism. - - - - - - - - cellular respiration - - The enzymatic release of energy from inorganic and organic compounds (especially carbohydrates and fats) which either requires oxygen (aerobic respiration) or does not (anaerobic respiration). - oxidative metabolic process - oxidative metabolism - respiration - - - - - - - - oxidation-reduction process - - A metabolic process that results in the removal or addition of one or more electrons to or from a substance, with or without the concomitant removal or addition of a proton or protons. - oxidation reduction - oxidoreductase process - - - - - - - - organic substance metabolic process - - The chemical reactions and pathways involving an organic substance, any molecular entity containing carbon. - organic molecular entity metabolic process - organic molecular entity metabolism - organic substance metabolism - - - - - - - - organic substance biosynthetic process - - - The chemical reactions and pathways resulting in the formation of an organic substance, any molecular entity containing carbon. - organic molecular entity anabolism - organic molecular entity biosynthesis - organic molecular entity biosynthetic process - organic molecular entity formation - organic molecular entity synthesis - organic substance anabolism - organic substance biosynthesis - organic substance formation - organic substance synthesis - - - - - - - - root - - all - - - all - - - - - - - - - - - Cyanobacteria - - Cyanophyceae - Cyanophycota - Cyanophyta - Oxygenic photosynthetic bacteria - Oxyphotobacteria - blue-green algae - blue-green bacteria - cyanobacteria - cyanophytes - - - - - - - - Chroococcales - - - - - - - - - Aphanothece - - Coccochloris - - - - - - - - Microcystis - - - - - - - - - Microcystis aeruginosa - - - - - - - - - Oscillatoriales - - - - - - - - - Oscillatoria - - Plaxonema - - - - - - - - Nostocales - - - - - - - - - Nostocaceae - - - - - - - - - Anabaena - - - - - - - - - Oedaleus senegalensis - - - - - - - - - Aphanizomenon - - - - - - - - - Teleostomi - - - - - - - - - Euteleostomi - - bony vertebrates - - - - - - - - Nostoc - - Amorphonostoc - - - - - - - - Rivulariaceae - - - - - - - - - Stigonematales - - - - - - - - - Phormidium - - - - - - - - - Trichodesmium - - - - - - - - - Ecdysozoa - - - - - - - - - Oscillatoriophycideae - - - - - - - - - Juniperus - - junipers - - - - - - - - Streptophytina - - Charophyta/Embryophyta group - charophyte/embryophyte group - - - charophyte/embryophyte group - - - - - - Charophyta/Embryophyta group - - - - - - - - - - - cellular organisms - - biota - - - biota - - - - - - - - - - - Dipnotetrapodomorpha - - - - - - - - - Cupressus - - cypress - - - - - - - - Boreoeutheria - - Boreotheria - - - - - - - - Acrogymnospermae - - - - - - - - - Mesangiospermae - - - - - - - - - Petrosaviidae - - - - - - - - - Cupressales - - - - - - - - - Hapalosiphon - - Cyanothrix - - - - - - - - Arecoideae - - - - - - - - - Cocoseae - - Cocoeae - - - - - - - - Elaeidinae - - - - - - - - - Terrabacteria group - - - - - - - - - Cyanobacteria/Melainabacteria group - - - - - - - - - Pancrustacea - - - - - - - - - Mandibulata - - mandibulates - - - - - - - - Umezakia - - - - - - - - - Bacteria - - Monera - Procaryotae - Prokaryota - Prokaryotae - bacteria - eubacteria - not Bacteria Haeckel 1894 - prokaryote - prokaryotes - - - - - - - - Homininae - - Homo/Pan/Gorilla group - - - - - - - - Hieroglyphus - - - - - - - - - Oedaleus - - Oedalus - - - - - - - - Oxyinae - - - - - - - - - Schizothrix - - Dictyothrix - - - - - - - - Oedipodinae - - Locustinae - band-winged grasshoppers - - - - - - - - Eukaryota - - Eucarya - Eucaryotae - Eukarya - Eukaryotae - eucaryotes - eukaryotes - eukaryotes - - - eukaryotes - - - - - - Eukarya - - - - - - Eukaryotae - - - - - - eukaryotes - - - - - - eucaryotes - - - - - - Eucarya - - - - - - Eucaryotae - - - - - - - - - - - Lyngbya - - - - - - - - - Bacillariophyta - - Diatomea - Diatomeae - Diatomophyceae - algae - bacillariophytes - diatoms - diatoms - - - - - - - - Dinophyceae - - Chromophyta - Dinoflagellata - Dinophycidae - Dinophyta - Pyrrhophyta - Pyrrophyta - algae - dinoflagellates - dinoflagellates - dinophytes - - - - - - - - Peridiniales - - - - - - - - - Euarchontoglires - - - - - - - - - Simiiformes - - Anthropoidea - - - - - - - - Hominoidea - - ape - apes - - - - - - - - Embryophyta - - higher plants - land plants - land plants - plants - - - higher plants - - - - - - land plants - - - - - - land plants - - - - - - plants - - - - - - - - - - - Tetrapoda - - tetrapods - - - - - - - - Amniota - - amniotes - - - - - - - - Theria <Mammalia> - - Theria - - - - - - - - Viridiplantae - - Chlorobionta - Chlorophyta/Embryophyta group - chlorophyte/embryophyte group - green plants - green plants - - - green plants - - - - - - Chlorobionta - - - - - - green plants - - - - - - chlorophyte/embryophyte group - - - - - - Chlorophyta/Embryophyta group - - - - - - - - - - - Pinidae - - Coniferales - - - - - - - - Opisthokonta - - Fungi/Metazoa group - opisthokonts - - - - - - - - Metazoa - - Animalia - animals - metazoans - multicellular animals - - - - - - - - Bilateria - - - - - - - - - Protostomia - - - - - - - - - Neoptera - - - - - - - - - Orthopteroidea - - - - - - - - - Deuterostomia - - deuterostomes - - - - - - - - Alveolata - - alveolates - - - - - - - - Stramenopiles - - Chromophyta - Heterokonta - Straminipila - heterokonts - - - - - - - - Cupressaceae - - cypress family - - - - - - - - Magnoliophyta - - Angiospermae - angiosperms - flowering plants - flowering plants - - - Angiospermae - - - - - - flowering plants - - - - - - angiosperms - - - - - - flowering plants - - - - - - - - - - - Streptophyta - - - - - - - - - Cyrtacanthacridinae - - migratory bird locusts - spur-throated grasshoppers - spur-throated locusts - - - - - - - - Haplorrhini - - - - - - - - - Pfiesteriaceae - - - - - - - - - Arecales - - Areciflorae - - - - - - - - Mammalia - - mammals - mammals - - - - - - - - Chortoicetes - - - - - - - - - Liliopsida - - Monocotyledoneae - monocots - monocots - monocotyledons - - - - - - - - Microcystis viridis - - - - - - - - - Arecaceae - - Palmae - palm family - palms - - - - - - - - commelinids - - Commelinidae - Commeliniflorae - - - - - - - - Fungi - - fungi - fungi - - - - - - - - Insecta - - true insects - - - - - - - - Chortoicetes terminifera - - Australian plague locust - Chortoicetes terminifera (Walker, 1870) - - - - - - - - Elaeis - - - - - - - - - Elaeis guineensis - - African oil palm - Elaeis guineensis var. tenera (Oil palm) - Elaeis guinensi - Elaeis gunieensis - - - - - - - - Planktothrix - - Oscillatoria sect. Prolificae - - - - - - - - Tracheophyta - - vascular plants - vascular plants - - - vascular plants - - - - - - vascular plants - - - - - - - - - - - Spermatophyta - - seed plants - seed plants - - - seed plants - - - - - - seed plants - - - - - - - - - - - Eumetazoa - - - - - - - - - Cnidaria - - Coelenterata - cnidarians - cnidarians - coelenterates - - - - - - - - Anthozoa - - anthozoans - anthozoans - - - - - - - - Arthropoda - - arthropods - arthropods - - - - - - - - Hexapoda - - Atelocerata - Tracheata - Uniramia - insects - insects - - - - - - - - Orthoptera - - Saltatoria - grasshoppers &c. - - - - - - - - Caelifera - - grasshoppers - grasshoppers and locusts - - - - - - - - Acrididae - - short-horned grasshoppers - - - - - - - - Locusta - - - - - - - - - Locusta migratoria - - migratory locust - - - - - - - - Schistocerca - - - - - - - - - Schistocerca gregaria - - Locusta gregaria - desert locust - - - - - - - - Acridomorpha - - - - - - - - - Pfiesteria - - - - - - - - - Pterygota <winged insects> - - Pterygota - winged insects - - - - - - - - Cylindrospermopsis - - - - - - - - - Chordata - - chordates - chordates - - - - - - - - Vertebrata <Metazoa> - - Vertebrata - vertebrates - vertebrates - - - - - - - - Gnathostomata <vertebrate> - - Gnathostomata - jawed vertebrates - - - - - - - - Euphyllophyta - - euphyllophytes - - - euphyllophytes - - - - - - - - - - - Sarcopterygii - - - - - - - - - Dicondylia - - - - - - - - - Panarthropoda - - - - - - - - - Craniata <chordata> - - Craniata - - - - - - - - Acridoidea - - - - - - - - - Gloeotrichia - - Gloeotrichia (Agardh 1824) ex Bornet and Flahault 1886 - - - - - - - - Eutheria - - Placentalia - eutherian mammals - placental mammals - placentals - placentals - - - - - - - - Primates - - Primata - primate - primates - - - - - - - - Catarrhini - - - - - - - - - Hominidae - - Pongidae - great apes - - - - - - - - Homo - - - - - - - - - Homo sapiens - - human - humans - man - - - - - - - - processed material - - Is a material entity that is created or changed during material processing. - - - - - - - - environment control function - - An environmental control function is a function that regulates a contained environment within specified parameter ranges. For example the control of light exposure, humidity and temperature. - - - - - - - - device - - A material entity that is designed to perform a function in a scientific investigation, but is not a reagent. - - - - - - - - secondary cultured cell population - - A cultured cell population that is derived through one or more passages in culture. - - - - - - - - cultured cell population - - A processed material comprised of a collection of cultured cells that has been continuously maintained together in culture and shares a common propagation history. - - - - - - - - microbial phenotype - The observable manifestation of the genotype of a microbial cell or group of cells in an environment. - - - - - - - - temperature growth range phenotype - - A growth phenotype where the trait in question is the range of temperatures where growth of the microbe can occur. - temperature requirement for growth - - - - - - - - hyperthermophilic growth - - A temperature growth range phenotype where optimal growth occurs between 85 C and 113 C. - - - - - - - - thermophilic growth - - A temperature growth range phenotype where growth can occur at 55 C or higher and optimal growth occurs between 55 C and 65 C. - - - - - - - - mesophilic growth - - A temperature growth range phenotype where optimal growth occurs between 20 C and 45 C. - - - - - - - - psychrotrophic growth - - A temperature growth range phenotype where growth of the occurs from 0 to 7 degrees C with optimum growth at 20 to 30 degrees C. The maximum temperature of growth is around 35 degrees C. - - - - - - - - psychrophilic growth - - A temperature growth range phenotype where growth can occur at 0 degrees C and optimal growth occurs at temperatures of 15 degrees C or lower. - - - - - - - - population phenotype - - A microbial phenotype where the phenotype is observed at the level of a microbial population. - - - - - - - - population growth phenotype - - - A microbial phenotype where the trait in question is the increase in the number of individuals in a microbial population as the result of sexual or asexual reproduction. - - - - - - - - growth range phenotype - - A growth phenotype related to non-nutrient environmental factors and the requirements for microbial growth. - - - - - - - - biological process phenotype - - A microbial phenotype that affects a biological process. - - - - - - - - quality - - A dependent entity that inheres in a bearer by virtue of how the bearer is related to other entities - trait - quality (PATO) - - - - - - - - age - - A time quality inhering in a bearer by virtue of how long the bearer has existed. - - - - - - - - color - - A composite chromatic quality composed of hue, saturation and intensity parts. - colour - relative color - - - - - - - - color pattern - - A chromatic property that is the relative position of different hues or degrees of saturation. - - - - - - - - composition - - A single physical entity inhering in an bearer by virtue of the bearer's quantities or relative ratios of subparts. - composed of - compositionality - content - structure, composition - - - - - - - - concentration of - - A quality inhering in a substance by virtue of the amount of the bearer's there is mixed with another substance. - concentration - - - - - - - - frequency - - A physical quality which inheres in a bearer by virtue of the number of the bearer's repetitive actions in a particular time. - - - - - - - - hardness - - A physical quality inhering in a bearer by virtue of the bearer's resistance to pressure, being broken, or pierced - impenetrability - toughness - - - - - - - - intensity - - A quality inhering in a bearer by virtue of the bearer's possessing or displaying a distinctive feature in type or degree or effect or force. - - - - - - - - morphology - - - A quality of a single physical entity inhering in the bearer by virtue of the bearer's size or shape or structure. - - - - - - - - shape - - A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - relational shape quality - - - - - - - - occurrence - - A quality of a single process inhering in a bearer by virtue of the bearer's occurrence. - incidence - temporal - - - - - - - - odor - - A physical quality inhering in a bearer by virtue of the bearer's molecules being are aerially dispersed and perceived by an odorant receptor. - - - - - - - - spatial pattern - - A spatial quality inhering in a bearer by virtue of the bearer's exhibiting repetition of placement of its parts. - distribution - pattern - - - - - - - - qualitative - - - - - - - - - deviation(from_normal) - - A quality inhering in a bearer by virtue of the whether the bearer differs from normal or average. - - - - - - - - amount - - The number of entities of this type that are part of the whole organism. - count - count in organism - number - presence - presence or absence in organism - quantitative - - - - - - - - sensitivity toward - - A quality inhering in a bearer by virtue of the bearer's disposition to detect or perceive external stimulation. - sensitivity - - - - - - - - size - - A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - - - - - - - - length - - A 1-D extent quality which is equal to the distance between two points. - - - - - - - - mass - - A physical quality that inheres in a bearer by virtue of the proportion of the bearer's amount of matter. - - - - - - - - closure - - A morphological quality pertaining to the degree to which an object contains an opening, aperture, orifice or vent. - - - - - - - - position - - A spatial quality inhering in a bearer by virtue of the bearer's spatial location relative to other objects in the vicinity. - location - placement - relational spatial quality - - - - - - - - structure - - A morphology quality inhering in a bearer by virtue of the bearer's relative position, shape, arrangements and connectivity of an organism's various parts; the pattern underlying its form. - conformation - relational structural quality - - - - - - - - temperature - - A physical quality of the thermal energy of a system. - - - - - - - - rate - - A quality of a single process inhering in a bearer by virtue of the bearer's occurrence per unit time. - - - - - - - - time - - A quality in which events occur in sequence. - - - - - - - - viability - - An organismal quality inhering in a bearer or a population by virtue of the bearer's disposition to survive and develop normally or the number of surviving individuals in a given population. - - - - - - - - old - - An age which is relatively high. - - - - - - - - young - - An age which is relatively low. - - - - - - - - blue - - A color hue with low wavelength of that portion of the visible spectrum lying between green and indigo, evoked in the human observer by radiant energy with wavelengths of approximately 420 to 490 nanometers. - - - - - - - - irregular spatial pattern - - A spatial pattern inhering in a bearer by virtue of the bearer's magnitude of or the relationships between its repeated parts lack consistency. - - - - - - - - colorless - - A color quality inhering in a bearer by virtue of the bearer's lacking color. - unpigmented - - - - - - - - increased frequency - - - A frequency which is relatively high. - frequent - high frequency - - - - - - - - decreased frequency - - - A frequency which is relatively low. - infrequent - low frequency - - - - - - - - hard - - - A hardness quality of being rigid and resistant to pressure. - firm - impenetrable - tough - - - - - - - - branched - - A branchiness quality inhering in a bearer by virtue of the bearer's having branches. - ramified - ramiform - - - - - - - - curved - - A curvature quality inhering in a bearer by virtue of the bearer's having or being marked by a curve or smoothly rounded bend. - bowing - curled - - - - - - - - flat - - A quality inhering in a bearer by virtue of the bearer's having a horizontal surface without a slope, tilt, or curvature. - plate-like - - - - - - - - circular - - A shape quality inhering in a bearer by virtue of the bearer's being such that every part of the surface or the circumference is equidistant from the center. - round - rounded - - - - - - - - sporadic - - A quality of a single process inhering in a bearer by virtue of the bearer's once or in or a few unpredictable instances. - - - - - - - - invariant - - A variability quality inhering in a bearer by virtue of the bearer's lacking or not exhibiting variation. - constant - uniform - - - - - - - - increased length - - - A length quality which is relatively large. - long - - - - - - - - decreased length - - - A length quality which is relatively small. - short - shortened - stubby - - - - - - - - increased size - - - A size quality which is relatively high. - big - enlarged - expanded - great - large - - - - - - - - decreased size - - - A size quality which is relatively low. - hypoplasia - reduced - small - tiny - underdeveloped - - - - - - - - increased thickness - - - A thickness which is relatively high. - high thickness - stout - thick - thickened - - - - - - - - decreased thickness - - - A thickness which is relatively low. - low thickness - slender - thin - - - - - - - - increased volume - - - A volume which is relatively high. - high volume - large volume - - - - - - - - decreased volume - - - A volume which is relatively low. - low volume - small volume - - - - - - - - closed - - - A morphological quality inhering in a bearer by virtue of the bearer's affording blocked passage or view. - blocked - - - - - - - - closure incomplete - - A morphological quality inhering in a bearer by virtue of the bearer's affording not completed blocked passage or view. - - - - - - - - open - - A morphological quality inhering in a bearer by virtue of the bearer's affording unobstructed passage or view. - - - - - - - - crowded - - A positional quality inhering in a bearer by virtue of the bearer's being overfilled. - - - - - - - - erect - - A positional quality inhering in a bearer by virtue of the bearer's being upright in position or posture. - upright - - - - - - - - continuous - - A quality of a single process inhering in a bearer by virtue of the bearer's being uninterrupted in time, sequence, substance, or extent. - uninterrupted - - - - - - - - discontinuous - - A quality of a single process inhering in a bearer by virtue of the bearer's being marked by breaks or interruptions. - intermittent - interrupted - - - - - - - - decreased rate - - - A rate which is relatively low. - slow rate - - - - - - - - increased rate - - - A rate which is relatively high. - fast rate - high rate - - - - - - - - thickness - - A 1-D extent quality which is equal to the dimension through an object as opposed to its length or width. - - - - - - - - volume - - A 3-D extent quality inhering in a bearer by virtue of the bearer's amount of 3-dimensional space it occupies. - - - - - - - - oblong - - A shape quality inhering in a bearer by virtue of the bearer's having a somewhat elongated form with approximately parallel sides. - - - - - - - - elliptic - - A spheroid quality inhering in a bearer by virtue of the bearer's being oval with two axes of symmetry, as produced by a conical section. - ellipse-shaped - ellipsoid - elliptical - oval - ovoid - - - - - - - - opacity - - An optical quality which obtains by virtue of the ability of the bearer to absorb visible light. - - - - - - - - opaque - - A optical quality inhering in a bearer by virtue of the bearer's not being clear; not transmitting or reflecting light or radiant energy. - clouding - cloudy - non-transparent - - - - - - - - transparent - - A optical quality inhering in a bearer by virtue of the bearer's lacking opacity. - clear - - - - - - - - undulate - - A shape quality inhering in a bearer by virtue of the bearer's having a sinuate margin and rippled surface. - rippled - sinuate - undulated - undulating - waved - wavy - - - - - - - - permeability - - A structural quality inhering in a bearer by virtue of the bearer's disposition to being permeated or pervaded by a gas or liquid (as by osmosis or diffusion). - - - - - - - - porosity - - A permeability quality inhering in a bearer by virtue of the bearer's disposition to admit the passage of gas or liquid through pores or interstices. - - - - - - - - permeable - - - A permeability quality inhering in a bearer by virtue of the bearer's being capable to be permeated or pervaded by a gas or liquid (as by osmosis or diffusion). - porous - - - - - - - - impermeable - - A permeability quality inhering in a bearer by virtue of the bearer's being incapable of being permeated or pervaded by a gas or liquid (as by osmosis or diffusion). - - - - - - - - porous - - - A porosity quality inhering in a bearer by virtue of the bearer's being capable of admitting the passage of gas or liquid through pores or interstices. - - - - - - - - non-porous - - A porosity quality inhering in a bearer by virtue of the bearer's being incapable of admitting the passage of gas or liquid through pores or interstices. - - - - - - - - viscosity - - A physical quality of a liquid inhering in a bearer by virtue of the bearer's disposition to internal resistance to flow. - - - - - - - - viscous - - A viscosity quality inhering in a bearer by virtue of the bearer's having viscosity. - - - - - - - - physical quality - - A quality of a physical entity that exists through action of continuants at the physical level of organisation in relation to other entities. - relational physical quality - - - - - - - - mass density - - A physical quality which inheres in a bearer by virtue of some influence is exerted by the bearer's mass per unit size. - density - - - - - - - - pressure - - A physical quality that inheres in a bearer by virtue of the bearer's amount of force per unit area it exerts. - - - - - - - - efficiency - - A physical quality inhering in a bearer by virtue of ratio of the bearer's output to the bearer's input. - - - - - - - - elasticity - - A physical quality inhering in a bearer by virtue of the bearer's disposition to recover its size and shape after deformation in any way. - - - - - - - - elongated - - A quality inhering in a bearer by virtue of the bearer's length being notably higher than its width. - - - - - - - - concentrated - - A concentration quality inhering in a bearer by virtue of the bearer's exhibiting concentration. - - - - - - - - diluted - - A concentration which relatively low. - - - - - - - - increased concentration - - - A concentration which is higher relative to the normal or average. - high concentration - - - - - - - - decreased concentration - - - A concentration which is lower relative to the normal or average. - low concentration - - - - - - - - dense - - A physical quality which inheres in a bearer by virtue of the bearer's exhibiting density. - - - - - - - - elastic - - - An elasticity quality inhering in a bearer by virtue of the bearer's ability to recover its size and shape after deformation in any way. - - - - - - - - inelastic - - An elasticity quality inhering in a bearer by virtue of the bearer's inability to recover its size and shape after deformation in any way. - - - - - - - - linear - - A shape quality inhering in a bearer by virtue of the bearer's being narrow, with the two opposite margins parallel. - - - - - - - - Y-shaped - - A concave 3-D shape quality inhering in a bearer by virtue of the bearer's being shaped in the form of the letter Y. - - - - - - - - odorless - - An odor quality inhering in a bearer by virtue of the bearer's lacking odour. - - - - - - - - variant - - A variability quality inhering in a bearer by virtue of whether the bearer exhibits variation or change. - variable - - - - - - - - strength - - A quality inhering in a bearer by virtue of the bearer's power or force. - - - - - - - - process quality - - A quality which inheres in an process. - quality of a process - quality of occurrent - quality of process - relational quality of occurrent - - - - - - - - physical object quality - - A quality which inheres in a continuant. - monadic quality of a continuant - monadic quality of an object - monadic quality of continuant - multiply inhering quality of a physical entity - quality of a continuant - quality of a single physical entity - quality of an object - quality of continuant - - - - - - - - electromagnetic (EM) radiation quality - - A physical quality that inheres in an bearer by virtue of how that bearer interacts with electromagnetic radiation. - - - - - - - - optical quality - - An EM radiation quality in which the EM radiation is within the fiat range of the spectrum visible deemed to be light. - - - - - - - - variability - - A quality inhering in a bearer by virtue of the bearer's disposition to varying or changing. - variability of a physical quality - - - - - - - - increased temperature - - - A temperature which is relatively high. - high temperature - hot - - - - - - - - decreased temperature - - - A temperature which is relatively low. - cold - low temperature - - - - - - - - area - - A 2-D extent quality inhering in a bearer by virtue of the bearer's two dimensional extent. - - - - - - - - amorphous - - A morphology quality inhering in a bearer by virtue of the bearer's lack of distinct morphology. - - - - - - - - area density - - A density quality which inheres in a bearer by virtue of some influence exerted by the bearer's mass on a given area. - - - - - - - - volumetric density - - A density quality which inheres in a bearer by virtue of some influence exerted by the bearer's mass on a given volume. - - - - - - - - translucent - - A optical quality inhering in a bearer by virtue of the bearer's exhibiting low opacity. - - - - - - - - structured - - A structural quality inhering in a bearer by virtue of the bearer's having distinct structure. - - - - - - - - unstructured - - A structural quality inhering in a bearer by virtue of the bearer's lacking distinct structure. - - - - - - - - dead - - A viability quality inhering in a bearer by virtue of the cessation of the bearer's life. - - - - - - - - medium acidity - - A concentration quality inhering in a medium by virtue of the bearer's tendency to hydronate a specific reference base. - - - - - - - - acidic - - An medium acidity quality inhering in a solution by virtue of the bearer's a high concentration of H+ ions. - - - - - - - - alkaline - - An medium acidity quality inhering in a solution by virtue of the bearer's a low concentration of H+ ions. - - - - - - - - decayed - - A quality inhering in a bearer by virtue of the bearer's decomposition into component parts. - - - - - - - - wholeness - - A structural quality inhering in a bearer by virtue of whether the bearer includes all its components. - - - - - - - - broken - - A broken quality inhering in a bearer by virtue of the bearer's being broken open. - burst - cracked - fractured - fragmented - hemorrhaged - ruptured - split - torn - - - - - - - - calcified - - A composition quality inhering in an bearer by virtue of the bearer's being encrusted or impregnated with calcium carbonate (CHEBI:3311). - calcareous - calcification - - - - - - - - sensitivity to oxygen - - A sensitivity quality inhering in a bearer by virtue of the bearer's dependence on oxygen. - - - - - - - - aerobic - - - A quality inhering in a bearer by virtue of the bearer's dependence on oxygen. - - - - - - - - anaerobic - - A quality inhering in a bearer by virtue of the bearer's independence on oxygen. - - - - - - - - decreased depth - - - A depth which is relatively low. - low depth - shallow - - - - - - - - increased position - - - A position which is relatively high. - high position - - - - - - - - decreased position - - - A positional which is relatively low. - low position - - - - - - - - sloped - - A shape quality inhering in a bearer by virtue of the bearer's having an oblique or slanted direction. - - - - - - - - condensed - - A structural quality inhering in a bearer by virtue of the bearer's being thicker or more closely packed together; pressed tightly together. - compact - compressed - dense - squashed - - - - - - - - functionality - - A quality of a single physical entity that arises by virtue of whether the bearer exhibits the ability to perform a regular function(s). - - - - - - - - functional - - A functionality quality held by the bearer when the latter is able to perform a regular function(s). - - - - - - - - solubility - - A molecular quality that inheres in a molecular entity by virtue of the bearer's disposition to dissolve in a liquid. - - - - - - - - flexibility - - A physical quality inhering in a bearer by virtue of the bearer's disposition to being turned, bowed, or twisted without breaking. - - - - - - - - flexible - - A physical quality inhering in a bearer by virtue of the bearer's ability of being turned, bowed, or twisted without breaking. - bendy - - - - - - - - inflexible - - A physical quality inhering in a bearer by virtue of the bearer's inability of being turned, bowed, or twisted without breaking. - stiff - stiffness - - - - - - - - quality of a solid - - A physical quality inhering in a bearer by virtue of the bearer's exhibiting the physical characteristics of an entity characterized by particles arranged such that their shape and volume are relatively stable. - solidity - - - - - - - - quality of a gas - - A physical quality inhering in a bearer by virtue of the bearer's exhibiting the physical characteristics of an entity consisting of particles that have neither a defined volume nor defined shape. - gaseous - - - - - - - - quality of a liquid - - A physical quality inhering in an entity exhibiting the physical characteristics of an amorphous (non-crystalline) form of matter between a gas and a solid that has a definite volume, but no definite shape. - liquidity - - - - - - - - having extra function - - - A functionality quality which is held by the bearer when the latter is able to perform additional or different function(s). - having supernumerary functions - - - - - - - - decreased mass - - - A mass which is lower than normal or average. - low mass - small mass - - - - - - - - increased mass - - - A mass which is higher than normal or average. - high mass - large mass - - - - - - - - distributed - - - A spatial pattern inhering in a bearer by virtue of the bearer's being spread out or scattered about or divided up. - diffuse - scattered - - - - - - - - flow rate - - A physical quality inhering in a bearer by virtue of the bearer's motion characteristic. - - - - - - - - increased pressure - - - A pressure which is relatively high. - high pressure - - - - - - - - decreased variability - - - - A variability which is relatively low. - low variability - - - - - - - - increased variability - - - - A variability which is relatively high. - high variability - - - - - - - - conductivity - - A physical quality inhering in a bearer by virtue of the bearer's disposition to transmit of an entity through a medium. - - - - - - - - curvature - - A surface shape quality inhering in a bearer by virtue of the bearer's exhibiting a degree of bending. - - - - - - - - arched - - A concave quality inhering in a bearer by virtue of the bearer's forming or resembling an arch. - - - - - - - - depth - - A 1-D extent quality inhering in a bearer by virtue of the bearer's downward or backward or inward dimenision. - - - - - - - - protruding - - A quality inhering in a bearer by virtue of the bearer's extending out above or beyond a surface or boundary. - protruding - relational protruding quality - - - - - - - - deformed - - A morphological quality inhering in a bearer by virtue of the bearer's being distorted in form. - disfigured - distorted - - - - - - - - decreased functionality - - - A functionality quality held by the bearer when the latter exhibits decreased ability to perform a regular function(s). - dysfunction - dysfunctional - having decreased function - impaired - lacks function of type - low functionality - partial functionality - - - - - - - - increased functionality - - - A functional quality held by the bearer when the latter exhibits increased ability to perform a regular function(s). - high functionality - - - - - - - - aggregated - - A spatial pattern inhering in a bearer by virtue of the bearer's being gathered or tending to gather into a mass or whole. - clumped - clustered - - - - - - - - protruding into - - A quality inhering into a bearer by virtue of the bearer's extending out above or beyond its surface or boundary into the surface or boundary of another entity. - - - - - - - - protruding out of - - A quality inhering into a bearer by virtue of the bearer's extending out above or beyond its surface or boundary and outwards in relation to the physical space occupied by another entity. - exits through - exposed - extruding from - - - - - - - - circumference - - An 1-D extent quality which is equal to the length of the closed curve of a circle. - - - - - - - - osmolarity - - A concentration quality inhering in a bearer by virtue of the bearer's amount of osmoles of solute per liter of solution. - - - - - - - - increased osmolarity - - - A osmolarity which is relatively high. - high osmolarity - - - - - - - - increased distribution - - - A distribution which is relatively high. - high distribution - - - - - - - - decreased distribution - - - A distribution which is relatively low. - low distribution - - - - - - - - decreased efficiency - - - An efficiency which is relatively low. - low efficiency - - - - - - - - increased efficiency - - - An efficiency which is relatively high. - high efficiency - - - - - - - - efficient - - An efficiency quality inhering in a bearer by virtue of the bearer's having efficiency. - - - - - - - - magnetism - - A physical quality inhering in a bearer by virtue of the bearer's disposition to exert an attractive or repulsive force on other entities. - - - - - - - - magnetic - - A magnetic quality inhering in a bearer by virtue of the bearer's ability to exert magnitism. - - - - - - - - elevation - - A positional quality inhering in a bearer by virtue of the bearer's vertical distance of a point above or below a reference surface. - - - - - - - - increased elevation - - - An elevation which is relatively high. - elevated - high elevation - - - - - - - - decreased elevation - - - An elevation which is relatively low. - low elevation - - - - - - - - 1-D extent - - 1-D size - A size quality inhering in an bearer by virtue of the bearer's extension in one dimension. - - - - - - - - 2-D extent - - 2-D size - A size quality inhering in an bearer by virtue of the bearer's extension in two dimensions. - - - - - - - - 3-D extent - - 3D size - A size quality inhering in an bearer by virtue of the bearer's extension in three dimensions. - - - - - - - - perimeter - - An 1-D extent quality inhering in two-dimensional bearer by virtue of being equal to the distance around it. - - - - - - - - increased perimeter - - - A perimeter which is relatively high. - - - - - - - - decreased perimeter - - - A perimeter which is relatively low. - - - - - - - - shedability - - An organismal quality inhering in a bearer by virtue of the bearer's disposition to lose an entitity by natural process. - - - - - - - - deciduous (generic) - - A quality inhering in a bearer by virtue of the bearer's disposition to shed body parts. - - - - - - - - deciduous (plant) - - A quality inhering in a plant by virtue of the bearer's disposition to shed foliage. - - - - - - - - non-deciduous (any body part) - - A quality inhering in a plant by virtue of the bearer's disposition to not shed any body part. - - - - - - - - evergreen (plant) - - A quality inhering in a plant by virtue of the bearer's disposition to retain foliage. - - - - - - - - semi-deciduous(plant) - - A quality inhering in a plant by virtue of the bearer's disposition to being between evergeen and deciduous. - - - - - - - - radiation quality - - - - - - - - - - - - - - - - - - A quality that inheres in an bearer by virtue of how that bearer interacts with radiation. - - - - - - - - activity (of a radionuclide) - - A radiation quality inhering in a radioactive substance by virtue of its transformation (disintegration) rate. - radioactivity - - - - - - - - radioactive - - A radiation quality inhering in bearer by virtue of the bearer's exhibiting or being caused by radioactivity. - - - - - - - - heat conductivity - - A conductivity quality inhering in a bearer by virtue of the bearer's disposition to spontaneous transfer of thermal energy from a region of higher temperature to a region of lower temperature. - thermal conduction - - - - - - - - electrical conductivity - - A conductivity quality inhering in a bearer by virtue of the bearer's ability to convey electricity. - - - - - - - - granular - - A composition quality inhering in a bearer by virtue of the bearer's containing granules. - - - - - - - - decreased strength - - - A strength which is relatively low. - weak - - - - - - - - irregular thickness - - A thickness quality which lacks pattern. - - - - - - - - increased mass density - - - A density which is higher relative to the normal or average. - high density - - - - - - - - domed - - A curvature quality inhering in a bearer by virtue of the bearer's having a shape resembling a dome. - - - - - - - - decreased mass density - - - A density which is lower relative to the normal or average. - low density - - - - - - - - ruffled - - A shape quality inhering in a bearer by virtue of the bearer's exhibiting disturbance of its smoothness or regularity. - - - - - - - - wetness - - A quality inhering in a bearer by virtue of whether the bearer's being covered by a liquid. - - - - - - - - wet - - - A wetness quality inhering in a bearer by virtue of the bearer's being covered by a liquid. - - - - - - - - dry - - A wetness quality inhering in a bearer by virtue of the bearer's not being covered by a liquid. - - - - - - - - increased wetness - - - A wetness quality that is relatively high. - - - - - - - - decreased wetness - - - A wetness quality that is relatively low. - low wetness - - - - - - - - decreased fluid flow - - - A flow that is relatively low. - low flow - - - - - - - - increased fluid flow - - - A fluid flow that is relatively high. - high flow - - - - - - - - acidity - - A concentration quality inhering in a bearer by virtue of the bearer's containing acid (hydrogen ions). - pH - - - - - - - - increased acidity - - - An acidity which is relatively high. - high acidity - - - - - - - - vertical - - A spatial pattern inhering in a bearer by virtue of the bearer's being situated at right angles to the horizon. - - - - - - - - horizontal - - A positional quality inhering in a bearer by virtue of the bearer's being in the plane of the horizon. - - - - - - - - concave - - A shape quality in a bearer by virtue of the bearer's curving inward. - - - - - - - - cylindrical - - A convex 3-D shape quality inhering in a bearer by virtue of the bearer's exhibiting a consistently-sized round cross section. - rod-like - rod-shaped - tubulate - - - - - - - - U-shaped - - A concave 3-D shape quality inhering in a bearer by virtue of the bearer's being shaped in the form of the letter U. - horseshoe - horseshoe shaped - - - - - - - - hydrophobicity - - - A physical quality inhering in a bearer by virtue the bearer's disposition to being water-repellent; tending to repel and not absorb water. - - - - - - - - hydrophobic - - A quality inhering in a bearer by virtue of the bearer's lacking affinity for water; tending to repel and not absorb water; tending not to dissolve in or mix with or be wetted by water. - - - - - - - - hydrophilicity - - A physical quality inhering in a bearer by virtue the bearer's disposition to having an affinity for water; it is readily absorbing or dissolving in water. - - - - - - - - hydrophilic - - A quality inhering in a bearer by virtue of the bearer's disposition to having a strong affinity for water; tending to dissolve in, mix with, or be wetted by water. - - - - - - - - tripartite - - - A concave 3-D shape quality inhering in a bearer by virtue of the bearer's being divided into three branches. - trifurcate - - - - - - - - decreased circumference - - - A circumference which is relatively low. - - - - - - - - movement quality - - A physical quality inhering in a bearer by virtue of the bearer's participation in movement. - - - - - - - - variability of size - - A variability quality inhering in a bearer by virtue of whether the bearer exhibits size variation or change. - - - - - - - - decreased variability of size - - - - A variability of size which is relatively low. - low variability of size - - - - - - - - increased variability of size - - - - A variability of size which is relatively high. - high variability of size - - - - - - - - angular - - A shape quality inhering in a bearer by virtue of the bearer's having at least one salient angle on the margin. - angulate - - - - - - - - frozen - - A quality inhering in a bearer by virtue of the bearer's being kept below its freezing point. - - - - - - - - dissolved - - A quality inhering in a bearer by virtue of the bearer's passing into solution. - - - - - - - - organismal quality - - A quality that inheres in an entire organism or part of an organism. - - - - - - - - concavity - - Surface shape that refers to the inward or outward curvature of the surface. - - - - - - - - 2-D shape - - 2-D projection - A shape that inheres in a 2 dimensional entity, such as a cross section or projection of a 3 dimensional entity. - cross-sectional - - - - - - - - convex 3-D shape - - A complete three dimensional shape in which for every line connecting pair of points on the object is within the object. Or: a shape lacking cavities. Contrast: concave. - - - - - - - - concave 3-D shape - - A complete three dimensional shape in which there is a line connecting pair of points on the object that lies outside the object. Or: a shape with cavities. Contrast: concave. - - - - - - - - branchiness - - A shape quality inhering in a bearer by virtue of the degree to which there are subdivisions or offshoots in a bearer entity. - - - - - - - - structure, cavities - - A structural quality that inheres in a bearer by virtue of the bearer's containing hollow areas. - - - - - - - - conical - - A convex 3-D shape quality inhering in a bearer by virtue of the bearer's resembling a cone (a 3-D shape with a round cross section that tapers). - cone-shaped - - - - - - - - decreased area - - - An area which is relatively low. - - - - - - - - physical quality of a process - - - - - - - - - columnar - - A shape inhering in a bearer by virtue of the bearer's being elongated and cylindrical. - - - - - - - - fenestrated - - A shape quality inhering in a bearer by virtue of the bearer's delimited by a surface with holes. - - - - - - - - stratification - - A spatial pattern inhering in a bearer by virtue of the bearer's layered configuration. - - - - - - - - stratified - - A spatial pattern inhering in a bearer by virtue of the bearer's exhibiting a layered configuration. - - - - - - - - hollow - - A quality inhering in a bearer by virtue of the bearer's having an empty space or cavity within. - - - - - - - - broken into two pieces - - A broken quality inhering in a bearer by virtue of the bearer's being seperated into two contiguous wholes. - - - - - - - - laminar - - A quality inhering in a bearer by virtue of the bearer's processing the form of a thin plate sheet or layer. - - - - - - - - edibility - - A physical quality inhering in a bearer by virtue of the bearer's disposition to being fit to be eaten. - edibleness - - - - - - - - edible - - - A physical quality inhering in a bearer by virtue of the bearer being suitable for use as food. - - - - - - - - inedible - - A physical quality inhering in a bearer by virtue of the bearer not being suitable for use as food. - - - - - - - - irregular density - - A density quality which lacks pattern. - - - - - - - - sloped downward - - - - - - - - - straight - - A shape quality inhering in a bearer by virtue of the bearer's being free of curves, bends, or angles. - - - - - - - - molecular quality - - A quality which inheres in a molecular entity, a single molecule, atom, ion, radical etc. - relational molecular quality - - - - - - - - quality of a substance - - A quality inhering in a bearer by virtue of its constitution. - - - - - - - - slender - - A shape quality inhering in a bearer by virtue of the bearer's being small or narrow in circumference or width in proportion to length or height. - gracile - - - - - - - - fan-shaped - - A quality inhering in a bearer that is shaped in the form of a fan. - fan-like - - - - - - - - V-shaped - - An angular shape quality inhering in a bearer by virtue of the bearer's having a single angle in its length giving the bearer the form of the letter V. - - - - - - - - fluid flow rate - - A physical quality inhering in a fluid (liquid or gas) by virtue of the amount of fluid which passes through a given surface per unit time. - volume flow rate - volumetric flow rate - - - - - - - - platelike - - A quality inhering in a bearer by virtue of the bearer's being roundish, flattish shape, possibly with a slightly angled edge. - plate-like - - - - - - - - flattened - - A quality inhering in a bearer by virtue of the bearer's surface becoming more extended in a plane. - compressed - - - - - - - - semi erect - - A quality inhering in a bearer by virtue of the bearer's being partially upright in position or posture. - semi upright - - - - - - - - 3-D shape - - A shape that inheres in a 3 dimensional entity. - - - - - - - - accumulation - - A structural quality of the collection or massing of one physical object within another physical object. - pooled - - - - - - - - increased accumulation - - An increased number of physical objects that are accumulated within another physical object usually as a result of a failure to break down or remove objects in a timely manner. - accumulated - - - - - - - - decreased accumulation - - An accumulation which is relative low. - - - - - - - - transient - - A structural quality inhering in a bearer by virtue of the bearer's underlying structure being capable of change. - transient structure - - - - - - - - tubular - - - A cylindrical shape that is hollow. - tube like - tube-shaped - tubulate - - - - - - - - increased quality - - A quality that has a value that is increased compared to normal or average. - - - - - - - - decreased quality - - A quality that has a value that is decreased compared to normal or average. - - - - - - - - decreased process quality - - - A quality of a process that has a value that is decreased compared to normal or average. - - - - - - - - decreased object quality - - - A quality of an object that has a value that is decreased compared to normal or average. - - - - - - - - increased process quality - - - A quality of a process that has a value that is increased compared to normal or average. - - - - - - - - increased object quality - - - A quality of an object that has a value that is increased compared to normal or average. - - - - - - - - superelliptic - - A shape constituting a transition between a rectangle and a circle; a closed curve, of which the circle and ellipse are special cases, whose parametric equation is x = a.cos2/rt, y = b.cos2/rt - Lamé curve - - - - - - - - temporal distribution quality - - A temporal distribution pattern of process occurrences within a regulation/reference process. - - - - - - - - herbaceous - - A quality inhering in a bearer by virtue of the bearer's upper parts die back to the rootstock at the end of the growing season. - - - - - - - - broad - - A quality inhering in a bearer by virtue of the bearer's width being notably higher than its length. - - - - - - - - fluctuating - - Recurrent and often more or less cyclic alteration. - - - - - - - - sunken - - Flattened from above downward; below the normal level or the level of the surrounding parts. - - - - - - - - exposed - - Open to view or not covered by another entity. - - - - - - - - eroding - - A structural quality inhering in a bearer by virtue of the bearer bring gradually worn away. - - - - - - - - variability of count - - A variability quality inhering in the bearer by virtue of the bearer having a variable number or count of an entity. - variable number - - - - - - - - continuous with - - A positional quality inhering in a bearer by virtue of the bearer possessing an uninterrupted or unbroken connection or spatial distribution relative to the position of another entity. - - - - - - - - humidity - - A quality inhering in air by virtue of the partial pressure exerted by the bearer's water vapour content. - - - - - - - - increased humidity - - - An increase in humidity. - humid - - - - - - - - decreased humidity - - - An decrease in humidity. - - - - - - - - combustibility - - The propensity of a material to undergo combustion. Combustion encompasses smouldering and flaming combustion. Combustibility is usually applied to solids. - - - - - - - - increased combustibility - - - An increase in combustibility. - combustible - - - - - - - - collection of organisms - A material entity that consists of two or more organisms, viruses, or viroids. - PCO:0000000 - - - - - - - - population - - - - - - - - A collection of organisms, all of the same species, that live in the same place. - PCO:0000001 - - - - - - - - ecological community - - A collection of organisms of at least two different species, living in a particular area. - PCO:0000002 - envoPolar - - - - - - - - collection of organisms of the same species - - A material entity that has as parts two or more organisms, viruses, or viroids of the same species and no members of any other species. - PCO:0000018 - - - - - - - - whole plant - - A plant structure (PO:0005679) which is a whole organism. - bush (narrow) - clonal colony (related) - colony (related) - frutex (narrow) - frutices (narrow) - gametophyte (narrow) - genet (broad) - herb (narrow) - liana (narrow) - planta entera (Spanish, exact) - prothalli (narrow) - prothallium (narrow) - prothallus (narrow) - ramet (broad) - seedling (narrow) - shrub (narrow) - sporophyte (narrow) - suffrutex (narrow) - suffrutices (narrow) - tree (narrow) - vine (narrow) - woody clump (narrow) - 植物体全体 (Japanese, exact) - - - - - - - - plant cuticle - - A portion of plant substance (PO:0025161) composed of cutin (PO:0025385), a polyester matrix of hydroxy- and hydroxy epoxy fatty acids C16 and C18 chains, embedded and overlayed with cuticular wax (PO:0025386) and forming a layer on the surface of a plant epidermis (PO:0005679). - cut&#237cula (Spanish, exact) - cuticle (broad) - 植物クチクラ (Japanese, exact) - - - - - - - - phyllome - - A lateral plant organ (PO:0009008) produced by a shoot apical meristem (PO:0020148). - filoma (Spanish, exact) - フィロム、葉(的)器官 (Japanese, exact) - - - - - - - - root - - A plant axis (PO:0025004) that lacks shoot axis nodes (PO:0005004) and usually grows indeterminately. - aerial root (narrow) - climbing root (narrow) - ra&#237z (Spanish, exact) - radices (exact, plural) - radix (exact) - 根 (Japanese, exact) - - - - - - - - plant organ - - &#243rgano vegetal (Spanish, exact) - A multi-tissue plant structure (PO:0025496) that is a functional unit, is a proper part of a whole plant (PO:0000003), and includes portions of plant tissue (PO:0009007) of at least two different types that derive from a common developmental path. - compound plant organ (related) - organ (broad) - simple plant organ (related) - 植物 器官 (Japanese, exact) - - - - - - - - plant structure - - An anatomical structure that is or was part of a plant, or was derived from a part of a plant. - estructura vegetal (Spanish, exact) - 植物 構造 (Japanese, exact) - - - - - - - - plant axis - - An axial plant organ (PO:0009008). - eje de la planta (Spanish, exact) - plant axes (exact, plural) - 植物軸(軸柱) (Japanese, exact) - - - - - - - - collective plant organ structure - - A collective plant structure (PO:0025497) that is a proper part of a whole plant (PO:0000003), and is composed of two or more adjacent plant organs (PO:0009008) and the associated portions of plant tissue (PO:0009007). - estructura vegetal colectiva de &#243rgano (Spanish, exact) - 集合植物器官構造 (Japanese, exact) - - - - - - - - root system - - A collective plant organ structure (PO:0025007) that produces root meristems (PO:0006085), the plant structures (PO:0009011) that arise from them and the parts thereof. - root (broad) - sistema de ra&#237z (Spanish, exact) - 根系 (Japanese, exact) - - - - - - - - leaf - - A phyllome (PO:0006001) that is not associated with a reproductive structure. - hoja (Spanish, exact) - 葉 (Japanese, exact) - - - - - - - - plant anatomical entity - - An anatomical entity that is or was part of a plant. - entidad anat&#243mica vegetal (Spanish, exact) - 植物 解剖学(形態)的実体 (Japanese, exact) - - - - - - - - portion of plant substance - - A portion of organism substance that is or was part of a plant. - porci&#243n de sustancia vegetal (Spanish, exact) - 植物を構成する物質の一部 (Japanese, exact) - - - - - - - - cutin - - A portion of plant substance (PO:0025161) that is the inner layer of a plant cuticle (PO:0000022), and is composed of a polyester matrix of hydroxy- and hydroxy epoxy fatty acid C16 and C18 chains. - cutin matrix (broad) - クチン (Japanese, exact) - - - - - - - - cuticular wax - - A portion of plant substance (PO:0025161) comprised predominantly of very long chain aliphatic lipids and is part of a plant cuticle (PO:0000022). - cera cuticular (Spanish, exact) - クチクラワックス (Japanese, exact) - - - - - - - - plant cuticle proper - - A portion of plant substance (PO:0025161) that is the inner layer of a plant cuticle (PO:0000022), composed primarily of cutin (PO:0025385), embedded and overlayed with cuticular wax (PO:0025386). - cut&#237cula propia de la planta (Spanish, exact) - cuticle proper (broad) - cutin matrix (broad) - 植物クチクラproper (Japanese, exact) - - - - - - - - multi-tissue plant structure - - A plant structure (PO:0009011) that has as parts two or more portions of plant tissue (PO:0009007) of at least two different types and which through specific morphogenetic processes forms a single structural unit demarcated by primarily bona-fide boundaries from other structural units of different types. - estructura vegetal con m&#250ltiples tejidos (Spanish, exact) - 複数の組織からなる植物構造 (Japanese, exact) - - - - - - - - collective plant structure - - A plant structure (PO:0009011) that is a proper part of a whole plant (PO:0000003) and includes two or more adjacent plant organs (PO:0009008) or adjacent cardinal organ parts (PO:0025001), along with any associated portions of plant tissue (PO:0009007). - estructura vegetal colectiva (Spanish, exact) - 集合的植物構造 (Japanese, exact) - - - - - - - - plant sap - - A portion of plant substance (PO:0025161) that is an aqueous solution that can be transported through the apoplast (GO:0048046) or symplast (GO:0055044). - savia de la planta (Spanish, exact) - 植物液 (Japanese, exact) - - - - - - - - plant resin - - A portion of plant substance (PO:0025161) that consists of a complex mixture of organic aromatic compounds such as mono-, sesqui-, and diterpenoids. - oleoresin (related) - pitch (exact) - - - - - - - - system - - May be replaced by a BFO class, as discussed in http://www.jbiomedsem.com/content/4/1/43 - Chris Mungall - A material entity consisting of multiple components that are causally integrated. - http://www.jbiomedsem.com/content/4/1/43 - - - - - - - - uterine cervix - - - Lower, narrow portion of the uterus where it joins with the top end of the vagina. - canalis cervicis uteri - caudal segment of uterus - cervical canal - cervical canal of uterus - cervix - cervix of uterus - cervix uteri - neck of uterus - uterine cervix - - - - - - - - naris - - Orifice of the olfactory system. The naris is the route by which odorants enter the olfactory system[MAH]. - - - - - - - - nose - - - - The olfactory organ of vertebrates, consisting of nares, olfactory epithelia and the structures and skeletal framework of the nasal cavity. - nasal sac - nasus - nose - olfactory apparatus - peripheral olfactory organ - proboscis - - - - - - - - islet of Langerhans - - - island of Langerhans - island of pancreas - islets of Langerhans - pancreatic insula - pancreatic islet - the clusters of hormone-producing cells that are scattered throughout the pancreas - - - - - - - - pituitary gland - - - Hp - The pituitary gland is an endocrine gland that secretes hormones that regulate many other glands [GO]. An endocrine gland located ventral to the diencephalon and derived from mixed neuroectodermal and non neuroectodermal origin [ZFIN]. - glandula pituitaria - hypophysis - hypophysis cerebri - pituitary - pituitary body - - - - - - - - submucosa - - A layer of dense irregular connective tissue that lines organs and supports the mucosa, as well as joins the mucosa to the bulk of underlying smooth muscle. [WP,unvetted]. - organ submucosa - region of submucosa - submucosa of organ - submucosa of region of organ - submucous layer - tela submucosa - tunica submucosa - - - - - - - - peripheral nervous system - - A major division of the nervous system that contains nerves which connect the central nervous system (CNS) with sensory organs, other organs, muscles, blood vessels and glands. - PNS - pars peripherica - systema nervosum periphericum - - - - - - - - somatic nervous system - - PNS - somatic - Part of peripheral nervous system that includes the somatic parts of the cranial and spinal nerves and their ganglia and the peripheral sensory receptors. - somatic nervous system, somatic division - somatic peripheral nervous system - - - - - - - - sympathetic nervous system - - The sympathetic nervous system is one of the two divisions of the vertebrate autonomic nervous system (the other being the parasympathetic nervous system). The sympathetic preganglionic neurons have their cell bodies in the thoracic and lumbar regions of the spinal cord and connect to the paravertebral chain of sympathetic ganglia. Innervate heart and blood vessels, sweat glands, viscera and the adrenal medulla. Most sympathetic neurons, but not all, use noradrenaline as a post-ganglionic neurotransmitter [GO]. - pars sympathica divisionis autonomici systematis nervosi - pars sympathica divisionis autonomici systematis nervosi - sympathetic nervous system - sympathetic part of autonomic division of nervous system - - - - - - - - zone of skin - - - Any portion of the organ that covers that body and consists of a layer of epidermis and a layer of dermis. - portion of skin - region of skin - skin - skin region - skin zone - - - - - - - - endocrine pancreas - - - The part of the pancreas that is part of the endocrine system and is made up of islet cells, which produce insulin, glucagon and somatostatin. - endocrine pancreas - endocrine part of pancreas - islets of Langerhans part of pancreas - pars endocrina pancreatis - - - - - - - - exocrine pancreas - - - - The part of the pancreas that is part of the exocrine system and which produces and store zymogens of digestive enzymes, such as chymotrypsinogen and trypsinogen in the acinar cells [GO]. - exocrine component of pancreas - exocrine pancreas - exocrine part of pancreas - pars exocrina pancreatis - - - - - - - - compound eye - - A light sensing organ composed of ommatidia - Facettenauge - Komplexauge - adult compound eye - faceted eye - insect eye - zusammengesetztes Auge - - - - - - - - camera-type eye - - - - - An organ of sight that includes the camera-type eyeball and supporting structures such as the lacrimal apparatus, the conjunctiva, the eyelid. - camera-type eye plus associated structures - eye - eyes - orbital part of face - orbital region - regio orbitalis - vertebrate eye - - - - - - - - sense organ - - An organ that is capable of transducing sensory stimulus to the nervous system. - Sinnesorgan - organ of sense organ system - organ of sensory organ system - organ of sensory system - sense organ system organ - sensillum - sensor - sensory organ - sensory organ system organ - sensory system organ - - - - - - - - cutaneous appendage - - Anatomical projection that protrudes from the skin. Examples: hair, nail, feather, claw, hoof, horn, wattle, spur, beak, antler, bristle and some scales. - epidermal appendage - epidermal growth - skin appendage - - - - - - - - feather - - - one of the epidermal growths that form the distinctive outer covering, or plumage, on birds. Feathers are formed in tiny follicles in the epidermis, or outer skin layer, that produce keratin proteins. - - - - - - - - tube - - Any hollow cylindrical anatomical structure containing a lumen through which substances are transported. - anatomical tube - duct - - - - - - - - appendage - - Major subdivision of an organism that protrudes from the body[DOS, CARO]. - appendages - extremitaet - extremity - limbs/digits/tail - - - - - - - - lymph node - - Any of the rounded masses of lymphoid tissue that are surrounded by a capsule of connective tissue, are distributed along the lymphatic vessels, and contain numerous lymphocytes which filter the flow of lymph. - lymph gland - nodus lymphaticus - - - - - - - - lamina propria - - A thin layer of loose connective tissue which lies beneath the epithelium and together with the epithelium constitutes the mucosa[WP]. The lamina propria contains capillaries and a central lacteal (lymph vessel) in the small intestine, as well as lymphoid tissue. Lamina propria also contains glands with the ducts opening on to the mucosal epithelium, that secrete mucus and serous secretions. - lamina propria mucosa - lamina propria mucosae - tunica propria - - - - - - - - lamina propria of trachea - - A lamina propria that is part of a respiratory airway. - lamina propria mucosa of trachea - lamina propria mucosa of windpipe - lamina propria mucosae of trachea - lamina propria mucosae of windpipe - lamina propria of windpipe - trachea lamina propria - trachea lamina propria mucosa - trachea lamina propria mucosae - tracheal lamina propria - windpipe lamina propria - windpipe lamina propria mucosa - windpipe lamina propria mucosae - - - - - - - - head - - The head is the anterior-most division of the body [GO]. - adult head - cephalic area - head (volume) - - - - - - - - follicular fluid - - The fluid surrounding the ovum and granulosa cells in the ovarian follicle. - antral fluid, ovarian follicle - liquor follicularis - liquor folliculi - liquor folliculi - ovarian follicular fluid - ovary follicle fluid - ovary follicular fluid - - - - - - - - serous membrane - - - multi-tissue structure that is comprised of a secretory epithelial layer (mesothelium) and a connective tissue layer. - serosa - tunica serosa - wall of serous sac - - - - - - - - tendon - - Dense regular connective tissue that connects muscle to bone[VSAO]. - sinew - tendo - - - - - - - - dorsal root ganglion - - - * Sensory ganglia located on the dorsal spinal roots within the vertebral column. The spinal ganglion cells are pseudounipolar. The single primary branch bifurcates sending a peripheral process to carry sensory information from the periphery and a central branch which relays that information to the spinal cord or brain. (MSH) * ganglion found on the posterior root of each spinal nerve, composed of the unipolar nerve cell bodies of the sensory neurons of the nerve. (CSP) - DRG - dorsal root ganglia - dorsal root ganglion - ganglion of dorsal root - ganglion sensorium nervi spinalis - ganglion spinale - ganglion spinalis - posterior root ganglion - spinal ganglion - spinal ganglion part of peripheral nervous system - - - - - - - - ganglion - - - A biological tissue mass, most commonly a mass of nerve cell bodies. - ganglia - neural ganglion - - - - - - - - simple eye - - An eye with one concave chamber. Note that 'simple' does not imply a reduced level of complexity or acuity. - - - - - - - - macula - - - - Thickened areas of the saccule or utricle where the termination of the vestibular nerve occurs[MESH,modified]. - acoustic macula - acoustic maculae - macula - maculae - sensory macula - sensory patch - - - - - - - - vessel - - A tubular structure that contains, conveys body fluid, such as blood or lymph. - - - - - - - - ureter - - - - - Muscular duct that propels urine from the kidneys to the urinary bladder, or related organs. - metanephric duct - - - - - - - - urethra - - - the fibromuscular tubular canal through which urine is discharged from the bladder to the exterior via the external urinary meatus; in males, the urethra is joined by the ejaculatory ducts and serves as a passageway for semen during ejaculation, as well as a canal for urine during voiding; in females, the urethra is shorter and emerges above the vaginal opening - - - - - - - - duct - - A tubular structure that transports secreted or excreted substances. - anatomical duct - ducts - exocrine duct - exocrine gland duct - - - - - - - - large intestine - - - A subdivision of the digestive tract that connects the small intestine to the cloaca or anus. Lacks or has few villi[Kardong]. - intestinum crassum - - - - - - - - anatomical wall - - Organ component adjacent to an organ cavity and which consists of a maximal aggregate of organ component layers. - organ wall - wall - wall of organ - - - - - - - - anatomical structure - - Material anatomical entity that is a single connected structure with inherent 3D shape generated by coordinated expression of the organism's own genome. - biological structure - connected biological structure - - - - - - - - organ - - - Anatomical structure that performs a specific function or group of functions [WP]. - anatomical unit - body organ - element - - - - - - - - organ subunit - - A part of an organ that constitutes a distinct modular sub-unit. In some cases, the organ may also contain other sub-units of identical or similar types, in other cases this may be a distinct entity. - organ region with fixed fiat boundary - organ segment - segment of organ - - - - - - - - organ part - - A multicellular structure that is a part of an organ. - cardinal organ part - regional part of organ - - - - - - - - respiratory tract - - - Anatomical structure that is part of the respiratory system. In mammals consists of upper and lower tracts - - - - - - - - proximo-distal subdivision of respiratory tract - - - An section of a respiratory tract. - respiratory tract - subdivision of respiratory tract - - - - - - - - regional part of nervous system - - Any part or collection of parts of the central or peripheral nervous system. Parts may span both CNS and PNS. - part of nervous system - - - - - - - - renal glomerulus - - - A capillary tuft which forms a close network with the visceral epithelium (podocytes) and the mesangium to form the filtration barrier and is surrounded by Bowman's capsule in nephrons of the vertebrate kidney[GO]. - Malphigian glomerulus - Malpighian glomerulus - Malpighian tuft - glomerular capillary tuft - glomerular tuft - glomerulus - glomerulus renis - renal corpuscle - renal glomeruli - - - - - - - - subdivision of skeletal system - - Anatomical cluster consisting of the skeletal elements and articular elements that are part of an individual subdivision of the organism. - skeletal system part - skeletal system subdivision - - - - - - - - external ectoderm - - - The surface (external) layer of ectoderm which begins to proliferate shortly after separation from the neuroectoderm. - surface (external) ectoderm - surface ectoderm - - - - - - - - mixed endoderm/mesoderm-derived structure - - - An anatomical structure that develops from the endoderm and the mesoderm. - - - - - - - - mixed ectoderm/mesoderm/endoderm-derived structure - - - An anatomical structure that develops from the ectoderm, mesoderm and endoderm. - - - - - - - - male reproductive system - - - The organs associated with producing offspring in the gender that produces spermatozoa. - genitalia of male organism - male genital organ - male genital system - male genital tract - male genitalia - male genitals - male organism genitalia - male organism reproductive system - male reproductive tract - reproductive system of male organism - systema genitale masculinum - - - - - - - - mesonephros - - - The second stage of the kidney. It serves as the main excretory organ of aquatic vertebrates and as a temporary embryonic kidney in higher vertebrates. It is composed of the mesonephric duct (also called the Wolffian duct), mesonephric tubules, and associated capillary tufts. A single tubule and its associated capillary tuft is called a mesonephric excretory unit; these units are similar in structure and function to nephrons of the adult kidney. The mesonephros is derived from intermediate mesoderm in the vertebrate embryo. - Wolffian body - amphibian adult kidney - corpus Wolffi - mesonephric kidney - mesonephroi - middle kidney - opisthonephros - opisto nephros - opistonephros - - - - - - - - metanephros - - - In mammals, the metanephros is the excretory organ of the fetus, which develops into the mature kidney and is formed from the rear portion of the nephrogenic cord. The metanephros is an endocrine and metabolic organ that filters the blood and excretes the end products of body metabolism in the form of urine[GO] - definite kidney - definitive kidney - hind kidney - metanephric kidney - metanephron - - - - - - - - mesonephric tubule - - - - A mesonephric tubule is an epithelial tube that is part of the mesonephros[GO]. Genital ridge that is next to the mesonephros[WP]. - renal tubules - tubuli mesonephrici - - - - - - - - ureteric bud - - - - An epithelial swelling on the Wolffian duct that elongates to invade the adjacent metanephric mesenchyme[MP] - diverticulum - diverticulum metanephricum - gemma ureterica - metanephric bud - metanephric diverticulum - ureteric ampulla - ureteric diverticulum - - - - - - - - morula - - A spherical embryonic mass of blastomeres formed before the blastula and resulting from cleavage of the fertilized ovum. - morula (2-16 cells) - - - - - - - - inner cell mass - - A mass of cells that develop into the body of the embryo and some extraembryonic tissues - ICM - early embryoblast - embryoblast - embryoblastus; massa cellularis interna; pluriblastus senior - pluriblast - - - - - - - - trophoblast - - massa cellularis externa - the mesectodermal cell layer arising from the trophectoderm that erodes the uterine mucosa and contributes to the formation of the placenta - trophoblast layer - trophoblastus - trophoderm - - - - - - - - bilaminar disc - - A flattened, almost circular bilaminar plate of cells formed when the inner cell mass (aka embryoblast) forms two epithelial layers, each of a distinct lineage, separated by an extracellular basement membrane: the external (dorsal) layer is called the epiblast and the internal (ventral) layer is called the hypoblast (aka primitive endoderm); together, they compose the bilaminar embryonic disc. - bilaminar disk - bilaminary embryonic disc - bilaminary germ disc - embryonic disc - embryonic shield - germinal disc - germinal disk - - - - - - - - membrane organ - - Nonparenchymatous organ that primarily consists of dense connective tissue organized into a sheet which interconnects two or more organs, separates two or more body spaces from one another, or surrounds an organ or body part. Examples: interosseous membrane of forearm, obturator membrane, tympanic membrane, fibrous pericardium, fascia lata, dura mater. [FMA] - membrane - membrane of organ - - - - - - - - cardiac neural crest - - - cardiac neural crest complex - complexus cristae neuralis cardiacus - portion of neural crest that develops from the dorsal neural tube. It overlaps the vagal neural crest and migrates to populate the pharyngeal arches 3, 4 and 6 (producing structures in the head) and to the heart, forming connective tissue that separates the great vessels of the heart. [Wikipedia] - - - - - - - - lung vasculature - - - The lung vasculature is composed of the tubule structures that carry blood or lymph in the lungs[GO]. - lung vascular network - pulmonary vasculature - vascular network of lung - vasculature of lung - - - - - - - - lung connective tissue - - - - connective tissue of lung - lung interstitial tissue - lung interstitium - pulmonary connective tissue - pulmonary interstitial tissue - pulmonary interstitium - the connective tissue located between the respiratory (airway and alveolar) epithelium, the capillary endothelium and pleural mesothelium; it contains basement membrane composed of collagen, elastin, proteoglycans, and fibronectin - - - - - - - - lung epithelium - - The epithelial layer of the lung. - epithelial tissue of lung - epithelium of lung - lung epithelial tissue - pulmonary epithelium - - - - - - - - respiratory tube - - - A tube in the respiratory system. Examples: bronchus, bronchiole, trachea. - respiratory conducting tube - segment of tracheobronchial tree - segment of tracheobronchial tree - tracheobronchial tree segment - - - - - - - - lung bud - - - Structure derived from foregut that becomes a lung[GO]. - gemma pulmonalis - gemma respiratoria - lung bud - primary lung bud - respiratory diverticulum - - - - - - - - cell layer - - Portion of tissue, that consists of single layer of cells connected to each other by cell junctions. Examples: layer of glial cells; epithelium. - cell sheath - layer - layer of cells - sheath of cells - - - - - - - - perineurium - - A layer of thin, concentrically arranged cells with interspersed collagen that lies within the epineurium. (Nolte, J., The Human Brain 3rd edition) - - - - - - - - neuron projection bundle - - A fasciculated bundle of neuron projections (GO:0043005), largely or completely lacking synapses. - funiculus - nerve fiber bundle - neural fiber bundle - - - - - - - - neural nucleus - - A spatially aggregated collection of nerve cell bodies in the CNS, consisting of one or more subpopulations that share cell type, chemical phenotype, and connections, and including nearby cells that share the same cell type, chemical phenotype, and connections. (CUMBO) - nervous system nucleus - neuraxis nucleus - neuronal nucleus - nucleus - nucleus of CNS - nucleus of neuraxis - - - - - - - - anterior region of body - - - - - - - - - - posterior region of body - - - - - - - - - membranous layer - - membrane - membranous organ component - - - - - - - - anal canal - - - The terminal part of the large intestine, continuous proximally with the rectum and distally terminates with the anus. - anal canal - anal canal viewed anatomically - anal pad - anatomical anal canal - anus - canalis analis - cloaca - cloacal chamber - mesenteron - pars analis recti - - - - - - - - intestine - - Segment of the alimentary canal extending from the stomach to the anus and, in humans and other mammals, consists of two segments, the small intestine and the large intestine. - bowel - intestinal tract - - - - - - - - orifice - - Anatomical conduit that connects two adjacent body spaces (or a body space with the space surrounding the organism)[FMA,modified]. - anatomical orifice - anatomical ostium - hilum - ostium - - - - - - - - cloaca - - - Common chamber into which the intestines and excretory system opens. Arises during development in all vertebrates, but in many it becomes subdivided, lost or incorporated into other structures - cloacal chamber - vent - - - - - - - - embryonic cloaca - - cloaca - endoderm-lined chamber that develops as pouch-like dilation of the caudal end of the hindgut and receives the allantois ventrally and two mesonephric ducts laterally; caudally it ends blindly at the cloacal membrane formed by the union of proctodeal (anal pit) ectoderm and cloacal endoderm, with no intervening mesoderm[MP]. - - - - - - - - primitive urogenital sinus - - UGS - fetal UGS - sinus urogenitalis - the ventral part of the cloaca remaining after septation of the rectum, which further develops into part of the bladder, part of the prostatic part of the male urethra and the urethra and vestibule in females - urogenital sinus - - - - - - - - mouth - - The proximal portion of the digestive tract, containing the oral cavity and bounded by the oral opening. In vertebrates, this extends to the pharynx and includes gums, lips, tongue and parts of the palate. Typically also includes the teeth, except where these occur elsewhere (e.g. pharyngeal jaws) or protrude from the mouth (tusks). - adult mouth - cavital oralis - cavitas oris - cavum oris - mouth cavity - oral region - oral vestibule - regio oralis - rima oris - stoma - stomatodaeum - trophic apparatus - vestibule of mouth - vestibulum oris - - - - - - - - oral opening - - The orifice that connects the mouth to the exterior of the body. - mouth - oral fissure - oral orifice - oral part of face - - - - - - - - proximal-distal subdivision of colon - - A section dividing a colon along a proximal-distal axis. - segment of colon - - - - - - - - pair of lungs - - The pair of anatomical structures comprised of a left lung and right lung. - lungs - lungs pair - pulmones - set of lungs - - - - - - - - respiration organ - - Organ that functions in gaseous exchange between an organism and its environment. In plants, microorganisms, and many small animals, air or water makes direct contact with the organism's cells or tissue fluids, and the processes of diffusion supply the organism with dioxygen (O2) and remove carbon dioxide (CO2). In larger animals the efficiency of gaseous exchange is improved by specialized respiratory organs, such as lungs and gills, which are ventilated by breathing mechanisms. - apparatus respiratorius organ - breathing organ - gas exchange organ - organ of apparatus respiratorius - organ of respiratory system - respiratory organ - respiratory system organ - - - - - - - - vomit - - A bodily fluid consisting of the expulsed contents of the stomach disgorged through the mouth or nose that happens as a result of a vomit reflex. - vomitus - - - - - - - - amniotic fluid - - Amniotic fluid is a bodily fluid consisting of watery liquid surrounding and cushioning a growing fetus within the amnion. It allows the fetus to move freely without the walls of the uterus being too tight against its body. Buoyancy is also provided. The composition of the fluid changes over the course of gestation. Initially, amniotic fluid is similar to maternal plasma, mainly water with electrolytes. As the fetus develops, proteins, carbohydrates, lipids, phospholipids originating from the lungs, fetal cells, and urea are deposited in the fluid. - acqua amnii - liquor amnii - - - - - - - - excreta - - A portion of organism substance that is the product of an excretion process that will be eliminated from the body. An excretion process is elimination by an organism of the waste products that arise as a result of metabolic activity - excreted substance - excretion - portion of excreted substance - waste substance - - - - - - - - pleural effusion - - Pleural effusion is a bodily fluid that is produced in exess and accumulates in the pleural cavity, the fluid-filled space that surrounds the lungs. Excessive amounts of such fluid can impair breathing by limiting the expansion of the lungs during inhalation. - - - - - - - - oronasal secretion - - A bodily fluid secreted from the body via the mouth or nose. - - - - - - - - blood - - A fluid that is composed of blood plasma and erythrocytes. - portion of blood - vertebrate blood - whole blood - - - - - - - - haemolymphatic fluid - - Circulating fluid that is part of the hemolymphoid system. Blood, lymph, interstitial fluid or its analogs. - blood or blood analog - circulating fluid - - - - - - - - pallium - - - Dorsal part (roof region) of the telencephalon[GO]. - area dorsalis telencephali - dorsal part of telencephalon - dorsal telencephalic area - dorsal telencephalon - - - - - - - - ventral part of telencephalon - - - Dorsal part (base region) of the telencephalon. - area ventralis telencephali - subpallium - subpallium - ventral telencephalon - - - - - - - - ligament - - Dense regular connective tissue connecting two or more adjacent skeletal elements or supporting an organ. - ligament organ - - - - - - - - amnion - - - amnios - the thin innermost layer of the extraembryonic membranes that contains the amniotic fluid; the membrane forms a closed sac in which the embryo and later, the fetus, is suspended and protected - - - - - - - - blastula - - Organism at the blastula stage - an early stage of embryonic development in animals. It is produced by cleavage of a fertilized ovum and consists of a spherical layer of around 128 cells surrounding a central fluid-filled cavity called the blastocoel. The blastula follows the morula and precedes the gastrula in the developmental sequence. - blastosphere - blastula embryo - - - - - - - - breast - - The upper ventral region of an animal's torso. - mamma - mammary part of chest - mammary region - - - - - - - - portion of cartilage tissue in tibia - - - Cartilage pertaining to the tibia. - cartilage of tibia - tibial cartilage - - - - - - - - cecum mucosa - - A mucosa that is part of a cecum [Automatically generated definition]. - caecum mucosa - caecum mucosa of organ - caecum mucous membrane - caecum organ mucosa - cecal mucosa - cecum mucosa of organ - cecum mucous membrane - cecum organ mucosa - intestinum crassum caecum mucosa - intestinum crassum caecum mucosa of organ - intestinum crassum caecum mucous membrane - intestinum crassum caecum organ mucosa - mucosa of caecum - mucosa of cecum - mucosa of intestinum crassum caecum - mucosa of organ of caecum - mucosa of organ of cecum - mucosa of organ of intestinum crassum caecum - mucous membrane of caecum - mucous membrane of cecum - mucous membrane of intestinum crassum caecum - organ mucosa of caecum - organ mucosa of cecum - organ mucosa of intestinum crassum caecum - - - - - - - - colonic mucosa - - Mucosa that is part of a colon. The mucosa of the colon is lined by a simple columnar epithelium with a thin brush border and numerous goblet cells. - colon mucosa - colon mucous membrane - colonic mucosa - colonic mucous membrane - large bowel mucosa - mucosa of colon - mucosa of large bowel - - - - - - - - duodenal mucosa - - A mucosa that is part of a duodenum [Automatically generated definition]. - doudenal mucosa - duodenal mucous membrane - duodenum mucosa - mucosa of duodenum - mucous membrane of duodenum - - - - - - - - late embryo - - An embryo that is at the late embryonic stage; this stage covers late steps of the embryogenesis with a fully formed embryo still developing before birth or egg hatching. - embryo late growth stage - embryo late stage - fetus - - - - - - - - gastric gland - - - The branched tubular glands found in the mucosa of the fundus and body of the stomach which contain parietal cells that secrete hydrochloric acid and zymogenic cells that produce pepsin. - - - - - - - - gut wall - - The wall of the digestive tract. This encompasses all parts of the digestive tract with the exception of the lumen (cavity). - digestive tract wall - wall of alimentary tract - wall of digestive tract - wall of gut - - - - - - - - ileal mucosa - - A mucosa that is part of a ileum [Automatically generated definition]. - ileal mucous membrane - ileum mucosa - ileum mucosa of organ - ileum mucous membrane - ileum organ mucosa - mucosa of ileum - mucosa of organ of ileum - mucous membrane of ileum - organ mucosa of ileum - - - - - - - - yellow bone marrow - - bone marrow in which the fat cells predominate in the meshes of the reticular network. - fat marrow - medulla ossium flava - yellow marrow - - - - - - - - intestinal gland - - A gland that is part of the intestinal mucosa. Examples include the intestinal crypts, duodenal gland[cjm]. - bowel mucosa gland - bowel mucosa of organ gland - bowel mucous membrane gland - bowel organ mucosa gland - gland of bowel mucosa - gland of bowel mucosa of organ - gland of bowel mucous membrane - gland of bowel organ mucosa - gland of intestinal mucosa - gland of intestine mucosa - gland of intestine mucosa of organ - gland of intestine mucous membrane - gland of intestine organ mucosa - gland of mucosa of bowel - gland of mucosa of intestine - gland of mucosa of organ of bowel - gland of mucosa of organ of intestine - gland of mucous membrane of bowel - gland of mucous membrane of intestine - gland of organ mucosa of bowel - gland of organ mucosa of intestine - glandula intestinalis - glandulae intestinales - intestinal mucosa gland - intestine mucosa gland - intestine mucosa of organ gland - intestine mucous membrane gland - intestine organ mucosa gland - mucosa of bowel gland - mucosa of intestine gland - mucosa of organ of bowel gland - mucosa of organ of intestine gland - mucous membrane of bowel gland - mucous membrane of intestine gland - organ mucosa of bowel gland - organ mucosa of intestine gland - - - - - - - - mucosa - - A lining of mostly endodermal origin, covered in epithelium, which is involved in absorption and secretion. They line various body cavities that are exposed to the external environment and internal organs. It is at several places continuous with skin: at the nostrils, the lips, the ears, the genital area, and the anus. The sticky, thick fluid secreted by the mucous membranes and gland is termed mucus. The term mucous membrane refers to where they are found in the body and not every mucous membrane secretes mucus[WP] - mucosa of organ - mucosa of organ part - mucosal region - mucous membrane - organ mucosa - region of mucosa - tunica mucosa - - - - - - - - limbic system - - - A set of midline structures surrounding the brainstem of the mammalian brain, originally described anatomically, e.g., hippocampal formation, amygdala, hypothalamus, cingulate cortex. Although the original designation was anatomical, the limbic system has come to be associated with the system in the brain subserving emotional functions. As such, it is very poorly defined and doesn't correspond closely to the anatomical meaning any longer. [BirnLex]. - visceral brain - - - - - - - - parenchyma - - - functional part of an organ in the body. This is in contrast to the stroma, which refers to the structural tissue of organs, being exactly, connective tissues. - - - - - - - - pharyngeal mucosa - - A mucosa that is part of a pharynx [Automatically generated definition]. - mucosa of organ of pharynx - mucosa of pharynx - mucous membrane of pharynx - mucous membrane of the pharynx - organ mucosa of pharynx - pharynx mucosa - pharynx mucosa of organ - pharynx mucous membrane - pharynx organ mucosa - tunica mucosa pharyngea - tunica mucosa pharyngis - - - - - - - - blastocyst - - The mammalian blastocyst is a hollow ball of cells containing two cell types, the inner cell mass and the trophectoderm[GO]. - blastocystis - blastula - - - - - - - - renal medulla - - kidney medulla - medulla of kidney - medulla renalis - medullary pyramids - pyramides renales - renal marrow - renal medullae - renal medullae set - renal pyramids - renal pyramids set - the inner portion of the kidney consisting of the renal pyramids - - - - - - - - urothelium - - - An epithelial tissue layer that lines much of the urinary tract, including the renal pelvis, the ureters, the bladder, and parts of the urethra. - epithelium transitionale - transitional epithelium - transitional epithelium - uroepithelium - - - - - - - - corpus striatum - - The corpus striatum (striated body) is a compound structure consisting of the caudate nucleus and the lentiform nucleus, which consists of the putamen and the globus pallidus[WP]. - striate body - striated body - - - - - - - - hindlimb stylopod - - - The part of the hindlimb between pelvis and the knee, corresponding to the femur. - femur - hind limb stylopod - hind limb stylopodium - hind propodium - hindlimb propodium - hindlimb stylopod - hindlimb stylopodium - proximal segment of free lower limb - stylopod of hind limb - stylopod of hindlimb - stylopod of lower limb - thigh - upper leg - - - - - - - - tongue muscle - - - - - - - - - - - The muscular portion of the tongue. - muscle of tongue - muscle organ of tongue - musculi linguae - skeletal muscle tissue of tongue - tongue skeletal muscle - tongue skeletal muscle tissue - - - - - - - - tracheal mucosa - - A mucosa that is part of a respiratory airway. - mucosa of organ of trachea - mucosa of organ of windpipe - mucosa of trachea - mucosa of windpipe - mucous membrane of trachea - mucous membrane of windpipe - organ mucosa of trachea - organ mucosa of windpipe - trachea mucosa - trachea mucosa of organ - trachea mucous membrane - trachea organ mucosa - tracheal mucous membrane - tunica mucosa (tracheae) - tunica mucosa tracheae - windpipe mucosa - windpipe mucosa of organ - windpipe mucous membrane - windpipe organ mucosa - - - - - - - - apocrine sweat gland - - - - Apocrine sweat glands are sweat glands composed of a coiled secretory portion located at the junction of the dermis and subcutaneous fat, from which a straight portion inserts and secretes into the infundibular portion of the hair follicle. The ducts of apocrine glands open into the canals of hair follicles. The stimulus for the secretion of apocrine sweat glands is adrenaline, which is a hormone carried in the blood[WP]. - glandula sudorifera apocrina - - - - - - - - musculature of body - - The subdivision of the musculoskeletal system that consists of all the muscles of the body[VSAO, modified]. - muscle system - muscle system of body - muscular system - musculature system - muskelsystem - set of all muscles - set of muscles of body - vertebrate muscular system - - - - - - - - cochlear ganglion - - - Corti's ganglion - The group of nerve cell bodies that conveys auditory sensation from the organ of Corti to the hindbrain and resides on the cochlear part of the vestibulocochlear nerve (eighth cranial nerve)[MP]. distributed to the hair cells of the spiral organ. The cochlear fibers arise in bipolar cells in the spiral ganglion in the modiolus. - cochlear part of vestibulocochlear ganglion - ganglion cochlearis - ganglion of Corti - ganglion spirale - ganglion spirale cochleae - spiral ganglion - spiral ganglion of cochlea - vestibulocochlear VIII ganglion cochlear component - vestibulocochlear ganglion cochlear component - - - - - - - - colonic epithelium - - An epithelium that is part of a colon [Automatically generated definition]. - colon epithelial tissue - colon epithelium - epithelial tissue of colon - epithelial tissue of large bowel - epithelium of colon - epithelium of large bowel - large bowel epithelial tissue - large bowel epithelium - posterior intestine epithelium - - - - - - - - jejunal mucosa - - A mucosa that is part of a jejunum [Automatically generated definition]. - jejunal mucous membrane - jejunum mucosa - jejunum mucosa of organ - jejunum mucous membrane - jejunum organ mucosa - mucosa of jejunum - mucosa of organ of jejunum - mucous membrane of jejunum - organ mucosa of jejunum - - - - - - - - jejunal epithelium - - An epithelium that is part of a jejunum. - epithelium of jejunum - - - - - - - - sympathetic trunk - - - One of a a paired bundle of nerve fibers plus ganglia that run from the base of the skull to the coccyx. - gangliated cord - sympathetic chain - sympathetic ganglionic chain - truncus sympathicus - - - - - - - - serous gland - - A gland in which the principal secretory cells are serous secreting cells. - - - - - - - - bronchial mucosa - - - A mucosa that is part of a bronchus [Automatically generated definition]. - bronchi mucosa - bronchi mucosa of organ - bronchi mucous membrane - bronchi organ mucosa - bronchial trunk mucosa - bronchial trunk mucosa of organ - bronchial trunk mucous membrane - bronchial trunk organ mucosa - bronchus mucosa - bronchus mucosa of organ - bronchus mucous membrane - bronchus organ mucosa - mucosa of bronchi - mucosa of bronchial trunk - mucosa of bronchus - mucosa of organ of bronchi - mucosa of organ of bronchial trunk - mucosa of organ of bronchus - mucous membrane of bronchi - mucous membrane of bronchial trunk - mucous membrane of bronchus - organ mucosa of bronchi - organ mucosa of bronchial trunk - organ mucosa of bronchus - tunica mucosa bronchi - - - - - - - - dermal papilla - - - A mesodermal signaling center of the hair follicle consisting of closely packed specialized mesenchymal fibroblasts. Framed by the enlarged bulb matrix in anagen. - dermal papilla cell - dermal papillae - follicular papilla - hair follicle dermal papilla - hair papilla - papilla corii - papilla dermatis - papilla dermis - papilla of corium - papillae dermis - skin papilla - - - - - - - - mucous gland - - A gland in which the principal secretory cells are mucus secreting cells. - glandula mucosa - muciparous gland - mucous secreting gland - mucus gland - mucus-secreting gland - - - - - - - - artery wall - - An anatomical wall that is part of an artery [Automatically generated definition]. - arterial wall - wall of artery - - - - - - - - eccrine sweat gland - - - A merocrine, unbranched, unbranched, coiled, tubular gland sweat gland. In humans, distributed over almost all of the body surface, and promote cooling by evaporation of their secretion. - eccrine gland - glandula sudorifera eccrina - glandula sudorifera merocrina - merocrine sweat gland - - - - - - - - prostate epithelium - - - - - - The prostate epithelium. - epithelial tissue of prostate - epithelial tissue of prostate gland - epithelium of prostate - epithelium of prostate gland - epithelium of prostatic gland - prostate epithelial tissue - prostate gland epithelial tissue - prostate gland epithelium - prostatic epithelium - prostatic gland epithelium - - - - - - - - lymphoid follicle - - . - folliculus lymphaticus - lymphatic follicle - lymphatic nodule - lymphoid nodule - nodular lymphoid tissue - nodulus lymphaticus - nodulus lymphoideus - - - - - - - - cerebral subcortex - - - The layer located below the cerebral cortex that includes the forebrain, midbrain and hindbrain. - cerebral medulla - subcortex - - - - - - - - bodily secretion - - A portion of organism substance that is produced by exocrine glands. - exocrine gland fluid - exocrine gland fluid or secretion - exocrine gland fluid/secretion - exocrine gland secretion - external secretion - secreted substance - secretion - - - - - - - - endocervix - - - 1. The mucous membrane lining the canal of the cervix uteri. 2. The region of the opening of the uterine cervix into the uterine cavity. - - - - - - - - uterine wall - - - An anatomical wall that is part of a uterus [Automatically generated definition]. - anatomical wall of uterus - uterus anatomical wall - uterus wall - wall of uterus - - - - - - - - organism substance - - Material anatomical entity in a gaseous, liquid, semisolid or solid state; produced by anatomical structures or derived from inhaled and ingested substances that have been modified by anatomical structures as they pass through the body. - body fluid or substance - body substance - organism substance - portion of body substance - portion of organism substance - - - - - - - - anatomical space - - Non-material anatomical entity of three dimensions, that is generated by morphogenetic or other physiologic processes; is surrounded by one or more anatomical structures; contains one or more organism substances or anatomical structures. - anatomical spaces - lumen - lumen space - space - - - - - - - - material anatomical entity - - - Anatomical entity that has mass. - - - - - - - - immaterial anatomical entity - - Anatomical entity that has no mass. - immaterial physical anatomical entity - - - - - - - - anatomical system - - Multicellular, connected anatomical structure that has multiple organs as parts and whose parts work together to achieve some shared function. - anatomical systems - body system - connected anatomical system - organ system - system - - - - - - - - multicellular organism - - Anatomical structure that is an individual member of a species and consists of more than one cell. - Koerper - animal - body - multi-cellular organism - organism - whole body - whole organism - - - - - - - - compound organ component - - Multi-tissue structure that is part of a compound organ. - compound organ components - - - - - - - - testis - - - - - A gonad of a male animal. A gonad produces and releases sperm. - gonad of male genitalia - gonad of male reproductive system - male gonad - orchis - testes - testicle - testiculus - - - - - - - - female reproductive system - - The organs and associated structures associated with bearing offspring in a female animal. - female genital system - female genital tract - female genitalia - female genitals - female organism genitalia - female organism reproductive system - female reproductive tract - genitalia of female organism - gynaecological tissue - reproductive system of female organism - systema genitale femininum - - - - - - - - organism subdivision - - Anatomical structure which is a subdivision of a whole organism, consisting of components of multiple anatomical systems, largely surrounded by a contiguous region of integument. - anatomic region - body part - body region - cardinal body part - - - - - - - - acellular anatomical structure - - - Anatomical structure that consists of cell parts and cell substances and together does not constitute a cell or a tissue. - acellular anatomical structures - - - - - - - - anatomical cluster - - Anatomical group that has its parts adjacent to one another. - - - - - - - - extraembryonic structure - - A multicellular anatomical structure that is associated with an embryo and derived from the zygote from which it develops, but which does not contribute to the embryo proper or to structures that are part of the same organism after embryogenesis. - extra-embryonic structure - extraembryonic structures - extraembryonic tissue - - - - - - - - tissue - - Multicellular anatomical structure that consists of many cells of one or a few types, arranged in an extracellular matrix such that their long-range organisation is at least partly a repetition of their short-range organisation. - portion of tissue - simple tissue - tissue portion - - - - - - - - anatomical group - - Anatomical structure consisting of at least two non-overlapping organs, multi-tissue aggregates or portion of tissues or cells of different types that does not constitute an organism, organ, multi-tissue aggregate, or portion of tissue. - - - - - - - - multi-tissue structure - - Anatomical structure that has as its parts two or more portions of tissue of at least two different types and which through specific morphogenetic processes forms a single distinct structural unit demarcated by bona-fide boundaries from other distinct structural units of different types. - multi-tissue structures - - - - - - - - epithelium - - - - - - - - - - Portion of tissue, that consists of one or more layers of epithelial cells connected to each other by cell junctions and which is underlain by a basal lamina. Examples: simple squamous epithelium, glandular cuboidal epithelium, transitional epithelium, myoepithelium[CARO]. - epithelial tissue - portion of epithelium - - - - - - - - simple cuboidal epithelium - - - Unilaminar epithelium that consists of a single layer of cuboidal cells. - epithelium simplex cuboideum - simple cuboidal epithelia - - - - - - - - simple columnar epithelium - - - Unilaminar epithelium, which consists of a single layer of columnar cells. Examples: ciliated columnar epithelium, gastric epithelium, microvillus columnar epithelium.[FMA] - columnar epithelium - columnar epithlium - epithelium simplex columnare - simple columnar epithelia - simple columnar epithelium - - - - - - - - multilaminar epithelium - - Epithelium which consists of more than one layer of epithelial cells that may or may not be in contact with a basement membrane. Examples: keratinized stratified squamous epithelium, ciliated stratified columnar epithelium.[FMA] - laminated epithelium - stratified epithelium - - - - - - - - simple squamous epithelium - - - Unilaminar epithelium which consists of a single layer of squamous cells. Examples: pulmonary alveolar epithelium, endothelium.[FMA] - epithelium simplex squamosum - simple squamous epithelia - - - - - - - - atypical epithelium - - Epithelium that consists of epithelial cells not arranged in one ore more layers. - atypical epithelia - heterogenous epithelium - - - - - - - - cavitated compound organ - - Compound organ that contains one or more macroscopic anatomical spaces. - cavitated compound organs - cavitated organ - - - - - - - - unilaminar epithelium - - Epithelium which consists of a single layer of epithelial cells. Examples: endothelium, mesothelium, glandular squamous epithelium.[FMA] - simple epithelium - unilaminar epithelia - - - - - - - - chyme - - - A semifluid mass of partly digested food expelled by the stomach into the duodenum. - chymus - - - - - - - - chyle - - Chyle is a bodily fluid consisting of a milky fluid consisting of lymph and emulsified fats; formed in the small intestine during digestion of ingested fats. - - - - - - - - mucus - - - Mucus is a bodily fluid consisting of a slippery secretion of the lining of the mucous membranes in the body. It is a viscous colloid containing antiseptic enzymes (such as lysozyme) and immunoglobulins. Mucus is produced by goblet cells in the mucous membranes that cover the surfaces of the membranes. It is made up of mucins and inorganic salts suspended in water. - - - - - - - - interstitial fluid - - Interstitial fluid is a bodily fluid consisting of a solution which bathes and surrounds the cells of multicellular animals. It is the main component of the extracellular fluid, which also includes plasma and transcellular fluid. - intercellular fluid - tissue fluid - - - - - - - - thoracic segment of trunk - - - Subdivision of trunk that lies between the head and the abdomen. - anterior subdivision of trunk - thorax - upper body - upper trunk - - - - - - - - abdomen - - The subdivision of the vertebrate body between the thorax and pelvis. The ventral part of the abdomen contains the abdominal cavity and visceral organs. The dorsal part includes the abdominal section of the vertebral column. - abdominopelvic region - abdominopelvis - adult abdomen - belly - celiac region - - - - - - - - embryo - - Anatomical entity that comprises the organism in the early stages of growth and differentiation that are characterized by cleavage, the laying down of fundamental tissues, and the formation of primitive organs and organ systems. For example, for mammals, the process would begin with zygote formation and end with birth. For insects, the process would begin at zygote formation and end with larval hatching. For plant zygotic embryos, this would be from zygote formation to the end of seed dormancy. For plant vegetative embryos, this would be from the initial determination of the cell or group of cells to form an embryo until the point when the embryo becomes independent of the parent plant. - developing organism - developmental tissue - embryonic organism - - - - - - - - germ layer - - A layer of cells produced during the process of gastrulation during the early development of the animal embryo, which is distinct from other such layers of cells, as an early step of cell differentiation. The three types of germ layers are the endoderm, ectoderm, and mesoderm. - embryonic germ layer - embryonic germ layers - embryonic tissue - germinal layer - primary germ layer - - - - - - - - ectoderm - - Primary germ layer that is the outer of the embryo's three germ layers and gives rise to epidermis and neural tissue. - embryonic ectoderm - - - - - - - - endoderm - - Primary germ layer that lies remote from the surface of the embryo and gives rise to internal tissues such as gut. - entoderm - - - - - - - - mesoderm - - The middle germ layer of the embryo, between the endoderm and ectoderm. - embryonic mesoderm - entire mesoderm - mesodermal mantle - - - - - - - - stomodeum - - Anterior part of the embryonic digestive tract that develops into a mouth. The stomodeum includes as parts an invagination of the ectoderm and the stomodeal cavity. - mouth pit - mouth primordium - oral ectoderm - oral pit - primitive oral cavity - stomatodeum - stomodaeum - stomodeal-hypophyseal primordium - - - - - - - - stomach - - - An expanded region of the vertebrate alimentary tract that serves as a food storage compartment and digestive organ. A stomach is lined, in whole or in part by a glandular epithelium. - anterior intestine - gaster - mesenteron - stomach chamber - ventriculus - - - - - - - - aorta - - - - The main trunk of the systemic arterial system that carries blood from the heart to all the organs and other structures of the body, bringing oxygenated blood to all parts of the body in the systemic circulation - arteria maxima - dorsal aorta - trunk of aortic tree - trunk of systemic arterial tree - - - - - - - - heart - - - - - A myogenic muscular circulatory organ found in the vertebrate cardiovascular system composed of chambers of cardiac muscle. It is the primary circulatory organ. - Herz@de - branchial heart - cardium - chambered heart - vertebrate heart - - - - - - - - endocrine system - - - - - - - - - - - - - - - - - - Anatomical system that consists of the glands and parts of glands that produce endocrine secretions and help to integrate and control bodily metabolic activity. - endocrine glandular system - endocrine system - systema endocrinum - - - - - - - - brain - - - The brain is the center of the nervous system in all vertebrate, and most invertebrate, animals. Some primitive animals such as jellyfish and starfish have a decentralized nervous system without a brain, while sponges lack any nervous system at all. In vertebrates, the brain is located in the head, protected by the skull and close to the primary sensory apparatus of vision, hearing, balance, taste, and smell[WP]. - encephalon - suprasegmental levels of nervous system - suprasegmental structures - synganglion - the brain - - - - - - - - cerebral cortex - - - The thin layer of gray matter on the surface of the cerebral hemisphere that develops from the telencephalon. It consists of the neocortex (6 layered cortex or isocortex), the hippocampal formation and the olfactory cortex. - brain cortex - cortex cerebralis - cortex cerebri - cortex of cerebral hemisphere - cortical plate (CTXpl) - cortical plate (areas) - pallium of the brain - - - - - - - - lamina - - Any thin layer or plate. - laminar tissue - - - - - - - - medulla of organ - - Middle part of an organ, surrounded by the cortex. - medulla - - - - - - - - thoracic ganglion - - - The thoracic ganglia are paravertebral ganglia. The thoracic portion of the sympathetic trunk typically has 12 thoracic ganglia. Emerging from the ganglia are thoracic splancic nerves (the cardiopulmonary, the greater, lesser, and least splanchic nerves) that help provide sympathetic innervation to abdominal structures. Also, the ganglia of the thoracic sympathetic trunk have both white and gray rami communicantes. The white rami carry sympathetic fibers arising in the spinal cord into the sympathetic trunk. [WP,unvetted]. - ganglion of thorax - ganglion thoracicum splanchnicum - thoracic paravertebral ganglion - thoracic splanchnic ganglion - thoracic sympathetic ganglion - thorax ganglion - - - - - - - - cornea - - - - cornea of camera-type eye - corneas - the transparent anterior portion of the fibrous coat of the eye that serves as the chief refractory structure - tunica cornea - - - - - - - - lens of camera-type eye - - - Transparent part of camera-type eye that helps to refract light to be focused on the retina. - camera-type eye lens - crystalline lens - eye lens - lens - lens crystallina - lenses - ocular lens - - - - - - - - retina - - - Netzhaut - The retina is the innermost layer or coating at the back of the eyeball, which is sensitive to light and in which the optic nerve terminates. - inner layer of eyeball - retina of camera-type eye - retinas - tunica interna of eyeball - - - - - - - - eye - - An organ that detects light. - light-detecting organ - visual apparatus - - - - - - - - neck - - An organism subdivision that extends from the head to the pectoral girdle, encompassing the cervical vertebral column. - collum - neck (volume) - - - - - - - - pleura - - - The invaginated serous membrane that surrounds the lungs (the visceral portion) and lines the walls of the pleural cavity (parietal portion). - pleura - pleural tissue - wall of pleural sac - - - - - - - - leg - - - The portion of the hindlimb that contains both the stylopod and zeugopod. - lower extremity - tetrapod leg - - - - - - - - tibia - - - - The major preaxial endochondral bone in the posterior zeugopod[Phenoscape]. - shankbone - shinbone - - - - - - - - femur - - - - - Endochondral longbone connecting the pelvic girdle with posterior zeugopodium skeleton.[VSAO, modified]. - femoral bone - mesomere 1 of pevlic appendage - os femorale - os femoris - os longissimum - proximal metapterygial mesomere of pelvic appendage - proximal metapterygial mesomere of pelvic fin - thigh bone - - - - - - - - skeletal joint - - - - - - - - - - - Anatomical cluster that consists of two or more adjacent skeletal structures, which may be interconnected by various types of tissue[VSAO]. - articular joint - articulation - joint - joints - - - - - - - - penis - - - A intromittent organ in certain biologically male organisms. In placental mammals, this also serves as the organ of urination - penes - phallus - - - - - - - - reproductive system - - - - - - - - - - - - - - - - - Anatomical system that has as its parts the organs concerned with reproduction. - Geschlechtsorgan - animal reproductive system - genital system - genital tract - genitalia - organa genitalia - reproductive tissue - reproductive tract - systemata genitalia - - - - - - - - gonad - - Reproductive organ that produces and releases eggs (ovary) or sperm (testis). - gonada - gonads - - - - - - - - female gonad - - - - female organism genitalia gonad - female organism genitalia gonada - female organism reproductive system gonad - female organism reproductive system gonada - female reproductive system gonad - female reproductive system gonada - genitalia of female organism gonad - genitalia of female organism gonada - gonad of female organism genitalia - gonad of female organism reproductive system - gonad of female reproductive system - gonad of genitalia of female organism - gonad of reproductive system of female organism - gonada of female organism genitalia - gonada of female organism reproductive system - gonada of female reproductive system - gonada of genitalia of female organism - gonada of reproductive system of female organism - ovaries - ovarium - ovary - ovum-producing ovary - reproductive system of female organism gonad - reproductive system of female organism gonada - the gonad of a female organism which contains germ cells - - - - - - - - oviduct - - - A tube or collection of tubes in an animal from the ovaries to the outside of the body. - female reproductive tracts - ovarian duct - ovarian tube - oviducts - tuba uterina - tuba uterinae - tubular parts of female reproductive system - uterine tube - - - - - - - - uterus - - the female muscular organ of gestation in which the developing embryo or fetus is nourished until birth - - - - - - - - vagina - - - A fibromuscular tubular tract leading from the uterus to the exterior of the body in female placental mammals and marsupials, or to the cloaca in female birds, monotremes, and some reptiles[WP]. - distal oviductal region - distal portion of oviduct - vaginae - - - - - - - - seminal vesicle - - - Either of a pair of glandular pouches that lie one on either side of the male reproductive tract posterolateral to the urinary bladder and in the human male secrete a sugar- and protein-containing fluid into the ejaculatory duct. - glandula seminalis - glandula vesiculosa - gonecyst - seminal gland - vas efferens - vesicula seminalis - vesiculae seminales - vesicular gland - vesicular glands - vesicular seminalis - vesiculæ seminales - - - - - - - - skin epidermis - - - The outer epithelial layer of the skin that is superficial to the dermis. - epidermis - skin - vertebrate epidermis - - - - - - - - respiratory system - - - - - - - - - - - - - - - - Atmungssystem - Functional system which consists of structures involved in respiration. - apparatus respiratorius - apparatus respiratorius - respiratory system - systema respiratorium - - - - - - - - respiratory airway - - An airway through which respiratory air passes in organisms. - airway - airways - - - - - - - - digestive system - - - - - - - - - - - - - - - Anatomical system that has as its parts the organs devoted to the ingestion, digestion, and assimilation of food and the discharge of residual wastes. - alimentary system - alimentary tract - gastrointestinal system - gut - - - - - - - - renal system - - - - - - - - - - - - - - The renal system in an anatomical system that maintains fluid balance and contributes to electrolyte balance, acid/base balance, and disposal of nitrogenous waste products.. - excretory system - renal or urinary system - renal system - renal/urinary system - systema urinaria - systema urinarium - urinary system - urinary tract - - - - - - - - circulatory system - - - - - - - - - - - - - organ system that passes nutrients (such as amino acids and electrolytes), gases, hormones, blood cells, etc. to and from cells in the body to help fight diseases and help stabilize body temperature and pH to maintain homeostasis[WP]. - systema cardiovasculare - - - - - - - - adipose tissue - - - Portion of connective tissue composed of adipocytes enmeshed in areolar tissue - adipose - bodyfat - fat - fat tissue - fatty depot - fatty tissue - - - - - - - - musculature - - A subdivision of the muscular system corresponding to a subdisivision of an organism. - muscle group - muscle system - muscles - muscles set - musculature - musculature system - musculi - set of muscles - set of skeletal muscles - - - - - - - - nervous system - - - - - - - - - - - - The nervous system is an organ system containing predominantly neuron and glial cells. In bilaterally symmetrical organism, it is arranged in a network of tree-like structures connected to a central body. The main functions of the nervous system are to regulate and control body functions, and to receive sensory input, process this information, and generate behavior [CUMBO]. - nerve net - neurological system - systema nervosum - - - - - - - - central nervous system - - - CNS - The central nervous system is the core nervous system that serves an integrating and coordinating function. In vertebrates it consists of the neural tube derivatives: the brain and spinal cord. In invertebrates it includes central ganglia plus nerve cord. - cerebrospinal axis - neuraxis - systema nervosum centrale - - - - - - - - nerve - - An enclosed, cable-like bundle of axons in the peripheral nervous system originating in a nerve root in the central nervous system (or a condensed nervous structure) connecting with peripheral structures. - nerves - neural subtree - peripheral nerve - - - - - - - - sensory system - - Anatomical system that overlaps the nervous system and is responsible for receiving and processing sensory information. - organa sensuum - organa sensuum - sense organ subsystem - sense organs - sense organs set - sensory organ system - sensory subsystem - sensory systems - set of sense organs - - - - - - - - gustatory system - - - - - - - - - - - The sensory system for the sense of taste. - gustatory organ system - taste system - - - - - - - - yolk sac - - - - A sac-like expansion of the ventral wall of the intestine, narrowed into a yolk stalk near the body[Hyman's]. Membranous sac attached to an embryo, providing early nourishment in the form of yolk in bony fishes, sharks, reptiles, birds, and primitive mammals. It functions as the developmental circulatory system of the human embryo, before internal circulation begins. In the mouse, the yolk sac is the first site of blood formation, generating primitive macrophages and erythrocytes[WP]. - saccus vitellinus - vesicula umbilicalis - - - - - - - - foregut - - Anterior subdivision of a digestive tract. - praeenteron - proenteron - - - - - - - - chordate pharynx - - A portion of the respiratory and digestive tracts; its distal limit is the superior part of the esophagus and it connects the nasal and oral cavities with the esophagus and larynx; it contains the valleculae and the pyriform recesses; its upper limits are the nasal cavity and cranial base.[FEED]. - pharynx - - - - - - - - esophagus - - - - Tube that connects the pharynx to the stomach. In mammals, the oesophagus connects the buccal cavity with the stomach. The stratified squamous non-keratinised epithelium lining the buccal cavity is continued through the pharynx down into the oesophagus. The lowest part of the oesophagus (ca. 2 cm) is lined with gastric mucosa and covered by peritoneum. The main body of the oesophagus is lined with small, simple mucous glands. Each gland opens into the lumen by a long duct which pierces the muscularis mucosae (Wilson and Washington, 1989). A sphincter is situated at the point where the oesophagus enters the stomach to prevent gastro-oesophageal reflux, i.e. to prevent acidic gastric contents from reaching stratified epithelia of the oesophagus, where they can cause inflammation and irritation (Wilson and Washington, 1989; Brown et al., 1993). - gullet - oesophagus - - - - - - - - saliva-secreting gland - - glandulae salivariae - saliva-secreting exocrine glands of the oral cavity[GO] - salivary gland - - - - - - - - midgut - - Middle subdivision of a digestive tract[CJM]. In vertebrates: The middle part of the alimentary canal from the stomach, or entrance of the bile duct, to, or including, the large intestine[GO]. - mesenteron - - - - - - - - hindgut - - The caudalmost subdivision of a digestive tract. - metenteron - - - - - - - - primordium - - Primordia are populations of contiguous cells that are morphologically distinct and already correspond in extent to a later organ/tissue[FBbt, Hartenstein, V. (2004)]. - bud - future organ - placode - primordia - rudiment - - - - - - - - neural tube - - - - - In the developing vertebrate, the neural tube is the embryo's precursor to the central nervous system, which comprises the brain and spinal cord. The neural groove gradually deepens as the neural folds become elevated, and ultimately the folds meet and coalesce in the middle line and convert the groove into a closed tube, the neural tube or neural canal (which strictly speaking is the center of the neural tube), the ectodermal wall of which forms the rudiment of the nervous system. [WP,unvetted]. - neural primordium - presumptive central nervous system - tubus neuralis - - - - - - - - rectum - - intestinum rectum - rectal sac - terminal portion of intestine - terminal portion of large intestine - the terminal portion of the intestinal tube, terminating with the anus - - - - - - - - Malpighian tubule - - A tubule that extends from the posterior part of the digestive tract which absorbs solutes, water, and wastes from the surrounding hemolymph. Each tubule consists of a single layer of cells that is closed off at the distal end with the proximal end joining the alimentary canal at the junction between the midgut and hindgut[WP,modified]. - Malphigian tube - Malpighian tube - tuba Malpighii - - - - - - - - anatomical entity - - Biological entity that is either an individual member of a biological species or constitutes the structural organization of an individual member of a biological species. - - - - - - - - ventral pancreatic duct - - A duct joining the pancreas to the common bile duct to supply pancreatic juices which aid in digestion provided by the exocrine pancreas. The pancreatic duct joins the common bile duct just prior to the ampulla of Vater, after which both ducts perforate the medial side of the second portion of the duodenum at the major duodenal papilla. - canal of Wirsung - chief pancreatic duct - duct of Wirsung - ductus pancreatis ventralis - hepaticopancreatic duct - main pancreatic duct - pancreatic duct - - - - - - - - intervertebral disk - - A pad of fibrocartilage between the articular surfaces of two successive vertebral centra which has nucleus pulposus at its core. - discus intervertebralis - intervertebral disc - intervertebral fibrocartilage - spinal disc - spinal disk - - - - - - - - skin of back - - A zone of skin that is part of a back [Automatically generated definition]. - back skin - back zone of skin - skin, dorsal region - zone of skin of back - - - - - - - - ileocecal junction - - A point along the course of the gastrointestinal tract where the small intestine (ileum) ends as it opens into the cecal portion of the large intestine; occurs usually within the iliac fossa, demarcated internally as the ileocecal orifice - ileocaecal junction - - - - - - - - pericardial cavity - - - A potential space between the visceral and parietal layers of the pericardium. - cavitas pericardiaca - cavity of pericardial sac - pericardial space - - - - - - - - bony vertebral centrum - - - Ossified form of a vertebral centrum, a skeletal element that functionally replaces the notochord[VSAP,modified]. - arcocentrum - autocentrum - body of vertebra - centra - corpus vertebra - corpus vertebrae - corpus vertebrae (vertebrale) - holocentrum - vertebral body - vertebral centra - vertebral centrum - - - - - - - - endocardium of ventricle - - - - Endocardium that is part of the cardiac ventricle. - cardiac ventricle endocardium - endocardium of cardiac ventricle - endocardium of heart ventricle - endocardium of lower chamber of heart - endocardium of ventricle of heart - heart ventricle endocardium - lower chamber of heart endocardium - ventricle endocardial tissue - ventricle endocardium - ventricle of heart endocardium - ventricular endocardium - - - - - - - - epicardium of ventricle - - An epicardial layer that lines a cardiac ventricle - cardiac ventricle epicardium - ventricular epicardium - - - - - - - - myocardium of ventricle - - Muscular layer of the cardiac ventricle composed of a compact myocardial layer surrounding the trabecular layer. - ventricle cardiac muscle - ventricle myocardium - ventricular myocardium - - - - - - - - skin of head - - A zone of skin that is part of a head [Automatically generated definition]. - adult head zone of skin - head skin - head zone of skin - zone of skin of adult head - zone of skin of head - - - - - - - - skin of trunk - - A zone of skin that is part of a trunk [Automatically generated definition]. - torso zone of skin - trunk skin - trunk zone of skin - zone of skin of torso - zone of skin of trunk - - - - - - - - pleural fluid - - Transudate contained in the pleural cavity. - - - - - - - - urine - - Excretion that is the output of a kidney - - - - - - - - synovial fluid - - Transudate contained in the synovial cavity of joints, and in the cavity of tendon sheaths and bursae. - joint fluid - - - - - - - - calcareous tooth - - - - Skeletal element within the mouth (or in some species, upper part of the digestive tract) that is composed of dentine and is used in procuring or masticating food. - dental element - dentine containing tooth - tooth - vertebrate tooth - - - - - - - - wall of esophagus - - An anatomical wall that is part of a esophagus [Automatically generated definition]. - anatomical wall of esophagus - anatomical wall of gullet - anatomical wall of oesophagus - esophageal wall - esophagus anatomical wall - esophagus wall - gullet anatomical wall - gullet wall - oesophagus anatomical wall - oesophagus wall - wall of gullet - wall of oesophagus - - - - - - - - lobe of thyroid gland - - - - A lobe of tissue that is part of a thyroid gland. - lobuli glandulae thyroideae - lobus (glandula thyroidea) - lobus glandulae thyroideae - thyroid gland lobe - thyroid lobe - - - - - - - - vertebral column - - Subdivision of skeletal system that consists of all the vertebra and associated skeletal elements and joints in the body[modified from VSAO]. - backbone - columna vertebralis - dorsal spine - spinal column - spine - vertebral column skeleton - vertebral region - - - - - - - - parathyroid gland - - The parathyroid gland is an endocrine gland for secretion of parathyroid hormone, usually found as a pair, embedded in the connective tissue capsule on the posterior surface of the thyroid gland. Parathyroid regulates calcium and phosphorous metabolism. - epithelial body - parathyroid - parathyroid secreting cell - - - - - - - - cardiac muscle tissue - - - - Muscle tissue composed of cardiac muscle cells, forming the muscles of the heart[ZFA,modified]. - cardiac muscle - cardiac muscle muscle tissue - cardiac muscle textus muscularis - cardiac musculature - heart muscle muscle tissue - heart muscle textus muscularis - heart myocardium muscle tissue - heart myocardium textus muscularis - muscle of heart muscle tissue - muscle of heart textus muscularis - muscle tissue of cardiac muscle - muscle tissue of heart muscle - muscle tissue of heart myocardium - muscle tissue of muscle of heart - muscle tissue of myocardium - myocardium muscle tissue - myocardium textus muscularis - textus muscularis of cardiac muscle - textus muscularis of heart muscle - textus muscularis of heart myocardium - textus muscularis of muscle of heart - textus muscularis of myocardium - - - - - - - - skeletal muscle tissue - - Muscle tissue that consists primarily of skeletal muscle fibers. - skeletal muscle - skeletal muscle system - somatic muscle - - - - - - - - smooth muscle tissue - - - Muscle tissue which is unstriated, composed primarily of smooth muscle fibers surrounded by a reticulum of collagen and elastic fibers. Smooth muscle differs from striated muscle in the much higher actin/myosin ratio, the absence of conspicuous sarcomeres and the ability to contract to a much smaller fraction of its resting length[GO]. - involuntary muscle - non-striated muscle - smooth muscle - textus muscularis levis; textus muscularis nonstriatus - textus muscularis nonstriatus - visceral muscle - visceral muscle tissue - - - - - - - - mesothelium - - - Simple squamous epithelium of mesodermal origin which lines serous membranes. Examples: mesothelium of pleura, mesothelium of peritoneum[FMA]. http://en.wikipedia.org/wiki/ The mesothelium is a membrane that forms the lining of several body cavities: the pleura (thoracal cavity), peritoneum (abdominal cavity including the mesentery) and pericardium (heart sac). Mesothelial tissue also surrounds the male internal reproductive organs (the tunica vaginalis testis) and covers the internal reproductive organs of women (the tunica serosa uteri). - - - - - - - - dorsum - - A major subdivision of an organism that is the entire part of the organism dorsal to a horizontal plane and bounded on one side by the same transverse plane. In vertebrares this includes the vertebral column.. - back - back of body proper - dorsal part of organism - - - - - - - - renal vein - - Either of the pair of major vessels which arise from the renal hilus and return blood from the kidneys, suprarenal gland and the ureter to the inferior vena cava. - kidney vein - renal venous tree - vein of kidney - venae renales - - - - - - - - cystic duct - - - ductus cysticus - the tubular structure that conducts gall bladder contents from the gall bladder to the common bile duct - - - - - - - - caecum - - A pouch in the digestive tract that connects the ileum with the ascending colon of the large intestine. It is separated from the ileum by the ileocecal valve, and is the beginning of the large intestine. It is also separated from the colon by the cecocolic junction. - blind intestine - blindgut - caeca - caecum - ceca - cecum - intestinum caecum - intestinum crassum caecum - intestinum crassum cecum - - - - - - - - vermiform appendix - - A blind-ended tube connected to the cecum, from which it develops embryologically[WP]. - apex of caecum - apex of cecum - appendix - appendix vermiformis - appendix vermiformis - caecal appendix - cecal appendix - vermix - - - - - - - - colon - - Last portion of the large intestine before it becomes the rectum. - hindgut - large bowel - posterior intestine - - - - - - - - ascending colon - - Section of colon which is distal to the cecum and proximal to the transversecolon.[FMA,modified] - colon ascendens - spiral colon - - - - - - - - transverse colon - - The proximal-distal subdivision of colon that runs transversely across the upper part of the abdomen, from the right to the left colic flexure. Continuous with the descending colon[BTO,modified]. - colon transversum - - - - - - - - descending colon - - The portion of the colon between the left colic flexure and the sigmoid colon at the pelvic brim; the portion of the descending colon lying in the left iliac fossa is sometimes called the iliac colon. - colon descendens - - - - - - - - sigmoid colon - - The part of the large intestine that is closest to the rectum and anus. It forms a loop that averages about 40 cm. in length, and normally lies within the pelvis, but on account of its freedom of movement it is liable to be displaced into the abdominal cavity. - colon sigmoideum - pelvic colon - sigmoid colon - sigmoid flexure - - - - - - - - fundus of stomach - - The fundus is the portion of the stomach that lies above the cardiac notch, and contains the fundic glands[GO, Kardong]. - fundus gastricus - fundus gastricus (ventricularis) - fundus gastricus ventricularis - fundus ventricularis - fundus ventriculi - gastric fundus - stomach fundus - - - - - - - - cardia of stomach - - The part of the stomach attached to the esophagus. The cardia begins immediately distal to the z-line of the gastroeosphageal junction, where the squamous epithelium of the esophagus gives way to the columnar epithelium of the gastrointestinal tract[WP] - antrum cardiacum - cardiac antrum - cardiac orifice - cardiac region - cardial orifice - cardial part of stomach - gastric cardia - pars cardiaca (gaster) - pars cardiaca gastricae - stomach cardiac region - - - - - - - - pyloric antrum - - antrum - antrum of Willis - antrum of stomach - antrum pylori - antrum pyloricum - gastric antrum - stomach antrum - stomach pyloric antrum - the area at the bottom of the stomach on the caudal side of the pyloric canal that contains gastrin-producing G cells, which stimulate acid production, and the luminal pH-sensitive population of somatostatin-producing D cells - - - - - - - - pylorus - - pars pylorica - pars pylorica gastricae - pyloric part of stomach - pyloric region - stomach pyloric region - the stomach tissue region surrounding and controlling the distal outlet of the stomach, which opens into the duodenum - valvula pylori - - - - - - - - wall of stomach - - anatomical wall of stomach - anatomical wall of ventriculus - gastric wall - stomach anatomical wall - stomach wall - the layered structure that makes up the stomach, typiclly consists of a serous coat, a muscular coat, a mucous membrane, and other tissue layers in between - ventriculus anatomical wall - ventriculus wall - wall of ventriculus - - - - - - - - wall of small intestine - - An anatomical wall that is part of a small intestine [Automatically generated definition]. - anatomical wall of small bowel - anatomical wall of small intestine - small bowel anatomical wall - small bowel wall - small intestinal wall - small intestine anatomical wall - small intestine wall - wall of small bowel - - - - - - - - wall of large intestine - - An anatomical wall that is part of a large intestine [Automatically generated definition]. - anatomical wall of large intestine - large intestinal wall - large intestine anatomical wall - large intestine wall - - - - - - - - mesentery of small intestine - - - - The peritoneum responsible for connecting the jejunum and ileum (parts of the small intestine) to the back wall of the abdomen. Between the two sheets of peritoneum are blood vessels, lymph vessels, and nerves. This allows these parts of the small intestine to move relatively freely within the abdominopelvic cavity. The brain, however, cannot map sensation accurately, so sensation is usually referred to the midline, an example of referred pain[WP]. - mesentery (proper) - mesentery proper - small intestinal mesentery - small intestine mesentery - - - - - - - - hepatic acinus - - - The functional unit of the liver, consisting of a mass of hepatocytes from adjacent liver lobules aligned around the hepatic arterioles and portal venules just as they anastomose into sinusoids. - liver acinus - portal acinus - - - - - - - - biliary tree - - - A complex network of conduits that begins with the canals of Hering (intralobar bile duct) and progressively merges into a system of interlobular, septal, and major ducts which then coalesce to form the extrahepatic bile ducts, which finally deliver bile to the intestine, and in some species to the gallbladder. - biliary tract - - - - - - - - common bile duct - - ductus choledochus - ductus choledochus (biliaris) - the part of the biliary tree formed by the union of the cystic duct and the common hepatic duct - - - - - - - - visceral peritoneum - - The inner layer of peritoneum that is wrapped around organs located inside the intraperitoneal space. - visceral serous membrane of peritoneum - - - - - - - - peritoneal cavity - - Anatomical cavity bounded by visceral and parietal peritoneum - cavitas peritonealis - saccus serosus peritonei - - - - - - - - ovarian artery - - An artery that supplies an ovary. - arteria ovarica - ovarian arterial tree - - - - - - - - hepatic artery - - An artery that supplies the liver. - arteria hepatica - arteria hepatica propria - - - - - - - - mucosa of stomach - - Magenschleimhaut - The mucosal layer that lines the stomach. - gastric mucosa - gastric mucous membrane - mucosa of organ of stomach - mucosa of organ of ventriculus - mucosa of ventriculus - mucous membrane of stomach - mucous membrane of ventriculus - organ mucosa of stomach - organ mucosa of ventriculus - stomach mucosa - stomach mucosa of organ - stomach mucous membrane - stomach organ mucosa - tunica mucosa (gaster) - tunica mucosa gastricae - tunica mucosa gastris - ventriculus mucosa - ventriculus mucosa of organ - ventriculus mucous membrane - ventriculus organ mucosa - - - - - - - - submucosa of stomach - - gastric submucosa - stomach submucosa - submucosa of ventriculus - submucous layer of stomach - tela submucosa (gaster) - tela submucosa gastricae - tela submucosa ventriculi - the fibrous connective tissue layer beneath the stomach mucosa - ventriculus submucosa - - - - - - - - serosa of stomach - - anatomical wall of stomach serosa - anatomical wall of stomach serous membrane - anatomical wall of ventriculus serosa - anatomical wall of ventriculus serous membrane - gastric serosa - gastric wall serosa - gastric wall serous membrane - serosa of anatomical wall of stomach - serosa of anatomical wall of ventriculus - serosa of gastric wall - serosa of stomach anatomical wall - serosa of stomach wall - serosa of ventriculus anatomical wall - serosa of ventriculus wall - serosa of wall of stomach - serosa of wall of ventriculus - serous coat of stomach - serous membrane of anatomical wall of stomach - serous membrane of anatomical wall of ventriculus - serous membrane of gastric wall - serous membrane of stomach anatomical wall - serous membrane of stomach wall - serous membrane of ventriculus anatomical wall - serous membrane of ventriculus wall - serous membrane of wall of stomach - serous membrane of wall of ventriculus - stomach anatomical wall serosa - stomach anatomical wall serous membrane - stomach serosa - stomach wall serosa - stomach wall serous membrane - the outermost layer of the stomach wall, consisting of layers of connective tissue continuous with the peritoneum - tunica serosa (gaster) - tunica serosa gastricae - ventriculus anatomical wall serosa - ventriculus anatomical wall serous membrane - ventriculus wall serosa - ventriculus wall serous membrane - visceral peritoneum of stomach - wall of stomach serosa - wall of stomach serous membrane - wall of ventriculus serosa - wall of ventriculus serous membrane - - - - - - - - pyloric sphincter - - A strong ring of smooth muscle at the end of the pyloric canal which lets food pass from the stomach to the duodenum. It receives sympathetic innervation from the celiac ganglion[WP]. - pyloric valve - - - - - - - - mucosa of small intestine - - A mucosa that is part of a small intestine [Automatically generated definition]. - mucosa of organ of small bowel - mucosa of organ of small intestine - mucosa of small bowel - mucous membrane of small bowel - mucous membrane of small intestine - organ mucosa of small bowel - organ mucosa of small intestine - small bowel mucosa - small bowel mucosa of organ - small bowel mucous membrane - small bowel organ mucosa - small intestinal mucosa - small intestine mucosa - small intestine mucosa of organ - small intestine mucous membrane - small intestine organ mucosa - tunica mucosa (intestinum tenue) - tunica mucosa intestini tenuis - - - - - - - - submucosa of small intestine - - small bowel submucosa - small intestinal submucosa - small intestine submucosa - submucosa of small bowel - submucosal tissue in the small intestines. - tela submucosa (intestinum tenue) - tela submucosa intestini tenuis - - - - - - - - serosa of small intestine - - A serous membrane that is part of a small intestine [Automatically generated definition]. - serosa of small bowel - serous coat of small intestine - serous membrane of small bowel - serous membrane of small intestine - small bowel serosa - small bowel serous membrane - small intestinal serosa - small intestine serosa - small intestine serous membrane - tunica serosa (intestinum tenue) - tunica serosa intestini tenuis - visceral peritoneum of small intestine - - - - - - - - mucosa of large intestine - - A mucosa that is part of a large intestine [Automatically generated definition]. - large intestinal mucosa - large intestine mucosa - large intestine mucosa of organ - large intestine mucous membrane - large intestine organ mucosa - mucosa of organ of large intestine - mucous membrane of large intestine - organ mucosa of large intestine - tunica mucosa intestini crassi - - - - - - - - submucosa of large intestine - - A submucosa that is part of a large intestine [Automatically generated definition]. - large intestinal submucosa - large intestine submucosa - submucous layer of large intestine - tela submucosa intestini crassi - - - - - - - - serosa of large intestine - - A serous membrane that is part of a large intestine [Automatically generated definition]. - large intestinal serosa - large intestine serosa - large intestine serous membrane - serous coat of large intestine - serous membrane of large intestine - tunica serosa intestini crassi - visceral peritoneum of large intestine - - - - - - - - Peyer's patch - - Peyers gland - Peyers patch - aggregated lymphoid follicle of intestine - aggregated lymphoid nodule - noduli lymphoidei aggregati - the protruding lymphoid tissue located on the mucosa of the intestine that is composed of densely packed B cell follicles - - - - - - - - duodenal gland - - - A compound tubular submucosal gland found in that portion of the duodenum which is above the hepatopancreatic sphincter (Sphincter of Oddi). The main function of these glands is to produce a mucus-rich alkaline secretion (containing bicarbonate)[WP]. - Brunner's gland - gland of Brunner - glandula duodenales - glandula duodenales Brunneri - submucosal gland of duodenum - - - - - - - - intestinal villus - - enteric villi - enteric villous - enteric villus - intestinal villi - intestinal villus layer - small intestine villus - the tiny hair-like projections that protrude from the inside of the small intestine that contain blood vessels that capture digested nutrients that are absorbed through the intestinal wall; the villi increase the absorptive surface area of the small intestine by approximately 30-fold - villi intestinales - villi intestinales - villus - villus intestinalis (intestinum tenue) - - - - - - - - renal pelvis - - - - A funnel shaped proximal portion of the ureter that is formed by convergence of the major calices [MP]. - kidney pelvis - p. renallis - pelvis of ureter - pyelum - - - - - - - - cortex of kidney - - Outer cortical portion of the kidney, between the renal capsule and the renal medulla. - cortex renalis - kidney cortex - renal cortex - - - - - - - - renal papilla - - - Tip of renal pyramid projecting into a minor calyx. - kidney papilla - - - - - - - - renal corpuscle - - Malphigian corpuscle - Malpighian corpuscle - corpusculum renale - corpusculum renis - cortical renal corpuscle - kidney corpuscle - the structure containing the glomerular capsule and the glomerulus that serves as the initial blood-filtering component of a nephron - - - - - - - - glomerular capsule - - A cup-like sac at the expanded beginning of a tubular component of a nephron that contains the glomerulus - Bowman's capsule - Bowman's capsule - Bowmans capsule - Malphigian capsule - Malpighian capsule - Mueller capsule - Muellerian capsule - capsula glomerularis - capsula glomeruli - pronephric glomerular capsule - renal glomerular capsule - - - - - - - - nephron tubule - - - An epithelial tube that is part of the nephron, the functional part of the kidney. - kidney tubule - renal tubule - tubulus renalis - uriniferous tubule - - - - - - - - collecting duct of renal tubule - - The collecting duct is a portion of the nephron through which water flows, moving passively down its concentration gradient - arcuate renal tubule - collecting duct - collecting duct system - collecting tubule - junctional tube - kidney collecting duct - kidney collecting tubule - renal collecting tubule - tubulus renalis arcuatus - tubulus renalis colligens - ureteric tree - - - - - - - - adrenal cortex - - - - adrenal gland cortex - cortex (glandula suprarenalis) - cortex glandulae suprarenalis - cortex of adrenal gland - cortex of suprarenal gland - suprarenal - suprarenal cortex - the thick outer layer of the adrenal gland that produces and secretes steroid hormones such as corticosterone, estrone and aldosterone - - - - - - - - adrenal medulla - - - - adrenal central medulla - adrenal gland medulla - chromaffin cells - medulla (glandula suprarenalis) - medulla glandulae suprarenalis - medulla of adrenal gland - medulla of glandula suprarenalis - medulla of suprarenal gland - suprarenal medulla - the inner portion of the adrenal gland that consists mainly of chromaffin cells which produce, store and secrete neurotransmitters such as epinephrine and norepinephrine - - - - - - - - paraaortic body - - A chromaffin paraganglion located at the bifurcation of the aorta or at the origin of the inferior mesenteric artery. - organ of Zuckerkandl - para-aortic body - paraganglia of Zuckerkandl - paraganglion of Zuckerkandl - - - - - - - - lamina propria of small intestine - - Lamina propria that is part_of the small intestine. - lamina propria mucosa of small bowel - lamina propria mucosa of small intestine - lamina propria mucosae of small bowel - lamina propria mucosae of small intestine - lamina propria of mucosa of small intestine - lamina propria of small bowel - small bowel lamina propria - small bowel lamina propria mucosa - small bowel lamina propria mucosae - small intestine lamina propria - small intestine lamina propria mucosa - small intestine lamina propria mucosae - - - - - - - - crypt of Lieberkuhn of small intestine - - crypt of Lieberkuhn of small bowel - crypt of Lieberkuhn of small intestine - intestinal gland of small bowel - intestinal gland of small intestine - lieberkuhn crypt of small bowel - lieberkuhn crypt of small intestine - small bowel crypt of Lieberkuhn - small bowel intestinal gland - small bowel lieberkuhn crypt - small intestinal crypt of Lieberkuhn - small intestine crypt of Lieberkuhn - small intestine intestinal gland - small intestine lieberkuhn crypt - the tubular intestinal glands found in the mucosal membranes of the small intestine - - - - - - - - intestinal mucosa - - Mucosal layer that lines the intestine. - bowel mucosa - bowel mucosa of organ - bowel mucous membrane - bowel organ mucosa - intestine mucosa - intestine mucosa of organ - intestine mucous membrane - intestine organ mucosa - mucosa of bowel - mucosa of intestine - mucosa of organ of bowel - mucosa of organ of intestine - mucous membrane of bowel - mucous membrane of intestine - organ mucosa of bowel - organ mucosa of intestine - tunica mucosa intestini - - - - - - - - serosa of intestine - - A serous membrane that is part of a wall of intestine [Automatically generated definition]. - anatomical wall of bowel serosa - anatomical wall of bowel serous membrane - anatomical wall of intestine serosa - anatomical wall of intestine serous membrane - bowel anatomical wall serosa - bowel anatomical wall serous membrane - bowel wall serosa - bowel wall serous membrane - intestinal serosa - intestinal wall serosa - intestinal wall serous membrane - intestine anatomical wall serosa - intestine anatomical wall serous membrane - intestine serosa - intestine wall serosa - intestine wall serous membrane - serosa of anatomical wall of bowel - serosa of anatomical wall of intestine - serosa of bowel anatomical wall - serosa of bowel wall - serosa of intestinal wall - serosa of intestine anatomical wall - serosa of intestine wall - serosa of wall of bowel - serosa of wall of intestine - serous membrane of anatomical wall of bowel - serous membrane of anatomical wall of intestine - serous membrane of bowel anatomical wall - serous membrane of bowel wall - serous membrane of intestinal wall - serous membrane of intestine anatomical wall - serous membrane of intestine wall - serous membrane of wall of bowel - serous membrane of wall of intestine - visceral peritoneum of intestine - wall of bowel serosa - wall of bowel serous membrane - wall of intestine serosa - wall of intestine serous membrane - - - - - - - - interlobular bile duct - - The canals that carry bile in the liver between the intralobular ducts and the biliary ductules; interlobular bile ducts are part of the interlobular portal triad. - interlobular ductule - - - - - - - - spleen lymphoid follicle - - - Malpighian body - The area of the white pulp where the affinity maturation of B cells and the generation of memory B cells and plasma cells occur - lymphatic follicle of spleen - lymphoid follicle of spleen - lymphoid nodule of spleen - spleen B cell follicle - spleen lymphoid follicle - spleen lymphoid nodule - splenic B cell follicle - splenic lymphatic follicle - splenic lymphoid follicle - - - - - - - - red pulp of spleen - - pulpa rubra - pulpa splenica - red pulp - spleen red pulp - splenic red pulp - the parenchymatous tissue network of the spleen that consists of loose plates or cords (sinuses) infiltrated with red blood cells where most of the blood filtration occurs and degenerate erythrocytes are removed from the circulation - - - - - - - - marginal zone of spleen - - - junctional zone of spleen - marginal zone - spleen marginal zone - the zone between the red and white pulp of the spleen containing numerous macrophages and lymphocytes, and a rich plexus of sinusoids supplied by white pulp arterioles carrying blood-borne antigens - - - - - - - - adventitia of ureter - - - An adventitia that is part of a ureter. - external adventitia of ureter - tunica adventitia (ureter) - tunica adventitia ureteris - ureter adventitia - ureteral adventitia - - - - - - - - lamina propria of ureter - - - A lamina propria that is part of a ureter [Automatically generated definition]. - lamina propria mucosa of ureter - lamina propria mucosae of ureter - ureter lamina propria - ureter lamina propria mucosa - ureter lamina propria mucosae - - - - - - - - urothelium of ureter - - - - The luminal epithelium of the tube that conducts the urine from the renal pelvis to the bladder[MP] - transitional epithelium of ureter - ureter luminal urothelium - ureter transitional epithelium - ureter urothelium - - - - - - - - urinary bladder - - - - bladder - distensible musculomembranous organ situated in the anterior part of the pelvic cavity in which urine collects before excretion[MP]. - urocyst - vesica - vesica urinaria - - - - - - - - wall of urinary bladder - - - An anatomical wall that lines the insider of a urinary bladder. - anatomical wall of bladder - anatomical wall of urinary bladder - bladder anatomical wall - bladder wall - urinary bladder anatomical wall - urinary bladder wall - wall of bladder - - - - - - - - trigone of urinary bladder - - - Lieutaud's trigone - bladder trigone - deep trigone - dorsal bladder neck - musculus trigoni vesicae profundus - the smooth triangular region of the wall of the urinary bladder formed by the two ureteral orifices and the internal urethral orifice; it is an area in which the muscle fibers are closely adherent to the mucosa - trigone of bladder - trigonum vesicae - trigonum vesicae urinariae - urinary bladder trigone - vesical trigone - - - - - - - - neck of urinary bladder - - - The constricted portion of the urinary bladder, formed by the meeting of its inferolateral surfaces proximal to the opening of the urethra[MP]. - bladder neck - cervix vesicae - cervix vesicae urinariae - collum vesicae - neck of bladder - urinary bladder neck - vesical neck - - - - - - - - mucosa of urinary bladder - - - bladder mucosa - bladder mucous membrane - bladder organ mucosa - mucosa of bladder - mucous membrane of bladder - mucous membrane of urinary bladder - the mucous membrane lining the urinary bladder - tunica mucosa (vesica urinaria) - tunica mucosa vesicae - tunica mucosa vesicae urinariae - urinary bladder mucosa - urinary bladder mucous membrane - - - - - - - - serosa of urinary bladder - - A serous membrane that is part of a urinary bladder [Automatically generated definition]. - bladder serosa - bladder serous membrane - serosa of bladder - serous coat of bladder - serous coat of urinary bladder - serous membrane of bladder - serous membrane of urinary bladder - tunica serosa (vesica urinaria) - tunica serosa vesicae - urinary bladder serosa - urinary bladder serous membrane - visceral peritoneum of urinary bladder - - - - - - - - lamina propria of urinary bladder - - - A lamina propria that is part of a urinary bladder [Automatically generated definition]. - bladder lamina propria - bladder lamina propria mucosa - bladder lamina propria mucosae - lamina propria mucosa of bladder - lamina propria mucosa of urinary bladder - lamina propria mucosae of bladder - lamina propria mucosae of urinary bladder - lamina propria of bladder - urinary bladder lamina propria - urinary bladder lamina propria mucosa - urinary bladder lamina propria mucosae - - - - - - - - wall of intestine - - An anatomical wall that is part of a intestine [Automatically generated definition]. - anatomical wall of bowel - anatomical wall of intestine - bowel anatomical wall - bowel wall - bowel wall - intestinal wall - intestine anatomical wall - intestine wall - wall of bowel - - - - - - - - pancreatic acinus - - - The secretory units of the exocrine pancreas, where fluid containing digestive enzymes is produced; consists of a group of secretory cells surrounding a luminal space that connects to the pancreatic duct. - acinus pancreaticus - pancreas acinus - pancreatic acinar - pancreatic acini - - - - - - - - pancreas - - An endoderm derived structure that produces precursors of digestive enzymes and blood glucose regulating enzymes[GO]. - - - - - - - - splenic cord - - - A structure found in the red pulp of the spleen between the sinusoids, consisting of fibrils and connective tissue cells with a large population of monocytes and macrophages. These cords contain half of the human body's monocytes as a reserve so that after tissue injury these monocytes can move in and aid locally sourced monocytes in wound healing. Erythrocytes pass through the cords of Billroth before entering the sinusoids. The passage into the sinusoids may be seen as a bottleneck, where erythrocytes need to be flexible in order to pass through. In disorders of erythrocyte shape and/or flexibility, such as hereditary spherocytosis, erythrocytes fail to pass through and get phagocytosed, causing extravascular hemolysis. - cord of Billroth - cord of Bilroth - - - - - - - - pelvic girdle region - - - - The organism subdivision that includes the pelvic girdle skeleton and associated soft tissue. Note that this includes both the skeletal elements and associated tissues (integument, muscle, etc). Examples: There are only two instances in an organism, right and left pectoral girdle regions. - girdle - pelvic - pelvic girdle - - - - - - - - epithelium of stomach - - - - - The epithelial layer of the stomach . - epithelial tissue of stomach - epithelial tissue of ventriculus - epithelium of ventriculus - gastric epithelium - stomach epithelial tissue - stomach epithelium - ventriculus epithelial tissue - ventriculus epithelium - - - - - - - - intestinal epithelium - - - - - Epithelial layer that lines the intestine. - bowel epithelial tissue - bowel epithelium - epithelial tissue of bowel - epithelial tissue of intestine - epithelium of bowel - epithelium of intestine - intestine epithelial tissue - intestine epithelium - villous epithelium - - - - - - - - epithelium of large intestine - - An epithelium that is part of a large intestine [Automatically generated definition]. - epithelial tissue of large intestine - large intestinal epithelium - large intestine epithelial tissue - large intestine epithelium - - - - - - - - portal triad - - - A multi-organ-part structure that consists of three vessels of the portal lobule including the bile duct, a terminal branch of the hepatic artery and portal vein, and may also include a lymphatic vessel - trias hepatica - trias hepatica - - - - - - - - liver parenchyma - - - The functional units of the liver including the lobules. - hepatic parenchyma - hepatic parenchyme - liver parenchyme - parenchyma of liver - - - - - - - - hepatic sinusoid - - - - Wide thin-walled blood vessels in the liver. In mammals they have neither veinous or arterial markers. - hepatic sinusoids - liver hepatic sinusoids - liver sinusoid - liver sinusoidal blood vessel - sinusoid of liver - sinusoidal blood vessel of liver - vas capillare sinusoideum - vas sinusoideum - - - - - - - - intralobular bile duct - - - canal of Hering - canal of Herring - canals of Hering - cholangiole - duct of Herring - ductus interlobularis bilifer - intrahepatic bile ductule - the tubules located between the bile canaliculi and interlobular bile ducts near the outer edge of a classic liver lobule - - - - - - - - nephron - - The basic functional unit of the kidney. its chief function is to regulate the concentration of water and soluble substances like sodium salts by filtering the blood, reabsorbing what is needed and excreting the rest as urine. A nephron eliminates wastes from the body, regulates blood volume and blood pressure, controls levels of electrolytes and metabolites, and regulates blood pH. Its functions are vital to life and are regulated by the endocrine system by hormones such as antidiuretic hormone, aldosterone, and parathyroid hormone.[WP] - mature nephron - nephroneum - tubulus renalis - - - - - - - - proximal convoluted tubule - - - - 1st convoluted tubule - PCT - The proximal convoluted tubule is the most proximal portion of the proximal tubule and extends from the glomerular capsule to the proximal straight tubule. - first convoluted tubule - kidney proximal convoluted tubule - proximal convoluted renal tubule - renal proximal convoluted tubule - tubulus contortus proximalis - tubulus contortus proximalis - tubulus convolutus proximalis - - - - - - - - loop of Henle - - Henle loop - Henle's loop - ansa nephroni - the section of the renal tubule in the kidney medulla with a hairpin bend; consists of a descending limb and an ascending limb, and is situated between the proximal convoluted tubule to the distal convoluted tubule; it functions to reabsorb water and ions from the urine - - - - - - - - descending limb of loop of Henle - - descending limb - descending limb of Henle's loop - loop of Henle descending limb - the portion of the renal tubule that constitutes the proximal part of the loop of Henle, has low permeability to ions and urea, and is highly permeable to water; it consists of an initial short thick segment lined by low simple cuboidal epithelium and a long thin segment lined by simple squamous epithelium; however, this distinction is not as important physiologically as in the ascending limb, so often the two are treated as one structure - - - - - - - - proximal straight tubule - - - S3 - The proximal straight tubule is the part of the descending limb that extends from the proximal convoluted tubule to the descending thin tubule. - pars recta - pars recta tubuli renalis - proximal tubule segment 3 - segment 3 of proximal tubule - thick descending limb of proximal tubule - tubulus rectus proximalis - - - - - - - - thick ascending limb of loop of Henle - - ascending thick limb - distal straight tubule - loop of Henle ascending limb thick segment - straight portion of distal convoluted renal tubule - straight portion of distal convoluted tubule - the distal sub-portion of the ascending loop of Henle which is lined by simple cuboidal epithelium and enters the renal cortex to empty a hypotonic filtrate into the distal convoluted tubule - thick ascending limb - thick ascending limb of Henle's loop - thick ascending limb of distal tubule - tubulus rectus distalis - tubulus rectus distalis - - - - - - - - distal convoluted tubule - - - - The first segment of the nephron lying just downstream from the loop of Henle, immediately after the macula densa. - distal convoluted renal tubule - second convoluted tubule - tubulus contortus distalis - tubulus contortus distalis - tubulus convolutus distalis - - - - - - - - outer medulla of kidney - - The renal outer medulla is the region of the kidney that lies between the renal cortex and the renal inner medulla[GO]. - kidney outer medulla - outer renal medulla - outer zone of medulla of kidney - outer zone of renal medulla - renal outer medulla - set of outer region of renal pyramids - zona externa (medullaris renalis) - zona externa medullae renalis - - - - - - - - inner medulla of kidney - - Innermost region of the mammalian kidney. - inner renal medulla - inner zone of medulla of kidney - inner zone of renal medulla - kidney inner medulla - renal inner medulla - set of inner region of renal pyramids - zona interna (medullaris renalis) - zona interna medullae renalis - - - - - - - - endometrium - - the glandular mucous membrane lining of the uterine cavity that is hormonally responsive during the estrous/menstrual cycle and during pregnancy - tunica mucosa (endometrium) - tunica mucosa uteri - uterine endometrium - uterine mucosa - uterine mucous membrane - - - - - - - - myometrium - - - the smooth muscle coat of the uterus, which forms the main mass of the organ and surrounds and supports the endometrium - tunica muscularis - tunica muscularis (myometrium) - uterine myometrium - uterine smooth muscle - - - - - - - - serosa of uterus - - - Outer serosa layer of the uterus. - perimetrium - serous coat of uterus - serous membrane of uterus - tunica serosa (perimetrium) - tunica serosa uteri - uterine serosa - uterus serosa - uterus serous membrane - visceral peritoneum of uterus - - - - - - - - epididymis - - - Nebenhoden@de - the elongated structure connected to the posterior surface of the testis that transports, stores, and matures spermatozoa between testis and vas deferens - - - - - - - - ovarian follicle - - - - A spherical aggregation of cells in the ovary that contains a single oocyte[WP,modified]. - egg follicle - follicle of ovary - follicle of ovary viewed macroscopically - folliculi ovarici primarii - folliculi ovarici vesiculosi - ovary follicle - - - - - - - - umbilical artery - - - The umbilical artery is a paired artery (with one for each half of the body) that is found in the abdominal and pelvic regions. In the fetus, it extends into the umbilical cord. [WP,unvetted]. - a. umbilicalis - - - - - - - - vaginal vein - - - One the veins that drains the vaginal venous plexus, into the hypogastric veins. [WP,modified]. - vagina vein - vein of vagina - - - - - - - - muscle of pelvis - - - Muscle (organ) which is a part of the pelvis. Examples: levator ani, - muscle organ of pelvis - pelvic muscle - pelvis muscle - pelvis muscle organ - - - - - - - - lobe of prostate - - - - A portion of a prostate that forms a lobe. - lobe of prostate gland - prostate gland lobe - prostatic lobe - - - - - - - - skin of penis - - - - A zone of skin that is part of a penis [Automatically generated definition]. - penile skin - penis skin - penis zone of skin - zone of skin of penis - - - - - - - - prepuce of penis - - A retractable double-layered fold of skin and mucous membrane that covers the glans penis and protects the urinary meatus when the penis is not erect. - foreskin - penile prepuce - praeputium - prepuce - prepuce of male - prepucium - preputium - preputium penis - - - - - - - - male urethra - - A urethra that is part of a male reproductive system. - - - - - - - - female urethra - - A urethra that is part of a female reproductive system. - urethra feminina - urethra muliebris - - - - - - - - urethral gland - - - Any of the numerous small mucous-secreting glands located in the wall of the male or female urethra that help protect the epithelium from the corrosive urine - gland of urethra - urethra gland - urethra gland (male or female) - urethral mucuous gland - - - - - - - - seminiferous tubule of testis - - - seminiferous cord - seminiferous tubule - testis - seminiferous tubule - the tubules in the testes where spermatogenesis occurs - tubuli seminiferi - tubuli seminiferi - - - - - - - - epithelium of vagina - - - The epithelial layer of the vagina. - epithelial tissue of vagina - epithelium, vaginal - vagina epithelial tissue - vagina epithelium - vaginal epithelium - - - - - - - - white adipose tissue - - Connective tissue consisting of fat-storing cells and arranged in lobular groups or along minor blood vessels[MP,modified] - adipocytus unigutturalis - textus adiposus albus - textus adiposus albus - unilocular adipose tissue - white fat - - - - - - - - brown adipose tissue - - A thermogenic form of adipose tissue that is composed of brown adipocytes[MP,modified] - adipocytus multigutturalis - brown fat - multilocular adipose tissue - textus adiposus fuscus - textus adiposus fuscus - - - - - - - - lacrimal sac - - - - The upper dilated end of the nasolacrimal duct that is lodged in a deep groove formed by the lacrimal bone and frontal process of the maxilla; it connects the lacrimal canaliculi, which drain tears from the eye's surface, and the nasolacrimal duct, which conveys this fluid into the nasal cavity; like the nasolacrimal duct, the sac is lined by stratified columnar epithelium with mucus-secreting goblet cells, and is surrounded by connective tissue. - lachrymal sac - lacrymal sac - saccus lacrimalis - - - - - - - - external acoustic meatus - - - - A tube running from the outer ear to the middle ear. The human ear canal extends from the pinna to the eardrum and is about 26 mm in length and 7 mm in diameter. - auditory canal - auditory meatus - ear canal - external acoustic tube - external auditory canal - external auditory meatus - external auditory tube - - - - - - - - anal region - - The anus and surrounding regions. Encompasses both internal and external regions, where present - posterior - posterior end of organism - - - - - - - - cerebrospinal fluid - - A clear, colorless, bodily fluid, that occupies the subarachnoid space and the ventricular system around and inside the brain and spinal cord. - CSF - cerebral spinal fluid - liquor cerebrospinalis - spinal fluid - - - - - - - - parietal peritoneum - - The outer layer of peritoneum that is attached to the abdominal and pelvic walls. - parietal serous membrane of peritoneum - peritoneal cavity lining - - - - - - - - muscle of leg - - A muscle that is part of the region of the hindlimb between the pelvis and ankle. - leg muscle - leg muscle organ - leg skeletal muscle - leg skeletal muscle tissue - muscle of hindlimb zeugopod or stylopod - muscle of thigh or crus - muscle of upper or lower hindlimb segment - muscle of upper/lower leg - muscle organ of leg - skeletal muscle of leg - - - - - - - - skin of pelvis - - A zone of skin that is part of a pelvis [Automatically generated definition]. - pelvic skin - pelvis skin - pelvis zone of skin - zone of skin of pelvis - - - - - - - - skin of abdomen - - A zone of skin that is part of an abdomen [Automatically generated definition]. - abdomen skin - abdomen zone of skin - abdominal skin - skin of abdomen proper - zone of skin of abdomen - - - - - - - - skin of neck - - A zone of skin that is part of a neck [Automatically generated definition]. - neck (volume) zone of skin - neck skin - neck zone of skin - zone of skin of neck - zone of skin of neck (volume) - - - - - - - - skin of thorax - - A zone of skin that is part of a thorax [Automatically generated definition]. - thoracic skin - thorax skin - thorax zone of skin - upper body skin - zone of skin of thorax - - - - - - - - skin of limb - - A zone of skin that is part of a limb [Automatically generated definition]. - limb skin - limb zone of skin - zone of skin of limb - - - - - - - - pectoral girdle region - - - - An organism subdivision that includes the pectoral girdle skeleton and associated soft tissue. Note that this includes both the skeletal elements and associated tissues (integument, muscle, etc). Examples: There are only two instances in an organism, right and left pectoral girdle regions. - cingulum membri superioris - cingulum membri superioris - girdle - pectoral - pectoral girdle - pectoral region - shoulder girdle - upper limb girdle - - - - - - - - facial lymphatic vessel - - A lymphatic vessel that is part of a face [Automatically generated definition]. - FL - buccal lymphatic vessel - face lymph vessel - face lymphatic vessel - lymph vessel of face - lymphatic vessel of face - - - - - - - - pectoral lymphatic vessel - - PL - - - - - - - - skeletal system - - - - - - - - - - - Anatomical system that is a multi-element, multi-tissue anatomical cluster that consists of the skeleton and the articular system. - Skelettsystem - set of all bones and joints - skeleton system - - - - - - - - phalanx of manus - - - - - A phalanx that is part of a forelimb autopod[Automatically generated definition]. - bone of finger - digital bone of manus - digitus manus phalanx - finger phalanx - hand digit phalanx - hand phalanx - manual phalanx - phalanges of fore digit - phalanx of digit of hand - phalanx of digitus manus - phalanx of finger - phalanx of fore digit - phalanx of hand - phalanx of hand digit - phalanx of manual digit - - - - - - - - metaphysis - - Zone of long bone that is between the epiphysis and diaphysis. Subdivision of diaphysis which forms the proximal or distal end of diaphysis next to the epiphysis; together with diaphysis proper, it constitutes the diaphysis. Examples: proximal metaphysis of humerus, distal metaphysis of femur.[FMA] - diaphyseal end of long bone - long bone metaphysis - metaphyses - - - - - - - - forelimb skeleton - - - The collection of all skeletal elements in a free forelimb region. Excludes the pectoral girdle - bones of upper limb - fore limb skeleton - forelimb skeleton - free upper limb skeleton - ossa membri superioris - pectoral limb skeleton - set of bones of upper limb - skeleton of forelimb - skeleton of free upper limb - skeleton of pectoral limb - skeleton of upper limb - upper limb skeleton - wing skeleton - - - - - - - - hindlimb skeleton - - - Subdivision of skeleton consisting of all skeletal elements in an hindlimb region. - bones of lower limb - free lower limb skeleton - hind limb skeleton - hind-limb skeleton - hindlimb skeleton - lower limb skeleton - ossa membri inferioris - set of bones of lower limb - skeleton of free lower limb - skeleton of lower limb - - - - - - - - skeleton of manus - - - Subdivision of skeleton that is the collection of all skeletal elements in a manus, which is the distal section of the anterior forelimb skeleton consisting of the mesopodium, the metapodium and the acropodium (e.g. including the wrist, palm, and fingers)[Phenoscape]. - anterior autopodium - anterior autopodium skeleton - bones of hand - fore autopod skeleton - forelimb autopod skeleton - hand region skeleton - hand skeleton - manual skeleton - manus - manus skeleton - ossa manus - set of bones of hand - skeleton of hand - - - - - - - - chest - - Subdivision of trunk proper, which is demarcated from the neck by the plane of the superior thoracic aperture and from the abdomen internally by the inferior surface of the diaphragm and externally by the costal margin and associated with the thoracic vertebral column and ribcage and from the back of the thorax by the external surface of the posterolateral part of the rib cage, the anterior surface of the thoracic vertebral column and the posterior axillary lines; together with the abdomen and the perineum, it constitutes the trunk proper[FMA]. - anterolateral part of thorax - front of thorax - pectus - thoracic body wall - thorax - ventral part of thoracic region - - - - - - - - subdivision of head - - head region - head subdivision - region of head - - - - - - - - skeleton of pes - - Subdivision of skeleton that is the collection of all skeletal elements in a pes, which is the distal section of the posterior hindlimb skeleton consisting of the mesopodium, the metapodium and the acropodium (e.g. including the ankle, sole, and toes)[Phenoscape]. - foot region skeleton - foot skeleton - pedal skeleton - pes - pes skeleton - posterior autopodium - posterior autopodium skeleton - set of bones of foot - skeleton of foot - - - - - - - - phalanx of pes - - - - - A phalanx that is part of a hindlimb autopod[Automatically generated definition]. - bone of toe - digital bone of pes - digitus pedis phalanx - foot digit phalanx - foot phalanx - pedal phalanx - phalanges of hind digit - phalanx of digit of foot - phalanx of digitus pedis - phalanx of foot digit - phalanx of hind digit - phalanx of pes - phalanx of toe - toe phalanx - - - - - - - - face - - A subdivision of the head that has as parts the layers deep to the surface of the anterior surface, including the mouth, eyes, and nose (when present). In vertebrates, this includes the facial skeleton and structures superficial to the facial skeleton (cheeks, mouth, eyeballs, skin of face, etc). - facia/facies - visage - - - - - - - - skin of eyelid - - A zone of skin that is part of a eyelid [Automatically generated definition]. - blepharon zone of skin - eyelid skin - eyelid zone of skin - zone of skin of blepharon - zone of skin of eyelid - - - - - - - - skin of external ear - - A zone of skin that is part of a external ear [Automatically generated definition]. - auricular region of head zone of skin - auricular region zone of skin - ear skin - external ear skin - external ear zone of skin - outer ear zone of skin - zone of skin of auricular region - zone of skin of auricular region of head - zone of skin of external ear - zone of skin of outer ear - - - - - - - - arm - - - The part of the forelimb extending from the shoulder to the autopod[cjm]. - brachium - upper extremity - - - - - - - - knee - - A segment of the hindlimb that corresponds to the joint connecting a hindlimb stylopod and zeugopod. - knee region - - - - - - - - pedal digit - - A digit that is part of a pes (foot). - digit of foot - digit of terminal segment of lower limb - digiti pedis - digiti pedis - digitipedis - digitus pedis - foot digit - hind digit - hind_digit - hindlimb digit - pedal digit (phalangeal portion) plus soft tissue - pes digit - toe - - - - - - - - intervertebral joint - - The joint between adjacent vertebral bodies. May be composed of the nucleus pulposus, annular ligament, and the anterior and posterior longitudinal ligaments. - inter-centrum joint - inter-vertebral joint - intervertebral symphysis - joint of vertebral body - vertebral joint - - - - - - - - skin of prepuce of penis - - foreskin of penis - penis foreskin - preputial skin - the loose fold of skin that covers the penis - - - - - - - - vaginal venous plexus - - - The vaginal plexuses are placed at the sides of the vagina; they communicate with the uterine, vesical, and hemorrhoidal plexuses, and are drained by the vaginal veins, one on either side, into the hypogastric veins. [WP,unvetted]. - plexus venosus vaginalis - venous vaginal plexus - - - - - - - - lymphatic vessel - - - A vessel that contains or conveys lymph, that originates as an interfibrillar or intercellular cleft or space in a tissue or organ, and that if small has no distinct walls or walls composed only of endothelial cells and if large resembles a vein in structure[BTO]. - lymph vessel - vas lymphaticum - - - - - - - - bone element - - - - - Skeletal element that is composed of bone tissue. - bone - bone element - bone organ - bones - - - - - - - - sesamoid bone - - - A sesamoid element that is composed of bone tissue. - ossa sesamoidea - sesamoid - - - - - - - - knee joint - - - The knee joint joins the thigh with the leg and consists of two articulations: one between the femur and tibia, and one between the femur and patella. It is the largest and most complicated joint in the human body. The knee is a mobile trocho-ginglymus (i.e. a pivotal hinge joint), which permits flexion and extension as well as a slight medial and lateral rotation[WP,unvetted]. - articulatio genus - joint of knee - - - - - - - - pes joint - - - - A skeletal joint that is part of a pes [Automatically generated definition]. - articulationes pedis - foot joint - hind limb autopod joint - joint of pes - joint of terminal segment of free lower limb - joints of foot - pedal joint - - - - - - - - ankle joint - - - A joint that connects the hindlimb autopod and zeugopod skeletons. - gambrel - hock - hock joint - mortise joint - talocrural articulation - talocrural joint - talotibial joint - - - - - - - - manus joint - - - - A skeletal joint that is part of a manus (hand) [Automatically generated definition]. - articulationes manus - hand joint - joint of hand - joint of manus - joint of terminal segment of free upper limb - manual joint - - - - - - - - muscle of pelvic girdle - - - Any muscle organ that is part of a pelvic girdle [Automatically generated definition]. - girdle-pelvic muscle organ - muscle organ of girdle-pelvic - muscle organ of pelvic girdle - muscle organ of pelvic girdle bone - pelvic girdle muscle - pelvic girdle muscle organ - pelvic girdle skeletal muscle - - - - - - - - muscle of pes - - Any muscle organ that is part of a pes [Automatically generated definition]. - foot muscle - foot muscle organ - muscle of foot - muscle organ of foot - - - - - - - - muscle of arm - - A muscle organ that is part of an arm [Automatically generated definition]. - arm muscle - arm muscle system - arm skeletal muscle - arm skeletal muscle tissue - muscle of upper arm or lower arm - upper arm / lower arm muscle - - - - - - - - muscle of manus - - Any muscle organ that is part of a manus [Automatically generated definition]. - hand muscle - manus muscle - manus muscle organ - muscle of hand - muscle organ of manus - - - - - - - - skin of knee - - A zone of skin that is part of a knee [Automatically generated definition]. - knee skin - knee zone of skin - zone of skin of knee - - - - - - - - skin of leg - - A zone of skin that is part of a leg [Automatically generated definition]. - leg skin - leg zone of skin - zone of skin of leg - - - - - - - - skin of pes - - - A zone of skin that is part of a pes [Automatically generated definition]. - foot skin - skin of foot - skin of hind-paw - - - - - - - - thoracic aorta - - aorta thoracalis - aorta thoracica - pars thoracica aortae - the part of the aorta that extends from the origin at the heart to the diaphragm, and from which arises numerous branches that supply oxygenated blood to the chest cage and the organs within the chest - thoracic part of aorta - - - - - - - - skin of manus - - - A zone of skin that is part of a manus [Automatically generated definition]. - hand skin - manus skin - skin of fore-paw - skin of hand - - - - - - - - brachiocephalic artery - - brachiocephalic trunk - innominate - innominate artery - the short first aortic arch branch and divides into the right subclavian artery and the right common carotid artery - truncus brachiocephalicus - truncus brachiocephalicus - - - - - - - - subclavian artery - - One of two laterally paired arteries that supplies the pectoral appendages, usually branching from the dorsal aorta - PA - arteria subclavia - arteria subclavia - arterial tree of upper limb - pectoral artery - subclavian arterial tree - - - - - - - - kidney arcuate artery - - - One of the curved arteries at the corticomedullary border of the kidney that arise from the interlobar arteries and give rise to the interlobular arteries. - arcuate artery - renal arcuate artery - - - - - - - - digestive tract - - A tube extending from the mouth to the anus. - alimentary canal - alimentary tract - digestive canal - digestive tube - enteric tract - gut - gut tube - - - - - - - - lower urinary tract - - Subdivision of urinary system which consists of the urinary bladder and the urethra. - - - - - - - - upper respiratory tract - - - The segment of the respiratory tract that starts proximally with the nose and ends distally with the cricoid cartilage, before continuing to the trachea. - - - - - - - - lower respiratory tract - - The segment of the respiratory tract that starts proximally with the trachea and includes all distal structures including the lungs[WP,modified] - - - - - - - - neck of organ - - organ neck - - - - - - - - extrinsic muscle of tongue - - A muscle organ that attaches the tongue to some other structure. - extrinsic lingual muscle - extrinsic tongue muscle - - - - - - - - intrinsic muscle of tongue - - - The intrinsic tongue muscles are an integral part of the tongue and completely contained within the tongue that are innervated by Cranial Nerve XII. - intrinsic lingual muscle - intrinsic tongue muscle - - - - - - - - facial muscle - - - A muscle innervated by a facial nerve. - cranial-facial muscle - cranio-facial muscle - craniofacial muscle - face muscle - face muscle organ - facial muscle - facial muscle proper - facial nerve innervated muscle - facial nerve muscle - mimetic muscles - muscle of face - muscle of facil expression - muscle organ of face - muscles of facial expression - musculi faciei - - - - - - - - venous plexus - - - A congregation of multiple veins. - plexus venosus - rete venosum - venous network - - - - - - - - ciliary muscle - - - Bowman`s muscles - The ciliary muscle is a ring of smooth muscle in the middle layer of the eye that controls the eye's accommodation for viewing objects at varying distances and regulates the flow of aqueous humour through Schlemm's canal. [WP,unvetted]. - ciliaris - musculus ciliaris - musculus ciliarus - - - - - - - - muscle of iris - - . - iris muscle - iris muscle organ - muscle organ of iris - - - - - - - - sphincter pupillae - - - - A sphincter muscle that is part of the iris. - M. sphincter pupillae - circular fibers - constrictor pupillae - iris constrictor - iris constrictor muscle - iris sphincter - iris sphincter muscle - m. sphincter pupillae - musculus sphincter pupillae - pupillary constrictor muscle - pupillary sphincter - pupillary sphincter muscle - sphincter muscle of pupil - sphincter pupillae - sphincter pupillae muscle - spincter pupillae - - - - - - - - dilatator pupillae - - A smooth muscle of the eye, running radially in the iris that functions as a dilator. [WP,unvetted]. - dilator muscle of pupil - dilator of pupil - dilator pupillae - dilator pupillae muscle - dilator pupillae muscle - iris dilator - iris dilator muscle - musculus dilatator pupillae - musculus dilatator pupillae - musculus dilator pupillae - pupil dilator - pupil dilator muscle - pupillary dilator - pupillary dilator muscle - pupillary muscle - radial muscle - radial muscle of iris - radiating fibers - - - - - - - - coronary artery - - - An artery that supplies the myocardium. - coronary arterial tree - coronary vessel - - - - - - - - muscle organ - - - Organ consisting of a tissue made up of various elongated cells that are specialized to contract and thus to produce movement and mechanical work[GO]. - muscle - - - - - - - - artery - - An epithelial tube or tree of tibes that transports blood away from the heart[modified from AEO definition]. - arterial subtree - arterial system - arterial tree organ part - arterial vessel - arteries - - - - - - - - vein - - Any of the tubular branching vessels that carry blood from the capillaries toward the heart. - vascular element - vena - venae - venous subtree - venous tree organ part - venous vessel - - - - - - - - facial nerve - - 7n - CN-VII - Cranial nerve that branches into the supraorbital (supplying the skin of the eye region and the lateral line organs here), the palatine (to the roof of the buccal cavity), and the hyomandibular (dividing into the jugular and mental branches). - branchiomeric cranial nerve - cranial nerve VII - face nerve - facial VII - facial VII nerve - facial nerve [VII] - facial nerve or its root - facial nerve tree - facial nerve/root - nerve VII - nerve of face - nervus facialis - nervus facialis - nervus facialis [vii] - seventh cranial nerve - - - - - - - - temporal bone - - - - os temporale - the large, irregular bone located at the base and side of the skull; consists of three parts at birth: squamous, tympanic, and petrous - - - - - - - - ear - - - Sense organ in vertebrates that is specialized for the detection of sound, and the maintenance of balance. Includes the outer ear and middle ear, which collect and transmit sound waves; and the inner ear, which contains the organs of balance and (except in fish) hearing. Also includes the pinna, the visible part of the outer ear, present in some mammals. - auditory apparatus - auris - - - - - - - - external ear - - - Part of the ear external to the tympanum (eardrum). It typically consists of a tube (the external auditory meatus) that directs sound waves on to the tympanum, and may also include the external pinna, which extends beyond the skull[GO]. - auricular region - auricular region of head - auris externa - outer ear - - - - - - - - petrous part of temporal bone - - - The petrous portion of the temporal bone or pyramid is pyramidal and is wedged in at the base of the skull between the sphenoid and occipital bones. Directed medially, forward, and a little upward, it presents for examination a base, an apex, three surfaces, and three angles, and contains, in its interior, the essential parts of the organ of hearing. The petrous portion is among the most basal elements of the skull and forms part of the endocranium.[WP,unvetted]. - pars petrosa (os temporale) - pars petrosa ossis temporalis - petromastoid part of temporal bone - petrosal - petrosal bone - petrous bone - temporal bone petrous part - - - - - - - - neurocranium - - Subdivision of skeletal system that surrounds and protects the brain. Includes the skull base, sensory capsules and the central part of the skull roof. - brain box - brain case - brain pan - braincase - - - - - - - - nasal cavity - - An anatomical cavity that is part of the olfactory apparatus. This includes the space bounded anteriorly by the nares and posteriorly by the choanae, when these structures are present. - cavitas nasalis - cavitas nasi - cavity of nose - cavity of olfactory apparatus - cavum nasi - nasal canal - nasal conduit space - nasal fossa - nasal pit - olfactory cavity - olfactory chamber - olfactory chamber cavity - olfactory pit - - - - - - - - jaw skeleton - - - Subdivision of skeleton which includes upper and lower jaw skeletons. - anterior splanchnocranium - jaw - jaw cartilage - jaws - mandibular arch - mandibular arch skeleton - oral jaw skeleton - pharyngeal arch 1 skeleton - visceral arch 1 - - - - - - - - lower jaw region - - - Subdivision of head that consists of the lower jaw skeletal elements plus associated soft tissue (skin, lips, muscle)[cjm]. - lower part of mouth - mandibular part of mouth - mandibular series - - - - - - - - eyelid - - - A fold of skin that covers and protects part of the eyeball. Examples: upper eyelid, lower eyelid, nictitating membrane - blephara - blepharon - eye lid - palpebra - palpebrae - - - - - - - - cranial ganglion - - cranial ganglia - cranial ganglion - cranial ganglion part of peripheral nervous system - cranial ganglion/nerve - cranial nerve ganglion - cranial neural ganglion - cranial neural tree organ ganglion - ganglion of cranial nerve - ganglion of cranial neural tree organ - head ganglion - presumptive cranial ganglia - the groups of nerve cell bodies associated with the twelve cranial nerves - - - - - - - - tongue - - - - A muscular organ in the floor of the mouth. - glossus - - - - - - - - nasopharynx - - Nasenrachenraum - epipharynx - nasal part of pharynx - pars nasalis pharyngis - rhinopharynx - the section of the pharynx that lies above the soft palate - - - - - - - - tonsillar ring - - Waldeyer's ring - Waldeyer's tonsillar ring - anulus lymphoideus pharyngis - oropharyngeal lymphoid tissue - pharyngeal lymphatic ring - pharyngeal lymphoid ring - the circular lymphoid tissue formed by the lingual, pharyngeal, and facial tonsils - - - - - - - - lymphoid tissue - - Portion of connective tissue with various types of white blood cells enmeshed in it, most numerous being the lymphocytes[WP]. - lymphatic tissue - lymphocytic tissue - - - - - - - - secondary nodular lymphoid tissue - - A lymphoid follicle that contains a germinal center. - peripheral lymphoid tissue - secondary lymphoid nodule - secondary lymphoid tissue - - - - - - - - capsule of thyroid gland - - - capsula fibrosa glandulae thyroideae - fibrous capsule of thyroid gland - thyroid capsule - thyroid gland capsule - - - - - - - - parenchyma of thyroid gland - - - - A parenchyma that is part of a thyroid follicle [Automatically generated definition]. - parenchyma glandulae thyroideae - parenchyma of thyroid - parenchyma of thyroid follicle - parenchyma of thyroid gland follicle - thyroid follicle parenchyma - thyroid gland follicle parenchyma - thyroid gland parenchyma - thyroid parenchyma - - - - - - - - parenchyma of parathyroid gland - - A parenchyma that is part of a parathyroid gland [Automatically generated definition]. - parathyroid gland parenchyma - parathyroid parenchyma - parenchyma of parathyroid - - - - - - - - lacrimal apparatus - - - A network of orbital structures of the eye that secrete and drain tears from the surface of the eyeball into the nasal cavity; these parts include the lacrimal glands, lacrimal lake, lacrimal ducts, lacrimal canals, lacrimal sacs, nasolacrimal ducts, and lacrimal puncta. - apparatus lacrimalis - lacrimal drainage system - lacrymal system - nasolacrimal drainage system - nasolacrimal system - - - - - - - - dentine - - - Collagen-rich odontogenic tissue characteristic of teeth and tooth-like skeletal elements (e.g., odontodes); mature dentine is mineralized and develops from predentine tissue; often (but not always) tubular and acellular. - dentin - dentine of tooth - predentin - - - - - - - - enamel - - - A dentine-like hypermineralized substance that covers the tooth tip. Enamel's primary mineral is hydroxylapatite, which is a crystalline calcium phosphate. Unlike dentin and bone, enamel does not contain collagen. Instead, it has two unique classes of proteins called amelogenins and enamelins[WP]. - enamel of tooth - enamel tissue - enameloid - tooth enamel - - - - - - - - cementum - - Odontoid tissue that is deposited by cementoblasts onto dentine tissue and functions to attach teeth, odontodes and other odontogenic derivatives to bone tissue and the integument. - bone of attachment - cement - cement of tooth - cementum - cementum of tooth - - - - - - - - dental pulp - - - The part in the center of a tooth made up of living soft tissue and cells called odontoblasts[WP]. - dental pulp cell - pulp of tooth - tooth pulp - - - - - - - - middle ear - - The middle ear is the air-filled cavity within the skull of vertebrates that lies between the outer ear and the inner ear. It is linked to the pharynx (and therefore to outside air) via the Eustachian tube and in mammals contains the three ear ossicles, which transmit auditory vibrations from the outer ear (via the tympanum) to the inner ear (via the oval window)[GO]. - auris media - - - - - - - - pinna - - - The part of the ear that projects from the head, connecting to the external acoustic meatus. - auricle - auricle of ear - auricle of external ear - auricula - auricula (auris externa) - pinna of ear - pinnae - - - - - - - - periodontium - - The tissues that invest or help to invest and support the teeth, including the periodontal ligament, gingivae, cementum, and alveolar and supporting bone[BTO]. - paradentium - periodontal ligament - periodontal membrane - tooth supporting structure - - - - - - - - odontogenic papilla - - - A condensation of odontoblasts that forms the part of a tooth germ that gives rise to dentin and pulp in the mature tooth. It lies below a cellular aggregation known as the enamel organ. - dental papilla - dentinal papilla - dermal papilla - odontogenic condensation - papilla dentis - pharyngeal tooth mesenchyme - tooth mesenchyme - - - - - - - - mammary duct - - - - Epithelial tube that transports milk[GO]. - ductus lactiferi - galactophorous duct - galactophorous tubule - lactiferous duct - lactiferous gland duct - lactiferous tubule - mammary gland duct - mammilary duct - - - - - - - - anterior chamber of eyeball - - anterior chamber - anterior chamber of eye - camera anterior - camera anterior bulbi - camera anterior bulbi oculi - camera oculi anterior - eye anterior chamber - the space in the eye, filled with aqueous humor, and bounded anteriorly by the cornea and a small portion of the sclera and posteriorly by a small portion of the ciliary body, the iris, and part of the crystalline lens - - - - - - - - uvea - - - - pars iridica retinae - the pigmented middle of the three concentric layers that make up an eye, consisting of the iris, ciliary body and choroid[WP,edited]. - tunica vasculatis oculi - tunica vasculosa bulbi - tunica vasculosa of eyeball - uvea - uveal tract - vascular layer of eyeball - - - - - - - - iris - - - anterior uvea - irides - irises - the adjustable membrane, composed of the stroma and pigmented epithelium, located just in front of the crystalline lens within the eye - - - - - - - - lacrimal canaliculus - - - The part of the lacrimal duct that connects the lacrimal punctum to the lacrimal sac. - canaliculus lacrimalis - - - - - - - - corneal epithelium - - - anterior corneal epithelium - anterior endothelium of cornea - cornea epithelial tissue - cornea epithelium - e. anterius corneae - endothelium anterius corneae - endothelium camerae anterioris bulbi - endothelium corneale - epithelial tissue of cornea - epithelium anterius (cornea) - epithelium anterius corneae - epithelium corneæ anterior layer - epithelium of cornea - epithelium posterius corneae - external epithelium of cornea - the smooth stratified squamous epithelium that covers the outer surface of the cornea - - - - - - - - sclera - - - Opaque fibrous outer layer of the eyeball[ZFA,Kardong,WP]. - scleral capsule - - - - - - - - skeletal muscle of trunk - - - A skeletal muscle organ that is part of the trunk region. - body musculature - muscle of trunk - muscle organ of torso - muscle organ of trunk - torso muscle organ - trunk muscle - trunk muscle organ - trunk musculature - - - - - - - - ciliary body - - - anterior uvea - ciliary bodies - corpus ciliare - ocular ciliary body - the thickened portion of the vascular tunic, which lies between the choroid and the iris, composed of ciliary muscle and ciliary processes - - - - - - - - optic choroid - - - chorioid - choroid - choroid coat - choroidea - choroidea - eye choroid - optic choroid - posterior uvea - vascular layer containing connective tissue, of the eye lying between the retina and the sclera. The choroid provides oxygen and nourishment to the outer layers of the retina. Along with the ciliary body and iris, the choroid forms the uveal tract[WP]. - - - - - - - - substantia propria of cornea - - - corneal stroma - stroma of cornea - substantia propria - substantia propria corneae - the lamellated connective tissue of the cornea between the Bowman and Descemet membranes - - - - - - - - ciliary epithelium - - - A double layer covering the ciliary body that produces aqueous humor. - ciliary body epithelium - epithelium of ciliary body - ocular ciliary epithelium - - - - - - - - iris stroma - - - The delicate vascular connective tissue that lies between the anterior surface of the iris and the pars iridica retinae. - iridial stroma - stroma of iris - - - - - - - - spinal nerve - - backbone nerve - nerve of backbone - nerve of spinal column - nerve of spine - nerve of vertebral column - nervi spinales - spinal column nerve - spinal nerve tree - spinal nerves - spine nerve - the any of the paired peripheral nerves formed by the union of the dorsal and ventral spinal roots from each spinal cord segment[MP,modified] - vertebral column nerve - - - - - - - - layer of retina - - Any of the layers that make up the retina[MP]. - retina layer - retina neuronal layer - retinal layer - retinal neuronal layer - - - - - - - - pigmented layer of retina - - - - A monolayer of pigmented epithelium covering the neural retina; develops from the outer of the two layers of the optic cup[ZFA]. the pigmented cell layer just outside the neurosensory retina that nourishes retinal visual cells, and is firmly attached to the underlying choroid and overlying retinal visual cells[WP]. - PRE - RPE - epithelium, retinal pigment - outer pigmented layer of retina - p. pigmentosa retinae - pigment epithelium of retina - pigmented epithelium - pigmented retina - pigmented retina epithelium - pigmented retinal epithelium - retinal pigment epithelium - retinal pigment layer - retinal pigmented epithelium - stratum pigmentosa retinae - stratum pigmentosum (retina) - stratum pigmentosum retinae - - - - - - - - cranial nerve - - - Cranial nerves are nerves that emerge directly from the brain, in contrast to spinal nerves, which emerge from segments of the spinal cord. - cranial nerves - cranial neural tree organ - nervus cranialis - - - - - - - - inner nuclear layer of retina - - Cytoarchitectural layer of retina containing closely packed cell bodies, the majority of which are bipolar cells (adapted from Wikipedia). - INL - inner nuclear layer - intermediate cell layer - layer of inner granules - neural retina inner nuclear layer - retina inner nuclear layer - retina, inner nuclear layer - retinal inner nuclear layer - stratum nucleare internum - stratum nucleare internum retinae - - - - - - - - aqueous humor of eyeball - - - A thick watery refractive medium that fills the space between the lens and the cornea[WP]. - aqueous humor - aqueous humour - humor aquosus - - - - - - - - vitreous humor - - A transparent, semigelatinous substance that fills the cavity behind the crystalline lens of the eye and in front of the retina - humor vitreous - humor vitreus - humoral fluid - ocular fluid - portion of vitreous humor - vitreous - vitreous fluid - vitreous humour - whole portion of vitreous humor - - - - - - - - vitreous body - - - - Gelatinous mucoid tissue that is composed of vitreous humor and fills the cavity behind the crystalline lens of the eye and in front of the retina[MP,modified] - - - - - - - - vitreous chamber of eyeball - - The chamber in the eyeball enclosing the vitreous humor, bounded anteriorly by the lens and ciliary body and posteriorly by the posterior wall of the eyeball[BTO,modified]. - camera postrema - camera postrema bulbi oculi - camera vitrea - camera vitrea bulbi - postremal chamber - postremal chamber of eyeball - vitreous chamber - - - - - - - - sensory ganglion - - The clusters of neurons in the somatic peripheral nervous system which contain the cell bodies of sensory nerve axons, interneurons and non-neuronal supporting cells. - ganglion sensorium - - - - - - - - anterior segment of eyeball - - - - anterior eye segment - anterior segment eye - anterior segment of eye - anterior segment of the eye - any of the parts of the eye that lie in front of, or ventral to, the lens (inclusive) - eye anterior segment - segmentum anterius (bulbus oculi) - segmentum anterius bulbi oculi - - - - - - - - posterior segment of eyeball - - - any of the parts of the eye that lie in back of, or dorsal to, the lens (but not inclusive) - eye posterior segment - posterior eye segment - posterior segment eye - posterior segment of eye - posterior segment of the eye - segmentum posterius (bulbus oculi) - segmentum posterius bulbi oculi - - - - - - - - epithelium of lens - - - A layer of epithelial cells that is part of the eye. - epithelial tissue of eye lens - epithelial tissue of lens - epithelium lentis - epithelium of eye lens - eye lens epithelial tissue - eye lens epithelium - lens epithelial tissue - lens epithelium - - - - - - - - autonomic ganglion - - autonomic nervous system ganglion - ganglion autonomicum - ganglion of autonomic nervous system - ganglion of visceral nervous system - ganglion that has dendrites that form a junction between autonomic nerves originating from the central nervous system and autonomic nerves innervating their target organs in the periphery. There are two subtypes, sympathetic ganglion and parasympathetic ganglion. - visceral nervous system ganglion - - - - - - - - sympathetic ganglion - - - A ganglion of the sympathetic nervous system. Examples: paravertebral and the prevertebral ganglia, which include the sympathetic chain ganglia, the superior, middle, and inferior cervical ganglia, and the aorticorenal, celiac, and stellate ganglia - ganglion of sympathetic nervous system - ganglion of sympathetic part of autonomic division of nervous system - ganglion sympatheticum - ganglion sympathicum - sympathetic nervous system ganglion - sympathetic part of autonomic division of nervous system ganglion - - - - - - - - paravertebral ganglion - - - Trunk ganglion which is part of a bilaterally paired set of sympathetic ganglia located anterior and lateral to the spinal cord. - ganglia of sympathetic trunk - ganglia trunci sympathici - ganglion of sympathetic trunk - ganglion trunci sympathetici - ganglion trunci sympathici - paravertebral ganglia - paravertebral ganglion - sympathetic chain ganglia - sympathetic chain ganglion - - - - - - - - conjunctiva - - - conjunctivae - conjunctivas - the mucous membrane that lines the inner surface of the eyelids and the front of the eyeball - tunica conjunctiva - wall of conjunctival sac - - - - - - - - lacrimal gland - - - - - - The lacrimal glands are paired almond-shaped glands, located in or near the orbital region, that secrete the aqueous layer of the tear film.[WP]. - glandula lacrimalis - glandula praeorbitalis - lacrimal-preorbital gland - preorbital gland - tear gland - - - - - - - - sweat gland - - - any of the coil glands of the skin that secrete sweat - glandula sudorifera - sudoriferous gland - sudoriparous gland - - - - - - - - sebaceous gland - - - - A holocrine gland that secretes sebum into the hair follicles, or in hairless areas into ducts.[MP]. - glandula sebacea - glandula sebaceae - sebaceous follicle - - - - - - - - nasal cartilage - - - - - One of the cartilage structures in the nose that provide form and support[WP]. - cartilage of nose - - - - - - - - nasal cavity mucosa - - - - The mucous membrane that lines the nasal cavity[MP]. - mucosa of nose - mucous membrane of nose - nasal mucosa - tunica mucosa nasalis - tunica mucosa nasi - - - - - - - - gingiva - - The fibrous investing tissue, covered by keratinized epithelium, that immediately surrounds a tooth and is contiguous with its periodontal ligament and with the mucosal tissues of the mouth[Glossary of Periodontal Terms 2001]. - gingival mucosa - gum - gum tissue - gums - - - - - - - - saliva - - A fluid produced in the oral cavity by salivary glands, typically used in predigestion, but also in other functions. - sailva normalis - saliva atomaris - saliva molecularis - salivary gland secretion - - - - - - - - duct of salivary gland - - The duct of a salivary gland. - salivary duct - salivary gland duct - secretory duct - - - - - - - - bony labyrinth - - - A system of fluid passages in the inner ear, including both the cochlea, which is part of the auditory system, and the vestibular system, which provides the sense of balance. The bony labyrinth, or osseous labyrinth, is the network of passages with bony walls lined with periosteum. The bony labyrinth is lined with the membranous labyrinth. There is a layer of perilymph between them. The three parts of the bony labyrinth are the vestibule of the ear, the semicircular canals, and the cochlea. The vestibular system is the region of the inner ear where the semicircular canals converge, close to the cochlea (the hearing organ). The vestibular system works with the visual system to keep objects in focus when the head is moving. Joint and muscle receptors also are important in maintaining balance. The brain receives, interprets, and processes the information from these systems that control our balance. [WP,unvetted]. - labyrinthus osseus - osseous labyrinth - osseus labyrinth - - - - - - - - semicircular canal - - - - One of three half-circular, interconnected tubes located inside each ear[WP]. - canalis semicircularis - ductus semicirculares - scc - semicircular canals - semicircular ducts - - - - - - - - cochlea - - - cochleae - cochlear duct - cochlear organ - cochlear part of bony labyrinth - lagena - lagenas - the spiral-shaped bony canal in the inner ear containing the hair cells that transduce sound. Its core component is the Organ of Corti, the sensory organ of hearing, which is distributed along the partition separating fluid chambers in the coiled tapered tube of the cochlea. [WP,modified]. - - - - - - - - internal ear - - - - Complex labyrinthine structure that comprises sensory endorgans specialized for vestibular, auditory, and acoustico-vestibular sensation. - auris interna - inner ear - labyrinth - otocyst - - - - - - - - auricular cartilage - - - cartilage of pinna - cartilage of the pinna and much of the external ear canal. - pinna cartilage - - - - - - - - membranous labyrinth - - - - Organ with organ cavity which consists of the vestibular labyrinth and the cochlear labyrinth. The membranous labyrinth is lodged within the bony labyrinth and has the same general form; it is, however, considerably smaller and is partly separated from the bony walls by a quantity of fluid, the perilymph.[FMA, WP] - labyrinthus membranaceus - - - - - - - - lacrimal drainage system - - - A collection of channels that connects the conjunctival sac with the nasal cavity, encompassing the lacrimal ducts, the lacrimal sac and the naso-lacrimal duct. - tear duct - - - - - - - - cortex - - Outermost layer of an organ[WP]. - cortex - cortex of organ - - - - - - - - utricle of membranous labyrinth - - membranous labyrinth utricle - the larger of the two otolith organs in the vestibule - utricle - utriculus - utriculus (labyrinthus vestibularis) - - - - - - - - saccule of membranous labyrinth - - membranous labyrinth saccule - saccule - sacculus - sacculus - sacculus (labyrinthus vestibularis) - the smaller of the two otolith organs in the vestibule - - - - - - - - cochlear duct of membranous labyrinth - - - - An endolymph filled cavity inside the cochlea, located in between the scala tympani and the scala vestibuli, separated by the basilar membrane and Reissner's membrane (the vestibular membrane) respectively. Houses the organ of Corti[WP]. - Reissner's canal - Reissners canal - cochlea duct - cochlear aqueduct - cochlear duct - ductus cochlearis - membranous cochlea - scala media - scala medias - scala of Loewenberg - - - - - - - - semicircular duct - - - - Any of the three loop-shaped membranous inner tubular parts of the semicircular canals that are about one-fourth the diameter of the corresponding outer bony canals, that communicate at each end with the utricle, and that have near one end an expanded ampulla containing an area of sensory epithelium - ductus semicirculares - membranous semicircular canal - - - - - - - - vestibular labyrinth - - - - The part of the membranous labyrinth that includes the utricle and saccule lodged within the vestibule and the semicircular ducts lodged eccentrically in the corresponding canals. - inner ear vestibular component - labyrinthus vestibularis - vestibular apparatus - vestibular component - - - - - - - - sebum - - Fatty lubricant matter secreted by sebaceous glands, and made of made of triglyceride oils, wax, squalene, and metabolytes of fat-producing cells[BTO,WP]. - - - - - - - - cartilage of external ear - - A cartilage that is part of a external ear [Automatically generated definition]. - external ear cartilage - - - - - - - - skin of chest - - A zone of skin that is part of a chest [Automatically generated definition]. - anterior thoracic region zone of skin - anterolateral part of thorax zone of skin - chest skin - chest zone of skin - front of thorax zone of skin - zone of skin of anterior chest - zone of skin of anterior part of thorax - zone of skin of anterior thoracic region - zone of skin of anterolateral part of thorax - zone of skin of chest - zone of skin of front of thorax - zone of skin of pectoral part of chest - - - - - - - - cerebral hemisphere - - - - - One of two bilateral, largely symmetrical organ subdivisions within the telencephalon which contain the cerebral cortex and cerebral white matter.[FMA] - cerebrum - hemisphere - hemispheric regions - hemispherium cerebri - medial amygdalar nucleus - nucleus amygdaloideus medialis - nucleus medialis amygdalae - - - - - - - - choroid plexus - - - - A network formed by blood vessels and the tela choroidea which secretes CSF into the ventricular spaces. - CP - chorioid plexus - choroid plexus of cerebral hemisphere - plexus choroideus - plexus choroideus - ventricular choroid plexus - - - - - - - - forebrain - - FB - The most anterior region the brain including both the telencephalon and diencephalon. - prosencephalon - - - - - - - - midbrain - - - MB - The midbrain is the middle division of the three primary divisions of the developing chordate brain or the corresponding part of the adult brain (in vertebrates, includes a ventral part containing the cerebral peduncles and a dorsal tectum containing the corpora quadrigemina and that surrounds the aqueduct of Sylvius connecting the third and fourth ventricles)[GO]. - mesencephalon - - - - - - - - rhombomere - - A segment of the developing hindbrain[ZFA]. In the vertebrate embryo, a rhombomere is a transiently divided segment of the developing neural tube, within the hindbrain region (a neuromere) in the area that will eventually become the rhombencephalon. The rhombomeres appear as a series of slightly constricted swellings in the neural tube, caudal to the cephalic flexure.[WP]. - future rhombencephalon - hindbrain neuromere - hindbrain neuromeres - hindbrain segment - rhombomere - rhombomeres - segment of hindbrain - - - - - - - - telencephalon - - - Part of the forebrain consisting of paired olfactory bulbs and cerebral hemispheres. - cerebrum - endbrain - supratentorial region - - - - - - - - diencephalon - - - DiE - The division of the forebrain that develops from the foremost primary cerebral vesicle. - between brain - betweenbrain - diencephalon - interbrain - mature diencephalon - thalamencephalon - - - - - - - - metencephalon - - Rostral segment of the hindbrain that has as its parts the pons (where present) and the cerebellum[WP,modified]. - epencephalon - epencephalon-2 - - - - - - - - medulla oblongata - - - - Organ component of neuraxis that has as its parts the medullary reticular formation, inferior olivary complex and cochlear nuclear complex, among other structures[FMA]. The medulla oblongata lies directly above the spinal cord and controls vital autonomic functions such as digestion, breathing and the control of heart rate[GO]. - bulb - bulbus - medulla - medulla oblonzata - metepencephalon - - - - - - - - hypothalamus - - A specialized brain region of the ventral diencephalon arising near the end of the segmentation period; the embryonic hypothalamic region will give rise to the posterior pituitary gland as well as a number of brain nuclei. [ZFA]. One of the most important functions of the hypothalamus is to link the nervous system to the endocrine system via the pituitary gland (hypophysis).[Wikipedia]. - Hy - hypothalamus - preoptico-hypothalamic area - preoptico-hypothalamic region - - - - - - - - epithelium of trachea - - epithelial tissue of trachea - epithelial tissue of windpipe - epithelium of windpipe - the epithelial lining of the trachea which contains numerous ciliated cells - trachea epithelial tissue - trachea epithelium - tracheal epithelium - windpipe epithelial tissue - windpipe epithelium - - - - - - - - epithelium of small intestine - - An epithelium that is part of a small intestine [Automatically generated definition]. - epithelial tissue of small bowel - epithelial tissue of small intestine - epithelium of small bowel - mid intestine epithelium - small bowel epithelial tissue - small bowel epithelium - small intestinal epithelium - small intestine epithelial tissue - small intestine epithelium - - - - - - - - mammary gland - - - A specialized accessory gland of the skin of mammals that secretes milk. The gland is typically only developed in females, and regresses in males. - Brustdruese - dug - glandula mammaria - glandula mammaria - lactiferous gland - lobe of breast - lobe of mammary gland - mamma - mammae - milk patch - - - - - - - - lobule of mammary gland - - - Organ component of the mammary gland which consists of an aggregate of mammary alveoli that communicate with a lobular lactiferous duct.[FMA] - acinus of mammary gland - lactiferous acinus - lactiferous gland lobule - lactiferous lobule - lobule of lactiferous gland - lobule of mammary gland - mammary acinus - mammary gland lobule - - - - - - - - milk - - - An emulsion of fat globules within a fluid that is secreted by the mammary gland during lactation. - mammary gland milk - - - - - - - - endothelium of capillary - - An endothelium that is part of a capillary [Automatically generated definition]. - blood capillary endothelium - capillary endothelium - capillary vessel endothelium - endothelium of blood capillary - endothelium of capillary vessel - - - - - - - - endothelium of arteriole - - - An endothelium that is part of an arteriole [Automatically generated definition]. - arteriole endothelium - - - - - - - - endothelium of artery - - - - An endothelium that is part of an artery [Automatically generated definition]. - arterial endothelium - artery endothelium - - - - - - - - endothelium of venule - - - An endothelium that is part of a venule [Automatically generated definition]. - venule endothelium - - - - - - - - endothelium of vein - - - An endothelium that is part of a vein [Automatically generated definition]. - vein endothelium - veinous endothelium - venous endothelium - - - - - - - - paraventricular nucleus of hypothalamus - - Nucleus in the anterior part of the hypothalamus. (MSH) * one of the magnocellular hypothalamic nuclei, an elongated plate of large, deeply staining cells located close to the third ventricle in the anterior hypothalamic area; major source of oxytocin and to a lesser extent, of antidiuretic hormone, neurohormones, which are carried to the neurohypophysis along the paraventriculohypophysial tract. (CSP) - Pa - filiform nucleus - nuclei paraventriculares - nuclei paraventricularis hypothalami - nucleus filiformis - nucleus hypothalami filiformis - nucleus hypothalami paraventricularis - nucleus paraventricularis hypothalami - paraventricular hypothalamic nucleus - paraventricular nucleus - paraventricular nucleus hypothalamus (Malone) - paraventricular nucleus of the hypothalamus - parvocellular hypothalamic nucleus - subcommissural nucleus (Ziehen) - - - - - - - - midbrain tegmentum - - MTg - Ventral part of the midbrain, separated from the hindbrain by the isthmus[ISBN10:0471888893]. Subdivision of the midbrain lying anterior to the tectum and posterior to the substantia nigra and cerebral peduncle[FMA] The part of the midbrain extending from the substantia nigra to the cerebral aqueduct in a horizontal section of the midbrain. It forms the floor of the midbrain that surrounds the cerebral aqueduct[WP]. - mesencephalic tegmentum - tegmentum - tegmentum mesencephali - tegmentum mesencephalicum - tegmentum of midbrain - - - - - - - - regional part of spinal cord - - - A multi-tissue structure that is part of a spinal cord. - spinal cord part - - - - - - - - gingival epithelium - - - - A stratified squamous epithelium consisting of a basal layer; it is keratinized or parakeratinized[BTO]. - epithelial tissue of gingiva - epithelium of gingiva - gingiva epithelial tissue - gingiva epithelium - - - - - - - - neocortex - - - An area of cerebral cortex defined on the basis of cytoarchitecture that have six layers. Starting from the cortical surface the layers are: molecular layer (I), external granular layer (II), external pyramidal layer (III), internal granular layer (IV), internal pyramidal layer (V), and multiform layer (VI). Neocortex is most prominent in the frontal lobe, the parietal lobe, the temporal lobe and the occipital lobe, less so in the cingulate gyrus, the parahippocampal gyrus and the insula. It is composed of two subdivisions: true isocortex and proisocortex (Carpenter-83)(NN) - cerebral neocortex - homogenetic cortex - homotypical cortex - iso-cortex - isocortex - isocortex (sensu lato) - neocortex (isocortex) - neopallial cortex - neopallium - nonolfactory cortex - nucleus hypoglossalis - - - - - - - - epithelium of nasopharynx - - - An epithelium that is part of a nasopharynx [Automatically generated definition]. - epithelial tissue of nasal part of pharynx - epithelial tissue of nasopharynx - epithelial tissue of rhinopharynx - epithelium of nasal part of pharynx - epithelium of rhinopharynx - nasal part of pharynx epithelial tissue - nasal part of pharynx epithelium - nasopharyngeal epithelium - nasopharynx epithelial tissue - nasopharynx epithelium - rhinopharynx epithelial tissue - rhinopharynx epithelium - - - - - - - - Ammon's horn - - - A part of the brain consisting of a three layered cortex located in the forebrain bordering the medial surface of the lateral ventricle. The term hippocampus is often used synonymously with hippocampal formation which consists of the hippocampus proper or Cornu Ammonis, the dentate gyrus and the subiculum. - Ammon horn fields - Ammon's horn - Ammons horn - ammon gyrus - ammon horn - cornu ammonis - hippocampus - hippocampus major - hippocampus proper - hippocampus proprius - - - - - - - - epithelium of respiratory bronchiole - - An epithelium that is part of a respiratory bronchiole [Automatically generated definition]. - bronchiolus respiratorius epithelial tissue - bronchiolus respiratorius epithelium - epithelial tissue of bronchiolus respiratorius - epithelial tissue of respiratory bronchiole - epithelium of bronchiolus respiratorius - respiratory bronchiole epithelial tissue - respiratory bronchiole epithelium - - - - - - - - cartilage of bronchus - - The hyaline cartilaginous structures that support the bronchi, present as irregular rings in the larger bronchi (and not as regular as in the trachea), and as small plates and islands in the smaller bronchi; as the branching continues through the bronchial tree, the amount of hyaline cartilage in the walls decreases until it is absent in the smallest bronchioles[MP]. - bronchi cartilage - bronchial cartilage - bronchial cartilage ring - bronchial trunk cartilage - bronchus cartilage - cartilage of bronchi - cartilage of bronchial trunk - cartilagines bronchiales - - - - - - - - submucosa of bronchus - - - A submucosa that is part of a bronchus [Automatically generated definition]. - bronchi submucosa - bronchial submucosa - bronchial trunk submucosa - bronchus submucosa - submucosa of bronchi - submucosa of bronchial trunk - submucous layer of bronchi - tela submucosa bronchi - - - - - - - - terminal bronchiole epithelium - - An epithelium that lines a terminal bronchiole. - bronchiolus terminalis epithelial tissue - bronchiolus terminalis epithelium - epithelial tissue of bronchiolus terminalis - epithelial tissue of terminal bronchiole - epithelium of bronchiolus terminalis - epithelium of terminal bronchiole - terminal bronchiole epithelial tissue - terminal bronchiole epithelium - - - - - - - - white pulp of spleen - - noduli lymphoidei splenici - pulpa alba - spleen white pulp - splenic white pulp - the parenchymatous tissue of the spleen that surrounds splenic blood vessels, consists of compact masses of lymphatic cells and is where foreign material removed from the blood is used to initiate an immune reaction that results in the production of antibodies - white pulp - - - - - - - - mucosa-associated lymphoid tissue - - MALT - diffuse system of small concentrations of lymphoid tissue found in various sites of the body such as the gastrointestinal tract, thyroid, breast, lung, salivary glands, eye, and skin[WP]. Mucosal-associated lymphoid tissue is typically found as nodules associated with mucosal epithelia with distinct internal structures including B- and T-zones for the activation of lymphocytes[GO]. - epithelio-lymphoid tissue - mucosa associated lymphatic tissue - mucosa associated lymphoid tissue - mucosa-associated lymphoid tissue - mucosal-associated lymphatic tissue - mucosal-associated lymphoid tissue - - - - - - - - gut-associated lymphoid tissue - - GALT - Mucosa-associated lymphoid tissue in digestive tract. includes Peyer's patches, appendix, and solitary lymph nodules[GO]. - gut associated lymphoid tissue - - - - - - - - bronchial-associated lymphoid tissue - - - A diffuse collection of lymphpoid cells that participate in airway immune responses - BALT - bronchus associated lymphoid tissue - - - - - - - - blood plasma - - The liquid component of blood, in which erythrocytes are suspended. - blood plasm - plasma - portion of blood plasma - portion of plasma - - - - - - - - bile - - - fel - gall - vital aqueous secretion of the liver that is formed by hepatocytes and modified down stream by absorptive and secretory properties of the bile duct epithelium. - - - - - - - - submucosa of esophagus - - A submucosa that is part of a esophagus [Automatically generated definition]. - esophageal submucosa - esophagus submucosa - gullet submucosa - oesophagus submucosa - submucosa of esophagus - submucosa of gullet - submucosa of oesophagus - submucous layer of esophagus - tela submucosa (oesophagus) - tela submucosa esophagi - tela submucosa oesophageae - tela submucosa oesophagi - tela submucosa of esophagus - - - - - - - - lamina propria of esophagus - - A lamina propria that is part of a esophagus [Automatically generated definition]. - esophageal lamina propria - esophagus lamina propria - esophagus lamina propria mucosa - esophagus lamina propria mucosae - gullet lamina propria - gullet lamina propria mucosa - gullet lamina propria mucosae - lamina propria mucosa of esophagus - lamina propria mucosa of gullet - lamina propria mucosa of oesophagus - lamina propria mucosae of esophagus - lamina propria mucosae of gullet - lamina propria mucosae of oesophagus - lamina propria of gullet - lamina propria of oesophagus - oesophagus lamina propria - oesophagus lamina propria mucosa - oesophagus lamina propria mucosae - - - - - - - - serosa of esophagus - - A serous membrane that is part of a esophagus [Automatically generated definition]. - esophagus serosa - esophagus serous membrane - gullet serosa - gullet serous membrane - oesophagus serosa - oesophagus serous membrane - serosa of abdominal part of esophagus - serosa of gullet - serosa of oesophagus - serous coat of oesophagus - serous membrane of esophagus - serous membrane of gullet - serous membrane of oesophagus - tunica serosa oesophageae - - - - - - - - epithelium of esophagus - - - epithelial tissue of esophagus - epithelial tissue of gullet - epithelial tissue of oesophagus - epithelium of gullet - epithelium of oesophagus - esophageal epithelium - esophagus epithelial tissue - esophagus epithelium - gullet epithelial tissue - gullet epithelium - oesophagus epithelial tissue - oesophagus epithelium - the epithelial layer that lines the luminal space of the esophagus - - - - - - - - venule - - One of the minute vessels that collect deoxygenated blood from the capillary plexuses returns it to the veins - venula - - - - - - - - arteriole - - The smallest division of the artery located between the muscular arteries and the capillaries[GO]. - arteriola - - - - - - - - blood vessel - - - A vessel through which blood circulates in the body. - region of vascular tree organ - vas sanguineum - vascular element - vascular tree organ region - - - - - - - - capillary - - - Any of the smallest blood vessels connecting arterioles with venules. - blood capillary - capillary vessel - - - - - - - - crypt of Lieberkuhn - - Lieberkuhn crypt - Lieberkuhn gland - Lieberkuhn's gland - Lieberkuhn's glands - crypt of Lieberkuhn - crypt of Lieberkühn - crypts of Lieberkühn - follicles of lieberkuhn - intestinal crypt - intestinal crypts - intestinal gland - intestinal gland of Lieberkuhn - lieberkuhn crypt - the tubular intestinal glands found in the mucosal membranes - - - - - - - - crypt of Lieberkuhn of large intestine - - A crypt of lieberkuhn that is part of a large intestine [Automatically generated definition]. - intestinal gland of large intestine - large intestinal crypt of Lieberkuhn - large intestine crypt of Lieberkuhn - large intestine intestinal gland - large intestine lieberkuhn crypt - lieberkuhn crypt of large intestine - - - - - - - - corneal endothelium - - - - A monolayer of specialized, flattened, mitochondria-rich cells that lines the posterior surface of the cornea and faces the anterior chamber of the eye[WP]. - cornea endothelium - endothelium of cornea - epithelium posterius corneae - - - - - - - - endothelium - - - A layer of epithelium that lines the heart, blood vessels (endothelium, vascular), lymph vessels (endothelium, lymphatic), and the serous cavities of the body[MESH]. Simple squamous epithelium which lines blood and lymphatic vessels and the heart[FMA] - - - - - - - - placenta - - - - allantoic placenta - eutherian placenta - organ of metabolic interchange between fetus and mother, partly of embryonic origin and partly of maternal origin[GO]. The fetal portion of the placenta is known as the villous chorion. The maternal portion is known as the decidua basalis. The two portions are held together by anchoring villi that are anchored to the decidua basalis by the cytotrophoblastic shell. - - - - - - - - feces - - Portion of semisolid bodily waste discharged through the anus[MW,modified] - cow dung - cow pat - droppings - dung - excrement - excreta - faeces - fecal material - fecal matter - fewmet - frass - guano - matières fécales@fr - merde@fr - ordure - partie de la merde@fr - piece of shit - porción de mierda@es - portion of dung - portion of excrement - portion of faeces - portion of fecal material - portion of fecal matter - portion of feces - portion of guano - portion of scat - portionem cacas - scat - spoor - spraint - stool - teil der fäkalien@de - - - - - - - - papillary layer of dermis - - - The upper layer of the dermis beneath the epidermis, composed of dense irregular connective tissue[ncit,modified]. - corpus papillary - dermal papillary layer - dermis papillary layer - papillary dermis - papillary layer - papillary layer of dermis - stratum papillare - stratum papillare - stratum papillare (dermis) - stratum papillare corii - stratum papillare dermis - superficial dermis - - - - - - - - hyaline cartilage tissue - - Cartilage tissue primarily composed of type II collagen (thin fibrils) and a glassy appearance. - chondroid cartilage - hyaline cartilage - - - - - - - - fibrocartilage - - Cartilage tissue intermediate between hyaline cartilage and dense connective tissue; contains of abundant collagen fibers; chondrocytes often arranged in columns. - fibrocartilage tissue - stratified cartilage tissue - - - - - - - - olfactory epithelium - - - A sensory epithelium inside the nasal cavity that is responsible for detecting odors[WP]. - MOE - main olfactory epithelium - nasal cavity olfactory epithelium - nasal epithelium - nasal sensory epithelium - olfactory membrane - olfactory sensory epithelium - pseudostratified main olfactory epithelium - sensory olfactory epithelium - - - - - - - - enteric nervous system - - - PNS - enteric - The enteric nervous system is composed of two ganglionated neural plexuses in the gut wall which form one of the three major divisions of the autonomic nervous system. The enteric nervous system innervates the gastrointestinal tract, the pancreas, and the gall bladder. It contains sensory neurons, interneurons, and motor neurons. Thus the circuitry can autonomously sense the tension and the chemical environment in the gut and regulate blood vessel tone, motility, secretions, and fluid transport. The system is itself governed by the central nervous system and receives both parasympathetic and sympathetic innervation[GO]. - enteric PNS - - - - - - - - cortex of lymph node - - Peripheral portion of the lymph node, underneath the capsule[WP]. - cortex nodi lymphoidei - lymph node cortex - - - - - - - - medulla of lymph node - - The mdeullary portion of the lymph node, which contains large blood vessels, sinuses and medullary cords that contain antibody-secreting plasma cells. - lymph node medulla - medulla nodi lymphoidei - - - - - - - - pulmonary artery - - - - An artery that carries deoxygenated blood from heart to the lungs. They are the only arteries (other than umbilical arteries in the fetus) that carry deoxygenated blood.. - arteria pulmonalis - pulmonary arterial subtree - pulmonary arterial tree - pulmonary arterial tree organ part - truncus pulmonalis - - - - - - - - pulmonary vein - - - Pulmonary veins are blood vessels that transport blood from the lungs to the heart[GO]. - pulmonary venous tree organ part - venae pulmonales - - - - - - - - portal vein - - A vein that conducts blood from the digestive organs, spleen, pancreas, and gallbladder to the liver[BTO]. - portal venous tree organ part - - - - - - - - synovial membrane of synovial joint - - - - Soft tissue that lines the non-cartilaginous surfaces within joints with cavities (synovial joints). - membrana synovialis (capsula articularis) - membrana synovialis capsulae articularis - stratum synoviale - stratum synoviale (capsula articularis) - synovial layer - synovial layer of articular capsule of synovial joint - synovial membrane - synovial membrane of articular capsule of synovial joint - synovium - synovium of articular capsule of synovial joint - - - - - - - - gray matter - - A nervous system structure composed primarily of nerve cell bodies (somas). May also include dendrites and the initial unmyelinated portion of axons. - gray mater - gray matter - gray matter of neuraxis - grey matter - grey matter of neuraxis - grey substance - grisea - neuronal grey matter - substantia grisea - - - - - - - - stratum basale of epidermis - - - - Malpighian layer - basal cell layer of epidermis - basal cell layer of skin - basal epidermal layer - basal layer of epidermis - epidermal basal stratum - epidermis basal layer - epidermis sensorial layer - epidermis stratum basale - epidermis stratum germinativum - rete Malphighii - rete Malpighii - stratum Malpighi - stratum basale - stratum basalis of epidermis - stratum germinativum - stratum germinosum - stratum germinosum of epidermis - the deepest layer of the epidermis, which is composed of dividing stem cells and anchoring cells - - - - - - - - stratum corneum of epidermis - - - cornified layer - epidermis stratum corneum - horny layer - horny layer of epidermis - keratinized squame layer - keratinized squame layer of epidermis - stratum corneum - stratum corneum epidermidis - the outer layer of the epidermis, consisting of several layers of flat keratinized non-nucleated cells - - - - - - - - hindbrain - - - The most posterior of the three principal regions of the brain. In mammals and birds the hindbrain is divided into a rostral metencephalon and a caudal myelencephalon. In zebrafish, with the exception of the cerebellum, the ventral remainder of the metencephalon can be separated only arbitrarily from the more caudal myelencephalic portion of the medulla oblongata (From: Neuroanatomy of the Zebrafish Brain)[ZFA]. Organ component of neuraxis that has as its parts the pons, cerebellum and medulla oblongata[FMA]. - rhombencephalon - - - - - - - - epithelium of gall bladder - - - The simple columnar epithelial lining of the gall bladder. - biliary epithelium - epithelial tissue of gall bladder - epithelial tissue of gallbladder - epithelium of gallbladder - gall bladder epithelial tissue - gall bladder epithelium - gallbladder epithelial tissue - gallbladder epithelium - - - - - - - - epithelium of bronchus - - An epithelium that is part of a bronchus [Automatically generated definition]. - bronchi epithelial tissue - bronchi epithelium - bronchial epithelium - bronchial trunk epithelial tissue - bronchial trunk epithelium - bronchus epithelial tissue - bronchus epithelium - epithelial tissue of bronchi - epithelial tissue of bronchial trunk - epithelial tissue of bronchus - epithelium of bronchi - epithelium of bronchial trunk - - - - - - - - arrector muscle of hair - - A tiny smooth muscle that connects the hair follicle with the dermis. - arectores pilorum - arrector pili - arrector pili muscle - arrector pili smooth muscle - arrector pilli - arrector pilli muscle - arrector pilorum - arrector pilorum muscle of hair - erector pili - erectores pilorum - pilomotor muscle - - - - - - - - striated muscle tissue - - Muscle tissue that contains fibers that are divided by transverse bands into striations. - striated muscle - - - - - - - - cerebellum - - - Part of the metencephalon that lies in the posterior cranial fossa behind the brain stem. It is concerned with the coordination of movement[MESH]. A large dorsally projecting part of the brain concerned especially with the coordination of muscles and the maintenance of bodily equilibrium, situated between the brain stem and the back of the cerebrum , and formed in humans of two lateral lobes and a median lobe[BTO]. Brain structure derived from the anterior hindbrain, and perhaps including posterior midbrain. The cerebellum plays a role in somatic motor function, the control of muscle tone, and balance[ZFA]. - corpus cerebelli - epencephalon-1 - infratentorial region - parencephalon - - - - - - - - substantia nigra - - Predominantly gray matter midbrain structure lying dorsal to the crus cerebri and ventral to the midbrain tegmentum. It is divided into a dorsal, cellularly compact region known as the pars compacta and a more ventrally located, containing more loosely packed cells, the pars reticulata. The most lateral region of the reticulata is identified as the pars lateralis (MM). - SN - Soemmering's substance - nucleus of basis pedunculi - nucleus pigmentosus subthalamo-peduncularis - substancia nigra - substantia nigra (Soemmerringi) - - - - - - - - lymphatic vessel endothelium - - An endothelium that is part of a lymphatic vessel [Automatically generated definition]. - endothelium of lymph vessel - endothelium of lymphatic vessel - lymph vessel endothelium - lymphatic endothelium - lymphatic vessel endothelium - - - - - - - - thyroid gland - - - - A two-lobed endocrine gland found in all vertebrates, located in front of and on either side of the trachea in humans, and producing various hormones, such as triiodothyronine and calcitonin[BTO]. - glandula thyroidea - thyroid - - - - - - - - lung - - - - - Respiration organ that develops as an oupocketing of the esophagus. - pulmo - - - - - - - - vasculature - - An interconnected tubular multi-tissue structure contains fluid that is actively transported around the organism[ZFA]. Examples: vasculature of lung, vasculature of face. - vascular network - - - - - - - - embryonic structure - - Anatomical structure that is part of an embryo. - developing embryonic structure - developing structure - embryonale Struktur - embryonic anatomical structure - embryonic structures - - - - - - - - epithelium of bronchiole - - - - An epithelium that is part of a bronchiole [Automatically generated definition]. - bronchiolar epithelium - bronchiole epithelial tissue - bronchiole epithelium - epithelial tissue of bronchiole - epithelial tissue of lobular bronchiole - epithelium of lobular bronchiole - lobular bronchiole epithelial tissue - lobular bronchiole epithelium - - - - - - - - zona glomerulosa of adrenal gland - - adrenal gland zona glomerulosa - glomerulosa - the narrow subcapsular outer zone of the adrenal cortex where aldosterone is produced - zona glomerulosa - zona glomerulosa of suprarenal gland - - - - - - - - truncus arteriosus - - - - The truncus arteriosus and bulbus cordis are divided by the aorticopulmonary septum. The truncus arteriosus gives rise to the ascending aorta and the pulmonary trunk. The bulbus cordis gives rise to the smooth parts (outflow tract) of the left and right ventricles. - - - - - - - - umbilical vein - - - The umbilical vein is a blood vessel present during fetal development that carries oxygenated blood from the placenta to the growing fetus. [WP,unvetted]. - vena umbilicalis - - - - - - - - dermis - - - - The dermis is a layer of skin between the epidermis (with which it makes up the skin) and subcutaneous tissues, and is composed of two layers, the papillary and reticular dermis[WP]. - corium - cutis - vertebrate dermis - - - - - - - - stratum granulosum of epidermis - - - epidermis granular layer - epidermis stratum granulosum - granular layer of epidermis - stratum granulosum - the layer of flattened cells containing basophilic granules of keratohyalin and lying just above the stratum spinosum (spiny layer) of the epidermis - - - - - - - - hypodermis - - - Lowermost layer of the integumentary system in vertebrates. Types of cells that are found in the hypodermis are fibroblasts, adipose cells, and macrophages. It is derived from the mesoderm, but unlike the dermis, it is not derived from the dermatome region of the mesoderm. The hypodermis is used mainly for fat storage[WP]. - hypoderm - sub-tegumental tissue - subcutaneous tissue - subcutis - subtegumental tissue - superficial fascia - tela subcutanea - vertebrate hypodermis - - - - - - - - hair follicle - - A tube-like opening in the epidermis where the hair shaft develops and into which the sebaceous glands open[GO]. - folliculus pili - - - - - - - - viscus - - An organ that is located within the body cavity (or in its extension, in the scrotum); it consists of organ parts that are embryologically derived from endoderm, splanchnic mesoderm or intermediate mesoderm; together with other organs, the viscus constitutes the respiratory, gastrointestinal, urinary, reproductive and immune systems, or is the central organ of the cardiovascular system. Examples: heart, lung, esophagus, kidney, ovary, spleen. - Organsystem@de - splanchnic tissue - viscera - visceral organ - visceral organ system - visceral tissue - - - - - - - - heart right ventricle - - - A cardiac ventricle that is in the right side of the heart. - cardiac right ventricle - right cardiac ventricle - right ventricle - right ventricle of heart - ventriculus dexter - - - - - - - - cardiac atrium - - Cardiac chamber in which blood enters the heart. - atria - atrial tissue - atrium - atrium of heart - cardiac atria - heart atrium - - - - - - - - cardiac ventricle - - Cardiac chamber through which blood leaves the heart. - heart ventricle - lower chamber of heart - ventricle - ventricle of heart - - - - - - - - heart left ventricle - - - A cardiac ventricle that is in the left side of the heart. - cardiac left ventricle - left cardiac ventricle - left ventricle - left ventricle of heart - ventriculus sinister cordis - - - - - - - - interatrial septum - - A cardiac septum that divides the left and right atria of the heart. - atrial septum - atrium septum - interatrial septal wall - - - - - - - - appendicular skeleton - - Subdivision of skeleton which which consists of all the skeletal elements in in the pectoral and pelvic appendage complexes[cjm]. - appendicular skeleton - entire appendicular skeleton - paired fin skeleton - skeleton appendiculare - - - - - - - - brain dura mater - - - The fibrous membrane forming the outer of the three coverings that surrounds the brain within the cranial cavity; consists of two layers including the periosteal layer and the meningeal layer. - cranial dura mater - dura mater cranialis - dura mater encephali - dura mater of brain - - - - - - - - spinal dura mater - - - A dura mater that is part of a spinal cord [Automatically generated definition]. - dura mater of neuraxis of spinal cord - dura mater of spinal cord - spinal cord dura mater - spinal cord dura mater of neuraxis - - - - - - - - interventricular septum - - Cardiac septum which separates the right ventricle from the left ventricle.[FMA] - heart interventricular septum - heart ventricular septum - interventricular septum of heart - interventriculare cordis - intraventricular septum - s. interventriculare cordis - septum inferius - septum membranaceum - ventricle septum - ventricular septum - - - - - - - - mesentery - - Anatomical organ component composed of a double layer of serous membrane that suspends a viscus from the body wall or connects adjacent viscera and in doing so conveys blood vessels, lymphatics and nerves to and from the viscera. Examples: greater omentum, broad ligament of uterus, sigmoid mesocolon. - generic mesentery - mesentery (generic) - - - - - - - - skin of body - - - The organ covering the body that consists of the dermis and epidermis. - entire integument - entire skin - integument - integumental organ - pelt - skin - skin organ - - - - - - - - cardiac septum - - - The thin membranous structure between the two heart atria or the thick muscular structure between the two heart ventricles. - cardiac septa - heart septa - heart septum - septum of heart - spiral septa - - - - - - - - trunk - - - Organism subdivision which is the part of the body posterior to the cervical region (or head, when cervical region not present) and anterior to the caudal region. Includes the sacrum when present. - Rumpf - thoracolumbar region - torso - trunk region - - - - - - - - limb - - A paired appendage that is evolved from a paired fin. The extent of this structure includes autopod, stylopod and zeugopod regions when present, but excludes the girdle and its parts. - extremities - extremity - flipper - free limb - limb sensu Vertebrata - pentadactyl limb - tetrapod limb - - - - - - - - forelimb - - - A (free) limb that is connected to a pectoral girdle. The extent of this structure includes autopod, stylopod and zeugopod regions when present, but excludes the pectoral girdle and its parts. - anteriormost limb - fore limb - foreleg - forelimb - free part of upper limb - free upper limb - membrum superius - pectoral flipper - pectoral limb - superior member - upper extremity - upper limb - - - - - - - - hindlimb - - - A (free) limb that is connected to a pelvic girdle region. The extent of this structure includes autopod, stylopod and zeugopod regions when present, but excludes the pelvic girdle and its parts. - free lower limb - free part of lower limb - hind limb - hind-limb - hindlimb - inferior member - lower extremity - lower limb - membrum inferius - membrum inferius - pelvic appendage - - - - - - - - visual system - - The sensory system subserving the sense of vision. - photosensory system - visual organ system - - - - - - - - vestibulo-auditory system - - Sensory system responsible for the perception of spatial orientation and auditory stimuli. - auditory organ system - auditory system - auditory/vestibular system - vestibuloauditory system - vestibuloauditory system - - - - - - - - spleen - - - - - lien - the organ that functions to filter blood and to store red corpuscles and platelets - - - - - - - - liver - - - - - An exocrine gland which secretes bile and functions in metabolism of protein and carbohydrate and fat, synthesizes substances involved in the clotting of the blood, synthesizes vitamin A, detoxifies poisonous substances, stores glycogen, and breaks down worn-out erythrocytes[GO]. - iecur - jecur - - - - - - - - small intestine - - - Subdivision of digestive tract that connects the stomach to the large intestine and is where much of the digestion and absorption of food takes place (with the exception of ruminants). The mammalian small intestine is long and coiled and can be differentiated histologically into: duodenum, jejunem, ileum[WP,cjm,Kardong]. - anterior intestine - intestinum tenue - mid intestine - small bowel - small intestine - - - - - - - - gall bladder - - - - - An organ that aids digestion and stores bile produced by the liver[WP]. - gall bladder - gallbladder - vesica biliaris - vesica fellea - - - - - - - - artery smooth muscle tissue - - - A portion of smooth muscle tissue that is part of an artery [Automatically generated definition]. - arterial smooth muscle - arterial smooth muscle cell - artery smooth muscle - artery smooth muscle tissue - smooth muscle of artery - - - - - - - - smooth muscle of esophagus - - A portion of smooth muscle tissue that is part of a esophagus [Automatically generated definition]. - esophageal smooth muscle - esophagus involuntary muscle - esophagus non-striated muscle - esophagus smooth muscle - esophagus smooth muscle tissue - gullet involuntary muscle - gullet non-striated muscle - gullet smooth muscle - gullet smooth muscle tissue - involuntary muscle of esophagus - involuntary muscle of gullet - involuntary muscle of oesophagus - non-striated muscle of esophagus - non-striated muscle of gullet - non-striated muscle of oesophagus - oesophagus involuntary muscle - oesophagus non-striated muscle - oesophagus smooth muscle - oesophagus smooth muscle tissue - smooth muscle of gullet - smooth muscle of oesophagus - smooth muscle tissue of esophagus - smooth muscle tissue of gullet - smooth muscle tissue of oesophagus - - - - - - - - kidney - - - - A paired organ of the urinary tract which has the production of urine as its primary function. - reniculate kidney - - - - - - - - duodenum - - The first part of the small intestine. At the junction of the stomach and the duodenum the alimentary canal is inflected. The duodenum first goes anteriorly for a short distance, turns dorsally, and eventually caudally, thus it is a U-shaped structure with two horizontal sections (a ventral and a dorsal one). - proximal intestine - upper intestine - - - - - - - - jejunum - - intestinum jejunum - mid-intestine - middle intestine - the portion of the small intestine that extends from the duodenum to the ileum - - - - - - - - ileum - - distal intestine - intestinum ileum - lower intestine - posterior intestine - the portion of the small intestine that extends from the jejunum to the colon - - - - - - - - right ovary - - - An ovary that is part of a right side of organism [Automatically generated definition]. - - - - - - - - left ovary - - - An ovary that is part of a left side of organism [Automatically generated definition]. - - - - - - - - pronephros - - - - In mammals, the pronephros is the first of the three embryonic kidneys to be established and exists only transiently. In lower vertebrates such as fish and amphibia, the pronephros is the fully functional embryonic kidney and is indispensible for larval life[GO]. - archinephron - embryonic kidney - pronephric kidney - pronephron - - - - - - - - cortex of thymus - - - the outer part of a thymus lobule that surrounds the medulla and is composed of closely packed lymphocytes - thymic cortex - thymus cortex - - - - - - - - medulla of thymus - - - Medullary portion of thymus. The reticulum is coarser than in the cortex, the lymphoid cells are relatively fewer in number, and there are found peculiar nest-like bodies, the concentric corpuscles of Hassall. These concentric corpuscles are composed of a central mass, consisting of one or more granular cells, and of a capsule formed of epithelioid cells. They are the remains of the epithelial tubes, which grow out from the third branchial pouches of the embryo to form the thymus. Each follicle is surrounded by a vascular plexus, from which vessels pass into the interior, and radiate from the periphery toward the center, forming a second zone just within the margin of the medullary portion. In the center of the medullary portion there are very few vessels, and they are of minute size. - medulla of thymus gland - thymus gland medulla - thymus medulla - - - - - - - - thymus lobule - - - A lobule that is part of a thymus. Divided into an outer cortex and inner medulla and separated from each other by connective tissue septa, but with the medullary tissue continuous from lobule to lobule.[ncit,modified]. - lobule of thymus - thymic lobule - thymus lobule - - - - - - - - cerebellar cortex - - The superficial gray matter of the cerebellum. It consists of three main layers, the molecular layer, the Purkinje cell layer and the granule cell layer. - cortex cerebellaris - cortex cerebelli - cortex of cerebellar hemisphere - - - - - - - - pedunculopontine tegmental nucleus - - PPTg - The pedunculopontine nucleus (PPN) (or pedunculopontine tegmental nucleus, PPTN) is located in the brainstem, caudal to the substantia nigra and adjacent to the superior cerebellar peduncle. It is composed by a wide variety of neurochemical cell types, including cholinergic, glutamatergic and GABAergic cells. In the classical sense, the PPN is considered to be one of the main components of the reticular activating system. [WP,unvetted]. - nucleus pedunculopontinus - nucleus tegmenti pedunculopontinus - peduncular pontine nucleus - pedunculopontine nucleus - - - - - - - - endocardium - - - The endocardium is an anatomical structure comprised of an endothelium and an extracellular matrix that forms the innermost layer of tissue of the heart, and lines the heart chambers[GO]. - endocardial lining - endocardial tissue - heart endocardial tissue - heart endocardium - - - - - - - - endocardium of atrium - - Cardiac atria endocardium - Endocardium that is part of the atrium. - atrial endocardium - atrium endocardial tissue - atrium endocardium - atrium of heart endocardium - cardiac atrium endocardium - endocardium of Cardiac atria - endocardium of atrium of heart - endocardium of cardiac atrium - endocardium of heart atrium - heart atrium endocardium - - - - - - - - alveolar sac - - - - The small terminal dilation of the alveolar ducts around which the alveoli form pocket-like clusters - air sac - pulmonary alveolar sac - sacculus alveolaris - - - - - - - - ventral funiculus of spinal cord - - The white substance of the spinal cord lying on either side between the ventral median fissure and the ventral roots of the spinal nerves. - anterior funiculus - anterior funiculus of spinal cord - anterior white column of spinal cord - funiculus anterior medullae spinalis - ventral funiculi - ventral funiculus - ventral funiculus of spinal cord - ventral white column of spinal cord - - - - - - - - bronchus - - bronchi - bronchial tissue - bronchial trunk - the upper conducting airways of the lung; these airways arise from the terminus of the trachea - - - - - - - - bronchiole - - bronchioli - bronchiolus - lobular bronchiole - the conducting airway of the lungs found terminal to the bronchi; these structures contain neither cartilage nor mucous-secreting glands; the epithelium of the bronchioles becomes thinner with each branching - - - - - - - - terminal bronchiole - - bronchioli terminalis - bronchiolus terminalis - terminal bronchiole tube - the last conducting structure of non-respiratory bronchioles; after this point, the airways have alveoli in their walls - - - - - - - - respiratory bronchiole - - A bronchiole that is the first segment of the respiratory zone. - bronchiolus respiratorii - bronchiolus respiratorius - - - - - - - - subcutaneous adipose tissue - - - A portion of adipose tissue that is part of the hypodermis, beneath the dermis. - fatty layer of subcutaneous tissue - fatty layer of superficial fascia - hypodermis fat layer - panniculus adiposus - panniculus adiposus (tela subcutanea) - panniculus adiposus telae subcutaneae - subcutaneous fat - subcutaneous fat layer - - - - - - - - hemolymphoid system - - Anatomical cluster consisting of the hematopoietic system and the lymphoid system, or its analogs. - haemolymphoid system - hematolymphoid system - lymphomyeloid complex - - - - - - - - capsule of lymph node - - Capsule surrounding lymph node composed of connective tissue with some plain muscle fibers. - capsula nodi lymphoidei - lymph node capsule - - - - - - - - adenohypophysis - - - - - AHP - The glandular, anterior lobe of the pituitary gland. The anterior pituitary regulates several physiological processes including stress, growth, and reproduction[WP]. The anterior lobe of the hypophysis (pituitary gland). This lobe contains cells that produce prolactin, growth hormone, thyroid-stimulating hormone, follicle-stimulating hormone and proopiomelanocortin[ZFA]. - anterior hypophysis - anterior lobe (hypophysis) - anterior lobe of hypophysis - anterior lobe of pituitary - anterior lobe of pituitary gland - anterior lobe of the pituitary - anterior pituitary - anterior pituitary gland - cranial lobe - lobus anterior - lobus anterior (glandula pituitaria) - lobus anterior hypophysis - pituitary anterior lobe - pituitary gland, anterior lobe - pituitary glandanterior lobe - rostral lobe - - - - - - - - neurohypophysis - - - NHP - The posterior part of the pituitary gland that secretes hormones involved in blood pressure regulation such as oxytocin and antidiuretic hormon. - infundibular process - lobus nervosus - lobus nervosus neurohypophysis - lobus posterior - lobus posterior (glandula pituitaria) - lobus posterior hypophysis - neural lobe - neural lobe of pituitary - neural lobe of pituitary gland - neuro hypophysis - neurohypophysis - pituitary gland neural lobe - pituitary gland, neural lobe - pituitary gland, posterior lobe - posterior lobe of hypophysis - posterior lobe of pituitary - posterior lobe of pituitary gland - posterior pituitary - posterior pituitary gland - - - - - - - - integument - - Hautsystem@de - The dermis, epidermis and hypodermis. - dermal system - dermis plus epidermis plus hypodermis - dermoid system - integumentum commune - skin - skin and subcutaneous tissue - skin plus hypodermis - tegument - the integument - vertebrate integument - - - - - - - - vasculature of head - - Vasculature that is part of a head [Automatically generated definition]. - adult head vascular network - adult head vasculature - cranial vasculature - head vascular network - head vasculature - vascular network of adult head - vascular network of head - vasculature of adult head - - - - - - - - vasculature of trunk - - A vasculature that is part of a trunk [Automatically generated definition]. - torso vascular network - torso vasculature - trunk vascular network - trunk vasculature - vascular network of torso - vascular network of trunk - vasculature of torso - - - - - - - - submucosa of trachea - - - A submucosa that is part of a trachea. - submucosa of windpipe - submucous layer of trachea - trachea submucosa - tracheal submucosa - windpipe submucosa - - - - - - - - vasculature of eye - - - Vasculature that is part of the eye region. - eye vascular network - eye vasculature - ocular blood vessel - ocular vasculature - optic vasculature - vascular network of eye - - - - - - - - musculoskeletal system - - - - - - - - - Anatomical system that consists of the muscular and skeletal systems. - musculo-skeletal system - - - - - - - - fibrous joint - - Nonsynovial joint in which the articulating bones or cartilages are connected by ligaments. Examples: sagittal suture, inferior tibiofibular syndesmosis, gomphosis.[FMA] - articulatio fibrosa - junctura fibrosa - - - - - - - - nerve root - - A continuation of the neuron projection bundle component of a nerve inside, crossing or immediately outside the central nervous system. - initial segment of nerve - radix nervi - - - - - - - - macula of saccule of membranous labyrinth - - macula of membranous labyrinth saccule - macula of saccule - macula of sacculus (labyrinthus vestibularis) - macula saccule - macula sacculi - macula sacculi - membranous labyrinth saccule macula - saccular macula - saccular macula of membranous labyrinth - saccular maculs - saccule macula - saccule of membranous labyrinth macula - sacculus (labyrinthus vestibularis) macula - the oval neuroepithelial sensory receptor in the anterior wall of the saccule; hair cells of the neuroepithelium support the statoconial membrane and have terminal arborizations of vestibular nerve fibers around their bodies - - - - - - - - cartilaginous joint - - Nonsynovial joint in which the articulating bones or cartilages are connected by cartilage. Examples: Spheno-occipital synchondrosis, first sternocostal joint, pubic symphysis.[FMA] - articulatio cartilaginea - junctura cartilaginea - - - - - - - - macula of utricle of membranous labyrinth - - macula of membranous labyrinth utricle - macula of utricle - macula of utriculus (labyrinthus vestibularis) - macula utricle - macula utriculi - macula utriculi - maculae utricle - membranous labyrinth utricle macula - the neuroepithelial sensory receptor in the inferolateral wall of the utricle; hair cells of the neuroepithelium support the statoconial membrane and have terminal arborizations of vestibular nerve fibers around their bodies; normally sensitive to linear acceleration in the longitudinal axis of the body and to gravitational influences - utricle macula - utricle of membranous labyrinth macula - utricular macula - utriculus (labyrinthus vestibularis) macula - - - - - - - - symphysis - - - Cartilaginous joint in which the articulating bones or cartilages are connected by fibrocartilage. Examples: pubic symphysis, intervertebral symphysis, manubriosternal joint.[FMA] - secondary cartilaginous joint - - - - - - - - synovial joint - - - Joint in which the articulating bones or cartilages are connected by an articular capsule which encloses a synovial membrane and a synovial cavity. Examples: Temporomandibular joint, knee joint.[FMA] - articulatio synoviale - diarthrodial joints - diarthroses - diarthrosis - diarthrosis joint - - - - - - - - spiral organ of cochlea - - - - Corti's organ - The organ of Corti (or spiral organ) is the organ in the inner ear of mammals that contains auditory sensory cells, or 'hair cells.' [WP,unvetted]. - auditory papilla - auditory papillae - basilar papilla - cochlear spiral organ - organ of Corti - organum spirale - papilla basilaris - spiral organ - spiral organ of Corti - - - - - - - - spinal cord - - - - - Part of the central nervous system located in the vertebral canal continuous with and caudal to the brain; demarcated from brain by plane of foramen magnum. It is composed of an inner core of gray matter in which nerve cells predominate, and an outer layer of white matter in which myelinated nerve fibers predominate, and surrounds the central canal. (CUMBO) - SpC - cerebro-cerebellar fissure - cerebrocerebellar fissure - fissura cerebro-cerebellaris - fissura cerebrocerebellaris - medulla spinalis - spinal cord structure - spinal medulla - - - - - - - - chondrocranium - - Endoskeletal elements that encase the brain, nose, inner ear[cjm]. that part of the neurocranium formed by endochondral ossification and comprising the bones of the base of the skull[TFD]. - calvarium - neurocranium - - - - - - - - nucleus pulposus - - - - nucleus propulsus - nucleus propulsus of intervertebral disk - nucleus pulposus (diskus intervertebralis) - nucleus pulposus of intervertebral disk - pulpy nucleus - the jelly-like substance in the middle of the spinal disc which is a remnant of the notochord - - - - - - - - vomeronasal organ - - - An organ thought to supplement the olfactory system in receiving pheromonic communication. The sensory part of the organ is in two long, thin sacs, situated on either side of the nasal septum at its base. - Jacobson's organ - VNO - organ of Jacobsen - organon vomeronasale - organum vomeronasale - - - - - - - - dorsal horn of spinal cord - - - The pronounced, dorsolaterally oriented ridge of grey matter in each lateral half of the spinal cord[MP]. the dorsal (more towards the back) grey matter of the spinal cord. It receives several types of sensory information from the body, including light touch, proprioception, and vibration. This information is sent from receptors of the skin, bones, and joints through sensory neurons whose cell bodies lie in the dorsal root ganglion[WP]. The dorsal region of the mature spinal cord contains neurons that process and relay sensory input[GO]. - columna grisea posterior medullae spinalis - cornu dorsale - cornu posterius medullae spinalis - dorsal gray column of spinal cord - dorsal gray horn - dorsal gray matter of spinal cord - dorsal grey column of spinal cord - dorsal grey horn - dorsal horn - dorsal horn of the spinal cord - dorsal horn spinal cord - dorsal region of mature spinal cord - dorsal region of spinal cord - dorsal spinal cord - posterior gray column of spinal cord - posterior gray horn of spinal cord - posterior grey column of spinal cord - posterior horn of spinal cord - spinal cord dorsal horn - spinal cord dorsal horns - spinal cord posterior horn - - - - - - - - ventral horn of spinal cord - - The ventral grey column of the spinal cord[MP]. The neurons of the ventral region of the mature spinal cord participate in motor output[GO]. - anterior column - anterior column of the spinal cord - anterior gray column of spinal cord - anterior gray horn of spinal cord - anterior grey column of spinal cord - anterior horn - anterior horn (spinal cord) - columna grisea anterior medullae spinalis - cornu anterius medullae spinalis - spinal cord anterior horn - spinal cord ventral horn - ventral gray column of spinal cord - ventral gray matter of spinal cord - ventral grey column of spinal cord - ventral grey horn - ventral horn of the spinal cord - ventral horn spinal cord - ventral horns spinal cord - ventral region of spinal cord - ventral spinal cord - - - - - - - - dorsal root of spinal cord - - The dorsal roots contain afferent sensory axons. The dorsal roots of each side continue outwards, along the way forming a dorsal root ganglion (also called a spinal ganglion). - dorsal root - dorsal root of spinal nerve - dorsal roots - dorsal spinal nerve root - dorsal spinal root - posterior root of spinal nerve - radix dorsalis - radix posterior - radix posterior (nervus spinalis) - radix posterior nervi spinalis - radix sensoria (nervus spinalis) - root dorsali nervi spinalis - root sensoria nervi spinalis - sensory root of spinal nerve - sensory spinal root - - - - - - - - olfactory bulb - - - - A bulbous anterior projection of the olfactory lobe that is the place of termination of the olfactory nerves and is especially well developed in lower vertebrates (as fishes)[BTO]. - bulbus olfactorius - bulbus olfactorius - bulbus olfactorius (Morgagni) - olfactory lobe - olfactory lobe (Barr & Kiernan) - - - - - - - - olfactory organ - - An organ that houses olfactory neurons and is responsible for the sense of smell. Examples include the vertebrate nose and the Drosophila dorsal organ. - main olfactory organ - olfactory neuroepithelium - olfactory organ - olfactory sense organ - olfactory sensory organ - organ olfactus - organum olfactorium - primary olfactory organ - - - - - - - - periventricular zone of hypothalamus - - - hypothalamus periventricular zone - periventricular zone of the hypothalamus - zona periventricularis hypothalamicae - - - - - - - - reticular formation - - A composite substructure of the brainstem that consists of the midbrain reticular formation, the pontine reticular formation and the medullary reticular formation ( Carpenter-1983 ). - brain stem reticular formation - brainstem reticular formation - reticular formation (classical) - reticular formation of the brainstem - - - - - - - - lamina of spiral limbus - - - - The osseous spiral lamina consists of two plates of bone, and between these are the canals for the transmission of the filaments of the acoustic nerve. On the upper plate of that part of the lamina which is outside the vestibular membrane, the periosteum is thickened to form the limbus spiralis (or limbus laminæ spiralis), this ends externally in a concavity, the sulcus spiralis internus, which represents, on section, the form of the letter C. [WP,unvetted]. - limbus lamina spiralis - limbus laminae spiralis - limbus laminae spiralis osseae - spiral limbus - spiral limbus lamina - - - - - - - - stria vascularis of cochlear duct - - - - The upper portion of the spiral ligament contains numerous capillary loops and small blood vessels, and is termed the stria vascularis. It produces endolymph for the scala media, one of the three fluid-filled compartments of the cochlea. [WP,unvetted]. - psalterial cord - stria vascularis - stria vascularis ductus cochlearis - stria vascularis of cochlea - vascular stria of cochlear duct - vascular stripe of cochlear duct - - - - - - - - telencephalic ventricle - - - A brain ventricle that is part of a telencephalon. In mammals and species with an evaginated telencephalon, this is one of a pair of lateral structures, one in each hemisphere - forebrain ventricle - lateral ventricle - lateral ventricle of brain - lateral ventricles - tectal ventricle - telencephalic ventricle - telencephalic ventricles - telencephalic vesicle - telencephalon lateral ventricle - - - - - - - - choroid plexus of fourth ventricle - - - 4th ventricle choroid plexus - Choroid plexus of the fourth ventricle - chorioid plexus of cerebral hemisphere of fourth ventricle - chorioid plexus of fourth ventricle - choroid plexus fourth ventricle - fourth ventricle chorioid plexus of cerebral hemisphere - fourth ventricle choroid plexus - - - - - - - - central canal of spinal cord - - - - Spinal cord structure that is part of the ventricular system and is filled with cerebral-spinal fluid and runs the length of the spinal cord. - canalis centralis - central canal - central canal of spinal cord - central canal, spinal cord/medulla - spinal cord central canal - ventricle of spinal cord - - - - - - - - biliary system - - - - - - - - Organ system subdivision that consists of the organs and ducts that are involved in the production and transportation of bile. In most species this is the gallbladder and the bile ducts (biliary tree). - biliary apparatus - biliary tract - - - - - - - - dorsal mesentery - - The mesentery that originates from the dorsal side of the peritoneal cavity[ZFA]. - dorsal mesogastrium - mesenterium dorsale commune - - - - - - - - brainstem - - - Stalk-like part of the brain that includes amongst its parts the medulla oblongata of the hindbrain and the tegmentum of the midbrain[ZFA,MP,generalized]. - accessory medullary lamina of pallidum - brain stem - lamella pallidi incompleta - lamina medullaris accessoria - lamina medullaris incompleta pallidi - lamina pallidi incompleta - truncus encephali - truncus encephalicus - - - - - - - - alveolus of lung - - - Spherical outcropping of the respiratory bronchioles and primary site of gas exchange with the blood. Alveoli are particular to mammalian lungs. Different structures are involved in gas exchange in other vertebrates[WP]. - alveoli - alveolus - alveolus pulmonis - alveolus pulmonis - lung alveolus - pulmonary alveolus - respiratory alveoli - respiratory alveolus - - - - - - - - layer of neocortex - - - One of the layers of the neocortex. - cerebral cortex layer - cortical layer - lamina of neocortex - layer of neocortex - neocortex layer - - - - - - - - myocardium of atrium - - atrial myocardium - atrium cardiac muscle - atrium myocardium - the atrial part of middle layer of the heart, comprised of involuntary muscle - - - - - - - - juxtaglomerular apparatus - - An anatomical structure which consists of juxtaglomerular cells, extraglomerular mesangial cells and the macula densa. The juxtaglomerular apparatus lies adjacent to the glomerulus and regulates kidney function by maintaining the blood flow to the kidney and the filtration rate[GO]. a microscopic structure in the kidney, which regulates the function of each nephron. The juxtaglomerular apparatus is named for its proximity to the glomerulus: it is found between the vascular pole of the renal corpuscle and the returning distal convoluted tubule of the same nephron. This location is critical to its function in regulating renal blood flow and glomerular filtration rate. The three cellular components of the apparatus are the macula densa, extraglomerular mesangial cells, and juxtaglomerular cells (also known as granular cells)[WP]. - complexus juxtaglomerularis - juxtaglomerular complex - - - - - - - - layer of hippocampus - - - The layers of the laminar structure of the hippocampus. - cytoarchitectural fields of hippocampal formation - hippocampus layer - hippocampus proper layer - layer of cornu ammonis - - - - - - - - choroid plexus of lateral ventricle - - Part of choroid plexus contained in the lateral ventricle - chorioid plexus of cerebral hemisphere of lateral ventricle - chorioid plexus of lateral ventricle - choroid plexus telencephalic ventricle - lateral ventricle chorioid plexus of cerebral hemisphere - lateral ventricle choroid plexus - - - - - - - - nucleus of brain - - A neural nucleus that is part of the brain. - brain nuclei - brain nucleus - - - - - - - - hippocampus pyramidal layer - - A cytoarchitectural term denoting the layer of the hippocampus in which pyramidal cells are predominant. Its location is superficial to the Stratum oriens; it is deep to the Stratum radiatum in area CA1 and area CA2 and deep to the Stratum lucidum in area CA3 (Stephan-75) (NeuroNames). - gyrus occipitalis inferior - gyrus occipitalis tertius - hippocampal pyramidal cell layer - hippocampal pyramidal layer - hippocampus pyramidal cell layer - hippocampus stratum pyramidale - pyramidal cell layer of the hippocampus - pyramidal layer of hippocampus - stratum pyramidale - stratum pyramidale hippocampi - - - - - - - - gray matter of spinal cord - - The ridge-shaped grey matter of the spinal cord that extends longitudunally through the center of each half of the spinal cord, and are largely or entirely composed of nerve cell bodies and their dendrites and some supportive tissue. - gray matter of spinal cord - gray substance of spinal cord - grey matter of spinal cord - grey substance of spinal cord - spinal cord gray matter - spinal cord grey matter - spinal cord grey substance - substantia grisea medullae spinalis - - - - - - - - white matter - - CNS tract/commissure - CNS tracts and commissures - CNS white matter - Neural tissue consisting of myelinated axons connecting grey matter areas of the central nervous system. - neuronal white matter - substantia alba - white mater - white matter of neuraxis - white substance - - - - - - - - white matter of spinal cord - - The regions of the spinal cord that are largely or entirely composed of myelinated nerve cell axons and contain few or no neural cell bodies or dendrites. - spinal cord white matter - spinal cord white matter of neuraxis - spinal cord white substance - substantia alba medullae spinalis - white matter of neuraxis of spinal cord - white substance of spinal cord - - - - - - - - mesangium - - - inner layer of the glomerulus, within the basement membrane surrounding the glomerular capillaries. - - - - - - - - glomerular mesangium - - - A thin membrane which helps to support the capillary loops in a renal glomerulus. It is connective tissue composed of mesangial cells - myofibroblasts phenotypically related to vascular smooth muscle cells (MUSCLE, SMOOTH, VASCULAR), PHAGOCYTES and the mesangial EXTRACELLULAR MATRIX. - - - - - - - - extraglomerular mesangium - - - the tissue comprised of mesangial cells that fill the triangular space between the macula densa and the afferent and efferent arterioles of the juxtaglomerular apparatus - - - - - - - - coelemic cavity lumen - - The cavity within the body of all animals higher than the coelenterates and certain primitive worms, formed by the splitting of the embryonic mesoderm into two layers. In mammals it forms the peritoneal, pleural, and pericardial cavities. - body cavity - celom - coelom - coelome - coelomic cavity - coelomic cavity lumen - hemocoel - main body cavity - space of body compartment - ventral body cavity - - - - - - - - muscle of back - - - Any muscle organ that is part of a back [Automatically generated definition]. - back muscle - back muscle organ - muscle organ of back - - - - - - - - epithelium of urethra - - - - - - The urethra is a renal system organ that carries urine from the bladder to outside the body. The epithelium is the tubular, planar layer of cells through which the urine passes.. - epithelial tissue of urethra - urethra epithelial tissue - urethra epithelium - urethral epithelium - urethral plate - urethral seam - - - - - - - - lamina propria of urethra - - - A lamina propria that is part of a urethra [Automatically generated definition]. - lamina propria mucosa of urethra - lamina propria mucosae of urethra - urethra lamina propria - urethra lamina propria mucosa - urethra lamina propria mucosae - urethral lamina propria - - - - - - - - notochord - - - - A flexible rod-shaped body found in embryos of all chordates. It is composed of cells derived from the mesoderm and defines the primitive axis of the embryo. In some chordates, it persists throughout life as the main axial support of the body, while in most vertebrates it becomes the nucleus pulposus of the intervertebral disc. The notochord is found ventral to the neural tube. - embryonic notocord - notochorda - notocord - - - - - - - - somite - - - Somites are spheres of epithelial cells that form sequentially along the anterior-posterior axis of the embryo through mesenchymal to epithelial transition of the presomitic mesoderm. - epimere - epimere mesoderm - epithelial somite - mesodermal cluster - somites - somitic mesoderm - somitus - - - - - - - - exocrine system - - - - - - - Anatomical system that consists of the glands and parts of glands that produce exocrine secretions and help to integrate and control bodily metabolic activity. Exocrine glands are glands that secrete their products (hormones) into ducts (duct glands). They are the counterparts to endocrine glands, which secrete their products (hormones) directly into the bloodstream (ductless glands) or release hormones (paracrines) that affect only target cells nearby the release site. [Wikipedia]. - exocrine glandular system - - - - - - - - umbilical cord - - The connecting cord from the developing embryo to the placenta. - birth cord - chorda umbilicalis - connecting stalk - funiculus umbilicalis - funiculus umbilicalis - yolk stalk - - - - - - - - macula densa - - The macula densa is an area of specialized cells in the distal tubule that makes contact with the vascular pole of the glomerulus[GO]. - - - - - - - - endometrial stroma - - - The layer of connective tissue comprised of the endometrial lining of the uterus which fluctuates in thickness throughout the menstrual cycle. - endometrium stroma - stroma of endometrium - - - - - - - - lamina propria of bronchus - - - A lamina propria that is part of a bronchus [Automatically generated definition]. - bronchi lamina propria - bronchi lamina propria mucosa - bronchi lamina propria mucosae - bronchial lamina propria - bronchial trunk lamina propria - bronchial trunk lamina propria mucosa - bronchial trunk lamina propria mucosae - bronchus lamina propria - bronchus lamina propria mucosa - bronchus lamina propria mucosae - lamina propria mucosa of bronchi - lamina propria mucosa of bronchial trunk - lamina propria mucosa of bronchus - lamina propria mucosae of bronchi - lamina propria mucosae of bronchial trunk - lamina propria mucosae of bronchus - lamina propria of bronchi - lamina propria of bronchial trunk - - - - - - - - neural crest - - - - A specialized region of ectoderm found between the neural ectoderm (neural plate) and non-neural ectoderm and composed of highly migratory pluripotent cells that delaminate in early embryonic development from the dorsal neural tube and give rise to an astounding variety of differentiated cell types[MP]. - NC - crista neuralis - neural crest material - - - - - - - - abdomen musculature - - Set of all muscles in abdomen. - abdominal musculature - muscle group of abdomen - muscles of abdomen - musculature of abdomen - musculature of abdominal wall - set of muscles of abdomen - - - - - - - - neurectoderm - - - Embryonic ectoderm that gives rise to nervous tissue. - epithelium tubi neuralis; neuroectoderma - neuaral ectoderm - neural ectoderm - neuroectoderm - presumptive central nervous system - ventral neurogenic region - - - - - - - - epicardium - - - a region of the serous membrane that forms the innermost layer of the pericardium and the outer surface of the heart. - heart epicardium - pericardium visceral mesothelium - visceral serous pericardium of heart - visceral serous pericardium proper - - - - - - - - myocardium - - - cardiac muscle - heart muscle - heart myocardium - muscle of heart - the middle layer of the heart, comprised mainly of striated cardiac muscle fibers - - - - - - - - conducting system of heart - - - The cardiac conduction system consists of specialized cardiomyocytes that regulate the frequency of heart beat[GO] - cardiac conducting system - cardiac conduction system - cardiac impulse conducting system - cardionector - central conduction system - complexus stimulans cordis - heart conduction system - impulse conducting system - systema conducente cordis - - - - - - - - sinoatrial node - - - Koch's node - SA nodal muscle tissue - SA node - The part of the cardiac conduction system that controls the timing of heart muscle contraction. It relays electrical signals to the AV node[GO]. Subdivision of conducting system of heart at the junction of the right atrium and the superior vena cava, around the sinoatrial nodal branch of right coronary artery and is continuous with the internodal tract[FMA]. - cardiac pacemaker - node of Keith-Flack - nodus sinuatrialis - nodus sinuatrialis - sinoatrial node - sinu-atrial node - sinuatrial nodal muscle tissue - sinuatrial node - sinus node - sinus node of Keith and Flack - - - - - - - - atrioventricular node - - - - A-V node - AV nodal muscle tissue - AV node - An area of conducting tissue between the atria and the ventricles of the heart that conducts the normal electrical impulse from the atria to the ventricles. - Aschoff-Tawara node - atrio-ventricular node - atrioventricular nodal muscle tissue - atriovetricular node - downstream pacemaker - node of Tawara - nodus atrioventricularis - nodus atrioventricularis - - - - - - - - atrioventricular bundle - - - A part of the His-Purkinje system that transmits signals from the AV node to the cardiac Purkinje fibers[GO] - A-V bundle - AV bundle - His bundle - atrio-ventricular bundle - atrioventricular bundle muscle tissue - atrioventricular fasciculus - bundle of His - fasciculus atrioventricularis - - - - - - - - pelvic region of trunk - - The lower segment of the trunk, inferioposterior to the abdomen proper, in the transition area between the trunk and the lower limbs. - lesser pelvis - pelvic region - pelvis - pelvis region - true pelvis - - - - - - - - serous pericardium - - Serous membrane which is divided into parietal and visceral serous pericardium. - pericardium serosum - serous portion of pericardium - - - - - - - - peritoneum - - A serous membrane that lines the peritoneal cavity[VHOG,modified]. - peritonaeum - - - - - - - - fibrous pericardium - - - Membrane organ which is attached to the pericardial sac proper and the central tendon of diaphragm and is continuous with the pretracheal fascia.[FMA] - fibrous portion of pericardium - pericardium fibrosum - - - - - - - - meninx - - - - Membrane organ that surrounds the brain and the spinal cord. - layer of meninges - meningeal layer - meninx primitiva - - - - - - - - dura mater - - Thick, fibrous meningeal covering surrounding the brain and spinal cord. It is the outermost of the three meningeal coverings. It consists of two layers: the periosteal dura linking the inner surface of the skull and the meningeal dura that lies above the arachnoid dural membrane. The meningeal layer draws away from the periosteal layer and certain locations to form the dural reflections. - dura - dura mater of neuraxis - pachymeninges - - - - - - - - tympanic membrane - - - A thin membrane that separates the external ear from the middle ear, consisting of two epithelia (one part of the the external accoustic meatus epithelium, the other part of the tympanic cavity epithelium) with a fibrous layer between them. Its function is to transmit sound from the air to the ossicles inside the middle ear. The malleus bone bridges the gap between the eardrum and the other ossicles. Rupture or perforation of the eardrum can lead to conductive hearing loss. [WP,unvetted]. - Rivinus' membrane - ear drum - eardrum - lateral wall of tympanic cavity - membranous wall of tympanic cavity - myrinx - paries membranaceus cavi tympani - tympanum - - - - - - - - exocrine gland - - A gland that secretes products (excluding hormones and other chemical messengers) into ducts (duct glands) which lead directly into the external environment[WP]. Typical exocrine glands include sweat glands, salivary glands, mammary glands, stomach, liver, pancreas - ducted gland - glandula exocrina - - - - - - - - prostate gland - - - The prostate gland is a partly muscular, partly glandular body that is situated near the base of the mammalian male urethra and secretes an alkaline viscid fluid which is a major constituent of the ejaculatory fluid. - male prostate - prostata - prostate - - - - - - - - endocrine gland - - Endocrine glands are glands of the endocrine system that secrete their products directly into the circulatory system rather than through a duct.[WP, modified]. - ductless gland - ductless gland - glandula endocrina - glandulae endocrinae - - - - - - - - adrenal gland - - - - Either of a pair of complex endocrine organs near the anterior medial border of the kidney consisting of a mesodermal cortex that produces glucocorticoid, mineralocorticoid, and androgenic hormones and an ectodermal medulla that produces epinephrine and norepinephrine[BTO]. - adrenal - adrenal capsule - adrenal medulla cell - atrabiliary capsule - epinephric gland - epinephros - glandula adrenalis - glandula suprarenalis - glandula suprarenalis - interrenal gland - suprarenal capsule - suprarenal gland - - - - - - - - thymus - - - - - - Anatomical structure of largely lymphoid tissue that functions in cell-mediated immunity by being the site where T cells develop. - thymus gland - thymus organ - - - - - - - - bone marrow - - - medulla of bone - medulla ossea - medulla ossium - the soft tissue that fills the cavities of bones - - - - - - - - tonsil - - Mandel - either of the two small almond-shaped masses of lymph tissue found on either side of the oropharynx - - - - - - - - cranial muscle - - - Any muscle that is part of the head region. - adult head muscle organ - cephalic muscle - cephalic musculature - cranial muscle - head muscle - head muscle organ - head muscles - muscle of head - muscle organ of adult head - muscle organ of head - musculus caput - - - - - - - - muscle of neck - - Any muscle that is part of the cervical (neck) region. - muscle organ of neck - muscle organ of neck (volume) - neck (volume) muscle organ - neck muscle - neck muscle organ - - - - - - - - muscle of abdomen - - - Muscle (organ) which is a part of the abdomen. Examples: external oblique, rectus abdominis. - abdomen muscle - abdomen muscle organ - abdominal muscle - abdominal wall muscle - abdominal wall musculature - muscle organ of abdomen - - - - - - - - connective tissue - - Bindegewebe - Tissue with cells that deposit non-polarized extracellular matrix including connective tissue fibers and ground substance. - portion of connective tissue - textus connectivus - - - - - - - - muscle tissue - - - - Muscle tissue is a contractile tissue made up of actin and myosin fibers[GO]. - muscular tissue - portion of muscle tissue - textus muscularis - - - - - - - - forelimb zeugopod - - - The middle limb segment of the pectoral free limb, between the autopod and stylopod segments. Includes as parts the forelimb zeugopodial skeleton, which includes as parts the radius and ulna, or their cartilage precursors, or evolutionary variants. - antebrachial region - antebrachium - antebrachium - antibrachium - arm middle limb segment - arm zeugopod - brachial region middle limb segment - brachial region zeugopod - fore epipodium - forearm - forelimb epipodium - forelimb zeugopodium - forelimb zygopod - intermediate segment of free upper limb - lower arm - lower segment of arm - middle limb segment of arm - middle limb segment of brachial region - middle limb segment of forelimb - middle limb segment of proximal segment of free upper limb - regio antebrachialis - wing zeugopod - zeugopod of arm - zeugopod of brachial region - zeugopod of forelimb - zeugopod of proximal segment of free upper limb - - - - - - - - pes - - - distal portion of the hind limb, including tarsal region, metatarsal region and digits. - foot - hind foot - hind limb autopodium - hind paw - hind-paw - hindfeet - hindfoot - hindfoot of quadruped - hindlimb autopod - hindlimb autopodium - hindlimb distal free limb segment - hindpaw - pes - terminal segment of free lower limb - - - - - - - - manual digit - - A digit that is part of a manus (hand). - digit of hand - digit of manus - digitus manus - finger - fore digit - forelimb digit - hand digit - manual digit (phalangeal portion) plus soft tissue - - - - - - - - hematopoietic system - - - - - - - Anatomical system that is involved in the production of hematopoietic cells. - Blutbildungssystem - haematological system - haematopoietic system - haemopoietic system - hematological system - hematolymphoid system - hemopoietic system - organa haemopoietica - - - - - - - - lymph - - Lymph is the fluid that is formed when interstitial fluid enters the conduits of the lymphatic system[WP]. - lympha - - - - - - - - nasolacrimal duct - - - - d. nasolacrimalis - nasolacrimal duct - posterior naris - tear duct - the paired channels leading from the lacrimal sacs to the inferior meatus of the nose, through which tears are conducted through the nasal cavity - - - - - - - - bile duct - - - Any of the ducts that form the biliary tree, carrying bile from the liver to the small intestine. - bile tube - biliary duct - gall duct - hepatic duct - - - - - - - - manus - - - distal segment of the fore limb, including carpal region, metacarpal region and digits. - fore foot - fore paw - fore-paw - forefeet - forefoot - forefoot of quadruped - forelimb autopod - forelimb autopodium - forepaw - hand - hand region - terminal segment of free upper limb - - - - - - - - parietal pleura - - - The outer serous membrane of the pulmonary pleural. - pleura parietalis - - - - - - - - visceral pleura - - - The inner serous membrane of the pulmonary pleural. The visceral pleura lines the lungs. - lung mesothelium - lung pleura - pleura pulmonalis - pleura visceralis - pleura visceralis (pulmonalis) - pulmonary pleura - pulmonary visceral pleura - - - - - - - - pleural cavity - - The fluid-filled cavity that lies between the visceral and parietal pleurae. - cavitas pleuralis - cavitum pleuralae - cavitum pleurale - - - - - - - - immune system - - - - - Anatomical system that protects the body from foreign substances, cells, and tissues by producing the immune response and that includes especially the thymus, spleen, lymphoid tissue, lymphocytes including the B cells and T cells, and antibodies. - - - - - - - - pericardial sac - - - a double-walled sac containing the heart and the roots of the great vessels. - pericardium - - - - - - - - pericardium - - The combination of pericardial sac (a double-walled sac containing the heart and the roots of the great vessels) plus fibrous pericardium. - - - - - - - - parietal serous pericardium - - Parietal serous membrane which is part of the pericardium and forms the outer layer of the pericardial sac. - lamina parietalis (pericardii serosum) - lamina parietalis pericardii - parietal layer of serous pericardium - parietal pericardium - pericardial sac - - - - - - - - autonomic nervous system - - ANS - The autonomic nervous system is composed of neurons that are not under conscious control, and is comprised of two antagonistic components, the sympathetic and parasympathetic nervous systems. The autonomic nervous system regulates key functions including the activity of the cardiac (heart) muscle, smooth muscles (e.g. of the gut), and glands[GO]. - autonomic division of peripheral nervous system - autonomic part of peripheral nervous system - divisio autonomica systematis nervosi peripherici - divisio autonomica systematis nervosi peripherici - pars autonomica systematis nervosi peripherici - peripheral autonomic nervous system - visceral nervous system - - - - - - - - vertebra - - - - The ossified form of a vertebral element, a skeletal element that forms around the notochord and is part of the vertebral column. - vertebra bone - vertebrae - - - - - - - - integumental system - - - - Connected anatomical system that forms a barrier between an animal and its environment. In vertebrates, the integumental system consists of the epidermis, dermis plus associated glands and adnexa such as hair and scales. In invertebrates, the integumental system may include cuticle. - body surface - dermal system - external covering of organism - integumentary system - integumentum commune - organism surface - surface - - - - - - - - abdominal segment of trunk - - - The abdominal segment of the torso. - abdomen/pelvis/perineum - lower body - lower trunk - lumbar region - - - - - - - - cartilage tissue - - - Skeletal tissue that is avascular, rich in glycosaminoglycans (GAGs) and typically includes chondrocytes within isolated lacunae. Cartilage tissue is deposited by chondroblasts. - cartilage - cartilage tissue - cartilages - cartilaginous tissue - chondrogenic tissue - portion of cartilage tissue - - - - - - - - skin gland - - - - A gland that is part of a skin of body [Automatically generated definition]. - glandulae cutis - set of skin glands - skin glands - skin glands set - - - - - - - - basal ganglion - - - An individual member of a collection of basal ganglia. Basal ganglia are subcortical masses of gray matter in the forebrain and midbrain that are richly interconnected and so viewed as a functional system. The nuclei usually included are the caudate nucleus (caudoputamen in rodents), putamen, globus pallidus, substantia nigra (pars compacta and pars reticulata) and the subthalamic nucleus. Some also include the nucleus accumbens and ventral pallidum[NIF,modified]. - basal ganglia - basal ganglion of telencephalon - basal nucleus - nuclei basales - - - - - - - - hippocampal formation - - - Hippocampus (proper) plus dentate gyrus and subiculum[definition derived from NIF comments and ontology alignment]. - archipallium - formatio hippocampi - hippocampus - hippocampus (Crosby) - major hippocampus - primal cortex - seahorse - - - - - - - - fourth ventricle - - - 4th ventricle - IVth ventricle - Part of the ventricular system of the brain, forming a single large irregularly shaped cavity located on the midline of the rhombencephalon, between the medulla, pons and the isthmus ventrally and the cerebellum dorsally. It is continuous with the cerebral aqueduct anteriorally and the central canal of the spinal cord posteriorly. It communicates with the subarachnoid space through its lateral and median apertures. - fourth ventricle proper - hindbrain ventricle - rhombencephalic ventricle - rhombencephalic vesicle - ventricle IV - ventricle of hindbrain - ventricle of rhombencephalon - ventriculus quartus - - - - - - - - hepatobiliary system - - - The part of the digestive system that contains the liver and the biliary system - hepaticobiliary system - liver and biliary system - liver/biliary system - - - - - - - - oral epithelium - - - An epithelium that is part of the mouth and lines the oral cavity, typically stratified squamous, and may be para-, ortho- or non- keratinized. Primary barrier between oral environment and deeper tissues - epithelium of mucosa of mouth - epithelium of oral mucosa - - - - - - - - visceral serous pericardium - - Visceral serous membrane which is continuous with the parietal serous pericardium and is attached to the myocardium[FMA]. - epicardium - lamina visceralis pericardii serosi - pericardium visceral mesothelium - serous visceral pericardium - visceral lamina of serous pericardium - visceral layer of serous pericardium - visceral pericardium - - - - - - - - chest muscle - - - Any muscle organ that is part of a chest [Automatically generated definition]. - anterior thoracic region muscle organ - anterolateral part of thorax muscle organ - chest muscle organ - front of thorax muscle organ - muscle of thorax - muscle organ of anterior thoracic region - muscle organ of anterolateral part of thorax - muscle organ of chest - muscle organ of front of thorax - musculus thoracicus - thoracic muscle - - - - - - - - arm skin - - A zone of skin that is part of an arm [Automatically generated definition]. - brachial region skin - skin of arm - - - - - - - - limb bone - - - - A bone that is part of a limb [Automatically generated definition]. - bone of extremity - bone of limb - free limb bone - - - - - - - - cervical lymph node - - Cervical lymph nodes are lymph nodes found in the neck. [WP,unvetted]. - lymph node of neck - - - - - - - - striatum - - A region of the forebrain consisting of the caudate nucleus, putamen and fundus striati.[GO]. - caudate putamen - corpus striatum - corpus striatum (Zilles) - dorsal striatum - neostriatum - neuraxis striatum - striate nucleus - striated nucleus - striatum - striatum of neuraxis - - - - - - - - cerebral hemisphere white matter - - White matter that is part of a cerebral hemisphere. - cerebral hemisphere white matter - cerebral white matter - hemisphere white matter - region of cerebral white matter - substantia medullaris cerebri - white matter structure of cerebral hemisphere - - - - - - - - choroidal blood vessel - - - A blood vessel that is part of a choroid [Automatically generated definition]. - blood vessel of choroid - blood vessel of choroid coat - blood vessel of choroidea - blood vessel of posterior uvea - choroid blood vessel - choroid blood vessels - choroid blood vessels set - choroid coat blood vessel - choroidea blood vessel - posterior uvea blood vessel - set of choroid blood vessels - vasa sanguinea choroideae - - - - - - - - patella - - - - A large sesamoid bone found in the distal femur/proximal tibial region of the hindlimb of tetrapods. The patella is the attachment site for proximal hindlimb tendons.[PHENOSCAPE:ad] - knee bone - knee cap - patella - - - - - - - - decidua - - The maternal uterine-derived portion of the placenta - decidous membrane - decidua basalis - endometrium - extraembryonic part of placenta - extraembryonic placenta - maternal decidual layer - maternal part of placenta - maternal placenta - placenta maternal decidual layer - uterine decidua - - - - - - - - endometrial gland - - - - - The mucous secreting gland associated with the mucuous membrane lining the uterus. - endometrial gland - endometrial mucuous gland - endometrium gland - glandulae uterinae - glandulae uterinae - uterine gland - - - - - - - - internal thoracic artery - - An artery that supplies the anterior chest wall and the breasts. It is a paired artery, with one running along each side of the sternum, to continue after its bifurcation as the superior epigastric and musculophrenic arteries. [WP,unvetted]. - arteria mammaria interna - arteria thoracica interna - internal mammary artery - internal thoracic mammary artery - mammary artery - - - - - - - - intersomitic artery - - - The small branching sprouts of the dorsal aorta that grow across the medial surface of the somite, turn right angles to grow over that surface and then fuse with other sprouts and form the vertebral arteries adjacent to the neural tube; the intersomitic arteries supply the body wall and persist in the adult as the posterior intercostal, subcostal and the lumbar arteries - intersegmental arteries - intersegmental artery - - - - - - - - nerve trunk - - - peripheral nerve trunk - trunk of nerve - trunk of peripheral nerve - - - - - - - - lymphoid system - - The lymphatic system in vertebrates is a network of conduits that carry a clear fluid called lymph. It also includes the lymphoid tissue through which the lymph travels. Lymphoid tissue is found in many organs, particularly the lymph nodes, and in the lymphoid follicles associated with the digestive system such as the tonsils. The system also includes all the structures dedicated to the circulation and production of lymphocytes, which includes the spleen, thymus, bone marrow and the lymphoid tissue associated with the digestive system[WP]. - lymphatic circulatory system - lymphatic drainage system - lymphatic system - systema lymphoideum - - - - - - - - esophagus mucosa - - A mucosa that is part of a esophagus [Automatically generated definition]. - esophageal mucosa - esophageal mucous membrane - esophagus mucosa - esophagus mucous membrane - lamina muscularis mucosae oesophageae - mucosa of esophagus - mucosa of oesophagus - mucous membrane of esophagus - mucous membrane of oesophagus - muscularis mucosae of oesophagus - oesophageal mucosa - oesophagus mucosa - oesophagus mucous membrane - tunica mucosa esophagi - tunica mucosa oesophageae - tunica mucosa oesophagi - tunica mucosa oesophagi - - - - - - - - autopod region - - Terminal segment of free limb, immediately distal to the zeugopod region. The fully developed autopod consists of the autopod skeleton plus associated structures such as integument, muscle tissue, vasculature etc. The autopod is divided into mesopodial, metapodiual, and acropodial segments. Examples: human hand, mouse paw, human foot - autopod - autopodial element - autopodial limb segment - autopodial segment - autopodium - autopodium region - distal free limb segment - distal segment of free limb - distal segment of limb - manus/pes - paw - paw/hand/foot/hoof - pod - - - - - - - - zeugopod - - The middle free limb segment, between the autopod and stylopod segments. Includes as parts the zeugopodial skeleton. Examples: There are two types of zeugopod: forelimb zeugopod (aka forearm), hindlimb zeugopod (aka crus). - epipodium - middle free limb segment - middle limb segment - middle part of limb - middle segment of free limb - zeugopod limb segment - zeugopodial limb segment - zeugopodium - zygopod - zygopodium - - - - - - - - stylopod - - The proximal free limb segment. Includes as parts the stylopod skeleton. - propodium - proximal free limb segment - proximal part of limb - proximal segment of free limb - stylopodial limb segment - stylopodium - - - - - - - - bone tissue - - - Skeletal tissue with a collagen-rich extracellular matrix vascularized, mineralized with hydroxyapatite and typically including osteocytes located in lacunae that communicate with one another by cell processes (in canaliculi). Bone is deposited by osteoblasts. - bone - calcium tissue - mineralized bone tissue - osseous tissue - osteogenic tissue - portion of bone tissue - - - - - - - - prostate duct - - - The minute canals that pass the prostatic secretions to the urethra. - duct of prostate - duct of prostate gland - prostate duct - prostate gland duct - prostatic duct - - - - - - - - uterine artery - - - - - arteria uterina - the branch of the internal iliac artery that supplies the uterus and the upper part of the vagina - - - - - - - - long bone - - Long bone is a limb bone that is subcylindrical and has a shaft with periosteum separating the ends of the bones. Long bones are present only in the limbs[VSAO:wd]. - os longum - - - - - - - - cochlear labyrinth - - - - The labyrinth is a system of fluid passages in the inner ear, including both the cochlea, which is part of the auditory system, and the vestibular system, which provides the sense of balance. It is named by analogy with the mythical maze that imprisoned the Minotaur, because of its appearance. The bony labyrinth, or osseous labyrinth, is the network of passages with bony walls lined with periosteum. The bony labyrinth is lined with the membranous labyrinth. There is a layer of perilymph between them. The three parts of the bony labyrinth are the vestibule of the ear, the semicircular canals, and the cochlea. The vestibular system is the region of the inner ear where the semicircular canals converge, close to the cochlea (the hearing organ). The vestibular system works with the visual system to keep objects in focus when the head is moving. Joint and muscle receptors also are important in maintaining balance. The brain receives, interprets, and processes the information from these systems that control our balance. [WP,unvetted]. - - - - - - - - iris epithelium - - - An epithelium that is part of a iris [Automatically generated definition]. - epithelial tissue of iris - epithelium of iris - epithelium pigmentosum (iris) - epithelium pigmentosum iridis - iris epithelial tissue - iris epithelium - iris pigmented epithelium - pigmented epithelium of iris - - - - - - - - abdominal lymph node - - - A lymph node that is part of an abdomen [Automatically generated definition]. - abdomen lymph node - lymph node of abdomen - parietal abdominal lymph node - - - - - - - - mesenteric lymph node - - - The lymph nodes located in the mesentery, of which there are 3 classes: ileocolic, juxtaintestinal mesenteric, and central superior group. - mesenteric node - nodi lymphoidei mesenterici - - - - - - - - corpus luteum - - - - A transient endocrine gland that develops from the postovulatory or atretic follicles and secretes progesterone; it is thought to be related to egg retention[PMID]. - corpora lutea - corpus luteum of ovary - luteal gland - ovarian corpus luteum - - - - - - - - endochondral bone - - - Replacement bone that forms within cartilage. - cartilaginous bone - endochondral bones - ossified chondrogenic bone - - - - - - - - basicranium - - The base of skull is the most inferior area of the skull, composed of the endocranium and lower parts of the skull roof. - base of cranium - base of skull - basis cranii - cranial base - - - - - - - - otolith organ - - - - otolith organs - saccule and utricle - the crystalline particles composed of calcium carbonate and a protein which adhere to the gelatinous membrane of the maculae of the utricle and saccule (otolithic membrane) - utricle and saccule - - - - - - - - elastic tissue - - Connective tissue composed of elastic fibers. - elastic connective tissue - elastic fiber - textus connectivus elasticus - - - - - - - - tunica intima - - Bichat's tunic - The innermost layer of a blood vessel which is a lining of endothelial cells facing the lumen[Kardong]. - intima - tunica intima vasorum - - - - - - - - pancreatic lymph node - - A lymph node that is part of a pancreas [Automatically generated definition]. - aJCC level 19 node - lymph node of pancreas - pancreas lymph node - pancreatic node - pyloric lymph node - - - - - - - - limb segment - - - A major subdivision of a mature or developing limb, including both skeletal elements (or the mesenchyme that gives rise to the skeletal elements) and associated tissues, such as muscle, connective tissue, integument. Examples: autopod region, zeugopod region, stylopod region, metapodial region, arm region. Excludes the limb girdles. - extremity part - free limb segment - limb region - region of limb - segment of limb - subdivision of limb - - - - - - - - gland - - - Druese - an organ that functions as a secretory or excretory organ - glandula - glandular organ - - - - - - - - epiblast (generic) - - In amniote animal embryology, the epiblast is a tissue type derived either from the inner cell mass in mammals or the blastodisc in birds and reptiles. It lies above the hypoblast. In mammalian embryogenesis, the columnar cells of the epiblast are adjacent to the trophoblast, while the cuboidal cells of the hypoblast are closer to the blastocoele. The epiblast, whilst referred to as the primary ectoderm, differentiates to form all three layers of the trilaminar germ disc in a process called gastrulation[WP]. The outer of the two layers of the blastoderm that form during gastrulation, corresponding to primitive ectoderm during gastrulation and to the definitive ectoderm after gastrulation[ZFA] - blastocyst - ectoblast - epiblast - epiblastus - primitive ectoderm - - - - - - - - pharyngeal arch - - - - One of a series of paired bulges that develop along the lateral walls of the foregut. The pharyngeal arches have developmental contributions from endoderm, mesoderm, and neural crest cells and are separated by anterior lateral endoderm out-pockets known as pharyngeal pouches. - arcus pharyngei - branchial arch - pharyngeal arches - visceral arch - - - - - - - - lateral line system - - A line of sensory organs and associated structures along the sides of fish and amphibia that detect vibrations and pressure changes. - lateral line organs - lateral line stitches - lateral-line organs - ll - - - - - - - - digit - - A subdivision of the autopod that has as part a series of phalanges together with associated vasculature, musculature, integument and nerves. It is continuous with the metapodial subdivision of the autopod, but does not include the metapodials. In species such as humans, fully formed digits are distinct, whereas in other species the digits may be connected by interdigital webbing, or may be completely unseparated (for example, in cetaceans). - acropodial unit - digit (phalangeal portion) plus soft tissue - limb digit - - - - - - - - cranial placode - - Ectodermal placode that develops in the head into a part of the sensory nervous system. With a few exceptions (lens, adenohypophyseal), cranial placodes are neurogenic. - cranial placodes - ectodermal cranial placode - ectodermal placode - placode - - - - - - - - anatomical cavity - - Anatomical space which contains portions of one or more body substances and is bounded by the internal surface of one maximally connected anatomical structure. Examples: cranial cavity, pharyngeal recess space, nasal cavity, tooth socket, cavity of serous sac, lumen of stomach, lumen of artery, fornix of vagina. - cavity - - - - - - - - organ cavity - - cavity of organ - - - - - - - - medullary reticular formation - - - The reticular formation is a series of brain nuclei located in the medulla oblongata - bulb reticular formation - bulbar reticular formation - formatio reticularis myelencephali - medulla oblongata reticular formation - medulla oblonmgata reticular formation - medullary reticular nucleus - metepencephalon reticular formation - reticular formation - reticular formation of bulb - reticular formation of medulla - reticular formation of medulla oblongata - reticular formation of medulla oblonmgata - reticular formation of metepencephalon - rhombencephalic reticular formation - - - - - - - - obsolete regional part of medullary reticular formation - A regional part of brain that is part of a medullary reticular formation [Automatically generated definition]. - medullary reticular formation segment - segment of medullary reticular formation - true - - - - - - - - limbic lobe - - Part of cerebral hemisphere located on the medial surface, forming a ring around the brain stem - fornicate convolution - fornicate gyrus - fornicate lobe - grande lobe limbique of Broca - gyrus fornicatus - limbic lobe (carpenter) - lobus limbicus - - - - - - - - regional part of brain - - - Anatomical divisons of the brain according to one or more criteria, e.g. cytoarchitectural, gross anatomy. Parts may be contiguous in 3D or not, e.g., basal ganglia. - anatomical structure of brain - biological structure of brain - brain anatomical structure - brain biological structure - brain part - neuraxis segment - neuroanatomical region - segment of brain - - - - - - - - obsolete regional part of cerebral cortex - A regional part of brain that is part of a cerebral cortex [Automatically generated definition]. - cerebral cortex part - cerebral cortex region - neocortex region - region of cerebral cortex - segment of cerebral cortex - true - - - - - - - - obsolete regional part of midbrain tegmentum - A multi-tissue structure that is part of a midbrain tegmentum. - midbrain tegmentum segment - segment of midbrain tegmentum - true - - - - - - - - midbrain reticular formation - - - MBRF - Part of the reticular formation located in the midbrain tegmentum - formatio reticularis mesencephali - formatio reticularis tegmentalis - formatio reticularis tegmenti mesencephali - reticular formation of midbrain - substantia reticularis mesencephali - tegmental reticular formation - - - - - - - - obsolete regional part of medulla oblongata - A regional part of brain that is part of a medulla oblongata [Automatically generated definition]. - medullary oblongata segment - segment of medulla oblongata - true - - - - - - - - obsolete regional part of metencephalon - A regional part of brain that is part of a metencephalon [Automatically generated definition]. - metencephalon subdivision - segment of metencephalon - true - - - - - - - - basal forebrain - - A region of the brain consisting of ventral and rostral subcortical regions of the telencephalon, including among others, the basal ganglia, septal nuclei, amygdala, ventral pallidum, substantia innominata, and basal nucleus of Meynert. - basal forebrain area - pars basalis telencephali - - - - - - - - regional part of cerebellar cortex - - - A regional part of brain that is part of a cerebellar cortex [Automatically generated definition]. - cerebellar cortical segment - segment of cerebellar cortex - - - - - - - - obsolete regional part of forebrain - A regional part of brain that is part of a forebrain [Automatically generated definition]. - forebrain segment - segment of forebrain - true - - - - - - - - obsolete regional part of diencephalon - A regional part of brain that is part of a diencephalon [Automatically generated definition]. - diencephalon segment - true - - - - - - - - obsolete regional part of telencephalon - A regional part of brain that is part of a telencephalon [Automatically generated definition]. - segment of telencephalon - telencephalon segment - true - - - - - - - - vestibular ganglion - - - - - - Scarpa's ganglion - The ganglion of the vestibular nerve. It contains the cell bodies of the bipolar primary afferent neurons whose peripheral processes form synaptic contact with hair cells of the vestibular sensory end organs[WP,unvetted]. Distributed to the maculae of the utricle and saccule and to the ampullary crests of the semicircular ducts. The vestibular fibers arise in bipolar cells in the vestibular ganglion in the internal acoustic meatus. - nucleus nervi oculomotorii, pars medialis - vestibular part of vestibulocochlear ganglion - vestibulocochlear VIII ganglion vestibular component - vestibulocochlear ganglion vestibular component - - - - - - - - vestibulocochlear ganglion - - - SAG - acoustic ganglion - acoustic ganglion VIII - acoustico-vestibular VIII ganglion - auditory ganglion - auditory ganglion - gVIII - ganglion VIII - nucleus nervi oculomotorii ventrolateralis - nucleus nervi oculomotorii, pars ventralis - statoacoustic (VIII) ganglion - statoacoustic VIII ganglion - statoacoustic ganglia - statoacoustic ganglion - the group of neuron cell bodies associated with the eighth cranial nerve during embryogenesis; splits in later development to form the cochlear and vestibular ganglia - vestibulocochlear VIII ganglion - vestibulocochlear ganglia - - - - - - - - thoracic dorsal root ganglion - - - A dorsal root ganglion that is part of a thorax [Automatically generated definition]. - dorsal root ganglion of thorax - ganglion of dorsal root of thorax - ganglion spinalis of thorax - thoracic dorsal root ganglion - thoracic spinal ganglion - thorax dorsal root ganglion - thorax ganglion of dorsal root - thorax ganglion spinalis - - - - - - - - gustatory epithelium - - A sensory epithelium that is part of a gustatory system. - - - - - - - - obsolete regional part of cerebellum - segment of cerebellum - subdivision of cerebellum - true - - - - - - - - obsolete regional part of midbrain - A regional part of brain that is part of a midbrain [Automatically generated definition]. - midbrain segment - segment of midbrain - true - - - - - - - - septum - - A wall, dividing a cavity or structure into smaller ones[WP]. - septa - - - - - - - - obsolete regional part of hypothalamus - A regional part of brain that is part of a hypothalamus [Automatically generated definition]. - hypothalamus segment - segment of hypothalamus - true - - - - - - - - olfactory placode - - A thick plate of cells derived from the neural ectoderm in the head region of the embryo that develops into the olfactory region of the nasal cavity. - nasal I placode - nasal placode - olfactory placodes - placoda nasalis - placoda olfactoria - - - - - - - - ear vesicle - - - - - - An epithelial sac of invaginated ectoderm formed from the otic placode that gives rise to the structures of the inner ear[MP] - OV - acoustic vesicle - auditory vesicle - otic vesicle - otocyst - - - - - - - - periderm - - - A temporary epithelium that derives from the outer layer of the ectdoerm and is shed once the inner layer differentiates to form a true epidermis. - EVL - epidermis epithelial layer - epidermis outer layer - epitrichium - periderm - skin periderm - - - - - - - - pre-chordal neural plate - - - The portion of neural plate anterior to the mid-hindbrain junction. - anterior neural plate - - - - - - - - chordal neural plate - - The portion of neural plate posterior to the mid-hindbrain junction. - posterior neural plate - - - - - - - - presomitic mesoderm - - PSM - Unsegmented field of paraxial mesoderm present posterior to the most recently formed somite pair, from which somites will form. - presumptive somite mesoderm - segmental plate - somitogenic mesoderm - somitomeric mesoderm - unsegmented mesenchyme - unsegmented paraxial mesoderm - - - - - - - - pronephric duct - - - In mammals, the pronephric duct is the predecessor of the Wolffian duct[WP]. - archinephric duct - ductus pronephricus - pronephric ducts - - - - - - - - blood island - - Blood islands are structures in the developing embryo which lead to many different parts of the circulatory system. They primarily derive from plexuses formed from angioblasts. Within them, vacuoles appear through liquefaction of the central part of the syncytium into plasma. The lumen of the blood vessels thus formed is probably intracellular. The flattened cells at the periphery form the endothelium. The nucleated red blood corpuscles develop either from small masses of the original angioblast left attached to the inner wall of the lumen or directly from the flat endothelial cells. In either case the syncytial mass thus formed projects from and is attached to the wall of the vessel. Such a mass is known as a blood island and hemoglobin gradually accumulates within it. Later the cells on the surface round up, giving the mass a mulberry-like appearance. Then the red blood cells break loose and are carried away in the plasma. Such free blood cells continue to divide. Blood islands have been seen in the area vasculosa in the omphalomesenteric vein and arteries, and in the dorsal aorta[WP, unvetted]. - VBI - blood islands - caudal hematopoietic tissue - posterior ICM - posterior blood island - ventral blood island - ventral lateral plate mesoderm - - - - - - - - prechordal plate - - A horseshoe-shaped thickening of the endoderm at the cranial (rostral) end of the primitive streak formed by the involution of Spemann's organizer cells which, together with the notochord, induces the formation of the neural plate from the overlying ectodermal cells and contributes mesodermal type cells to the surrounding tissue - head mesenchyme - head mesoderm - - - - - - - - intermediate mesoderm - - IM - The intermediate mesoderm is located between the lateral mesoderm and the paraxial mesoderm. It develops into the kidney and gonads. - intermediate mesenchyme - intermediate plate - intermediate plate mesoderm - mesenchyma intermedium - - - - - - - - pharyngeal arch 2 - - 2nd arch - 2nd pharyngeal arch - 2nd visceral arch - The second pharyngeal arch will form the hyoid apparatus. The cranial neural crest cells that populate the second pharyngeal arch emerge primarily from rhombomere 4 and will form skeletal elements. - arcus pharyngeus secundus - branchial arch 2 - hyoid arch - hyoid bars - pharyngeal arch 2 - pharyngeal arches 2 - second branchial arch - second pharyngeal arch - second visceral arch - visceral arch 2 - - - - - - - - dorsolateral placode - - Lateral neurogenic placodes positioned dorsal of the epibranchial placodes. - dorsolateral placodes - - - - - - - - axial mesoderm - - The axial mesoderm includes the prechordal mesoderm and the chordamesoderm. It gives rise to the prechordal plate and to the notochord. - chordamesoderm - - - - - - - - otic placode - - A cranial placode which, once specified, invaginates to form an otic cup, which eventually separates from the surface ectoderm to form the otic vesicle or otocyst, a rounded structure without appar- ent polarity. As the otic placode invaginates into a cup neuroblasts delaminate from the anterior ventral aspect of the otic epithelium to give rise to neurons of the vestibulocochlear (statoacoustic) ganglion of cranial nerve VIII[NBK] - auditory placode - ear placode - ear/otic placode - octaval VIII placode - octaval placode - placoda otica - - - - - - - - eye primordium - - - - - - Portion of tissue that is part of the anterior neural keel and will form the optic vesicle[ZFA]. A paired ectodermal placode that becomes invaginated to form the embryonic lens vesicles. - eye anlage - eye field - eye placode - occular primordium - ocular primordium - optic field - optic placode - optic placode of camera-type eye - optic placodes - optic primordium - - - - - - - - optic cup - - - Multi-tissue structure that is comprised of neural and non-neural epithelial layers which will form the retina and retinal pigmented epithelium of the mature eye[ZFA]. double walled structured formed by expansion and invagination of the distal end of the optic vesicle that develops into the pigmented and sensory layers of the retina while the mouth of the optic cup eventually forms the pupil of the eye[MP]. - eye cup - eyecup - ocular cup - ophtalmic cup - - - - - - - - lens placode - - - - - A thickened portion of ectoderm which serves as the precursor to the lens. SOX2 and Pou2f1 are involved in its development[WP]. - lens placodes - placoda lentis - - - - - - - - mesonephric duct - - - Leydig's duct - Paired organ that connects the primitive kidney Wolffian body (or mesonephros) to the cloaca and serves as the anlage for certain male reproductive organs. the Wolffian duct is what remains of the pronephric duct after the atrophy of the pronephros[WP]. In Zebrafish: Duct of the adult kidney (mesonephros), present bilaterally ventral to the somites and leading to the cloacal chamber[ZFA]. - Wolffian duct - archinephric duct - ductus mesonephricus; ductus Wolffi - renal duct - - - - - - - - neural plate - - - - A region of embryonic ectodermal cells that lie directly above the notochord. During neurulation, they change shape and produce an infolding of the neural plate (the neural fold) that then seals to form the neural tube[XAO]. The earliest recognizable dorsal ectodermal primordium of the central nervous system present near the end of gastrulation before infolding to form the neural keel; consists of a thickened pseudostratified epithelium[ZFA] - lamina neuralis - presumptive central nervous system - - - - - - - - posterior neural tube - - - - - - - - - - paraxial mesoderm - - - - The paraxial mesoderm is the mesoderm located bilaterally adjacent to the notochord and neural tube[GO] - mesoderma paraxiale - paraxial mesenchyme - somitic mesoderm - - - - - - - - anterior neural tube - - - - - - - - - lateral plate mesoderm - - - - - LPM - Portion of the middle of the three primary germ layers of the embryo that resides on the periphery of the embryo, is continuous with the extra-embryonic mesoderm, splits into two layers enclosing the intra-embryonic coelom, and gives rise to body wall structures[MP]. - lateral mesoderm - lateral plate - lateral plate mesenchyme - mesoderma laminae lateralis - - - - - - - - myotome - - A transitional population of migrating mesenchymal cells that derive from somites and that will become muscle cells. - muscle plate - myomere - myomeres - myotome region - myotomes - myotomus - - - - - - - - trunk neural crest - - - - TNC - Trunk portion of the neural crest. The trunk neural crest lies between the vagal and sacral neural crest and gives rise to two groups of cells. One group migrates dorsolateral and populates the skin, forming pigment cells and the other migrates ventrolateral through the anterior sclerotome to become the epinephrine-producing cells of the adrenal gland and the neurons of the sympathetic nervous system. Some cells remain in the sclerotome to form the dorsal root ganglia [Wikipedia]. - trunk crest - - - - - - - - heart primordium - - Bilateral groups of cells consisting of three rows: one row of endocardial precursors medially and two rows of myocardical precursors laterally. The two populations fuse at the midline to form the heart rudiment or cone. - cardiac field - fused heart primordium - - - - - - - - sclerotome - - - Ventral somitic compartment that is a precursor of the axial skeleton[XAO]. Sclerotomes eventually differentiate into the vertebrae and most of the skull. The caudal (posterior) half of one sclerotome fuses with the rostral (anterior) half of the adjacent one to form each vertebra. From their initial location within the somite, the sclerotome cells migrate medially towards the notochord. These cells meet the sclerotome cells from the other side to form the vertebral body. From this vertebral body, sclerotome cells move dorsally and surround the developing spinal cord, forming the vertebral arch[WP]. - sclerotomes - sclerotomus - - - - - - - - thyroid primordium - - - - The initial thyroid precursor, the thyroid primordium, starts as a simple midline thickening and develops to form the thyroid diverticulum. This structure is initially hollow, although it later solidifies and becomes bilobed. The 2 lobes are located on either side of the midline and are connected via an isthmus. - thyroid primordia - - - - - - - - cranial neural crest - - - - CNC - cephalic neural crest - cranial NCC population - crista neuralis cranialis - head NCC population - head crest - head neural crest - neural crest cells (NCCs) originating in the anterior part of the developing embryo and residing between the mid-diencephalon and the forming hindbrain; cranial NCCs migrate dorsolaterally to form the craniofacial mesenchyme that differentiates into various craniofacial cartilages and bones, cranial neurons, glia, and connective tissues of the face; these cells enter the pharyngeal pouches and arches where they give rise to thymic cells, bones of the middle ear and jaw (mandible), and the odontoblasts of the tooth primordia; like their counterparts in the trunk, cranial NCCs also contribute to the developing peripheral nervous system, along with the pigmented cell (i.e. melanocyte) lineage. - - - - - - - - female organism - - - Gonochoristic organism that can produce female gametes. - female - female human body - - - - - - - - male organism - - Gonochoristic organism that can produce male gametes. - male - male human body - - - - - - - - surface structure - - Anatomical structure that overlaps the outer epithelial layer and is adjacent to the space surrounding the organism. - anatomical surface feature - surface feature - surface region - surface structures - - - - - - - - compound organ - - Anatomical structure that has as its parts two or more multi-tissue structures of at least two different types and which through specific morphogenetic processes forms a single distinct structural unit demarcated by bona fide boundaries from other distinct anatomical structures of different types. - organ - - - - - - - - mesenchyme - - Portion of tissue consisting of loosely organized undifferentiated mesodermal cells that give rise to such structures as connective tissues, blood, lymphatics, bone, and cartilage[XAO]. A mesh-like cell arrangement, less compact than an epithelium[ZFA]. The part of the embryonic mesoderm, consisting of loosely packed, unspecialized cells set in a gelatinous ground substance, from which connective tissue, bone, cartilage, and the circulatory and lymphatic systems develop[BTO]. - mesenchyma - mesenchymal tissue - mesenchyme tissue - portion of mesenchymal tissue - portion of mesenchyme tissue - - - - - - - - pharyngeal arch 6 - - 6th arch - 6th pharyngeal arch - 6th visceral arch - The 6th pharyngeal arch. contributes to the development of the sternocleidomastoid and trapezius muscles - branchial arch 4 - fourth branchial arch - gill arch 4 - sixth branchial arch - sixth pharyngeal arch - sixth visceral arch - visceral arch 6 - - - - - - - - pharyngeal arch artery 1 - - 1st aortic arch artery - 1st arch artery - 1st branchial arch artery - 1st pharyngeal arch artery - AA1 - The vessels formed within the first pair of branchial arches in embryogenesis - aortic arch 1 - first aortic arch - first arch artery - first branchial arch artery - mandibular aortic arch - - - - - - - - pharyngeal arch artery 2 - - 2nd aortic arch artery - 2nd arch artery - 2nd branchial arch artery - 2nd pharyngeal arch artery - AA2 - The vessels formed within the second pair of branchial arches in embryogenesis - aortic arch 2 - hyoid aortic arch - second aortic arch - second branchial arch artery - - - - - - - - pharyngeal arch artery 6 - - 6th aortic arch artery - 6th arch artery - 6th branchial arch artery - 6th pharyngeal arch artery - AA6 - The vessels formed within the sixth pair of branchial arches in embryogenesis - aortic arch 6 - pulmonary arch - sixth aortic arch - sixth branchial arch artery - - - - - - - - chorion - - - chorion (vertebrates) - chorion frondosum - chorionic sac - embryonic chorion - fetal chorion - the outermost extraembryonic membrane - uterine chorion - - - - - - - - trachea - - The trachea is the portion of the airway that attaches to the bronchi as it branches [GO:dph]. - cartilaginous trachea - tracheal tubule - vertebrate trachea - windpipe - - - - - - - - cranium - - Upper portion of the skull that excludes the mandible (when present in the organism). - bones of cranium - calvarium - epicranial plate - ossa cranii - set of bones of cranium - skeletal system of head - skull minus mandible - upper part of skull - - - - - - - - skull - - - Anatomical structure that is part of the head consisting entirely of cranium and mandible[WP]. - cranial skeleton - skeletal system of head - - - - - - - - reproductive organ - - - An organ involved in reproduction - genital organ - genitalia - reproductive system organ - sex organ - - - - - - - - female reproductive organ - - A female organ involved in reproduction - female organism reproductive organ - female organism reproductive structure - female organism reproductive system organ - female organism sex organ - female reproductive gland/organ - female reproductive system organ - female sex organ - reproductive organ of female organism - reproductive structure of female organism - reproductive system organ of female organism - sex organ of female organism - - - - - - - - male reproductive organ - - A male organ involved in reproduction - male organism reproductive organ - male organism reproductive structure - male organism reproductive system organ - male organism sex organ - male reproductive gland/organ - male reproductive system organ - male sex organ - reproductive organ of male organism - reproductive structure of male organism - reproductive system organ of male organism - sex organ of male organism - - - - - - - - blood-cerebrospinal fluid barrier - - - barrier in the choroid plexus located in the lateral, third, and fourth brain ventricles that controls the entrance of substances into the cerebrospinal fluid from the blood[MP]. - blood-CSF barrier - - - - - - - - mammary gland alveolus - - - A sac-like structure that is found in the mature gland[GO]. - alveolus of lactiferous gland - alveolus of lobe of breast - alveolus of lobe of mammary gland - alveolus of mammary gland - lactiferous alveolus - lactiferous gland alveolus - lobe of breast alveolus - lobe of mammary gland alveolus - mammary alveoli - mammary alveolus - - - - - - - - alveolus - - organ part that has the form of a hollow cavity[WP]. - - - - - - - - ovary septum - - Septum that divides the ovary, the basal portion of a carpel or group of fused carpels, that encloses the ovule(s)[GO]. - - - - - - - - metanephric mesenchyme - - - - - metanephric blastema - metanephric mesoderm - metanephrogenic mesenchyme - metanephros associated mesenchyme - one of the two embryological structures that give rise to the kidney (the other is the ureteric bud). The metanephric blastema mostly develops into nephrons, but can also form parts of the collecting duct system.[WP]. Metanephric mesenchyme is the tissue made up of loosely connected mesenchymal cells in the metanephros[GO] - - - - - - - - phalanx - - - - Endochondral bones that are often elongate and arranged in rows of articulating elements, and form the visible part of the digits. - digit long bone - long bone of digit - phalange - phalanges - phalanx bone - - - - - - - - epithelium of knee - - An epithelium that is part of a knee [Automatically generated definition]. - epithelial tissue of knee - knee epithelial tissue - knee epithelium - - - - - - - - epithelium of lower jaw - - An epithelium that is part of a lower jaw [Automatically generated definition]. - epithelial tissue of lower jaw - epithelial tissue of ventral mandibular arch - epithelium of ventral mandibular arch - lower jaw epithelial tissue - lower jaw epithelium - ventral mandibular arch epithelial tissue - ventral mandibular arch epithelium - - - - - - - - epithelium of utricle - - An epithelium that is part of a utricle of membranous labyrinth [Automatically generated definition]. - epithelial tissue of membranous labyrinth utricle - epithelial tissue of utricle - epithelial tissue of utricle of membranous labyrinth - epithelial tissue of utriculus (labyrinthus vestibularis) - epithelium of macula of utricle of membranous labyrinth - epithelium of membranous labyrinth utricle - epithelium of utricle of membranous labyrinth - epithelium of utriculus (labyrinthus vestibularis) - membranous labyrinth utricle epithelial tissue - membranous labyrinth utricle epithelium - utricle epithelial tissue - utricle epithelium - utricle of membranous labyrinth epithelial tissue - utricle of membranous labyrinth epithelium - utriculus (labyrinthus vestibularis) epithelial tissue - utriculus (labyrinthus vestibularis) epithelium - - - - - - - - epithelium of saccule - - An epithelium that is part of a saccule of membranous labyrinth [Automatically generated definition]. - epithelial tissue of membranous labyrinth saccule - epithelial tissue of saccule - epithelial tissue of saccule of membranous labyrinth - epithelial tissue of sacculus (labyrinthus vestibularis) - epithelium of macula of saccule of membranous labyrinth - epithelium of membranous labyrinth saccule - epithelium of saccule of membranous labyrinth - epithelium of sacculus (labyrinthus vestibularis) - membranous labyrinth saccule epithelial tissue - membranous labyrinth saccule epithelium - saccule epithelial tissue - saccule epithelium - saccule of membranous labyrinth epithelial tissue - saccule of membranous labyrinth epithelium - sacculus (labyrinthus vestibularis) epithelial tissue - sacculus (labyrinthus vestibularis) epithelium - - - - - - - - epithelium of cochlear duct - - An epithelium that is part of a cochlear duct of membranous labyrinth [Automatically generated definition]. - Reissner's canal epithelial tissue - Reissner's canal epithelium - cochlear duct epithelial tissue - cochlear duct epithelium - cochlear duct of membranous labyrinth epithelial tissue - cochlear duct of membranous labyrinth epithelium - epithelial tissue of Reissner's canal - epithelial tissue of cochlear duct - epithelial tissue of cochlear duct of membranous labyrinth - epithelium of Reissner's canal - epithelium of cochlear duct of membranous labyrinth - - - - - - - - epithelium of mammary gland - - epithelium of lactiferous gland - lactiferous gland epithelium - mammary epithelium - mammary gland epithelial tissue - mammary gland epithelium - the epithelial layer of the luminal surfaces of the mammary gland - - - - - - - - epithelium of forearm - - An epithelium that is part of a lower arm [Automatically generated definition]. - forearm epithelium - - - - - - - - epithelium of footplate - - - - An epithelium that is part of a footplate. - foot plate epithelium - footplate epithelium - - - - - - - - epithelium of otic placode - - - - An epithelium that is part of a otic placode [Automatically generated definition]. - epithelial tissue of otic placode - otic epithelium - otic placode epithelial tissue - otic placode epithelium - - - - - - - - amniotic ectoderm - - - - - amnion ectoderm - amnion epithelium - amnionic ectoderm - - - - - - - - yolk sac endoderm - - - - The portion of the yolk sac that is derived from endoderm and lines the yolk sac. - - - - - - - - endoderm of foregut - - - - An endoderm that is part of a foregut [Automatically generated definition]. - foregut endoderm - - - - - - - - endoderm of midgut - - - - An endoderm that is part of a midgut [Automatically generated definition]. - midgut endoderm - - - - - - - - endoderm of hindgut - - - - An endoderm that is part of a hindgut [Automatically generated definition]. - hindgut endoderm - - - - - - - - thyroid primordium endoderm - - An endoderm that is part of a thyroid primordium. - endoderm of thyroid primordium - - - - - - - - amniotic mesoderm - - - - A mesenchyme that is part of a amnion. - amnion mesenchyme - amnion mesoderm - amnionic mesenchyme - amnionic mesoderm - amnionic mesoderm - mesenchyme of amnion - - - - - - - - chorionic mesenchyme - - - - A mesenchyme that is part of a chorion. - chorion mesenchyme - chorion mesoderm - chorionic mesenchyme - mesenchyme of chorion - mesenchyme of chorion (vertebrates) - - - - - - - - tooth of lower jaw - - - - A calcareous tooth that is part of the lower jaw region. In mammals, the lower jaw teeth are attached to the mandible (dentary). - calcareous tooth of lower jaw - lower jaw calcareous tooth - lower jaw dentine containing tooth - lower jaw tooth - lower jaw vertebrate tooth - mandibular tooth - - - - - - - - skeletal muscle tissue of eye - - - A portion of skeletal muscle tissue that is part of a eye [Automatically generated definition]. - eye skeletal muscle - eye skeletal muscle group - eye skeletal muscle tissue - skeletal muscle tissue of eye - - - - - - - - obsolete skeletal muscle tissue of tongue - true - - - - - - - - obsolete skeleton of embryo - A skeletal system that is part of a embryo [Automatically generated definition]. - developmental tissue set of all bones - developmental tissue set of bones of body - developmental tissue skeletal system - developmental tissue skeleton - developmental tissue skeleton system - embryo set of all bones - embryo set of bones of body - embryo skeletal system - embryo skeleton - embryo skeleton system - set of all bones of developmental tissue - set of all bones of embryo - set of bones of body of developmental tissue - set of bones of body of embryo - skeletal system of developmental tissue - skeletal system of embryo - skeleton of developmental tissue - skeleton system of developmental tissue - skeleton system of embryo - true - - - - - - - - skeleton of lower jaw - - - A subdivision of the skeleton that corresponds to the lower part of the mouth. The lower jaw skeleton includes the following elements, when present: lower jaw teeth, the mandible and other lower jaw bones, and Meckel's cartilage. - lower jaw - lower jaw skeleton - mandible - mandibles - mandibular series - - - - - - - - endothelium of trachea - - - - An endothelium that is part of a trachea. - endothelium of windpipe - trachea endothelium - windpipe endothelium - - - - - - - - mesentery of stomach - - The portion of the primitive mesentery that encloses the stomach; from its dorsal sheet, the greater omentum develops, and from its ventral sheet, the lesser omentum. - mesentery of ventriculus - mesogaster - mesogastium - mesogastrium - stomach mesentery - ventriculus mesentery - - - - - - - - mesentery of heart - - A mesentery that surrounds the heart. - cardiac mesentery - heart mesentery - mesocardium - - - - - - - - mesentery of oesophagus - - - A mesentery that is part of a esophagus [Automatically generated definition]. - esophagus mesentery - gullet mesentery - mesentery of esophagus - mesentery of gullet - meso-esophagus - oesophagus mesentery - - - - - - - - mesentery of midgut - - A mesentery that is part of a midgut [Automatically generated definition]. - midgut mesentery - - - - - - - - meninx of midbrain - - A meninx that is part of a midbrain [Automatically generated definition]. - meninges of midbrain - mesencephalon meninges - midbrain meninges - midbrain meninx - - - - - - - - meninx of telencephalon - - A meninx that is part of a telencephalon [Automatically generated definition]. - meninges of telencephalon - telencephalon meninges - telencephalon meninx - - - - - - - - meninx of diencephalon - - A meninx that is part of a diencephalon [Automatically generated definition]. - between brain meninges - between brain meninx - diencephalon meninges - diencephalon meninx - interbrain meninges - interbrain meninx - mature diencephalon meninges - mature diencephalon meninx - meninges of between brain - meninges of diencephalon - meninges of interbrain - meninges of mature diencephalon - meninx of between brain - meninx of interbrain - meninx of mature diencephalon - - - - - - - - meninx of hindbrain - - A meninx that is part of a hindbrain [Automatically generated definition]. - hindbrain meninges - hindbrain meninx - meninges of hindbrain - rhomencephalon meninges - - - - - - - - meninx of spinal cord - - - A meninx that is part of a spinal cord [Automatically generated definition]. - menines of spinal cord - meninges of spinal cord - spinal cord meninges - spinal cord meninx - spinal meninges - spinal meninx - - - - - - - - gland of foregut - - A gland that is part of a foregut [Automatically generated definition]. - foregut gland - - - - - - - - pharyngeal gland - - Racemose mucous glands beneath the mucous membrane of the pharynx. - glandulae pharyngeae - pharynx gland - - - - - - - - gland of diencephalon - - - Any gland that is part of the diencephalon. Examples: pineal gland, neurohypophysis. - diencephalon gland - interbrain gland - - - - - - - - gland of integumental system - - A gland that is part of a integumental system [Automatically generated definition]. - integumental gland - integumental system gland - integumentary gland - - - - - - - - mesoderm blood island - - - - - A blood island that is part of a mesoderm. - mesenchyme blood island - mesoderm blood islands - - - - - - - - mesenchyme of testis - - Mesenchyme that is part of a developing testis [Automatically generated definition]. - testis mesenchyme - - - - - - - - eye mesenchyme - - - Mesenchyme that is part of a developing camera-type eye. - mesenchyme of eye - - - - - - - - mesenchyme of ovary - - Mesenchyme that is part of a developing ovary [Automatically generated definition]. - female reproductive system gonad mesenchyme - female reproductive system gonada mesenchyme - gonad of female reproductive system mesenchyme - gonada of female reproductive system mesenchyme - mesenchyme of female reproductive system gonad - mesenchyme of female reproductive system gonada - mesenchyme of gonad of female reproductive system - mesenchyme of gonada of female reproductive system - ovary mesenchyme - - - - - - - - mesenchyme of yolk sac - - The portion of the yolk sac that is derived from mesoderm and consists of mesenchyme. - yolk sac mesenchyme - - - - - - - - mesenchyme of knee - - Mesenchyme that is part of a developing knee [Automatically generated definition]. - knee mesenchyme - - - - - - - - mesenchyme of lower jaw - - Mesenchyme that is part of a developing lower jaw [Automatically generated definition]. - lower jaw mesenchyme - mesenchyme of ventral mandibular arch - ventral mandibular arch mesenchyme - - - - - - - - mesenchyme of pinna - - - Mesenchyme that is part of a developing pinna [Automatically generated definition]. - auricle mesenchyme - auricle of ear mesenchyme - auricle of external ear mesenchyme - auricula (auris externa) mesenchyme - auricula mesenchyme - mesenchyme of auricle - mesenchyme of auricle of ear - mesenchyme of auricle of external ear - mesenchyme of auricula - mesenchyme of auricula (auris externa) - mesenchyme of pinna of ear - pinna mesenchyme - pinna of ear mesenchyme - - - - - - - - mesenchyme of mammary gland - - - Mesenchyme that is part of a developing mammary gland. - lactiferous gland mesenchyme - lobe of breast mesenchyme - lobe of mammary gland mesenchyme - mammary gland mesenchyme - mammary mesenchyme - mesenchyme of lactiferous gland - mesenchyme of lobe of breast - mesenchyme of lobe of mammary gland - - - - - - - - mesenchyme of forearm - - Mesenchyme that is part of a developing lower arm [Automatically generated definition]. - - - - - - - - mesenchyme of footplate - - Mesenchyme that is part of a footplate. - foot plate mesenchyme - - - - - - - - submucosa of anal canal - - - A submucosa that is part of an anal canal [Automatically generated definition]. - anal canal submucosa - anal canal viewed anatomically submucosa - anal region submucosa - anatomical anal canal submucosa - submucosa of anal canal viewed anatomically - submucosa of anal region - submucosa of anatomical anal canal - - - - - - - - submucosa of rectum - - The submucous layer of the wall of the rectum. - rectal submucosa - rectum submucosa - tela submucosa recti - - - - - - - - submucosa of colon - - A submucosa that is part of a colon [Automatically generated definition]. - colon submucosa - colonic submucosa - large bowel submucosa - submucosa of large bowel - - - - - - - - submucosa of duodenum - - A submucosa that is part of a duodenum [Automatically generated definition]. - doudenal submucosa - duodenal submucosa - duodenum submucosa - - - - - - - - submucosa of jejunum - - A submucosa that is part of a jejunum [Automatically generated definition]. - jejunal submucosa - jejunum submucosa - - - - - - - - serosa of rectum - - A serous membrane that is part of a rectum [Automatically generated definition]. - rectal serosa - rectum serosa - rectum serous membrane - serous membrane of rectum - visceral peritoneum of rectum - - - - - - - - serosa of colon - - A serous membrane that is part of a colon [Automatically generated definition]. - colon serosa - colon serous membrane - colonic serosa - large bowel serosa - large bowel serous membrane - serosa of large bowel - serous membrane of colon - serous membrane of large bowel - visceral peritoneum of colon - - - - - - - - serosa of duodenum - - A serous membrane that is part of a duodenum [Automatically generated definition]. - doudenal serosa - duodenal serosa - duodenum serosa - duodenum serous membrane - serous membrane of duodenum - visceral peritoneum of duodenum - - - - - - - - serosa of jejunum - - A serous membrane that is part of a jejunum [Automatically generated definition]. - jejunal serosa - jejunum serosa - jejunum serous membrane - serous membrane of jejunum - visceral peritoneum of jejunum - - - - - - - - ganglion of peripheral nervous system - - A spatially aggregated collection of nerve cell bodies in the PNS, consisting of one or more subpopulations that share cell type, chemical phenotype, and connections. (CUMBO). - peripheral nervous system ganglion - - - - - - - - ganglion of central nervous system - - - A ganglion that is part of a central nervous system [Automatically generated definition]. - central nervous system ganglion - ganglion of neuraxis - neuraxis ganglion - - - - - - - - mucosa of anal canal - - - A mucosa that is part of an anal canal [Automatically generated definition]. - anal canal mucosa - anal canal mucosa of organ - anal canal mucous membrane - anal canal organ mucosa - anal canal viewed anatomically mucosa - anal canal viewed anatomically mucosa of organ - anal canal viewed anatomically mucous membrane - anal canal viewed anatomically organ mucosa - anal mucosa - anal mucous membrane - anal region mucosa - anal region mucosa of organ - anal region mucous membrane - anal region organ mucosa - anatomical anal canal mucosa - anatomical anal canal mucosa of organ - anatomical anal canal mucous membrane - anatomical anal canal organ mucosa - mucosa of anal canal viewed anatomically - mucosa of anal region - mucosa of anatomical anal canal - mucosa of organ of anal canal - mucosa of organ of anal canal viewed anatomically - mucosa of organ of anal region - mucosa of organ of anatomical anal canal - mucous membrane of anal canal - mucous membrane of anal canal viewed anatomically - mucous membrane of anal region - mucous membrane of anatomical anal canal - organ mucosa of anal canal - organ mucosa of anal canal viewed anatomically - organ mucosa of anal region - organ mucosa of anatomical anal canal - - - - - - - - mucosa of oral region - - A mucosa that is part of a oral opening [Automatically generated definition]. - mucosa of oral opening - mucosa of oral part of face - mucosa of organ of oral opening - mucosa of organ of oral part of face - mucosa of organ of oral region - mucosa of organ of subdivision of mouth - mucosa of subdivision of mouth - mucous membrane of oral opening - mucous membrane of oral part of face - mucous membrane of oral region - mucous membrane of subdivision of mouth - oral opening mucosa - oral opening mucosa of organ - oral opening mucous membrane - oral opening organ mucosa - oral part of face mucosa - oral part of face mucosa of organ - oral part of face mucous membrane - oral part of face organ mucosa - oral region mucosa - oral region mucosa of organ - oral region mucous membrane - oral region organ mucosa - organ mucosa of oral opening - organ mucosa of oral part of face - organ mucosa of oral region - organ mucosa of subdivision of mouth - subdivision of mouth mucosa - subdivision of mouth mucosa of organ - subdivision of mouth mucous membrane - subdivision of mouth organ mucosa - - - - - - - - mucosa of rectum - - A mucosa that is part of a rectum [Automatically generated definition]. - mucosa of organ of rectum - mucous membrane of rectum - organ mucosa of rectum - rectal mucosa - rectal mucous membrane - rectum mucosa - rectum mucosa of organ - rectum mucous membrane - rectum organ mucosa - - - - - - - - epithelium of mucosa - - A layer of epithelial cells on the surface of the mucosa. - lamina epithelialis mucosa - lamina epithelialis mucosae - - - - - - - - pharyngeal epithelium - - - - An epithelium that is part of a pharynx [Automatically generated definition]. - epithelial tissue of pharynx - epithelium of pharynx - pharynx epithelial tissue - pharynx epithelium - - - - - - - - epithelium of midgut - - An epithelium that is part of a midgut. - epithelial tissue of midgut - midgut epithelial tissue - midgut epithelium - - - - - - - - epithelium of hindgut - - An epithelium that is part of a hindgut [Automatically generated definition]. - epithelial tissue of hindgut - hindgut epithelial tissue - hindgut epithelium - - - - - - - - epithelium of rectum - - - An epithelium that is part of a rectum [Automatically generated definition]. - epithelial tissue of rectum - rectal epithelium - rectum epithelial tissue - rectum epithelium - - - - - - - - epithelium of tongue - - - An epithelium that is part of a tongue [Automatically generated definition]. - epithelial tissue of tongue - lingual epithelium - tongue epithelial tissue - tongue epithelium - - - - - - - - epithelium of vomeronasal organ - - - - An epithelium that is part of a vomeronasal organ [Automatically generated definition]. - Jacobson's organ epithelial tissue - Jacobson's organ epithelium - epithelial tissue of Jacobson's organ - epithelial tissue of vomeronasal organ - epithelium of Jacobson's organ - vomeronasal epithelium - vomeronasal organ epithelial tissue - vomeronasal organ epithelium - vomeronasal organ sensory epithelium - - - - - - - - pelvic appendage bud ectoderm - - - - An unilaminar epithelium that surrounds a pelvic appendage bud. - hindlimb bud ectoderm - hindlimb ectoderm - hindlimb ectoderm - leg ectoderm - lower limb bud ectoderm - pelvic fin bud ectoderm - - - - - - - - pectoral appendage bud ectoderm - - - - An unilaminar epithelium that surrounds a pectoral appendage bud. - arm ectoderm - forelimb bud ectoderm - forelimb ectoderm - pectoral fin bud ectoderm - upper limb bud ectoderm - wing ectoderm - - - - - - - - ectoderm of footplate - - An ectoderm that is part of a footplate. - - - - - - - - chorionic ectoderm - - A extraembryonic structure that develops_from a ectoderm and is part of a chorion. - chorion ectoderm - chorion epithelium - chorionic epithelium - - - - - - - - cardiac muscle of right ventricle - - A portion of cardiac muscle tissue that is part of a right ventricle [Automatically generated definition]. - cardiac muscle tissue of right ventricle - right ventricle cardiac muscle - right ventricular cardiac muscle tissue - - - - - - - - cardiac muscle of left ventricle - - A portion of cardiac muscle tissue that is part of a left ventricle [Automatically generated definition]. - cardiac muscle tissue of left ventricle - left ventricle cardiac muscle - left ventricular cardiac muscle tissue - - - - - - - - cardiac muscle tissue of interventricular septum - - - A portion of cardiac muscle tissue that is part of an interventricular septum [Automatically generated definition]. - cardiac muscle of interventricular septum - cardiac muscle tissue of interventricular septum - interventricular septum cardiac muscle - interventricular septum heart muscle - interventricular septum muscle - interventricular septum myocardium - - - - - - - - skeletal muscle tissue of pharynx - - A portion of skeletal muscle tissue that is part of a pharynx [Automatically generated definition]. - pharynx skeletal muscle - pharynx skeletal muscle tissue - skeletal muscle tissue of pharynx - - - - - - - - smooth muscle of eye - - - any of the striated muscles that move the eye and include: superior rectus, inferior rectus, medial rectus, lateral rectus, superior oblique, inferior oblique, retractor bulbi - ocular smooth muscle - - - - - - - - smooth muscle of trachea - - A portion of smooth muscle tissue that is part of a trachea [Automatically generated definition]. - trachea smooth muscle - tracheal smooth muscle - - - - - - - - mesothelium of pericardial cavity - - A mesothelium that is part of a pericardium [Automatically generated definition]. - cavity of pericardial sac meso-epithelium - cavity of pericardial sac mesothelium - meso-epithelium of cavity of pericardial sac - meso-epithelium of pericardial cavity - mesothelium of cavity of pericardial sac - pericardial cavity meso-epithelium - pericardial cavity mesothelium - - - - - - - - mesentery of urinary system - - A mesentery that is part of a urinary system [Automatically generated definition]. - excretory system mesentery - mesentery of excretory system - mesentery of renal system - mesentery of systema urinaria - renal system mesentery - systema urinaria mesentery - urinary system mesentery - - - - - - - - mesentery of hindgut - - A mesentery that is part of a hindgut [Automatically generated definition]. - hindgut mesentery - - - - - - - - mesentery of rectum - - - A mesentery that is part of a rectum [Automatically generated definition]. - rectum mesentery - - - - - - - - mesentery of colon - - - - A mesentery that is part of a colon [Automatically generated definition]. - colon mesentery - large bowel mesentery - large intestinal mesentery - mesentery of large bowel - mesentery of large intestine - - - - - - - - mesentery of duodenum - - - A mesentery that is part of a duodenum [Automatically generated definition]. - duodenum mesentery - - - - - - - - mesentery of jejunum - - - A mesentery that is part of a jejunum [Automatically generated definition]. - jejunal mesentery - jejunum mesentery - mesojejunum - - - - - - - - skin of forearm - - A zone of skin that is part of a lower arm [Automatically generated definition]. - forearm skin - lower arm skin - lower segment of arm skin - skin of antebrachial region - skin of lower arm - skin of lower segment of arm - skin of zeugopod of arm - - - - - - - - cartilage of respiratory system - - A cartilage element that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius cartilage - cartilage of apparatus respiratorius - respiratory system cartilage - - - - - - - - gland of gut - - - A gland that is part of a digestive tract [Automatically generated definition]. - digestive tract gland - gland of digestive tract - gland of lower gastrointestinal tract - gut gland - lower gastrointestinal tract gland - - - - - - - - gland of tongue - - Any of the mucous, serous, or mixed glands that empty their secretions onto the surface of the tongue. - lingual gland - tongue gland - - - - - - - - pelvic appendage bud mesenchyme - - Mesenchyme that is part of a pelvic appendage bud. - hindlimb bud mesenchyme - leg mesenchyme - lower limb bud mesenchyme - mesoderm pelvic fin bud - pelvic fin bud mesenchyme - - - - - - - - pectoral appendage bud mesenchyme - - Mesenchyme that is part of a pectoral appendage bud. - arm mesenchyme - forelimb bud mesenchyme - mesoderm pectoral fin bud - pectoral fin bud mesenchyme - upper limb bud mesenchyme - wing mesenchyme - - - - - - - - mesenchyme of tongue - - Mesenchyme that is part of a developing tongue [Automatically generated definition]. - tongue mesenchyme - - - - - - - - mesenchyme of vomeronasal organ - - - Jacobson's organ mesenchyme - Mesenchyme that is part of a developing vomeronasal organ [Automatically generated definition]. - mesenchyme of Jacobson's organ - vomeronasal mesenchyme - vomeronasal organ mesenchyme - - - - - - - - mesenchyme of umbilical cord - - - - A gelatinous substance within the umbilical cord, largely made up of mucopolysaccharides (hyaluronic acid and chondroitin sulfate). It also contains some fibroblasts and macrophages. It is derived from Extra Embryonic Mesoderm[WP] - Wharton's jelly - umbilical cord mesenchyme - - - - - - - - dermis adipose tissue - - - An adipose tissue that is part of a dermis [Automatically generated definition]. - adipose tissue of dermis - dermis fat tissue - dermis fatty tissue - fat tissue of dermis - fatty tissue of dermis - - - - - - - - abdomen nerve - - A nerve that is part of an abdomen [Automatically generated definition]. - nerve of abdomen - - - - - - - - neck nerve - - A nerve that is part of a neck [Automatically generated definition]. - neck (volume) nerve - nerve of neck - nerve of neck (volume) - - - - - - - - leg nerve - - A nerve that is part of a leg [Automatically generated definition]. - nerve of leg - - - - - - - - chest nerve - - A nerve that is part of a chest [Automatically generated definition]. - anterior thoracic region nerve - anterolateral part of thorax nerve - front of thorax nerve - nerve of anterior thoracic region - nerve of anterolateral part of thorax - nerve of chest - nerve of front of thorax - - - - - - - - arm nerve - - A nerve that is part of an arm [Automatically generated definition]. - brachial region nerve - nerve of arm - nerve of brachial region - - - - - - - - pedal digit nerve - - A nerve that is part of a toe [Automatically generated definition]. - digit of foot nerve - digit of terminal segment of free lower limb nerve - digitus pedis nerve - foot digit nerve - foot digit nerve - hind limb digit nerve - nerve of digit of foot - nerve of digit of terminal segment of free lower limb - nerve of digitus pedis - nerve of foot digit - nerve of terminal segment of free lower limb digit - nerve of toe - terminal segment of free lower limb digit nerve - toe nerve - - - - - - - - eyelid nerve - - A nerve that innervates an eyelid. - blepharon nerve - nerve of blepharon - nerve of eyelid - palpebral nerve - - - - - - - - iris nerve - - Any nerve that innervates the iris. - ciliary nerve - nerve of iris - - - - - - - - nerve of trunk region - - A nerve that is part of the trunk region of the body (not to be confused with a nerve trunk). - nerve of torso - nerve of trunk - torso nerve - trunk nerve - - - - - - - - limb nerve - - A nerve that is part of a limb [Automatically generated definition]. - nerve of limb - - - - - - - - forelimb nerve - - A nerve that is part of a forelimb [Automatically generated definition]. - fore limb nerve - nerve of fore limb - nerve of forelimb - nerve of superior member - nerve of upper extremity - wing nerve - - - - - - - - hindlimb nerve - - A nerve that is part of a hindlimb [Automatically generated definition]. - hind limb nerve - nerve of hind limb - nerve of hindlimb - nerve of inferior member - nerve of lower extremity - - - - - - - - pelvis nerve - - A nerve that is part of a pelvis [Automatically generated definition]. - nerve of pelvis - - - - - - - - pes nerve - - A nerve that is part of a foot [Automatically generated definition]. - foot nerve - nerve of foot - - - - - - - - digit nerve of manus - - A nerve that is part of a finger [Automatically generated definition]. - digit of hand nerve - digit of terminal segment of free upper limb nerve - digitus manus nerve - finger nerve - hand digit nerve - nerve of digit of hand - nerve of digit of terminal segment of free upper limb - nerve of digitus manus - nerve of finger - nerve of hand digit - nerve of terminal segment of free upper limb digit - terminal segment of free upper limb digit nerve - - - - - - - - manus nerve - - A nerve that is part of a manus [Automatically generated definition]. - hand nerve - nerve of hand - nerve of manus - - - - - - - - large intestine Peyer's patch - - A Peyer's patch that is part of a large intestine. - Peyer's patch of large intestine - large intestine Peyer's patch - solitary lymphatic follicle of large intestine - solitary lymphoid follicle of subdivision of large intestine - - - - - - - - small intestine Peyer's patch - - Peyer's patch - Peyer's patch of small bowel - Peyer's patch of small intestine - aggregated lymphoid follicle of small intestine - nodular lymphoid structures on the serosal surface of the small intestine. - noduli lymphoidei aggregati intestini tenuis - small bowel Peyer's patch - small intestine Peyer's patch - - - - - - - - inner renal medulla loop of Henle - - A loop of Henle that is part of a inner medulla of kidney [Automatically generated definition]. - kidney inner medulla loop of Henle - loop of Henle, inner medullary portion - - - - - - - - respiratory system lymphatic vessel - - A lymphatic vessel that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius lymph vessel - apparatus respiratorius lymphatic vessel - lymph vessel of apparatus respiratorius - lymph vessel of respiratory system - lymphatic vessel of apparatus respiratorius - lymphatic vessel of respiratory system - respiratory system lymph vessel - - - - - - - - head bone - - A bone that is part of a head [Automatically generated definition]. - adult head bone - adult head bone organ - bone of adult head - bone of head - bone organ of adult head - bone organ of head - craniofacial bone - head bone organ - - - - - - - - neck bone - - A bone that is part of a neck [Automatically generated definition]. - bone of neck - bone of neck (volume) - bone organ of neck - bone organ of neck (volume) - neck (volume) bone - neck (volume) bone organ - neck bone organ - - - - - - - - chest bone - - - A bone that is part of a chest [Automatically generated definition]. - anterior thoracic region bone - anterior thoracic region bone organ - anterolateral part of thorax bone - anterolateral part of thorax bone organ - bone of anterior thoracic region - bone of anterolateral part of thorax - bone of chest - bone of front of thorax - bone organ of anterior thoracic region - bone organ of anterolateral part of thorax - bone organ of chest - bone organ of front of thorax - chest bone organ - front of thorax bone - front of thorax bone organ - - - - - - - - arm bone - - A bone that is part of the region of the forelimb that includes the zeugopod and stylopod. Examples: patella, femur, tibia - arm bone organ - bone of arm - bone of upper extremity - bone organ of arm - - - - - - - - facial bone - - - A bone that is part of a facial skeleton [Automatically generated definition]. - bone of facial skeleton - bone of viscerocranium - facial bone - facial skeleton bone - viscerocranium bone - - - - - - - - trunk bone - - - A bone that is part of a trunk [Automatically generated definition]. - bone of torso - bone of trunk - bone organ of torso - bone organ of trunk - torso bone - torso bone organ - trunk bone organ - - - - - - - - hindlimb bone - - - - A bone that is part of a hindlimb region. Examples: any pes phalanx, femur. Counter-examples: ischium, pubis (they are part of the pelvic girdle) - bone of hind limb - bone of hindlimb - bone of inferior member - bone of lower extremity - bone organ of hind limb - bone organ of hindlimb - bone organ of lower extremity - hind limb bone - hind limb bone organ - hindlimb bone organ - - - - - - - - forelimb zeugopod bone - - A bone that is part of a lower arm [Automatically generated definition]. - antebrachial region bone - antebrachial region bone organ - arm zeugopod bone - arm zeugopod bone organ - lower arm bone - wing zeugopod bone - zeugopod bone, forelimb - zeugopod bone, upper - - - - - - - - respiratory system artery - - - An artery that is part of a respiratory system [Automatically generated definition]. - - - - - - - - ureteric vein - - - A vein that is part of a ureter [Automatically generated definition]. - ureter vein - vein of ureter - - - - - - - - respiratory system venous blood vessel - - A vein that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius vein - respiratory system vein - vein of apparatus respiratorius - vein of respiratory system - - - - - - - - thymus lymphoid tissue - - - A portion of lymphoid tissue that is part of a thymus [Automatically generated definition]. - lymphoid tissue of thymus - lymphoid tissue of thymus gland - thymus gland lymphoid tissue - - - - - - - - eye sebaceous gland - - - A sebaceous gland that is part of a camera-type eye. Example: a tarsal gland. - camera-type eye sebaceous gland - sebaceous gland of camera-type eye - sebaceous gland of vertebrate eye - vertebrate eye sebaceous gland - - - - - - - - vagina sebaceous gland - - - - A sebaceous gland that is part of a vagina [Automatically generated definition]. - sebaceous gland of vagina - - - - - - - - skin sebaceous gland - - A holocrine gland of the dermis that secretes sebum into hair follicles. - cutaneous sebaceous gland - sebaceous gland of skin - - - - - - - - abdominal mammary gland - - - A lactiferous gland that is part of the abdominal region [Automatically generated definition]. - abdomen lactiferous gland - abdomen lobe of breast - abdomen lobe of mammary gland - abdomen mammary gland - lactiferous gland of abdomen - lobe of breast of abdomen - lobe of mammary gland of abdomen - mammary gland of abdomen - - - - - - - - respiratory system capillary endothelium - - - An endothelium of capillary that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius blood capillary endothelium - apparatus respiratorius capillary endothelium - apparatus respiratorius capillary vessel endothelium - apparatus respiratorius endothelium of blood capillary - apparatus respiratorius endothelium of capillary - apparatus respiratorius endothelium of capillary vessel - blood capillary endothelium of apparatus respiratorius - blood capillary endothelium of respiratory system - capillary endothelium of apparatus respiratorius - capillary endothelium of respiratory system - capillary vessel endothelium of apparatus respiratorius - capillary vessel endothelium of respiratory system - endothelium of blood capillary of apparatus respiratorius - endothelium of blood capillary of respiratory system - endothelium of capillary of apparatus respiratorius - endothelium of capillary of respiratory system - endothelium of capillary vessel of apparatus respiratorius - endothelium of capillary vessel of respiratory system - respiratory system blood capillary endothelium - respiratory system capillary vessel endothelium - respiratory system endothelium of blood capillary - respiratory system endothelium of capillary - respiratory system endothelium of capillary vessel - - - - - - - - respiratory system venule - - - A venule that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius venule - venule of apparatus respiratorius - venule of respiratory system - - - - - - - - respiratory system arteriole - - - An arteriole that is part of a respiratory system [Automatically generated definition]. - - - - - - - - head blood vessel - - A blood vessel that is part of a head [Automatically generated definition]. - adult head blood vessel - blood vessel of adult head - blood vessel of head - - - - - - - - abdomen blood vessel - - A blood vessel that is part of an abdomen [Automatically generated definition]. - blood vessel of abdomen - - - - - - - - heart blood vessel - - - A blood vessel that is part of a heart [Automatically generated definition]. - blood vessel of heart - cardiac blood vessel - - - - - - - - brain blood vessel - - - A blood vessel that is part of a brain [Automatically generated definition]. - blood vessel of brain - - - - - - - - corneal blood vessel - - - A blood vessel that is part of a cornea [Automatically generated definition]. - blood vessel of cornea - cornea blood vessel - - - - - - - - retina blood vessel - - - A blood vessel that is part of a retina [Automatically generated definition]. - blood vessel of inner layer of eyeball - blood vessel of retina - blood vessel of tunica interna of eyeball - inner layer of eyeball blood vessel - retinal blood vessel - tunica interna of eyeball blood vessel - - - - - - - - neck blood vessel - - A blood vessel that is part of a neck [Automatically generated definition]. - blood vessel of neck - blood vessel of neck (volume) - neck (volume) blood vessel - - - - - - - - leg blood vessel - - A blood vessel that is part of a leg [Automatically generated definition]. - blood vessel of leg - - - - - - - - respiratory system blood vessel - - A blood vessel that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius blood vessel - blood vessel of apparatus respiratorius - blood vessel of respiratory system - - - - - - - - trachea blood vessel - - - A blood vessel that is part of a trachea. - blood vessel of trachea - - - - - - - - chest blood vessel - - A blood vessel that is part of a chest [Automatically generated definition]. - anterior thoracic region blood vessel - anterolateral part of thorax blood vessel - blood vessel of anterior thoracic region - blood vessel of anterolateral part of thorax - blood vessel of chest - blood vessel of front of thorax - front of thorax blood vessel - - - - - - - - arm blood vessel - - A blood vessel that is part of an arm [Automatically generated definition]. - blood vessel of arm - - - - - - - - pedal digit blood vessel - - A blood vessel that is part of a toe [Automatically generated definition]. - blood vessel of digit of foot - blood vessel of digit of terminal segment of free lower limb - blood vessel of digitus pedis - blood vessel of foot digit - blood vessel of terminal segment of free lower limb digit - blood vessel of toe - digit of foot blood vessel - digit of terminal segment of free lower limb blood vessel - digitus pedis blood vessel - foot digit blood vessel - foot digit blood vessel - hind limb digit blood vessel - terminal segment of free lower limb digit blood vessel - toe blood vessel - - - - - - - - arterial blood vessel - - A blood vessel that is part of the arterial system. Includes artery, arteriole and aorta. - - - - - - - - eyelid blood vessel - - - A blood vessel that is part of a eyelid [Automatically generated definition]. - blepharon blood vessel - blood vessel of blepharon - blood vessel of eyelid - - - - - - - - iris blood vessel - - - A blood vessel that is part of a iris [Automatically generated definition]. - blood vessel of iris - - - - - - - - lung blood vessel - - - - A blood vessel that is part of a lung [Automatically generated definition]. - blood vessel of lung - pulmonary vascular element - - - - - - - - trunk blood vessel - - A blood vessel that is part of a trunk [Automatically generated definition]. - blood vessel of torso - blood vessel of trunk - torso blood vessel - - - - - - - - limb blood vessel - - A blood vessel that is part of a limb [Automatically generated definition]. - blood vessel of limb - - - - - - - - forelimb blood vessel - - - A blood vessel that is part of a forelimb [Automatically generated definition]. - anteriormost limb blood vessel - blood vessel of anteriormost limb - blood vessel of fore limb - blood vessel of forelimb - blood vessel of upper extremity - fore limb blood vessel - wing blood vessel - - - - - - - - hindlimb blood vessel - - A blood vessel that is part of a hindlimb [Automatically generated definition]. - blood vessel of hind limb - blood vessel of hindlimb - blood vessel of lower extremity - hind limb blood vessel - - - - - - - - kidney blood vessel - - A blood vessel that is part of a kidney [Automatically generated definition]. - blood vessel of kidney - renal blood vessel - - - - - - - - thoracic cavity blood vessel - - A blood vessel that is part of a thoracic cavity [Automatically generated definition]. - blood vessel of cavity of chest - blood vessel of cavity of thorax - blood vessel of chest cavity - blood vessel of pectoral cavity - blood vessel of thoracic cavity - cavity of chest blood vessel - cavity of thorax blood vessel - chest cavity blood vessel - pectoral cavity blood vessel - - - - - - - - pelvis blood vessel - - A blood vessel that is part of a pelvis [Automatically generated definition]. - blood vessel of pelvis - - - - - - - - pes blood vessel - - A blood vessel that is part of a foot [Automatically generated definition]. - blood vessel of foot - foot blood vessel - - - - - - - - manual digit blood vessel - - A blood vessel that is part of a finger [Automatically generated definition]. - blood vessel of digit of terminal segment of free upper limb - blood vessel of terminal segment of free upper limb digit - digit of terminal segment of free upper limb blood vessel - finger blood vessel - hand digit blood vessel - hand digit blood vessel - terminal segment of free upper limb digit blood vessel - - - - - - - - manus blood vessel - - A blood vessel that is part of a manus [Automatically generated definition]. - blood vessel of hand - blood vessel of manus - hand blood vessel - - - - - - - - respiratory system capillary - - - A capillary that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius blood capillary - apparatus respiratorius capillary - apparatus respiratorius capillary vessel - blood capillary of apparatus respiratorius - blood capillary of respiratory system - capillary of apparatus respiratorius - capillary of respiratory system - capillary vessel of apparatus respiratorius - capillary vessel of respiratory system - respiratory system blood capillary - respiratory system capillary vessel - - - - - - - - kidney capillary - - - A capillary that is part of a kidney [Automatically generated definition]. - blood capillary of kidney - capillary of kidney - capillary vessel of kidney - kidney blood capillary - kidney capillary vessel - renal capillary - - - - - - - - brain gray matter - - A gray matter that is part of a brain [Automatically generated definition]. - brain grey matter - brain grey substance - gray matter of brain - grey matter of brain - grey substance of brain - - - - - - - - respiratory system lymphatic vessel endothelium - - - An lymphatic vessel endothelium that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius endothelium of lymph vessel - apparatus respiratorius lymph vessel endothelium - apparatus respiratorius lymphatic vessel endothelium - endothelium of lymph vessel of apparatus respiratorius - endothelium of lymph vessel of respiratory system - lymph vessel endothelium of apparatus respiratorius - lymph vessel endothelium of respiratory system - lymphatic vessel endothelium of apparatus respiratorius - lymphatic vessel endothelium of respiratory system - respiratory system endothelium of lymph vessel - respiratory system lymph vessel endothelium - respiratory system lymphatic vessel endothelium - - - - - - - - pedal digit skin - - - A zone of skin that is part of a toe [Automatically generated definition]. - digit of foot skin - digit of terminal segment of free lower limb skin - digitus pedis skin - foot digit skin - foot digit skin - hind limb digit skin - skin of digit of foot - skin of digit of terminal segment of free lower limb - skin of digitus pedis - skin of foot digit - skin of terminal segment of free lower limb digit - skin of toe - terminal segment of free lower limb digit skin - toe skin - - - - - - - - forelimb skin - - A zone of skin that is part of a forelimb [Automatically generated definition]. - anteriormost limb skin - fore limb skin - skin of fore limb - skin of forelimb - skin of upper limb - upper limb skin - wing skin - - - - - - - - hindlimb skin - - A zone of skin that is part of a hindlimb [Automatically generated definition]. - hind limb skin - lower limb skin - skin of hind limb - skin of hindlimb - skin of lower extremity - skin of lower limb - - - - - - - - manual digit skin - - - A zone of skin that is part of a finger [Automatically generated definition]. - digit of hand skin - digit of terminal segment of free upper limb skin - digitus manus skin - finger skin - fore limb digit skin - hand digit skin - hand digit skin - skin of digit of hand - skin of digit of terminal segment of free upper limb - skin of digitus manus - skin of finger - skin of hand digit - skin of terminal segment of free upper limb digit - terminal segment of free upper limb digit skin - - - - - - - - brain white matter - - The regions of the brain that are largely or entirely composed of myelinated nerve cell axons and contain few or no neural cell bodies or dendrites. - brain white matter of neuraxis - brain white substance - white matter of brain - white matter of neuraxis of brain - white substance of brain - - - - - - - - distal convoluted tubule macula densa - - - A macula densa that is part of a distal convoluted tubule [Automatically generated definition]. - - - - - - - - brain meninx - - A meninx that is part of a brain [Automatically generated definition]. - brain meninges - meninges of brain - meninx of brain - - - - - - - - forebrain meninges - - A meninx that is part of a forebrain [Automatically generated definition]. - forebrain meninx - meninges of forebrain - meninx of forebrain - - - - - - - - forebrain dura mater - - - A dura mater that is part of a forebrain. - dura mater of forebrain - dura mater of neuraxis of forebrain - forebrain dura mater of neuraxis - - - - - - - - midbrain dura mater - - - A dura mater that is part of a midbrain [Automatically generated definition]. - dura mater of midbrain - dura mater of neuraxis of midbrain - mesencephalon dura mater - midbrain dura mater of neuraxis - - - - - - - - telencephalon dura mater - - - A dura mater that is part of a telencephalon [Automatically generated definition]. - dura mater of neuraxis of telencephalon - dura mater of telencephalon - telencephalon dura mater of neuraxis - - - - - - - - diencephalon dura mater - - - A dura mater that is part of a diencephalon [Automatically generated definition]. - between brain dura mater - between brain dura mater of neuraxis - diencephalon dura mater of neuraxis - dura mater of between brain - dura mater of diencephalon - dura mater of interbrain - dura mater of mature diencephalon - dura mater of neuraxis of between brain - dura mater of neuraxis of diencephalon - dura mater of neuraxis of interbrain - dura mater of neuraxis of mature diencephalon - interbrain dura mater - interbrain dura mater of neuraxis - mature diencephalon dura mater - mature diencephalon dura mater of neuraxis - - - - - - - - hindbrain dura mater - - - A dura mater that is part of a hindbrain [Automatically generated definition]. - dura mater of hindbrain - dura mater of neuraxis of hindbrain - hindbrain dura mater of neuraxis - rhombencephalon dura mater - - - - - - - - head connective tissue - - A portion of connective tissue that is part of a head [Automatically generated definition]. - adult head connective tissue - adult head portion of connective tissue - adult head textus connectivus - connective tissue of adult head - connective tissue of head - head portion of connective tissue - head textus connectivus - portion of connective tissue of adult head - portion of connective tissue of head - textus connectivus of adult head - textus connectivus of head - - - - - - - - abdomen connective tissue - - A portion of connective tissue that is part of an abdomen [Automatically generated definition]. - abdomen portion of connective tissue - abdomen textus connectivus - connective tissue of abdomen - portion of connective tissue of abdomen - textus connectivus of abdomen - - - - - - - - neck connective tissue - - A portion of connective tissue that is part of a neck [Automatically generated definition]. - connective tissue of neck - connective tissue of neck (volume) - neck (volume) connective tissue - neck (volume) portion of connective tissue - neck (volume) textus connectivus - neck portion of connective tissue - neck textus connectivus - portion of connective tissue of neck - portion of connective tissue of neck (volume) - textus connectivus of neck - textus connectivus of neck (volume) - - - - - - - - leg connective tissue - - A portion of connective tissue that is part of a leg [Automatically generated definition]. - connective tissue of leg - leg portion of connective tissue - leg textus connectivus - portion of connective tissue of leg - textus connectivus of leg - - - - - - - - respiratory system connective tissue - - A portion of connective tissue that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius connective tissue - apparatus respiratorius portion of connective tissue - apparatus respiratorius textus connectivus - connective tissue of apparatus respiratorius - connective tissue of respiratory system - portion of connective tissue of apparatus respiratorius - portion of connective tissue of respiratory system - respiratory system portion of connective tissue - respiratory system textus connectivus - textus connectivus of apparatus respiratorius - textus connectivus of respiratory system - - - - - - - - trachea connective tissue - - - A portion of connective tissue that is part of a trachea. - connective tissue of trachea - connective tissue of windpipe - - - - - - - - chest connective tissue - - A portion of connective tissue that is part of a chest [Automatically generated definition]. - anterior thoracic region connective tissue - anterior thoracic region portion of connective tissue - anterior thoracic region textus connectivus - anterolateral part of thorax connective tissue - anterolateral part of thorax portion of connective tissue - anterolateral part of thorax textus connectivus - chest portion of connective tissue - chest textus connectivus - connective tissue of anterior thoracic region - connective tissue of anterolateral part of thorax - connective tissue of chest - connective tissue of front of thorax - front of thorax connective tissue - front of thorax portion of connective tissue - front of thorax textus connectivus - portion of connective tissue of anterior thoracic region - portion of connective tissue of anterolateral part of thorax - portion of connective tissue of chest - portion of connective tissue of front of thorax - textus connectivus of anterior thoracic region - textus connectivus of anterolateral part of thorax - textus connectivus of chest - textus connectivus of front of thorax - - - - - - - - arm connective tissue - - A portion of connective tissue that is part of an arm [Automatically generated definition]. - - - - - - - - knee connective tissue - - A portion of connective tissue that is part of a knee [Automatically generated definition]. - connective tissue of knee - knee portion of connective tissue - - - - - - - - pedal digit connective tissue - - - A portion of connective tissue that is part of a toe [Automatically generated definition]. - connective tissue of digit of foot - connective tissue of digitus pedis - connective tissue of foot digit - connective tissue of toe - digitus pedis textus connectivus - foot digit connective tissue - foot digit connective tissue - hind limb digit connective tissue - - - - - - - - lower respiratory tract connective tissue - - - A portion of connective tissue that is part of a lower respiratory tract [Automatically generated definition]. - connective tissue of lower respiratory tract - lower respiratory tract portion of connective tissue - lower respiratory tract textus connectivus - portion of connective tissue of lower respiratory tract - textus connectivus of lower respiratory tract - - - - - - - - eyelid connective tissue - - - A portion of connective tissue that is part of a eyelid [Automatically generated definition]. - blepharon connective tissue - connective tissue of blepharon - connective tissue of eyelid - - - - - - - - nasopharynx connective tissue - - - A portion of connective tissue that is part of a nasopharynx [Automatically generated definition]. - connective tissue of nasal part of pharynx - connective tissue of nasopharynx - connective tissue of rhinopharynx - nasal part of pharynx connective tissue - nasal part of pharynx portion of connective tissue - nasal part of pharynx textus connectivus - nasopharynx portion of connective tissue - nasopharynx textus connectivus - portion of connective tissue of nasal part of pharynx - portion of connective tissue of nasopharynx - portion of connective tissue of rhinopharynx - rhinopharynx connective tissue - rhinopharynx portion of connective tissue - rhinopharynx textus connectivus - textus connectivus of nasal part of pharynx - textus connectivus of nasopharynx - textus connectivus of rhinopharynx - - - - - - - - mammary gland connective tissue - - - The fibrous supportive tissue of the mammary gland. - connective tissue of lactiferous gland - connective tissue of lobe of breast - connective tissue of lobe of mammary gland - connective tissue of mammary gland - lactiferous gland connective tissue - lactiferous gland portion of connective tissue - lactiferous gland stroma - mammary gland stroma - mammary stroma - stroma of lactiferous gland - - - - - - - - dermis connective tissue - - - A portion of connective tissue that is part of a dermis [Automatically generated definition]. - connective tissue of dermis - dermis portion of connective tissue - dermis textus connectivus - portion of connective tissue of dermis - textus connectivus of dermis - - - - - - - - trunk connective tissue - - A portion of connective tissue that is part of a trunk [Automatically generated definition]. - connective tissue of torso - connective tissue of trunk - portion of connective tissue of torso - portion of connective tissue of trunk - textus connectivus of torso - textus connectivus of trunk - torso connective tissue - torso portion of connective tissue - torso textus connectivus - trunk portion of connective tissue - trunk textus connectivus - - - - - - - - limb connective tissue - - A portion of connective tissue that is part of a limb [Automatically generated definition]. - connective tissue of limb - limb portion of connective tissue - limb textus connectivus - portion of connective tissue of limb - textus connectivus of limb - - - - - - - - forelimb connective tissue - - A portion of connective tissue that is part of a forelimb [Automatically generated definition]. - connective tissue of anteriormost limb - connective tissue of fore limb - connective tissue of forelimb - connective tissue of superior member - connective tissue of upper extremity - wing connective tissue - - - - - - - - hindlimb connective tissue - - A portion of connective tissue that is part of a hindlimb [Automatically generated definition]. - connective tissue of hind limb - connective tissue of hindlimb - connective tissue of inferior member - connective tissue of lower extremity - hind limb connective tissue - - - - - - - - bronchus connective tissue - - A portion of connective tissue that is part of a bronchus [Automatically generated definition]. - bronchi connective tissue - bronchi portion of connective tissue - bronchi textus connectivus - bronchial connective tissue - bronchial mesenchyme - bronchial trunk connective tissue - bronchial trunk portion of connective tissue - bronchial trunk textus connectivus - bronchus portion of connective tissue - bronchus textus connectivus - connective tissue of bronchi - connective tissue of bronchial trunk - connective tissue of bronchus - portion of connective tissue of bronchi - portion of connective tissue of bronchial trunk - portion of connective tissue of bronchus - textus connectivus of bronchi - textus connectivus of bronchial trunk - textus connectivus of bronchus - - - - - - - - pelvis connective tissue - - A portion of connective tissue that is part of a pelvis [Automatically generated definition]. - connective tissue of pelvis - pelvis portion of connective tissue - pelvis textus connectivus - portion of connective tissue of pelvis - textus connectivus of pelvis - - - - - - - - pes connective tissue - - - A portion of connective tissue that is part of a foot [Automatically generated definition]. - connective tissue of foot - connective tissue of terminal segment of free lower limb - foot connective tissue - textus connectivus of pes - - - - - - - - manual digit connective tissue - - - A portion of connective tissue that is part of a finger [Automatically generated definition]. - connective tissue of digit of hand - connective tissue of digitus manus - connective tissue of finger - connective tissue of hand digit - fore limb digit connective tissue - hand digit connective tissue - hand digit connective tissue - - - - - - - - manus connective tissue - - - A portion of connective tissue that is part of a hand [Automatically generated definition]. - connective tissue of hand - connective tissue of terminal segment of free upper limb - hand connective tissue - - - - - - - - neck cartilage - - A cartilage that is part of a neck [Automatically generated definition]. - cartilage of neck - cartilage of neck (volume) - neck (volume) cartilage - - - - - - - - lower respiratory tract cartilage - - - A cartilage that is part of a lower respiratory tract [Automatically generated definition]. - cartilage of lower respiratory tract - - - - - - - - trachea cartilage - - - cartilage of the trachea - cartilage of trachea - cartilage of windpipe - cartilagines tracheales - cartilaginous ring of trachea - cartilaginous trachea cartilage - cartilago trachealis - ring of the trachea - the ring-shaped cartilaginous structures that support the trachea - trachea ring - tracheal cartilage - tracheal ring - windpipe cartilage - - - - - - - - eye skin gland - - - - A skin gland that is part of a camera-type eye [Automatically generated definition]. - camera-type eye skin gland - camera-type eye skin glands - camera-type eye skin glands set - skin gland of camera-type eye - skin gland of vertebrate eye - skin glands of camera-type eye - skin glands of vertebrate eye - skin glands set of camera-type eye - skin glands set of vertebrate eye - vertebrate eye skin gland - vertebrate eye skin glands - vertebrate eye skin glands set - - - - - - - - limb long bone - - - A long bone that is part of a limb [Automatically generated definition]. - long bone of limb - - - - - - - - forelimb long bone - - - A long bone that is part of a forelimb [Automatically generated definition]. - anteriormost limb long bone - fore limb long bone - long bone of anteriormost limb - long bone of fore limb - long bone of forelimb - long bone of superior member - long bone of upper extremity - superior member long bone - upper extremity long bone - wing long bone - - - - - - - - hindlimb long bone - - - A long bone that is part of a hindlimb [Automatically generated definition]. - hind limb long bone - inferior member long bone - long bone of hind limb - long bone of hindlimb - long bone of inferior member - long bone of lower extremity - lower extremity long bone - - - - - - - - aorta elastic tissue - - The dense connective tissue which contains predominantly elastic fibers and is found in the tunica media of the aorta wall. - adult aorta elastic connective tissue - adult aorta elastic tissue - adult aorta textus connectivus elasticus - aorta elastic connective tissue - aorta elastic lamina - aorta elastic laminae - aorta textus connectivus elasticus - dorsal aorta elastic connective tissue - dorsal aorta elastic tissue - dorsal aorta textus connectivus elasticus - elastic connective tissue of adult aorta - elastic connective tissue of aorta - elastic connective tissue of dorsal aorta - elastic connective tissue of trunk of aortic tree - elastic tissue of adult aorta - elastic tissue of aorta - elastic tissue of dorsal aorta - elastic tissue of trunk of aortic tree - textus connectivus elasticus of adult aorta - textus connectivus elasticus of aorta - textus connectivus elasticus of dorsal aorta - textus connectivus elasticus of trunk of aortic tree - trunk of aortic tree elastic connective tissue - trunk of aortic tree elastic tissue - trunk of aortic tree textus connectivus elasticus - - - - - - - - heart elastic tissue - - - - The type of heart connective tissue found in the endocardial layer that consists mainly of elastic fibers. - cardiac elastic tissue - elastic connective tissue of heart - elastic tissue of heart - heart elastic connective tissue - heart textus connectivus elasticus - textus connectivus elasticus of heart - - - - - - - - respiratory system elastic tissue - - - An elastic tissue that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius elastic connective tissue - apparatus respiratorius elastic tissue - apparatus respiratorius textus connectivus elasticus - elastic connective tissue of apparatus respiratorius - elastic connective tissue of respiratory system - elastic tissue of apparatus respiratorius - elastic tissue of respiratory system - respiratory system elastic connective tissue - respiratory system textus connectivus elasticus - textus connectivus elasticus of apparatus respiratorius - textus connectivus elasticus of respiratory system - - - - - - - - cardiovascular system elastic tissue - - An elastic tissue that is part of a circulatory system [Automatically generated definition]. - cardiovascular system elastic connective tissue - cardiovascular system textus connectivus elasticus - circulatory system elastic connective tissue - circulatory system elastic tissue - circulatory system textus connectivus elasticus - elastic connective tissue of cardiovascular system - elastic connective tissue of circulatory system - elastic tissue of cardiovascular system - elastic tissue of circulatory system - textus connectivus elasticus of cardiovascular system - textus connectivus elasticus of circulatory system - - - - - - - - blood vessel elastic tissue - - - Elastic tissue layer that lines a blood vessel layer. - blood vessel elastic connective tissue - blood vessel textus connectivus elasticus - elastic connective tissue of blood vessel - elastic lamina - elastic laminae - elastic tissue of blood vessel - textus connectivus elasticus of blood vessel - vascular elastic lamina - vascular elastic laminae - vascular elastic tissue - - - - - - - - lung elastic tissue - - - Elastic tissue that is part of a lung [Automatically generated definition]. - elastic connective tissue of lung - elastic tissue of lung - lung elastic connective tissue - lung textus connectivus elasticus - pulmonary elastic fiber - textus connectivus elasticus of lung - - - - - - - - bronchus elastic tissue - - - An elastic tissue that is part of a bronchus [Automatically generated definition]. - bronchi elastic connective tissue - bronchi elastic tissue - bronchi textus connectivus elasticus - bronchial trunk elastic connective tissue - bronchial trunk elastic tissue - bronchial trunk textus connectivus elasticus - bronchus elastic connective tissue - bronchus textus connectivus elasticus - elastic connective tissue of bronchi - elastic connective tissue of bronchial trunk - elastic connective tissue of bronchus - elastic tissue of bronchi - elastic tissue of bronchial trunk - elastic tissue of bronchus - textus connectivus elasticus of bronchi - textus connectivus elasticus of bronchial trunk - textus connectivus elasticus of bronchus - - - - - - - - trachea elastic tissue - - - An elastic tissue that is part of a trachea [Automatically generated definition]. - cartilaginous trachea elastic connective tissue - cartilaginous trachea elastic tissue - cartilaginous trachea textus connectivus elasticus - elastic connective tissue of cartilaginous trachea - elastic connective tissue of vertebrate trachea - elastic connective tissue of windpipe - elastic tissue of cartilaginous trachea - elastic tissue of vertebrate trachea - elastic tissue of windpipe - textus connectivus elasticus of cartilaginous trachea - textus connectivus elasticus of vertebrate trachea - textus connectivus elasticus of windpipe - vertebrate trachea elastic connective tissue - vertebrate trachea elastic tissue - vertebrate trachea textus connectivus elasticus - windpipe elastic connective tissue - windpipe elastic tissue - windpipe textus connectivus elasticus - - - - - - - - aorta tunica intima - - - The innermost layer of the aorta, containing the endothelium and an inner elastic membrane. - adult aorta tunica intima - dorsal aorta tunica intima - trunk of aortic tree tunica intima - tunica intima of adult aorta - tunica intima of aorta - tunica intima of dorsal aorta - tunica intima of trunk of aortic tree - - - - - - - - respiratory system arterial blood vessel - - - An arterial blood vessel that is part of a respiratory system [Automatically generated definition]. - - - - - - - - kidney arterial blood vessel - - - An arterial blood vessel that is part of a kidney [Automatically generated definition]. - kidney arterial system - - - - - - - - limb joint - - Any joint that is part of a (free) limb. - joint of limb - joint of limb skeletal system - skeletal limb joint - - - - - - - - pedal digit muscle - - Any muscle organ that is part of a toe [Automatically generated definition]. - digit of foot muscle organ - digit of terminal segment of free lower limb muscle organ - digitus pedis muscle organ - foot digit muscle - foot digit muscle - foot digit muscle organ - hind limb digit muscle - muscle organ of digit of foot - muscle organ of digit of terminal segment of free lower limb - muscle organ of digitus pedis - muscle organ of foot digit - muscle organ of terminal segment of free lower limb digit - muscle organ of toe - terminal segment of free lower limb digit muscle organ - toe muscle organ - - - - - - - - limb muscle - - Any muscle organ that is part of a limb [Automatically generated definition]. - limb muscle organ - limb skeletal muscle - muscle organ of limb - - - - - - - - forelimb muscle - - - Any muscle organ that is part of a forelimb. - arm muscle system - fore limb muscle organ - forelimb muscle organ - free upper limb muscle - muscle of free upper limb - muscle of upper limb - musculature of arm - musculature of the arm - upper limb skeletal muscle - wing muscle - - - - - - - - hindlimb muscle - - - Any muscle organ that is part of a hindlimb [Automatically generated definition]. - free lower limb muscle - hind limb muscle organ - hindlimb muscle organ - inferior member muscle organ - lower extremity muscle organ - lower limb skeletal muscle - muscle of free lower limb - muscle of posterior limb - muscle organ of hind limb - muscle organ of hindlimb - muscle organ of inferior member - muscle organ of lower extremity - - - - - - - - manual digit muscle - - Any muscle organ that is part of a finger [Automatically generated definition]. - digit of hand muscle organ - digit of terminal segment of free upper limb muscle organ - digitus manus muscle organ - finger muscle organ - fore limb digit muscle - hand digit muscle - hand digit muscle - hand digit muscle organ - muscle organ of digit of hand - muscle organ of digit of terminal segment of free upper limb - muscle organ of digitus manus - muscle organ of finger - muscle organ of hand digit - muscle organ of terminal segment of free upper limb digit - terminal segment of free upper limb digit muscle organ - - - - - - - - dentition - - A collection of teeth arranged in some pattern in the mouth or other part of the body. The arrangement may be a simple row, a collection of rows, or a more elaborate structure, such as a toooth whorl. - collection of teeth - dentes - set of teeth - teeth - teeth - teeth set - - - - - - - - cranial suture - - Fibrous joint in which the articulating bones or cartilages of the skull are connected by sutural ligaments (scant amount of collagenous dense connective tissue). Examples: sagittal suture, frontal suture. - cranium suture - sutura - suture - suture joint of skull - suture of cranium - - - - - - - - omentum - - - A fold of peritoneum originating at the stomach and supporting the viscera. - - - - - - - - abdominal wall - - The tissues that surround the organs that are present within the abdominal cavity. The abdominal wall tissue is composed of layers of fat, parietal peritoneum, fascia, and muscles. - abdominal wall proper - layers of the abdominal wall - paries abdominalis - paries abdominalis - wall of abdomen - wall of abdomen proper - - - - - - - - extrahepatic bile duct - - Passages external to the liver for the conveyance of bile. These include the common bile duct and the common hepatic duct. - bile duct extrahepatic part - extrahepatic biliary system - - - - - - - - intrahepatic bile duct - - Passages within the liver for the conveyance of bile. Includes right and left hepatic ducts even though these may join outside the liver to form the common hepatic duct. - bile duct intrahepatic part - intrahepatic biliary system - - - - - - - - neural tissue - - - Portion of tissue in the nervous system which consists of neurons and glial cells, and may also contain parts of the vasculature. - nerve tissue - nervous tissue - portion of neural tissue - - - - - - - - mouth mucosa - - A mucous membrane that lines the mouth. - buccal mucosa - mouth mucosa - mouth mucous membrane - mouth organ mucosa - mucosa of mouth - mucosal lining of mouth - mucous membrane of mouth - oral mucosa - oral mucous membrane - oral part of viscerocranial mucosa - tunica mucosa oris - tunica mucosa oris - - - - - - - - prostate bud - - - A region of the fetal urogenital sinus epithelium destined to become the prostate[GO]. - prostate ductal progenitor - prostate gland bud - prostate primordium - prostatic bud - - - - - - - - forelimb stylopod - - - The part of the forelimb between pectoral region and the elbow, corresponding to the humerus. - arm - brachial region - brachium - fore propodium - forelimb propodium - forelimb stylopodial element - forelimb stylopodium - proximal segment of free upper limb - regio brachialis - stylopod of arm - stylopod of forelimb - upper arm - wing stylopod - - - - - - - - hindlimb zeugopod - - - The middle limb segment of the pelvic free limb, between the autopod and stylopod segments. Includes as parts the hindlimb zeugopodial skeleton, which includes as parts the tibia and fibula, or their cartilage precursors, or evolutionary variants. - calf - calf of leg - crus - crus of hindlimb - hind epipodium - hind limb middle limb segment - hind limb zeudopodium - hind limb zeugopod - hindlimb epipodium - hindlimb middle limb segment - hindlimb zeudopodium - hindlimb zeugopod - hindlimb zeugopodium - intermediate segment of free lower limb - leg - lower extremity middle limb segment - lower extremity zeugopod - lower leg - middle limb segment of hind limb - middle limb segment of hindlimb - posterior curral region - posterior leg region - posterior part of leg - posterior region of leg - regio cruris posterior - regio surae - shank - sura - sural region - zeugopod of hind limb - zeugopod of hindlimb - - - - - - - - nerve of thoracic segment - - A nerve that is part of a thorax [Automatically generated definition]. - nerve of thorax - thoracic segment nerve - thorax nerve - upper body nerve - - - - - - - - nerve of abdominal segment - - A nerve that is part of an abdominal segment of trunk [Automatically generated definition]. - abdominal segment nerve - - - - - - - - upper leg bone - - A bone that is part of a hindlimb stylopod [Automatically generated definition]. - femur - - - - - - - - thoracic segment bone - - - A bone that is part of a thorax [Automatically generated definition]. - bone of thorax - bone organ of thorax - thorax bone - thorax bone organ - upper body bone - - - - - - - - abdominal segment bone - - - A bone that is part of an abdominal segment of trunk [Automatically generated definition]. - abdominal segment of trunk bone - abdominal segment of trunk bone organ - bone of abdominal segment of trunk - bone organ of abdominal segment of trunk - - - - - - - - urethra muscle tissue - - - Any muscle tissue that is part of the urethra. - urethral muscle layer - - - - - - - - thoracic segment muscle - - - Any muscle organ that is part of a thorax [Automatically generated definition]. - muscle organ of thorax - thorax muscle organ - upper body muscle - - - - - - - - respiratory system muscle - - Any muscle organ that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius muscle organ - muscle organ of apparatus respiratorius - muscle organ of respiratory system - respiratory system muscle organ - - - - - - - - esophagus muscle - - - - Any muscle organ that is part of a esophagus [Automatically generated definition]. - esophageal muscle - esophagus muscle organ - gullet muscle organ - muscle organ of esophagus - muscle organ of gullet - muscle organ of oesophagus - oesophagus muscle organ - - - - - - - - abdominal segment muscle - - - A muscle organ that is part of an abdominal segment of trunk [Automatically generated definition]. - abdominal segment of trunk muscle organ - muscle organ of abdominal segment of trunk - - - - - - - - thoracic segment blood vessel - - A blood vessel that is part of a thorax [Automatically generated definition]. - blood vessel of thorax - thorax blood vessel - upper body blood vessel - - - - - - - - abdominal segment blood vessel - - A blood vessel that is part of an abdominal segment of trunk [Automatically generated definition]. - abdominal segment of trunk blood vessel - blood vessel of abdominal segment of trunk - - - - - - - - abdominal segment skin - - A skin of body that is part of an abdominal segment of trunk [Automatically generated definition]. - abdominal segment of trunk skin - skin of abdominal segment of trunk - - - - - - - - thoracic segment connective tissue - - A portion of connective tissue that is part of a thorax [Automatically generated definition]. - connective tissue of thorax - portion of connective tissue of thorax - textus connectivus of thorax - thorax connective tissue - thorax portion of connective tissue - thorax textus connectivus - upper body connective tissue - - - - - - - - abdominal segment connective tissue - - A portion of connective tissue that is part of an abdominal segment of trunk [Automatically generated definition]. - abdominal segment of trunk connective tissue - abdominal segment of trunk portion of connective tissue - abdominal segment of trunk textus connectivus - connective tissue of abdominal segment of trunk - portion of connective tissue of abdominal segment of trunk - textus connectivus of abdominal segment of trunk - - - - - - - - forelimb joint - - A limb joint that is part of a forelimb [Automatically generated definition]. - anteriormost limb joint of limb - anteriormost limb limb joint - fore limb joint of limb - fore limb limb joint - forelimb joint of limb - forelimb limb joint - joint of free upper limb - joint of limb of anteriormost limb - joint of limb of fore limb - joint of limb of forelimb - joint of limb of superior member - joint of limb of upper extremity - limb joint of anteriormost limb - limb joint of fore limb - limb joint of forelimb - limb joint of superior member - limb joint of upper extremity - superior member joint of limb - superior member limb joint - upper extremity joint of limb - upper extremity limb joint - wing joint - - - - - - - - hindlimb joint - - A limb joint that is part of a hindlimb [Automatically generated definition]. - hind limb joint of limb - hind limb limb joint - hindlimb joint of limb - hindlimb limb joint - inferior member joint of limb - inferior member limb joint - joint of free lower limb - joint of limb of hind limb - joint of limb of hindlimb - joint of limb of inferior member - joint of limb of lower extremity - joint of lower limb - limb joint of hind limb - limb joint of hindlimb - limb joint of inferior member - limb joint of lower extremity - lower extremity joint of limb - lower extremity limb joint - - - - - - - - autopod joint - - A limb joint that is part of an autopod [Automatically generated definition]. - autopod joint of limb - autopod limb joint - distal free limb segment joint of limb - distal free limb segment limb joint - joint of limb of autopod - joint of limb of distal free limb segment - limb joint of autopod - limb joint of distal free limb segment - paw joint - - - - - - - - dental epithelium - - - Epithelium that is part of a developing tooth or dental organ. - dental epithelia - dental epithelium - odontogenic epithelium - reduced enamel epithelium - tooth epithelium - - - - - - - - thymus epithelium - - - - An epithelium that is part of a thymus, forming a supporting framework[MP,modified]. - epithelial tissue of thymus - epithelial tissue of thymus gland - epithelium of thymus - epithelium of thymus gland - thymic epithelial tissue - thymic epithelium - thymus epithelial tissue - thymus gland epithelial tissue - thymus gland epithelium - - - - - - - - mesencephalic neural crest - - - A neural crest that has_potential_to_developmentally_contribute_to a midbrain. - mesencephalic neural crest - neural crest midbrain - - - - - - - - rhombencephalon neural crest - - - A neural crest that has_potential_to_developmentally_contribute_to a hindbrain. - neural crest hindbrain - rhombencephalic neural crest - rhombomere neural crest - - - - - - - - spinal cord neural plate - - A neural plate that develops_from a future spinal cord. - neural plate of spinal cord - - - - - - - - gonad mesenchyme - - - Mesenchyme that is part of a developing gonad [Automatically generated definition]. - gonada mesenchyme - mesenchyme of gonad - mesenchyme of gonada - - - - - - - - uncondensed odontogenic mesenchyme - - - Mesenchyme enclosed by a dental organ that gives rise to an odontogenic papilla. - dental mesenchyme - dental organ mesenchyme - enamel organ mesenchyme - tooth enamel organ mesenchyme - tooth mesenchyme - - - - - - - - forelimb mesenchyme - - Mesenchyme that is part of a developing forelimb [Automatically generated definition]. - anteriormost limb mesenchyme - fore limb mesenchyme - mesenchyme of anteriormost limb - mesenchyme of fore limb - mesenchyme of forelimb - mesenchyme of superior member - mesenchyme of upper extremity - superior member mesenchyme - upper extremity mesenchyme - wing mesenchyme - - - - - - - - hindlimb mesenchyme - - Mesenchyme that is part of a developing hindlimb [Automatically generated definition]. - hind limb mesenchyme - inferior member mesenchyme - lower extremity mesenchyme - mesenchyme of hind limb - mesenchyme of hindlimb - mesenchyme of inferior member - mesenchyme of lower extremity - - - - - - - - presumptive ganglion - - A presumptive structure that has the potential to develop into a ganglion. - - - - - - - - mesometrium - - - A mesentery that is part of a uterus [Automatically generated definition]. - mesentery of uterus - - - - - - - - future coelemic cavity lumen - - An anatomical cavity that has the potential to develop into a coelemic cavity lumen. - body cavity precursor - - - - - - - - intraembryonic coelom - - The part of the coelom in the embryo between the somatopleuric and splanchnopleuric mesoderm; the principal body cavities of the trunk (thoracic, abdominal, and pelvic) arise from this embryonic part of the coelom - somatic coelom - - - - - - - - fallopian tube - - - - Initial section of the oviduct through which the ova pass from the ovary to the uterus - fallopian tubes - female paramesonephric duct - mammalian oviduct - paramesonephric duct of female - salpinges - salpinx - tuba uterina - uterine tube (sensu Mammalia) - - - - - - - - Mullerian duct - - - - Muellerian duct - Müllerian duct - ductus paramesonephricus - early paramesonephric duct - paired ducts of the embryo that run down the lateral sides of the urogenital ridge and terminate at the mullerian eminence in the primitive urogenital sinus. In the female, they will develop to form the fallopian tubes, uterus, and the upper portion of the vagina; in the male, they are lost. These ducts are made of tissue of mesodermal origin[WP]. develops either by lengthwise splitting of the archinephric duct (in chondrichthyans and some amphibians) or by a elongated invagination of the coelomic epithelium (other vertebrates) In males, the oviducts regress. The cranial end of the oviduct maintains an opening into the coelom (which primitively may have been the anteriormost coelomic funnels connecting the nephrocoel with the coelom). This opening is the ostium tubae[USM]. - paramesonephric duct - - - - - - - - stroma - - Connective, non-functional supportive framework of a biological cell, tissue, or organ. Contrast with parenchyma. - stromal connective tissue - - - - - - - - capsule - - A cover or envelope partly or wholly surrounding a structure. Examples: egg shell, articular capsules, renal capsules[WP]. - - - - - - - - liver primordium - - - - - - A small endodermal thickening in the foregut adjacent to the transverse septum. Invaginates forming the hepatic diverticulum. - embryological hepatic plate - hepatic plate - liver bud - liver endoderm - primordium of the liver - - - - - - - - skeletal muscle tissue of trunk - - A portion of skeletal muscle tissue in the trunk. - skeletal muscle of torso - skeletal muscle tissue of torso - skeletal muscle tissue of trunk - torso skeletal muscle - torso skeletal muscle tissue - trunk skeletal muscle - trunk skeletal muscle tissue - - - - - - - - retinal neural layer - - The part of the retina that contains neurons and photoreceptor cells[GO]. - neural layer of retina - neural retina - neural retinal epithelium - neuroretina - stratum nervosum (retina) - stratum nervosum retinae - - - - - - - - sinusoid - - endothelium of irregular blood filled space - sinusoidal blood vessel - sinusoidal blood vessel endothelium - sinusoidal capillary - sinusoidal endothelium - small blood vessel similar to a capillary but with a fenestrated endothelium. Sinusoids are found in the liver, lymphoid tissue, endocrine organs, and hematopoietic organs such as the bone marrow and the spleen. Sinusoids found within terminal villi of the placenta are not comparable to these; they possess a continuous endothelium and complete basal lamina[WP]. - - - - - - - - splenic sinusoid - - - sinusoid of red pulp of spleen - sinusoidal blood vessel of spleen - wide vessels in the spleen that drain into trabecular veins[WP]. - - - - - - - - choroid plexus epithelium - - The epithelial component of the choroid plexus. Consists of cuboidal epithelial cells surrounding a core of capillaries and loose connective tissue. - choroid plexus epithelial tissue - epithelial tissue of chorioid plexus of cerebral hemisphere - epithelial tissue of choroid plexus - epithelium of choroid plexus - - - - - - - - tooth-like structure - - hard bony, calcareous, or chitinous organ found in the mouth or pharynx of an animal and used in procuring or masticating food. - tooth-like organ - - - - - - - - epithelial tube - - - Epithelial tubes transport gases, liquids and cells from one site to another and form the basic structure of many organs and tissues, with tube shape and organization varying from the single-celled excretory organ in Caenorhabditis elegans to the branching trees of the mammalian kidney and insect tracheal system. - epithelial or endothelial tube - - - - - - - - endothelial tube - - - Any endothelium that has the quality of being cylindrical [Automatically generated definition]. - - - - - - - - kidney mesenchyme - - Kidney mesenchyme is the tissue made up of loosely connected mesenchymal cells in the kidney[GO]. - mesenchyme of kidney - - - - - - - - venous blood vessel - - A blood vessel that carries blood from the capillaries toward the heart - segment of venous tree organ - venous tree organ segment - - - - - - - - pancreas primordium - - - embryonic structure that develops into pancreatic bud. - pancreatic anlage - pancreatic endoderm - pancreatic primordium - primordial pancreas - - - - - - - - pancreatic epithelial bud - - - - The embryonic pancreas develops from two separate anlagen in the foregut epithelium, one dorsal and two ventral pancreatic buds[PMID]. - pancreas epithelium - pancreatic anlage - pancreatic bud - pancreatic buds - - - - - - - - dorsal pancreatic bud - - dorsal pancreas anlage - dorsal pancreatic anlage - pancreas dorsal primordium duct bud - pancreas primordium dorsal bud - pancreatic bud that gives rise to the accessory pancreatic duct. - posterior pancreatic anlage - posterior pancreatic bud - primary pancreatic bud - - - - - - - - ventral pancreatic bud - - anterior pancreatic anlage - anterior pancreatic bud - pancreas primordium ventral bud - pancreas ventral primordium duct bud - pancreatic bud that gives rise to the major pancreatic duct. - ventral pancreas anlage - ventral pancreatic anlage - - - - - - - - digestive system duct - - A duct that is part of a digestive system [Automatically generated definition]. - duct of digestive system - duct of gastrointestinal system - gastrointestinal system duct - - - - - - - - digestive tract epithelium - - An epithelium that lines the lumen of the digestive tract. - alimentary tract epithelium - digestive tract epithelial tissue - epithelial tissue of digestive tract - epithelial tissue of gut - epithelium of digestive tract - epithelium of gut - gastrodermis - gut epithelial tissue - gut epithelium - - - - - - - - diencephalic white matter - - White matter that is part of a diencephalon [Automatically generated definition]. - diencephalic tract/commissure - diencephalic tracts and commissures - predominantly white regional part of diencephalon - white matter of diencephalon - - - - - - - - cartilage element of chondrocranium - - A cartilage element of chondrocranium. Example: neurocranial trabecula. - cartilage of chondrocranium - cartilaginous element of chondrocranium - chondrocranium cartilage - neurocranium cartilage - - - - - - - - cranial cartilage - - A cartilage element that is part of the cranial skeleton. - cartilage of cranium - cranial cartilages - cranium cartilage - - - - - - - - sex gland - - - Any of the organized aggregations of cells that function as secretory or excretory organs and are associated with reproduction. - genitalia gland - gland of genitalia - gland of reproductive system - reproductive gland - reproductive system gland - - - - - - - - somatic sensory system - - The sensory system for the sense of touch and pain. - somatic sensory system - somatosensory system - system for detection of somatic senses - - - - - - - - placenta labyrinth - - - The placental layers where embryonic blood vessels are surrounded by trophoblast cells and maternal blood - labyrinthine layer - labyrinthine layer of placenta - placental labyrinth - - - - - - - - brain ventricle/choroid plexus - - - - - - - - - - - The brain ventricles or their associated choroid plexuses - - - - - - - - aqueous drainage system - - - The structures associated with drainage of the aqueous humor from the eye, that include the trabecular meshwork, Schlemm's canal, the uveoscleral network, and the aqueous veins - - - - - - - - cutaneous elastic tissue - - - The slender connective tissue fiber in the extracellular matrix of skin tissue that is composed of microfibrils and amorphous elastin and is characterized by great elasticity - cutaneous elastic fiber - dermal elastic fiber - - - - - - - - placental labyrinth vasculature - - blood vessels of the layer of the placenta where embryonic and maternal blood vessels interdigitate - placental labyrinth vascular network - placental vasculature - vasculature of placenta labyrinth - - - - - - - - internal female genitalia - - - The internal feminine genital organs, including the ovaries, uterine tubes, uterus, uterine cervix, and vagina. - female internal genitalia - internal female genital organ - internal genitalia of female reproductive system - organa genitalia feminina interna - - - - - - - - valve - - anatomical valve - - - - - - - - conus arteriosus - - A conical pouch formed from the upper and left angle of the right ventricle in the chordate heart, from which the pulmonary artery arises[WP]. the anteriosuperior, smooth-walled portion of the cavity of the right ventricle, beginning at the supraventricular crest and terminates in the pulmonary trunk[MP]. - - - - - - - - uterine tube infundibulum - - The funnel-like expansion of the abdominal extremity of the uterine tube[MP] - infundibulum - infundibulum of fallopian tube - infundibulum of oviduct - infundibulum of uterine tube - infundibulum tubae uterinae - - - - - - - - spinal cord motor column - - The subclasses of motor neurons which are organized into longitudinally oriented columns that occupy distinct and, in some cases, discontinuous domains along the rostrocaudal axis of the spinal cord; motor neurons within a single column send their axons to a common peripheral target - - - - - - - - olfactory bulb layer - - - . - cytoarchitectural part of olfactory bulb - - - - - - - - dermatome - - A transitional population of migrating mesenchymal cells that derive from somites and that will become dermal cells. - cutis plate - dermatomal mesenchyme - epimere mesoderm - mesenchyma dermatomiale - - - - - - - - germinal neuroepithelium - - - - - The single layer of epithelial cells that lines the early neural tube and develops into the nervous system and into the neural crest cells - germinal neuroepithelial layer - germinal neuroepithelium - original neural tube - - - - - - - - spleen primary B follicle - - - The nodules of small undifferentiated B lymphocytes and follicular dendritic cells located in the spleen white pulp - primary spleen B cell follicle - - - - - - - - spleen secondary B follicle - - - The nodules of antigen-activated, differentiating B cells, follicular dendritic cells, antigen-presenting T cells and macrophages in the spleen white pulp - secondary spleen B cell follicle - splenic secondary B cell follicle - - - - - - - - semicircular canal ampulla - - - - The spherical enlargement at the base of each semicircular canal where they connect with the utricle, containing the crista ampullaris which detects movement of the fluid within the canals - ampullae osseae - membraneous ampulla of the semicircular duct - semicircular duct ampulla - - - - - - - - external male genitalia - - - - - The external masculine genital organs, including the penis and scrotum - external male genital organ - male external genitalia - organa genitalia masculina externa - - - - - - - - internal male genitalia - - - The internal masculine genital organs, including the testes, epididymides, deferent ducts, seminal vesicles, prostate, ejaculatory ducts, and bulbourethral glands - internal male genital organ - male internal genitalia - organa genitalia masculina interna - - - - - - - - biliary ductule - - - One of the fine terminal elements of the bile duct system, leaving the portal canal, and pursuing a course at the periphery of a lobule of the liver[BTO]. the excretory ducts of the liver that connect the interlobular ductules to the right or left hepatic duct[MP] - bile capillary - bile ductule - biliary ductule - biliary ductule - cholangiole - ductuli biliferi - terminal cholangiole - - - - - - - - spinal cord medial motor column - - The subclasses of motor neurons which project their axons to axial muscles that lie close to the vertebral column; motor neurons in the lateral subdivision of the MMC project their axons to body wall muscles - - - - - - - - neural tube ventricular layer - - - - The layer of undifferentiated, proliferating cells that line the neural tube lumen that is the immediate transformation of the germinal neuroepithelium - ependymal layer - neural tube ependymal layer - neural tube ependymal zone - neural tube ventricular germinal zone - neural tube ventricular zone - - - - - - - - neural tube mantle layer - - - - The layer of glia and differentiating neurons that forms as a second layer around the germinal neuroepithium; as this develops it comes to lie between the ventricular and marginal layers and includes the basal and alar plates. Develops into neurons and glia forming a gray matter layer. - future brain marginal layer - neural tube intermediate zone - - - - - - - - frontonasal prominence - - The unpaired embryonic prominence that is formed by the tissues surrounding the forebrain vesicle and develops into the forehead and bridge of the nose/snout. - embryonic frontonasal prominence - forebrain prominence - frontonasal mass - frontonasal process - prominentia frontonasalis - - - - - - - - medial nasal prominence - - The central area of the two limbs of a horseshoe-shaped mesenchymal swelling that lie medial to the olfactory placode or pit in the future nasal region of the embryo; it joins with the ipsilateral maxillary prominence in the formation of half of the upper jaw, and the nasal tip and philtrum of the upper lip develop from it - medial nasal process - medial nasal swelling - medial-nasal process - nasomedial prominence - prominentia nasalis medialis - - - - - - - - brain ventricle - - - brain ventricles - cerebral ventricle - one of the system of communicating cavities in the brain that are continuous with the central canal of the spinal cord, that like it are derived from the medullary canal of the embryo, that are lined with an epithelial ependyma, and that contain a serous fluid - region of ventricular system of brain - - - - - - - - orbital region - - The subdivision of the face that includes the eye (eyeball plus adnexa such as eyelids) and the orbit of the skull and associated parts of the face such as the eyebrows, if present - content of orbital part of eye - eye region - ocular and peri-ocular region - ocular region - orbital content - orbital part of eye - orbital part of face - - - - - - - - anatomical conduit - - Any tube, opening or passage that connects two distinct anatomical spaces. - foramen - foramina - opening - ostia - ostium - - - - - - - - pharyngeal pouch - - - - An internal pocketing of pharyngeal endoderm that contacts a region of ectoderm (a pharyngeal cleft) and interdigitates in the anterior and posterior directions with the pharyngeal arches. - branchial pouch - pharyngeal pouches - visceral pouch - visceral pouches - - - - - - - - vasculature of iris - - A vasculature that is part of a iris [Automatically generated definition]. - iris blood vessels - iris vascular network - iris vasculature - vascular network of iris - - - - - - - - endoderm-derived structure - - An anatomical structure that develops (entirely or partially) from the endoderm. - - - - - - - - mesoderm-derived structure - - An anatomical structure that develops (entirely or partially) from the mesoderm. - mesodermal derivative - - - - - - - - ectoderm-derived structure - - An anatomical structure that develops (entirely or partially) from the ectoderm. - ectodermal deriviative - - - - - - - - genitourinary system - - - Anatomical system that has as its parts the organs concerned with the production and excretion of urine and those concerned with reproduction. - GU tract - UG tract - Urogenitalsystem - genito-urinary system - genitourinary tract - urogenital system - urogenital tract - - - - - - - - myocardial layer - - Any of the layers of the myocardium. Example: compact layer, trabecular layer. - layer of myocardium - myocardium layer - - - - - - - - optic vesicle - - - The optic vesicle is the evagination of neurectoderm that precedes formation of the optic cup[GO]. Portion of tissue that is comprised of neuroepitheium which has pinched off from the anterior neural keel and will form the optic cup[ZFA]. - evagination - eye vesicle - ocular vesicle - optic vesicles - - - - - - - - growth plate cartilage - - cartilage that will provide a scaffold for mineralization of endochondral bones as they elongate or grow. - growth plate - - - - - - - - cerebellar layer - - - A cortical cell layer of the cerebellum. Examples: the granular (inner+outer) layer, molecular layer, Purkinje cell layer, and the ventricular layer of the embryo. - cell layer of cerebellar cortex - gray matter layer of cerebellum - layer of cerebellar cortex - layer of cerebellum - - - - - - - - proximal tubule - - In mammals, the proximal tubule is a nephron tubule that connects Bowman's capsule to the loop of Henle. It has a brush border epithelial morphology[GO]. - kidney proximal tubule - proximal kidney tubule - renal proximal tubule - - - - - - - - distal tubule - - The distal tubule is a nephron tubule that consists of the distal convoluted tubule and distal straight tubule segments - kidney distal tubule - renal distal tubule - - - - - - - - intermediate tubule - - The intermediate tubule is a nephron tubule that lies between the proximal and distal tubules - renal intermediate tubule - tubulus attenuatus - - - - - - - - cardiogenic plate - - The first recognizable structure derived from the heart field - cardiac crescent - cardiogenic crescent - heart rudiment - myocardial plate - - - - - - - - primary heart field - - - - - A specific region of the lateral mesoderm that will form the primary beating heart tube. In mammals the primary heart field gives rise to the left ventricle. - FHF - PHF - first heart field - heart field - primary heart field - - - - - - - - heart tube - - - - An epithelial tube that will give rise to the mature heart. - embryonic heart tube - endocardial heart tube - endocardial tube - - - - - - - - outflow tract septum - - The outflow tract septum is a partition in the outflow tract - - - - - - - - outflow tract - - - The outflow tract is the portion of the heart through which blood flows into the arteries - arterial (outflow) pole - cardiac outflow tract - heart outflow tract - - - - - - - - His-Purkinje system - - - HPS - His-Purkinji network - The His-Purkinje system receives signals from the AV node and is composed of the fibers that regulate cardiac muscle contraction in the ventricles - - - - - - - - cardiac chamber - - - A cardiac chamber surrounds an enclosed cavity within the heart - chamber of heart - heart chamber - - - - - - - - proepicardium - - An embryonic group of progenitor cells that forms from an outpouching of the septum transversum near the venous pole of the heart and gives rise to the epicardium - proepicardial cluster - proepicardial organ - - - - - - - - septum transversum - - A thick plate of mesodermal tissue that occupies the space between the thoracic cavity and yolk stalk in the early embryo, forming a transverse partition partially separating the coelomic cavity into thoracic and abdominal portions. It gives rise to the central tendon of the diaphragm[VHOG]. - transverse septum - - - - - - - - branchiomeric muscle - - - - A jaw muscle that arises from cranial mesenchyme and is innervated by cranial nerves. - branchial head muscle - branchiomeric skeletal muscle - - - - - - - - internal genitalia - - The internal genitalia are the internal sex organs such as the uterine tube, the uterus and the vagina in female mammals, and the testis, seminal vesicle, ejaculatory duct and prostate in male mammals - internal genitalia - internal genitals - internal reproductive organ - internal sex organ - - - - - - - - external genitalia - - The external genitalia are the outer sex organs, such as the penis or vulva in mammals - external genitalia - external reproductive organ - external sex organ - - - - - - - - hemopoietic organ - - - Organ that is part of the hematopoietic system. - haematological system organ - haemopoietic system organ - hematopoeitic or lymphoid organ - hematopoeitic organ - hematopoietic system organ - lymph organ - lymphoid organ - organ of haematological system - organ of haemopoietic system - organ of hematopoietic system - organ of organa haemopoietica - organa haemopoietica organ - - - - - - - - aorta smooth muscle tissue - - - aorta non-striated muscle - aorta smooth muscle - aortic smooth muscle - the nonstriated, involuntary muscle tissue located in the wall of the aorta - - - - - - - - prostate glandular acinus - - - - A saclike structure of the prostate gland, comprised of at least three cell layers: an innermost layer of secretory columnar luminal epithelium, a middle layer of squamous basal epithelium that also contains neuroendocrine cells, transit amplifying cells, and stem cells, and an outer layer of smooth muscle intermixed with other stromal cells - prostatic acinus - prostatic follicle - - - - - - - - mammary gland fat - - - The mammary fat is an adipose structure in the gland that is invaded by the mammary ducts - adipose tissue of lactiferous gland - adipose tissue of mammary gland - fat tissue of lactiferous gland - fat tissue of lobe of breast - fat tissue of lobe of mammary gland - fat tissue of mammary gland - fatty tissue of lactiferous gland - fatty tissue of lobe of breast - fatty tissue of lobe of mammary gland - fatty tissue of mammary gland - lactiferous gland adipose tissue - lactiferous gland fat tissue - lactiferous gland fatty tissue - lobe of breast adipose tissue - lobe of breast fat tissue - lobe of breast fatty tissue - lobe of mammary gland adipose tissue - lobe of mammary gland fat tissue - lobe of mammary gland fatty tissue - mammary gland adipose tissue - mammary gland fat tissue - mammary gland fatty tissue - - - - - - - - mammary gland cord - - - - The solid cord of epithelial cells that emerges from the mammary bud and grows down from the primary mammary mesenchyme and into a second stromal compartment, the fat pad precursor, beneath the dermis. - lactiferous gland cord - mammary cord - mammary sprout - - - - - - - - placental labyrinth blood vessel - - The embryonic vessels grow through the layer to come in close contact with the maternal blood supply - blood vessel of labyrinthine layer - blood vessel of labyrinthine layer of placenta - blood vessel of placenta labyrinth - labyrinthine layer blood vessel - labyrinthine layer of placenta blood vessel - placenta labyrinth blood vessel - - - - - - - - prostate gland stroma - - - - The prostate gland stroma is made up of the mesenchymal or fibroblast cells of the prostate gland - prostate stroma - prostatic stroma - stroma of glandular part of prostate - stroma of prostate - stroma of prostate gland - - - - - - - - endodermal part of digestive tract - - - A portions of the gut that is derived from endoderm. - endodermal gut - gut endoderm - - - - - - - - olfactory bulb mitral cell layer - - OB mitral cell layer - The mitral cell layer is composed of pyramidal neurons whose cell bodies are located between the granule cell layer and the plexiform layer - mitral cell body layer - mitral cell layer - mitral cell layer of the olfactory bulb - olfactory bulb main mitral cell body layer - - - - - - - - glomerular epithelium - - - The glomerular epithelium is an epithelial tissue that covers the outer surfaces of the glomerulus. The glomerular epithelium consists of both parietal and visceral epithelium. Metanephric glomerular parietal epithelial cells are specialized epithelial cells that form tight junctions as a barrier to protein transport. A metanephric glomerular visceral epithelial cell is a specialized epithelial cell that contains 'feet' that interdigitate with the 'feet' of other glomerular epithelial cells in the metanephros. - epithelium of glomerulus - epithelium of kidney glomerulus - epithelium of renal glomerulus - glomerular epithelial cell - kidney glomerular epithelium - - - - - - - - glomerular endothelium - - - The glomerular endothelium is an epithelial tissue that covers the internal surfaces of the glomerulus - endothelium of renal glomerulus - renal glomerulus endothelium - - - - - - - - renal glomerulus vasculature - - The glomerulus vasculature is composed of the tubule structures that carry blood or lymph in the glomerulus - glomerulus vasculature - renal glomerulus vascular network - renal glomerulus vasculature - vascular network of renal glomerulus - vasculature of renal glomerulus - - - - - - - - loop of Henle ascending limb thin segment - - A sub-portion of the loop of Henle in the nephron of the kidney that is permeable to ions but not to water - ascending limb thin segment of loop of Henle - ascending thin limb - pars ascendens (tubulus attenuatus) - thin ascending limb - thin ascending limb of loop of Henle - - - - - - - - comma-shaped body - - CSB - The comma-shaped body is the precursor structure to the S-shaped body that contributes to the morphogenesis of the nephron - - - - - - - - S-shaped body - - SSB - The S-shaped body is the successor of the comma-shaped body that contributes to the morphogenesis of the nephron - stage II nephron - - - - - - - - kidney pyramid - - Kidney pyramids are the conical arrangements of tubules that constitute the renal medulla in a multi-lobed mammalian kidney; they contain the loops of Henle and the medullary collecting ducts. - Malphigian pyramid - Malpighian pyramid - Malpighian pyramid - medullary pyramid - pyramid - pyramid of Malphigi - pyramid of Malpighi - pyramides renales - pyramis renalis - renal medullary region - renal pyramid - - - - - - - - kidney outer medulla inner stripe - - The inner stripe is a deep, centrally located portion of the renal outer medulla and is traversed by thick and thin portions of nephron tubules - inner stripe - inner stripe of medulla of kidney - inner stripe of outer medulla - inner stripe of renal medulla - outer medulla inner stripe - stria interna medullae renalis - - - - - - - - kidney outer medulla outer stripe - - The outer stripe is the region of the kidney that lies distal to the line of termination of the straight renal tubules - outer medulla outer stripe - outer stripe - outer stripe of medulla of kidney - outer stripe of outer medulla - outer stripe of renal medulla - stria externa medullae renalis - - - - - - - - cortical collecting duct - - The cortical collecting duct is the portion of the collecting duct that resides in the renal cortex - kidney cortex collecting duct - renal cortex collecting duct - - - - - - - - outer medullary collecting duct - - The outer medullary collecting duct is the portion of the collecting duct that lies in the renal outer medulla - kidney outer medulla collecting duct - outer renal medulla collecting duct - - - - - - - - inner medullary collecting duct - - The inner medullary collecting duct is the portion of the collecting duct that lies in the renal inner medulla - inner renal medulla collecting duct - kidney inner medulla collecting duct - papillary collecting duct - - - - - - - - nephrogenic mesenchyme - - Nephrogenic mesenchyme is the tissue made up of loosely connected mesenchymal cells in the nephron - mesenchyme of nephron - nephron mesenchyme - - - - - - - - renal vesicle - - The renal vesicle is the primordial structure of the nephron epithelium, and is formed by the condensation of mesenchymal cells. - stage I nephron - - - - - - - - nephron epithelium - - The nephron epithelium is a tissue that covers the surface of a nephron - epithelial tissue of nephron - epithelium of nephron - nephron epithelial tissue - - - - - - - - glomerular capillary - - blood capillary of renal glomerulus - capillary of renal glomerulus - capillary vessel of renal glomerulus - glomerular capillaries - glomerular capillary system - renal glomerulus blood capillary - renal glomerulus capillary - renal glomerulus capillary vessel - the small branching blood vessels in the kidney glomerulus that receives blood from the kidney afferent arterioles; these capillaries are under high pressure for filtering within the glomerulus - - - - - - - - upper leg nerve - - A nerve that is part of a hindlimb stylopod [Automatically generated definition]. - hind limb stylopod nerve - hindlimb stylopod nerve - lower extremity stylopod nerve - thigh RELATED - - - - - - - - back nerve - - A nerve that is part of a back [Automatically generated definition]. - nerve of back - - - - - - - - lower arm nerve - - A nerve that is part of a lower arm [Automatically generated definition]. - - - - - - - - upper arm nerve - - A nerve that is part of a forelimb stylopod [Automatically generated definition]. - - - - - - - - lower leg nerve - - A nerve that is part of a lower leg [Automatically generated definition]. - - - - - - - - urethra smooth muscle layer - - A portion of smooth muscle tissue that is part of a urethra [Automatically generated definition]. - muscle layer of urethra - muscular coat of urethra - muscular layer of urethra - smooth muscle of urethra - smooth muscle tissue of urethra - tunica muscularis urethrae - urethra smooth muscle tissue - urethral smooth muscle - - - - - - - - large intestine smooth muscle - - A portion of smooth muscle tissue that is part of a large intestine [Automatically generated definition]. - involuntary muscle of large intestine - large intestine involuntary muscle - large intestine non-striated muscle - large intestine smooth muscle tissue - non-striated muscle of large intestine - smooth muscle of large intestine - smooth muscle tissue of large intestine - - - - - - - - intestine smooth muscle - - A portion of smooth muscle tissue that is part of a intestine [Automatically generated definition]. - bowel involuntary muscle - bowel non-striated muscle - bowel smooth muscle - bowel smooth muscle tissue - intestinal muscularis - intestinal smooth muscle - intestine involuntary muscle - intestine non-striated muscle - intestine smooth muscle tissue - involuntary muscle of bowel - involuntary muscle of intestine - non-striated muscle of bowel - non-striated muscle of intestine - smooth muscle of bowel - smooth muscle of intestine - smooth muscle tissue of bowel - smooth muscle tissue of intestine - - - - - - - - stomach smooth muscle - - A portion of smooth muscle tissue that is part of a stomach [Automatically generated definition]. - gastric muscle - gastric smooth muscle - involuntary muscle of stomach - involuntary muscle of ventriculus - non-striated muscle of stomach - non-striated muscle of ventriculus - smooth muscle of stomach - smooth muscle of ventriculus - smooth muscle tissue of stomach - smooth muscle tissue of ventriculus - stomach involuntary muscle - stomach muscle - stomach non-striated muscle - stomach smooth muscle tissue - ventriculus involuntary muscle - ventriculus non-striated muscle - ventriculus smooth muscle - ventriculus smooth muscle tissue - - - - - - - - vagina smooth muscle - - - A portion of smooth muscle tissue that is part of a vagina [Automatically generated definition]. - involuntary muscle of vagina - non-striated muscle of vagina - smooth muscle of vagina - smooth muscle tissue of vagina - vagina involuntary muscle - vagina non-striated muscle - vagina smooth muscle - vagina smooth muscle tissue - vaginal smooth muscle - - - - - - - - respiratory system smooth muscle - - A portion of smooth muscle tissue that is part of a respiratory system [Automatically generated definition]. - airway smooth muscle - airway smooth muscle cell - respiratory smooth muscle - smooth muscle of respiratory system - - - - - - - - gastrointestinal system smooth muscle - - A portion of smooth muscle tissue that is part of a digestive system [Automatically generated definition]. - smooth muscle tissue of gastrointestinal system - - - - - - - - kidney pelvis smooth muscle - - kidney pelvis smooth muscle - pelvic smooth muscle - renal pelvis smooth muscle - smooth muscle tissue of renal pelvis - the smooth muscle tissue surrounding the urothelium of the kidney pelvis - - - - - - - - urinary bladder smooth muscle - - A portion of smooth muscle tissue that is part of a urinary bladder [Automatically generated definition]. - bladder involuntary muscle - bladder non-striated muscle - bladder smooth muscle - bladder smooth muscle tissue - involuntary muscle of bladder - involuntary muscle of urinary bladder - non-striated muscle of bladder - non-striated muscle of urinary bladder - smooth muscle layer of bladder - smooth muscle of bladder - smooth muscle of urinary bladder - smooth muscle tissue of bladder - smooth muscle tissue of urinary bladder - urinary bladder involuntary muscle - urinary bladder muscle - urinary bladder non-striated muscle - urinary bladder smooth muscle tissue - - - - - - - - urinary bladder trigone smooth muscle - - A portion of smooth muscle tissue that is part of a trigone of urinary bladder [Automatically generated definition]. - Lieutaud's trigone involuntary muscle - Lieutaud's trigone non-striated muscle - Lieutaud's trigone smooth muscle - Lieutaud's trigone smooth muscle tissue - deep trigone involuntary muscle - deep trigone non-striated muscle - deep trigone smooth muscle - deep trigone smooth muscle tissue - involuntary muscle of Lieutaud's trigone - involuntary muscle of deep trigone - involuntary muscle of trigone of bladder - involuntary muscle of trigone of urinary bladder - involuntary muscle of urinary bladder trigone - involuntary muscle of vesical trigone - non-striated muscle of Lieutaud's trigone - non-striated muscle of deep trigone - non-striated muscle of trigone of bladder - non-striated muscle of trigone of urinary bladder - non-striated muscle of urinary bladder trigone - non-striated muscle of vesical trigone - smooth muscle of Lieutaud's trigone - smooth muscle of deep trigone - smooth muscle of trigone of bladder - smooth muscle of trigone of urinary bladder - smooth muscle of urinary bladder trigone - smooth muscle of vesical trigone - smooth muscle tissue of Lieutaud's trigone - smooth muscle tissue of deep trigone - smooth muscle tissue of trigone of bladder - smooth muscle tissue of trigone of urinary bladder - smooth muscle tissue of urinary bladder trigone - smooth muscle tissue of vesical trigone - trigone of bladder involuntary muscle - trigone of bladder non-striated muscle - trigone of bladder smooth muscle - trigone of bladder smooth muscle tissue - trigone of urinary bladder involuntary muscle - trigone of urinary bladder non-striated muscle - trigone of urinary bladder smooth muscle - trigone of urinary bladder smooth muscle tissue - urinary bladder trigone involuntary muscle - urinary bladder trigone muscle - urinary bladder trigone non-striated muscle - urinary bladder trigone smooth muscle tissue - vesical trigone involuntary muscle - vesical trigone non-striated muscle - vesical trigone smooth muscle - vesical trigone smooth muscle tissue - - - - - - - - urinary bladder neck smooth muscle - - A portion of smooth muscle tissue that is part of a neck of urinary bladder [Automatically generated definition]. - bladder neck involuntary muscle - bladder neck non-striated muscle - bladder neck smooth muscle - bladder neck smooth muscle tissue - involuntary muscle of bladder neck - involuntary muscle of neck of bladder - involuntary muscle of neck of urinary bladder - involuntary muscle of urinary bladder neck - involuntary muscle of vesical neck - neck of bladder involuntary muscle - neck of bladder non-striated muscle - neck of bladder smooth muscle - neck of bladder smooth muscle tissue - neck of urinary bladder involuntary muscle - neck of urinary bladder non-striated muscle - neck of urinary bladder smooth muscle - neck of urinary bladder smooth muscle tissue - non-striated muscle of bladder neck - non-striated muscle of neck of bladder - non-striated muscle of neck of urinary bladder - non-striated muscle of urinary bladder neck - non-striated muscle of vesical neck - smooth muscle of bladder neck - smooth muscle of neck of bladder - smooth muscle of neck of urinary bladder - smooth muscle of urinary bladder neck - smooth muscle of vesical neck - smooth muscle tissue of bladder neck - smooth muscle tissue of neck of bladder - smooth muscle tissue of neck of urinary bladder - smooth muscle tissue of urinary bladder neck - smooth muscle tissue of vesical neck - trigonal muscle - trigonal muscle of urinary bladder - urinary bladder neck involuntary muscle - urinary bladder neck muscle - urinary bladder neck non-striated muscle - urinary bladder neck smooth muscle tissue - vesical neck involuntary muscle - vesical neck non-striated muscle - vesical neck smooth muscle - vesical neck smooth muscle tissue - - - - - - - - anal region smooth muscle - - A portion of smooth muscle tissue that is part of an anal region [Automatically generated definition]. - anal part of perineum involuntary muscle - anal part of perineum non-striated muscle - anal part of perineum smooth muscle - anal part of perineum smooth muscle tissue - anal region involuntary muscle - anal region non-striated muscle - anal region smooth muscle tissue - anal triangle involuntary muscle - anal triangle non-striated muscle - anal triangle smooth muscle - anal triangle smooth muscle tissue - involuntary muscle of anal part of perineum - involuntary muscle of anal region - involuntary muscle of anal triangle - non-striated muscle of anal part of perineum - non-striated muscle of anal region - non-striated muscle of anal triangle - smooth muscle of anal part of perineum - smooth muscle of anal region - smooth muscle of anal triangle - smooth muscle tissue of anal part of perineum - smooth muscle tissue of anal region - smooth muscle tissue of anal triangle - - - - - - - - lymphatic vessel smooth muscle - - A portion of smooth muscle tissue that is part of a lymphatic vessel [Automatically generated definition]. - involuntary muscle of lymph vessel - involuntary muscle of lymphatic vessel - lymph vessel involuntary muscle - lymph vessel non-striated muscle - lymph vessel smooth muscle - lymph vessel smooth muscle tissue - lymphatic vessel involuntary muscle - lymphatic vessel non-striated muscle - lymphatic vessel smooth muscle tissue - non-striated muscle of lymph vessel - non-striated muscle of lymphatic vessel - smooth muscle of lymph vessel - smooth muscle of lymphatic vessel - smooth muscle tissue of lymph vessel - smooth muscle tissue of lymphatic vessel - - - - - - - - lower respiratory tract smooth muscle - - - A portion of smooth muscle tissue that is part of a lower respiratory tract [Automatically generated definition]. - involuntary muscle of lower respiratory tract - lower respiratory tract involuntary muscle - lower respiratory tract non-striated muscle - lower respiratory tract smooth muscle tissue - non-striated muscle of lower respiratory tract - smooth muscle of lower respiratory tract - smooth muscle tissue of lower respiratory tract - - - - - - - - iris smooth muscle - - A portion of smooth muscle tissue that is part of a iris [Automatically generated definition]. - involuntary muscle of iris - iridial smooth muscle - iris involuntary muscle - iris non-striated muscle - iris smooth muscle tissue - non-striated muscle of iris - smooth muscle of iris - smooth muscle tissue of iris - - - - - - - - mammary gland smooth muscle - - - A portion of smooth muscle tissue that is part of a mammary gland [Automatically generated definition]. - smooth muscle tissue of mammary gland - - - - - - - - arteriole smooth muscle - - - A portion of smooth muscle tissue that is part of an arteriole [Automatically generated definition]. - - - - - - - - blood vessel smooth muscle - - blood vessel involuntary muscle - blood vessel non-striated muscle - blood vessel smooth muscle tissue - involuntary muscle of blood vessel - non-striated muscle of blood vessel - smooth muscle found within, and composing the majority of the wall of blood vessels. - smooth muscle of blood vessel - smooth muscle tissue of blood vessel - vascular smooth muscle - vascular smooth muscle tissue - - - - - - - - spleen smooth muscle - - A portion of smooth muscle tissue that is part of a spleen [Automatically generated definition]. - involuntary muscle of spleen - non-striated muscle of spleen - smooth muscle of spleen - smooth muscle tissue of spleen - spleen involuntary muscle - spleen non-striated muscle - spleen smooth muscle tissue - - - - - - - - small intestine smooth muscle - - A portion of smooth muscle tissue that is part of a small intestine [Automatically generated definition]. - involuntary muscle of small bowel - involuntary muscle of small intestine - non-striated muscle of small bowel - non-striated muscle of small intestine - small bowel involuntary muscle - small bowel non-striated muscle - small bowel smooth muscle - small bowel smooth muscle tissue - small intestine involuntary muscle - small intestine non-striated muscle - small intestine smooth muscle tissue - smooth muscle of small bowel - smooth muscle of small intestine - smooth muscle tissue of small bowel - smooth muscle tissue of small intestine - - - - - - - - gall bladder smooth muscle - - - A portion of smooth muscle tissue that is part of a gallbladder [Automatically generated definition]. - biliary smooth muscle - gall bladder involuntary muscle - gall bladder non-striated muscle - gall bladder smooth muscle tissue - gallbladder involuntary muscle - gallbladder non-striated muscle - gallbladder smooth muscle - gallbladder smooth muscle tissue - involuntary muscle of gall bladder - involuntary muscle of gallbladder - non-striated muscle of gall bladder - non-striated muscle of gallbladder - smooth muscle of gall bladder - smooth muscle of gallbladder - smooth muscle tissue of gall bladder - smooth muscle tissue of gallbladder - - - - - - - - bronchus smooth muscle - - A portion of smooth muscle tissue that is part of a bronchus [Automatically generated definition]. - bronchi involuntary muscle - bronchi non-striated muscle - bronchi smooth muscle - bronchi smooth muscle tissue - bronchial smooth muscle - bronchial trunk involuntary muscle - bronchial trunk non-striated muscle - bronchial trunk smooth muscle - bronchial trunk smooth muscle tissue - bronchus involuntary muscle - bronchus non-striated muscle - bronchus smooth muscle tissue - involuntary muscle of bronchi - involuntary muscle of bronchial trunk - involuntary muscle of bronchus - non-striated muscle of bronchi - non-striated muscle of bronchial trunk - non-striated muscle of bronchus - smooth muscle of bronchi - smooth muscle of bronchial trunk - smooth muscle of bronchus - smooth muscle tissue of bronchi - smooth muscle tissue of bronchial trunk - smooth muscle tissue of bronchus - - - - - - - - prostate gland smooth muscle - - - A portion of smooth muscle tissue that is part of a prostate gland [Automatically generated definition]. - involuntary muscle of prostate - involuntary muscle of prostate gland - muscular tissue of prostate - non-striated muscle of prostate - non-striated muscle of prostate gland - prostate gland involuntary muscle - prostate gland non-striated muscle - prostate gland smooth muscle tissue - prostate involuntary muscle - prostate non-striated muscle - prostate smooth muscle - prostate smooth muscle tissue - smooth muscle of prostate - smooth muscle of prostate gland - smooth muscle tissue of prostate - smooth muscle tissue of prostate gland - substantia muscularis prostatae - - - - - - - - oviduct smooth muscle - - - A portion of smooth muscle tissue that is part of a fallopian tube [Automatically generated definition]. - fallopian tube involuntary muscle - fallopian tube non-striated muscle - fallopian tube smooth muscle - fallopian tube smooth muscle tissue - involuntary muscle of fallopian tube - non-striated muscle of fallopian tube - smooth muscle of fallopian tube - smooth muscle tissue of fallopian tube - - - - - - - - outflow tract smooth muscle - - A portion of smooth muscle tissue that is part of a outflow tract [Automatically generated definition]. - involuntary muscle of outflow tract - non-striated muscle of outflow tract - outflow tract involuntary muscle - outflow tract non-striated muscle - outflow tract smooth muscle tissue - smooth muscle of outflow tract - smooth muscle tissue of outflow tract - - - - - - - - bone of dorsum - - - A bone that is part of the dorsal region of an animal. - back bone - bone of back - dorsal region bone - - - - - - - - pedal digit bone - - A bone that is part of a hindlimb digit. Typically phalanges but may include sesamoids. - bone of digit of foot - digit of foot bone - digital bone of foot - digital bone of pes - digitus pedis bone - digitus pedis bone organ - foot digit bone - foot digit bone - foot digit bone organ - hind limb digit bone - toe bone - toe bone organ - - - - - - - - manual digit bone - - A bone that is part of a forelimb digit. Typically phalanges but may include sesamoids. - digital bone of hand - digital bone of manus - finger bone - fore limb digit bone - hand digit bone - hand digit bone - - - - - - - - upper arm bone - - A bone that is part of a forelimb stylopod [Automatically generated definition]. - humerus - - - - - - - - hindlimb zeugopod bone - - A bone that is part of a lower leg [Automatically generated definition]. - bone of hind limb middle limb segment - bone of hind limb zeugopod - bone of hindlimb middle limb segment - bone of hindlimb zeugopod - bone of inferior member middle limb segment - bone of inferior member zeugopod - bone of intermediate segment of free lower limb - bone of lower extremity middle limb segment - bone of lower extremity zeugopod - bone of lower leg - bone of middle limb segment of hind limb - bone of middle limb segment of hindlimb - bone of middle limb segment of inferior member - bone of middle limb segment of lower extremity - bone of zeugopod of hind limb - bone of zeugopod of hindlimb - bone of zeugopod of inferior member - bone of zeugopod of leg - bone of zeugopod of lower extremity - bone organ of hind limb middle limb segment - bone organ of hind limb zeugopod - bone organ of hindlimb middle limb segment - bone organ of hindlimb zeugopod - bone organ of inferior member middle limb segment - bone organ of inferior member zeugopod - bone organ of intermediate segment of free lower limb - bone organ of lower extremity middle limb segment - bone organ of lower extremity zeugopod - bone organ of lower leg - bone organ of middle limb segment of hind limb - bone organ of middle limb segment of hindlimb - bone organ of middle limb segment of inferior member - bone organ of middle limb segment of lower extremity - bone organ of zeugopod of hind limb - bone organ of zeugopod of hindlimb - bone organ of zeugopod of inferior member - bone organ of zeugopod of leg - bone organ of zeugopod of lower extremity - hind limb middle limb segment bone - hind limb middle limb segment bone organ - hind limb zeugopod bone - hind limb zeugopod bone organ - hindlimb middle limb segment bone - hindlimb middle limb segment bone organ - hindlimb zeugopod bone - hindlimb zeugopod bone organ - inferior member middle limb segment bone - inferior member middle limb segment bone organ - inferior member zeugopod bone - inferior member zeugopod bone organ - intermediate segment of free lower limb bone - intermediate segment of free lower limb bone organ - lower extremity middle limb segment bone - lower extremity middle limb segment bone organ - lower extremity zeugopod bone - lower extremity zeugopod bone organ - lower leg bone - middle limb segment of hind limb bone - middle limb segment of hind limb bone organ - middle limb segment of hindlimb bone - middle limb segment of hindlimb bone organ - middle limb segment of inferior member bone - middle limb segment of inferior member bone organ - middle limb segment of lower extremity bone - middle limb segment of lower extremity bone organ - zeugopod of hind limb bone - zeugopod of hind limb bone organ - zeugopod of hindlimb bone - zeugopod of hindlimb bone organ - zeugopod of inferior member bone - zeugopod of inferior member bone organ - zeugopod of leg bone - zeugopod of leg bone organ - zeugopod of lower extremity bone - zeugopod of lower extremity bone organ - - - - - - - - hindlimb stylopod muscle - - Any muscle organ that is part of a hindlimb stylopod (upper leg)[Automatically generated definition]. - muscle of thigh - thigh muscle - upper leg muscle - - - - - - - - skin muscle - - Any muscle organ that is part of a skin of body [Automatically generated definition]. - integumental system muscle - muscle of integumental system - muscle organ of skin - skin muscle organ - - - - - - - - forelimb zeugopod muscle - - Any muscle organ that is part of a forelimb zeugopod (lower arm)[Automatically generated definition]. - forearm muscle - lower arm muscle - muscle of forearm - wing zeugopod muscle - - - - - - - - forelimb stylopod muscle - - Any muscle organ that is part of a forelimb stylopod (upper arm)[Automatically generated definition]. - muscle of arm - muscle of upper arm - skeletal muscle of upper arm - upper arm muscle - wing stylopod muscle - - - - - - - - hindlimb zeugopod muscle - - Any muscle organ that is part of a hindlimb zeugopod (lower leg) [Automatically generated definition]. - calf muscle - lower leg muscle - muscle of leg - - - - - - - - upper leg blood vessel - - A blood vessel that is part of a hindlimb stylopod [Automatically generated definition]. - blood vessel of stylopod of hind limb - blood vessel of stylopod of hindlimb - blood vessel of thigh - blood vessel of upper leg - hind limb stylopod blood vessel - hindlimb stylopod blood vessel - thigh blood vessel - - - - - - - - back blood vessel - - A blood vessel that is part of a back [Automatically generated definition]. - blood vessel of back - - - - - - - - lower arm blood vessel - - A blood vessel that is part of a lower arm [Automatically generated definition]. - forelimb zeugopod blood vessel - - - - - - - - upper arm blood vessel - - A blood vessel that is part of a forelimb stylopod [Automatically generated definition]. - forelimb stylopod blood vessel - - - - - - - - lower leg blood vessel - - A blood vessel that is part of a lower leg [Automatically generated definition]. - hindlimb zeugopod blood vessel - - - - - - - - upper leg skin - - A zone of skin that is part of a hindlimb stylopod [Automatically generated definition]. - hind limb stylopod skin - hindlimb stylopod skin - skin of thigh - skin of upper leg - thigh skin - - - - - - - - upper arm skin - - A zone of skin that is part of a forelimb stylopod [Automatically generated definition]. - arm stylopod skin - skin of arm stylopod - skin of upper arm - - - - - - - - lower leg skin - - A zone of skin that is part of a lower leg [Automatically generated definition]. - hind limb middle limb segment skin - hind limb zeugopod skin - - - - - - - - outflow tract myocardium - - A myocardium that is part of a outflow tract [Automatically generated definition]. - cardiac muscle of outflow tract - heart muscle of outflow tract - heart myocardium of outflow tract - muscle of heart of outflow tract - myocardium of outflow tract - outflow tract cardiac muscle - outflow tract heart muscle - outflow tract heart myocardium - outflow tract muscle of heart - - - - - - - - upper leg connective tissue - - A portion of connective tissue that is part of a hindlimb stylopod [Automatically generated definition]. - - - - - - - - back connective tissue - - A portion of connective tissue that is part of a back [Automatically generated definition]. - mesenchyne of back - - - - - - - - lower arm connective tissue - - A portion of connective tissue that is part of a lower arm [Automatically generated definition]. - - - - - - - - upper arm connective tissue - - A portion of connective tissue that is part of a forelimb stylopod [Automatically generated definition]. - - - - - - - - lower leg connective tissue - - A portion of connective tissue that is part of a lower leg [Automatically generated definition]. - - - - - - - - outflow tract pericardium - - - A pericardium that is part of a outflow tract [Automatically generated definition]. - pericardium of outflow tract - - - - - - - - cartilaginous joint suture - - A cranial suture that is part of a cartilaginous joint [Automatically generated definition]. - articulatio cartilaginea cranial suture - articulatio cartilaginea cranial sutures - articulatio cartilaginea cranial sutures set - articulatio cartilaginea cranium suture - articulatio cartilaginea suture of cranium - cartilaginous joint cranial suture - cartilaginous joint cranial sutures - cartilaginous joint cranial sutures set - cartilaginous joint cranium suture - cartilaginous joint suture of cranium - cranial suture of articulatio cartilaginea - cranial suture of cartilaginous joint - cranial sutures of articulatio cartilaginea - cranial sutures of cartilaginous joint - cranial sutures set of articulatio cartilaginea - cranial sutures set of cartilaginous joint - cranium suture of articulatio cartilaginea - cranium suture of cartilaginous joint - suture of cranium of articulatio cartilaginea - suture of cranium of cartilaginous joint - - - - - - - - lateral ventricle choroid plexus epithelium - - A choroid plexus epithelium that is part of a lateral ventricle [Automatically generated definition]. - chorioid plexus of cerebral hemisphere epithelial tissue of lateral ventricle - chorioid plexus of cerebral hemisphere epithelium of lateral ventricle - choroid plexus epithelial tissue of lateral ventricle - choroid plexus epithelium of lateral ventricle - epithelial tissue of chorioid plexus of cerebral hemisphere of lateral ventricle - epithelial tissue of choroid plexus of lateral ventricle - epithelium of chorioid plexus of cerebral hemisphere of lateral ventricle - epithelium of choroid plexus of lateral ventricle - lateral ventricle chorioid plexus of cerebral hemisphere epithelial tissue - lateral ventricle chorioid plexus of cerebral hemisphere epithelium - lateral ventricle choroid plexus epithelial tissue - lateral ventricle epithelial tissue of chorioid plexus of cerebral hemisphere - lateral ventricle epithelial tissue of choroid plexus - lateral ventricle epithelium of chorioid plexus of cerebral hemisphere - lateral ventricle epithelium of choroid plexus - - - - - - - - fourth ventricle choroid plexus epithelium - - A choroid plexus epithelium that is part of a fourth ventricle [Automatically generated definition]. - chorioid plexus of cerebral hemisphere epithelial tissue of fourth ventricle - chorioid plexus of cerebral hemisphere epithelium of fourth ventricle - choroid plexus epithelial tissue of fourth ventricle - choroid plexus epithelium of fourth ventricle - epithelial tissue of chorioid plexus of cerebral hemisphere of fourth ventricle - epithelial tissue of choroid plexus of fourth ventricle - epithelium of chorioid plexus of cerebral hemisphere of fourth ventricle - epithelium of choroid plexus of fourth ventricle - fourth ventricle chorioid plexus of cerebral hemisphere epithelial tissue - fourth ventricle chorioid plexus of cerebral hemisphere epithelium - fourth ventricle choroid plexus epithelial tissue - fourth ventricle epithelial tissue of chorioid plexus of cerebral hemisphere - fourth ventricle epithelial tissue of choroid plexus - fourth ventricle epithelium of chorioid plexus of cerebral hemisphere - fourth ventricle epithelium of choroid plexus - - - - - - - - eye muscle - - - A muscle that is part of the eye region. - - - - - - - - skeleton - - - Anatomical cluster that consists of all the skeletal elements (eg., bone, cartilage, and teeth) of the body. - set of all bones - set of bones of body - - - - - - - - dermomyotome - - - The bilaminar epithelium formed from the myotome and dermatome. - dermamyotome - dermomyotomes - - - - - - - - heart rudiment - - A cone-like structure that is formed when myocardial progenitor cells of the heart field fuse at the midline. The heart rudiment is the first structure of the heart tube. - heart cone - rudimentary heart - - - - - - - - glomerular capillary endothelium - - - An endothelium that is part of a glomerular capillary. - renal glomerulus capillary endothelium - - - - - - - - sympathetic nerve trunk - - A nerve trunk that is part of a sympathetic nervous system [Automatically generated definition]. - nerve trunk of sympathetic nervous system - nerve trunk of sympathetic part of autonomic division of nervous system - sympathetic nervous system nerve trunk - - - - - - - - respiratory system lymphatic vessel smooth muscle - - - A lymphatic vessel smooth muscle that is part of a respiratory system [Automatically generated definition]. - smooth muscle of lymph vessel of respiratory system - - - - - - - - respiratory system blood vessel smooth muscle - - - A blood vessel smooth muscle that is part of a respiratory system [Automatically generated definition]. - smooth muscle tissue of blood vessel of respiratory system - - - - - - - - allantois - - - A membranous sac that develops from the posterior part of the alimentary canal in the embryos of mammals, birds, and reptiles, and it is important in the formation of the umbilical cord and placenta in mammals[VHOG]. - allantoic bud - - - - - - - - trophectoderm - - - outermost layer of cells in the blastodermic vesicle, which will develop into the trophoblast layer and then contact the endometrium and take part in establishing the embryo's means of nutrition - - - - - - - - limb bud - - An outgrowth on the lateral trunk of the embryo that develops into a limb. The limb bud is divided into ectoderm and mesenchyme[cjm, modified from MP]. - gemmae membrorum - limb buds - limbbud - - - - - - - - optic eminence - - The embryonic structure that gives rise to the corneal ectoderm - - - - - - - - apical ectodermal ridge - - AER - apical epidermal ridge - crista ectodermalis apicalis - multilayered ectodermal region at the distal tip of a limb or fin bud necessary for the proper development of the underlying mesenchyme[MP,modified]. Along with the zone of polarizing activity, it is a crucial organizing region during limb development[WP]. - - - - - - - - paired limb/fin bud - - - An outgrowth on the lateral trunk of the embryo that develops into a limb or paired fin. The limb/fin bud is divided into ectoderm and mesenchyme[cjm, modified from MP]. - limb - fin bud - paired appendage bud - paired limb/fin bud - - - - - - - - pharyngeal arch 1 - - 1st arch - 1st pharyngeal arch - 1st visceral arch - The first of the series of pharyngeal arches that develop into jaw bones or their homologs, and their associated nerves and arteries - arcus pharyngeus primus - branchial arch 1 - first branchial arch - first pharyngeal arch - first visceral arch - mandibular arch - visceral arch 1 - - - - - - - - pharyngeal arch artery - - - - One of a series of paired embryological vascular structures formed within a pharyngeal arch; in the adult, some of these vessels give rise to the great vessels[MP] - PAA - a. arcuum pharyngeorum - aortic arch - aortic arch artery - aortic arches - arteriae arcuum pharyngeorum - branchial aortic arches - branchial aortic arches - branchial arch artery - embryonic aortic arch artery - pharyngeal arch arteries - pharyngeal arch artery - pharyngeal arch artery - - - - - - - - anterior limiting lamina of cornea - - - A transparent homogeneous acellular layer, 6 to 9 um thick, lying between the basal lamina of the outer layer of stratified epithelium and the substantia propria of the cornea; it is considered to be a basement membrane. - Bowman's anterior elastic lamina - Bowman's layer - Bowman's membrane - Reichert's membrane - anterior elastic lamina - anterior limiting lamina - anterior limiting lamina of cornea - anterior limiting membrane - lamina limitans anterior (cornea) - lamina limitans anterior corneae - - - - - - - - bone of free limb or fin - - - A bone that is part of an appendage [Automatically generated definition]. - appendage bone - bone of appendage - bone of free segment of appendicular skeleton - - - - - - - - proximal metaphysis - - A metaphysis that is in the proximal side of a diaphysis. - proximal diaphyseal end of long bone - - - - - - - - skeleton of limb - - - The collection of all skeletal elements in an individual limb. - free limb skeleton - limb skeleton - set of bones of limb - - - - - - - - entire sense organ system - - Sum of all sensory systems in an organism. - sense organ system - - - - - - - - obsolete cavity lining - true - - - - - - - - obsolete body cavity or lining - Either a cavity lining or the space it encloses. - true - - - - - - - - musculature of head - - Any collection of muscles that is part of a head [Automatically generated definition]. - head musculature - muscle group of head - muscles of head - musculi capitis - set of muscles of head - - - - - - - - musculature of hindlimb stylopod - - Any collection of muscles that is part of a hindlimb stylopod (upper leg / thigh)[Automatically generated definition]. - muscle group of thigh - musculature of thigh - set of muscles of thigh - thigh musculature - - - - - - - - musculature of thorax - - Any collection of muscles that is part of a thorax [Automatically generated definition]. - muscle group of thorax - muscles of thorax - musculi thoracis - set of muscles of thorax - thoracic musculature - - - - - - - - musculature of neck - - Any collection of muscles that is part of a neck [Automatically generated definition]. - cervical muscles - muscle group of neck - muscles of neck - musculi cervicis - musculi colli - neck musculature - set of muscles of neck - - - - - - - - musculature of leg - - Any collection of muscles that is part of a lower leg or upper leg [Automatically generated definition]. - leg muscle system - - - - - - - - set of muscles of vertebral column - - muscle group of vertebral column - - - - - - - - musculature of back - - Any collection of muscles that is part of a back [Automatically generated definition]. - muscle group of back - muscles of back - musculi dorsi - set of muscles of back - - - - - - - - musculature of pelvic girdle - - - Any collection of muscles that is part of a pelvic girdle [Automatically generated definition]. - muscle group of pelvic girdle - muscle group of pelvis - muscular system of pelvis - pelvic girdle muscle system - pelvic girdle muscles - pelvic girdle musculature - set of muscles of pelvic girdle - set of muscles of pelvis - - - - - - - - musculature of pectoral girdle - - A subdivision of the musculature of the body in the pectoral girdle region. Includes pectoral and shoulder muscles. - muscle group of pectoral girdle - pectoral girdle muscles - pectoral girdle musculature - set of muscles of pectoral girdle - - - - - - - - obsolete musculature of thorax - chest musculature - musculature of chest - set of muscles of chest - true - - - - - - - - musculature of face - - Any collection of muscles that is part of a face. - entire facial musculature - facial muscles - muscle group of face - musculi faciei - set of facial muscles - set of muscles of face - - - - - - - - musculature of arm - - Any collection of muscles that is part of an arm [Automatically generated definition]. - arm muscle system - arm musculature - muscle group of arm - set of muscles of arm - - - - - - - - obsolete tongue musculature - muscle group of tongue - muscles of tongue - musculi linguae - set of muscles of tongue - true - - - - - - - - musculature of trunk - - Any collection of muscles that is part of a trunk [Automatically generated definition]. - muscle group of trunk - muscular system of trunk - set of muscles of trunk - - - - - - - - musculature of limb - - Any collection of muscles that is part of a limb [Automatically generated definition]. - limb muscle system - limb musculature - muscle group of limb - set of muscles of limb - - - - - - - - musculature of upper limb - - - Any collection of muscles that is part of a forelimb [Automatically generated definition]. - free upper limb musculature - muscle group of free upper limb - musculature of free upper limb - set of muscles of free upper limb - - - - - - - - musculature of lower limb - - - Any collection of muscles that is part of a hindlimb [Automatically generated definition]. - free lower limb musculature - muscle group of free lower limb - musculature of free lower limb - set of muscles of free lower limb - - - - - - - - musculature of forelimb zeugopod - - Any collection of muscles that is part of a lower arm [Automatically generated definition]. - muscle group of forearm - musculature of forearm - set of muscles of forearm - - - - - - - - musculature of pes - - Any collection of muscles that is part of a foot [Automatically generated definition]. - foot musculature - muscle group of foot - musculature of foot - set of muscles of foot - - - - - - - - musculature of manus - - Any collection of muscles that is part of a manus [Automatically generated definition]. - hand musculature - muscle group of hand - musculature of hand - set of muscles of hand - - - - - - - - cardiac muscle tissue of atrium - - A portion of cardiac muscle tissue that is part of an atrium [Automatically generated definition]. - atrial cardiac muscle tissue - atrial heart muscle - atrial myocardium - cardiac atrium muscle - - - - - - - - cardiac muscle tissue of interatrial septum - - A portion of cardiac muscle tissue that is part of a interatrial septum [Automatically generated definition]. - interatrial septum cardiac muscle tissue - interatrial septum heart muscle - interatrial septum muscle - interatrial septum myocardium - - - - - - - - cardiac muscle tissue of cardiac septum - - A portion of cardiac muscle tissue that is part of a cardiac septum [Automatically generated definition]. - cardiac septum cardiac muscle tissue - cardiac septum heart muscle - cardiac septum muscle - cardiac septum myocardium - - - - - - - - cardiac muscle tissue of myocardium - - A portion of cardiac muscle tissue that is part of a myocardium [Automatically generated definition]. - - - - - - - - smooth muscle tissue of bronchiole - - A portion of smooth muscle tissue that is part of a bronchiole [Automatically generated definition]. - smooth muscle tissue of lobular bronchiole - - - - - - - - smooth muscle tissue of terminal bronchiole - - A portion of smooth muscle tissue that is part of a terminal bronchiole [Automatically generated definition]. - - - - - - - - smooth muscle tissue of respiratory bronchiole - - A portion of smooth muscle tissue that is part of a respiratory bronchiole [Automatically generated definition]. - - - - - - - - striated muscle tissue of prostate - - - A portion of striated muscle tissue that is part of a prostate gland [Automatically generated definition]. - - - - - - - - vasculature of muscle organ - - - A vasculature that is part of a muscle organ [Automatically generated definition]. - muscular organ vasculature - - - - - - - - vasculature of musculoskeletal system - - A vasculature that is part of a musculoskeletal system [Automatically generated definition]. - - - - - - - - anatomical projection - - A projection or outgrowth of tissue from a larger body or organ. - anatomical process - anatomical protrusion - flange - flanges - lamella - lamellae - lamina - laminae - organ process - papilla - process - process of organ - processes - processus - projection - projection - projections - protrusion - ridge - ridges - shelf - shelves - spine - - - - - - - - cardiovascular system - - Anatomical system that has as its parts the heart and blood vessels. - CV system - Herz und Gefaesssystem - - - - - - - - lymph vasculature - - A network of blunt ended vessels lacking direct connection to the blood vascular system. These vessels collect and drain fluids and macromolecules from interstitial spaces throughout the animal. They derive from a subpopulation of endothelial cells and have walls that are much thinner than the blood carrying vessels. Lymphatic vessels are usually classified as either superficial or deep. - lymph vessels - lymphatic trunks and ducts - lymphatic vasculature - lymphatic vessel network - lymphatic vessels set - set of lymphatic vessels - trunci et ductus lymphatici - - - - - - - - blood vasculature - - A vascular network consisting of blood vessels. - blood system - blood vascular network - blood vessel system - blood vessels - set of blood vessels - - - - - - - - epididymis epithelium - - - - - epididymis epithelium - epithelium of epididymis - the layer of secretory cells which lines the epididymis - - - - - - - - gastroesophageal sphincter - - LES - cardiac sphincter - cardiac sphincter - constrictor cardiae - esophageal sphincter - esophageal sphincter%2c lower - esophageal-cardiac junction - esophagogastric junction - gastro-esophageal junction - gastro-esophageal sphincter - gastro-oesophageal junction - gastroesophageal junction - gastroesophageal sphincter - gastroesophageal sphincter - gastroesophageal sphincter muscle - inferior esophageal sphincter - lower esophageal sphincter - the thick circular layer of smooth gastric musculature encircling the gastroesophageal junction that functions to reduce backflow into the esophagus from the stomach - - - - - - - - digital artery - - - An artery that is part of a digit [Automatically generated definition]. - - - - - - - - forelimb digital artery - - - A digital artery that is part of a forelimb [Automatically generated definition]. - digital artery of manus - forelimb digital arteries - wing digital artery - - - - - - - - hindlimb digital artery - - - A digital artery that is part of a hindlimb [Automatically generated definition]. - digital artery of foot - hindlimb digital arteries - - - - - - - - systemic arterial system - - The part of the arterial system which carries oxygenated blood away from the heart to the body, and returns deoxygenated blood back to the heart. - systemic arterial circulatory system - - - - - - - - arterial system - - The part of the cardiovascular system consisting of all arteries. - - - - - - - - systemic artery - - An artery of the systemic circulation, which is the part of the cardiovascular system which carries oxygenated blood away from the heart, to the body, and returns deoxygenated blood back to the heart. - systemic arterial subtree - - - - - - - - systemic venous system - - The part of the venous system that drains the general body tissues[Kardong] - systemic venous circulatory system - - - - - - - - venous system - - The part of the cardiovascular system consisting of all venous vessels. In vertebrates with a double circulation, this can be divided into systemic and pulmonary portions. - vein system - - - - - - - - sphincter muscle - - A structure, usually a circular muscle, that normally maintains constriction of a natural body passage or orifice and which relaxes as required by normal physiological functioning. - circular muscle - sphincter - - - - - - - - blood vessel endothelium - - An endothelium that lines the blood vasculature. Other endothelia may line lymph vessels, the heart - - - - - - - - renal afferent arteriole - - - afferent arteriole - afferent glomerular arteriole - afferent glomerular arteriole of kidney - arteriola glomerularis afferens - arteriola glomerularis afferens renis - kidney afferent arteriole - the blood vessels that branch from the kidney interlobular artery, convey blood to the glomerular capillaries, and play an important role in the regulation of blood pressure as a part of the tubuloglomerular feedback mechanism - - - - - - - - renal efferent arteriole - - - arteriola glomerularis efferens capsulae renalis - arteriola glomerularis efferens renis - efferent arteriole - efferent glomerular arteriole - efferent glomerular arteriole of kidney - kidney efferent arteriole - the blood vessels that convey blood from the glomerulocapillary network to the capillary bed of the proximal convoluted tubule - - - - - - - - spleen capsule - - - Malpighian capsule - capsula splenica - capsule of spleen - fibroelastic coat of spleen - fibrous capsule of spleen - splenic capsule - the connective tissue that surrounds the spleen - tunica fibrosa (splen)(lien) - tunica fibrosa splenica - - - - - - - - lateral ventricle ependyma - - - An ependyma that is part of a lateral ventricle [Automatically generated definition]. - ependyma of lateral ventricle - - - - - - - - fourth ventricle ependyma - - - 4th ventricle ependyma - An ependyma that is part of a fourth ventricle [Automatically generated definition]. - ependyma of fourth ventricle - - - - - - - - urinary bladder urothelium - - - - - The epithelial lining of the luminal space of the urinary bladder. - bladder transitional cell epithelium - epithelium of bladder - transitional epithelium - transitional epithelium of urinary bladder - urinary bladder transitional epithelium - urothelium - urothelium of urinary bladder - - - - - - - - liver lobule - - - hepatic lobule - lobules of liver - lobuli hepatici - lobuli hepatis - lobulus hepaticus - the polygonal structure of the liver that consists of hepatocytes radiating outward from a hepatic vein - - - - - - - - tongue keratinized epithelium - - - A keratinized stratified squamous epithelium that is part of a tongue. - keratinized epithelium of tongue - - - - - - - - aorta wall - - An anatomical wall that is part of an aorta, enclosing the luminal space. - aortic wall - wall of aorta - - - - - - - - aorta tunica adventitia - - the outermost layer of the aorta wall, containing connective tissue and collagen and elastic fibers - tunica adventitia of aorta - - - - - - - - muscular coat of seminal vesicle - - - - A muscular coat that is part of a seminal vesicle [Automatically generated definition]. - muscle layer of seminal vesicle - muscular coat of seminal gland - muscular layer of seminal gland - tunica muscularis (vesicula seminalis) - tunica muscularis glandulae vesiculosae - - - - - - - - interventricular septum membranous part - - - - The membranous portion of the wall between the two lower chambers of the heart - cardiac ventricular membranous septum - membranous interventricular septum - membranous interventricular septum - membranous part interventricular septum - membranous part of interventricular septum - membranous portion of interventricular septum - membranous septum - pars membranacea (septi interventricularis) - pars membranacea septi interventricularis - ventricle membranous septum - ventricular membranous septum - - - - - - - - interventricular septum muscular part - - The muscular portion of the wall between the two lower chambers of the heart - cardiac ventricular muscular septum - muscular interventricular septum - muscular interventricular septum - muscular part interventricular septum - muscular part of interventricular septum - muscular septum - pars muscularis (septi interventricularis) - pars muscularis septi interventricularis - septum membranaceum - ventricular muscular septum - - - - - - - - fourth ventricle aperture - - - - One of: the 4th ventricle median or lateral apertures. - aperture of 4th ventricle - aperture of fourth ventricle - - - - - - - - ependyma - - - The thin epithelium-like membrane composed of ependymal cells that lines the ventricular system of the brain and the spinal cord. - ependyma of neuraxis - ependymal epithelium - lamina epithelialis - - - - - - - - vestibular system - - The sensory system for the sense of balance. - equilibrioception system - vestibular organ system - vestibular system - vestibulomotor system - - - - - - - - raphe nuclei - - The raphe nuclei are thin plates of cells in and immediately adjacent to the sagittal plane. - nuclei raphes - nuclei raphes - raphe cluster - raphe nuclei - raphe nuclei set - raphe nucleus - raphe of mesenchephalon - set of raphe nuclei - - - - - - - - external naris epithelium - - - An epithelium that is part of an external naris [Automatically generated definition]. - - - - - - - - Peyer's patch epithelium - - peyer's patch epithelium - the specialized epithelium of the Peyer's patch - - - - - - - - arterial system smooth muscle - - A portion of smooth muscle tissue that is part of an arterial system [Automatically generated definition]. - - - - - - - - venous system smooth muscle - - A portion of smooth muscle tissue that is part of a venous system [Automatically generated definition]. - - - - - - - - Peyer's patch germinal center - - Area of the Peyer's patch where B cells proliferate and differentiate into plasma cells - - - - - - - - outflow tract endothelium - - An endothelium that is part of a outflow tract [Automatically generated definition]. - - - - - - - - arterial system endothelium - - An endothelium that is part of an arterial system [Automatically generated definition]. - - - - - - - - venous system endothelium - - An endothelium that is part of a venous system [Automatically generated definition]. - - - - - - - - respiratory system blood vessel endothelium - - - A blood vessel endothelium that is part of a respiratory system [Automatically generated definition]. - - - - - - - - bulbus cordis - - a transient fetal dilation of the distal (or cranial) heart tube located where the arterial trunk joins the ventral roots of the aortic arches - primitive right ventricle endocardium - - - - - - - - paired limb/fin - - An appendage that is part of an appendage girdle complex. - girdle-associated appendage - jointed paired lateral appendage - limb or fin - limb/fin - paired appendage - pectoral or pelvic appendage - pelvic/pectoral appendage - - - - - - - - pelvic appendage - - - Paired appendage that consists of the posterior appendicular skeleton and associated soft and hard tissues, but excludes the pelvic girdle and its associated soft and hard tissues. - hindlimb/pelvic fin - pelvic appendage - pelvic limb/fin - posterior appendage - posterior limb/fin - posterior paired appendage - - - - - - - - pectoral appendage - - Paired appendage that consists of the anterior appendicular skeleton and associated soft and hard tissues, but excludes the pectoral girdle and its associated soft and hard tissues. - anterior appendage - anterior limb/fin - anterior paired appendage - forelimb - pectoral fin - forelimb or pectoral fin - forelimb/pectoral fin - pectoral limb/fin - - - - - - - - annulus fibrosus disci intervertebralis - - - The ring of fibrocartilage and fibrous tissue forming the circumference of the intervertebral disc; surrounds the nucleus pulposus, which is prone to herniation when the annulus fibrosus is compromised. - annulus fibrosus - annulus fibrosus of intervertebral disc - anulus fibrosus (diskus intervertebralis) - anulus fibrosus of intervertebral disk - fibrous ring of intervertebral disc - - - - - - - - conceptus - - The embryo and its adnexa (appendages or adjunct parts) or associated membranes (i.e. the products of conception) The conceptus includes all structures that develop from the zygote, both embryonic and extraembryonic. It includes the embryo as well as the embryonic part of the placenta and its associated membranes - amnion, chorion (gestational sac), and yolk sac[WP]. - embryo plus adnexa - - - - - - - - kidney arcuate vein - - - Any of the veins that parallel the arcuate arteries, receive blood from the interlobular veins and straight venules, and terminate in the interlobar veins. - arciform vein of kidney - arcuate vein - arcuate vein of kidney - arcuate veins - renal arcuate vein - venae arcuatae renis - - - - - - - - crista ampullaris - - - - The crista ampullaris is the sensory organ of rotation located in the semicircular canal of the inner ear. The function of the crista ampullaris is to sense angular acceleration and deceleration. - ampullary crest - ampullary crest of semicircular duct - cristae ampullares - - - - - - - - interlobular artery - - The branches of the arcuate arteries of the kidney that radiate outward throught the renal columns and supply the glomeruli[MP]. The first set of renal bloodvessels, the interlobular arteries (or cortical radiate arteries, or cortical radial arteries), are given off at right angles from the side of the arcuate arteries looking toward the cortical substance, and pass directly outward between the medullary rays to reach the fibrous tunic, where they end in the capillary network of this part. These vessels do not anastomose with each other, but form what are called end-arteries. In their outward course they give off lateral branches; these are the afferent vessels for the renal corpuscles; they enter the capsule, and end in the glomerulus. From each tuft the corresponding efferent vessel arises, and, having made its egress from the capsule near to the point where the afferent vessel enters, breaks up into a number of branches, which form a dense plexus within Bowman's capsule. - arteriae corticales radiatae - arteriae interlobulares renis - cortical radial arteries - interlobular - interlobular renal artery - kidney interlobular artery - renal interlobular artery - - - - - - - - vasa recta - - In the blood supply of the kidney, the vasa recta renis (or straight arteries of kidney, or straight arterioles of kidney) form a series of straight capillaries in the medulla. They lie parallel to the loop of Henle. These vessels branch off the efferent arterioles of juxtamedullary nephrons (those nephrons closest to the medulla), enter the medulla, and surround the loop of Henle. - arteria recta - arteriae rectae - arteriolae rectae renis - arteriolae rectae renis - arteriolae recti - kidney vasa recta - renal medullary capillary - set of straight arterioles of kidney - straight arterioles of kidney - vasa recta of kidney - vasa recta renis - vasa rectae - - - - - - - - neuromere - - - A transverse unitary subdivision of the neural tube that shares a common dorsoventral structure (floor, basal, alar, and roof plates), but each having differential molecular identities and fates; they comprise the secondary prosencephalon, diencephalon (prosomeres), the midbrain (mesomeres), and the hindbrain (rhombomeres). - neural metamere - neural segment - neural tube metameric segment - neural tube segment - neuromere - neuromeres - - - - - - - - segmental subdivision of nervous system - - Any segmental subdivision of a nervous system. Includes metameric developmental segments, such as vertebrates neuromeres. - neuromere - - - - - - - - segmental subdivision of hindbrain - - - - An organ subunit that is part of a hindbrain [Automatically generated definition]. - hindbrain segment - segment of hindbrain - - - - - - - - gastrula - - Organism at the gastrula stage. - blastocystis trilaminaris - gastrula embryo - tri-laminar disc - tri-laminar disk - trilaminar blastocyst - trilaminar blastoderm - trilaminar disc - trilaminar disk - trilaminar germ - - - - - - - - metanephric glomerulus - - glomerulus of metanephros - glomerulus of the mature vertebrate kidney, or metanephros. - - - - - - - - metanephric collecting duct - - - A collecting duct of renal tubule that is part of a metanephros [Automatically generated definition]. - collecting duct of metanephros - metanephric collecting tubule - - - - - - - - metanephric juxtaglomerular apparatus - - juxtaglomerular apparatus of metanephros - juxtaglomerular apparatus of the mature vertebrate kidney, or metanephros. - - - - - - - - pronephric glomerulus - - The glomus forms from the splanchnic intermediate mesoderm and is the vascularized filtration unit, filtering the blood before it enters the tubules. The glomus is external to the nephron and extends over more than one body segment. - corpuscle - glomera - glomerulus of pronephros - glomus - pronephric glomera - pronephric glomeruli - pronephric glomus - - - - - - - - skeletal tissue - - A specialized form of connective tissue in which the extracellular matrix is firm, providing the tissue with resilience, and/or mineralized and that functions in mechanical and structural support.[VSAO] - - - - - - - - dermal skeletal element - - - - dermal element - dermis-derived entity that is made of skeletal tissue. - - - - - - - - gland of anal canal - - - A gland that is part of an anal canal [Automatically generated definition]. - anal gland - anal sac - gland of anal canal - gland of anus - rectal gland - - - - - - - - cartilaginous neurocranium - - The primitive cartilagionous skeletal structure of the fetal skull that grows to envelop the rapidly growing embyonic brain. In humans, the chondrocranium begins forming at 28 days from mesenchymal condensations and is fully formed between week 7 and 9 of fetal development. While the majority of the chondrocranium is succeeded by the bony skull in most higher vertebrates, some components do persist into adulthood.[1] In Cartilagious fishes and Agnathans, the chondrocranium persist throughout life.[2] Embryologically, the chondrocranium represent the basal cranial structure, and lay the base for the formation of the endocranium in higher vertebrates[WP]. - cartilaginous chondocranium - cartilaginous skull - cartiligionous skeletal structure of skull - chondocranium - embryonic chondocranium - neurocranium - - - - - - - - skeletal element - - Organ consisting of skeletal tissue. Encompasses whole bones, fused bones, cartilaginious elements, teeth, dermal denticles. - - - - - - - - cranial bone - - A bone that is part of a cranium. - cranium bone - - - - - - - - bone of lower jaw - - Any bone that is part of the lower jaw skeleton. This includes (when present): the dentary/mandible, the articular, the splenial, the suprangular - lower jaw bone - - - - - - - - diaphysis - - Subdivision of long bone which forms the part of the bone between the two epiphyses, excluding the metaphyses[FMA,modified]. - body of long bone - long bone diaphysis - shaft of long bone - - - - - - - - articular system - - Anatomical system that consists of all the joints of the body. - joint system - set of all joints - set of all joints of body - set of joints of body - - - - - - - - posterior nasal aperture - - Opening/conduit between the nasal cavity and the nasopharynx[AAO] The choanae are separated by the vomer[WP]. - choana - choanae - internal naris - nasopharyngeal naris - posterior choana - posterior naris - posterior nasal apperture - - - - - - - - outer renal medulla vasa recta - - - - A vasa recta that is part of a outer medulla of kidney [Automatically generated definition]. - kidney outer medulla vasa recta - kidney outer renal medulla vasa recta - outer medulla of kidney vasa recta - outer zone of medulla of kidney vasa recta - outer zone of renal medulla vasa recta - vasa recta of outer medulla of kidney - vasa recta of outer renal medulla - vasa recta of outer zone of medulla of kidney - vasa recta of outer zone of renal medulla - - - - - - - - inner renal medulla vasa recta - - - - A vasa recta that is part of a inner medulla of kidney [Automatically generated definition]. - inner medulla of kidney vasa recta - inner zone of medulla of kidney vasa recta - inner zone of renal medulla vasa recta - set of inner region of renal pyramids vasa recta - vasa recta of inner medulla of kidney - vasa recta of inner renal medulla - vasa recta of inner zone of medulla of kidney - vasa recta of inner zone of renal medulla - vasa recta of set of inner region of renal pyramids - - - - - - - - respiratory system submucosa - - A submucosa that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius submucosa - submucosa of apparatus respiratorius - submucosa of respiratory system - - - - - - - - respiratory system lamina propria - - A lamina propria that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius lamina propria - apparatus respiratorius lamina propria mucosa - lamina propria mucosa of apparatus respiratorius - lamina propria mucosa of respiratory system - lamina propria of apparatus respiratorius - lamina propria of respiratory system - respiratory system lamina propria mucosa - - - - - - - - gastrointestinal system lamina propria - - A lamina propria that is part of a gastrointestinal system. - - - - - - - - gall bladder lamina propria - - - A lamina propria that is part of a gallbladder [Automatically generated definition]. - biliary lamina propria - gall bladder lamina propria mucosa - gallbladder lamina propria - gallbladder lamina propria mucosa - lamina propria mucosa of gall bladder - lamina propria mucosa of gallbladder - lamina propria of gall bladder - lamina propria of gallbladder - - - - - - - - gastrointestinal system serosa - - A serous membrane that is part of a digestive system [Automatically generated definition]. - digestive system serosa - digestive system serous membrane - gastrointestinal system serous membrane - serosa of digestive system - serosa of gastrointestinal system - serous membrane of digestive system - serous membrane of gastrointestinal system - - - - - - - - gall bladder serosa - - - A serous membrane that is part of a gallbladder [Automatically generated definition]. - biliary serosa - gall bladder serous membrane - gallbladder serosa - gallbladder serous membrane - serosa of gall bladder - serosa of gallbladder - serous coat of gallbladder - serous membrane of gall bladder - serous membrane of gallbladder - tunica serosa (vesica biliaris) - tunica serosa vesicae biliaris - - - - - - - - heart ventricle wall - - - An anatomical wall that is part of a cardiac ventricle [Automatically generated definition]. - anatomical wall of cardiac ventricle - anatomical wall of heart ventricle - anatomical wall of lower chamber of heart - anatomical wall of ventricle of heart - cardiac ventricle anatomical wall - cardiac ventricle wall - heart ventricle anatomical wall - lower chamber of heart anatomical wall - lower chamber of heart wall - ventricle of heart anatomical wall - ventricle of heart wall - ventricular wall - wall of cardiac ventricle - wall of heart ventricle - wall of lower chamber of heart - wall of ventricle - wall of ventricle of heart - - - - - - - - respiratory system mucosa - - apparatus respiratorius mucosa - apparatus respiratorius mucosa of organ - apparatus respiratorius mucous membrane - laryngeal mucous membrane - mucosa of apparatus respiratorius - mucosa of organ of apparatus respiratorius - mucosa of organ of respiratory system - mucosa of respiratory system - mucous membrane of apparatus respiratorius - mucous membrane of respiratory system - respiratory mucosa - respiratory system mucosa of organ - respiratory system mucous membrane - respiratory tract mucosa - the mucous membrane lining the respiratory tract - - - - - - - - gastrointestinal system mucosa - - A mucosa that is part of a gastrointestinal system. - digestive tract mucosa - gut mucosa - gut mucuous membrane - mucosa of gut - - - - - - - - urethra urothelium - - - An urothelium that is part of a urethra [Automatically generated definition]. - urethra uroepithelium - uroepithelium of urethra - urothelium of urethra - - - - - - - - kidney pelvis urothelium - - - kidney pelvis transitional epithelium - kidney pelvis uroepithelium - pelvic urothelium - pelvis of ureter uroepithelium - pelvis of ureter urothelium - renal pelvis transitional epithelium - renal pelvis uroepithelium - renal pelvis urothelium - the epithelial lining of the luminal space of the kidney pelvis - transitional epithelium of kidney pelvis - transitional epithelium of renal pelvis - uroepithelium of kidney pelvis - uroepithelium of pelvis of ureter - uroepithelium of renal pelvis - urothelium of kidney pelvis - urothelium of pelvis of ureter - urothelium of renal pelvis - - - - - - - - skin mucous gland - - - - A mucous gland that is part of the skin. - mucous gland of entire skin - mucous gland of skin of body - skin mucus gland - skin of body mucous gland - - - - - - - - secretion of endocrine pancreas - - A secretion that is part of a endocrine pancreas [Automatically generated definition]. - endocrine pancreas secretion - pancreatic endocrine secretion - pars endocrina pancreatis secretion - secretion of pars endocrina pancreatis - - - - - - - - secretion of exocrine pancreas - - A secretion that is part of a exocrine pancreas [Automatically generated definition]. - exocrine pancreas secretion - pancreatic exocrine secretion - pars exocrina pancreatis secretion - secretion of pars exocrina pancreatis - - - - - - - - esophagus secretion - - A secretion that is part of a esophagus [Automatically generated definition]. - esophageal secretion - gullet secretion - oesophagus secretion - secretion of esophagus - secretion of gullet - secretion of oesophagus - - - - - - - - pancreas secretion - - A secretion that is part of a pancreas [Automatically generated definition]. - pancreatic secretion - secretion of pancreas - - - - - - - - blood vessel layer - - - Any of the tissue layers that comprise a blood vessel. Examples: tunica media, tunica adventitia. - - - - - - - - cervix epithelium - - An epithelium that is part of a uterine cervix [Automatically generated definition]. - cervical canal epithelial tissue - cervical canal epithelium - cervical epithelium - cervix epithelial tissue - epithelium of cervix - - - - - - - - respiratory tract epithelium - - - - airway epithelium - epithelial tissue of respiratory tract - epithelium of respiratory tract - respiratory epithelium - respiratory tract epithelial tissue - the pseudostratified ciliated epithelium that lines much of the conducting portion of the airway, including part of the nasal cavity and larynx, the trachea, and bronchi - - - - - - - - penis epithelium - - - An epithelium that is part of a penis [Automatically generated definition]. - epithelial tissue of penis - epithelium of penis - penis epithelial tissue - - - - - - - - oviduct epithelium - - - An epithelium that is part of a oviduct [Automatically generated definition]. - columnar epithelium of the fallopian tube - columnar epithelium of the oviduct - epithelial tissue of oviduct - epithelium of fallopian tube - epithelium of oviduct - epithelium of uterine tube - fallopian tube epithelium - oviduct epithelial tissue - - - - - - - - seminal vesicle epithelium - - - - An epithelium that is part of a seminal vesicle [Automatically generated definition]. - epithelial tissue of seminal gland - epithelial tissue of seminal vesicle - epithelium of seminal gland - epithelium of seminal vesicle - seminal gland epithelial tissue - seminal gland epithelium - seminal vesicle epithelial tissue - - - - - - - - respiratory system epithelium - - An epithelium that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius epithelial tissue - apparatus respiratorius epithelium - epithelial tissue of apparatus respiratorius - epithelial tissue of respiratory system - epithelium of apparatus respiratorius - epithelium of respiratory system - respiratory system epithelial tissue - - - - - - - - gastrointestinal system epithelium - - An epithelium that is part of a digestive system [Automatically generated definition]. - digestive system epithelial tissue - digestive system epithelium - epithelial tissue of digestive system - epithelial tissue of gastrointestinal system - epithelium of digestive system - epithelium of gastrointestinal system - gastrointestinal system epithelial tissue - - - - - - - - salivary gland epithelium - - An epithelium that is part of a salivary gland [Automatically generated definition]. - epithelial tissue of salivary gland - epithelium of salivary gland - salivary gland epithelial tissue - - - - - - - - nephron tubule epithelium - - kidney tubule epithelium - the cellular avascular layer of the renal tubule luminar surfaces - - - - - - - - endometrium epithelium - - - An epithelium that is part of an endometrium [Automatically generated definition]. - endometrium epithelial tissue - epithelial tissue of endometrium - epithelium of endometrium - epithelium of tunica mucosa of endometrium - uterine epithelium - - - - - - - - male prepuce epithelium - - An epithelium that is part of a prepuce of penis [Automatically generated definition]. - epithelial tissue of foreskin - epithelial tissue of penile prepuce - epithelial tissue of prepuce - epithelial tissue of prepuce of penis - epithelium of foreskin - epithelium of penile prepuce - epithelium of prepuce - epithelium of prepuce of penis - foreskin epithelial tissue - foreskin epithelium - penile prepuce epithelial tissue - penile prepuce epithelium - prepuce epithelial tissue - prepuce epithelium - prepuce of penis epithelial tissue - prepuce of penis epithelium - - - - - - - - seminiferous tubule epithelium - - - - epithelial tissue of seminiferous tubule - epithelial tissue of seminiferous tubule of testis - epithelium of seminiferous tubule - epithelium of seminiferous tubule of testis - germinal epithelium (male) - male germinal epithelium - seminiferous epithelium - seminiferous tubule epithelial tissue - testis germinal epithelium - the stratified epithelial lining of the seminiferous tubules, consisting of the developing spermatozoa and the supporting Sertoli cells, which are tall, columnar type cells that line the tubule - wall of seminiferous tubule - - - - - - - - upper respiratory tract epithelium - - An epithelium that is part of a upper respiratory tract [Automatically generated definition]. - epithelial tissue of upper respiratory tract - epithelium of upper respiratory tract - upper respiratory tract epithelial tissue - - - - - - - - lower respiratory tract epithelium - - An epithelium that is part of a lower respiratory tract [Automatically generated definition]. - epithelial tissue of lower respiratory tract - epithelium of lower respiratory tract - lower respiratory tract epithelial tissue - - - - - - - - lacrimal gland epithelium - - An epithelium that is part of a lacrimal gland [Automatically generated definition]. - epithelial tissue of lacrimal gland - epithelium of lacrimal gland - lacrimal gland epithelial tissue - - - - - - - - kidney epithelium - - epithelial tissue of kidney - epithelium of kidney - kidney epithelial tissue - renal epithelium - the cellular avascular layer of the kidney luminar surfaces - - - - - - - - bile duct epithelium - - - - Any epithelium that lines one of the bile ducts. - biliary duct epithelium - epithelium of bile duct - epithelium of biliary duct - - - - - - - - pulmonary alveolus epithelium - - - The epithelial layer of the alveoli[MP]. The layer of cells covering the lining of the tiny air sacs at the end of the bronchioles[BTO]. - alveolar epithelium - alveolus epithelial tissue - alveolus epithelium - epithelial tissue of alveolus - epithelium of alveolus - epithelium of pulmonary alveolus - pulmonary alveolar epithelium - pulmonary alveolus epithelium - - - - - - - - extrahepatic bile duct epithelium - - An epithelium that is part of a extrahepatic bile duct [Automatically generated definition]. - epithelial tissue of extrahepatic bile duct - epithelium of extrahepatic bile duct - extrahepatic bile duct epithelial tissue - - - - - - - - intrahepatic bile duct epithelium - - An epithelium that is part of a intrahepatic bile duct [Automatically generated definition]. - epithelial tissue of intrahepatic bile duct - epithelium of intrahepatic bile duct - intrahepatic bile duct epithelial tissue - - - - - - - - thyroid gland medulla - - - A medulla that is part of a thyroid [Automatically generated definition]. - medulla of thyroid - medulla of thyroid follicle - medulla of thyroid gland - medulla of thyroid gland follicle - thyroid follicle medulla - thyroid gland follicle medulla - thyroid medulla - - - - - - - - urethra skeletal muscle tissue - - A portion of skeletal muscle tissue that is part of a urethra [Automatically generated definition]. - skeletal muscle of urethra - skeletal muscle tissue of urethra - urethra skeletal muscle - urethra skeletal muscle tissue - urethral skeletal muscle - - - - - - - - respiratory system skeletal muscle - - A portion of skeletal muscle tissue that is part of a respiratory system [Automatically generated definition]. - respiratory system skeletal muscle tissue - skeletal muscle of apparatus respiratorius - skeletal muscle of respiratory system - skeletal muscle tissue of apparatus respiratorius - skeletal muscle tissue of respiratory system - - - - - - - - esophagus skeletal muscle - - A portion of skeletal muscle tissue that is part of a esophagus [Automatically generated definition]. - esophagus skeletal muscle tissue - skeletal muscle of esophagus - - - - - - - - anal region skeletal muscle - - A portion of skeletal muscle tissue that is part of an anal region [Automatically generated definition]. - anal part of perineum skeletal muscle - anal part of perineum skeletal muscle tissue - anal region skeletal muscle tissue - anal triangle skeletal muscle - anal triangle skeletal muscle tissue - skeletal muscle of anal part of perineum - skeletal muscle of anal region - skeletal muscle of anal triangle - skeletal muscle tissue of anal part of perineum - skeletal muscle tissue of anal region - skeletal muscle tissue of anal triangle - - - - - - - - hepatic duct smooth muscle - - - Smooth muscle tissue in all or part of a hepatic duct. - - - - - - - - epididymis smooth muscle - - - A portion of smooth muscle tissue that is part of a epididymis [Automatically generated definition]. - epididymis involuntary muscle - epididymis non-striated muscle - epididymis smooth muscle tissue - involuntary muscle of epididymis - non-striated muscle of epididymis - smooth muscle of epididymis - smooth muscle tissue of epididymis - - - - - - - - respiratory system arterial endothelium - - - An endothelium of artery that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius arterial endothelium - apparatus respiratorius artery endothelium - apparatus respiratorius endothelium of artery - arterial endothelium of apparatus respiratorius - arterial endothelium of respiratory system - artery endothelium of apparatus respiratorius - artery endothelium of respiratory system - endothelium of artery of apparatus respiratorius - endothelium of artery of respiratory system - respiratory system artery endothelium - respiratory system endothelium of artery - - - - - - - - respiratory system venous endothelium - - - An endothelium of vein that is part of a respiratory system [Automatically generated definition]. - apparatus respiratorius endothelium of vein - apparatus respiratorius vein endothelium - apparatus respiratorius venous endothelium - endothelium of vein of apparatus respiratorius - endothelium of vein of respiratory system - respiratory system endothelium of vein - respiratory system vein endothelium - vein endothelium of apparatus respiratorius - vein endothelium of respiratory system - venous endothelium of apparatus respiratorius - venous endothelium of respiratory system - - - - - - - - lymph node endothelium - - An endothelium that is part of a lymph node [Automatically generated definition]. - endothelium of lymph node - - - - - - - - aorta endothelium - - - adult aorta endothelium - aortic endothelium - endothelium of adult aorta - endothelium of aorta - endothelium of trunk of aortic tree - endothelium of trunk of systemic arterial tree - the thin layer of flat cells that line the aorta and form a barrier between circulating blood in the lumen and the rest of the vessel wall - trunk of aortic tree endothelium - trunk of systemic arterial tree endothelium - - - - - - - - cardiovascular system endothelium - - An endothelium that is part of the cardiovascular system. - endothelia - vascular endothelia - - - - - - - - gastrointestinal system mesentery - - - A mesentery that is part of a digestive system [Automatically generated definition]. - digestive system mesentery - mesentery of digestive system - mesentery of gastrointestinal system - - - - - - - - eye gland - - A gland that is part of a eye. The eye is a compound unit which depending on the species may consist of an eyeballs plus associated ducts and integumentary structures. Eye glands therefore include the various types of lacrimal gland, the various types of apocrine and sebaceous glands associated with the eyelid. - eye-associated gland - gland of eye - - - - - - - - thoracic sympathetic nerve trunk - - A sympathetic nerve trunk that is part of a thorax [Automatically generated definition]. - nerve trunk of sympathetic nervous system of thorax - nerve trunk of sympathetic part of autonomic division of nervous system of thorax - sympathetic nerve trunk of thorax - sympathetic nervous system nerve trunk of thorax - thoracic part of sympathetic trunk - thoracic sympathetic chain - thoracic sympathetic trunk - thorax nerve trunk of sympathetic nervous system - thorax nerve trunk of sympathetic part of autonomic division of nervous system - thorax sympathetic nerve trunk - thorax sympathetic nervous system nerve trunk - - - - - - - - vasculature of retina - - A vasculature that is part of a retina [Automatically generated definition]. - retina vasculature - retina vasculature of camera-type eye - retinal blood vessels - retinal blood vessels set - retinal vasculature - set of blood vessels of retina - set of retinal blood vessels - vasa sanguinea retinae - - - - - - - - somatic layer of lateral plate mesoderm - - Layer of lateral plate mesoderm that forms the future body wall - underlies the ectoderm[WP]. - outer layer of lateral plate mesoderm - parietal mesoderm - somatic mesoderm - - - - - - - - splanchnic layer of lateral plate mesoderm - - Layer of lateral plate mesoderm that forms the circulatory system and future gut wall - overlies endoderm[WP]. - inner layer of lateral plate mesoderm - splanchnic mesoderm - visceral mesoderm - - - - - - - - splanchnopleure - - A structure created during embryogenesis when the lateral mesoderm splits into two layers - the inner (or splanchnic) layer adheres to the endoderm, and with it forms the splanchnopleure[WP]. - ventral splanchnic mesoderm - - - - - - - - somatopleure - - A structure created during embryogenesis when the lateral mesoderm splits into two layers - the outer (or somatic) layer becomes applied to the inner surface of the ectoderm, and with it forms the somatopleure.[WP]. - - - - - - - - nephrogenic cord - - A portion of the urogenital ridge which is the source of much of the urinary system[WP]. - chorda nephrogenica - - - - - - - - urogenital fold - - One of of the pair of folds derived from the cloacal folds which give rise to a portion of the external genitalia; in male embryos they close over the urethral plate and fuse to form the spongy (penile) urethra and ventral aspect of the penis, not including the glans; failure of fusion of the urethral folds leads to hypospadias; in female embryos they fuse only anterior to the anus and form the labia minora[MP]. - urethral fold - urogenital fold - urogenital ridge - - - - - - - - chordamesoderm - - The central region of trunk mesoderm. This tissue forms the notochord - axial chorda mesoderm - chorda mesoderm - dorsal mesoderm - presumptive notochord - - - - - - - - lung mesenchyme - - - The mass of tissue made up of mesenchymal cells in the lung. - lung-associated mesenchyme - mesenchyme of lung - pulmonary mesenchyme - - - - - - - - alveolar wall - - - A wall that contains the alveoli - alveolus wall - pulmonary alveolar wall - pulmonary interalveolar septum - wall of pulmonary alveolus - - - - - - - - alveolar smooth muscle - - Alveolar smooth muscle is a type of non-striated muscle, found within the walls of the alveolus - - - - - - - - urogenital sinus epithelium - - The fetal urogenital sinus (from which the prostate derives) is a simple cylinder of stratified basal epithelium, surrounded by mesenchyme and positioned between the embryonic bladder and pelvic urethra - UGE - epithelium of urogenital sinus - - - - - - - - articulation - - Anatomical cluster that connects two or more adjacent skeletal elements or hardened body parts. - joint - - - - - - - - ectodermal part of digestive tract - - - A portion of the gut that is derived from ectoderm. - ectodermal gut - gut ectoderm - - - - - - - - lower digestive tract - - The region of the digestive tract extending from the beginning of the intestines to the anus[GO - gut definition]. - gut - lower GI tract - lower gastrointestinal tract - - - - - - - - upper digestive tract - - The region of the digestive tract extending from the mouth cavity through pharynx esophagus stomach and duodenum. - upper GI tract - upper gastrointestinal tract - - - - - - - - epithelium of gonad - - - An epithelium surrounding a gonad. - gonad epithelium - gonadal epithelium - gonadal sheath - - - - - - - - epithelium of male gonad - - An epithelium surrounding a testis. - testis epithelium - testis sheath - - - - - - - - epithelium of female gonad - - An epithelium surrounding an ovary. - ovarian epithelium - ovarian sheath - ovary epithelium - - - - - - - - biliary bud - - - - - hepatic diverticulum - - - - - - - - anal sphincter - - A sphincter muscle that is part of a anal region. - anal region sphincter - sphincter analia - - - - - - - - urethral sphincter - - - A sphincter muscle surrounding the urethra. - sphincter muscle of urethra - sphincter of urethra - sphincter urethrae - urethral sphincter muscle - - - - - - - - subdivision of digestive tract - - A proximal-distal subdivision of the digestive tract. - alimentary system subdivision - intestinal tract - segment of intestinal tract - subdivision of alimentary system - - - - - - - - organ component layer - - A part of a wall of an organ that forms a layer. - - - - - - - - submucosa of pharynx - - - The tissue underlying the tunica mucosa of the pharynx. - pharyngeal submucosa - pharyngobasilar fascia - pharynx submucosa - submucous coat of pharynx - submucous layer of pharynx - tela submucosa pharyngea - tela submucosa pharyngis - - - - - - - - submucosa of cystic duct - - A submucosa that is part of a cystic duct [Automatically generated definition]. - cystic duct submucosa - cystic ductal submucosa - - - - - - - - submucosa of cecum - - A submucosa that is part of a cecum [Automatically generated definition]. - caecum submucosa - cecum submucosa - intestinum crassum caecum submucosa - submucosa of caecum - submucosa of intestinum crassum caecum - - - - - - - - submucosa of appendix - - A submucosa that is part of an appendix [Automatically generated definition]. - appendiceal submucosa - appendix submucosa - caecal appendix submucosa - submucosa of caecal appendix - submucosa of vermiform appendix - submucosa of vermix - vermiform appendix submucosa - vermix submucosa - - - - - - - - submucosa of ascending colon - - A submucosa that is part of an ascending colon [Automatically generated definition]. - ascending colon submucosa - - - - - - - - submucosa of transverse colon - - A submucosa that is part of a transverse colon [Automatically generated definition]. - transverse colon submucosa - - - - - - - - submucosa of descending colon - - A submucosa that is part of a descending colon [Automatically generated definition]. - descending colon submucosa - - - - - - - - submucosa of sigmoid colon - - A submucosa that is part of a sigmoid colon [Automatically generated definition]. - sigmoid colon submucosa - - - - - - - - submucosa of fundus of stomach - - A submucosa that is part of a fundus of stomach [Automatically generated definition]. - fundus gastricus (ventricularis) submucosa - fundus of stomach submucosa - stomach fundus submucosa - submucosa of fundus gastricus (ventricularis) - submucosa of stomach fundus - - - - - - - - submucosa of cardia of stomach - - A submucosa that is part of a cardia of stomach [Automatically generated definition]. - cardia of stomach submucosa - cardial part of stomach submucosa - gastric cardia submucosa - pars cardiaca (gaster) submucosa - stomach cardiac region submucosa - submucosa of cardial part of stomach - submucosa of gastric cardia - submucosa of pars cardiaca (gaster) - submucosa of stomach cardiac region - - - - - - - - submucosa of pyloric antrum - - A submucosa that is part of a pyloric antrum [Automatically generated definition]. - antrum of stomach submucosa - pyloric antrum submucosa - stomach pyloric antrum submucosa - submucosa of antrum of stomach - submucosa of stomach pyloric antrum - - - - - - - - submucosa of pylorus - - A submucosa that is part of a pylorus [Automatically generated definition]. - pyloric part of stomach submucosa - pyloric submucosa - pylorus submucosa - stomach pyloric region submucosa - submucosa of pyloric part of stomach - submucosa of stomach pyloric region - - - - - - - - submucosa of biliary tree - - - A submucosa that is part of a biliary tree [Automatically generated definition]. - biliary tract submucosa - biliary tree submucosa - submucosa of biliary tract - - - - - - - - submucosa of common bile duct - - A submucosa that is part of a common bile duct [Automatically generated definition]. - common bile duct submucosa - common bile ductal submucosa - ductus choledochus (biliaris) submucosa - submucosa of ductus choledochus (biliaris) - - - - - - - - submucosa of urinary bladder - - - The submucous layer of the wall of the urinary bladder. - bladder submucosa - submucosa of bladder - submucous layer of urinary bladder - tela submucosa (vesica urinaria) - tela submucosa vesicae - tela submucosa vesicae urinariae - urinary bladder submucosa - - - - - - - - submucosa of trigone of urinary bladder - - A submucosa that is part of a trigone of urinary bladder [Automatically generated definition]. - Lieutaud ' s trigone submucosa - deep trigone submucosa - submucosa of Lieutaud ' s trigone - submucosa of deep trigone - submucosa of trigone of bladder - submucosa of urinary bladder trigone - submucosa of vesical trigone - trigone of bladder submucosa - trigone of urinary bladder submucosa - urinary bladder trigone submucosa - vesical trigone submucosa - - - - - - - - submucosa of neck of urinary bladder - - A submucosa that is part of a neck of urinary bladder [Automatically generated definition]. - bladder neck submucosa - neck of bladder submucosa - neck of urinary bladder submucosa - submucosa of bladder neck - submucosa of neck of bladder - submucosa of urinary bladder neck - submucosa of vesical neck - urinary bladder neck submucosa - vesical neck submucosa - - - - - - - - submucosa of ileum - - A submucosa that is part of a ileum [Automatically generated definition]. - ileal submucosa - ileum submucosa - - - - - - - - submucosa of bronchiole - - A submucosa that is part of a bronchiole [Automatically generated definition]. - bronchiole submucosa - lobular bronchiole submucosa - submucosa of lobular bronchiole - - - - - - - - mucosa of ureter - - - A mucosa that is part of a ureter [Automatically generated definition]. - mucosa of organ of ureter - mucosal layer of ureter - mucous membrane of ureter - organ mucosa of ureter - tunica mucosa (ureter) - tunica mucosa ureteris - ureter mucosa - ureter mucosa of organ - ureter mucous membrane - ureter organ mucosa - ureteral mucosa - ureteric mucosa - - - - - - - - mucosa of vagina - - - A mucosa that is part of a vagina [Automatically generated definition]. - mucosa of organ of vagina - mucous membrane of vagina - organ mucosa of vagina - tunica mucosa vaginae - vagina mucosa - vagina mucosa of organ - vagina mucous membrane - vagina organ mucosa - vaginal mucosa - - - - - - - - mucosa of seminal vesicle - - - A mucosa that is part of a seminal vesicle [Automatically generated definition]. - mucosa of organ of seminal gland - mucosa of organ of seminal vesicle - mucosa of seminal gland - mucous membrane of seminal gland - mucous membrane of seminal vesicle - organ mucosa of seminal gland - organ mucosa of seminal vesicle - seminal gland mucosa - seminal gland mucosa of organ - seminal gland mucous membrane - seminal gland organ mucosa - seminal vesicle mucosa - seminal vesicle mucosa of organ - seminal vesicle mucous membrane - seminal vesicle organ mucosa - tunica mucosa glandulae vesiculosae - - - - - - - - mucosa of cystic duct - - A mucosa that is part of a cystic duct [Automatically generated definition]. - cystic duct mucosa - cystic duct mucosa of organ - cystic duct mucous membrane - cystic duct organ mucosa - cystic ductal mucosa - mucosa of organ of cystic duct - mucous membrane of cystic duct - organ mucosa of cystic duct - - - - - - - - mucosa of appendix - - A mucosa that is part of an appendix [Automatically generated definition]. - appendiceal mucous membrane - appendix mucosa - appendix mucosa of organ - appendix mucous membrane - appendix organ mucosa - caecal appendix mucosa - caecal appendix mucosa of organ - caecal appendix mucous membrane - caecal appendix organ mucosa - mucosa of caecal appendix - mucosa of organ of appendix - mucosa of organ of caecal appendix - mucosa of organ of vermiform appendix - mucosa of organ of vermix - mucosa of vermiform appendix - mucosa of vermix - mucous membrane of appendix - mucous membrane of caecal appendix - mucous membrane of vermiform appendix - mucous membrane of vermix - organ mucosa of appendix - organ mucosa of caecal appendix - organ mucosa of vermiform appendix - organ mucosa of vermix - vermiform appendix mucosa - vermiform appendix mucosa of organ - vermiform appendix mucous membrane - vermiform appendix organ mucosa - vermix mucosa - vermix mucosa of organ - vermix mucous membrane - vermix organ mucosa - - - - - - - - mucosa of ascending colon - - A mucosa that is part of an ascending colon [Automatically generated definition]. - ascending colon mucosa - ascending colon mucosa of organ - ascending colon mucous membrane - ascending colon organ mucosa - mucosa of organ of ascending colon - mucous membrane of ascending colon - organ mucosa of ascending colon - - - - - - - - mucosa of transverse colon - - A mucosa that is part of a transverse colon [Automatically generated definition]. - mucosa of organ of transverse colon - mucous membrane of transverse colon - organ mucosa of transverse colon - transverse colon mucosa - transverse colon mucosa of organ - transverse colon mucous membrane - transverse colon organ mucosa - - - - - - - - mucosa of descending colon - - A mucosa that is part of a descending colon [Automatically generated definition]. - descending colon mucosa - descending colon mucosa of organ - descending colon mucous membrane - descending colon organ mucosa - mucosa of organ of descending colon - mucous membrane of descending colon - organ mucosa of descending colon - - - - - - - - mucosa of sigmoid colon - - A mucosa that is part of a sigmoid colon [Automatically generated definition]. - mucosa of organ of sigmoid colon - mucous membrane of sigmoid colon - organ mucosa of sigmoid colon - sigmoid colon mucosa - sigmoid colon mucosa of organ - sigmoid colon mucous membrane - sigmoid colon organ mucosa - - - - - - - - mucosa of fundus of stomach - - A mucosa that is part of a fundus of stomach [Automatically generated definition]. - fundus gastricus (ventricularis) mucosa - fundus gastricus (ventricularis) mucosa of organ - fundus gastricus (ventricularis) mucous membrane - fundus gastricus (ventricularis) organ mucosa - fundus of stomach mucosa - fundus of stomach mucosa of organ - fundus of stomach mucous membrane - fundus of stomach organ mucosa - mucosa of fundus gastricus (ventricularis) - mucosa of organ of fundus gastricus (ventricularis) - mucosa of organ of fundus of stomach - mucosa of organ of stomach fundus - mucosa of stomach fundus - mucous membrane of fundus gastricus (ventricularis) - mucous membrane of fundus of stomach - mucous membrane of stomach fundus - organ mucosa of fundus gastricus (ventricularis) - organ mucosa of fundus of stomach - organ mucosa of stomach fundus - stomach fundus mucosa - stomach fundus mucosa of organ - stomach fundus mucous membrane - stomach fundus organ mucosa - - - - - - - - mucosa of cardia of stomach - - A mucosa that is part of a cardia of stomach [Automatically generated definition]. - cardia of stomach mucosa - cardia of stomach mucosa of organ - cardia of stomach mucous membrane - cardia of stomach organ mucosa - cardial part of stomach mucosa - cardial part of stomach mucosa of organ - cardial part of stomach mucous membrane - cardial part of stomach organ mucosa - gastric cardia mucosa - gastric cardia mucosa of organ - gastric cardia mucous membrane - gastric cardia organ mucosa - mucosa of cardial part of stomach - mucosa of gastric cardia - mucosa of organ of cardia of stomach - mucosa of organ of cardial part of stomach - mucosa of organ of gastric cardia - mucosa of organ of pars cardiaca (gaster) - mucosa of organ of stomach cardiac region - mucosa of pars cardiaca (gaster) - mucosa of stomach cardiac region - mucous membrane of cardia of stomach - mucous membrane of cardial part of stomach - mucous membrane of gastric cardia - mucous membrane of pars cardiaca (gaster) - mucous membrane of stomach cardiac region - organ mucosa of cardia of stomach - organ mucosa of cardial part of stomach - organ mucosa of gastric cardia - organ mucosa of pars cardiaca (gaster) - organ mucosa of stomach cardiac region - pars cardiaca (gaster) mucosa - pars cardiaca (gaster) mucosa of organ - pars cardiaca (gaster) mucous membrane - pars cardiaca (gaster) organ mucosa - stomach cardiac region mucosa - stomach cardiac region mucosa of organ - stomach cardiac region mucous membrane - stomach cardiac region organ mucosa - - - - - - - - mucosa of pyloric antrum - - A mucosa that is part of a pyloric antrum [Automatically generated definition]. - antral mucosa - antrum of stomach mucosa - antrum of stomach mucosa of organ - antrum of stomach mucous membrane - antrum of stomach organ mucosa - gastric antrum mucosa - mucosa of antrum of stomach - mucosa of organ of antrum of stomach - mucosa of organ of pyloric antrum - mucosa of organ of stomach pyloric antrum - mucosa of stomach pyloric antrum - mucous membrane of antrum of stomach - mucous membrane of pyloric antrum - mucous membrane of stomach pyloric antrum - organ mucosa of antrum of stomach - organ mucosa of pyloric antrum - organ mucosa of stomach pyloric antrum - pyloric antrum mucosa - pyloric antrum mucosa of organ - pyloric antrum mucous membrane - pyloric antrum organ mucosa - stomach pyloric antrum mucosa - stomach pyloric antrum mucosa of organ - stomach pyloric antrum mucous membrane - stomach pyloric antrum organ mucosa - - - - - - - - mucosa of pylorus - - A mucosa that is part of a pylorus [Automatically generated definition]. - antropyloric mucosa - mucosa of organ of pyloric part of stomach - mucosa of organ of pylorus - mucosa of organ of stomach pyloric region - mucosa of pyloric part of stomach - mucosa of stomach pyloric region - mucous membrane of pyloric part of stomach - mucous membrane of pylorus - mucous membrane of stomach pyloric region - organ mucosa of pyloric part of stomach - organ mucosa of pylorus - organ mucosa of stomach pyloric region - pyloric part of stomach mucosa - pyloric part of stomach mucosa of organ - pyloric part of stomach mucous membrane - pyloric part of stomach organ mucosa - pylorus mucosa - pylorus mucosa of organ - pylorus mucous membrane - pylorus organ mucosa - stomach pyloric region mucosa - stomach pyloric region mucosa of organ - stomach pyloric region mucous membrane - stomach pyloric region organ mucosa - - - - - - - - mucosa of biliary tree - - - A mucosa that is part of a biliary tree [Automatically generated definition]. - biliary tract mucosa - biliary tract mucosa of organ - biliary tract mucous membrane - biliary tract organ mucosa - biliary tree mucosa - biliary tree mucosa of organ - biliary tree mucous membrane - biliary tree organ mucosa - mucosa of biliary tract - mucosa of organ of biliary tract - mucosa of organ of biliary tree - mucous membrane of biliary tract - mucous membrane of biliary tree - organ mucosa of biliary tract - organ mucosa of biliary tree - - - - - - - - mucosa of common bile duct - - A mucosa that is part of a common bile duct [Automatically generated definition]. - common bile duct mucosa - common bile duct mucosa of organ - common bile duct mucous membrane - common bile duct organ mucosa - common bile ductal mucosa - ductus choledochus (biliaris) mucosa - ductus choledochus (biliaris) mucosa of organ - ductus choledochus (biliaris) mucous membrane - ductus choledochus (biliaris) organ mucosa - mucosa of ductus choledochus (biliaris) - mucosa of organ of common bile duct - mucosa of organ of ductus choledochus (biliaris) - mucous membrane of common bile duct - mucous membrane of ductus choledochus (biliaris) - organ mucosa of common bile duct - organ mucosa of ductus choledochus (biliaris) - - - - - - - - mucosa of renal pelvis - - A mucosa that is part of a renal pelvis [Automatically generated definition]. - kidney pelvis mucosa - kidney pelvis mucosa of organ - kidney pelvis mucous membrane - kidney pelvis organ mucosa - mucosa of kidney pelvis - mucosa of organ of kidney pelvis - mucosa of organ of pelvis of ureter - mucosa of organ of renal pelvis - mucosa of pelvis of ureter - mucous membrane of kidney pelvis - mucous membrane of pelvis of ureter - mucous membrane of renal pelvis - organ mucosa of kidney pelvis - organ mucosa of pelvis of ureter - organ mucosa of renal pelvis - pelvis of ureter mucosa - pelvis of ureter mucosa of organ - pelvis of ureter mucous membrane - pelvis of ureter organ mucosa - renal pelvic mucosa - renal pelvis mucosa - renal pelvis mucosa of organ - renal pelvis mucous membrane - renal pelvis organ mucosa - tunica mucosa pelvis renalis - - - - - - - - mucosa of trigone of urinary bladder - - A mucosa that is part of a trigone of urinary bladder [Automatically generated definition]. - Lieutaud ' s trigone mucosa - Lieutaud ' s trigone mucosa of organ - Lieutaud ' s trigone mucous membrane - Lieutaud ' s trigone organ mucosa - deep trigone mucosa - deep trigone mucosa of organ - deep trigone mucous membrane - deep trigone organ mucosa - mucosa of Lieutaud ' s trigone - mucosa of deep trigone - mucosa of organ of Lieutaud ' s trigone - mucosa of organ of deep trigone - mucosa of organ of trigone of bladder - mucosa of organ of trigone of urinary bladder - mucosa of organ of urinary bladder trigone - mucosa of organ of vesical trigone - mucosa of trigone of bladder - mucosa of urinary bladder trigone - mucosa of vesical trigone - mucous membrane of Lieutaud ' s trigone - mucous membrane of deep trigone - mucous membrane of trigone of bladder - mucous membrane of trigone of urinary bladder - mucous membrane of urinary bladder trigone - mucous membrane of vesical trigone - organ mucosa of Lieutaud ' s trigone - organ mucosa of deep trigone - organ mucosa of trigone of bladder - organ mucosa of trigone of urinary bladder - organ mucosa of urinary bladder trigone - organ mucosa of vesical trigone - trigone of bladder mucosa - trigone of bladder mucosa of organ - trigone of bladder mucous membrane - trigone of bladder organ mucosa - trigone of urinary bladder mucosa - trigone of urinary bladder mucosa of organ - trigone of urinary bladder mucous membrane - trigone of urinary bladder organ mucosa - urinary bladder trigone mucosa - urinary bladder trigone mucosa of organ - urinary bladder trigone mucous membrane - urinary bladder trigone organ mucosa - vesical trigone mucosa - vesical trigone mucosa of organ - vesical trigone mucous membrane - vesical trigone organ mucosa - - - - - - - - mucosa of neck of urinary bladder - - A mucosa that is part of a neck of urinary bladder [Automatically generated definition]. - bladder neck mucosa - bladder neck mucosa of organ - bladder neck mucous membrane - bladder neck organ mucosa - mucosa of bladder neck - mucosa of neck of bladder - mucosa of organ of bladder neck - mucosa of organ of neck of bladder - mucosa of organ of neck of urinary bladder - mucosa of organ of urinary bladder neck - mucosa of organ of vesical neck - mucosa of urinary bladder neck - mucosa of vesical neck - mucous membrane of bladder neck - mucous membrane of neck of bladder - mucous membrane of neck of urinary bladder - mucous membrane of urinary bladder neck - mucous membrane of vesical neck - neck of bladder mucosa - neck of bladder mucosa of organ - neck of bladder mucous membrane - neck of bladder organ mucosa - neck of urinary bladder mucosa - neck of urinary bladder mucosa of organ - neck of urinary bladder mucous membrane - neck of urinary bladder organ mucosa - organ mucosa of bladder neck - organ mucosa of neck of bladder - organ mucosa of neck of urinary bladder - organ mucosa of urinary bladder neck - organ mucosa of vesical neck - urinary bladder neck mucosa - urinary bladder neck mucosa of organ - urinary bladder neck mucous membrane - vesical neck mucosa - vesical neck mucosa of organ - vesical neck mucous membrane - vesical neck organ mucosa - - - - - - - - mucosa of male urethra - - A mucosa that is part of a male urethra [Automatically generated definition]. - male urethra mucosa - male urethra mucosa of organ - male urethra mucous membrane - male urethra organ mucosa - mucosa of organ of male urethra - mucous membrane of male urethra - organ mucosa of male urethra - - - - - - - - mucosa of female urethra - - A mucosa that is part of a female urethra [Automatically generated definition]. - female urethra mucosa - female urethra mucosa of organ - female urethra mucous membrane - female urethra organ mucosa - mucosa of organ of female urethra - mucous membrane of female urethra - organ mucosa of female urethra - - - - - - - - mucosa of lacrimal sac - - A mucosa that is part of a lacrimal sac [Automatically generated definition]. - lacrimal sac mucosa - lacrimal sac mucosa of organ - lacrimal sac mucous membrane - lacrimal sac organ mucosa - mucosa of organ of lacrimal sac - mucous membrane of lacrimal sac - organ mucosa of lacrimal sac - - - - - - - - mucosa of tongue - - A mucosa that is part of a tongue [Automatically generated definition]. - lingual mucosa - mucosa of organ of tongue - mucous membrane of tongue - organ mucosa of tongue - tongue mucosa - tongue mucosa of organ - tongue mucous membrane - tongue organ mucosa - tunica mucosa linguae - - - - - - - - mucosa of nasopharynx - - - - A mucosa that is part of a nasopharynx [Automatically generated definition]. - mucosa of nasal part of pharynx - mucosa of organ of nasal part of pharynx - mucosa of organ of nasopharynx - mucosa of organ of rhinopharynx - mucosa of rhinopharynx - mucous membrane of nasal part of pharynx - mucous membrane of nasopharynx - mucous membrane of rhinopharynx - nasal part of pharynx mucosa - nasal part of pharynx mucosa of organ - nasal part of pharynx mucous membrane - nasal part of pharynx organ mucosa - nasopharynx mucosa - nasopharynx mucosa of organ - nasopharynx mucous membrane - nasopharynx organ mucosa - organ mucosa of nasal part of pharynx - organ mucosa of nasopharynx - organ mucosa of rhinopharynx - rhinopharynx mucosa - rhinopharynx mucosa of organ - rhinopharynx mucous membrane - rhinopharynx organ mucosa - - - - - - - - mucosa of middle ear - - A mucosa that is part of a middle ear [Automatically generated definition]. - middle ear mucosa - middle ear mucosa of organ - middle ear mucous membrane - middle ear organ mucosa - mucosa of organ of middle ear - mucosa of tympanic cavity - mucous membrane of middle ear - organ mucosa of middle ear - tunica mucosa cavitatis tympanicae - - - - - - - - mucosa of lacrimal canaliculus - - - A mucosa that is part of a lacrimal canaliculus [Automatically generated definition]. - lacrimal canalicular mucosa - lacrimal canaliculus mucosa - lacrimal canaliculus mucosa of organ - lacrimal canaliculus mucous membrane - lacrimal canaliculus organ mucosa - mucosa of organ of lacrimal canaliculus - mucous membrane of lacrimal canaliculus - organ mucosa of lacrimal canaliculus - - - - - - - - mucosa of gallbladder - - - A mucosa that is part of a gallbladder [Automatically generated definition]. - gall bladder mucosa - gall bladder mucosa of organ - gall bladder mucous membrane - gall bladder organ mucosa - gallbladder mucosa - gallbladder mucosa of organ - gallbladder mucous membrane - gallbladder organ mucosa - mucosa of gall bladder - mucosa of organ of gall bladder - mucosa of organ of gallbladder - mucous membrane of gall bladder - mucous membrane of gallbladder - organ mucosa of gall bladder - organ mucosa of gallbladder - tunica mucosa (vesica biliaris) - tunica mucosa vesicae biliaris - - - - - - - - mucosa of bronchiole - - A mucosa that is part of a bronchiole [Automatically generated definition]. - bronchiole mucosa - bronchiole mucosa of organ - bronchiole mucous membrane - bronchiole organ mucosa - lobular bronchiole mucosa - lobular bronchiole mucosa of organ - lobular bronchiole mucous membrane - lobular bronchiole organ mucosa - mucosa of lobular bronchiole - mucosa of organ of bronchiole - mucosa of organ of lobular bronchiole - mucous membrane of bronchiole - mucous membrane of lobular bronchiole - organ mucosa of bronchiole - organ mucosa of lobular bronchiole - - - - - - - - mucosa of terminal bronchiole - - A mucosa that is part of a terminal bronchiole [Automatically generated definition]. - bronchiolus terminalis mucosa - bronchiolus terminalis mucosa of organ - bronchiolus terminalis mucous membrane - bronchiolus terminalis organ mucosa - mucosa of bronchiolus terminalis - mucosa of organ of bronchiolus terminalis - mucosa of organ of terminal bronchiole - mucous membrane of bronchiolus terminalis - mucous membrane of terminal bronchiole - organ mucosa of bronchiolus terminalis - organ mucosa of terminal bronchiole - terminal bronchiole mucosa - terminal bronchiole mucosa of organ - terminal bronchiole mucous membrane - terminal bronchiole organ mucosa - - - - - - - - mucosa of respiratory bronchiole - - A mucosa that is part of a respiratory bronchiole [Automatically generated definition]. - bronchiolus respiratorius mucosa - bronchiolus respiratorius mucosa of organ - bronchiolus respiratorius mucous membrane - bronchiolus respiratorius organ mucosa - mucosa of bronchiolus respiratorius - mucosa of organ of bronchiolus respiratorius - mucosa of organ of respiratory bronchiole - mucous membrane of bronchiolus respiratorius - mucous membrane of respiratory bronchiole - organ mucosa of bronchiolus respiratorius - organ mucosa of respiratory bronchiole - respiratory bronchiole mucosa - respiratory bronchiole mucosa of organ - respiratory bronchiole mucous membrane - respiratory bronchiole organ mucosa - - - - - - - - inner epithelial layer of tympanic membrane - - - A portion of the tympanic cavity epithelium which makes up the outer (cuticular) layer of the tympanic membrane - mucosa of tympanic membrane - mucous layer of tympanic membrane - mucous stratum of tympanic membrane - tympanic membrane external middle ear cavity epithelial component - tympanic membrane mucosa - - - - - - - - mucosa of nasolacrimal duct - - - A mucosa that is part of a nasolacrimal duct [Automatically generated definition]. - mucosa of organ of nasolacrimal duct - mucous membrane of nasolacrimal duct - nasolacrimal duct mucosa - nasolacrimal duct mucosa of organ - nasolacrimal duct mucous membrane - nasolacrimal duct organ mucosa - nasolacrimal ductal mucosa - organ mucosa of nasolacrimal duct - - - - - - - - mucosa of uterine tube - - - A mucosa that is part of a fallopian tube [Automatically generated definition]. - fallopian tube mucosa - fallopian tube mucosa of organ - fallopian tube mucous membrane - fallopian tube organ mucosa - mucosa of fallopian tube - mucosa of organ of fallopian tube - mucosa of organ of uterine tube - mucosa of oviduct - mucous membrane of fallopian tube - mucous membrane of uterine tube - organ mucosa of fallopian tube - organ mucosa of uterine tube - tunica mucosa tubae uterinae - uterine tubal mucosa - uterine tube mucosa - uterine tube mucosa of organ - uterine tube mucous membrane - uterine tube organ mucosa - - - - - - - - mucosa of infundibulum of uterine tube - - A mucosa that is part of a uterine tube infundibulum [Automatically generated definition]. - mucosa of infundibulum of fallopian tube - mucosa of infundibulum of oviduct - mucosa of organ of uterine tube infundibulum - mucosa of uterine tube infundibulum - mucous membrane of uterine tube infundibulum - organ mucosa of uterine tube infundibulum - uterine tube infundibulum mucosa - uterine tube infundibulum mucosa of organ - uterine tube infundibulum mucous membrane - uterine tube infundibulum organ mucosa - - - - - - - - zone of long bone - - An organ part that is part of a long bone [Automatically generated definition]. - long bone zone - - - - - - - - external female genitalia - - - - An external genitalia that is part of a female reproductive system [Automatically generated definition]. - external female genital organ - external genitalia of female reproductive system - female external genitalia - organa genitalia feminina externa - - - - - - - - immune organ - - An organ that is part of a immune system [Automatically generated definition]. - immune system organ - - - - - - - - hemolymphoid system gland - - A gland that is part of a hemolymphoid system [Automatically generated definition]. - haemolymphoid system gland - hemopoietic or lymphoid gland - hemopoietic or lymphoid organ - - - - - - - - neural groove - - The median dorsal longitudinal groove formed in the embryo by the neural plate after the appearance of the neural folds. - - - - - - - - neural fold - - - - - - One of the two elevated edges of the neural groove[GO,MP]. - medullary fold - - - - - - - - neural rod - - A solid rod of neurectoderm derived from the neural keel. The neural rod is roughly circular in cross section. Neural rod formation occurs during primary neurulation in teleosts[GO]. An intermediate stage in the development of the central nervous system present during the segmentation period; the neural rod is roughly cylindrical in shape, forms from the neural keel, and is not yet hollowed out into the neural tube[ZFIN]. - neural tube rod - - - - - - - - metanephric ureteric bud - - The portion of the ureteric bud tube that contributes to the morphogenesis of the metanephros[GO]. - - - - - - - - ureter ureteric bud - - The portion of the ureteric bud that contributes to the morphogenesis of the ureter. The ureter ureteric bud is the initial structure that forms the ureter[GO]. - - - - - - - - ectodermal placode - - - An ectodermal placode is a thickening of the ectoderm that is the primordium of many structures derived from the ectoderm[GO] - epithelial placode - - - - - - - - hair follicle placode - - A bud-like thickening in the epidermis consisting of elongated keratinocytes, which at the distal end are in touch with numerous aggregated specialized dermal fibroblasts, the dermal condensate. - hair gem - hair germ - hair peg - hair placode - vibrissa placode - - - - - - - - tooth placode - - - An tooth placode is a thickening of the ectoderm that will give rise to the tooth bud[GO]. - dental anlage - dental placode - dental primordium - odontogenic placode - tooth anlage - tooth germ - tooth primordium - - - - - - - - sebaceous gland placode - - - A sebaceous gland placode is a thickening of the ectoderm that will give rise to the sebaceous gland bud[GO]. - - - - - - - - sweat gland placode - - - An sweat gland placode is a thickening of the ectoderm that will give rise to the sweat gland bud[GO]. - - - - - - - - muscle structure - - Muscle structures are contractile cells, tissues or organs that are found in multicellular organisms[GO]. - muscle - muscle element - musculus - - - - - - - - kidney rudiment - - . - kidney anlage - - - - - - - - descending thin limb - - The descending thin limb is a part of the loop of Henle situated just after the proximal straight tubule (S3). It extends to the tip of the loop of Henle[GO]. - descending limb of Henle's loop - descending limb of loop of Henle - descending thin limb of loop of Henle - loop of Henle descending thin limb - loop of Henle thin descending limb - pars descendens (tubulus attenuatus) - thin descending limb - thin descending limb of loop of Henle - thin descending limb of the loop of Henle - thin descending loop of Henle - - - - - - - - renal connecting tubule - - - The connecting tubule is a tubular segment of the nephron; it connects the distal convoluted tubule to the collecting duct[GO]. - connecting tubule - kidney connecting tubule - tubulus renalis arcuatus - - - - - - - - mesonephric epithelium - - - An epithelium that is part of a mesonephros [Automatically generated definition]. - - - - - - - - metanephric tubule - - - - A metanephric tubule is an epithelial tube that is part of the metanephros[GO]. - - - - - - - - metanephric epithelium - - - An epithelium is a tissue that covers the internal or external surfaces of an anatomical structure[GO]. - - - - - - - - metanephric smooth muscle tissue - - Any smooth muscle tissue that is part of a metanephros. - - - - - - - - metanephric nephron - - - A metanephric nephron is the functional unit of the metanephros[GO]. - - - - - - - - metanephric pyramid - - - Metanephric pyramids are the conical masses that constitute the renal medulla in a metanephros; they contain the loops of Henle and the medullary collecting ducts[GO]. - - - - - - - - metanephric cortex mesenchyme - - - - - - - - - - metanephric ascending thin limb - - - The metanephric ascending thin limb is a segment of a nephron tubule in the metanephros lying in the inner medulla that is permeable to ions but not to water and has a simple epithelium; active transepithelial solute transport is absent[GO]. - - - - - - - - metanephric cortical collecting duct - - - The metanephric cortical collecting duct is the portion of the metanephric collecting duct that resides in the renal cortex[GO]. - - - - - - - - metanephric descending thin limb - - - It extends to the tip of the metanephric loop of Henle[GO]. - - - - - - - - metanephric distal convoluted tubule - - - The metanephric distal convoluted tubule is a portion of the metanephric nephron tubule that connects the metanephric loop of Henle to the collecting duct[GO]. - - - - - - - - metanephric glomerular mesangium - - The metanephric glomerular mesangium is the thin membrane connective tissue composed of mesangial cells in the metanephros, which helps to support the capillary loops in a renal glomerulus[GO]. - - - - - - - - metanephric macula densa - - - The metanephric macula densa is an area of specialized cells in the distal tubule of the metanephros that makes contact with the vascular pole of the glomerulus[GO]. - - - - - - - - metanephric proximal convoluted tubule - - - The metanephric proximal convoluted tubule is the most proximal portion of the metanephric proximal tubule and extends from the metanephric glomerular capsule to the metanephric proximal straight tubule[GO]. - - - - - - - - metanephric proximal straight tubule - - - The metanephric proximal straight tubule is the part of the metanephric descending limb that extends from the metanephric proximal convoluted tubule to the metanephric descending thin tubule[GO]. - - - - - - - - metanephric thick ascending limb - - - At the macula densa, the thick ascending limb connects to the distal convoluted tubule[GO]. - - - - - - - - metanephric distal tubule - - - The metanephric distal tubule is a metanephric nephron tubule that begins at the metanephric macula densa and extends to the metanephric connecting tubule[GO]. - - - - - - - - metanephric loop of Henle - - - The metanephric loop of Henle is a metanephric nephron tubule that connects the proximal convoluted tubule to the distal convoluted tubule in the metanephros[GO]. - - - - - - - - metanephric glomerulus vasculature - - The metanephric glomerulus vasculature is composed of the tubule structures that carry blood or lymph in the metanephric glomerulus[GO]. - - - - - - - - metanephric nephron epithelium - - - The metanephric nephron epithelium is a tissue that covers the surface of a nephron in the metanephros[GO]. - - - - - - - - metanephric glomerular epithelium - - - A metanephric glomerular visceral epithelial cell is a specialized epithelial cell that contains 'feet' that interdigitate with the 'feet' of other glomerular epithelial cells in the metanephros[GO]. - - - - - - - - metanephric glomerular endothelium - - - The metanephric glomerular endothelium is an epithelial tissue that covers the internal surfaces of the glomerulus of the metanephros[GO]. - - - - - - - - metanephric glomerular capillary - - This process pertains to the initial formation of a structure from unspecified parts[GO]. - - - - - - - - metanephric comma-shaped body - - The metanephric comma-shaped body is the precursor structure to the metanephric S-shaped body that contributes to the morphogenesis of a nephron in the metanephros[GO]. - - - - - - - - metanephric nephron tubule - - - - A metanephric nephron tubule is an epithelial tube that is part of the metanephric nephron, the functional part of the metanephros[GO]. - - - - - - - - metanephric renal vesicle - - - The renal vesicle is the primordial structure of the metanephric nephron epithelium, and is formed by the condensation of mesenchymal cells[GO]. - metanephric vesicle - - - - - - - - metanephric S-shaped body - - The metanephric S-shaped body is the successor of the metanephric comma-shaped body that contributes to the morphogenesis of a nephron in the metanephros[GO]. - - - - - - - - metanephric connecting tubule - - - The metanephric connecting tubule is a tubular segment of the metanephric nephron; it connects the distal convoluted tubule to the collecting duct in the metanephros[GO]. - - - - - - - - metanephric proximal tubule - - - The metanephric proximal tubule is a metanephric nephron tubule that connects Bowman's capsule to the descending thin limb of the loop of Henle in the metanephros. It has a brush border epithelial morphology[GO]. - - - - - - - - epithelial bud - - A bud is a protrusion that forms from an epithelial sheet by localized folding. - - - - - - - - epithelial cord - - A cord of epithelial cells without a lumen and usually several cells thick. - - - - - - - - reproductive structure - - Any anatomical structure that is part of the reproductive system. - reproductive system element - reproductive system structure - - - - - - - - epithelial fold - - An epithelial sheet bent on a linear axis. - - - - - - - - parenchyma of central nervous system - - - CNS parenchyma - The functional tissue of the central nervous system consisting of neurons and glial cells. - central nervous system parenchyma - parenchyma of CNS - parenchyma of central nervous system - - - - - - - - multi cell part structure - - A structure consisting of multiple cell components but which is not itself a cell and does not have (complete) cells as a part. - cell part cluster - multi-cell-component structure - multi-cell-part structure - - - - - - - - ascending limb of loop of Henle - - The distal part of the loop of Henle that is impermeable to water and actively pumps sodium out of the filtrate to generate the hypertonic interstitium that drives countercurrent exchange; it consists of an initial very thin segment lined by simple squamous epithelium followed by a distal thick segment lined by simple cuboidal epithelium[MP]. - ascending limb - ascending limb of Henle's loop - distal straight tubule - loop of Henle ascending limb - - - - - - - - papillary duct - - Bellini's duct - The terminal portions of the medullary collecting ducts are the papillary ducts, which end at the renal papilla and empty into a minor calyx. - duct of Bellini - papillary duct - papillary duct of kidney - renal papillary duct - - - - - - - - renal interlobular vein - - - Any of the veins that parallel the interlobular arteries, receiving blood from the peritubular capillary plexus and empty into the arcuate veins - interlobular vein - interlobular veins of kidney - set of interlobular veins of kidney - venae interlobulares renis - venae interlobulares renis - - - - - - - - interstitial tissue - - connective tissue between the cellular elements of a structure. - interstitium - - - - - - - - hepatic duct - - Any portion of the ducts that carry bile from the liver to the common bile duct. This may include both intrahapetic components (parts of left and right hepatic ducts) and extrahapetic components (common hepatic duct, plus hilar portion). - - - - - - - - abdomen element - - An organ or element that is in the abdomen. Examples: spleen, intestine, kidney, abdominal mammary gland. - abdomen organ - - - - - - - - abdominal segment element - - An organ or element that is part of the adbominal segment of the organism. This region can be further subdivided into the abdominal cavity and the pelvic region. - abdominal segment organ - - - - - - - - dorsal region element - - An organ or element that part of the dorsum of the organism. Examples: spinal cord, vertebrae, muscles of back. - back organ - dorsal region organ - - - - - - - - chest organ - - An organ that is part of a chest [Automatically generated definition]. - - - - - - - - tooth enamel organ - - - - A circumscribed mass of ectodermal cells which bud off from the dental lamina; it becomes cup-shaped and develops on its internal face the ameloblast layer of cells that produces the enamel cap of a developing tooth. - dental organ - enamel organ - odontogenic organ - organum enameleum - - - - - - - - trunk region element - - An organ or element that part of the trunk region. The trunk region can be further subdividied into thoracic (including chest and thoracic cavity) and abdominal (including abdomen and pelbis) regions. - trunk organ - - - - - - - - thoracic cavity element - - An organ or element that is in the thoracic cavity. Examples: lung, heart, longus colli. - thoracic cavity organ - - - - - - - - pelvic region element - - An organ or element that is part of the pelvic region. Examples: reproductive organs (in some organisms), urinary bladder, bones of the pelvis. - pelvic element - pelvis organ - pelvis region organ - - - - - - - - thoracic segment organ - - An organ that part of the thoracic segment region. This region can be further subdividied chest and thoracic cavity regions. - upper body organ - - - - - - - - renal medulla collecting duct - - The portion of the collecting duct that resides in the renal medulla - kidney medulla collecting duct - medullary collecting duct - - - - - - - - thoracic vein - - - A vein that is part of a thorax [Automatically generated definition]. - - - - - - - - spleen germinal center - - - A germinal center that is part of the spleen. The spleen germinal center is located in a secondary B follicle in the white pulp of the spleen. - germinal center of spleen - spleen GC - spleen follicle center - splenic germinal center - - - - - - - - thoracic mammary gland - - - A lactiferous gland that is located in the thoracic region/breast. - anterior mammary gland - breast mammary gland - lactiferous gland - mammary gland - - - - - - - - distal straight tubule macula densa - - A macula densa that is part of an ascending limb of loop of Henle [Automatically generated definition]. - - - - - - - - trachea gland - - a tubuloacinar seromucous gland that is located principally in the submucosa of the trachea. Excretory ducts from this gland pass through the lamina propria to the tracheal lumen. - glandula trachealis - tracheal gland - tubular seromucous gland of trachea - - - - - - - - vagina stroma - - - - A stroma that is part of a vagina. - - - - - - - - choroid plexus stroma - - - A stroma that is part of a choroid plexus [Automatically generated definition]. - - - - - - - - tonsil capsule - - A capsule that is part of a tonsil [Automatically generated definition]. - - - - - - - - renal medulla interstitium - - kidney medulla interstitium - medullary interstitium - medullary stroma - renal medullary interstitial tissue - renal medullary interstitium - tissue surrounding the loop of Henle in the renal medulla. - - - - - - - - Leydig cell region of testis - - - The male gonad containing two functional parts: the SEMINIFEROUS TUBULES for the production and transport of male germ cells (SPERMATOGENESIS) and the interstitial compartment containing LEYDIG CELLS that produce ANDROGENS.. - interstitium of testis - interstitium of the testis - testis - interstitial - testis interstitial tissue - testis interstitium - - - - - - - - outer renal medulla interstitium - - A portion of interstitial tissue that is part of a outer medulla of kidney [Automatically generated definition]. - kidney outer medulla interstitium - outer medullary interstitium - - - - - - - - inner renal medulla interstitium - - A portion of interstitial tissue that is part of a inner medulla of kidney [Automatically generated definition]. - inner medullary interstitium - kidney inner medulla interstitium - papillary interstitium - - - - - - - - kidney interstitium - - The interstitial compartment of the kidney, comprising the extravascular intertubular spaces of the renal parenchyma, with their attendant cellular elements and extracellular substances, bounded on all sides by epithelial and vascular basement membranes. - interstitial tissue of kidney - kidney interstitium group - renal interstitial tissue - renal interstitium - renal stroma - stroma of kidney - - - - - - - - optic eminence surface ectoderm - - An external ectoderm that is part of a optic eminence [Automatically generated definition]. - - - - - - - - upper leg epithelium - - An epithelium that is part of a hindlimb stylopod [Automatically generated definition]. - - - - - - - - pedal digit epithelium - - - An epithelium that is part of a toe [Automatically generated definition]. - foot digit epithelium - hind limb digit epithelium - toe epithelium - - - - - - - - manual digit epithelium - - - An epithelium that is part of a finger [Automatically generated definition]. - finger epithelium - fore limb digit epithelium - hand digit epithelium - - - - - - - - upper arm epithelium - - An epithelium that is part of a forelimb stylopod [Automatically generated definition]. - - - - - - - - lower leg epithelium - - An epithelium that is part of a lower leg [Automatically generated definition]. - - - - - - - - medial-nasal process ectoderm - - - An ectoderm that is part of a medial nasal prominence [Automatically generated definition]. - - - - - - - - optic eminence ectoderm - - An ectoderm that is part of a optic eminence [Automatically generated definition]. - - - - - - - - interventricular septum endocardium - - An endocardium that is part of a interventricular septum [Automatically generated definition]. - endocardium of interventricular septum - interventricular septum endocardial tissue - - - - - - - - bulbus cordis myocardium - - A myocardium that is part of a bulbus cordis [Automatically generated definition]. - bulbus cordis cardiac muscle - - - - - - - - metanephric renal pelvis - - A renal pelvis that is part of a metanephros. - metanephros pelvis - - - - - - - - stomatodeum gland - - A gland that is part of a stomodeum. - stomatodaeum gland - - - - - - - - head mesenchyme - - - Portion of primordial embryonic connective tissue of the developing head, consisting of mesenchymal cells supported in interlaminar jelly, that derive mostly from the mesoderm and contribute to head connective tissue, bone and musculature in conjunction with cranial neural crest cells. - cephalic mesenchyme - cranial mesenchyme - desmocranium - - - - - - - - upper leg mesenchyme - - Mesenchyme that is part of a developing hindlimb stylopod [Automatically generated definition]. - - - - - - - - pedal digit mesenchyme - - - - Mesenchyme that is part of a developing toe [Automatically generated definition]. - finger ray mesenchyme - foot digit mesenchyme - hind limb digit mesenchyme - pedal digital ray mesenchyme - toe mesenchyme - - - - - - - - trunk mesenchyme - - - Mesenchyme that is part of a developing trunk. - trunk and cervical mesenchyme - - - - - - - - manual digit mesenchyme - - - - Mesenchyme that is part of a developing finger [Automatically generated definition]. - anterior limb digital ray mesenchyme - finger mesenchyme - finger ray mesenchyme - fore limb digit mesenchyme - hand digit mesenchyme - manual digital ray mesenchyme - - - - - - - - upper arm mesenchyme - - Mesenchyme that is part of a developing forelimb stylopod [Automatically generated definition]. - - - - - - - - lower leg mesenchyme - - Mesenchyme that is part of a developing lower leg [Automatically generated definition]. - - - - - - - - renal cortex artery - - - An artery that supplies the renal cortex. - kidney cortex artery - renal cortex arterial system - renal cortex artery - - - - - - - - renal cortex vein - - - Artery that receives blood from the renal cortex[MP, modified] - kidney cortex vein - renal cortex venous system - - - - - - - - renal cortex interstitium - - A compartment of the renal cortex situated between basement membranes of epithelia and vessels that contains two contiguous cellular networks in mutual contact, one formed by interstitial fibroblasts, the other by dendritic cells. - cortical stroma - kidney cortex interstitium - renal cortical interstitial tissue - - - - - - - - juxtamedullary cortex - - The part of the renal cortex nearest to the medulla. - inner cortex of kidney - inner renal cortex - juxtamedullary cortex of kidney - - - - - - - - peritubular capillary - - the tiny blood vessels that receive blood from the efferent arterioles of the glomerulus, and interact with superficial cortical nephrons allowing reabsorption and secretion between blood and the inner lumen of the nephron; peritubular capillaries are situated around the tubule and are at low pressure - - - - - - - - ventricular system of central nervous system - - - A set of structures containing cerebrospinal fluid in the brain. It is continuous with the central canal of the spinal cord[WP]. - CNS ventricular system - ventricle system - ventricular system - ventricular system of neuraxis - ventriculi cerebri - - - - - - - - ventricular system of brain - - - brain ventricular system - - - - - - - - tela choroidea - - A structure found in the walls of the ventricles of the brain, consisting of part of the meninges (pia mater in mammals) plus ependyma[cjm]. - tela chorioidea - - - - - - - - tela choroidea of fourth ventricle - - - Tela chorioidea that lines the fourth ventricle[ZFA]. The tela chorioidea of the fourth ventricle is the name applied to the triangular fold of pia mater which is carried upward between the cerebellum and the medulla oblongata. It consists of two layers, which are continuous with each other in front, and are more or less adherent throughout: The posterior layer covers the antero-inferior surface of the cerebellum. The anterior layer is applied to the structures which form the lower part of the roof of the ventricle, and is continuous inferiorly with the pia mater on the inferior peduncles and closed part of the medulla[WP]. - choroid membrane - choroid membrane of fourth ventricle - tela chorioidea fourth ventricle - tela choroidea - tela choroidea fourth ventricle - tela choroidea of fourth ventricle - tela choroidea ventriculi quarti - tela choroidea ventriculi quarti - - - - - - - - tela choroidea of telencephalic ventricle - - - Tela chorioidea that lines the telencephalic ventricle. - tela chorioidea of lateral ventricle - tela chorioidea of telencephalic ventricle - tela chorioidea telencephalic ventricle - tela choroidea (ventriculi lateralis) - tela choroidea of lateral ventricle - tela choroidea telencephalic ventricle - - - - - - - - myelencephalon - - The posterior part of the developing vertebrate hindbrain or the corresponding part of the adult brain composed of the medulla oblongata and a portion of the fourth ventricle; as well as the glossopharyngeal nerve (CN IX), vagus nerve (CN X), accessory nerve (CN XI), hypoglossal nerve (CN XII), and a portion of the vestibulocochlear nerve (CN VIII).[BTO,WP]. - myelencephalon (medulla oblongata) - - - - - - - - embryonic tissue - - A portion of tissue that is part of an embryo. - developing tissue - portion of embryonic tissue - - - - - - - - extraembryonic tissue - - Portion of tissue that is contiguous with the embryo and is comprised of portions of tissue or cells that will not contribute to the embryo. - extra-embryonic tissue - - - - - - - - gonadal ridge - - crista gonadalis - genital cord - genital ridge - gonadal ridge - indifferent gonadal ridge - the elevation of thickened mesothelium and underlying mesenchyme found on the ventromedial border of the embryonic mesonephros in which the primordial germ cells become embedded, establishing it as the primordium of the testis or ovary - - - - - - - - sex cord - - - - Cordlike masses of epithelial tissue that invaginate from germinal epithelium of the gonad and give rise to seminiferous tubules and rete testes in the male, and primary ovarian follicles and rete ovarii in the female. - genital cord - gonad cord - gonadal cord - primitive sex cord - - - - - - - - ovary sex cord - - - cortical cord - cortical sex cord - ovary primitive sex cord - ovigerous cord - ovigerous cords - secondary cord - structures that develop from sex cords in the female. After further development they become the ovarian follicles. - - - - - - - - testis sex cord - - - The testis cords are precursors to the rete testis. They play several different roles in the development of the male genitals[WP]. - primary sex cord - testis cord - testis primary sex cords - testis primitive sex cord - - - - - - - - pronephric nephron - - - A pronephric nephron is the functional unit of the pronephros[GO]. - - - - - - - - pronephric nephron tubule - - - The pronephric nephron tubule is an epithelial tube that is part of the pronephric nephron and connects the filtration unit (glomerulus or glomus) of the pronephros to the pronephric duct[GO]. - ciliated neck segment - pronephric tubule - - - - - - - - mammary placode - - The mammary placode is a transient lens shaped structure that will give rise to the mammary bud proper[GO]. - mammary anlage - - - - - - - - endocardial endothelium - - The endothelial lining of the endocardium. - endocardium endothelium - endothelium of endocardium - - - - - - - - pulmonary artery endothelium - - An pulmonary artery endothelium is an epithelium that lines the pulmonary artery[GO]. - pulmonary artery endothelial tube - - - - - - - - mesonephric collecting duct - - - The collecting duct is the final common path through which urine flows before entering the ureter and then emptying into the bladder[GO]. - - - - - - - - mesonephric juxtaglomerular apparatus - - The juxtaglomerular apparatus lies adjacent to the glomerulus and regulates kidney function by maintaining the blood flow to the kidney and the filtration rate[GO]. - - - - - - - - mesonephric smooth muscle tissue - - . - - - - - - - - mesonephric nephron - - - A nephron that is part of a mesonephros. - nephron of mesonephros - stage IV nephron - - - - - - - - mesonephric mesenchyme - - - Mesonephric mesenchyme is the tissue made up of loosely connected mesenchymal cells in the mesonephros[GO]. - - - - - - - - mesonephric macula densa - - - The mesonephric macula densa is an area of specialized cells in the distal tubule of the mesonephros that makes contact with the vascular pole of the glomerulus[GO]. - - - - - - - - mesonephric glomerulus - - The mesonephric glomerulus is a capillary tuft which forms a close network with the visceral epithelium (podocytes) and the mesangium to form the filtration barrier and is surrounded by Bowman's capsule in nephrons of the mature vertebrate kidney, or mesonephros[GO]. - glomerulus - - - - - - - - mesonephric glomerulus vasculature - - The mesonephric glomerulus vasculature is composed of the tubule structures that carry blood or lymph in the mesonephric glomerulus[GO]. - - - - - - - - mesonephric glomerular epithelium - - - A mesonephric glomerular visceral epithelial cell is a specialized epithelial cell that contains 'feet' that interdigitate with the 'feet' of other glomerular epithelial cells in the mesonephros[GO]. - - - - - - - - mesonephric comma-shaped body - - The mesonephric comma-shaped body is the precursor structure to the mesonephric S-shaped body that contributes to the morphogenesis of a nephron in the mesonephros[GO]. - - - - - - - - mesonephric nephron tubule - - - - A mesonephric nephron tubule is an epithelial tube that is part of the mesonephric nephron, the functional part of the mesonephros[GO]. - mesonephric renal tubule - - - - - - - - mesonephric nephron epithelium - - - The mesonephric nephron epithelium is a tissue that covers the surface of a nephron in the mesonephros[GO]. - - - - - - - - mesonephric renal vesicle - - - The renal vesicle is the primordial structure of the mesonephric nephron epithelium, and is formed by the condensation of mesenchymal cells[GO]. - mesonephric vesicle - - - - - - - - mesonephric S-shaped body - - The mesonephric S-shaped body is the successor of the mesonephric comma-shaped body that contributes to the morphogenesis of a nephron in the mesonephros[GO]. - - - - - - - - mammary bud - - - A bulb of epithelial cells that forms from the mammary placode that develops into the mammary gland. - lactiferous gland bud - mammary gland bud - mammary primordium - milk bud - - - - - - - - oral lamina propria - - A lamina propria that is part of a mucosa of oral region. - lamina propria of oral mucosa - - - - - - - - outflow tract of ventricle - - A ventricular outflow tract is a portion of either the left ventricle or right ventricle of the heart through which blood passes in order to enter the great arteries. The right ventricular outflow tract (RVOT) is an infundibular extension of the ventricular cavity which connects to the pulmonary artery. The left ventricular outflow tract (LVOT), which connects to the aorta, is nearly indistinguishable from the rest of the ventricle[WP]. - heart ventricle outflow tract - outflow part of ventricle - ventricular outflow tract - - - - - - - - outflow tract aortic component - - An outflow tract that is part of a aorta. - - - - - - - - outflow tract pulmonary component - - - - - - - - - brain ependyma - - ependyma of ventricular system of brain - the ependymal cell layer that lines the brain ventricles - - - - - - - - ventricle of nervous system - - A layer in the central nervous system that lines system of communicating cavities in the brain and spinal cord. - region of wall of ventricular system of neuraxis - ventricular layer - - - - - - - - spinal cord ependyma - - ependyma of central canal of spinal cord - spinal cord ependymal layer - spinal cord ventricular layer - the ependymal cell layer that lines the spinal cord - - - - - - - - olfactory lobe - - The lobe at the anterior part of each cerebral hemisphere, responsible for olfactory functions. - - - - - - - - spinal cord ventral column - - anterior column - spinal cord anterior column - the area of white matter of the spinal cord located on either side of the ventral (anterior) medial fissure - ventral column - - - - - - - - olfactory bulb external plexiform layer - - Cytoarchitectural part of the olfactory bulb, lying superior to the mitral cell layer and inferior to the glomerular layer. The EPL is mostly neuropil composed almost entirely of mitral and tulfted cell dendrites and granule cell dendrites and their synaptic inputs. - EPL - OB outer plexiform layer - external plexiform layer - external plexiform layer of the olfactory bulb - olfactory bulb main external plexiform layer - - - - - - - - olfactory bulb glomerular layer - - The glomerular layer is the most superficial layer, consisting of mitral cell dendritic arborizations (glomeruli), olfactory nerve fibers, and periglomerular cells. Periglomerular cells contact multiple mitral cell dendrites within the glomeruli and provide lateral inhibition of neighboring glomeruli while allowing excitation of a specific mitral cell dendritic tree. Each mitral cell is contacted by at least 1000 olfactory nerve fibers[BTO]. Portion of tissue which is located in between the primary olfactory fiber layer and the external cellular layer of the olfactory bulb[ZFA]. - glomerular layer - glomerular layer of the olfactory bulb - olfactory bulb main glomerulus - stratum glomerulosum bulbi olfactorii - - - - - - - - nasal cavity epithelium - - - - An epithelium that lines the nasal cavity. - nasal epithelium - nasal mucosa - - - - - - - - olfactory segment of nasal mucosa - - That portion of the nasal mucosa containing the sensory endings for olfaction; the organ of smell[MESH]. - olfactory area of nasal mucosa - olfactory mucosa - olfactory part of nasal mucosa - olfactory zone of nasal mucosa - pars olfactoria tunicae mucosae nasi - pars olfactoria tunicae mucosae nasi - - - - - - - - photoreceptor array - - An array of photoreceptors and any supporting cells found in an eye. - light-sensitive tissue - - - - - - - - transparent eye structure - - A transparent structure that is part of a visual sense organ, the function of which is to direct or focus light onto a photoreceptor array. - lens - - - - - - - - carotid artery segment - - One of: the common carotid artery, or its branches, the external and internal carotid arteries. - carotid - carotid artery - common carotid arterial subdivision - subdivision of common carotid artery - - - - - - - - female reproductive gland - - A sex gland that is part of a female reproductive system. - - - - - - - - male reproductive gland - - A sex gland that is part of a male reproductive system. - accessory sex gland - - - - - - - - cerebral hemisphere gray matter - - A gray matter that is part of a cerebral hemisphere. - cerebral gray matter - cerebral grey matter - cerebral hemisphere grey matter - - - - - - - - perirenal fat - - The adipose capsule of kidney (or perinephric fat or perirenal fat) is a structure between the renal fascia and renal capsule, and may be regarded as a part of the latter. A different structure, the pararenal fat, is the adipose tissue superficial to the renal fascia. - adipose capsule of kidney - capsula adiposa renis - fatty capsule of kidney - perinephric fat - periphrenic fascia - perirenal fascia - perirenal fascia - perirenal fat capsule - perirenal fat pad - - - - - - - - circumventricular organ - - Any of any of the secretory or sensory organs located in the brain region around or in relation to the ventricular system that are characterized by extensive vasculature and a lack of a normal blood brain barrier (BBB) and allow for the linkage between the central nervous system and peripheral blood flow. - CVO - circumventricular organ - circumventricular organ of neuraxis - - - - - - - - alimentary part of gastrointestinal system - - GI tract - The part of the digestive system that excludes the hepatobiliary system. - alimentary system - alimentary tract - gastro-intestinal system - gastrointestinal (GI) tract - gastrointestinal system - gastrointestinal tract - - - - - - - - forelimb bud - - - - A limb bud that develops into a forelimb. - anterior limb bud - arm bud - limb bud - forelimb - upper limb bud - wing bud - - - - - - - - hindlimb bud - - - A limb bud that develops into a hindlimb. - hind limb bud - leg bud - limb bud - hindlimb - posterior limb bud - - - - - - - - pectoral appendage bud - - A limb bud that develops into a forelimb or pectoral fin. - forelimb - pectoral fin bud - pectoral fin bud - pectoral fin buds - - - - - - - - pelvic appendage bud - - A limb bud that develops into a hindlimb or pelvic fin. - hindlimb/pelvic fin bud - pelvic fin bud - pelvic fin buds - - - - - - - - pectoral appendage apical ectodermal ridge - - AER forelimb - An apical ectodermal ridge that is part of a pectoral appendage bud. - aer pectoral fin - apical ectodermal ridge forelimb - apical ectodermal ridge pectoral fin - apical ectodermal ridge pectoral fin bud - apical fold pectoral fin - upper limb bud apical ectodermal ridge - wing AER - wing apical ectodermal ridge - - - - - - - - pelvic appendage apical ectodermal ridge - - AER hindlimb - An apical ectodermal ridge that is part of a pelvic appendage bud. - apical ectodermal ridge hind limb - apical ectodermal ridge hindlimb - apical ectodermal ridge pelvic fin bud - leg AER - lower lmb bud apical ectodermal ridge - - - - - - - - developing anatomical structure - - developing structure - developmental structure - developmental tissue - - - - - - - - presumptive retinal pigmented epithelium - - - Portion of tissue that is the outer layer of the optic cup and will become the retinal pigmented epithelium. - future PRE - future RPE - future pigmented layer - future pigmented retinal epithelium - future retinal pigmented epithelium - optic cup outer layer - outer layer optic cup - presumptive pigmented epithelia - presumptive pigmented epithelium - - - - - - - - presumptive neural retina - - - Portion of tissue that is the inner layer of the optic cup and will become the neural retina. - future NR - future neural epithelium - future neural layer - future neural retina - future retinal neural layer - inner layer optic cup - optic cup inner layer - presumptive retina - presumptive retinas - - - - - - - - lens vesicle - - - Portion of tissue that gives rise to the lens. - hollow lens vesicle - immature lens - lens mass - presumptive lens - solid lens vesicle - - - - - - - - corneal primordium - - - - - Portion of tissue that is part of the eye and gives rise to the mature, fully layered cornea. - - - - - - - - vagal neural crest - - - VNC - Vagal neural crest is adjacent to the first seven somites gives rise to both ganglionic and ectomesenchymal derivatives[ZFA]. - enteric neural crest - post-otic neural crest - - - - - - - - aortic sac - - - - The dilated structure that is lined by endothelial cells and located at the arterial pole of the heart just above (distal to) the truncus arteriosus in mammalian embryos; it is the primordial vascular channel from which the aortic arches (and eventually the dorsal aortae) arise; the aortic sac is homologous to the ventral aorta of gill-bearing vertebrates - saccus aorticus - - - - - - - - segment of pes - - - A segment of autopod that is part of a pes. - foot region - foot subdivision - regio pedis - segment of foot - subdivision of foot - - - - - - - - segment of manus - - - A segment of autopod that is part of a manus. - hand region - hand subdivision - regio manus - segment of hand - subdivision of hand - - - - - - - - spinal nerve trunk - - spinal nerve (trunk) - spinal neural trunk - trunk of spinal nerve - trunk part of spinal nerve, where dorsal and ventral roots meet to form the spinal nerve, before branching off to dorsal and ventral rami. - - - - - - - - stomach fundus epithelium - - A simple columnar epithelium that is part of a fundus of stomach. - epithelium of fundus of stomach - gastric epithelium of fundus - gastric fundus epithelium - - - - - - - - thymus lobe - - - - Either of the two lateral lobes that constitute the thymus. - lateral lobe of thymus - lobe of thymus - - - - - - - - midbrain lateral wall - - lateral wall mesencephalon - lateral wall midbrain - lateral wall midbrain region - - - - - - - - neural tube lateral wall - - Portion of tissue on the side of the lumen of the neural tube. - lateral wall neural tube - - - - - - - - non-neural ectoderm - - - epidermal ectoderm - epithelial ectoderm - non neural ectoderm - surface ectoderm - ventral ectoderm - - - - - - - - primitive heart tube - - - Multi-tissue structure that arises from the heart rudiment and will become the heart tube. - early primitive heart tube - primitive heart tube - - - - - - - - rhombomere lateral wall - - A neural tube lateral wall that is part of a rhombomere. - future hindbrain lateral wall - - - - - - - - thymus primordium - - - A small outgrowth of the pharyngeal epithelium that is the site of lymphocyte cell production[ZFA]. [PMID]. - thymic primordium - thymic rudiment - - - - - - - - gonad primordium - - Portion of tissue that gives rise to the immature gonad. - future gonad - gonadal primordium - immature gonad - primitive gonad - undifferentiated gonad - - - - - - - - facio-acoustic neural crest - - - - Cranial neural crest that gives rise to the facio-acoustic ganglion. - facio acoustic neural crest - - - - - - - - head somite - - - - Somite located in the head region, caudal to the otic vesicle - cranial somite - occipital somite - - - - - - - - lung primordium - - A pair of lateral diverticula just over the liver rudiment representing the primordia of the lungs, formed by the floor of the foregut just anterior to the liver diverticulum. - lateral diverticula - lung diverticulum - lung endoderm - - - - - - - - trunk somite - - A somite that is part of a trunk. - - - - - - - - dorsal mesogastrium - - The portion of mesentery attached to the greater curvature of the stomach is named the dorsal mesentery (or dorsal mesogastrium, when referring to the portion at the stomach), and the part which suspends the colon is termed the mesocolon. The dorsal mesogastrium develops into the greater omentum. - dorsal mesentery - - - - - - - - extrahepatic part of hepatic duct - - extrahepatic part of the hepatic duct - hepatic duct extrahepatic part - - - - - - - - right dorsal aorta - - - - - - - - - - vascular plexus - - A vascular network formed by frequent anastomoses between the blood vessels (arteries or veins) of a part. - plexus vasculosus - - - - - - - - extraembryonic membrane - - Intrinsic membrane that arises from embryonic germ layers and grow to surround the developing embryo. - - - - - - - - caecum epithelium - - An epithelium that is part of a caecum. - - - - - - - - pyloric region epithelium - - An epithelium that is part of a pylorus. - - - - - - - - anterior chamber epithelium - - An epithelium that is part of a anterior chamber of eyeball. - - - - - - - - obsolete otocyst epithelium - true - - - - - - - - lens vesicle epithelium - - An epithelium that is part of a lens vesicle. - - - - - - - - 2nd arch ectoderm - - 2nd pharyngeal arch ectoderm - An ectoderm that is part of a pharyngeal arch 2. - - - - - - - - 2nd arch endoderm - - 2nd pharyngeal arch endoderm - An endoderm that is part of a pharyngeal arch 2. - - - - - - - - connecting stalk mesoderm - - - - - - - - - - caecum mesentery - - A mesentery that is part of a caecum. - - - - - - - - midgut dorsal mesentery - - A dorsal mesentery that is part of a midgut. - - - - - - - - caecum dorsal mesentery - - A dorsal mesentery that is part of a caecum. - - - - - - - - 2nd arch mesenchyme - - 2nd branchial arch mesenchyme - 2nd pharyngeal arch mesenchyme - Mesenchyme that is part of a pharyngeal arch 2. - pharyngeal arch 2 mesenchyme - - - - - - - - optic eminence mesenchyme - - - Mesenchyme that is part of a optic eminence. - - - - - - - - foregut duodenum mesentery - - - A mesentery of duodenum that is part of a foregut. - - - - - - - - midgut duodenum mesentery - - - - A mesentery of duodenum that is part of a midgut. - - - - - - - - footplate apical ectodermal ridge - - An apical ectodermal ridge that is part of a footplate. - - - - - - - - hindbrain venous system - - - A venous system that is part of a hindbrain. - rhombencephalon venous system - - - - - - - - pronephric mesoderm - - - A mesoderm that has the potential to develop into a pronephros. - pronephric anlage - pronephric bulge - pronephric mesenchyme - pronephric primordium - - - - - - - - olfactory system - - A sensory system that is capable of olfacttion (the sensory perception of smell). - - - - - - - - chemosensory system - - - - - - - - - extraembryonic mesoderm - - - - . - extra-embryonic mesoderm - extraembryonic mesenchyme - - - - - - - - pectoral appendage field - - - A limb/fin field that has the potential to develop into a pectoral appendage bud mesenchyme. - pectoral appendage field of lateral plate mesoderm - pectoral fin field - - - - - - - - pelvic appendage field - - - A limb/fin field that has the potential to develop into a pelvic appendage bud mesenchyme. - pelvic appendage field of lateral plate mesoderm - pelvic fin field - - - - - - - - paired limb/fin field - - - - - A ring of cells capable of forming a limb or paired fin[Gilbert,modified]. - limb/fin field of lateral plate mesoderm - paired limb/fin field - - - - - - - - tunica adventitia of blood vessel - - - The outermost layer of a blood vessel, composed mainly of fibrous tissue. - adventitia externa - external coat - tunica adventitia - tunica adventitia of vessel - tunica adventitia vasorum - tunica externa vasorum - - - - - - - - tunica intima of artery - - - A tunica intima that is part of a artery. - arterial intima - tunica interna (intima)(arteriae) - - - - - - - - adventitia - - An outermost connective tissue covering of an organ, vessel, or other structure[WP]. - tunica advetitia - tunica externa - - - - - - - - bone foramen - - Anatomical space that is an opening in a bone, usually for passage of blood vessels or nerves. - foramen - foramens@fr - foramina@fr - - - - - - - - glomerular tuft - - - The capillary loops of the kidney that normally function as a filtration unit[MP]. - glomerular capillary tuft - glomerulus - - - - - - - - glomerular parietal epithelium - - - A single layer of simple squamous epithelium in the glomerular capsule. Does not function in filtration[UBERON]. outer layer of the glomerular capsule composed of a single layer of simple squamous epithelium[MP] - Bowman's parietal epithelium - capsular epithelium - glomerular capsule parietal layer - kidney parietal epithelium - outer layer of glomerular capsule - parietal capsular epithelium - parietal epithelial layer - parietal epithelium of Bowman's capsule - parietal layer of Bowman capsule - parietal layer of Bowman's capsule - parietal layer of glomerular capsule - renal glomerular capsule epithelium - - - - - - - - visceral layer of glomerular capsule - - Bowman's visceral epithelium - The inner, or visceral, layer of the renal glomerular capsule, overlying the capillaries, composed of podocytes, and separated from the outer, or parietal, layer by the capsular (Bowman's) space[BTO]. Lies just above the thickened glomerular basement membrane and is made of podocytes. Beneath the visceral layer lie the glomerular capillaries[WP]. inner layer of the glomerular capsule surrounding the capillary endothelial cells and composed of highly specialized epithelial cells (podocytes) that are separated by filtration slits; the visceral layer is separated from the outer parietal layer by the urinary space (also known as the Bowman's or capsular space)[MP] - glomerular capsule visceral layer - inner epithelial layer of Bowman's capsule - podocyte layer of Bowman's capsule - visceral epithelium of Bowman's capsule - visceral layer of Bowman's capsule - visceral layer of glomerular capsule - - - - - - - - caudal part of nephrogenic cord - - The metanephros develops from the most caudal part of the nephrogenic cord that is itself derived from the intermediate plate mesoderm. - caudal portion of nephrogenic cord - caudal region of nephrogenic cord - rear part of nephrogenic cord - rear portion of nephrogenic cord - - - - - - - - rostral part of nephrogenic cord - - The initial renal anlage that develops from the most rostral part of the nephrogenic cord is termed the pronephros. - - - - - - - - urorectal septum - - The ridge of mesoderm covered with endoderm that in the early developing embryo partitions the endodermal cloaca into the primary urogenital sinus (ventrally) and the anorectal canal of the hindgut (dorsally); the urorectal septum eventually fuses with the cloacal membrane, dividing it into a dorsal anal membrane and a larger ventral urogenital membrane - this area of fusion is represented in the adult by the perineal body[MP]. - cloacal septum - septum urorectale - urorectal fold - urorectal membrane - - - - - - - - acellular membrane - - A acellular anatomical structure that is the bounding layer of a anatomical structure. - - - - - - - - basement membrane of epithelium - - An acellular membrane that is part of the epithelium, lies adjacent to the epithelial cells, and is the fusion of the the basal lamina and the reticular lamina. - basement membrane - basement membrane of connective tissue - membrana basalis - - - - - - - - glomerular basement membrane - - - GBM - glomerular capillary basement membrane - glomerular filtration membrane - the layer of extracellular matrix that lies between the endothelium of the glomerular capillaries and the podocytes of the inner or visceral layer of the Bowman capsule; it is a fusion of the endothelial cell and podocyte basal laminas and acts as a physical barrier and an ion-selective filter - - - - - - - - nephric ridge - - Nephric tubules (nephrons) form embryonically along the nephric ridge. The ridge comprises three regions; anterior, middle and posterior. The functional kidney uses nephrons from only one or two regions of the ridge. A pronephric kidney uses only the nephrons from the anterior region of the ridge. A mesonephric kidney uses only the middle region, a metanephric kidney uses only the posterior region and an opisthonephric kidney uses the middle and posterior regions. - nephric cord - - - - - - - - embryonic uterus - - fetal uterus - - - - - - - - section of aorta - - - Any portion of the aorta including the ascending and descending aorta, and aortic arch or a portion of the aortic orifice of the left ventricle. - aortic section - aortic segment - portion of aorta - segment of aorta - - - - - - - - dorsal aorta - - - DA - The dorsal aorta is a blood vessel in a single-pass circulatory system that carries oxygenated blood from the gills to the rest of the body. In a single-pass circulatory system blood passes once through the heart to supply the body once. - aorta dorsalis - aortae dorsales - dorsal aorta root - dorsal aortae - dorsal aortic root - dorsal aortæ - - - - - - - - portal system - - In the circulatory system of animals, a portal venous system occurs when a capillary bed drains into another capillary bed through veins, without first going through the heart. Both capillary beds and the blood vessels that connect them are considered part of the portal venous system. They are relatively uncommon as the majority of capillary beds drain into veins which then drain into the heart, not into another capillary bed. Portal venous systems are considered venous because the blood vessels that join the two capillary beds are either veins or venules. Examples of such systems include the hepatic portal system and the hypophyseal portal system. Unqualified, 'portal venous system' often refers to the hepatic portal system. For this reason, 'portal vein' most commonly refers to the hepatic portal vein[WP]. - portal venous system - - - - - - - - bone tissue of long bone - - A bone tissue that is part of a long bone. - osseous tissue of long bone - - - - - - - - developing mesenchymal condensation - - - A delimited region of dense mesenchyme within looser mesenchyme. - mesenchyme condensation - - - - - - - - cartilaginous condensation - - Cell condensation that is an aggregation of mesenchymal cells that are committed to differentiate into chondroblasts and chondrocytes. - cartilage condensation - cartilagenous condensation - chondrogenic condensation - - - - - - - - pre-muscle condensation - - pre muscle mass - premuscle mass - - - - - - - - pre-cartilage condensation - - - A delimited region of dense mesenchyme within looser mesenchyme whose cells are committed to become chondroblasts. - pre-chondrogenic condensation - precartilage condensation - precartilagenous condensation - prechondrogenic condensation - - - - - - - - mandibular prominence - - mandibular process - mandibular swelling - prominentia mandibularis - the paired ventral prominences formed by bifurcation of the first pharyngeal arches in the embryo; the two prominences unite ventrally and fuse to form the mandible and lower lip - - - - - - - - olfactory pit - - An indentation of the olfactory placode which ends when the pits hollows out to form the nasopharynx[GO]. - nasal pit - - - - - - - - 1st arch pharyngeal cleft - - 1st arch branchial groove - 1st arch groove ectoderm - 1st branchial cleft - 1st pharyngeal cleft - 1st pharyngeal groove - 1st pharyngeal groove ectoderm - A groove that is situated between the 1st and 2nd pharyngeal arch. - branchial groove of 1st arch - - - - - - - - undifferentiated genital tubercle - - genital tubercle - phallic tubercle - the embryonic anlage of the external genitalia, which emerges as paired swellings ventral to the cloacal membrane, is proposed to be derived from all three germ layers, and gives rise to the penis, clitoris, scrotum, labia, and foreskin - tuberculum genitale - tuberculum phallicum - undifferentiated genital tubercle - - - - - - - - pharyngeal cleft - - - An external pocketing of pharyngeal ectoderm that contacts a region of endoderm (a pharyngeal pouch) and interdigitates in the anterior and posterior directions by the pharyngeal arches. - Kiemenspalten - branchial cleft - branchial groove - gill cleft - pharyngeal ectodermal cleft - pharyngeal groove - pharyngeal groove ectoderm - pharyngeal slit - sulcus pharyngei - - - - - - - - autopodial extension - - A subdivision of the autopod that corresponds to one or more bones arranged in series branching from the main limb axis. - digit or predigit - limb outgrowth - - - - - - - - neural tube lateral wall mantle layer - - - - - - - - - coelomic epithelium - - The epithelial lining of the surface of the coelom. - celomic epithelium - germinal epithelium of Waldeyer - - - - - - - - leg bone - - A bone that is part of the region of the hindlimb that includes the zeugopod and stylopod. Examples: patella, femur, tibia. Counter-examples: any pes phalanx - - - - - - - - manus bone - - - A bone that is part of the manus skeleton. Note that this includes the carpal bones. - bone of hand - bone of hand skeleton - bone of manus - bone of pectoral limb autopod - bone of pectoral limb autopodium - forelimb autopod bone - forelimb autopodium bone - hand bone - - - - - - - - pes bone - - - A bone that is part of the pes skeleton - bone of foor proper or tarsal skeleton - bone of foot - bone of pedal skeleton - bone of pes - foot bone - - - - - - - - duct of seminal vesicle - - - Each seminal vesicle consists of a single tube, coiled upon itself, and giving off several irregular cecal diverticula; the separate coils, as well as the diverticula, are connected together by fibrous tissue. When uncoiled, the tube is about the diameter of a quill, and varies in length from 10 to 15 cm.; it ends posteriorly in a cul-de-sac; its anterior extremity becomes constricted into a narrow straight duct called the excretory duct of seminal gland (or duct of the seminal vesicle), which joins with the corresponding ductus deferens to form the ejaculatory duct[WP]. - ductus excretorius (vesicula seminalis) - ductus excretorius glandulae vesiculosae - ductus excretorius glandulae vesiculosae - excretory duct of seminal gland - seminal vesicle duct - - - - - - - - duct of male reproductive system - - - Any of the ducts that are part of a male reproductive system. - - - - - - - - serous sac - - Organ with organ cavity, which has as parts a serous membrane and a serous cavity . Examples: pleural sac, pericardial sac, tendon sheath, bursa.[FMA] - - - - - - - - conjunctival sac - - - A serous sac which is the aggregate of the conjunctiva plus the conjunctival space - conjunctiva serous sac - subbrillar sac - - - - - - - - obsolete transitional epithelium - See urothelium. - true - - - - - - - - endo-epithelium - - - Epithelium that derives from the endoderm. Examples: urothelium, transitional epithelium of ureter, epithelium of prostatic gland.[FMA] - endoderm-derived epithelium - endoepithelium - - - - - - - - zone of bone organ - - bone organ zone - - - - - - - - external naris - - - - A naris that provides one of the small external openings of the head that give passage to air for breathing. - anterior nares - anterior naris - blowhole - external nares - naris - nostril - - - - - - - - bulb of hair follicle - - - - Thickening of the proximal end of the hair follicle. Contains rapidly proliferating, rather undifferentiated matrix cells (transient amplifying cells), melanocytes and outer root sheath cells. - coat hair bulb - hair bulb - hair follicle bulb - - - - - - - - hair root sheath - - - - . - - - - - - - - hair inner root sheath - - A multilayered tube composed of terminally differentiated hair follicle keratinocytes that is surrounded by the outer root sheath; the layers of the inner root sheath include the companion layer, Henle's layer, Huxley's layer and the inner root sheath cuticle[MP]. - hair follicle inner root sheath - inner root sheath - inner root sheath of hair follicle - inner sheath of hair follicle - internal root sheath of hair follicle - - - - - - - - hair outer root sheath - - A stratified epithelium that surrounds the hair follicle that merges proximally with the basal layer of the interfollicular epidermis and distally with the hair bulb. - ORS - external root sheath of hair follicle - hair follicle outer root sheath - outer hair sheath - outer root sheath - outer root sheath of hair follicle - - - - - - - - axial skeleton plus cranial skeleton - - Subdivision of skeleton which consists of cranial skeleton, set of all vertebrae, set of all ribs and sternum[FMA, modified]. - skeleton axiale - - - - - - - - outflow tract of atrium - - An outflow tract that is part of a cardiac atrium. - outflow part of atrium - - - - - - - - outflow part of right ventricle - - Anteriosuperior, smooth-walled portion of the cavity of the right ventricle, beginning at the supraventricular crest and terminating in the pulmonary trunk - RVOT - arterial cone - conus arteriosus - conus arteriosus (infundibulum) - infundibulum - infundibulum of right ventricle - outflow tract of right ventricle - pulmonary cone - pulmonary conus - pulmonary conus - right ventricle pulmonary outflow tract - right ventricular outflow tract - - - - - - - - outflow part of left ventricle - - Anterosuperior fibrous portion of the left ventricle that connects to the ascending aorta. - LVOT - Sibson vestibule - aortic vestibule - heart left ventricle outflow tract - left ventricular outflow - left ventricular outflow tract - outflow tract of left ventricle - vestibulum aortae - - - - - - - - eye trabecular meshwork - - - A pore-like structure surrounding the entire circumference of the anterior chamber of the eye through which aqueous humor circulates[MP]. - Hueck's ligament - cribiform ligament - eye trabecular meshwork - iridis - ligamentum peactin-tum iridis - ligamentum pectinatum - ligamentum pectinatum anguli iridocornealis - ligamentum pectinatum iridis - pectinate ligament - pectinate ligament of iris - reticulum trabeculare - reticulum trabeculare sclerae - scleral trabeculae - scleral trabecular - scleral trabecule - scribiform ligament - trabecular mesh - trabecular meshwork - trabecular meshwork of the eye - - - - - - - - amniotic fold - - A sheet of somatopleure that grows upward over the embryo and eventually meets in the midline enclosing the embryo, eventually giving rise to the amnion and chorion[Kardong]. - amnionic fold - - - - - - - - heart layer - - - The laminar structure of the heart - - - - - - - - coronary vessel - - - Any of the arteries or veins that supply blood to the heart or return blood from the heart muscles to the circulation - - - - - - - - left branch of atrioventricular bundle - - - - The left branch of the atrioventricular bundle that separates at the bundle of His, descends the septal wall of the left ventricle and connects to the terminal Purkinje fiber[MP]. - crus sinistrum (fasciculi atrioventricularis) - crus sinistrum fasciculi atrioventricularis - left bundle branch - left bundle branch of bundle of His - left bundle of atrioventricular bundle - left crus of atrioventricular bundle - left posterior branch - left posterior bundle - - - - - - - - right branch of atrioventricular bundle - - - - The right branch of the atrioventricular bundle that separates just below the bundle of His, descends the septal wall of the right ventricle and connects to the terminal Purkinje fibers[MP]. - crus dextrum (fasciculi atrioventricularis) - crus dextrum fasciculi atrioventricularis - right bundle - right bundle branch - right bundle branch of bundle of His - right right crus of atrioventricular bundle - right ventricular bundle - - - - - - - - integumentary adnexa - - Anatomical structure embedded in or located in the integument that is part of the integumental system. Examples: hair, follicles, skin glands, claws, nails, feathers. - adnexae cutis - body hair or bristle - skin adnexa - skin adnexal structure - skin appendage - - - - - - - - hair follicle matrix region - - The bulb region adjacent to the dermal papilla that contains rapidly proliferating matrix cells that give rise to the various cell lineages of the hair shaft and inner root sheath - germinal matrix of hair bulb - lower part of bulb of hair follicle - lower zone of bulb of hair follicle - - - - - - - - fibrous ring of heart - - - - A ring of ribrous tissue that surrounds the atrioventricular and arterial orifices - Lower's ring - annulus fibrosus cordis - anulus fibrosus cordis - anulus fibrosus of heart - aortic annulus - atrioventricular ring - coronary tendon - fibrous ring of heart - - - - - - - - multi-limb segment region - - A collection of two or more connected limb segments. Examples: arm (comprising stylopod and zeugopod regions). - - - - - - - - musculature of hindlimb zeugopod - - Any collection of muscles that is part of a hindlimb zeugopod. - leg musculature - muscle group of leg - set of muscles of leg - - - - - - - - fundus of urinary bladder - - - The base or posterior surface of the urinary bladder contains the trigone of the bladder and the outlet where urine empties through the internal urethral orifice. - base of urinary bladder - bladder dome - fundus of bladder - fundus vesicae - urinary bladder base - urinary bladder fundus - urinary bladder fundus region - - - - - - - - basal nuclear complex - - - The deep nuclei of telencephalic origin found in the basal region of the forebrain - basal ganglia - basal ganglia (anatomic) - basal nuclei - basal nuclei of the forebrain - corpus striatum (Savel'ev) - ganglia basales - - - - - - - - funiculus of spinal cord - - A funiculus of neuraxis that is part of a spinal cord. - spinal cord funiculus - white column of spinal cord - - - - - - - - funiculus of neuraxis - - - The cerebrospinal nerves consist of numerous nerve fibers collected together and enclosed in membranous sheaths. A small bundle of fibers, enclosed in a tubular sheath, is called a funiculus; if the nerve is of small size, it may consist only of a single funiculus; but if large, the funiculi are collected together into larger bundles or fasciculi, which are bound together in a common membranous investment. Examples include: Anterior funiculus of the spinal cord Lateral funiculus of the spinal cord Posterior funiculus of the spinal cord Funiculus solitarius of the medulla Funiculus separans - - - - - - - - pronephric proximal tubule - - - pronephros proximal tubule - - - - - - - - pronephric distal tubule - - - - - - - - - - mesonephric glomerular mesangium - - The mesonephric glomerular mesangium is the thin membrane connective tissue composed of mesangial cells in the mesonephros, which helps to support the capillary loops in a renal glomerulus - - - - - - - - mesonephric glomerular capillary - - . - - - - - - - - mesonephric connecting tubule - - - - The mesonephric connecting tubule is a tubular segment of the mesonephric nephron; it connects the distal tubule to the collecting duct in the mesonephros - - - - - - - - mesonephric distal tubule - - - - The mesonephric distal tubule is a mesonephric nephron tubule that begins at the macula densa and extends to the mesonephric connecting tubule - - - - - - - - mesonephric proximal tubule - - - - The mesonephric proximal tubule extends from the capsule to the distal tubule - - - - - - - - auditory hillocks - - A collection of protruberances derived from pharyngeal arches 1 and 2 that develop into the folds of the pinna and gradually shift upwards and backwards to their final position on the head. - auditory hillock of Hiss - auditory tubercles - auricular hillock - hillock of Hiss - - - - - - - - buccopharyngeal membrane - - The thin bilaminar membrane derived from the prechordal plate that is devoid of mesoderm and formed by the apposition of the stomodeal ectoderm with the foregut endoderm; after the embryonic head fold has evolved it lies at the caudal limit of the stomodeum, forming a septum between the primitive mouth and pharynx; the membrane eventually disappears, and thus a communication is established between the mouth and the future pharynx. - oral membrane - oral plate - oropharyngeal membrane - pharyngeal membrane - - - - - - - - rhombic lip - - - cerebellar anlage - cerebellar primordium - cerebellum primordium - dorsal part of alar plate of metencephalon - future cerebellum - presumptive cerebellum - rostral rhombic lip - the posterior section of the developing metencephalon recognized transiently within the vertebrate embryo; the rhombic lip extends posteriorly from the roof of the fourth ventricle to dorsal neuroepithelial cell and can be divided into eight structural units based on rhombomeres 1-8 (r1-r8), recognized at early stages of hindbrain development; producing granule cells and five brainstem nuclei, the rhombic lip plays an important role in developing a complex cerebellar neural system - - - - - - - - future diencephalon - - The foremost region of the future forebrain that develops into the diencephalon. - presumptive diencephalon - - - - - - - - facio-acoustic VII-VIII preganglion complex - - facio-acoustic preganglion complex - - - - - - - - femur pre-cartilage condensation - - - - - A femur endochondral element that is composed primarily of a pre-cartilage condensation. - femoral pre-cartilage condensation - - - - - - - - foregut-midgut junction - - An anatomical junctions that overlaps the foregut and midgut. - - - - - - - - future brain - - The embryonic precursor of the brain. - brain rudiment - embryonic brain - encephalon - presumptive brain - - - - - - - - future forebrain - - A presumptive structure that has the potential to develop into a forebrain. - future prosencephalon - presumptive forebrain - presumptive prosencephalon - prosencephalon - - - - - - - - future spinal cord - - presumptive spinal cord - presumptive spinal cord neural keel - presumptive spinal cord neural plate - presumptive spinal cord neural rod - - - - - - - - gall bladder primordium - - - A sac-like cavity ventral to the liver, lying in the sub-mesodermal space and closed by a thin sheet of ectodermal cells, from which the future gall bladder develops. - - - - - - - - knee joint primordium - - - - - - - - - - mouth-foregut junction - - An anatomical junctions that overlaps the mouth and foregut. - - - - - - - - nasolacrimal groove - - - - Groove between maxillary prominence and lateral nasal process. - naso-lacrimal groove - s. lacrimalis maxillae - - - - - - - - notochordal plate - - - - - The notochordal plate is the dorsal part of the notochordal process when the ventral portion breaks down. It is continuous laterally with the endoderm that composes the roof of the primitive foregut and is in contact dorsally with the neural tube. The folding off of the notochordal plate gives rise to the notochord. - - - - - - - - notochordal process - - A midline cellular cord formed from the migration of mesenchymal cells from the primitive knot - chordamesoderm - presumptive notochord - - - - - - - - otic pit - - otic cup - the pair of depressions of thickened otic placode epithelium, that further develops into the otic vesicles - - - - - - - - pleuroperitoneal canal - - - Each of the canals that links the peritoneal cavity and the caudal part of a pleural cavity. - pleuroperitoneal channel - - - - - - - - future cardiac ventricle - - Multi-tissue structure that is part of the heart tube and will become the cardiac ventricle. - early heart ventricle - embryonic heart ventricle - embryonic ventricle - future heart ventricle - presumptive cardiac ventricle heart tube - primitive ventricle - primitive ventricle of heart - primordial cardiac ventricle - primordial ventricle - - - - - - - - early prosencephalic vesicle - - forebrain ventricle - forebrain vesicle - future brain vesicle that gives rise to telencephalic ventricle/lateral ventricles and 3rd ventricle - preevaginated forebrain vesicle - prosencephalic ventricle - prosencephalic vesicle - - - - - - - - spleen primordium - - - - - - A dense syncitial-like mesenchymal thickening in the dorsal mesogastrium[ISBN]. the embryonic connective tissue made up of loosely aggregated mesenchymal cells, supported by interlaminar jelly, that gives rise to the developing spleen[MP]. - left spleen primordium - spleen mesenchyme - splenic mesenchyme - splenic primordium - - - - - - - - chamber of eyeball - - - A segment of the eyeball that is filled with refractive media - chamber of eye - eye chamber - eyeball chamber - - - - - - - - ocular refractive media - - Body substance in a liquid or semi-solid state in the eyeball which serves to refract light. - - - - - - - - bodily fluid - - Liquid components of living organisms. includes fluids that are excreted or secreted from the body as well as body water that normally is not. - body fluid - fluid - - - - - - - - brainstem nucleus - - A nucleus of brain that is part of a brainstem. - brain stem nucleus - - - - - - - - posterior lateral line - - - One of eight distinct lateral lines in the 4-day larva. A sensory system on the surface of the fish, consisting of small sensory patches (neuromasts) distributed in discrete lines over the body surface. The lateral line system is stimulated by local water displacements and vibrations, and detects propulsion of the fish through the water, as well as facilitating shoaling, prey capture, and predator and obstacle avoidance. - pll - - - - - - - - lateral ventricle choroid plexus stroma - - A choroid plexus stroma that is part of a lateral ventricle. - - - - - - - - fourth ventricle choroid plexus stroma - - A choroid plexus stroma that is part of a fourth ventricle. - - - - - - - - outer renal medulla peritubular capillary - - A peritubular capillary that is part of a outer medulla of kidney. - kidney outer medulla peritubular capillary - - - - - - - - communicating artery - - An artery that connects two larger arteries. - - - - - - - - premacula segment of distal straight tubule - - . - distal straight tubule premacula segment - kidney medulla loop of Henle ascending limb thick segment - medullary thick ascending limb of Henle's loop - renal medulla loop of Henle ascending limb thick segment - renal medulla thick ascending limb - - - - - - - - os penis - - - baculum - os baculum - penile bone - penis bone - the unique bone located in the glans penis of most mammals except humans; it is used for copulation and varies in size and shape by species - - - - - - - - annulus fibrosus - - A ring of fibrous or fibrocartilaginous tissue (as of an intervertebral disk or surrounding an orifice of the heart). - anulus - anulus fibrosus - fibrocartilaginous ring - fibrous ring - - - - - - - - alveolar system - - - System pertaining to a bronchus and alveoli. - bronchoalveolar system - pulmonary alveolar system - - - - - - - - renal convoluted tubule - - Any region of a nephron tubule that is convoluted. Examples: distal convoluted tubule, proximal convoluted tuble. - convoluted tubule - kidney convoluted tubule - - - - - - - - mammary gland fluid/secretion - - A substance that is secreted by a mammary gland. The substance may differ depending on phase, with colostrum produced during pregancy/early lactation, and milk produced afterwards. - lactiferous gland fluid - lactiferous gland secretion - mammary gland fluid - mammary gland secreted fluid - mammary gland secretion - secretion of mammary gland - - - - - - - - outer medulla inner stripe loop of Henle - - A loop of Henle that is part of a kidney outer medulla inner stripe. - - - - - - - - outer medulla outer stripe loop of Henle - - A loop of Henle that is part of a kidney outer medulla outer stripe. - - - - - - - - kidney vasculature - - - A vasculature that is part of a kidney. - - - - - - - - renal duct - - A tube in the kidney that collect and transport urine. - - - - - - - - obsolete urinary system structure - true - - - - - - - - excretory tube - - A tube that is part of a excretory system. - - - - - - - - lymphatic part of lymphoid system - - An organ system subdivision that is a network of vessels capable of removing accumulating protein and fluid from the interstitial space and returning it to the vascular space. In some species, this network is connected to the immune system via lymph nodes and lymphocyte-producing organs, with the whole being the lymphoid system. - lymphatic system - lymphatic tree system - lymporeticular system - - - - - - - - non-lymphatic part of lymphoid system - - An organ system subdivision that is the part of the lymphoid system that excludes the lymphatic vessels.. - non-lymphatic lymphoid system - - - - - - - - pharynx - - The pharynx is the part of the digestive system immediately posterior to the mouth[GO]. - anterior part of foregut - pharyngeal tube - - - - - - - - left ventricle myocardium - - A myocardium that is part of a left ventricle of a heart. - left ventricular myocardium - myocardium of left ventricle - - - - - - - - right ventricle myocardium - - A myocardium that is part of a right ventricle of a heart. - myocardium of right ventricle - right ventricular myocardium - - - - - - - - hypothalamic nucleus - - A nucleus of brain that is part of a hypothalamus. - nucleus of hypothalamus - - - - - - - - diencephalic nucleus - - A nucleus of brain that is part of a diencephalon. - - - - - - - - vestibular organ - - An organ that is part of a vestibular system. - balance organ - - - - - - - - presumptive endoderm - - Presumptive structure of the blastula that will develop into endoderm. - - - - - - - - presumptive blood - - future blood - - - - - - - - presumptive structure - - Portion of embryonic tissue determined by fate mapping to become a structure. - future structure - presumptive structures - - - - - - - - presumptive ectoderm - - Presumptive structure of the blastula that will develop into ectoderm. - presumptive epidermis - - - - - - - - presumptive mesoderm - - Presumptive structure of the blastula that will develop into mesoderm. - - - - - - - - venous sinus - - A large vein or channel for the circulation of venous blood - blood sinus - - - - - - - - muscle layer of oviduct - - - - A muscle layer that is part of a fallopian tube. - muscle layer of fallopian tube - muscle layer of oviduct - muscle layer of uterine tube - muscular coat of uterine tube - muscular layer of uterine tube - muscularis of uterine tube - tunica muscularis (Tuba uterina) - tunica muscularis tubae uterinae - uterine tubal muscularis - - - - - - - - adventitia of epididymis - - - - An adventitia that is part of a epididymis. - epididymis adventitia - - - - - - - - muscle layer of epididymis - - - - A muscle layer that is part of a epididymis. - - - - - - - - adventitia of seminal vesicle - - - - An adventitia that is part of a seminal vesicle. - adventitia of seminal gland - seminal vesicle adventitia - tunica adventitia (vesicula seminalis) - tunica adventitia glandulae vesiculosae - - - - - - - - muscular layer of vagina - - - - muscular coat of vagina - tunica muscularis vaginae - vaginal muscularis - - - - - - - - interphalangeal joint - - - A joint that connects one phalanx to another along a proximodistal axis. - inter-phalangeal joint - inter-phalanx joint - - - - - - - - muscular coat - - A region of muscle in many organs in the vertebrate body, adjacent to the submucosa membrane. It is responsible for gut movement such as peristalsis. - muscular coat - muscular layer - muscularis - muscularis externa - muscularis layer - muscularis propria - transverse muscular fibers - tunica externa - tunica muscularis - tunica muscularis - - - - - - - - venous valve - - - A valve that is part of a vein. - valve of vein - - - - - - - - spinal vein - - A vein that is part of a vertebral column. - spinal branch - vena spinalis - - - - - - - - cerebellum vasculature - - A vasculature that is part of a cerebellum. - - - - - - - - autopodial skeleton - - - The collection of all skeletal elements in an autopodium region. - autopod skeleton - autopodial skeleton - autopodium - skeletal parts of autopod - skeleton of autopod - - - - - - - - spiral ligament - - - - A spiral thickening of the fibrous lining of the cochlear wall. Spiral ligament secures the membranous cochlear duct to the bony spiral canal of the cochlea. Its spiral ligament fibrocytes function in conjunction with the stria vascularis to mediate cochlear ion homeostasis. - ligamentum spirale ductus cochlearis - spiral cochlear ligament - spiral ligament of cochlea - spiral ligament of cochlear duct - - - - - - - - corneo-scleral junction - - - cornea limbus - corneal limbus - corneal-scleral limbus - corneoscleral junction - limbus corneae - limbus corneae - sclerocorneal junction - sclerocorneal limbus - the edge of the cornea where it joins the sclera; the limbus is a common site for the occurrence of corneal epithelial neoplasm - - - - - - - - epithelium of conjunctiva - - - Layer of nonkeratinized squamous epithelium lining the conjunctiva, overlying scleral tissue - conjunctiva epithelium - conjunctival epithelium - - - - - - - - glandular epithelium - - An epithelium that is composed primarily of secretory cells. - - - - - - - - areolar connective tissue - - Loose connective tissue located at the outer and inner layers of organs. Examples: submucosal connective tissue, tunica adventitia of artery, papillary dermis, superficial fascia of dorsum of hand. - areolar tissue - loose areolar connective tissue - loose connective tissue - - - - - - - - surface groove - - A furrow or an incomplete tube. - groove - - - - - - - - renal cortex peritubular capillary - - A peritubular capillary that is part of a cortex of kidney. - kidney cortex peritubular capillary - - - - - - - - renal cortex tubule - - A region of nephron tubule that is part of a cortex of kidney. - cortical tubule - kidney cortex tubule - - - - - - - - distal straight tubule postmacula segment - - . - cortical thick ascending limb of Henle's loop - kidney cortex loop of Henle ascending limb thick segment - renal cortex loop of Henle ascending limb thick segment - renal cortex thick ascending limb - - - - - - - - muscular coat of ureter - - - A muscular coat that is part of a ureter. - muscular coat of ureter - muscular layer of ureter - muscularis of ureter - tunica muscularis (ureter) - tunica muscularis ureteris - ureteral smooth muscle layer - - - - - - - - adrenal/interrenal gland - - - - This gland can either be a discrete structure located bilaterally above each kidney, or a cluster of cells in the head kidney that perform the functions of the adrenal gland. In either case, this organ consists of two cells types, aminergic chromaffin cells and steroidogenic cortical cells[GO] - adrenal - interrenal gland - adrenal gland - interrenal gland - adrenal gland/interrenal tissue - suprarenal gland - interrenal gland - - - - - - - - diaphysis of femur - - - A diaphysis that is part of a femur[Automatically generated definition]. - body of femur - corpus femoris - femoral diaphysis - femoral shaft - shaft of femur - - - - - - - - proximal metaphysis of femur - - - A proximal metaphysis that is part of a femur. - - - - - - - - metaphysis of femur - - - A metaphysis that is part of a femur. - femoral metaphysis - - - - - - - - terminal part of digestive tract - - The distalmost portion of the digestive tract, derived from the hindgut, and terminating with the anus. - rectal part of digestive tract - rectum - terminal section of digestive tract - - - - - - - - seminal fluid secreting gland - - A gland that secretes a seminal fluid. - - - - - - - - embryonic footplate - - distal part of hindlimb bud - foot disk - foot plate - footplate - the distal elements of the developing limb of vertebrates that will give rise to the pes (foot) - - - - - - - - handplate apical ectodermal ridge - - An apical ectodermal ridge that is part of a handplate. - - - - - - - - embryonic handplate - - distal part of forelimb bud - hand plate - handplate - the distal elements of the developing limb of vertebrates that will give rise to the manus (hand) - - - - - - - - vasculature of organ - - A vasculature that is part of a organ. - organ vasculature - set of blood vessels of organ - - - - - - - - vasculature of liver - - - A vasculature that is part of a liver. - hepatic vascular element - hepatic vasculature - liver vascular element - liver vascular system - - - - - - - - head mesenchyme from mesoderm - - - A head mesenchyme that develops_from a mesoderm. - cranial mesoderm - head mesenchyme derived from mesoderm - head mesenchyme from head mesoderm - head mesenchyme from mesoderm - head mesoderm - mesenchyme derived from head mesoderm - mesenchyme from head mesoderm - - - - - - - - mandibular process mesenchyme - - - Mesenchyme that is part of a mandibular prominence. - mesenchyme of mandibular process - mesenchyme of mandibular prominence - - - - - - - - squamous epithelium - - An epithelium characterised by its most superficial layer consisting of squamous epithelial cells. - - - - - - - - stratified squamous epithelium - - - Multilaminar epithelium which consists of more than one layer of squamous cells only one layer of which is in contact with a basement membrane. Examples: keratinized stratified squamous epithelium, epithelium of wall of esophagus.[FMA] - epithelium stratificatum squamosum - - - - - - - - non-keratinized epithelium of tongue - - - A non-keratinized stratified squamous epithelium that is part of a tongue. - - - - - - - - tongue squamous epithelium - - - - A squamous epithelium that is part of a tongue. - squamous epithelium of tongue - - - - - - - - esophagus squamous epithelium - - - A squamous epithelium that is part of a esophagus. - esophageal squamous epithelium - squamous epithelium of esophagus - squamous oesophageal epithelium - - - - - - - - stomach squamous epithelium - - - A squamous epithelium that is part of a stomach. - - - - - - - - cervix squamous epithelium - - - The squamous epithelium of the cervical portio is similar to that of the vagina, except that it is generally smooth and lacks rete pegs. Colposcopically, it appears featureless except for a fine network of vessels which is sometimes visible. The relative opacity and pale pink coloration of the squamous epithelium derives from its multi-layered histology and the location of its supporting vessels below the basement membrane. - cervical squamous epithelium - - - - - - - - vagina squamous epithelium - - - A squamous epithelium that is part of a vagina. - vaginal squamous epithelium - - - - - - - - stomach glandular epithelium - - - A glandular epithelium that lines the stomach. The stomach's glandular epithelium is characterized by the presence of gastric glands. - epithelium of gastric gland - gastric gland epithelium - - - - - - - - digestive gland - - - A gland, such as the liver or pancreas, that secretes into the alimentary canal substances necessary for digestion. - digestive system gland - - - - - - - - glandular columnar epithelium - - - Simple columnar epithelium that constitutes the secretory part of a gland. Examples: epithelium of stomach, luminal epithelium of lactiferous duct.[FMA] - - - - - - - - stomach glandular region mucosa - - stomach glandular region glandular mucous membrane - stomach mucosa that is lined with glandular epithelium and part of a stomach glandular region. - - - - - - - - vestibular epithelium - - - An epithelium that is part of a vestibular labyrinth. - epithelium of vestibular labyrinth - inner ear vestibular component epithelium - vestibular sensory epithelium - - - - - - - - sensory epithelium - - Simple columnar epithelium made up of cells specialized to serve as sensory cells for the reception of external stimuli, as the sensory cells of the cochlea, vestibule, nasal mucosa, and tongue. - neuroepithelium - - - - - - - - crista ampullaris neuroepithelium - - An epithelium that is part of a crista ampullaris. - ampullary crest neuroepithelium - epithelium of crista of ampulla of semicircular duct of membranous labyrinth - - - - - - - - inner ear epithelium - - - the epithelial cell layer containing the sensory hair cells and their associated sensory nerve terminals - - - - - - - - pinna surface epithelium - - An epithelium that is part of a pinna. - - - - - - - - male genital duct - - - A duct or series of ducts that transports sperm from the gonad. In mammals this is from the seminiferous tubules through rete testis, vas efferentia, epididymis, vas deferens, ejeculatory duct to the urethra. - sperm duct - sperm ducts - - - - - - - - uterine epithelium - - An epithelium that is part of a uterus. - uterus epithelium - - - - - - - - ovary stroma - - - The stroma of the ovary is a peculiar soft tissue, abundantly supplied with blood vessels, consisting for the most part of spindle-shaped cells with a small amount of ordinary connective tissue. These cells have been regarded by some anatomists as unstriped muscle cells, which, indeed, they most resemble; by others as connective-tissue cells. On the surface of the organ this tissue is much condensed, and forms a layer composed of short connective-tissue fibers, with fusiform cells between them. The stroma of the ovary may contain interstitial cells resembling those of the testis. - interstitial tissue of ovary - ovarian stroma - ovary stroma - stroma of the ovary - stroma ovarica - stroma ovarii - - - - - - - - pars distalis of adenohypophysis - - DHP - The distal part of adenohypophysis: the part that makes up the main body of the gland. - anterior lobe - distal part of hypophysis - distal part of the hypophysis - pars anterior - pars anterior of adenohypophysis - pars distalis - pars distalis (glandula pituitaria) - pars distalis (hypophysis) - pars distalis adenohypophyseos - pars distalis adenohypophysis - pars distalis lobi anterioris hypophyseos - pars distalis of anterior lobe of pituitary gland - pars glandularis - pars glandularis of adenohypophysis - - - - - - - - vascular cord - - The vascular cord is the primordial vasculature that will develop into blood vessels by the process of tubulogenesis[GO]. The vascular cord is composed of angioblast or vascular endothelial cells in a solid linear mass called a cord. The cord then undergoes tubulogenesis to form the lumen of the vessels[ZFA]. - - - - - - - - coronary capillary - - - A capillary that is part of the coronary system. - heart capillary - - - - - - - - anatomical surface - - A two dimensional anatomical structure that is the boundary between an anatomical structure and an anatomical substance, an anatomical space or the organism's environment. Examples include the surface of your skin, the surface of the lining of your gut; the surface of the endothelium of you aorta that is in contact with blood.n - - - - - - - - cardiogenic splanchnic mesoderm - - - The splanchnic mesoderm in the cardiogenic region where the heart develops; it gives rise to endocardial heart tubes that fuse to form the primordial cardiac tube, the heart primordium[web]. Two migratory heart primordia that move ventrally during the course of neurulation, and then fuse[XAO]. - cardiac mesoderm - cardiogenic mesoderm - cardiogenic region - cardiogenic splanchnopleure - heart primordia - - - - - - - - cleaving embryo - - Organism at the cleavage stage. - - - - - - - - presumptive gut - - embryonic digestive tube - future digestive tract - future digestive tube - future gut - primitive gut - primordial digestive tube - primordial gut - - - - - - - - mechanosensory system - - - - - - - - - mandibular neural crest - - Cranial neural crest that migrates into the mandibular arch. - - - - - - - - hyoid neural crest - - Cranial neural crest that migrates into the hyoid arch. - hyoid crest - - - - - - - - primary circulatory organ - - A hollow, muscular organ, which, by contracting rhythmically, keeps up the circulation of the blood or analogs[GO,modified]. - adult heart - dorsal tube - heart - - - - - - - - meconium - - A dark greenish mass that accumulates in the bowel during fetal life and is discharged shortly after birth. - - - - - - - - neck of femur - - - - The femur neck or neck of the femur is a flattened pyramidal process of bone, connecting the femoral head with the femoral shaft, and forming with the latter a wide angle opening medialward. - collum femoris - femoral neck - femur neck - neck of the femur - - - - - - - - pharyngeal pouch 2 - - 2nd arch branchial pouch - 2nd arch branchial pouch endoderm - 2nd arch pouch endoderm - 2nd branchial pouch - 2nd pharyngeal pouch endoderm - A pharyngeal puch that is between the pharyngeal arches 2 and 3. - pharyngeal pouches 2 - second arch pharyngeal pouch - second pharyngeal pouch - second visceral pouch - visceral pouch 2 - - - - - - - - glomeral mesenchyme - - Portion of tissue that consists of the precursors of the pronephric glomus or glomerulus; derived from the medial portion of the pronephric intermediate mesoderm. - corpuscle - glomerulus - - - - - - - - trunk ganglion - - - Ganglion which is located in the trunk. - body ganglion - trunk ganglia - - - - - - - - neural keel - - An intermediate stage (between the neural plate and neural rod) during the early segmentation period in the morphogenesis of the central nervous system primordium; the keel is roughly triangular shaped in cross section. - presumptive central nervous system - - - - - - - - lamina propria of mucosa of colon - - A lamina propria that is part of a colonic mucosa. - colonic lamina propria - lamina propria mucosae of colon - lamina propria of colonic mucosa - lamina propria of colonic mucous membrane - - - - - - - - serosa of infundibulum of uterine tube - - - A serous membrane that is part of a uterine tube infundibulum. - serosa of infundibulum of fallopian tube - serosa of infundibulum of oviduct - - - - - - - - muscle layer of infundibulum of uterine tube - - - - A muscle layer that is part of a uterine tube infundibulum. - muscle layer of infundibulum of fallopian tube - muscle layer of infundibulum of oviduct - muscularis of infundibulum of uterine tube - - - - - - - - mesothelium of serous pericardium - - A mesothelium that is part of a serous pericardium. - mesothelium of pericardium - pericardial mesothelium - serous pericardium mesothelium - - - - - - - - stroma of bone marrow - - - The stroma of the bone marrow is all tissue not directly involved in the primary function of hematopoiesis. The yellow bone marrow belongs here, and makes the majority of the bone marrow stroma, in addition to stromal cells located in the red bone marrow. Yellow bone marrow is found in the Medullary cavity. Still, the stroma is indirectly involved in hematopoiesis, since it provides the hematopoietic microenvironment that facilitates hematopoiesis by the parenchymal cells. For instance, they generate colony stimulating factors, affecting hematopoiesis. - bone marrow stroma - - - - - - - - tracheobronchial tree - - - The structure from the trachea, bronchi, and bronchioles that forms the airways that supply air to the lungs. The lining of the tracheobronchial tree consists of ciliated columnar epithelial cells. - arbor tracheobronchialis - tracheobronchial system - - - - - - - - hermaphroditic organism - - dioecious organism - hermaphrodite - multicellular organism that can produce both male and female gametes. - - - - - - - - hermaphrodite anatomical structure - - An anatomical structure present only in hermaphrodites. - hermaphrodite-specific - - - - - - - - brachiocephalic vasculature - - The vasculature consisting of brachiocephalic arteries and veins. - - - - - - - - mesenchyme derived from head neural crest - - - Mesenchyme that develops_from a cranial neural crest. - head mesenchyme from cranial neural crest - head mesenchyme from neural crest - head neural crest derived mesenchyme - - - - - - - - mesenchyme derived from trunk neural crest - - - Mesenchyme that develops_from a trunk neural crest. - trunk mesenchyme from neural crest - trunk neural crest derived mesenchyme - - - - - - - - 1st arch mandibular component - - ventral mandibular arch - ventral pharyngeal arch 1 - ventral visceral arch 1 - - - - - - - - 1st arch maxillary component - - - - - - - - - tunica adventitia of artery - - A tunica adventitia that is part of a artery. - arterial adventitia - tunica externa (adventitia)(arteriae) - - - - - - - - tunica adventitia of vein - - A tunica adventitia that is part of a vein. - tunica externa (adventitia)(venae) - venous adventitia - - - - - - - - tunica intima of vein - - - A tunica intima that is part of a vein. - tunica interna (intima)(venae) - venous intima - - - - - - - - nuclear complex of neuraxis - - Gray matter of the central nervous system which is a collection of clustered nuclei. - cluster of neural nuclei - neural nuclei - nuclear complex - - - - - - - - trachea pre-cartilage rings - - - A pre-cartilage condensation that is part of a trachea. - - - - - - - - pectoral appendage musculature - - - Any collection of muscles that is part of a pectoral appendage. - pectoral fin muscle - pectoral fin musculature - - - - - - - - pelvic appendage musculature - - - Any collection of muscles that is part of a pelvic appendage. - pelvic fin musculature - - - - - - - - appendage musculature - - Any collection of muscles that is part of an appendage. - fin musculature - - - - - - - - pectoral appendage skeleton - - Skeletal subdivision consisting of the anterior appendicular limb skeleton, excluding the pectoral girdle. - cheiropterygium - - - - - - - - pelvic appendage skeleton - - The collection of all skeletal elements in a pelvic appendage region. - - - - - - - - presumptive hindbrain - - The rhombencephalon (or hindbrain) is a developmental categorization of portions of the central nervous system in vertebrates. The rhombencephalon can be subdivided in a variable number of transversal swellings called rhombomeres. In the human embryo eight rhombomeres can be distinguished, from caudal to rostral: Rh7-Rh1 and the isthmus (the most rostral rhombomere). A rare disease of the rhombencephalon, 'rhombencephalosynapsis' is characterized by a missing vermis resulting in a fused cerebellum. Patients generally present with cerebellar ataxia. The caudal rhombencephalon has been generally considered as the initiation site for neural tube closure. - embryonic rhombencephalon - future hindbrain - presumptive rhombencephalon - rhombencephalon - - - - - - - - presumptive endocardium - - A presumptive structure that has the potential to develop into a endocardium. - - - - - - - - presumptive segmental plate - - A presumptive structure that has the potential to develop into a presomitic mesoderm. - presumptive segmental plates - - - - - - - - presumptive neural plate - - A presumptive structure that has the potential to develop into a neural plate. - prospective neuroectoderm - prospective vegetal ectoderm - - - - - - - - presumptive paraxial mesoderm - - The part of the blastula that has the potential to develop into a paraxial mesoderm. - future paraxial mesenchyme - future paraxial mesoderm - - - - - - - - presumptive pronephric mesoderm - - A presumptive structure that has the potential to develop into a pronephric mesoderm. - nephron primordium - - - - - - - - pronephric proximal convoluted tubule - - - A proximal convoluted tubule that is part of a pronephros. - - - - - - - - pectoral appendage blood vessel - - A blood vessel that is part of a pectoral appendage. - pectoral fin blood vessel - - - - - - - - appendage blood vessel - - A blood vessel that is part of a limb/fin. - fin blood vessel - limb blood vessel - - - - - - - - pectoral appendage vasculature - - A vasculature that is part of a pectoral appendage. - pectoral fin vasculature - - - - - - - - pharyngeal vasculature - - A vasculature that is part of a chordate pharynx. - branchial vasculature - - - - - - - - appendage vasculature - - A vasculature that is part of a limb/fin. - fin vasculature - - - - - - - - pronephric glomerular capillary - - A glomerular capillary that is part of a pronephros. - - - - - - - - pronephric glomerular basement membrane - - A glomerular basement membrane that is part of a pronephros. - pronephric glomerular filtration membrane - - - - - - - - pancreatic lobule - - - A dense accumulation of exocrine glands in the pancreas often surrounding islets of Langerhans. - lobulus pancreaticus - pancreas lobe - pancreatic lobule - - - - - - - - pancreatic duct - - - A duct that collects and carries secretions of the exocrine pancreas to the intestine. - duct of pancreas - ductus pancreaticus - pancreas duct - - - - - - - - stria vascularis vasculature - - - blood vessels supplying the stria vascularis in the cochlea of the inner ear. - stria vascularis blood vessel - stria vascularis blood vessels - - - - - - - - surface of tongue - - An anatomical surface that is part of a tongue. - tongue surface - - - - - - - - outer epithelium - - - The epidermis is the entire outer epithelial layer of an animal, it may be a single layer that produces an extracellular material (e.g. the cuticle of arthropods) or a complex stratified squamous epithelium, as in the case of many vertebrate species[GO]. - epidermis - epidermis (sensu Metazoa) - hypoderm - hypodermis - outer epidermal layer - outer epithelial layer - - - - - - - - enveloping layer of ectoderm - - - - EVL - Outermost layer of cells surrounding the embryo. - enveloping layer - - - - - - - - appendage lymph vessel - - A lymphatic vessel that is part of a limb/fin. - - - - - - - - pectoral appendage lymph vessel - - A lymphatic vessel that is part of a pectoral appendage. - - - - - - - - pelvic appendage lymph vessel - - A lymphatic vessel that is part of a pelvic appendage. - - - - - - - - paired limb/fin cartilage - - A cartilage tissue that is part of a paired limb or fin. - - - - - - - - pectoral appendage cartilage tissue - - - A cartilage tissue that is part of a pectoral appendage. - pectoral fin cartilage - - - - - - - - pelvic appendage cartilage tissue - - - A cartilage tissue that is part of a pelvic appendage. - pelvic fin cartilage - - - - - - - - nucleus of midbrain tegmentum - - A nucleus of brain that spans a midbrain tegmentum. - tegmental nuclei - tegmental nucleus - - - - - - - - nucleus of midbrain reticular formation - - - A nucleus of midbrain tegmentum that is part of a midbrain reticular formation. - mesencephalic reticular nucleus - midbrain reticular formation nucleus - midbrain reticular nucleus - - - - - - - - lumen of epithelial sac - - The space within an epithelial sphere. - cavity of vesicle - - - - - - - - matrix-based tissue - - A tissue whose predominant feature is extracellular matrix which may or may not be highly hydrated or calcified. - - - - - - - - obsolete developing epithelial placode - OBSOLETE: A domain of columnar epithelium in an embryo that represents the early stage of the development of the epithelial component of a new anatomical structure. - true - - - - - - - - epithelial sac - - - An epithelial tube that is open at one end only. - - - - - - - - epithelial tube open at both ends - - An epithelial tube open at both ends that allows fluid flow. - - - - - - - - arborizing epithelial duct system - - A collection of connected epithelial tubes with a single portal. - arborising epithelial duct system - - - - - - - - epithelial vesicle - - A closed epithelium with a lumen. - - - - - - - - smooth muscle sphincter - - A ring of smooth muscle cells whose contraction closes the opening of the ring. - - - - - - - - dense mesenchyme tissue - - Mesenchyme with little extracellular matrix. - - - - - - - - loose mesenchyme tissue - - Mesenchyme whose cells are embedded in obvious amounts of extracellular matrix. - - - - - - - - migrating mesenchyme population - - Mesenchymal cells that are migrating. - - - - - - - - ciliated columnar oviduct epithelium - - - A ciliated columnar epithelium that is part of a oviduct. - epithelium of uterine tube - uterine tube epithelium - - - - - - - - cuboidal oviduct epithelium - - - A cuboidal epithelium that is part of a oviduct. - - - - - - - - ciliated columnar epithelium - - - Simple columnar epithelium in which the luminal side of the cells bears cilia. Examples: epithelium of trachea, epithelium of uterine tube.[FMA] - - - - - - - - ciliated epithelium - - Epithelium bearing vibratile cilia on the free surface. - - - - - - - - stratified columnar epithelium - - - Stratified columnar epithelia is a rare type of epithelial tissue composed of column shaped cells arranged in multiple layers. Stratified columnar epithelia are found in the ocular conjunctiva of the eye, in parts of the pharynx and anus, the female's uterus, the male urethra and vas deferens. Also found in intralobular ducts in salivary glands.[WP] - epithelium stratificatum columnare - - - - - - - - layer of synovial tissue - - A thin, loose vascular connective tissue that makes up the membranes surrounding joints and the sheaths protecting tendons (particularly flexor tendons in the hands and feet) where they pass over bony prominences. Synovial tissue contains synovial cells, which secrete a viscous liquid called synovial fluid; this liquid contains protein and hyaluronic acid and serves as a lubricant and nutrient for the joint cartilage surfaces[BTO]. Synovial tissue can be found in tendons (tissues that connect muscle to bone), bursae (fluid-filled, cushioning sacs found in spaces between tendons, ligaments, and bones), and the cavity (hollow enclosed area) that separates the bones of a freely movable joint, such as the knee or elbow[BTO]. - stratum synoviale - synovial layer - synovial membrane - synovial tissue - synovium - - - - - - - - synovial cavity of joint - - An anatomical cavity that surrounded_by a synovial joint. - articular cavity (synovial joint) - cavitas articularis (junctura synovialis) - cavity of synovial joint - joint cavity - synovial cavity - - - - - - - - pigment epithelium of eye - - epithelial layer of the retina, ciliary body, or iris composed of cells containing pigment granules. - eye pigment epithelium - - - - - - - - nucleus of medulla oblongata - - - A neural nucleus that is part of a medulla oblongata. - - - - - - - - thoracic lymph node - - - A lymph node that is part of a thorax. Includes lymph nodes of the lungs and mediastinal lymph nodes - deep thoracic lymph node - lymph node of thorax - - - - - - - - future meninx - - A developing mesenchymal capsule that covers the developing brain and spinal cord and is the precursor of the meningeal cluster. In mammals this gives rise to the arachnoid mater, pia mater and dura mater. In cyclostomes and fishes, the future meninx gives rise to a single meningeal layer, the primitive meninx. - meninx primitiva - primary meninx - primitive meninx - primordial meninx - - - - - - - - ectomeninx - - The outermost layer of the mesenchymal capsule that surrounds the developing brain, of mixed paraxial mesoderm and neural crest origin. The ectomeninx forms the dura mater (both inner layer and outer chondrogenic layer). - future dura mater - - - - - - - - anatomical junction - - An anatomical structure that connects two structures - anatomical junction - junction - - - - - - - - esophageal sphincter - - - A sphincter that is part of an esophagus. - - - - - - - - uriniferous tubule - - - - functional unit of the kidney that forms urine, consisting of two parts, the nephron and the collecting tubule. - - - - - - - - region of nephron tubule - - region of renal tubule - renal tubule region - - - - - - - - kidney field - - - - kidney anlage - region of the embryo into the area in which the kidney rudiment will develop. - - - - - - - - anlage - - - Anlagen are populations of contiguous cells, typically arranged in one plane, that are morphologically indistinct, but that already correspond in extent to a later organ/tissue. - developmental field - field - future organ - organ field - - - - - - - - thyroid diverticulum - - diverticulum thyroideum - endodermal bud derived from the endodermal epithelium of the embryonic pharyngeal floor[MP]. The thyroid diverticulum is the embryological structure from which thyroid follicular cells derive. It grows from the floor of the pharnyx[WP]. - saccus thyroideus - - - - - - - - early pharyngeal endoderm - - - . - early pharyngeal arch endoderm - pharyngeal arch endoderm - pharyngeal endoderm - pharyngeal region endoderm - - - - - - - - bone of reproductive organ - - - A bone that is part of a reproductive organ. - baculum - os penis/os clitoris - - - - - - - - interphalangeal joint of pes - - - The interphalangeal articulations of the foot (articulations of the phalanges) are ginglymoid joints, and each has a plantar and two collateral ligaments. The arrangement of these ligaments is similar to that in the metatarsophalangeal articulations: the Extensor tendons supply the places of dorsal ligaments. - foot interphalangeal joint - hindlimb digit inter-phalangeal joint - interphalangeal joint of foot - interphalangeal joint of toe - toe joint - - - - - - - - interphalangeal joint of manus - - - IP joint - The interphalangeal articulations of hand are hinge-joints of the phalanges of the hand. There are two sets (except in the thumb): 'proximal interphalangeal joints' (PIP), those between the first (also called proximal) and second (intermediate) phalanges 'distal interphalangeal joints' (DIP), those between the second and third (distal) phalanges A similar group of articulations also function in the toes. - articulationes digitorum manus - articulationes interphalangeae manus - articulations of the digits - interphalangeal articulations of hand - interphalangeal joint of finger - interphalangeal joint of hand - interphalangeal joints of hand - - - - - - - - epidermis gland - - A gland that is part of a epidermis. - epidermal gland - gland of epidermis - - - - - - - - umbilical vein endothelium - - An endothelium that is part of a umbilical vein. - - - - - - - - umbilical artery endothelium - - An endothelium that is part of a umbilical artery. - - - - - - - - transduate - - Body substance in liquid state, which is derived from plasma by passage through the (intact) wall of capillaries without further processing by secretory cells or glands. - - - - - - - - serous fluid - - - Any fluid produced by a serous gland. - serous gland fluid - - - - - - - - vascular system - - Anatomical system that consists of all blood and lymph vessels. - Gefaesssystem@de - - - - - - - - connecting stalk - - A bridge of mesoderm connecting the caudal end of the young embryo with the trophoblastic tissues; the precursor of the umbilical cord. - - - - - - - - connecting stalk vasculature - - A vasculature that is part of a connecting stalk. - connecting stalk blood vessel - connecting stalk blood vessels - vasculature of connecting stalk - - - - - - - - adipose tissue of abdominal region - - - Adipose tissue that is located in the abdominal region. This includes any subcutaneous fat, visceral fat or encapsulated adipose tissue depots. - abdominal adipose tissue - abdominal fat - intra-abdominal fat - - - - - - - - craniocervical region - - The anteriormost subdivision of the body that includes the head, jaws, pharyngeal region and the neck (if present). In vertebrates this is the subdivision that includes the cervical vertebrae. - cephalic area - cephalic part of animal - cephalic region - head and neck - head or neck - - - - - - - - appendage girdle region - - An organism subdivision that encompasses the region containing the pectoral or pelvic girdle. Note that this includes both the skeletal elements and associated tissues (integument, muscle, etc). - fin girdle - fin girdle region - girdle - girdle region - limb girdle - limb girdle region - - - - - - - - peritoneal mesentery - - - Mesentery that is located in the peritoneum. - - - - - - - - external nose - - - External part of the nose containing the external nares. - nose - - - - - - - - girdle bone/zone - - A bone that is part of a appendage girdle region. - girdle bone - - - - - - - - pectoral girdle bone - - - A bone that is part of a pectoral girdle region. - bone of pectoral girdle - - - - - - - - pelvic girdle bone/zone - - - - - - - A bone element or fused bone that is part of pelvic girdle. - bone of pelvic girdle - pelvic girdle bone - - - - - - - - pectoral girdle skeleton - - A subdivision of a limb or fin skeleton consisting of bones which connects the upper limb or fin to the axial skeleton on each side. It consists of the clavicle and scapula in humans and, in those species with three bones in the pectoral girdle, the coracoid. Some mammalian species (e.g. the dog and the horse) have only the scapula. In humans, the only joints between the shoulder girdle and axial skeleton are the sternoclavicular joints on each side. No joint exists between each scapula and the rib cage; instead the muscular connection between the two permits relatively great mobility of the shoulder girdle in relation to the pelvic girdle. In those species having only the scapula, no joint exists between the forelimb and the thorax, the only attachment being muscular[WP]. Examples: There are only two instances, right and left pectoral girdle skeletons. - cingulum pectorale - pectoral girdle - scapular girdle - skeletal parts of pectoral girdle - skeleton of pectoral girdle - - - - - - - - pelvic girdle skeleton - - - Skeletal subdivision consisting of a set of bones linking the axial series to the hindlimb zeugopodium and offering anchoring areas for hindlimb and caudal musculature. - pelvic girdle - pelvic girdle skeleton - skeletal parts of pelvic girdle - skeleton of pelvic girdle - - - - - - - - membrane bone - - Bone element that arises as a result of intramembranous ossification. - membrane bones - - - - - - - - cartilage element - - Skeletal element that is composed of cartilage tissue and may be permanent or transient. - cartilage - cartilage organ - cartilaginous element - chondrogenic element - - - - - - - - regular connective tissue - - - Connective tissue, which consists of fibroblasts, the intercellular matrix of which contains a regular network of collagen and elastic fiber bundles. Examples: bone (tissue), cartilage (tissue), dense regular connective tissue. - - - - - - - - dense regular connective tissue - - - Connective tissue that is dominated by collagen fibres organized into a definitive pattern (e.g., parallel to one another), with comparatively fewer cells (mostly fibroblasts). - dense fibrous connective tissue - dense regular collagenous connective tissue - dense regular collagenous tissue - regular dense connective tissue - typus regularis (textus connectivus collagenosus compactus) - - - - - - - - bone of craniocervical region - - A bone that is part of a craniocervical region. - cranial bone - head or neck bone - - - - - - - - sesamoid bone of manus - - - - A sesamoid bone that is part of a manus. - sesamoid bone of hand - - - - - - - - sesamoid bone of pes - - - - A sesamoid bone that is part of a pes. - sesamoid bone of foot - - - - - - - - irregular bone - - The irregular bones are bones which, from their peculiar form, cannot be grouped as long bone, short bone, flat bone or sesamoid bone. Irregular bones serve various purposes in the body, such as protection of nervous tissue, affording multiple anchor points for skeletal muscle attachment (as with the sacrum), and maintaining pharynx and trachea support, and tongue attachment (such as the hyoid bone). They consist of cancellous tissue enclosed within a thin layer of compact bone. The irregular bones are: the vertebrC&, sacrum, coccyx, temporal, sphenoid, ethmoid, zygomatic, maxilla, mandible, palatine, inferior nasal concha, and hyoid. - os irregulare - os irregulare - - - - - - - - joint of girdle - - A skeletal joint that is part of a appendage girdle region. - girdle joint - - - - - - - - surface of cartilage - - A anatomical surface that is part of a cartilage element. - cartilage surface - - - - - - - - pneumatized bone - - A bone that is hollow or contains many air cells, such as the mastoid process of the temporal bone[TMD]. - hollow bone - os pneumaticum - pneumatic bone - - - - - - - - muscle of pectoral girdle - - Any muscle organ that is part of a pectoral girdle region. - muscle of shoulder girdle - pectoral girdle muscle - - - - - - - - bone of hip region - - - - - - - - - craniocervical region musculature - - Musculature system of the pharyngeal and head regions. - head muscles - head or neck muscle - head or neck muscle - - - - - - - - periodontal ligament - - - PDL - The fibrous connective tissue that surrounds the root of a tooth, separating it from and attaching it to the alveolar bone. It extends from the base of the gingival mucosa to the fundus of the bony socket, and its main function is to hold the tooth in its socket[BTO]. - alveolar periosteum - alveolodental ligament - alveolodental membrane - desmodontium - fibra periodontalis - odontoperiosteum - paradentium - peridental membrane - peridontal fiber - peridontal fibre - peridontal ligament - peridontal ligament fiber - peridontal ligament fibre - peridontal membrane - peridontium - periodontal fiber - periodontal fibre - periodontium - - - - - - - - tooth bud - - A knoblike tooth primordium that develops into the mature tooth and consists of enamel organ, dental papilla, and dental sac enclosing them. - dental bud - dental germ - tooth germ - - - - - - - - heart endothelium - - An endothelium that is part of a heart [Automatically generated definition]. - cardiac endothelium - - - - - - - - nasopharyngeal gland - - - A gland that is part of a nasopharynx. - - - - - - - - plantar part of pes - - - The sole is the bottom of the foot. - pelma - planta - planta - plantar part of foot - plantar region - regio plantaris - sole - sole of foot - sole of foot - sole of the foot - soles of the feet - - - - - - - - microvascular endothelium - - - - - - - - - intestinal villus of duodenum - - An intestinal villus in the duodenum. - - - - - - - - intestinal villus of jejunum - - An intestinal villus in the jejunum. - - - - - - - - intestinal villus of ileum - - An intestinal villus in the ileum. - - - - - - - - ileal epithelium - - An epithelium that is part of a ileum. - epithelium of ileum - - - - - - - - duodenal epithelium - - An epithelium that is part of a duodenum. - epithelium of duodenum - - - - - - - - breast epithelium - - An epithelium that is part of a breast. - - - - - - - - proximal tubular epithelium - - The cells lining the proximal tubule are cuboidal epithelial cells with deep basal membrane invaginations that provide a large basal surface area. The long microvilli (the brush border) lining the tubule lumen, maximize luminal surface area and make these cells ideally suited for both reabsorptive and secretory functions. - epithelium of proximal convoluted tubule - epithelium of proximal renal tubule - proximal renal tubule epithelium - proximal tubule epithelium - proximale tubular epithelium - - - - - - - - distal tubular epithelium - - An epithelium that is part of a distal tubule. - distal tubule epithelium - - - - - - - - mammary ridge - - A ridge of epidermal cells that will form the mammary placodes. - mammary fold - mammary gland ridge - mammary line - milk line - - - - - - - - nasal muscle - - - Any muscle organ that is part of an nose. - muscle of nose - - - - - - - - muscle tissue of prostate - - - - A muscle tissue that is part of a prostate gland. - prostate gland muscle tissue - prostate muscle tissue - prostatic muscle - prostatic musclular tissue - - - - - - - - inner cell mass derived epiblast - - An embryonic structure that is derived from the inner cell mass and lies above the hypoblast and gives rise to the three primary germ layers - embryonic epiblast - - - - - - - - lower limb segment - - A limb segment that is part of a hindlimb. - free lower limb segment - free lower limb subdivision - segment of free lower limb - subdivision of free lower limb - - - - - - - - upper limb segment - - A limb segment that is part of a forelimb. - free upper limb segment - free upper limb subdivision - segment of free upper limb - subdivision of free upper limb - - - - - - - - intromittent organ - - An external organ of a male organism that is specialized to deliver sperm during copulation. Intromittent organs are found most often in terrestrial species, as most aquatic species fertilize their eggs externally, although there are exceptions[WP]. - aedeagus - copulatory organ - penis - - - - - - - - pharyngeal arch system - - A transient embryonic complex that comprises the pharyngeal arches, bulges of tissues of mesoderm and neural crest derivation through which pass nerves and pharyngeal arch arteries. The arches are separated internally by pharyngeal pouches, evaginations of foregut endoderm, and externally by pharyngeal clefts, invaginations of surface ectoderm. The development of the system ends when the stucture it contributes to are forming, which may include (depending on species) the thymus, thyroid, parathyroids, maxilla, mandible, aortic arch, cardiac outflow tract, external and middle ear[GO,modified]. - pharyngeal apparatus - pharyngeal arch region - pharyngeal arches and clefts - pharyngeal system - - - - - - - - embryonic head - - A head that is part of a embryo. - - - - - - - - thymus primordium endoderm - - An endoderm that is part of a thymus primordium. - - - - - - - - neural tube derived brain - - - A brain that develops_from a neural tube. - vertebrate brain - - - - - - - - hepatic diverticulum - - - - - - An out-pocket of thickened ventral foregut epithelium adjacent to the developing heart. Constitutes the first morphological sign of the embryonic liver. The anterior portion of the hepatic diverticulum gives rise to the liver and intrahepatic biliary tree, while the posterior portion forms the gall bladder and extrahepatic bile ducts. - diverticulum hepaticum - liver diverticulum - - - - - - - - liver bud - - - - - - - - - - - - palmar/plantar part of autopod - - - - - - - - - nonskeletal ligament - - - A ligament that does not connect two skeletal elements. - fibrous ligament - non-skeletal ligament - - - - - - - - skeletal ligament - - Dense regular connective tissue connecting two or more adjacent skeletal elements[VSAO,modified]. - articular larua - articular ligament - ligament - true ligament - - - - - - - - stomach muscularis externa - - - - The smooth muscle layer of the stomach wall that functions to churn and mix food and gastric secretions as well as to move food along the digestive tract to the intestines - gastric muscularis - muscle layer of stomach - muscularis externa of stomach - tunica muscularis (gaster) - tunica muscularis gastris - - - - - - - - pyloric canal - - The short narrow part of the stomach extending from the pyloric antrum to the pyloric sphincter - canalis pyloricus - canalis pyloricus - - - - - - - - cardiac gastric gland - - - A gastric gland in the cardiac region of the stomach; cardiac glands are fewer in number than in the fundus and body, and secrete mucin which coats the stomach and protects it[MP] - cardiac gland - gardiac gland - gastric cardiac gland - gastric cardiac mucuous gland - gastric gland of cardia - glandula cardiaca (gaster) - - - - - - - - pyloric gastric gland - - - The gastric glands in the pyloric region of the stomach; the pyloric glands secrete mucin, which coats the stomach and protects it, and hormones such as gastrin and enkephalin[MP]. - glandula pylorica - pyloric antrum gland - pyloric gland - pyloric mucuous gland - - - - - - - - pulmonary alveolar parenchyma - - The distinguishing cell types of the lung alveolar tissue, including pulmonary epithelial cells (pneumocytes), alveolar capillary endothelial cells, interstitial cells (fibroblasts) and alveolar macrophages - - - - - - - - pulmonary acinus - - The part of the airway consisting of a respiratory bronchiole and all of its branches - acinus pulmonaris - arbor alveolaris - lobulus pulmonis primarius - primary pulmonary lobule - respiratory lobule - - - - - - - - hypodermis skeletal muscle layer - - - - Any skeletal muscle organ in the hypodermis / superficial fascia - hypodermal muscle layer - hypodermis muscle layer - panniculus carnosus - superficial fascia muscular layer - - - - - - - - osteoid - - - Bone tissue that is an unmineralized bone matrix deposited by osteoblasts prior to the mineralization of bone tissue. - osteoid tissue - pre-bone - prebone - prebone tissue - - - - - - - - pulmonary vascular system - - The part of the cardiovascular system consisting of all pulmonary arteries and all pulmonary veins. - pulmonary circulatory system - pulmonary system - - - - - - - - neuromast - - - Volcano-shaped lateral line sensory organ located in characteristic positions within the skin epithelium and containing hair cells and their support elements. - cyatocïde@fr - lateral line neuromast - lateral line organ - neuromast organ - neuromaste superficiel@fr - neuromasts - - - - - - - - lateral line nerve - - Cranial nerves that carry afferent and efferent fibers for the lateral line system. - lateral line nerves - - - - - - - - dermal bone - - - Skeletal element that forms superficially in the organism, usually in association with the ectoderm[VSAO]. - dermal bones - - - - - - - - lung parenchyma - - - A parenchyma that is part of a lung. - parenchyma of lung - pulmonary parenchyma - respiratory portion of lung - - - - - - - - respiratory primordium - - - - - - - - - forelimb bone - - - - A bone that is part of a forelimb region. Examples: humerus, any of the phalanges. Counter-example: scapula (a bone of the pectoral girdle). Note that we consider the forelimb to end at the shoulder. - free forelimb bone - wing bone - - - - - - - - dental follicle - - - - A sac containing the developing tooth and its odontogenic organ. The dental follicle (DF) differentiates into the periodontal ligament. In addition, it may be the precursor of other cells of the periodontium, including osteoblasts, cementoblasts and fibroblasts. They develop into the alveolar bone, the cementum with Sharpey's fibers and the periodontal ligament fibers respectively. - dental sac - tooth follicle - - - - - - - - renal parenchyma - - The functional tissue of the kidney, consisting of the nephrons. - kidney parenchyma - parenchyma of kidney - - - - - - - - submocosal esophageal gland - - - - One of the racemose glands in the walls of the esophagus that in humans are small and serve principally to lubricate the food but in some birds secrete a milky fluid on which the young are fed. - esophageal gland - glandulae oesophageae - mucous gland of submucosa of esophagus - - - - - - - - vasculature of brain - - System pertaining to blood vessels in the brain. - brain vasculature - cerebrovascular system - intracerebral vasculature - - - - - - - - renal straight tubule - - Any region of a nephron tubule that is straight. Examples: distal convoluted tubule, proximal convoluted tuble. - kidney straight tubule - straight tubule - - - - - - - - lymph node germinal center - - A germinal center that is located in a lymph node - germinal center - lymph node activated zone - lymph node central zone - lymph node light zone - lymph node nodule - - - - - - - - prostatic venous plexus - - - The prostatic veins form a well-marked prostatic plexus which lies partly in the fascial sheath of the prostate and partly between the sheath and the prostatic capsule. It communicates with the pudendal and vesical plexuses. - plexus venosus prostaticus - pudendal venous plexus - - - - - - - - inner medulla vasa recta descending limb - - - - - - - - - - outer medulla vasa recta descending limb - - - - - - - - - - vasa recta ascending limb - - - - - - - - - - inner medulla vasa recta ascending limb - - - - - - - - - - outer medulla vasa recta ascending limb - - - - - - - - - - tip of renal papilla - - - papillary tip - papillary tips - - - - - - - - obsolete thymic region - true - - - - - - - - cervical thymus - - A mature thymus that is entirely part of the cervical region. - - - - - - - - thoracic thymus - - - A mature thymus that is entirely part of thoracic region. - - - - - - - - indifferent gonad - - A gonad prior to differentiating into a definitive testis or ovary. - gonad rudiment - - - - - - - - adenohypophyseal placode - - - The adenohypophyseal placode forms the anterior lobe of the pituitary gland and gives rise to the endocrine secretory cells of the pituitary - pituitary placode - - - - - - - - lateral line placode - - - An ectodermal placode that will develop into the components of the lateral line system - lateral line placodes - - - - - - - - craniocervical region vein - - A vein that is part of a craniocervical region. - craniocervical vein - head and neck veins - vein of head and neck - - - - - - - - entire embryonic mesenchyme - - Sum total of mesenchyme in the embryo. - - - - - - - - pharyngeal region of foregut - - pharyngeal region - - - - - - - - indifferent external genitalia - - - - - - - - - craniofacial suture - - Any suture between cranial and/or facial bones. - articulation of skull bones - joint of the skull bones - - - - - - - - facial suture - - - Any suture between facial bones. - - - - - - - - limb epidermis - - - The limb epidermis is the outer epithelial layer of the limb, it is a complex stratified squamous epithelium. - - - - - - - - nephric duct - - - - - - - - - - - - - A nephric duct is a tube that drains a primitive kidney[GO]. - - - - - - - - vasa recta descending limb - - - - - - - - - - medial nasal process mesenchyme - - Mesenchyme that is part of a medial nasal prominence. - - - - - - - - pharyngeal membrane - - A thin fold of ectoderm and endoderm that separates the pharyngeal pouches from the pharyngeal clefts in a developing embryo. - branchial arch membrane - branchial membrane - pharyngeal membrane - - - - - - - - pharyngeal membrane of 1st arch - - 1st branchial membrane - 1st pharyngeal membrane - A pharyngeal membrane that separates the first pharyngeal cleft from the first pharyngeal pouch. - future tympanic membrane - tympanic membrane primordium - - - - - - - - embryonic nasal process - - nasal placode - - - - - - - - axilla - - The axilla is the area directly under the joint where the forelimb connects to the shoulder. - arm pit - armpit - armpits - axilla - axillae - axillary region - axillary region - oxter - regio axillaris - underarm - - - - - - - - associated mesenchyme of otic placode - - Mesenchyme that is part of a otic placode. - - - - - - - - ectoderm of buccopharyngeal membrane - - An ectoderm that is part of a buccopharyngeal membrane. - - - - - - - - endoderm of buccopharyngeal membrane - - An endoderm that is part of a buccopharyngeal membrane. - - - - - - - - associated mesenchyme of foregut-midgut junction - - Mesenchyme that is part of a foregut-midgut junction. - - - - - - - - mesentery of foregut-midgut junction - - A mesentery that is part of a foregut-midgut junction. - foregut-midgut junction mesentery - - - - - - - - pharyngeal arch mesenchymal region - - - - A portion of mesenchymal tissue associated with an individual pharyngeal arch. - branchial arch mesenchyme - pharyngeal arch mesenchyme - - - - - - - - epithelium of foregut-midgut junction - - - - An epithelium that is part of a foregut-midgut junction. - - - - - - - - periotic mesenchyme - - Anatomical region that surrounds the otic vesicle. - otocyst associated mesenchyme - otocyst mesenchyme - periotic region - - - - - - - - mesenchyme of fronto-nasal process - - The embryonic connective tissue made up of loosely aggregated mesenchymal cells, supported by interlaminar jelly, that gives rise to the frontonasal region of the head - frontonasal mesenchyme - naso-frontal mesenchyme - - - - - - - - mesenchyme of hindgut - - Mesenchyme that is part of a developing hindgut. - hindgut associated mesenchyme - - - - - - - - mesenchyme of trachea - - - - Mesenchyme that is part of a developing trachea. - trachea associated mesenchyme - - - - - - - - mesenchyme of middle ear - - - - Mesenchyme that is part of a developing middle ear. - middle ear associated mesenchyme - otic mesenchyme - - - - - - - - anal membrane endodermal component - - - An endoderm that is part of a anal region. - - - - - - - - mesenchyme of handplate - - Mesenchyme that is part of a handplate. - hand plate mesenchyme - handplate mesenchyme - - - - - - - - endoderm of foregut-midgut junction - - An endoderm that is part of a foregut-midgut junction. - - - - - - - - intestinal submucosa - - A submucosa that is part of a intestine. - submucosa of intestine - - - - - - - - subdivision of trunk - - region of trunk - trunk subdivision - - - - - - - - diencephalon mantle layer - - diencephalon lateral wall mantle layer - mantle layer lateral wall diencephalon - - - - - - - - midbrain mantle layer - - mantle layer lateral wall mesencephalon - mantle layer lateral wall midbrain - midbrain lateral wall mantle layer - - - - - - - - spinal cord mantle layer - - mantle layer lateral wall spinal cord - spinal cord lateral wall mantle layer - - - - - - - - 1st arch mandibular mesenchyme - - Mesenchyme that is part of a 1st arch mandibular component. - mandibular component mesenchyme - mandibular mesenchyme - mesenchymal region of mandibular component of first pharyngeal arch - mesenchyme of mandibular component - - - - - - - - forebrain neural plate - - A neural plate that develops_from a future forebrain. - - - - - - - - midbrain neural plate - - A neural plate that develops_from a presumptive midbrain. - - - - - - - - hindbrain neural plate - - - A neural plate that develops_from a presumptive hindbrain. - - - - - - - - presumptive midbrain - - A presumptive structure that has the potential to develop into a midbrain. - early midbrain - future midbrain - mesencephalon - presumptive mesencephalon - - - - - - - - head paraxial mesoderm - - Bilateral mesenchymal mesoderm parallel and immediately adjacent to the neural tube/notochord; it generates a subset of extra-ocular, and other head, muscles. - cephalic paraxial mesenchyme - cephalic paraxial mesoderm - cranial paraxial mesenchyme - cranial paraxial mesoderm - head paraxial mesenchyme - somitomere - somitomeric mesoderm - - - - - - - - trunk paraxial mesoderm - - trunk and cervical paraxial mesenchyme - trunk paraxial mesenchyme - - - - - - - - pronephric proximal straight tubule - - - A proximal straight tubule that is part of a pronephros. - proximal straight tubules - - - - - - - - spinal nerve root - - The paired bundles of nerve fibers entering and leaving the spinal cord at each segment. The dorsal and ventral nerve roots join to form the mixed segmental spinal nerves. The dorsal roots are generally afferent, formed by the central projections of the spinal (dorsal root) ganglia sensory cells, and the ventral roots efferent, comprising the axons of spinal motor and autonomic preganglionic neurons. There are, however, some exceptions to this afferent/efferent rule. - root of spinal nerve - spinal neural root - spinal root - - - - - - - - trachea non-cartilage connective tissue - - - - - - - - - tympanic membrane epithelium - - - - One of the two epithelia which make up the tympanic membrane (along with the fibrous layer) - tympanic epithelium - tympanic membrane epithelial layer - - - - - - - - eyelid subcutaneous connective tissue - - - A eyelid connective tissue that is part of a hypodermis. - superficial fascia of eyelid - - - - - - - - nephron tubule basement membrane - - A basement membrane that is part of a nephron tubule. - kidney tubule basement membrane - renal tubular basement membrane - renal tubule basement membrane - - - - - - - - bronchus basement membrane - - - A basement membrane that is part of a bronchus. - bronchial basement membrane - - - - - - - - trachea basement membrane - - - - A basement membrane that is part of a trachea. - - - - - - - - midbrain nucleus - - Nucleus located in the midbrain. - - - - - - - - hindbrain nucleus - - Nucleus located within the hindbrain. - - - - - - - - telencephalic nucleus - - A nucleus of brain that is part of a telencephalon. - - - - - - - - gut mesentery - - peritoneal cavity mesentary - peritoneal mesentary - - - - - - - - early telencephalic vesicle - - early telencephalic ventricle - early telencephalic vesicle - - - - - - - - tooth row - - - Anatomical cluster consisting of adjacent teeth constituting a row. - dental arcade - row of teeth - tooth rows - - - - - - - - set of lower jaw teeth - - A tooth row that is part of a skeleton of lower jaw. - arcus dentalis inferior - lower dental arcade - lower jaw teeth - mandibular dental arcade - set of all lower teeth - - - - - - - - epithelium of appendix - - A epithelium that is part of a vermiform appendix. - appendix epithelium - epithelium of vermiform appendix - - - - - - - - endocardium of right ventricle - - Any endocardium that is part of the right ventricle of the heart. - endocardial lining of right ventricle - right ventricle endocardial tissue - right ventricle endocardium - right ventricular endocardium - - - - - - - - endocardium of left ventricle - - Any endocardium that is part of the left ventricle of the heart. - endocardial lining of left ventricle - left ventricle endocardial tissue - left ventricle endocardium - left ventricular endocardium - - - - - - - - entire pharyngeal arch endoderm - - - - pharyngeal arch endoderm - - - - - - - - lymph node medullary sinus - - The channels in the lymph node medulla that separate the medullary cords and are crossed by a reticulum of cells and fibers and bounded by littoral cells; lymph flows through the medullary sinus from the cortical sinuses and into the efferent lymphatic vessels - lymph node medullary sinusoid - medullary sinus - - - - - - - - lymph node medullary cord - - The dense rope-like structures of lymphatic tissue located between the medullary sinuses in the medulla of a lymph node - medullary cord - - - - - - - - limb mesenchyme - - The primordial embryonic connective tissue of the developing limbs, autopods and digits, consisting of mesenchymal cells supported in interlaminar jelly, that derive mostly from the mesoderm and contribute to limb connective tissue, bone and musculature in conjunction with myotome cells. - limb mesoderm - - - - - - - - cardiac mesenchyme - - - The embryonic connective tissue made up of loosely aggregated mesenchymal cells, supported by interlaminar jelly, that gives rise to the developing cardiac structures - heart mesenchyme - - - - - - - - pancreas mesenchyme - - The embryonic connective tissue made up of loosely aggregated mesenchymal cells, supported by interlaminar jelly, that gives rise to the developing pancreas - - - - - - - - adrenal gland cortex zone - - - - adrenal cortical region - region of adrenal cortex - - - - - - - - abdominal ganglion - - - A ganglion that is part of a abdominal segment of trunk. - - - - - - - - renal tubule - - - A renal tubule is a tube that filters, re-absorbs and secretes substances to rid an organism of waste and to play a role in fluid homeostasis. - renal tubule (generic) - tubule of excretory system - - - - - - - - pleural sac - - - - A serous sac that has the pleura and the pleural cavity as parts. - - - - - - - - glandular acinus - - The many-lobed berry cluster of cells that is the terminous of a gland where the secretion is produced is acinar in form. - acini - acinus - - - - - - - - prostate epithelial cord - - A solid cord of prostate epithelium. - cord of prostate epithelium - epithelial cord of prostate - - - - - - - - urogenital sinus mesenchyme - - Mesenchyme that surrounds primitive urogenital sinus. - UGM - - - - - - - - embryonic cloacal epithelium - - - - An epithelium that is part of a embryonic cloaca. - cloacal epithelium - - - - - - - - prostate field - - - - - A specific region of the urogenital sinus epithelium into the area in which the prostate gland will develop. - prostate primordium - - - - - - - - digestive tract diverticulum - - - Branch or outpocketing of the digestive tract. - diverticulum of gut - intestinal pouch - - - - - - - - sac - - diverticulum - pouch - - - - - - - - endosteum - - A thin layer of connective tissue that lines the surface of the bony tissue that forms the medullary cavity of long bones - - - - - - - - zone of stomach - - A division of the stomach. The stomach can be divided based on mucosal histology (glandular epithelium and gastric glands) and the relative position and type of gastric gland. - gastric zone - region of stomach - section of stomach - - - - - - - - nephrogenic zone - - nephrogenic tissue - outer portion of the renal cortex. Site of formation of medullary and cortical elements. - - - - - - - - anterior lateral plate mesoderm - - - ALPM - - - - - - - - anal column - - - One of a number of vertical folds, produced by an infolding of the mucous membrane and some of the muscular tissue in the upper half of the lumen of the anal canal[WP] - column of Morgagni - columnae anales - - - - - - - - medullary ray - - A renal, cortical lobule, consisting of the ascending or descending limbs of the loop of Henle or of the collecting tubules; medullary rays are regions where parallel arrays of straight tubules travel perpendicular to the capsule and extend from the cortex to the medulla. - Ferrein's pyramid - kidney medullary ray - renal medullary ray - - - - - - - - secondary heart field - - - - - A specific region of the lateral mesoderm that will form the majority of the mesodermal component of the right ventricle, arterial pole (outflow tract) and venous pole (inflow tract). - SHF - anterior heart field - anterior/second heart field - second heart field - - - - - - - - facial mesenchyme - - Mesenchyme that is part of a developing face. - face mesenchyme - mesenchyme of face - - - - - - - - lobule - - lobulus - - - - - - - - anatomical lobe - - A portion of an organ, such as the liver, lung, breast, or brain. - lobus - - - - - - - - renal lobe - - The portion of a kidney consisting of a renal medullary pyramid and the renal cortex above it[MP]. It is composed of many renal lobules[WP]. - kidney lobe - lobi renales - lobi renalis - lobus renalis - - - - - - - - renal lobule - - The portion of a renal lobe consisting of nephrons grouped around a single medullary ray and draining into a single collecting duct; human kidneys have multilobular, multipapillary architecture while mice and rats have unilobular, unipapillary kidneys - cortical lobule - cortical lobule of kidney - kidney lobule - lobuli corticales renis - lobulus corticalis renalis - lobulus renalis - renal cortical lobule - renculus - reniculus - renunculus - - - - - - - - wall of ureter - - - An anatomical wall that is part of a ureter. - ureteral wall - - - - - - - - retrotrapezoid nucleus - - The loose collection of neurons that reside in the rostral medulla close to the medullary surface, ventral and immediately caudal of nVII, that are crucial for CO2 sensing in the brain - - - - - - - - ureter smooth muscle - - The smooth muscle tissue surrounding the epithelium of the ureter - ureteral smooth muscle - ureteral smooth muscle layer - - - - - - - - optic neural crest - - - - - - - - - - olfactory bulb plexiform layer - - plexiform layer - - - - - - - - vomeronasal system - - A vertebrate nasal chemosensory system that is responsible for detecting intraspecific pheromonal cues as well as environmental odorants - - - - - - - - neurogenic placode - - - Cranial ectodermal placode with potential to develop into a component of the nervous system, such as nerves or ganglia. - neurogenic placodes - placodae neurogenicae - - - - - - - - internodal tract - - - A conducting pathway in the conducting tissue of heart through which electrical activity spreads from the SA node to the AV node. - interatrial conduction tract - internodal conduction tract - internodal fasciculus - internodal tract muscle tissue - - - - - - - - spleen venous sinus - - - sinus lienalis - sinus splenicus - splenic sinus - venous sinus of red pulp of spleen - - - - - - - - statoacoustic epithelium - - stato-acoustic epithelium - - - - - - - - epithelium of pancreatic duct - - - - An epithelium that is part of a pancreatic duct. - pancreatic duct epithelium - pancreatic ductal epithelium - - - - - - - - principal gastric gland - - Wassman gland - acid gland - gastric follicle - gastric gland - glandula gastrica propria - main gastric gland - one of the gastric glands that secretes the hydrochloric acid of the gastric juice[Stedman's]. - oxyntic gland - principal gland of fundus of stomach - - - - - - - - ureteropelvic junction - - The junction between the ureter and the renal pelvis of the kidney - pelviureteric junction - pelvoureteric junction - - - - - - - - ureterovesical junction - - - The valve-like structure found at the site of entry of the ureter into the urinary bladder, normally displays an oblique angulation through the detrusor to avoid reflux of urine up the ureters and the kidney - vesico-ureteral junction - vesico-ureteric junction - vesicoureteric junction - - - - - - - - multicellular anatomical structure - - An anatomical structure that has more than one cell as a part. - multicellular structure - - - - - - - - cell cluster organ - - - - A small cluster of cells of various types which form a discrete structure, largely delimited by a morphological boundary and whose components work together to make the whole structure capable of a specific function. - - - - - - - - aggregate regional part of brain - - A regional part of brain consisting of multiple brain regions that are not related through a simple volummetric part of hierarchy, e.g., basal ganglia[NIF]. - set of nuclei of neuraxis - - - - - - - - collection of basal ganglia - - Subcortical masses of gray matter in the forebrain and midbrain that are richly interconnected and so viewed as a functional system. The nuclei usually included are the caudate nucleus (caudoputamen in rodents), putamen, globus pallidus, substantia nigra (pars compacta and pars reticulata) and the subthalamic nucleus. Some also include the nucleus accumbens and ventral pallidum. - basal ganglia - basal ganglia set - basal nuclei - basal nuclei (basal ganglia) - cerebral nuclei - set of basal ganglia - set of basal nuclei - subcortical nuclei - - - - - - - - 6th arch mesenchyme - - 6th branchial arch mesenchyme - 6th pharyngeal arch mesenchyme - Mesenchyme that is part of a pharyngeal arch 6. - pharyngeal arch 6 mesenchyme - - - - - - - - fundic gastric gland - - - The fundus glands (or fundic glands, or gastric glands) are found in the body and fundus of the stomach. They are simple tubes, two or more of which open into a single duct. - fundal gland - fundus gland - gastric fundal gland - gastric fundus gland - gastric gland of fundus of stomach - glandulae gastricae - - - - - - - - food storage organ - - An organ of the digestive tract that is capable of retaining and storing food - - - - - - - - 1st arch mesenchyme - - Mesenchyme that is part of a pharyngeal arch 1. - mesenchyme of 1st arch - - - - - - - - 1st arch maxillary mesenchyme - - Mesenchyme that is part of a 1st arch maxillary component. - maxillary component mesenchyme - maxillary mesenchyme - mesenchyme of maxillary component - - - - - - - - entire pharyngeal arch associated mesenchyme - - - - The sum total of mesenchymal tissue in the pharyngeal arch region. Pharyngeal mesenchyme is undifferentiated, loose connective tissue derived mostly from mesoderm, and also contains ectodermally derived neural crest cells. - associated mesenchyme of pharyngeal region - entire branchial arch associated mesenchyme - pharyngeal arch associated mesenchyme - - - - - - - - oral gland - - - Gland of the epithelium lining the oral cavity. The most common are the salivary glands. - buccal gland - gland of oral opening - gland of oral region - mouth gland - oral cavity gland - oral region gland - - - - - - - - future tongue - - - - A compound organ that has the potential to develop into a tongue. - - - - - - - - hypoglossal cord - - - - - - - - - tympanic cavity epithelium - - - - - - - - - - - open anatomical space - - An anatomical space with at least one opening to another space or the exterior. - - - - - - - - outer epithelial layer of tympanic membrane - - - - - A portion of the external acoustic meatus epithelium which makes up the outer (cuticular) layer of the tympanic membrane - cuticular layer of tympanic membrane - cuticular stratum of tympanic membrane - outer cuticular layer of tympanic membrane - outer layer of tympanic membrane - tympanic membrane external acoustic meatus epithelial component - - - - - - - - intermediate layer of tympanic membrane - - The intermediate fibrous layer of the tympanic membrane. - connective tissue layer of tympanic membrane - fibrous layer of tympanic membrane - fibrous stratum of tympanic membrane - intermediate fibrous layer of tympanic membrane - tympanic endothelium - - - - - - - - layer of tympanic membrane - - - tympanic membrane layer - - - - - - - - chromaffin system - - - Organ system subdivision that consists primarily of chromaffin cells and their supporting structures. - argentaffin system - chromaffin tissue - - - - - - - - cuboidal epithelium - - An epithelium consisting of cuboidal epithelial cells. - - - - - - - - future dermis - - Mesenchyme that has the potential to develop into a dermis. - - - - - - - - future hindbrain meninx - - - - - - A multi-tissue structure that has the potential to develop into a meninx of hindbrain. - future hindbrain meninges - - - - - - - - future metencephalon - - A developing anatomical structure that has the potential to develop into a metencephalon. - - - - - - - - future myelencephalon - - A developing anatomical structure that has the potential to develop into a myelencephalon. - - - - - - - - femur cartilage element - - - - - A femur endochondral element that is composed primarily of cartilage tissue. - femoral cartilage condensation - - - - - - - - embryonic autopod plate - - The distal elements of the developing limb of vertebrates that will give rise to the autopod (e.g. manus, pes, paw) - autopod plate - limb plate - - - - - - - - conducting tissue of heart - - Any portion of cardiac muscle tissue that is part of the conducting system of heart or the Purkinje fibers. - specialized conducting tissue of heart - specialized muscle tissue of heart - - - - - - - - neuroendocrine gland - - any of the organized aggregations of cells that function as secretory or excretory organs and that release hormones in response to neural stimuli - - - - - - - - secretory circumventricular organ - - - A circumventricular organ that is capable of secreting substances into the cerebrospinal fluid. - - - - - - - - sensory circumventricular organ - - A circumventricular organ that is capable of monitoring the levels of substances to the cerebrospinal fluid. - humerosensory circumventricular organ - humerosensory system - humerosensory system organ - sensitive circumventricular organs - sensitive organs - sensory CVOs - sensory circumventricular organs - - - - - - - - primitive sex cord of indifferent gonad - - - A sex cord that is part of a indifferent gonad. - indifferent sex cord - primitive sex cords - - - - - - - - male accessory sex gland - - Any gland, other than the gonad, associated with the genital tract, such as the ampulla of the ductus deferens and the bulbourethral, prostate and vesicular glands of the male. - male accessory gland - - - - - - - - male urethral gland - - Littre's gland - any of the numerous small mucous-secreting glands located in the wall of the penile urethra - gland of Littre - gland of male urethra - glandulae urethrales urethrae masculinae - male urethra gland - urethral gland (male) - - - - - - - - female urethral gland - - An urethral gland that is part of a female urethra. - female urethra gland - gland of female urethra - urethral gland (female) - - - - - - - - protuberance - - A roughly circular bulge in a surface. - - - - - - - - aortic system - - - - - - - - - genital artery - - One of the laterally paired arteries that supply the gonads. - gonadal artery - - - - - - - - bona-fide anatomical boundary - - An anatomical boundary that corresponds to some physical discontinuity. - - - - - - - - lateral line - - - The lateral line consists of small sensory patches (neuromasts) located superficially on the skin or just under the skin in fluid-filled canals on the head and body of all fishes and most amphibians. The lateral line develops from cranial ectodermal placodes situated behind the ear and between the eye and ear. - lateral lines - - - - - - - - thalamic complex - - - A nuclear complex which in mammals consists of four parts, the hypothalamus, epithalamus, ventral thalamus, and dorsal thalamus[WP,modified]. - - - - - - - - future cardiac atrium - - Multi-tissue structure that is part of the heart tube and will become the cardiac atrium. - presumptive atrium heart tube - primordial atrium - primordial cardiac atrium - - - - - - - - eyeball of camera-type eye - - - The core globe-shaped component of the camera-type eye. - bulbus oculi - eye - eye globe - eyeball - globe - - - - - - - - stroma of thyroid gland - - - - The connective tissue that supports the lobules and follicles of the thyroid gland. - thyroid gland stroma - thyroid stroma - - - - - - - - merocrine gland - - An exocrine gland whose secretions are excreted via exocytosis from secretory cells into an epithelial-walled duct or ducts and thence onto a bodily surface or into the lumen; the gland releases its product and no part of the gland is lost or damaged. - - - - - - - - 1st arch mandibular mesenchyme from neural crest - - - Mesenchyme that develops_from a neural crest and is part of a 1st arch mandibular mesenchyme. - - - - - - - - 1st arch maxillary mesenchyme from neural crest - - - Mesenchyme that develops_from a neural crest and is part of a 1st arch maxillary mesenchyme. - - - - - - - - 2nd arch mesenchyme from neural crest - - - - Mesenchyme that develops_from a neural crest and is part of a 2nd arch mesenchyme. - branchial arch 2 mesenchyme from neural crest - neural crest derived arch 2 mesenchyme - pharyngeal arch 2 mesenchyme from neural crest - - - - - - - - 6th arch mesenchyme from neural crest - - - - Mesenchyme that develops_from a neural crest and is part of a 6th arch mesenchyme. - branchial arch 6 mesenchyme from neural crest - neural crest derived arch 6 mesenchyme - pharyngeal arch 6 mesenchyme from neural crest - - - - - - - - mesenchyme from rhombencephalic neural crest - - Mesenchyme that develops_from a rhombencephalon neural crest. - - - - - - - - 1st arch mesenchyme from neural crest - - - - Mesenchyme that develops_from a neural crest and is part of a 1st arch mesenchyme. - branchial arch 1 mesenchyme from neural crest - mesenchyme derived from neural crest of mesenchyme of 1st arch - neural crest derived arch 1 mesenchyme - pharyngeal arch 1 mesenchyme from neural crest - - - - - - - - umbilical blood vessel - - One of the three blood vessels, usually one large umbilical vein and two small umbilical arteries, buried within Wharton's jelly, that transport blood to and from the placenta, where exchange between the mother and fetus takes place; the umbilical vein carries oxygenated, nutrient-rich blood from the placenta to the fetus, and the umbilical arteries carry deoxygenated, nutrient-depleted blood from the fetus to the placenta. - allantoic vessel - umbilical cord blood vessel - umbilical cord blood vessels - umbilical vasculature - umbilical vessel - - - - - - - - space in vertebral column - - Any anatomical space that is part of a vertebral column. - vertebral column opening - vertebral conduit - - - - - - - - lacrimal punctum - - - A minute orifice on the summit of the papillae lacrimales, which is the commencement point of the lacrimal canaliculi. - lacrimal point - lacrimal puncta - puncta lacrimalia - - - - - - - - midbrain basal plate - - Portion of tissue that is dorsolateral to the floor plate and part of the midbrain. - basal plate midbrain - basal plate midbrain region - - - - - - - - midbrain neural tube - - - Portion of neural tube that gives rise to the midbrain. - - - - - - - - layer of sclera - - - . - - - - - - - - scleral endothelium - - - - An endothelium that is part of a sclera. - - - - - - - - substantia propria of sclera - - - A stroma that is part of a sclera. - scleral stroma - stroma of sclera - subsantia propria - subsantia propria sclerae - substantia propria sclerae - - - - - - - - amnioserosa - - A single extraembryonic epithelium, which closes the germband dorsally. - amnion-serosa - - - - - - - - extraembryonic epithelium - - - An epithelium that is part of a extraembryonic structure. - extra-embryonic epithelium - - - - - - - - non-keratinized stratified squamous epithelium - - - Stratified squamous epithelium is a stratified squamous epithelium, the cells of which synthesizes but does not accumulate keratin. Examples: epithelium of vagina, epithelium of wall of esophagus. - epithelium stratificatum squamosum noncornificatum - nonkeratinizing stratified squamous epithelium - stratified squamous non-keratinized epithelium - stratified squamous nonkeratinizing epithelium - - - - - - - - subdivision of conjunctiva - - - One of the three major regions of the conjunctiva. - conjunctiva region - region of conjunctiva - - - - - - - - immature eye - - Developing anatomical structure that develops into the eyeball and associated structures. - future eye - - - - - - - - neural crest-derived structure - - - An anatomical structure that develops from the neural crest. - - - - - - - - structure with developmental contribution from neural crest - - An anatomical structure that has some part that develops from the neural crest. - - - - - - - - germ layer / neural crest - - - - - - - - - - skeletal element of eye region - - - A skeletal element that is part of a orbital region. - eye skeleton - ocular skeleton - skeletal element of orbital region - - - - - - - - cranial skeletal system - - Skeletal subdivision of the head including skull (cranium plus mandible), pharyngeal and/or hyoid apparatus. - cranial skeleton - cranium - osteocranium - - - - - - - - limb bud mesenchyme - - Mesenchyme that is part of a limb bud. - - - - - - - - paired limb/fin bud mesenchyme - - Mesenchyme that is part of a limb/fin bud. - - - - - - - - eyelid mesenchyme - - Mesenchyme that is part of a developing eyelid. - - - - - - - - epithelium of handplate - - - - An epithelium that is part of a handplate. - handplate epithelium - - - - - - - - extraembryonic membrane mesenchyme - - - - Mesenchyme that is part of a extraembryonic membrane. - - - - - - - - mandibular process mesenchyme from neural crest - - - Mesenchyme that develops_from a neural crest and is part of a mandibular process mesenchyme. - - - - - - - - mandibular process mesenchyme from head mesenchyme - - - Mesenchyme that develops_from a head mesenchyme from mesoderm and is part of a mandibular process mesenchyme. - - - - - - - - 1st arch maxillary mesenchyme from head mesenchyme - - - Mesenchyme that develops_from a head mesenchyme from mesoderm and is part of a 1st arch maxillary mesenchyme. - - - - - - - - 1st arch mandibular mesenchyme from head mesenchyme - - - Mesenchyme that develops_from a head mesenchyme from mesoderm and is part of a 1st arch mandibular mesenchyme. - - - - - - - - 1st arch mesenchyme from head mesenchyme - - - - Mesenchyme that develops_from a head mesenchyme from mesoderm and is part of a 1st arch mesenchyme. - mesenchyme derived from head mesoderm of mesenchyme of 1st arch - - - - - - - - 2nd arch mesenchyme from head mesenchyme - - - - Mesenchyme that develops_from a head mesenchyme from mesoderm and is part of a 2nd arch mesenchyme. - branchial arch 2 mesenchyme from head mesenchyme - head mesenchyme derived arch 2 mesenchyme - mesenchyme derived from head mesoderm of mesenchyme of 2nd arch - pharyngeal arch 2 mesenchyme from head mesenchyme - - - - - - - - 6th arch mesenchyme from head mesenchyme - - - - Mesenchyme that develops_from a head mesenchyme from mesoderm and is part of a 6th arch mesenchyme. - branchial arch 6 mesenchyme from head mesenchyme - head mesenchyme derived arch 6 mesenchyme - pharyngeal arch 6 mesenchyme from head mesenchyme - - - - - - - - pharyngeal arch mesenchyme from neural crest - - - Mesenchyme that develops_from a neural crest and is part of a entire pharyngeal arch associated mesenchyme. - arch mesenchyme from neural crest - branchial arch mesenchyme from neural crest - neural crest derived arch mesenchyme - - - - - - - - pharyngeal arch mesenchyme from head mesenchyme - - - - Mesenchyme that develops_from a head mesenchyme from mesoderm and is part of a entire pharyngeal arch associated mesenchyme. - arch mesenchyme from head mesenchyme - branchial arch mesenchyme from head mesenchyme - head mesenchyme derived arch mesenchyme - - - - - - - - endochondral element - - A skeletal element that has the potential to participate in endochondral ossification, and may participate in intramembranous ossification. - endochondral replacement element - - - - - - - - dermal skeleton - - Skeletal subdivision that undergoes direct development and includes elements that either develop in association with the basement membrane of the ectoderm or are homologous with such elements; includes dermatocranium, components of the appendicular skeleton, teeth and tooth-like elements of the oropharynx, and integumentary elements. - dermal skeletal system - dermoskeleton - desmoskeleton - exoskeleton - - - - - - - - odontoid tissue - - - Skeletal tissue that is part of the exoskeleton and derived from an odontogenic papilla. - dental tissue - odontogenic tissue - portion of substance of tooth - substance of tooth - tooth hard tissue - tooth substance - tooth tissue - - - - - - - - conjunctival vasculature - - A vasculature that is part of a conjunctiva. - conjunctival veins - conjunctival veins set - set of conjunctival veins - venae conjunctivales - - - - - - - - conjunctival vein - - - - A vein that is part of a conjunctiva. - conjunctival blood vessel - - - - - - - - pulmonary lobule - - - The smallest anatomical unit of the lung, measuring 0.50 to 2.00 cm in diameter. Each lobule is composed of 4-8 terminal bronchioles and their distal alveolar ducts and sacs. The lobules are separated by fibrous interlobular septa. - lobulus pulmonis - - - - - - - - ecto-epithelium - - - Epithelium composed of cells that develops from the ectoderm[FMA,modified]. - ectoderm-derived epithelium - - - - - - - - pancreas dorsal primordium - - - dorsal pancreas - - - - - - - - pancreas ventral primordium - - - ventral pancreas - - - - - - - - mesenchyme from somatopleure - - - - Mesenchyme that develops_from a somatopleure. - - - - - - - - mesenchyme from splanchnopleure - - - - Mesenchyme that develops_from a splanchnopleure. - - - - - - - - enteric nerve - - the neurons that innervate the esophagus, stomach, small and large bowel - - - - - - - - Peyer's patch follicle - - A lymphoid follicle that is part of a Peyer's patch. - peyer's patch follicle - - - - - - - - lymph node primary follicle - - - An unstimulated network of follicular dendritic cells and small resting B cells in the lymph node cortex. - primary follicle of lymph node - - - - - - - - ocular surface region - - - The integrated unit (of the eye) that consists of the conjunctiva, the corneal surface, and the ocular mucosal adnexa including the lid margins and the meibomian gland openings, the lacrimal glands and the lacrimal drainage system, all which are critical to maintain ocular surface integrity and provide protection from external antigens and pathogenic microorganisms. - eye surface - eye surface region - ocular surface - - - - - - - - urethral opening - - An orifice that is part of a lower urinary tract. - urethral orifice - - - - - - - - primary nodular lymphoid tissue - - A lymphoid follicle containing naive B cells - primary follicle - primary lymphoid follicle - primary lymphoid nodule - - - - - - - - primary lymphoid nodule of tonsil - - A primary nodular lymphoid tissue that is part of a tonsil. - lymphoid nodule of tonsil - - - - - - - - internal naris - - A naris that is located inside the nasal cavity and connects to the pharynx. - choana - choanae - internal choana - internal nares - internal nostril - - - - - - - - ciliary processes - - - The ciliary processes are formed by the inward folding of the various layers of the choroid, i.e. , the choroid proper and the lamina basalis, and are received between corresponding foldings of the suspensory ligament of the lens. - ciliary process - ciliary processes - ciliary processes set - processus ciliares - processus ciliares - set of ciliary processes - - - - - - - - pseudostratified columnar epithelium - - A simple columnar epithelium that looks stratified but is not, because its cells are arranged with their nuclei at different levels. - - - - - - - - pseudostratified ciliated columnar epithelium - - - Epithelium composed of a single layer of cells, appearing as layered because the column-shaped cells vary in height so the nuclei are at different levels. The basal portions of all the cells are in contact with the basement membrane. It lines the respiratory system and the male reproductive tract. The cilia in the respiratory tract are motile, while the stereocilia in the male reproductive tract are immobile. - epithelium pseudostratificatum columnare ciliatum (trachea et bronchi) - - - - - - - - electroreceptor organ - - An organ that is capable of detecting electrical stimulus - electric sense organ - electroreception organ - - - - - - - - microcirculatory vessel - - A vessel of the microcirculature, lying between the arterioles and venules; includes capillaries (blood and lymphatic), metarterioles and arteriovenous anastomoses. - microcirculatory vessels - - - - - - - - cavity of bone organ - - An organ cavity that surrounded_by a bone. - bone organ cavity - - - - - - - - pneumatic cavity of bone - - air space of bone - - - - - - - - metanephros induced blastemal cells - - . - cap mesenchyme of metanephros of urinary system - induced blastemal cells - nephrogenic interstitium - nephrogenic interstitium of nephrogenic zone - peripheral blastema - - - - - - - - primitive nephron - - - - An epithelial tube that is fated to become a nephron. - developing nephron - future nephron - presumptive nephron - primitive nephron - - - - - - - - metanephros cortex - - - The metanephric cortex is the outer region of the metanephros[GO]. - - - - - - - - primitive mesonephric nephron - - - Anatomical cluster which give rise to mature mesonephric nephrons. Zebrafish continously generate new mesonephric nephrons. - developing mesonephric nephron - primitive mesonephric nephron - - - - - - - - primitive metanephric nephron - - - A primitive nephron that is part of a metanephros. - developing metanephric nephron - primitive metanephric nephron - primitive nephron - - - - - - - - nephron progenitor - - - - - - - - - mesonephric nephron progenitor - - - Cluster of cells comprising a portion of tissue which gives rise to new mesonephric nephrons. The cluster contains self-renewing stem cells. - - - - - - - - paired limb/fin segment - - - An appendage segment that is part of a limb/fin. - limb/fin segment - - - - - - - - acropodial skeleton - - - The subdivision of the skeleton that consists of all the skeletal elements at the distalmost end of the autopodium - i.e. the bones of the digits or their cartilaginous precursors[VSAO,modified]. - acropodial skeleton - acropodium - acropodium skeleton - digital skeleton - digits skeleton - phalangeal skeleton - set of phalanges - skeletal parts of acropodial region - skeletal parts of acropodium - skeleton of digits - - - - - - - - pedal digit phalanx pre-cartilage condensation - - - - A pre-cartilage condensation that is part of a pedal digit mesenchyme. - foot digit phalanx pre-cartilage condensation - foot phalanx pre-cartilage condensation - hind limb digit phalanx pre-cartilage condensation - hindlimb phalanx pre-cartilage condensation - pes phalanx pre-cartilage condensation - - - - - - - - manual digit phalanx pre-cartilage condensation - - - - A pre-cartilage condensation that is part of a manual digit mesenchyme. - fore limb digit phalanx pre-cartilage condensation - forelimb phalanx pre-cartilage condensation - hand digit phalanx pre-cartilage condensation - hand phalanx pre-cartilage condensation - manus phalanx pre-cartilage condensation - - - - - - - - pedal digit phalanx cartilage element - - - - A cartilage element that is part of a pedal digit mesenchyme. - foot digit phalanx cartilage element - hind limb digit phalanx cartilage condensation - - - - - - - - manual digit phalanx cartilage element - - - - A cartilage element that is part of a manual digit mesenchyme. - fore limb digit phalanx cartilage condensation - hand digit phalanx cartilage condensation - - - - - - - - skeleton of manual acropodium - - - The subdivision of the skeleton that consists of all the skeletal elements at the distalmost end of the manual autopodium - i.e. the bones of the hands or their cartilaginous precursors[VSAO,modified]. - all phalanges in forelimb autopod - anterior acropodium - anterior acropodium skeleton - fore acropodium skeleton - hand digit skeleton - manual digit skeleton - manual phalanges - phalanges of hand - phalanges of manus - set of manual phalanges - set of phalanges of hand - set of phalanges of manus - - - - - - - - skeleton of pedal acropodium - - The subdivision of the skeleton that consists of all the skeletal elements at the distalmost end of the pedal autopodium - i.e. the bones of the foot or their cartilaginous precursors[cjm]. - all phalanges in hindlimb autopod - foot digit skeleton - hind acropodium skeleton - pedal phalanges - phalanges of foot - phalanges of pes - posterior acropodium - posterior acropodium skeleton - set of pedal phalanges - set of phalanges of foot - set of phalanges of pes - - - - - - - - phalanx pre-cartilage condensation - - - - - - - - - - phalanx cartilage element - - - phalanx cartilage condensation - - - - - - - - digit mesenchyme - - Mesenchyme of the digit region. - digital ray - - - - - - - - forelimb zeugopod skeleton - - - The collection of all skeletal elements in an forelimb zeugopod region. - antebrachial skeleton - antebrachium skeleton - anterior zeugopodium - anterior zeugopodium skeleton - fore epipodium - fore epipodium skeleton - forearm skeleton - forelimb epipodium - forelimb epipodium skeleton - mesomere 2 of pectoral appendage - radius and ulna - skeleton of forearm - wing zeugopod skeleton - - - - - - - - appendage girdle complex - - - An organism subdivision that includes both an appendage and its associated girdle region. Note that this includes both the skeletal elements and associated tissues (integument, muscle, etc). - appendage complex - appendage-girdle complex - appendage/girdle complex - girdle plus limb or fin - limb - - - - - - - - pectoral complex - - Appendage girdle complex that when present, encompasses the pectoral appendicular skeleton and the pectoral girdle. - pectoral appendage/girdle complex - pectoral girdle plus anterior limb or fin - pectoral girdle plus pectoral limb or fin - upper limb - upper limb and pectoral girdle - upper limb and shoulder - - - - - - - - pelvic complex - - Appendage girdle complex that when present, encompasses the pelvic appendicular skeleton and the pelvic girdle. - lower limb - lower limb and pelvic girdle - lower limb and pelvis - pelvic appendage/girdle complex - pelvic girdle plus pelvic limb or fin - pelvic girdle plus posterior limb or fin - - - - - - - - limb skeleton subdivision - - Skeletal subdivision that is a segment of the limb skeleton. - - - - - - - - girdle skeleton - - The subdivision of the skeleton of either the pectoral or pelvic girdle. - skeleton of girdle - - - - - - - - hindlimb zeugopod skeleton - - Subdivision of skeleton consisting of all skeletal elements in an hindlimb zeugopod region. Typically consists of the tibia and the fibula. - crural skeleton - crus skeleton - hind epipodium - hindlimb epipodium - hindlimb zygopod skeleton - mesomere 2 of pelvic appendage - posterior zeugopodium - posterior zeugopodium skeleton - skeleton cruris - - - - - - - - bone of appendage girdle complex - - A bone that is part of an appendage girdle complex (i.e. any bone in a limb, fin or girdle). - bone of extended limb/fin region - limb bone - - - - - - - - bone of pectoral complex - - A bone that is part of a pectoral complex. Examples: scapula, manus phalanx, any carpal bone, any bone of the pectoral fin. - bone of forelimb or pectoral fin or pectoral girdle - forelimb bone - wing bone - - - - - - - - bone of pelvic complex - - A bone that is part of a pelvic complex. Examples: pubis, ischium, fot phalanx, any tarsal bone, any bone of the pelvic fin or girdle. - hindlimb bone - - - - - - - - meningeal cluster - - The collection of all meningeal layers that line a central nervous system. - cerebral meninges - cluster of meninges - meninges - - - - - - - - lymph node follicle - - A lymphoid follicle that is part of a lymph node. - follicle of lymph node - - - - - - - - lymph node secondary follicle - - - A secondary follicle that is located in a lymph node - - - - - - - - germinal center - - A collection of activated B cells at the center of a secondary follicle, formed after B cells become activated and migrate to the center. - central zone of follice - light zone of follicle - lymhpoid nodule - nodule - reaction center of follicle - - - - - - - - subdivision of organism along appendicular axis - - A major subdivision of an organism that divides an organism along an axis perpedicular to the main body anterior-posterior axis. In vertebrates, this is typically a fin or limb segment. In insects, this includes segments of appendages such as antennae, as well as segments of the insect leg. - appendage segment - appendicular segment - - - - - - - - tibia cartilage element - - - A cartilaginous condensation that has the potential to develop into a tibia. - - - - - - - - tibia pre-cartilage condensation - - - - A pre-cartilage condensation that has the potential to develop into a tibia. - - - - - - - - limb cartilage element - - - A skeletal element that is part of a limb and composed of cartilage tissue. - - - - - - - - limb bone pre-cartilage condensation - - A skeletal element that is part of a limb and composed of pre-cartilage tissue. - - - - - - - - forelimb cartilage element - - - A cartilaginous condensation that has the potential to develop into a forelimb bone. - forelimb wing cartilaginous condensation - wing cartilaginous condensation - - - - - - - - forelimb bone pre-cartilage condensation - - - A pre-cartilage condensation that has the potential to develop into a forelimb bone. - wing bone pre-cartilage condensation - - - - - - - - hindlimb cartilage element - - - A cartilaginous condensation that has the potential to develop into a hindlimb bone. - hindlimb cartilage condensation - - - - - - - - hindlimb pre-cartilage condensation - - - A pre-cartilage condensation that has the potential to develop into a hindlimb bone. - hindlimb pre-cartilage condensation - - - - - - - - pelvic complex muscle - - Muscles of the pelvic girdle, hindlimb or pelvic fin. - lower limb muscle - muscle of lower limb - muscle of pelvic girdle and leg - pelvic girdle and hind limb muscles - pelvic girdle or hind limb muscle - pelvic girdle or posterior limb muscle - - - - - - - - pectoral complex muscle - - A muscle of a pectoral girdle, pectoral fin or anterior limb. - muscle of pectoral girdle and limb - muscle of pectoral girdle and wing - muscle of upper limb - pectoral girdle and fore limb muscles - upper limb muscle - - - - - - - - synchronous hermaphroditic organism - - Hermaphroditic organism that produces both male and female gametes at the same time. - serially hermaphroditic organism - simultaneous hermaphroditic organism - - - - - - - - ossicle - - Skeletal element that is often isolated, small, and variable in composition. - - - - - - - - subdivision of skeleton - - Anatomical cluster consisting of the skeletal elements (i.e. bone elements, cartilage elements, cartilage condensations) that are part of an individual subdivision of the organism. Excludes joints. - skeletal subdivision - subdivision of skeleton (in vivo) - - - - - - - - vertebral element - - Skeletal element that forms around the notochord and is part of the vertebral column. - vertebra element - vertebra endochondral element - vertebra skeletal element - vertebral endochondral element - - - - - - - - craniocervical muscle - - Any muscle organ that is part of either the head or the neck. - muscle of head and neck - muscle of head or neck - - - - - - - - articular cartilage of joint - - A thin layer of cartilage, usually hyaline, on the articular surface of bones in synovial joints. - articular cartilage - cartilago articularis - hyaline cartilage - joint-associated cartilage - - - - - - - - ligament of knee joint - - A ligament that is part of a knee joint. - knee joint ligament - - - - - - - - vertebra cartilage element - - - The cartilaginous form of a vertebral element, a skeletal element that forms around the notochord and is part of the vertebral column. - vertebral cartilage condensation - - - - - - - - vertebra pre-cartilage condensation - - The pre-cartilaginous form of a vertebral element, a skeletal element that forms around the notochord and is part of the vertebral column. - vertebral pre-cartilage condensation - - - - - - - - synovial joint of pelvic girdle - - - A synovial joint that is part of a pelvic girdle region. - joint of pelvic girdle - pelvic girdle joint - - - - - - - - synovial joint of pectoral girdle - - - A synovial joint that is part of a pectoral girdle region. - joint of shoulder girdle - pectoral girdle joint - - - - - - - - nonsynovial joint - - Joint in which the articulating bones or cartilages are connected by ligaments or fibrocartilage without an intervening synovial cavity. Examples: sagittal suture, inferior tibiofibular syndesmosis, costochondral joint, pubic symphysis. - solid joint - - - - - - - - intervertebral cartilage - - A cartilage element that lies between two successive vertebral centra. - - - - - - - - axial skeletal system - - Subdivision of the skeletal system which consists of the axial skeleton plus associated joints. - - - - - - - - postcranial axial skeletal system - - Subdivision of the skeletal system which consists of the postcranial axial skeleton plus associated joints. - axial skeletal system - post-cranial axial skeletal system - - - - - - - - synovial limb joint - - - Any synovial joint that is part of a (free) limb. - synovial joint of free limb segment - - - - - - - - appendicular ossicle - - Ossicle that is part of the appendicular skeleton. - ossicle of appendicular skeleton - - - - - - - - upper urinary tract - - Subdivision of urinary system which consists of the kidney and the ureters. - - - - - - - - submucosal gland - - - Gland of the lamina epithelialis mucosae which perforate the lamina muscularis, with their adenomeres located in the submucosal connective tissue. - - - - - - - - facial skeleton - - - Subdivision of skull that consists of the facial bones. - facial bone - facial skeleton - ossa facialia - ossa faciei - viscerocranium - - - - - - - - primary subdivision of skull - - The skull can be divided into two: the neurocranium and the facial skeleton - skull subdivision - subdivision of skull - - - - - - - - primary subdivision of cranial skeletal system - - - - - - - - - neurocranium bone - - A bone that is part of a neurocranium [Automatically generated definition]. - chondrocranium bone - - - - - - - - epithelium of crypt of Lieberkuhn - - An epithelium that is part of a crypt of Lieberkuhn. - crypt epithelium - intestinal crypt epithelium - - - - - - - - gastrointestinal sphincter - - - A sphincter muscle that is part of the gastrointestinal system - - - - - - - - lamina propria of large intestine - - A lamina propria that is part of a large intestine. - lamina propria of mucosa of large intestine - large intestinal lamina propria - large intestine lamina propria - - - - - - - - parathyroid epithelium - - - - An epithelium that is part of a parathyroid gland. - - - - - - - - muscle layer of large intestine - - A muscle layer that is part of a large intestine. - muscular coat of large intestine - muscular layer of large intestine - muscularis externa of large intestine - tunica muscularis intestini crassi - - - - - - - - muscle layer of small intestine - - A muscle layer that is part of a small intestine. - muscular coat of small intestine - muscular layer of small intestine - muscularis externa of small intestine - small intestine muscularis propria - tunica muscularis (intestinum tenue) - tunica muscularis intestini tenuis - - - - - - - - central nervous system cell part cluster - - A multi cell part structure that is part of a central nervous system. - cell part cluster of neuraxis - neuraxis layer - - - - - - - - organ system subdivision - - A subdivision of an anatomical system. - - - - - - - - intra-ocular muscle - - - intrinsic muscle of eyeball - intrinsic ocular muscle - - - - - - - - appendicular skeletal system - - Subdivision of the skeletal system which consists of the appendicular skeleton plus associated joints. - - - - - - - - autopod bone - - - A bone that is part of a autopod region. Note that this incudes the carpal and tarsal bones. - - - - - - - - scent gland - - Scent glands are exocrine glands found in most mammals. They produce semi-viscous secretions which contain pheromones and other semiochemical compounds. These odor-messengers indicate information such as status, territory marking, mood, and sexual power. The odor may be subliminal-not consciously detectable. Though it is not their primary function, the salivary glands may also function as scent glands in some animals. - - - - - - - - dorsal trunk - - The part of the trunk that is in the dorsum[cjm]. - back of trunk - dorsal part of trunk - dorsum of trunk - trunk back - - - - - - - - embryonic skin basal layer - - - basal cell layer of skin - outer epithelium of body - - - - - - - - submucosa of uterine tube - - - - The submucous layer of the wall of the uterine tube. - submucosa of fallopian tube - submucous layer of uterine tube - tela submucosa tubae uterinae - uterine submucosa - - - - - - - - white matter of telencephalon - - A partion of white matter that is part of a telencephalon. This can be further subdivided in some species, for example, into hemisphere white matter and the corpus callosum. - predominantly white regional part of telencephalon - telencephalic tract/commissure - telencephalic tracts - telencephalic white matter - - - - - - - - gray matter of telencephalon - - A portion of gray matter that is part of a telencephalon. - predominantly gray regional part of telencephalon - - - - - - - - extrinsic tongue pre-muscle mass - - - - - - - - - cranial blood vasculature - - - A blood vasculature that is part of a head. - cranial blood vessel - cranial blood vessels - set of blood vessels of head - - - - - - - - cranial lymph vasculature - - - A lymph vasculature that is part of a head. - cranial lymph vessel - cranial lymph vessels - cranial lymphatics - set of cranial lymphatic vessels - set of lymphatic vessels of head - - - - - - - - prepuce - - - - A retractable double-layered fold of skin and mucous membrane that covers the glans penis or clitoris. Glands may also be present. - - - - - - - - paired limb/fin skeleton - - - The collection of all skeletal elements in an individual limb or fin. - limb/fin skeleton - skeletal parts of limb/fin - skeleton of limb/fin - - - - - - - - zeugopodial skeleton - - - Section of the forelimb skeleton located between the stylopodium and the autopodium. - epipodial skeleton - epipodium - mesomere 2 - mesomere 2 skeleton - skeleton of zeugopod - zeugopod skeleton - zygopodium - - - - - - - - cell condensation - - Anatomical structure that is an aggregation of similar cells from which cartilages and bones form, and from which chondrogenesis and osteogenesis are initiated during repair and/or regeneration. (Hall and Miyake 1995). - - - - - - - - pre-dentine - - Odontogenic tissue that is collagen-rich and characteristic of vertebrate teeth and tooth-like structures (e.g., odontodes) deposited by preodontoblasts and odontoblasts that are typically excluded from the matrix. - pre-dentine tissue - predentin - predentine tissue - - - - - - - - pre-enamel - - Odontogenic tissue that is avascular non-mineralized matrix that is deposited by preameloblast and ameloblasts that are excluded from the matrix. - pre-enamel tissue - preenamel tissue - - - - - - - - jaw region - - - A subdivision of the head that corresponds to the jaw skeleton, containing both soft tissue, skeleton and teeth (when present). The jaw region is divided into upper and lower regions. - - - - - - - - gingiva of lower jaw - - A gingiva that is part of a lower jaw region. - gum of lower jaw - gum of mandible - lower gingiva - lower gum - lower jaw gingiva - lower jaw gum - mandibular gum - - - - - - - - oral epithelium from ectoderm - - - - An epithelium that develops_from a ectoderm and is part of a oral epithelium. - - - - - - - - subdivision of organism along main body axis - - A major subdivision of an organism that divides an organism along its main body axis (typically anterio-posterior axis). In vertebrates, this is based on the vertebral column. - axial subdivision of organism - body segment - main body segment - - - - - - - - embryonic cardiovascular system - - A cardiovascular system that is part of a conceptus. - conceptus cardiovascular system - embryonic circulatory system - fetal circulatory system - - - - - - - - nucleus of spinal cord - - A neural nucleus that is part of the spinal cord. - spinal cord nucleus - - - - - - - - nerve of head region - - A nerve that is part of a head. - cephalic nerve - head nerve - - - - - - - - non-neurogenic ectodermal placode - - Ectodermal placode that does not develop into a component of the nervous system. - - - - - - - - skin appendage placode - - - An ectodermal placode that gives rise to any of the cutaneous appendages that protrude from the skin epidermis (heair, feathers, epidermal scales). - cutaneous appendage follicle placode - skin follicle placode - - - - - - - - atrioventricular region - - - AV region - AV segment - An anatomical junction that divides and overlaps with and atrium and a ventricle in the heart. - atrial ventricular junction - atrioventricular junction - atrioventricular segment - - - - - - - - irregular connective tissue - - Connective tissue, which consists of a population of connective tissue cells, the intercellular matrix of which contains an irregular network of collagen and elastic fiber bundles. Examples: areolar tissue, mucoid tissue, connective tissue of peritoneum, connective tissue of fibrous pericardium. - - - - - - - - dense irregular connective tissue - - - Irregular connective tissue is an irregular connective tissue, the intercellular matrix of which contains a dense irregular network of collagen and elastic fiber bundles. Examples: connective tissue of peritoneum, connective tissue of fibrous pericardium. - irregular dense connective tissue - typus irregularis (textus connectivus collagenosus compactus) - - - - - - - - dense connective tissue - - - Dense connective tissue is mainly composed of collagen type I. Crowded between the collagen fibers are rows of fibroblasts, fiber-forming cells, that manufacture the fibers. Dense connective tissue forms strong, rope-like structures such as tendons and ligaments. Tendons attach skeletal muscles to bones; ligaments connect bones to bones at joints. Ligaments are more stretchy and contain more elastic fibers than tendons. Dense connective tissue also make up the lower layers of the skin (dermis), where it is arranged in sheets - - - - - - - - loose connective tissue - - Irregular connective tissue, the intercellular matrix of which contains a sparse irregular network of collagen and elastic fiber bundles. Examples: areolar tissue, neuroglial tissue, mucoid tissue. - textus connectivus collagenosus laxus - textus connectivus laxus - - - - - - - - duct of sebaceous gland - - - A duct that is part of a sebaceous gland. - sebaceous gland duct - - - - - - - - acinus of sebaceous gland - - - An acinus that is part of a sebaceous gland. - sebaceous gland acinus - - - - - - - - acinus of salivary gland - - An acinus that is part of a salivary gland. - salivary gland acinus - - - - - - - - acinus of lactiferous gland - - - An acinus that is part of a mammary gland. - lactiferous gland acinus - - - - - - - - acinus of lacrimal gland - - - - An acinus that is part of a lacrimal gland. - lacrimal gland acinus - - - - - - - - acinus of exocrine gland - - An acinus that is part of a exocrine gland. - exocrine gland acinus - - - - - - - - collection of collagen fibrils - - - - - - - - - aorta collagen fibril - - - The connective tissue bundles in the extracellular matrix of aorta tissue that are composed of collagen, and play a role in tissue strength and elasticity - - - - - - - - pulmonary collagen fibril - - - The connective tissue bundles in the extracellular matrix of pulmonary tissue that are composed of collagen, and play a role in tissue strength and elasticity - - - - - - - - bone collagen fibril - - The connective tissue bundles in the extracellular matrix of bone tissue that are composed of collagen, and play a role in tissue strength and elasticity - - - - - - - - tendon collagen fibril - - The connective tissue bundles in the extracellular matrix of tendon tissue that are composed of collagen, and play a role in tissue strength and elasticity - - - - - - - - corneal stroma collagen fibril - - - The connective tissue bundles in the extracellular matrix of corneal stroma that are composed of collagen, and play a role in tissue strength and elasticity - - - - - - - - muscle layer of esophagus - - A muscle layer that is part of a wall of esophagus. - muscle coat of esophagus - muscular coat of oesophagus - muscular layer of oesophagus - tela muscularis (oesophagus) - tunica muscularis esophagi - tunica muscularis oesophageae - - - - - - - - anterior uvea - - - Front (ventral) portion of the vascular, pigmentary, or middle coat of the eye, including the ciliary body and the iris. - Haller tunica vascula - anterior part of uveal tract - anterior uveal tract - anterior vascular layer of the eyeball - anterior vascular tunic of the eye - ciliary body and iris - tunica vasculosa bulbosa - vasculosa oculi - ventral uveal tract - - - - - - - - lumen of vagina - - A organ cavity that is part of a vagina. - vaginal lumen - - - - - - - - yolk sac blood island - - - masses of developing blood cells attached to endothelium in the yolk sac - visceral yolk sac blood island - yolk sac blood islands - - - - - - - - connecting stalk blood islands - - - - blood island of umbilical vesicle - insula sanguinea vesiculae umbilicalis - - - - - - - - cochlear basement membrane - - - - The the continuous basement membrane found within the membranous labyrinth of the cochlea, known to extend from the limbus, down to the inner sulcus, across the basilar membrane, up to the external sulcus to the spiral prominence and radiating into the spiral ligament ensheathing the root cell processes - basement membrane of cochlear labyrinth - cochlea basement membrane - - - - - - - - pilosebaceous unit - - - An epidermal invagination that has as parts a hair follicle, a sebaceous gland, and arrector pili muscle - fabrica pilosebacea - pilo-sebaceous apparatus - pilo-sebaceous unit - pilosebaceous apparatus - pilosebaceous gland - - - - - - - - stomach glandular region - - A region of the stomach that is lined with glandular epithelium. - glandular stomach - - - - - - - - coelom - - The aggregate of the coelemic cavity lumen plus the membranes that line the lumen. - coelem - coelomic cavity - enterocoelom - haemocoelom - schizocoelom - - - - - - - - epithelium-associated lymphoid tissue - - - - - - - - - ingested food - - A substance that is consumed by the organism for food. - - - - - - - - segment of autopod - - - - - - - - - digitopodium region - - A segment of the autopod consisting of both acropodial region and metapodial region, but excluding the mesopodial/basopodial region. - acropodium (Wagner) - - - - - - - - manual digitopodium region - - - A digitopodium region that is part of a manus[Obol]. This includes the fingers and metacarpal region, but excludes the carpal region. - - - - - - - - pedal digitopodium region - - - A digitopodium region that is part of a pes[Obol]. This includes the toes and metatarsal region, but excludes the tarsals region. - - - - - - - - skeleton of digitopodium - - - A subdivision of the autopod skeleton consisting of both acropodial skeleon and metapodial skeleton, but excluding the mesopodial/basopodial skeleton. - digitopodium - skeleton of digits - - - - - - - - skeleton of manual digitopodium - - A subdivision of the manus skeleton consisting of both manual acropodial skeleton and metacarpal skeleton, but excluding the carpal skeleton. - manual digitopodium - - - - - - - - skeleton of pedal digitopodium - - A subdivision of the pes skeleton consisting of both pedal acropodial skeleton and metatarsal skeleton, but excluding the tarsal skeleton. - pedal digitopodium - - - - - - - - acoustico-facial VII-VIII ganglion complex - - - acousticofacial ganglion - facio-acoustic VII-VIII ganglion complex - facio-acoustic ganglion - facio-acoustic ganglion complex - facio-acoustic ganglion complex VII-VIII - - - - - - - - head or neck skin - - A zone of skin that is part of a craniocervical region. - - - - - - - - urinary bladder vasculature - - - bladder vasculature - blood vessel of bladder - blood vessels of bladder - network of tubes that carries blood through the distensible musculomembranous organ that serves to collect and store urine excreted by the kidneys[MP] - set of urinary bladder blood vessels - - - - - - - - cervical gland - - glandulae cervicales - mucus-secreting glands in the mucosa of the uterine cervix - - - - - - - - cervical mucosa - - Lining of the head of the uterus (cervix); contains large branched glands; does not undergo sloughing. - - - - - - - - cervix glandular epithelium - - - A glandular epithelium that is part of a uterine cervix. - cervix columnar epithelium - - - - - - - - endocervical epithelium - - The glandular epithelium that lines the endocervix. - endocervical glandular epithelium - - - - - - - - abdominal aorta artery - - An artery that originates from the abdominal aorta - abdominal artery - artery of abdomen - - - - - - - - columnar epithelium - - An epithelium that consists of columnar epithelial cells. Columnar epithelia are epithelial cells whose heights are at least four times their width. Columnar epithelia are divided into simple (or unilayered), and the rarer stratified (or multi-layered).[WP, modified] - - - - - - - - meso-epithelium - - - Epithelium that derives from the mesoderm. [Automatically generated definition]. - mesoderm-derived epithelium - mesoepithelium - - - - - - - - endometrium glandular epithelium - - - - glandular part of endometrium - uterine glands - uterine glands set - - - - - - - - gland of nasal mucosa - - - - The nasal glands are the seromucous glands in the respiratory region of the nasal mucous membrane. The three major types of nasal glands are anterior serous glands, seromucous glands, and Bowman glands. - glandula nasalis - glandulae nasales - nasal gland - - - - - - - - chromaffin paraganglion - - Small bodies containing chromaffin cells occurring outside of the adrenal medulla, most commonly near the sympathetic ganglia and in organs such as the kidney, liver, heart and gonads. - chromaffin body - chromaffin paraganglia - chromaffin paraganglion - paraganglion - - - - - - - - perianal sebaceous gland - - - - A holocrine gland that is part of the pilosebaceous unit of a hair located in the area around the anus. - circumanal gland - perianal gland - - - - - - - - embryonic cloacal fold - - One of the pair of mesenchymal swellings (folds) located on either side of the cloacal membrane during the indifferent stage of embryonic development; cranial to the cloacal membrane the folds unite to form the genital tubercle; caudally the folds are subdivided into urogenital folds anteriorly and anal folds posteriorly - cloacal fold - - - - - - - - mucosa of urethra - - - A mucosa that is part of a urethra. - mucous membrane of urethra - tunica mucosa urethrae - urethral mucosa - - - - - - - - 1st arch maxillary ectoderm - - - - - ectoderm of maxillary component - - - - - - - - embryonic facial prominence - - One of five swellings formed during the development of the face - embryonic facial process - facial primordium - primordium of face - - - - - - - - vagina orifice - - - - The median slit located inferior and posterior to the external urethral orifice in the female; the exit for menstrual flow and birth and the entrance for the penis during sexual intercourse; the size and appearance of the vaginal orifice varies inversely with that of the hymen (G. membrane), a thin fold of mucous membrane that surrounds the vaginal orifice - introitus - introitus - introitus of vagina - opening of vagina - orifice of vagina - ostium vaginae - vagina opening - vaginal introitus - vaginal orifice - - - - - - - - cervical artery - - - An artery of the neck - - - - - - - - keratinized stratified squamous epithelium - - Keratinized stratified squamous epithelium is a stratified squamous epithelium, the cells of which synthesize and accumulate keratin. - epithelium stratificatum squamosum cornificatum - - - - - - - - nasal-associated lymphoid tissue - - - NALT - The lymphocytic cell population present in the mucosa of the nasopharyngeal duct of some animals. - naso-pharyngeal lymphoid tissue - - - - - - - - broad ligament of uterus - - - A broad fold of peritoneum that extends from the side of the uterus to the wall of the pelvis. - broad ligament - broad uterine ligament - ligamentum latum uteri - - - - - - - - perianal skin - - A zone of skin that is part of the area surrounding the anus. - skin of perianal area - - - - - - - - holocrine gland - - any exocrine gland whose secretion consists of its own disintegrated secretory cells along with its secretory product; holocrine secretions are produced in the cytoplasm of the cell and released by the rupture of the plasma membrane, which destroys the cell and results in the secretion of the product into the lumen. - - - - - - - - acropodium region - - The segment of the autopod that is distal to the metapodial region and consists of the digits. - acropodial limb segment - acropodial region - acropodial segment of autopod - set of digits - - - - - - - - manual acropodium region - - - The segment of the manus that is distal to the metacarpal region and consists of the manual digits (fingers). - acropodial hindlimb segment - acropodial region of manus - acropodial segment of manus - all fingers - anterior acropodium - anterior acropodium region - anterior acropodium segment of limb - digiti manus - digits of hand - fingers including thumb - fingers set - manual acropodium - manual acropodium region - manual acropodium segment of limb - set of digits of hand - set of fingers - - - - - - - - pedal acropodium region - - - The segment of the pes that is distal to the metatarsal region and consists of the pedal digits (toes). - acropodial forelimb segment - acropodial region of pes - acropodial segment of pes - all toes - digits of foot - pedal acropodium region - set of toes - toes - toes set - - - - - - - - digitopodium bone - - A bone that is part of a the digitopodium skeleton - i.e. the acropodial skeleton or the metapodial skeleton. - digit bone - - - - - - - - manual digitopodium bone - - - A bone that is part of a the manual digitopodium skeleton - i.e. the fingers or the metacarpal skeleton. - bone of forelimb digitopodium - - - - - - - - pedal digitopodium bone - - - A bone that is part of a the pedal digitopodium skeleton - i.e. the toes or the metatarsal skeleton. - bone of hindlimb digitopodium - - - - - - - - bone of jaw - - - A bone element that is part of a jaw region. - jaw bone - - - - - - - - internal anal region - - - - - - - - - muscle layer of intestine - - A muscle layer that is part of an intestine. - intestinal muscularis propria - muscularis externa of intestine - smooth muscle of intestine - - - - - - - - muscle layer of jejunum - - A muscular coat that is part of a jejunum. - jejunal smooth muscle - muscularis externa of jejunum - muscularis propria of jejunum - smooth muscle of jejunum - - - - - - - - muscle layer of urinary bladder - - - A muscular coat that is part of a urinary bladder. - bladder muscular coat - muscle layer of urinary bladder - muscular coat of bladder - muscular coat of urinary bladder - muscular layer of bladder - muscular layer of urinary bladder - tunica musculari vesicae - tunica muscularis (vesica urinaria) - - - - - - - - respiratory system arterial smooth muscle - - - - - - - - - - respiratory system venous smooth muscle - - A smooth muscle tissue that is part of a respiratory system venous blood vessel. - - - - - - - - layer of microvilli - - A layer of microvilli, Thin cylindrical membrane-covered projections on the surface of an animal cell containing a core bundle of actin filaments[GO,modified] - microvilli - microvillus - - - - - - - - striated border microvillus layer - - A microvillus layer that is striated and found in the intestine. - striated border - - - - - - - - hematopoietic tissue - - - Blood-forming tissue, consisting of reticular fibers and cells. - bone marrow tissue - haemopoietic tissue - hematopoietic tissue - hemopoietic tissue - textus haemopoieticus - - - - - - - - tunica fibrosa of eyeball - - - - The sclera and cornea form the fibrous tunic of the bulb of the eye; the sclera is opaque, and constitutes the posterior five-sixths of the tunic; the cornea is transparent, and forms the anterior sixth. - corneosclera - fibrous layer of eyeball - fibrous tunic - tunica fibrosa - - - - - - - - endothelium of peritubular capillary - - - A endothelium that is part of a peritubular capillary. - peritubular capillary endothelium - peritubular endothelium - - - - - - - - cloacal vent - - - The opening of the cloacal chamber to the outside of the organism. Birds maintain a single cloacal opening throughout their lives. - cloacal opening - cloacal orifice - vent - - - - - - - - extraembryonic cavity - - extraembryonic cavities - - - - - - - - enclosed anatomical space - - An anatomical space with no opening to another space or to the exterior. - closed anatomical space - - - - - - - - anal tooth - - Triangular calcified papillae (often five) placed radially around the anus of some Holothuriidae - anal teeth - calcified anal papilla - cloacal tooth - perianal tooth - - - - - - - - external anal region - - - - - - - - - skeleton of pectoral complex - - The collection of all skeletal elements in a pectoral complex - i.e. the combination of free limb or fin plus pectoral girdle. - bones of upper limb - ossa membri superioris - pectoral complex skeleton - set of bones of upper limb - skeleton of anterior limb/fin and girdle - upper limb skeleton - - - - - - - - skeleton of pelvic complex - - The collection of all skeletal elements in a pelvic complex - i.e. the combination of free limb or fin plus pelvic girdle. - bones of lower limb - lower limb skeleton - ossa membri inferioris - pelvic complex skeleton - set of bones of lower limb - skeleton of posterior limb/fin and girdle - - - - - - - - cloacal gland - - - A gland that is part of a cloaca. - - - - - - - - cloacal mucosa - - - A mucosa that is part of a cloaca [Automatically generated definition]. - cloaca mucosa - cloaca mucosa of organ - cloaca mucous membrane - cloaca organ mucosa - cloacal mucous membrane - mucosa of cloaca - mucosa of organ of cloaca - mucous membrane of cloaca - organ mucosa of cloaca - - - - - - - - cloacal epithelium - - - - - An epithelium that is part of a cloaca. - cloacal endoderm - - - - - - - - submucosa of cloaca - - - A submucosa that is part of a cloaca [Automatically generated definition]. - cloaca submucosa - cloacal submucosa - - - - - - - - serosa of cloaca - - A serous membrane that is part of a cloaca [Automatically generated definition]. - cloaca serosa - cloaca serous membrane - cloacal serosa - serous membrane of cloaca - visceral peritoneum of cloaca - - - - - - - - cloacal villus - - cloacal villi - - - - - - - - muscle layer of cloaca - - - A muscular coat that is part of a cloaca. - muscularis externa of cloaca - smooth muscle of cloaca - - - - - - - - vaginal sphincter - - - - A sphincter muscle that is part of a vagina. - sphincter of vagina - - - - - - - - muscle layer of duodenum - - A muscular coat that is part of a duodenum. - duodenal muscularis propria - muscularis externa of duodenum - muscularis propria of duodenum - smooth muscle of duodenum - - - - - - - - muscle layer of colon - - A muscular coat that is part of a colon. - colon muscularis - colonic muscularis propria - muscular coat of colon - muscular layer of colon - muscularis externa of colon - tunica muscularis coli - - - - - - - - muscle layer of anal canal - - - A muscular coat that is part of a anal canal. - anal canal muscularis propria - anal muscularis propria - muscular coat of anal canal - muscular layer of anal canal - muscularis externa of anal canal - muscularis propria of anal canal - - - - - - - - serosa of appendix - - A serous membrane that is part of a vermiform appendix. - appendiceal serosa - appendix serosa - serosa of vermiform appendix - visceral peritoneum of vermiform appendix - - - - - - - - serosa of uterine tube - - - A serous membrane that is part of a fallopian tube. - serosa of fallopian tube - serosa of oviduct - serous coat of uterine tube - tunica serosa (tuba uterina) - tunica serosa tubae uterinae - uterine tubal serosa - uterine tube serosa - - - - - - - - serosa of fundus of stomach - - A serous membrane that is part of a fundus of stomach. - visceral peritoneum of fundus of stomach - - - - - - - - adventitia of esophagus - - A adventitia that is part of a esophagus. - adventitia of oesophagus - adventitious layer of esophagus - esophageal adventitia - esophagus adventitia - tunica adventitia (esophagus) - tunica adventitia oesophageae - - - - - - - - umbilical smooth muscle - - - A smooth muscle tissue that is part of a umbilical cord. - - - - - - - - gastroduodenal junction - - A anatomical junction that connects a stomach and connects a duodenum. - - - - - - - - mucosa of gastroduodenal junction - - A mucosa that is part of a gastroduodenal junction. - gastroduodenal mucosa - - - - - - - - vein of abdomen - - - A vein that is part of a abdomen. - abdominal vein - - - - - - - - ligament of liver - - - - - A nonskeletal ligament that is part of a liver. - hepatic ligament - liver ligament - - - - - - - - systemic vein - - Any vein within the general circulation that transports blood back to the right atrium of the heart. - systemic venous tree organ part - - - - - - - - hindbrain vesicle - - rhombencephalic vesicle - - - - - - - - future brain vesicle - - brain vesicle - early brain vesicle - primary brain vesicle - primitive brain vesicle - secondary brain vesicle - - - - - - - - foregut-midgut junction gland - - A gland that is part of a foregut-midgut junction. - gland of foregut-midgut junction - - - - - - - - ovarian cortex - - - cortex of ovary - cortex ovarii (zona parenchymatosa) - the layer of the ovarian stroma lying immediately beneath the tunica albuginea, composed of connective tissue cells and fibers, among which are scattered primary and secondary (antral) follicles in various stages of development; the cortex varies in thickness according to the age of the individual, becoming thinner with advancing years; included in the follicles are the cumulus oophorus, membrana granulosa (and the granulosa cells inside it), corona radiata, zona pellucida, and primary oocyte; the zona pellucida, theca of follicle, antrum and liquor folliculi are also contained in the follicle; also in the cortex is the corpus luteum derived from the follicles. - - - - - - - - ovarian medulla - - - highly vascular stroma found in the center of the ovary that forms from embryonic mesenchyme and contains blood vessels, lymphatic vessels, and nerves; this stroma forms the tissue of the hilum by which the ovarian ligament is attached, and through which the blood vessels enter; it does not contain any ovarian follicles. - medulla of ovary - medulla ovarii (zona vasculosa) - zona vasculosa of Waldeyer - - - - - - - - sweat gland of eyelid - - - - Glands of Moll, also known as ciliary glands, are modified apocrine sweat glands that are found on the margin of the eyelid. They are next to the base of the eyelashes, and anterior to the Meibomian glands within the distal eyelid margin. These glands are relatively large and tubular-shaped. The glands of Moll are named after Dutch oculist Jacob Anton Moll (1832-1914). Glands of Moll empty into the adjacent lashes. Glands of Moll and Zeis secrete lipid that adds to the superficial layer of the tear film, retarding evaporation. The glands of Moll are prone to infection and blockage of its duct with sebum and cell debris. Blockage of the gland's duct causes swelling which can manifest itself as a stye. - Moll's gland - ciliary gland - ciliary gland of moll - ciliary sweat gland of eyelid - gland of Moll - - - - - - - - eyelid gland - - - - Any gland that is part of an eyelid. This includes sebaceous glands (Zeis gland, tarsal gland) and sweat glands (Moll's gland). - gland of eyelid - - - - - - - - sebaceous gland of eyelid - - - Any of the sebaceous glands that are in the eyelid. Examples: gland of Zeis (services eyelashes), gland of Meibom (tarsal gland - unconnected to eyelids). - - - - - - - - serous acinus - - The secretory unit of a serous gland. The acinar portion is composed of serous secreting cells. - acinus of serous gland - - - - - - - - embryonic urethral groove - - The precursor of the urethra - sulcus urethralis primarius - urethral groove - urethral sulcus - - - - - - - - male paramesonephric duct - - - - A epithelial tube that develops from a Mullerian duct in a male. Later degenerates. - degenerating mesonephric portion of male paramesonephric duct - - - - - - - - diaphysis of tibia - - - A diaphysis that is part of a tibia. - body of the tibia - body of tibia - corpus tibiae - shaft of tibia - shaft of tibia - tibial diaphysis - - - - - - - - choroidal gland - - - - A gland that is part of a optic choroid. - - - - - - - - cecal tonsil - - A thickened round patch of lymphoid tissue located at the ileocecal junction adjacent to the sacculus rotundus. - caecal tonsil - cecal GALT - - - - - - - - lung endothelium - - - - A blood vessel endothelium that is part of a lung [Automatically generated definition]. - respiratory endothelium - - - - - - - - crypt of Lieberkuhn of ileum - - An intestinal crypt that is located in the ileum. - ileal crypt - ileal crypt of Lieberkuhn - ileal intestinal crypt - - - - - - - - crypt of Lieberkuhn of duodenum - - An intestinal crypt that is located in the duodenum. - duodenal crypt - duodenal crypt of Lieberkuhn - - - - - - - - crypt of Lieberkuhn of jejunum - - An intestinal crypt that is located in the jejunum. - jejunal crypt - jejunal crypt of Lieberkuhn - - - - - - - - crypt of Lieberkuhn of colon - - An intestinal crypt that is located in the colon. The colonic crypts of Lieberkühn are straight and unbranched and lined largely with goblet cells. - colonic crypt - colonic crypt of Lieberkuhn - - - - - - - - crypt of Lieberkuhn of appendix - - An intestinal crypt that is located in the appendix. - appendiceal crypt - appendiceal crypt of Lieberkuhn - - - - - - - - cloacal sphincter - - - A sphincter muscle that is part of a cloaca. - sphincter cloacae - - - - - - - - space surrounding organism - - The space that surrounds an organism. - external to organism - outside of body - - - - - - - - subdivision of oviduct - - - A section through the tube or network of tubes that connects the ovaries to the outside of the body. - subdivision of fallopian tube - subdivision of oviduct - subdivision of uterine tube - uterine tube zone - zone of uterine tube - - - - - - - - subdivision of tube - - - - - - - - - otocyst lumen - - - A anatomical cavity that is part of a ear vesicle. - lumen of otocyst - - - - - - - - sesamoid element - - Ossicle that develops within bands of dense, regular connective tissue (e.g., tendons and ligaments). Sesamoids are generally located proximate to a bony prominence, over which the dense regular connective tissue wraps, and/or a joint or articulation. - sesamoid - - - - - - - - epithelium of intestinal villus - - A epithelium that is part of a intestinal villus. - intestinal villus epithelium - villous epithelium - villus epithelium - - - - - - - - foramen of skull - - Anatomical space that is an opening in a bone of the skull. - cranial conduit - cranial foramen - foramen of skull - foramina of the skull - - - - - - - - anatomical conduit space - - An anatomical space which is the lumen of some anatomical conduit and connects two or more spaces together[FMA,modified]. - foramen space - - - - - - - - tonsil germinal center - - A germinal center that is part of a tonsil. - tonsil reaction center - - - - - - - - appendix lymphoid tissue - - Lymphoid tissue located in the appendix. - appendix lymphoid - lymphatic tissue of appendix - lymphatic tissue of vermiform appendix - - - - - - - - brain endothelium - - - Vascular endothelium found in blood vessels of the blood-brain-barrier. - cerebromicrovascular endothelium - - - - - - - - colon endothelium - - - Vascular endothelium found in colon blood vessels. - colon endothelial cell - colon endothelial cells - colonic endothelial cell - colonic endothelium - colorectal endothelial cell - colorectal endothelium - - - - - - - - tonsil epithelium - - The epithelium that forms the surface of the tonsil dips into the underlying connective tissue in numerous places, forming crypts kown as tonsillar crypts. Stratified squamous epithelium, that may be heavily infiltrated by lymphocytes. Epithelial cells are present in the germinal as well as in the periphery of the nodule. - epithelium of tonsil - tonsil epithelial cell - - - - - - - - exocrine pancreas epithelium - - Epithelium lining the exocrine pancreas. - epithelium of exocrine pancreas - exocrine pancreas epithelial cell - - - - - - - - axial musculature - - Musculature of the head and neck, spine, and ribs. - - - - - - - - main body axis - - A principle subdivision of an organism that includes all structures along the primary axis, typically the anterior-posterior axis, from head to tail, including structures of the body proper where present (for example, ribs), but excluding appendages. - - - - - - - - body proper - - The region of the organism associated with the visceral organs. - body - whole body - - - - - - - - integumentary projection - - - Anatomical projection that is part of the integumentl system. - skin projection - - - - - - - - notochordal canal - - - A tubular passage that extends from the primitive pit into the head process during the early stages of embryonic development in mammals. It perforates the splanchnopleure layer so that the yolk sac and the amnion are connected temporarily. - chordal canal - - - - - - - - metaphysis of tibia - - - A metaphysis that is part of a tibia. - tibial metaphysis - - - - - - - - integumentary system layer - - A organ component layer that is part of a integumental system. - layer of skin - skin layer - - - - - - - - arterial blood - - A blood that is part of a artery. - arterial blood - blood in artery - portion of arterial blood - - - - - - - - venous blood - - A blood that is part of a vein. - blood in vein - portion of venous blood - venous blood - - - - - - - - capillary blood - - A blood that is part of a capillary. - blood in capillary - portion of blood in capillary - portion of capillary blood - - - - - - - - cervical os - - - One of two openings in the uterine cervix. - cervical opening - uterine cervix opening - - - - - - - - digestive system element - - Any of the organs or elements that are part of the digestive system. Examples: tongue, esophagus, spleen, crop, lunge feeding organ, tooth elements. - digestive organ - digestive system organ - - - - - - - - great vessel of heart - - Great vessels is a term used to refer collectively to the large vessels that bring blood to and from the heart. - great vessel - great vessel of thorax - - - - - - - - uterine lumen - - A organ cavity that is part of a uterus. - cavity of uterus - uterine cavity - uterine space - - - - - - - - skin of palmar/plantar part of autopod - - A zone of skin that is part of a palmar/plantar part of autopod. - - - - - - - - skin of sole of pes - - - A zone of skin that is part of a skin of pes. - plantar skin of foot - skin of plantar part of foot - skin of sole of foot - - - - - - - - future telencephalon - - Embryonic structure that gives rise to the telencephalon. - presumptive telencephalon - - - - - - - - mesenchyme derived from neural crest - - - Mesenchyme that develops_from the neural crest[Automatically generated definition]. - mesenchyme from neural crest - neural crest derived mesenchyme - neural crest mesenchyme - - - - - - - - kidney collecting duct epithelium - - - The simple cuboidal epithelium lining the lumen of kidney collecting ducts. - collecting duct of renal tubule epithelium - epithelium of collecting duct of renal tubule - epithelium of renal collecting tubule - - - - - - - - muscle layer of ileum - - A muscular coat that is part of a ileum. - ileal smooth muscle - muscularis externa of ileum - muscularis propria of ileum - smooth muscle of ileum - - - - - - - - palmar/plantar sweat gland - - A sweat gland that is part of the skin of the palmar part of the manus or plantar part of the pes - palm sweat gland - palm/sole sweat gland - palmar eccrine sweat gland - palmar/plantar eccrine sweat gland - sweat gland of palmar part of manus - sweat gland of palmar/plant part of autopod - - - - - - - - renal venous blood vessel - - - Any member of the network of tubes that return blood from the renal tissues to the systemic circulation. - kidney venous blood vessel - kidney venous system - venous blood vessel of kidney - - - - - - - - sex-specific anatomical structure - - A part of the body present only in a specific gender. - gender-specific - gender-specific anatomical structure - sex-specific - - - - - - - - male anatomical structure - - A part of the body present only in males. - male-specific - male-specific structure - - - - - - - - female anatomical structure - - A part of the body present only in females. - - - - - - - - gustatory epithelium of tongue - - - A gustatory epithelium that is part of a tongue. - lingual gustatory epithelium - - - - - - - - subcutaneous abdominal adipose tissue - - - Subcutaneous adipose tissue that is located in the abdominal region. - abdominal subcutaneous adipose tissue - subcutaneous abdominal fat - subcutaneous fat of abdominal region - - - - - - - - white matter lamina of neuraxis - - - lamina of neuraxis - neuraxis lamina - - - - - - - - white matter lamina of diencephalon - - diencephalon lamina - lamina of diencephalon - - - - - - - - white matter lamina of cerebral hemisphere - - cerebral hemisphere lamina - lamina of cerebral hemisphere - - - - - - - - white matter lamina of cerebellum - - The white laminae of cerebellum is subdivision of the cerebellar cortex comprised of myelinated axons lying deep to the granule cell layer of the cerebellar cortex. - isthmus cinguli - isthmus gyri cingulatus - isthmus gyri cinguli - isthmus of gyrus fornicatus - isthmus of the cingulate gyrus - isthmus-2 - lamina alba of cerebellar cortex - laminae albae of cerebellar cortex - laminae albae of cerebellar cortex - white lamina of cerebellum - white laminae of cerebellum - - - - - - - - white matter of medulla oblongata - - - A white matter that is part of a medulla oblongata. - medullary white matter - substantia alba medullae oblongatae - white matter of medulla - white substance of medulla - - - - - - - - frontonasal process epithelium - - - - A epithelium that is part of a frontonasal prominence. - - - - - - - - anal membrane ectodermal component - - - A unilaminar epithelium that develops_from a ectoderm and is part of a anal region. - - - - - - - - primitive renal collecting duct system - - - metanephros primitive collecting ducts - primitive collecting duct - - - - - - - - interlobular duct - - A duct that is located between lobules, within the thin connective tissue septa that separate lobules. All interlobular ducts are excretory. - - - - - - - - mucous acinus - - The secretory unit of a mucous gland. The acinar portion is composed of mucous secreting cells. - acinus of mucuous gland - mucus acinus - - - - - - - - intralobular duct - - A duct that is located within a lobule, with no more connective tissue intervening between ducts and secretory units (i.e., acini or tubules) than between adjacent secretory units. Intercalated and striated ducts are intralobular - intralobular ductule - - - - - - - - interlobar duct - - A duct that is located between lobes, within conspicuous, thick connective tissue septa that separate lobes. All interlobar ducts are excretory. - intralobular ductule - - - - - - - - prosomere - - A neuromere that is part of the presumptive forebrain - forebrain neuromere - forebrain segment - future prosencephalon - segment of forebrain - - - - - - - - midbrain neuromere - - A neuromere that is part of the presumptive midbrain - future mesencephalon - mesomere - mesomere group - mesomere of nervous system - midbrain segment - neuromere of mesomere group - segment of midbrain - - - - - - - - spinal neuromere - - A neuromere that is part of the presumptive spinal cord - spinal cord metameric segment - spinal cord segment - spinal neuromeres - - - - - - - - cloacal muscle - - - - Any muscle organ that is part of a cloaca. - - - - - - - - lingual septum - - The lingual septum consists of a vertical layer of fibrous tissue, extending throughout the entire length of the median plane of the tongue, though not quite reaching the dorsum. It is thicker behind than in front, and occasionally contains a small fibrocartilage, about 6 mm. in length. It is well displayed by making a vertical section across the organ. - median fibrous septum - septum of tongue - septum of tongue - tongue septum - - - - - - - - musculature of forelimb stylopod - - Any collection of muscles that is part of the forelimb stylopod region [Automatically generated definition]. - arm musculature - muscle group of arm - musculature of arm - set of muscles of arm - - - - - - - - musculature of pelvic complex - - Any collection of muscles that is part of a pelvic complex. The pelvic complex comprises the pelvic girdle and the associated limb or fin. - muscles of lower limb - musculature of lower limb - musculi membri inferioris - - - - - - - - musculature of pectoral complex - - Any collection of muscles that is part of a pectoral complex. The pectoral complex comprises the pectoral girdle and the associated limb or fin. - muscles of upper limb - musculature of upper limb - musculi membri superioris - set of muscles of upper limb - upper limb musculature - - - - - - - - pectoral appendage muscle - - Any muscle organ that is part of a pectoral appendage (forelimb or pectoral fin). - - - - - - - - pelvic appendage muscle - - Any muscle organ that is part of a pelvic appendage (hindlimb or pelvic fin). - - - - - - - - brainstem white matter - - White matter that is part of a brainstem [Automatically generated definition]. - brain stem white matter - brainstem tract/commissure - brainstem tracts - brainstem tracts and commissures - - - - - - - - skeletal muscle organ - - A muscle organ that consists of skeletal muscle tissue ensheathed in epimysium, that develops from myotome and that is innervated by some somatic motor neuron. Skeletal muscles are typically attached (via a tendon) to a bone but there are exceptions (e.g. intrinsic tongue muscles). - skeletal muscle - - - - - - - - primordial vasculature - - A portion of tissue that will develop into vasculature. - - - - - - - - intersomitic vessel - - One of the primary blood vessel sprouts that originate from the dorsal aorta and posterior cardinal vein and align dorsoventrally at the myotomal boundaries between somites. - intersegmental vessel - intersegmental vessels - intersomitic blood vessel - intersomitic vessels - segmental vessel - - - - - - - - tibia endochondral element - - - - - - - - - - - The major preaxial endochondral element in the posterior zeugopod[Phenoscape]. - tibia element - tibia skeletal element - - - - - - - - forelimb endochondral element - - - - - - - - - - - A forelimb bone or its cartilage or pre-cartilage precursor. - forelimb skeletal element - - - - - - - - hindlimb endochondral element - - - - - - - - - - - A hindlimb bone or its cartilage or pre-cartilage precursor. - hindlimb bone skeletal element - - - - - - - - phalanx endochondral element - - - - - - - - - - - A phalanx bone or its cartilage or pre-cartilage precursor. - phalanx element - phalanx skeletal element - - - - - - - - manual digit phalanx endochondral element - - - - - - - - - - - - A manual digit phalanx bone or its cartilage or pre-cartilage precursor. - manual digit phalanx element - manual digit phalanx skeletal element - - - - - - - - pedal digit phalanx endochondral element - - - - - - - - - - - - A pedal digit phalanx bone or its cartilage or pre-cartilage precursor. - pedal digit phalanx element - pedal digit phalanx skeletal element - - - - - - - - femur endochondral element - - - - - - - - - - - A femur bone or its cartilage or pre-cartilage precursor. - femur element - femur skeletal element - - - - - - - - limb endochondral element - - - - - - - - - - - - A limb bone or its cartilage or pre-cartilage precursor. - limb bone endochondral element - limb bone skeletal element - - - - - - - - autopod endochondral element - - A endochondral element that is part of a autopod region. - - - - - - - - autopod cartilage - - - A autopod endochondral element that is composed primarily of cartilage tissue. - - - - - - - - subepicardial layer of epicardium - - perimysial connective tissue of subepicardium - subepicardial connective tissue - - - - - - - - epicardial fat - - - - Visceral intrapericardial fat contiguous with the myocardial surface. - epicardial adipose tissue - pericardial adipose tissue - - - - - - - - connective tissue of prostate gland - - - - A portion of connective tissue that is part of a prostate gland. - connective tissue of prostate - - - - - - - - gland of ocular region - - A gland that is typically found in or near the orbital region, in or around either the medial or lateral canthi, and is typically associated with secretions onto the eyeball or associated ducts. Includes the Harderian, nictitans and lacrimal glands. - ocular gland - orbital gland - - - - - - - - lateral gland of orbital region - - A gland that is located in or around the ocular region, nearer the outer canthi. - lateral ocular gland - lateral orbital gland - - - - - - - - multi-unit eye - - An eye consisting of multiple light-sensing organs - - - - - - - - endometrial blood vessel - - - A blood vessel that is part of a endometrium. - blood vessel of endometrium - - - - - - - - neck of tooth - - - - The slightly constricted part of a tooth, between the crown and the root. - cervical margin of tooth - cervical zone of tooth - cervix dentis - cervix of tooth - collumn dentis - dental neck - tooth neck - - - - - - - - lateral structure - - Any structure that is placed on one side of the left-right axis of a bilaterian. - - - - - - - - circulatory organ - - A hollow, muscular organ, which, by contracting rhythmically, contributes to the circulation of lymph, blood or analogs. Examples: a chambered vertebrate heart; the tubular peristaltic heart of ascidians; the dorsal vessel of an insect; the lymoh heart of a reptile. - cardiac pump - cardiac structure - circulatory vessel - heart - heart or heart like organ - - - - - - - - digit skin - - A zone of skin that is part of a digit [Automatically generated definition]. - - - - - - - - modified sebaceous gland - - - - - - - - - respiratory system basement membrane - - A basement membrane of epithelium that is part of a respiratory system. - - - - - - - - heart plus pericardium - - heart/pericardium - - - - - - - - urethra mesenchymal layer - - - A mesenchyme that is part of a urethra. - - - - - - - - ureteral valve - - - A valve that is part of a ureter. - ureteral valve - valve or ureter - - - - - - - - subcutaneous lymph node - - - A lymph node that is part of a hypodermis. - - - - - - - - axilla skin - - A zone of skin that is part of a axilla. - FMA:37322 - MA:0003087 - axillary skin - skin of axilla - - - A zone of skin that is part of a axilla. - OBOL:automatic - - - - - - - - - - nose skin - - A zone of skin that is part of a external nose. - external nasal skin - skin of external nose - skin of nose - - - - - - - - choledocho-duodenal junction - - choledochoduodenal junction - hat part of the duodenal wall traversed by the ductus choledochus, ductus pancreaticus, and ampulla. - - - - - - - - anal canal epithelium - - - A epithelium that is part of a anal canal. - anal canal epithelium - epithelium of anal canal - - - - - - - - heterogeneous tissue - - portion of heterogeneous tissue - - - - - - - - epithelium of duct of salivary gland - - - - A epithelium that is part of a duct of salivary gland. - epithelium of salivary duct - salivary duct epithelium - salivary ductal epithelium - - - - - - - - smooth muscle layer in fatty layer of subcutaneous tissue - - A smooth muscle tissue that is part of a hypodermis. - muscle layer in fatty layer of subcutaneous tissue - stratum musculosum panniculi adiposi telae subcutaneae - - - - - - - - upper respiratory conduit - - - Any anatomical conduit which is part of the upper respiratory tract - respiratory conduit - - - - - - - - olfactory apparatus chamber - - - An anatomical chamber that is part of the olfactory apparatus, consisting of cavity walls (nasal epithelium and mucosal layers) and the space bounded anteriorly by the nares and posteriorly by the choanae, when these structures are present. - - - - - - - - cranial or facial muscle - - cranial-facial muscle - cranial/facial muscle - cranio-facial muscle - craniofacial muscle - - - - - - - - autopod skin - - A zone of skin that is part of a autopod region. - paw skin - - - - - - - - digit connective tissue - - A portion of connective tissue that is part of a digit. - - - - - - - - liver blood vessel - - - A blood vessel that is part of a liver. - hepatic blood vessel - - - - - - - - ear epithelium - - A epithelium that is part of a ear. - - - - - - - - eye epithelium - - - A epithelium that is part of a camera-type eye. - - - - - - - - middle ear epithelium - - A epithelium that is part of a middle ear. - - - - - - - - outer ear epithelium - - A epithelium that is part of a external ear. - - - - - - - - obsolete brainstem reticular formation - true - - - - - - - - foregut epithelium - - A epithelium that is part of a foregut. - - - - - - - - duodenum lamina propria - - A lamina propria that is part of a duodenum. - duodenal lamina propria - lamina propria mucosae of duodenum - lamina propria of duodenum - - - - - - - - visceral abdominal lymph node - - - - - - - - - lymph node of head - - A lymph node that is part of a head. - - - - - - - - facial lymph node - - Any of the lymph nodes that are part of a face. - buccal lymph node - - - - - - - - lymph node of lower limb - - A lymph node that is part of a hindlimb. - - - - - - - - lymph node of upper limb - - A lymph node that is part of a forelimb. - - - - - - - - pulmonary capillary - - - A capillary that is part of a lung. - capillary of lung - - - - - - - - male breast - - A breast that is part of a male organism. - mamma masculina - - - - - - - - chest wall - - Subdivision of thorax which includes all structures from the skin to the costal pleura. Examples: There is only one chest wall. - - - - - - - - liver stroma - - - A stroma that is part of a liver. - hepatic stroma - stroma of liver - - - - - - - - bronchial lymph node - - - A lymph node that is part of a bronchus. - - - - - - - - auditory system - - is the sensory system for the sense of hearing. - - - - - - - - vertebral centrum element - - Skeletal element that functionally replaces the notochord[VSAP,modified]. - centre vertébral@fr - centrum - centrum of vertebra - périchorde@fr - - - - - - - - epithelium of male urethra - - A epithelium that is part of a male urethra. - male urethral epithelium - urethral epithelium of male - - - - - - - - lamina propria of fundus of stomach - - A lamina propria that is part of a mucosa of fundus of stomach. - lamina propria mucosae of fundus of stomach - - - - - - - - lumen of duodenum - - A anatomical space that is part of a duodenum. - doudenal lumen - duodenal lumen - - - - - - - - cavity of left ventricle - - left ventricular cavity - luminal space of the left ventricle of the heart. - - - - - - - - lumen of jejunum - - A anatomical space that is part of a jejunum. - jejunal lumen - jejunum lumen - - - - - - - - epithelium of female urethra - - A epithelium that is part of a female urethra. - female urethral epithelium - urethral epithelium of female - - - - - - - - lobe of cerebral hemisphere - - - - Subdivision of telencephalon which is one of a number of subdivisions of each hemisphere separated by both real landmarks (sulci and fissures) and arbitrary boundaries[FMA,modified]. - cerebral cortical segment - cerebral hemisphere lobe - cerebral lobe - lobe of cerebral cortex - lobe parts of cerebral cortex - lobes of the brain - lobi cerebri - regional organ part of cerebral cortex - segment of cerebral cortex - - - - - - - - white matter of cerebral lobe - - - - - - - - - cortex of cerebral lobe - - Grey matter neocortex region of a lobe of the cerebral hemisphere. - cortex of cerebral hemisphere lobe - cortex of lobe of cerebral hemisphere - gray matter of lobe of cerebral hemisphere - neocortical part of cerebral hemisphere - - - - - - - - white matter of limbic lobe - - A white matter of cerebral lobe that is part of a limbic lobe. - - - - - - - - limbic cortex - - cortex of limbic lobe - gray matter of limbic lobe - limbic lobe cortex - - - - - - - - pharyngeal ectoderm - - - - The external part of the developing pharynx that is made of ectoderm. During vertebrate development, pockets form in pharyngeal ectoderm between the pharyngeal arches. - - - - - - - - central nervous system gray matter layer - - A layer of of the central nervous system that is part of gray matter. - CNS gray matter layer - CNS grey matter layer - gray matter layer of neuraxis - grey matter layer - grey matter layer of neuraxis - - - - - - - - central nervous system white matter layer - - A layer of of the central nervous system that is composed of white matter. - CNS white matter layer - white matter layer - white matter layer of neuraxis - - - - - - - - spinal cord column - - - - - - - - - white matter of midbrain - - A white matter that is part of the midbrain. - mesencephalic white matter - - - - - - - - cerebral blood vessel - - A blood vessel that is part of a cerebellum. - - - - - - - - pit - - An roughly circular indentation in a surface. - - - - - - - - lamina of gray matter of spinal cord - - - rexed lamina - - - - - - - - auditory hillocks, pharyngeal arch 1 derived - - A collection of protruberances derived from pharyngeal arch 1 that develop into the tragus, crus of the helix, and helix. - - - - - - - - auditory hillocks, pharyngeal arch 2 derived - - A collection of protruberances derived from pharyngeal arch 2 that develop into the concha, antihelix and antitragus. - - - - - - - - skin scent gland - - - - A scent gland that is part of the skin - cutaneous scent gland - - - - - - - - interdigital gland - - A skin gland found in the interdigital region of some mammals - interdigital sinus - - - - - - - - future central nervous system - - Primordium that develops into the central nervous system - future CNS - presumptive central nervous system - - - - - - - - future nervous system - - Primordium that develops into the nervous system - presumptive nervous system - - - - - - - - epithelium of terminal part of digestive tract - - Epithelium lining the distalmost portion of the digestive tract. - rectum epithelium - - - - - - - - muscle tissue of terminal part of digestive tract - - Any muscle tissue of the distalmost portion of the digestive tract. - rectum muscle - rectum muscle structure - - - - - - - - entire extraembryonic component - - The part of the conceptus that may be lost before birth or will be discarded at birth, or when the embryo becomes an independent organism. - extra-embryonic component - extraembryonic component - - - - - - - - transitional anatomical structure - - An embryonic anatomical entity that will turn into one or more other anatomical entities, perhaps with other anatomical entities, later in development. - - - - - - - - developing mesenchymal structure - - A mesenchyme-derived anatomical entity undergoing a transtion to become another structure. - - - - - - - - abdominal viscera - - - A viscus that is part of a abdomen. - abdominal viscera - abdominal viscera set - set of abdominal viscera - - - - - - - - muscle layer of rectum - - A muscle layer that is part of the rectum - muscular coat of rectum - muscularis externa of rectum - rectal muscularis propria - tunica muscularis (rectum) - tunica muscularis recti - - - - - - - - rectum smooth muscle tissue - - - - Any portion of smooth muscle tissue that is part of the rectum - rectal smooth muscle tissue - rectum smooth muscle - smooth muscle of rectum - - - - - - - - ligament of middle ear - - A ligament that is part of a middle ear. - - - - - - - - pulmonary part of lymphatic system - - - An organ system subdivision that is the part of the lymphoid system that includes the pulmonary lymphatic vessels. - pulmonary lymphatic chain - pulmonary lymphatic vasculature - - - - - - - - pulmonary lymphatic vessel - - - A lymphatic vessel that is part of a lung. - lymphatic vessel of lung - - - - - - - - axillary sweat gland - - A sweat gland that is part of a axilla. - axillary apocrine sweat gland - sweat gland of axilla - - - - - - - - stroma of pancreas - - A stroma that is part of a pancreas. - pancreatic stroma - - - - - - - - capsule of pancreas - - A capsule that divides the parenchyma of the pancreas into lobes and lobules - pancreatic capsule - - - - - - - - rhombomere boundary - - - A boundary delimiting a rhombomere. - rhombomere junction - - - - - - - - skeletal musculature - - - - - - - - - submucosa of digestive tract - - Any portion of submucosa that lines the digestive tract. - - - - - - - - layer of muscle tissue - - Any organ component layer that consists of muscle tissue. - - - - - - - - muscular coat of digestive tract - - A muscular coat that is part of a digestive tract. - muscular layer of digestive tract - muscularis externa of digestive tract - tunica externa of digestive tract - tunica muscularis of digestive tract - - - - - - - - adrenal tissue - - - - Tissue that is part of some adrenal gland - adrenal gland tissue - - - - - - - - forelimb feather - - A feather that is part of a forelimb. - feather of forelimb - - - - - - - - breast feather - - A feather that is part of a the upper ventral region of an animal's torso. - feather of breast - feather of mammary region - feather of upper chest - feather of upper ventral region - - - - - - - - dorsal feather - - A feather that is part of a the dorsal region of an animal's torso. - feather of back - feather of dorsum - - - - - - - - cardiac muscle tissue of ventricle - - ventricular cardiac muscle tissue - ventricular heart muscle - ventricular muscle - - - - - - - - neck of bone element - - - bone neck - neck of bone - the neck region of a bone organ. - - - - - - - - heart vasculature - - - An interconnected tubular multi-tissue structure that contains fluid that is actively transported around the heart. - cardiac vasculature - - - - - - - - hindlimb feather - - A feather that is part of a hindlimb. - feather of hindlimb - - - - - - - - crural feather - - A feather that is part of a hindlimb zeugopod. - tibial feather - - - - - - - - bladder organ - - - A membranous sac in animals that serves as the receptacle of a liquid or contains gas. - bladder - - - - - - - - reproductive system mucosa - - - genital mucosa - - - - - - - - intramuscular adipose tissue - - Adipose tissue which is located throughout skeletal muscle and is responsible for the marbling seen in certain cuts of beef. In humans, excess accumulation of intramuscular fat is associated with insulin resistance and type 2 diabetes. - intramuscular fat - - - - - - - - carotid artery endothelium - - carotid endothelium - carotid epithelium - - - - - - - - mucous gland of lung - - - - bronchial gland - bronchial mucous gland - peribronchial gland - - - - - - - - skin epithelium - - Any region of epithelium that is part of a skin region. - - - - - - - - chorioretinal region - - - - The part of the eye that consists of both the retina and the optic choroid - chorioretina - choroid and retina - retinachoroid - retinachoroidal region - - - - - - - - white matter of hindbrain - - A white matter that is part of the hindbrain. - - - - - - - - white matter of forebrain - - A white matter that is part of the forebrain. - - - - - - - - white matter of myelencephalon - - A white matter that is part of the myelencephalon. - myelencephalic white matter - - - - - - - - gray matter of hindbrain - - gray matter of the hindbrain - - - - - - - - gray matter of forebrain - - - - - - - - - gray matter of midbrain - - - - - - - - - gray matter of diencephalon - - - - - - - - - white matter of metencephalon - - - - - - - - - sensory organ epithelium - - - - - - - - - nose epithelium - - - - - - - - - - epithelium of external nose - - - Epithelial layer that is part of the external part of the nose. - epithelium of skin of external nose - - - - - - - - exocrine gland of integumental system - - - An exocrine gland that is part of a integumental system. - integumental exocrine gland - integumental system exocrine gland - - - - - - - - epithelium of crypt of Lieberkuhn of small intestine - - - epithelium of small intestinal crypt of Lieberkuhn - wall of small intestinal crypt of Lieberkuhn - - - - - - - - epithelium of crypt of Lieberkuhn of large intestine - - - - - - - - - - lacrimal gland bud - - - the single bud-like invagination of the conjunctival fornix epithelium at the temporal aspect of the eye that signals lacrimal gland formation (Int Rev Cytol. 1996;168:1-80. Cell biology of the harderian gland) - - - - - - - - splenic arteriole - - - - - - - - - - nervous system cell part layer - - Single layer of a laminar structure, identified by different density, arrangement or size of cells and processes arranged in flattened layers or lamina[CUMBO]. - lamina - layer - - - - - - - - visceral serous membrane - - - Serous membrane layer that is adjacent to and lines an organ. - visceral wall of serous membrane - - - - - - - - parietal serous membrane - - - Serous membrane layer that lines to a body cavity. - cavity lining - parietal wall of serous membrane - - - - - - - - mesentery of ileum - - ileal mesentery - ileum mesentery - mesoileum - - - - - - - - placenta blood vessel - - - A blood vessel of the placenta. - placental vessel - - - - - - - - male mammary gland duct - - A mammary gland duct that is part of a male organism. This structure typically regresses. - - - - - - - - white matter of the cerebellar cortex - - White matter that lies deep to the granular cell layer of the cerebellar cortex. It contains afferents to the cerebellar cortex and axons that run between the cerebellar cortex and the deep cerebellar nuclei. - white matter of the cerebellar cortex - - - - - - - - developing neuroepithelium - - An embryonic or larval epithelium that is committed to form part of the nervous system. - embryonic neuroepithelium - neurepithelium - neuroepithelium - - - - - - - - proliferating neuroepithelium - - An epithelium that is undergoing proliferation to provide large numbers of neuronal cells. - - - - - - - - differentiating neuroepithelium - - A neuroepithelium some of whose cells are undergoing terminal differentiation to become neuronal cells. - - - - - - - - spinal cord ventricular layer - - spinal cord lateral wall ventricular layer - - - - - - - - cranial neuron projection bundle - - Any of the cranial nerves, or their central nervous system analogs (the optic tract, the epiphyseal tract). These analogs are not true nerves, and are instead evaginated sensory afferents emanating from the brain - cranial nerve fiber bundle - cranial nerve fiber tract - cranial nerve or tract - neuron projection bundle from brain - - - - - - - - autonomic nerve - - The splanchnic nerves are paired nerves that contribute to the innervation of the viscera, carrying fibers of the autonomic nervous system as well as sensory fibers from the organs. All carry sympathetic fibers except for the pelvic splanchnic nerves, which carry parasympathetic fibers. - nervus visceralis - visceral nerve - - - - - - - - sympathetic nerve - - - - - - - - - morphological feature - - A part of an organism or organ that is continuous with its surroundings and distinguished from its surroundings based on morphology. - - - - - - - - lymphomyeloid tissue - - - - - - - - - future pituitary gland - - pituitary primordium - - - - - - - - multi organ part structure - - An multicellular anatomical structure that has subparts of multiple organs as a part. - anatomical cluster - - - - - - - - cell cluster - - A cluster of cells, largely surrounded by a morphological boundary. - - - - - - - - disconnected anatomical group - - Material anatomical entity consisting of multiple anatomical structures that are not connected to each other. - - - - - - - - anatomical collection - - A collection of anatomical structures that are alike in terms of their morphology or developmental origin. - - - - - - - - anatomical row - - An anatomical collection that is arranged in a line. - - - - - - - - external soft tissue zone - - A region or zone on the surface of an organism that encompasses skin and any adnexa, down through muscles and bounded by underlying skeletal support structures. - - - - - - - - epithelium of biliary system - - The epithelial layer covering the biliary system. This includes the epithelium of the gallbladder (when present) as well as the intrahepatic and extrahepatic bile ducts. - biliary epithelium - biliary system epithelium - biliary tract epithelium - - - - - - - - layer of smooth muscle tissue - - Any organ component layer that consists of smooth muscle tissue. - - - - - - - - zone of organ - - organ region with floating fiat boundary - organ sector - organ zonal region - organ zone - - - - - - - - epithelial layer of duct - - duct epithelium - ductal epithelium - - - - - - - - paraganglion (generic) - - - A cluster of neuroendocrine cells derived from neural crest. Paraganglia may be chromaffin or nonchromaffin - paraganglia - - - - - - - - jaw mesenchyme - - Mesenchyme that is part of a developing jaw [Automatically generated definition]. - - - - - - - - outer renal medulla loop of Henle - - loop of Henle, outer medullary portion - - - - - - - - renal medulla loop of Henle - - loop of Henle of renal medulla - loop of Henle, medullary portion - - - - - - - - eyelid epithelium - - An epithelium that is part of an eyelid [Automatically generated definition]. - - - - - - - - naris epithelium - - An epithelium that is part of a naris [Automatically generated definition]. - - - - - - - - jaw epithelium - - - - - - - - - excretory duct of salivary gland - - - Any of the interlobular excretory ducts of a salivary gland which are found in the connective tissue septa and formed by the union of several intralobular striated (secretory) ducts[MP,generalized]. - - - - - - - - excretory duct - - - - - - - - - interlobular duct of salivary gland - - - - - - - - - - duct of eccrine sweat gland - - - ductal part of eccrine sweat gland - - - - - - - - duct of apocrine sweat gland - - - ductal part of apocrine sweat gland - - - - - - - - thymus subunit - - - lobe or lobule of thymus - - - - - - - - manus cartilage element - - - hand cartilage condensation - - - - - - - - pes cartilage element - - - foot cartilage condensation - - - - - - - - neck of gallbladder - - - The narrowest portion of the gallbladder and distal to the cystic duct. - cervix of gallbladder - gallbladder neck - - - - - - - - prostatic capsule - - - - The membrane the surrounds the prostate gland. - capsule of prostate - capsule of prostate gland - - - - - - - - left cardiac chamber - - - Any chamber of the left side of the heart - - - - - - - - right cardiac chamber - - - Any chamber of the right side of the heart - - - - - - - - lateral line sense organ - - - - - - - - - cartilage of external acoustic meatus - - - - cartilage of acoustic meatus - cartilage of auditory canal - cartilago meatus acustici - external acoustic meatus cartilage - - - - - - - - ocular adnexa - - The parts of the orbital region that are outside of the the eyeball, including the lacrimal apparatus, the extraocular muscles and the eyelids, eyelashes, eyebrows and the conjunctiva - accessory parts of orbital region - accessory visual structures - accessory visual structures set - adnexa oculi - adnexal parts of orbital region - appendage of eye - appendages of the eye - eye adnexa - set of accessory visual structures - structurae oculi accessoriae - - - - - - - - cavity of cardiac chamber - - cardiac chamber cavity - heart cavity - heart lumen - - - - - - - - pulmonary lymph node - - intrapulmonary lymph node - pulmonary node - - - - - - - - intrapulmonary bronchus - - - - - - - - - future mouth - - The primordial mouth region of the developing head. - primitive mouth - primordial mouth - - - - - - - - muscle layer of sigmoid colon - - A muscle layer that is part of the sigmoid colon - muscularis externa of sigmoid colon - muscularis propria of sigmoid colon - sigmoid colon muscularis propria - sigmoideum muscularis - tunica muscularis colon sigmoideum - - - - - - - - serous cavity - - - - - - - - - pericardial fat - - The sum of epicardial and paracardial fat deposits. - - - - - - - - visceral fat - - Any fat deposit surrounding a visceral organ. - - - - - - - - peritoneal sac - - A serous sac that is the aggregate of the peritoneum and the peritoneal cavity, located in the abdominal cavity. - peritoneal component - - - - - - - - wall of blood vessel - - - blood vessel wall - vascular wall - - - - - - - - regurgitated substance - - A bodily fluid consisting of the contents of the digestive tract expulsed through the anterior portion of the digestive tract. - regurgitate - - - - - - - - respiratory primordium epithelium - - - - - - - - - - - - - respiratory primordium mesenchyme - - - respiratory primordium associated mesenchyme - - - - - - - - cardiopharyngeal field - - - - - An region of the mesoderm that includes anterior lateral mesoderm of the first heart field plus contiguous pharyngeal mesoderm that gives rise to second-heart-field-derived regions of the heart and branchiomeric muscles. - - - - - - - - skin appendage follicle - - - An organ subunit in the skin that gives rise to cutaneous appendage. - cutaneous appendage follicle - follicle - skin follicle - - - - - - - - rectosigmoid junction - - An anatomical junction that is between the sigmoid colon and rectum. - rectosigmoid region - - - - - - - - anatomical surface region - - Material anatomical entity that forms the outermost boundary of an anatomical structure. - - - - - - - - skin of face - - A zone of skin that is part of the face. - face skin - facial skin - - - - - - - - spleen pulp - - - Malpighian corpuscles - The parenchyma of the spleen, consisting of lymphocytes and macrophages. It lies between the splenic trabecula. Red pulp is the part suffused with blood and white pulp consists of areas of lymphatic tissue where there are sleeves of lymphocytes and macrophages. - pulp of spleen - splenic pulp - - - - - - - - parenchyma of spleen - - - A parenchyma that is part of a spleen. - splenic parenchyma - - - - - - - - lateral line ganglion - - - Ganglion that develops from a cranial ectodermal placode and contains sensory neurons that innervate a lateral line. - LLG - lateral line ganglia - - - - - - - - posterior lateral line nerve - - Cranial nerve which enters the brain between cranial nerves VIII and IX; contains afferents and sensory efferents to the posterior lateral line ganglion and middle ganglion. Fibers from the posterior lateral line ganglion innervate the occipital dorsal lateral line and trunk lateral lines. - caudal lateral line nerve - - - - - - - - lateral line primordium - - lateral line primordia - llp - - - - - - - - anterior lateral line nerve - - Cranial nerve which enters the brain between cranial nerves VI and VII; contains afferents and sensory efferents to the anterior lateral line ganglia. - rostral lateral line nerve - - - - - - - - posterior lateral line placode - - - - - - - - - - posterior lateral line ganglion - - - The posterior lateral line ganglion develops from a cranial ectodermal placode and contains sensory neurons that innervate the posterior lateral line system. - - - - - - - - anterior lateral line placode - - Dorsolateral placode that gives rise to the anterior lateral line. - anterior lateral line placodes - pre-auditory lateral line placode - - - - - - - - anterior lateral line ganglion - - The anteror lateral line ganglia develops from cranial ectodermal placodes and contain sensory neurons that innervate the anterior lateral line system. - anterior lateral line ganglia - - - - - - - - primitive olfactory epithelium - - - - - - - - - - anterior lateral line system - - - The anterior lateral line system develops from cranial ectodermal placodes, situated between the eye and the ear, that give rise to both the neuromasts and the anterior lateral line sensory nerves that innervate the neuromasts. The anterior lateral line system consists of small sensory patches (neuromasts) located superficially on the skin or just under the skin in fluid-filled canals on the head of all fishes and most amphibians and are innervated by several lateral line nerves, which project to the hindbrain. The anterior lateral line system is stimulated by local water displacements and vibrations, and detects propulsion of the fish through the water, as well as facilitating shoaling, prey capture, and predator and obstacle avoidance. - - - - - - - - anterior lateral line - - The anterior lateral line consists of small sensory patches (neuromasts) located superficially on the skin or just under the skin in fluid-filled canals on the head of all fishes and most amphibians. The anterior lateral line develops from cranial ectodermal placodes situated between the eye and ear. - - - - - - - - posterior lateral line system - - The posterior lateral line system develops from cranial ectodermal placodes, situated behind the ear, that give rise to both the neuromasts and the posterior lateral line sensory nerves that innervate the neuromasts. The posterior lateral line system consists of small sensory patches (neuromasts) located superficially on the skin or just under the skin in fluid-filled canals on the head of all fishes and most amphibians. The neuromasts are innervated by several lateral line nerves, which project primarily to the hindbrain. The posterior mechanosensory lateral line system is stimulated by local water displacements and vibrations, and detects propulsion of the fish through the water, as well as facilitating shoaling, prey capture, and predator and obstacle avoidance. - - - - - - - - anterior lateral line primordium - - A migrating group of cells originating from an anterior lateral line placode. The primordium deposits neuromasts and interneuromasts between them during its migration. - anterior lateral line primordia - - - - - - - - fenestrated capillary - - - Capillary that has pores in the endothelial cells (60-80 nm in diameter) that are spanned by a diaphragm of radially oriented fibrils and allow small molecules and limited amounts of protein to diffuse - fenestrated blood vessel endothelium - fenestrated capillary vessel - - - - - - - - preplacodal ectoderm - - Non neural ectoderm that surrounds the presumptive neural plate and gives rise to neurogenic placodes. - - - - - - - - external integument structure - - Structures of the dermis, epidermis, glands and pigment cells recognizable on the external surfaces of the integument. - - - - - - - - head external integument structure - - Dermal, epidermal, glandular and pigment structures of the external head integument. - - - - - - - - body external integument structure - - Dermal, epidermal, glandular and pigment structures of the body integument. - - - - - - - - limb external integument structure - - Dermal, epidermal, glandular and pigment structures of the limb integument. - - - - - - - - vasculature of respiratory integument - - Blood vessels in respiratory skin. - - - - - - - - mineralized skeletal tissue - - Skeletal tissue that is mineralized. - mineralized tissue - - - - - - - - skeletal element projection - - Anatomical projection that is composed of bone or cartilage tissue. - - - - - - - - surface of bone - - An anatomical surface that is part of a bone - bone surface - - - - - - - - pedal digit plus metapodial segment - - A subdivision of the autopod consisting of pedal digit plus the region incorporating a single metapodial element. These segments are typically repeated along the pre-axiom to post-axial axis. - pedal digit - pedal digit ( phalanges plus metapodial) plus soft tissue - pedal digit digitopodial subdivision - pedal digit ray - - - - - - - - manual digit plus metapodial segment - - A subdivision of the autopod consisting of manual digit plus the region incorporating a single metapodial element. These segments are typically repeated along the pre-axiom to post-axial axis. - manual digit - manual digit ( phalanges plus metapodial) plus soft tissue - manual digit digitopodial subdivision - manual digit ray - - - - - - - - digit plus metapodial segment - - A subdivision of the autopod consisting of digit plus the region incorporating a single metapodial element. These segments are typically repeated along the pre-axiom to post-axial axis. - digit - digit ( phalanges plus metapodial) plus soft tissue - digit digitopodial subdivision - digit ray - - - - - - - - pedal digit digitopodial skeleton - - A subdivision of the skeleton of the autopod consisting of the phalanges of pedal digit plus the associated metapodial element. - pedal digit - pedal digit skeleton - - - - - - - - manual digit digitopodial skeleton - - A subdivision of the skeleton of the autopod consisting of the phalanges of manual digit plus the associated metapodial element. - manual digit - manual digit skeleton - - - - - - - - individual digit of digitopodial skeleton - - - A subdivision of the skeleton of the autopod consisting of the phalanges of a single digit plus the associated metapodial element. - digit - digit skeleton - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/components/klab.component.alignment/biodev/flopo-pto.rdf b/components/klab.component.alignment/biodev/flopo-pto.rdf deleted file mode 100644 index 4c9f64a0b0..0000000000 --- a/components/klab.component.alignment/biodev/flopo-pto.rdf +++ /dev/null @@ -1,1975 +0,0 @@ - - - - -yes -0 -?? -http://data.bioontology.org/ontologies/FLOPO -http://data.bioontology.org/ontologies/PTO -http://data.bioontology.org/ontologies/FLOPO -http://data.bioontology.org/ontologies/PTO - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 0.7 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - - - - 1.0 - = - - - - diff --git a/components/klab.component.alignment/biodev/flopo.owl b/components/klab.component.alignment/biodev/flopo.owl deleted file mode 100644 index 2df0338915..0000000000 --- a/components/klab.component.alignment/biodev/flopo.owl +++ /dev/null @@ -1,566533 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - has quality - - - - - - - - - - - - - hasValue - - - - - - - - - - - - - flora phenotype - - - - - - - - - - - - - - - - - - - - - - - - - - - - stem phenotype - - - - - - - - - - - - - - - - - - - - - - - - stem branched - - - - - - - - - - - - - - - - - - - - - - - - stem branchiness - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf sharpness - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril bifurcated - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril branchiness - - - - - - - - - - - - - - - - - - - - - - - - - - - - bark phenotype - - - - - - - - - - - - - - - - - - - - - - - - bark broken - - - - - - - - - - - - - - - - - - - - - - - - bark wholeness - - - - - - - - - - - - - - - - - - - - - - - - - - - - petal phenotype - - - - - - - - - - - - - - - - - - - - - - - - petal linear - - - - - - - - - - - - - - - - - - - - - - - - petal shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - shoot apex phenotype - - - - - - - - - - - - - - - - - - - - - - - - shoot apex glabrous - - - - - - - - - - - - - - - - - - - - - - - - shoot apex pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - corolla phenotype - - - - - - - - - - - - - - - - - - - - - - - - corolla glabrous - - - - - - - - - - - - - - - - - - - - - - - - corolla pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - involucre phenotype - - - - - - - - - - - - - - - - - - - - - - - - involucre conspicuous - - - - - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem phenotype - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem spherical - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - testa phenotype - - - - - - - - - - - - - - - - - - - - - - - - testa smooth - - - - - - - - - - - - - - - - - - - - - - - - testa texture - - - - - - - - - - - - - - - - - - - - - - - - - - - - fruit phenotype - - - - - - - - - - - - - - - - - - - - - - - - fruit truncated - - - - - - - - - - - - - - - - - - - - - - - - fruit shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex hairy - - - - - - - - - - - - - - - - - - - - - - - - - - - - inflorescence phenotype - - - - - - - - - - - - - - - - - - - - - - - - inflorescence leaf-like - - - - - - - - - - - - - - - - - - - - - - - - inflorescence shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex pinnate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - root phenotype - - - - - - - - - - - - - - - - - - - - - - - - root fleshy - - - - - - - - - - - - - - - - - - - - - - - - root composition - - - - - - - - - - - - - - - - - - - - - - - - - - - - calyx phenotype - - - - - - - - - - - - - - - - - - - - - - - - calyx hairy - - - - - - - - - - - - - - - - - - - - - - - - calyx pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaflet phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaflet symmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaflet symmetry - - - - - - - - - - - - - - - - - - - - - - - - - - - - lamina phenotype - - - - - - - - - - - - - - - - - - - - - - - - lamina unbranched - - - - - - - - - - - - - - - - - - - - - - - - lamina branchiness - - - - - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf phenotype - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf increased length - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf length - - - - - - - - - - - - - - - - - - - - - - - - shoot apex elliptic - - - - - - - - - - - - - - - - - - - - - - - - shoot apex 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - keel phenotype - - - - - - - - - - - - - - - - - - - - - - - - keel left - - - - - - - - - - - - - - - - - - - - - - - - keel direction - - - - - - - - - - - - - - - - - - - - - - - - shoot apex orbicular - - - - - - - - - - - - - - - - - - - - - - - - petal pink - - - - - - - - - - - - - - - - - - - - - - - - petal color - - - - - - - - - - - - - - - - - - - - - - - - fruit rugose - - - - - - - - - - - - - - - - - - - - - - - - fruit surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet basal to - - - - - - - - - - - - - - - - - - - - - - - - leaflet position - - - - - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle phenotype - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle oblong - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle glabrous - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - lower glume phenotype - - - - - - - - - - - - - - - - - - - - - - - - lower glume grey - - - - - - - - - - - - - - - - - - - - - - - - lower glume color - - - - - - - - - - - - - - - - - - - - - - - - - - - - seed phenotype - - - - - - - - - - - - - - - - - - - - - - - - seed yellow - - - - - - - - - - - - - - - - - - - - - - - - seed color - - - - - - - - - - - - - - - - - - - - - - - - calyx pubescent - - - - - - - - - - - - - - - - - - - - - - - - calyx maturity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence swollen - - - - - - - - - - - - - - - - - - - - - - - - inflorescence arrangement - inflorescence structure - - - - - - - - - - - - - - - - - - - - - - - - fruit pedicellate - - - - - - - - - - - - - - - - - - - - - - - - fruit attachment quality - - - - - - - - - - - - - - - - - - - - - - - - - - - - ovary wall phenotype - - - - - - - - - - - - - - - - - - - - - - - - ovary wall glabrous - - - - - - - - - - - - - - - - - - - - - - - - ovary wall pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - central zone phenotype - - - - - - - - - - - - - - - - - - - - - - - - central zone glabrous - - - - - - - - - - - - - - - - - - - - - - - - central zone pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - whole plant phenotype - - - - - - - - - - - - - - - - - - - - - - - - whole plant glabrous - - - - - - - - - - - - - - - - - - - - - - - - whole plant pilosity - - - - - - - - - - - - - - - - - - - - - - - - stem linear - - - - - - - - - - - - - - - - - - - - - - - - stem shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence phenotype - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence pinnate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - perianth phenotype - - - - - - - - - - - - - - - - - - - - - - - - perianth brittle - - - - - - - - - - - - - - - - - - - - - - - - perianth structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - branch phenotype - - - - - - - - - - - - - - - - - - - - - - - - branch rough - - - - - - - - - - - - - - - - - - - - - - - - branch texture - - - - - - - - - - - - - - - - - - - - - - - - leaf oblong - - - - - - - - - - - - - - - - - - - - - - - - leaf 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit basal to - - - - - - - - - - - - - - - - - - - - - - - - fruit position - - - - - - - - - - - - - - - - - - - - - - - - - - - - stigma phenotype - - - - - - - - stigma female - true - - - - - - - - stigma phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - branch smooth - - - - - - - - - - - - - - - - - - - - - - - - - - - - bract phenotype - - - - - - - - - - - - - - - - - - - - - - - - bract linear - - - - - - - - - - - - - - - - - - - - - - - - bract shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence terminal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence position - - - - - - - - - - - - - - - - - - - - - - - - shoot apex undulate - - - - - - - - - - - - - - - - - - - - - - - - - - - - petiole phenotype - - - - - - - - - - - - - - - - - - - - - - - - petiole ovate - - - - - - - - - - - - - - - - - - - - - - - - petiole convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - branch erect - - - - - - - - - - - - - - - - - - - - - - - - branch position - - - - - - - - - - - - - - - - - - - - - - - - - - - - flower phenotype - - - - - - - - - - - - - - - - - - - - - - - - flower pedicellate - - - - - - - - - - - - - - - - - - - - - - - - flower attachment quality - - - - - - - - - - - - - - - - - - - - - - - - flower increased length - - - - - - - - - - - - - - - - - - - - - - - - flower length - - - - - - - - - - - - - - - - - - - - - - - - flower lanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower sharpness - - - - - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium phenotype - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium glabrous - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium pilosity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex dentated - - - - - - - - - - - - - - - - - - - - - - - - shoot apex decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex thickness - - - - - - - - - - - - - - - - - - - - - - - - lower glume rugose - - - - - - - - - - - - - - - - - - - - - - - - lower glume surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - bud phenotype - - - - - - - - - - - - - - - - - - - - - - - - bud mature - - - - - - - - - - - - - - - - - - - - - - - - bud maturity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex bifurcated - - - - - - - - - - - - - - - - - - - - - - - - shoot apex branchiness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence decreased amount - - - - - - - - - - - - - - - - - - - - - - - - inflorescence amount - - - - - - - - - - - - - - - - - - - - - - - - flower spherical - - - - - - - - - - - - - - - - - - - - - - - - flower convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit light green - - - - - - - - - - - - - - - - - - - - - - - - fruit color - - - - - - - - - - - - - - - - - - - - - - - - leaf dentated - - - - - - - - - - - - - - - - - - - - - - - - leaf shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex ovate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina sterile - - - - - - - - - - - - - - - - - - - - - - - - lamina fertility - - - - - - - - - - - - - - - - - - - - - - - - - - - - style phenotype - - - - - - - - - - - - - - - - - - - - - - - - style curved - - - - - - - - - - - - - - - - - - - - - - - - style curvature - - - - - - - - - - - - - - - - - - - - - - - - shoot apex spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - - - - - glume phenotype - - - - - - - - - - - - - - - - - - - - - - - - glume asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - glume symmetry - - - - - - - - - - - - - - - - - - - - - - - - shoot apex oblong - - - - - - - - - - - - - - - - - - - - - - - - leaflet fleshy - - - - - - - - - - - - - - - - - - - - - - - - leaflet composition - - - - - - - - - - - - - - - - - - - - - - - - petiole heart shaped - - - - - - - - - - - - - - - - - - - - - - - - petiole concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem striated - - - - - - - - - - - - - - - - - - - - - - - - - - - - stipule phenotype - - - - - - - - - - - - - - - - - - - - - - - - stipule subulate - - - - - - - - - - - - - - - - - - - - - - - - stipule shape - - - - - - - - - - - - - - - - - - - - - - - - lower glume ovate - - - - - - - - - - - - - - - - - - - - - - - - lower glume convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet phenotype - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet increased length - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet length - - - - - - - - branch up - true - - - - - - - - - - - - - - - - - - - - - - - - branch direction - - - - - - - - lower glume subacute - true - - - - - - - - lower glume duration - true - - - - - - - - - - - - - - - - - - - - - - - - style pubescent - - - - - - - - - - - - - - - - - - - - - - - - style maturity - - - - - - - - - - - - - - - - - - - - - - - - style obtuse - - - - - - - - - - - - - - - - - - - - - - - - style 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex pubescent - - - - - - - - - - - - - - - - - - - - - - - - shoot apex maturity - - - - - - - - - - - - - - - - - - - - - - - - - - - - stamen phenotype - - - - - - - - - - - - - - - - - - - - - - - - stamen sharpness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex caudate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex position - - - - - - - - - - - - - - - - - - - - - - - - leaf glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - rhizome phenotype - - - - - - - - - - - - - - - - - - - - - - - - rhizome lanceolate - - - - - - - - - - - - - - - - - - - - - - - - rhizome sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem angular - - - - - - - - - - - - - - - - - - - - - - - - - - - - filament phenotype - - - - - - - - - - - - - - - - - - - - - - - - filament decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - filament thickness - - - - - - - - - - - - - - - - - - - - - - - - - - - - pedicel phenotype - - - - - - - - - - - - - - - - - - - - - - - - pedicel pedicellate - - - - - - - - - - - - - - - - - - - - - - - - pedicel attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stigma inserted into - - - - - - - - - - - - - - - - - - - - - - - - stigma position - - - - - - - - - - - - - - - - - - - - - - - - bark glabrous - - - - - - - - - - - - - - - - - - - - - - - - bark pilosity - - - - - - - - - - - - - - - - - - - - - - - - pedicel branched - - - - - - - - - - - - - - - - - - - - - - - - pedicel branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril kinked - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril shape - - - - - - - - - - - - - - - - - - - - - - - - branch terminal - - - - - - - - - - - - - - - - - - - - - - - - shoot apex constricted - - - - - - - - - - - - - - - - - - - - - - - - shoot apex structure - - - - - - - - - - - - - - - - - - - - - - - - stem kinked - - - - - - - - - - - - - - - - - - - - - - - - stamen whorled - - - - - - - - - - - - - - - - - - - - - - - - stamen spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - corolla pink - - - - - - - - - - - - - - - - - - - - - - - - corolla color - - - - - - - - flower female - true - - - - - - - - flower phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence branched - - - - - - - - - - - - - - - - - - - - - - - - inflorescence branchiness - - - - - - - - - - - - - - - - - - - - - - - - - - - - anther phenotype - - - - - - - - - - - - - - - - - - - - - - - - anther arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - anther shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence increased length - - - - - - - - - - - - - - - - - - - - - - - - inflorescence length - - - - - - - - - - - - - - - - - - - - - - - - - - - - spikelet phenotype - - - - - - - - - - - - - - - - - - - - - - - - spikelet lanceolate - - - - - - - - - - - - - - - - - - - - - - - - spikelet sharpness - - - - - - - - - - - - - - - - - - - - - - - - - - - - sepal phenotype - - - - - - - - - - - - - - - - - - - - - - - - sepal erect - - - - - - - - - - - - - - - - - - - - - - - - sepal position - - - - - - - - - - - - - - - - - - - - - - - - lamina linear - - - - - - - - - - - - - - - - - - - - - - - - lamina shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - banner petal phenotype - - - - - - - - - - - - - - - - - - - - - - - - banner petal striated - - - - - - - - - - - - - - - - - - - - - - - - banner petal shape - - - - - - - - - - - - - - - - - - - - - - - - glume oblong - - - - - - - - - - - - - - - - - - - - - - - - glume 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex linear - - - - - - - - - - - - - - - - - - - - - - - - leaf flat - - - - - - - - - - - - - - - - - - - - - - - - leaf curvature - - - - - - - - - - - - - - - - - - - - - - - - shoot apex acuminate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex sharpness - - - - - - - - - - - - - - - - - - - - - - - - flower ovate - - - - - - - - - - - - - - - - - - - - - - - - petiole triangular - - - - - - - - - - - - - - - - - - - - - - - - petiole 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stigma bilobed - - - - - - - - - - - - - - - - - - - - - - - - stigma shape - - - - - - - - - - - - - - - - - - - - - - - - banner petal glabrous - - - - - - - - - - - - - - - - - - - - - - - - banner petal pilosity - - - - - - - - - - - - - - - - - - - - - - - - stem condensed - - - - - - - - - - - - - - - - - - - - - - - - stem structure - - - - - - - - flower hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - fruit lobed - - - - - - - - - - - - - - - - - - - - - - - - stigma broken - - - - - - - - - - - - - - - - - - - - - - - - stigma wholeness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall truncated - - - - - - - - - - - - - - - - - - - - - - - - ovary wall shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex truncated - - - - - - - - - - - - - - - - - - - - - - - - keel dark blue - - - - - - - - - - - - - - - - - - - - - - - - keel color - - - - - - - - - - - - - - - - - - - - - - - - - - - - lemma phenotype - - - - - - - - - - - - - - - - - - - - - - - - lemma elliptic - - - - - - - - - - - - - - - - - - - - - - - - lemma 2-D shape - - - - - - - - stem acute - true - - - - - - - - stem duration - true - - - - - - - - - - - - - - - - - - - - - - - - petiole alternate placement - - - - - - - - - - - - - - - - - - - - - - - - petiole spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - root tip phenotype - - - - - - - - - - - - - - - - - - - - - - - - root tip lanceolate - - - - - - - - - - - - - - - - - - - - - - - - root tip sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf circular - - - - - - - - - - - - - - - - - - - - - - - - shoot apex circular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence oblong - - - - - - - - - - - - - - - - - - - - - - - - inflorescence 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - peristome phenotype - - - - - - - - - - - - - - - - - - - - - - - - peristome dark purple - - - - - - - - - - - - - - - - - - - - - - - - peristome color - - - - - - - - - - - - - - - - - - - - - - - - glume obtuse - - - - - - - - - - - - - - - - - - - - - - - - - - - - peduncle phenotype - - - - - - - - - - - - - - - - - - - - - - - - peduncle lateral to - - - - - - - - - - - - - - - - - - - - - - - - peduncle position - - - - - - - - - - - - - - - - - - - - - - - - leaf ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina length - - - - - - - - - - - - - - - - - - - - - - - - fruit circular - - - - - - - - - - - - - - - - - - - - - - - - fruit 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit oblong - - - - - - - - - - - - - - - - - - - - - - - - peduncle glabrous - - - - - - - - - - - - - - - - - - - - - - - - peduncle pilosity - - - - - - - - - - - - - - - - - - - - - - - - flower pubescent - - - - - - - - - - - - - - - - - - - - - - - - flower maturity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex increased length - - - - - - - - - - - - - - - - - - - - - - - - shoot apex length - - - - - - - - - - - - - - - - - - - - - - - - calyx fused with - - - - - - - - - - - - - - - - - - - - - - - - calyx structure - - - - - - - - - - - - - - - - - - - - - - - - petal lanceolate - - - - - - - - - - - - - - - - - - - - - - - - petal sharpness - - - - - - - - pedicel male - true - - - - - - - - pedicel phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - sheath cell phenotype - - - - - - - - - - - - - - - - - - - - - - - - sheath cell glabrous - - - - - - - - - - - - - - - - - - - - - - - - sheath cell pilosity - - - - - - - - - - - - - - - - - - - - - - - - style recurved - - - - - - - - - - - - - - - - - - - - - - - - - - - - oil gland phenotype - - - - - - - - - - - - - - - - - - - - - - - - oil gland decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - oil gland water composition - - - - - - - - - - - - - - - - - - - - - - - - leaflet falciform - - - - - - - - - - - - - - - - - - - - - - - - leaflet shape - - - - - - - - - - - - - - - - - - - - - - - - seed increased length - - - - - - - - - - - - - - - - - - - - - - - - seed length - - - - - - - - - - - - - - - - - - - - - - - - fruit hairy - - - - - - - - - - - - - - - - - - - - - - - - fruit pilosity - - - - - - - - - - - - - - - - - - - - - - - - fruit pubescent - - - - - - - - - - - - - - - - - - - - - - - - fruit maturity - - - - - - - - - - - - - - - - - - - - - - - - corolla pubescent - - - - - - - - - - - - - - - - - - - - - - - - corolla maturity - - - - - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member phenotype - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member ovate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiole autogenous - - - - - - - - - - - - - - - - - - - - - - - - petiole structure - - - - - - - - - - - - - - - - - - - - - - - - inflorescence multi-colored - - - - - - - - - - - - - - - - - - - - - - - - inflorescence color pattern - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence cylindrical - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence red brown - - - - - - - - - - - - - - - - - - - - - - - - inflorescence color - - - - - - - - - - - - - - - - - - - - - - - - lamina acuminate - - - - - - - - - - - - - - - - - - - - - - - - lamina sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem bulbous - - - - - - - - - - - - - - - - - - - - - - - - stem convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - sepal oblong - - - - - - - - - - - - - - - - - - - - - - - - sepal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - periderm phenotype - - - - - - - - - - - - - - - - - - - - - - - - periderm ovate - - - - - - - - - - - - - - - - - - - - - - - - periderm convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - tuber phenotype - - - - - - - - - - - - - - - - - - - - - - - - tuber diameter - - - - - - - - - - - - - - - - - - - - - - - - flower dentated - - - - - - - - - - - - - - - - - - - - - - - - flower shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - bracteole phenotype - - - - - - - - - - - - - - - - - - - - - - - - bracteole inserted into - - - - - - - - - - - - - - - - - - - - - - - - bracteole position - - - - - - - - - - - - - - - - - - - - - - - - ovary wall spherical - - - - - - - - - - - - - - - - - - - - - - - - ovary wall convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - anther elongated - - - - - - - - - - - - - - - - - - - - - - - - stem cylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex scalloped - - - - - - - - - - - - - - - - - - - - - - - - anther ovate - - - - - - - - - - - - - - - - - - - - - - - - anther convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - trichome phenotype - - - - - - - - - - - - - - - - - - - - - - - - trichome glabrous - - - - - - - - - - - - - - - - - - - - - - - - trichome pilosity - - - - - - - - - - - - - - - - - - - - - - - - filament glabrous - - - - - - - - - - - - - - - - - - - - - - - - filament pilosity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence spherical - - - - - - - - - - - - - - - - - - - - - - - - inflorescence convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle lanceolate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem pubescent - - - - - - - - - - - - - - - - - - - - - - - - stem maturity - - - - - - - - - - - - - - - - - - - - - - - - calyx angular - - - - - - - - - - - - - - - - - - - - - - - - calyx shape - - - - - - - - - - - - - - - - - - - - - - - - stipule linear - - - - - - - - - - - - - - - - - - - - - - - - sepal obtuse - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle smooth - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle texture - - - - - - - - - - - - - - - - - - - - - - - - calyx lanceolate - - - - - - - - - - - - - - - - - - - - - - - - calyx sharpness - - - - - - - - - - - - - - - - - - - - - - - - flower increased thickness - - - - - - - - - - - - - - - - - - - - - - - - flower thickness - - - - - - - - - - - - - - - - - - - - - - - - flower pointed - - - - - - - - - - - - - - - - - - - - - - - - peduncle multi-colored - - - - - - - - - - - - - - - - - - - - - - - - peduncle color pattern - - - - - - - - - - - - - - - - - - - - - - - - shoot apex obovate - - - - - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root phenotype - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root kinked - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root shape - - - - - - - - - - - - - - - - - - - - - - - - corolla exserted - - - - - - - - - - - - - - - - - - - - - - - - corolla position - - - - - - - - - - - - - - - - - - - - - - - - bark smooth - - - - - - - - - - - - - - - - - - - - - - - - bark texture - - - - - - - - - - - - - - - - - - - - - - - - calyx acuminate - - - - - - - - - - - - - - - - - - - - - - - - stipule pubescent - - - - - - - - - - - - - - - - - - - - - - - - stipule maturity - - - - - - - - - - - - - - - - - - - - - - - - bud folded - - - - - - - - - - - - - - - - - - - - - - - - bud surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - stem decurrent - - - - - - - - - - - - - - - - - - - - - - - - petal obovate - - - - - - - - - - - - - - - - - - - - - - - - petal convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem simple - - - - - - - - - - - - - - - - - - - - - - - - stem complexity - - - - - - - - - - - - - - - - - - - - - - - - bark grooved - - - - - - - - - - - - - - - - - - - - - - - - rhizome conical - - - - - - - - - - - - - - - - - - - - - - - - rhizome convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf terminal - - - - - - - - - - - - - - - - - - - - - - - - leaf position - - - - - - - - - - - - - - - - - - - - - - - - - - - - stele phenotype - - - - - - - - - - - - - - - - - - - - - - - - stele cylindrical - - - - - - - - - - - - - - - - - - - - - - - - stele convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina obovate - - - - - - - - - - - - - - - - - - - - - - - - lamina convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - scutellar node phenotype - - - - - - - - - - - - - - - - - - - - - - - - scutellar node swollen - - - - - - - - - - - - - - - - - - - - - - - - scutellar node structure - - - - - - - - - - - - - - - - - - - - - - - - petiole obconical - - - - - - - - - - - - - - - - - - - - - - - - corolla purple - - - - - - - - - - - - - - - - - - - - - - - - leaf scalloped - - - - - - - - - - - - - - - - - - - - - - - - stem grey - - - - - - - - - - - - - - - - - - - - - - - - stem color - - - - - - - - - - - - - - - - - - - - - - - - - - - - hypanthium phenotype - - - - - - - - - - - - - - - - - - - - - - - - hypanthium inserted into - - - - - - - - - - - - - - - - - - - - - - - - hypanthium position - - - - - - - - - - - - - - - - - - - - - - - - stipule lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stipule sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf opposite - - - - - - - - - - - - - - - - - - - - - - - - involucre diameter - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence increased thickness - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex lanceolate - - - - - - - - - - - - - - - - - - - - - - - - - - - - costa phenotype - - - - - - - - - - - - - - - - - - - - - - - - costa basal to - - - - - - - - - - - - - - - - - - - - - - - - costa position - - - - - - - - - - - - - - - - - - - - - - - - leaflet triangular - - - - - - - - - - - - - - - - - - - - - - - - leaflet 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - style swollen - - - - - - - - - - - - - - - - - - - - - - - - style structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - tubercle phenotype - - - - - - - - - - - - - - - - - - - - - - - - tubercle tomentose - - - - - - - - - - - - - - - - - - - - - - - - tubercle pilosity - - - - - - - - - - - - - - - - - - - - - - - - lamina oblong - - - - - - - - - - - - - - - - - - - - - - - - lamina 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle prominent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle position - - - - - - - - - - - - - - - - - - - - - - - - - - - - petiolule phenotype - - - - - - - - - - - - - - - - - - - - - - - - petiolule ovate - - - - - - - - - - - - - - - - - - - - - - - - petiolule convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall discoid - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dense - - - - - - - - - - - - - - - - - - - - - - - - inflorescence mass density - - - - - - - - - - - - - - - - - - - - - - - - branch triangular - - - - - - - - - - - - - - - - - - - - - - - - branch 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - lenticel phenotype - - - - - - - - - - - - - - - - - - - - - - - - lenticel increased length - - - - - - - - - - - - - - - - - - - - - - - - lenticel length - - - - - - - - - - - - - - - - - - - - - - - - whole plant glandular - - - - - - - - - - - - - - - - - - - - - - - - whole plant morphology - - - - - - - - - - - - - - - - - - - - - - - - bracteole pedicellate - - - - - - - - - - - - - - - - - - - - - - - - bracteole attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stigma clavate - - - - - - - - - - - - - - - - - - - - - - - - stigma concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein phenotype - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein furrowed - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein texture - - - - - - - - - - - - - - - - - - - - - - - - lamina flat - - - - - - - - - - - - - - - - - - - - - - - - lamina curvature - - - - - - - - - - - - - - - - - - - - - - - - petiole blunt - - - - - - - - - - - - - - - - - - - - - - - - petiole sharpness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet terminal - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet position - - - - - - - - - - - - - - - - - - - - - - - - anther whorled - - - - - - - - - - - - - - - - - - - - - - - - anther spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue phenotype - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue circular - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - connective phenotype - - - - - - - - - - - - - - - - - - - - - - - - connective bilobed - - - - - - - - - - - - - - - - - - - - - - - - connective shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - exocarp phenotype - - - - - - - - - - - - - - - - - - - - - - - - exocarp decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - exocarp thickness - - - - - - - - - - - - - - - - - - - - - - - - petiole pubescent - - - - - - - - - - - - - - - - - - - - - - - - petiole maturity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem basal to - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem position - - - - - - - - - - - - - - - - - - - - - - - - stem lateral to - - - - - - - - - - - - - - - - - - - - - - - - stem position - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root thickness - - - - - - - - - - - - - - - - - - - - - - - - stamen conical - - - - - - - - - - - - - - - - - - - - - - - - stamen convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - axil phenotype - - - - - - - - - - - - - - - - - - - - - - - - axil spherical - - - - - - - - - - - - - - - - - - - - - - - - axil convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lemma flat - - - - - - - - - - - - - - - - - - - - - - - - lemma curvature - - - - - - - - - - - - - - - - - - - - - - - - style simple - - - - - - - - - - - - - - - - - - - - - - - - style complexity - - - - - - - - - - - - - - - - - - - - - - - - corolla yellow - - - - - - - - - - - - - - - - - - - - - - - - fruit spherical - - - - - - - - - - - - - - - - - - - - - - - - fruit convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - upper glume phenotype - - - - - - - - - - - - - - - - - - - - - - - - upper glume elliptic - - - - - - - - - - - - - - - - - - - - - - - - upper glume 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf glandular - - - - - - - - - - - - - - - - - - - - - - - - leaf morphology - - - - - - - - - - - - - - - - - - - - - - - - bracteole pubescent - - - - - - - - - - - - - - - - - - - - - - - - bracteole maturity - - - - - - - - pedicel up - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel direction - - - - - - - - - - - - - - - - - - - - - - - - fruit decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - fruit water composition - - - - - - - - - - - - - - - - - - - - - - - - whole plant erect - - - - - - - - - - - - - - - - - - - - - - - - whole plant position - - - - - - - - - - - - - - - - - - - - - - - - trichome circular - - - - - - - - - - - - - - - - - - - - - - - - trichome 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract basal to - - - - - - - - - - - - - - - - - - - - - - - - bract position - - - - - - - - - - - - - - - - - - - - - - - - shoot apex cylindrical - - - - - - - - style up - true - - - - - - - - - - - - - - - - - - - - - - - - style direction - - - - - - - - - - - - - - - - - - - - - - - - - - - - apical hook phenotype - - - - - - - - - - - - - - - - - - - - - - - - apical hook spherical - - - - - - - - - - - - - - - - - - - - - - - - apical hook convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiole obtuse - - - - - - - - - - - - - - - - - - - - - - - - glume length - - - - - - - - - - - - - - - - - - - - - - - - flower erect - - - - - - - - - - - - - - - - - - - - - - - - flower position - - - - - - - - - - - - - - - - - - - - - - - - perianth oblong - - - - - - - - - - - - - - - - - - - - - - - - perianth 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - corolla blue - - - - - - - - - - - - - - - - - - - - - - - - stem pedicellate - - - - - - - - - - - - - - - - - - - - - - - - stem attachment quality - - - - - - - - - - - - - - - - - - - - - - - - peduncle crowded - - - - - - - - - - - - - - - - - - - - - - - - calyx spatulate - - - - - - - - - - - - - - - - - - - - - - - - calyx 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril cylindrical - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - petiole margin phenotype - - - - - - - - - - - - - - - - - - - - - - - - petiole margin cuspidate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin sharpness - - - - - - - - - - - - - - - - - - - - - - - - - - - - aril phenotype - - - - - - - - - - - - - - - - - - - - - - - - aril vertical - - - - - - - - - - - - - - - - - - - - - - - - aril spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - sepal triangular - - - - - - - - - - - - - - - - - - - - - - - - leaf branched - - - - - - - - - - - - - - - - - - - - - - - - leaf branchiness - - - - - - - - - - - - - - - - - - - - - - - - sheath cell striated - - - - - - - - - - - - - - - - - - - - - - - - sheath cell shape - - - - - - - - - - - - - - - - - - - - - - - - central zone pubescent - - - - - - - - - - - - - - - - - - - - - - - - central zone maturity - - - - - - - - - - - - - - - - - - - - - - - - rhizome striated - - - - - - - - - - - - - - - - - - - - - - - - rhizome shape - - - - - - - - - - - - - - - - - - - - - - - - calyx glabrous - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle curved - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle curvature - - - - - - - - - - - - - - - - - - - - - - - - pedicel glabrous - - - - - - - - - - - - - - - - - - - - - - - - pedicel pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant cell phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant cell swollen - - - - - - - - - - - - - - - - - - - - - - - - plant cell structure - - - - - - - - - - - - - - - - - - - - - - - - bract acuminate - - - - - - - - - - - - - - - - - - - - - - - - bract sharpness - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle basal to - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet attenuate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system pinnate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system shape - - - - - - - - - - - - - - - - - - - - - - - - fruit elliptic - - - - - - - - - - - - - - - - - - - - - - - - scutellar node erect - - - - - - - - - - - - - - - - - - - - - - - - scutellar node position - - - - - - - - - - - - - - - - - - - - - - - - leaf oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - pedicel pubescent - - - - - - - - - - - - - - - - - - - - - - - - pedicel maturity - - - - - - - - - - - - - - - - - - - - - - - - sepal ovate - - - - - - - - - - - - - - - - - - - - - - - - sepal convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem decreased amount - - - - - - - - - - - - - - - - - - - - - - - - stem amount - - - - - - - - - - - - - - - - - - - - - - - - shoot apex attenuate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle obtuse - - - - - - - - - - - - - - - - - - - - - - - - stem sterile - - - - - - - - - - - - - - - - - - - - - - - - stem fertility - - - - - - - - - - - - - - - - - - - - - - - - calyx tubular - - - - - - - - - - - - - - - - - - - - - - - - calyx convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf elliptic - - - - - - - - - - - - - - - - - - - - - - - - corolla acuminate - - - - - - - - - - - - - - - - - - - - - - - - corolla sharpness - - - - - - - - - - - - - - - - - - - - - - - - seed linear - - - - - - - - - - - - - - - - - - - - - - - - seed shape - - - - - - - - - - - - - - - - - - - - - - - - bract lanceolate - - - - - - - - - - - - - - - - - - - - - - - - corolla attenuate - - - - - - - - - - - - - - - - - - - - - - - - fruit dry - - - - - - - - - - - - - - - - - - - - - - - - fruit wetness - - - - - - - - - - - - - - - - - - - - - - - - stipule opposite - - - - - - - - - - - - - - - - - - - - - - - - stipule position - - - - - - - - - - - - - - - - - - - - - - - - petiole inserted into - - - - - - - - - - - - - - - - - - - - - - - - petiole position - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle raised - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle shape - - - - - - - - - - - - - - - - - - - - - - - - style truncated - - - - - - - - - - - - - - - - - - - - - - - - style shape - - - - - - - - - - - - - - - - - - - - - - - - filament exserted - - - - - - - - - - - - - - - - - - - - - - - - filament position - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle increased length - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle length - - - - - - - - - - - - - - - - - - - - - - - - fruit glabrous - - - - - - - - - - - - - - - - - - - - - - - - - - - - staminode phenotype - - - - - - - - - - - - - - - - - - - - - - - - staminode lanceolate - - - - - - - - - - - - - - - - - - - - - - - - staminode sharpness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex spherical - - - - - - - - - - - - - - - - - - - - - - - - lamina ovate - - - - - - - - - - - - - - - - - - - - - - - - petiolule glandular - - - - - - - - - - - - - - - - - - - - - - - - petiolule morphology - - - - - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle phenotype - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle hairy - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle pilosity - - - - - - - - - - - - - - - - - - - - - - - - petiole differentiated - - - - - - - - - - - - - - - - - - - - - - - - petiole cellular potency - - - - - - - - - - - - - - - - - - - - - - - - petal oblong - - - - - - - - - - - - - - - - - - - - - - - - petal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina present - - - - - - - - - - - - - - - - - - - - - - - - lamina amount - - - - - - - - - - - - - - - - - - - - - - - - leaflet terminal - - - - - - - - - - - - - - - - - - - - - - - - petiole glabrous - - - - - - - - - - - - - - - - - - - - - - - - petiole pilosity - - - - - - - - - - - - - - - - - - - - - - - - stamen glabrous - - - - - - - - - - - - - - - - - - - - - - - - stamen pilosity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex raised - - - - - - - - - - - - - - - - - - - - - - - - bract orbicular - - - - - - - - - - - - - - - - - - - - - - - - bract 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stele pubescent - - - - - - - - - - - - - - - - - - - - - - - - stele maturity - - - - - - - - - - - - - - - - - - - - - - - - involucre cylindrical - - - - - - - - - - - - - - - - - - - - - - - - involucre convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - endosperm phenotype - - - - - - - - - - - - - - - - - - - - - - - - endosperm absent - - - - - - - - - - - - - - - - - - - - - - - - endosperm amount - - - - - - - - - - - - - - - - - - - - - - - - bract ovate - - - - - - - - - - - - - - - - - - - - - - - - bract convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - style raised - - - - - - - - - - - - - - - - - - - - - - - - peduncle pubescent - - - - - - - - - - - - - - - - - - - - - - - - peduncle maturity - - - - - - - - - - - - - - - - - - - - - - - - lemma shape - - - - - - - - - - - - - - - - - - - - - - - - fruit straight - - - - - - - - peduncle up - true - - - - - - - - - - - - - - - - - - - - - - - - peduncle direction - - - - - - - - - - - - - - - - - - - - - - - - inflorescence opposite - - - - - - - - - - - - - - - - - - - - - - - - pedicel slender - - - - - - - - - - - - - - - - - - - - - - - - pedicel shape - - - - - - - - - - - - - - - - - - - - - - - - aril reniform - - - - - - - - - - - - - - - - - - - - - - - - aril concave 3-D shape - - - - - - - - shoot apex premature - true - - - - - - - - shoot apex onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - branch wrinkled - - - - - - - - - - - - - - - - - - - - - - - - - - - - canal phenotype - - - - - - - - - - - - - - - - - - - - - - - - canal decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - canal thickness - - - - - - - - - - - - - - - - - - - - - - - - corolla circular - - - - - - - - - - - - - - - - - - - - - - - - corolla 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - style exserted - - - - - - - - - - - - - - - - - - - - - - - - style position - - - - - - - - - - - - - - - - - - - - - - - - anther glabrous - - - - - - - - - - - - - - - - - - - - - - - - anther pilosity - - - - - - - - - - - - - - - - - - - - - - - - calyx length - - - - - - - - - - - - - - - - - - - - - - - - rhizome fleshy - - - - - - - - - - - - - - - - - - - - - - - - rhizome composition - - - - - - - - - - - - - - - - - - - - - - - - filament adaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaflet erect - - - - - - - - - - - - - - - - - - - - - - - - stem aromatic - - - - - - - - - - - - - - - - - - - - - - - - stem aromaticity - - - - - - - - - - - - - - - - - - - - - - - - leaflet glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaflet pilosity - - - - - - - - - - - - - - - - - - - - - - - - petiole furrowed - - - - - - - - - - - - - - - - - - - - - - - - petiole texture - - - - - - - - - - - - - - - - - - - - - - - - lemma convolute - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pedunculate - - - - - - - - - - - - - - - - - - - - - - - - style cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - style concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - staminode autogenous - - - - - - - - - - - - - - - - - - - - - - - - staminode structure - - - - - - - - - - - - - - - - - - - - - - - - upper glume obtuse - - - - - - - - - - - - - - - - - - - - - - - - stem auriculate - - - - - - - - - - - - - - - - - - - - - - - - bract leaf-like - - - - - - - - - - - - - - - - - - - - - - - - inflorescence old - - - - - - - - - - - - - - - - - - - - - - - - inflorescence age - - - - - - - - - - - - - - - - - - - - - - - - central zone branched - - - - - - - - - - - - - - - - - - - - - - - - central zone branchiness - - - - - - - - - - - - - - - - - - - - - - - - flower glabrous - - - - - - - - - - - - - - - - - - - - - - - - flower pilosity - - - - - - - - - - - - - - - - - - - - - - - - lamina cuneate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle arched - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle concavity - - - - - - - - - - - - - - - - - - - - - - - - scutellar node hairy - - - - - - - - - - - - - - - - - - - - - - - - scutellar node pilosity - - - - - - - - - - - - - - - - - - - - - - - - stigma increased length - - - - - - - - - - - - - - - - - - - - - - - - stigma length - - - - - - - - - - - - - - - - - - - - - - - - leaf dense - - - - - - - - - - - - - - - - - - - - - - - - leaf mass density - - - - - - - - - - - - - - - - - - - - - - - - leaf simple - - - - - - - - - - - - - - - - - - - - - - - - leaf complexity - - - - - - - - sepal female - true - - - - - - - - sepal phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - banner petal oblong - - - - - - - - - - - - - - - - - - - - - - - - banner petal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall position - - - - - - - - - - - - - - - - - - - - - - - - sepal linear - - - - - - - - - - - - - - - - - - - - - - - - sepal shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - tepal phenotype - - - - - - - - - - - - - - - - - - - - - - - - tepal linear - - - - - - - - - - - - - - - - - - - - - - - - tepal shape - - - - - - - - - - - - - - - - - - - - - - - - calyx triangular - - - - - - - - - - - - - - - - - - - - - - - - perianth lobed - - - - - - - - - - - - - - - - - - - - - - - - perianth shape - - - - - - - - - - - - - - - - - - - - - - - - stamen increased length - - - - - - - - - - - - - - - - - - - - - - - - stamen length - - - - - - - - - - - - - - - - - - - - - - - - corolla curled - - - - - - - - - - - - - - - - - - - - - - - - corolla shape - - - - - - - - involucre hermaphrodite - true - - - - - - - - involucre phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence flattened - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence curvature - - - - - - - - - - - - - - - - - - - - - - - - pedicel decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - pedicel thickness - - - - - - - - - - - - - - - - - - - - - - - - petiole lanceolate - - - - - - - - - - - - - - - - - - - - - - - - style flattened - - - - - - - - - - - - - - - - - - - - - - - - - - - - androecium phenotype - - - - - - - - - - - - - - - - - - - - - - - - androecium dentated - - - - - - - - - - - - - - - - - - - - - - - - androecium shape - - - - - - - - - - - - - - - - - - - - - - - - lamina oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - involucre pubescent - - - - - - - - - - - - - - - - - - - - - - - - involucre maturity - - - - - - - - - - - - - - - - - - - - - - - - flower acuminate - - - - - - - - - - - - - - - - - - - - - - - - bud cylindrical - - - - - - - - - - - - - - - - - - - - - - - - bud convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - crown root phenotype - - - - - - - - - - - - - - - - - - - - - - - - crown root autogenous - - - - - - - - - - - - - - - - - - - - - - - - crown root structure - - - - - - - - - - - - - - - - - - - - - - - - seed glabrous - - - - - - - - - - - - - - - - - - - - - - - - seed pilosity - - - - - - - - - - - - - - - - - - - - - - - - rhizome glabrous - - - - - - - - - - - - - - - - - - - - - - - - rhizome pilosity - - - - - - - - - - - - - - - - - - - - - - - - crown root truncated - - - - - - - - - - - - - - - - - - - - - - - - crown root shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - ligule phenotype - - - - - - - - - - - - - - - - - - - - - - - - ligule truncated - - - - - - - - - - - - - - - - - - - - - - - - ligule shape - - - - - - - - - - - - - - - - - - - - - - - - petiole adaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf condensed - - - - - - - - - - - - - - - - - - - - - - - - leaf structure - - - - - - - - - - - - - - - - - - - - - - - - peduncle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - peduncle thickness - - - - - - - - - - - - - - - - - - - - - - - - axil attenuate - - - - - - - - - - - - - - - - - - - - - - - - axil sharpness - - - - - - - - - - - - - - - - - - - - - - - - branch pubescent - - - - - - - - - - - - - - - - - - - - - - - - branch maturity - - - - - - - - - - - - - - - - - - - - - - - - peduncle smooth - - - - - - - - - - - - - - - - - - - - - - - - peduncle texture - - - - - - - - - - - - - - - - - - - - - - - - petal glabrous - - - - - - - - - - - - - - - - - - - - - - - - petal pilosity - - - - - - - - - - - - - - - - - - - - - - - - bract pedicellate - - - - - - - - - - - - - - - - - - - - - - - - bract attachment quality - - - - - - - - - - - - - - - - - - - - - - - - sepal posterior to - - - - - - - - - - - - - - - - - - - - - - - - petiole glandular - - - - - - - - - - - - - - - - - - - - - - - - petiole morphology - - - - - - - - - - - - - - - - - - - - - - - - - - - - growth ring phenotype - - - - - - - - - - - - - - - - - - - - - - - - growth ring branched - - - - - - - - - - - - - - - - - - - - - - - - growth ring branchiness - - - - - - - - - - - - - - - - - - - - - - - - stipule ovate - - - - - - - - - - - - - - - - - - - - - - - - stipule convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract cuspidate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - shoot apex water composition - - - - - - - - - - - - - - - - - - - - - - - - petal attached to - - - - - - - - - - - - - - - - - - - - - - - - petal attachment quality - - - - - - - - - - - - - - - - - - - - - - - - fruit brown - - - - - - - - - - - - - - - - - - - - - - - - shoot apex opposite - - - - - - - - - - - - - - - - - - - - - - - - - - - - seed trichome phenotype - - - - - - - - - - - - - - - - - - - - - - - - seed trichome decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - seed trichome water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf linear - - - - - - - - - - - - - - - - - - - - - - - - bud slender - - - - - - - - - - - - - - - - - - - - - - - - bud shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex dispersed - - - - - - - - - - - - - - - - - - - - - - - - peduncle terminal - - - - - - - - - - - - - - - - - - - - - - - - corolla inserted into - - - - - - - - - - - - - - - - - - - - - - - - fruit oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - corolla mature - - - - - - - - connective up - true - - - - - - - - - - - - - - - - - - - - - - - - connective direction - - - - - - - - - - - - - - - - - - - - - - - - stem glabrous - - - - - - - - - - - - - - - - - - - - - - - - stem pilosity - - - - - - - - - - - - - - - - - - - - - - - - sepal elliptic - - - - - - - - - - - - - - - - - - - - - - - - - - - - palea phenotype - - - - - - - - - - - - - - - - - - - - - - - - palea sterile - - - - - - - - - - - - - - - - - - - - - - - - palea fertility - - - - - - - - - - - - - - - - - - - - - - - - pedicel spherical - - - - - - - - - - - - - - - - - - - - - - - - pedicel convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stem sharpness - - - - - - - - - - - - - - - - - - - - - - - - seed trichome branched - - - - - - - - - - - - - - - - - - - - - - - - seed trichome branchiness - - - - - - - - - - - - - - - - - - - - - - - - corolla funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle purple - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle color - - - - - - - - - - - - - - - - - - - - - - - - - - - - ray system phenotype - - - - - - - - - - - - - - - - - - - - - - - - ray system raised - - - - - - - - - - - - - - - - - - - - - - - - ray system shape - - - - - - - - - - - - - - - - - - - - - - - - glume back - - - - - - - - - - - - - - - - - - - - - - - - glume direction - - - - - - - - - - - - - - - - - - - - - - - - inflorescence divergent from - - - - - - - - - - - - - - - - - - - - - - - - glume separated from - - - - - - - - - - - - - - - - - - - - - - - - glume structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - disk flower phenotype - - - - - - - - disk flower female - true - - - - - - - - disk flower phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - stem purple - - - - - - - - - - - - - - - - - - - - - - - - flower striated - - - - - - - - - - - - - - - - - - - - - - - - fruit linear - - - - - - - - - - - - - - - - - - - - - - - - calyx oblong - - - - - - - - - - - - - - - - - - - - - - - - leaflet pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaflet maturity - - - - - - - - - - - - - - - - - - - - - - - - sheath cell decreased amount - - - - - - - - - - - - - - - - - - - - - - - - sheath cell amount - - - - - - - - - - - - - - - - - - - - - - - - leaf pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf maturity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - involucre glistening - - - - - - - - - - - - - - - - - - - - - - - - involucre reflectivity - - - - - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal phenotype - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal elliptic - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue elliptic - - - - - - - - - - - - - - - - - - - - - - - - stem oblong - - - - - - - - - - - - - - - - - - - - - - - - stem 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - upper glume bilobed - - - - - - - - - - - - - - - - - - - - - - - - upper glume shape - - - - - - - - - - - - - - - - - - - - - - - - anther pubescent - - - - - - - - - - - - - - - - - - - - - - - - anther maturity - - - - - - - - leaf up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf direction - - - - - - - - - - - - - - - - - - - - - - - - bud length - - - - - - - - - - - - - - - - - - - - - - - - rhizome length - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet elliptic - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle hairy - - - - - - - - - - - - - - - - - - - - - - - - stem increased length - - - - - - - - - - - - - - - - - - - - - - - - stem length - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem terminal - - - - - - - - - - - - - - - - - - - - - - - - - - - - sorus phenotype - - - - - - - - - - - - - - - - - - - - - - - - sorus attached to - - - - - - - - - - - - - - - - - - - - - - - - sorus attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stem truncated - - - - - - - - - - - - - - - - - - - - - - - - leaflet emarginate - - - - - - - - - - - - - - - - - - - - - - - - leaflet concavity - - - - - - - - - - - - - - - - - - - - - - - - - - - - receptacle phenotype - - - - - - - - - - - - - - - - - - - - - - - - receptacle whole - - - - - - - - - - - - - - - - - - - - - - - - receptacle wholeness - - - - - - - - - - - - - - - - - - - - - - - - branch increased length - - - - - - - - - - - - - - - - - - - - - - - - branch length - - - - - - - - rhizome up - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome direction - - - - - - - - - - - - - - - - - - - - - - - - banner petal circular - - - - - - - - - - - - - - - - - - - - - - - - stamen truncated - - - - - - - - - - - - - - - - - - - - - - - - stamen shape - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence pubescent - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence maturity - - - - - - - - - - - - - - - - - - - - - - - - stem distichous - - - - - - - - - - - - - - - - - - - - - - - - lamina green - - - - - - - - - - - - - - - - - - - - - - - - lamina color - - - - - - - - - - - - - - - - - - - - - - - - corolla lanceolate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - inflorescence water composition - - - - - - - - - - - - - - - - - - - - - - - - inflorescence simple - - - - - - - - - - - - - - - - - - - - - - - - inflorescence complexity - - - - - - - - - - - - - - - - - - - - - - - - corolla ovate - - - - - - - - - - - - - - - - - - - - - - - - corolla convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf pinnate - - - - - - - - - - - - - - - - - - - - - - - - lamina blunt - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle circular - - - - - - - - - - - - - - - - - - - - - - - - stem diameter - - - - - - - - - - - - - - - - - - - - - - - - whole plant increased thickness - - - - - - - - - - - - - - - - - - - - - - - - whole plant thickness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet linear - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle attenuate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue ovate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina lateral to - - - - - - - - - - - - - - - - - - - - - - - - lamina position - - - - - - - - - - - - - - - - - - - - - - - - lemma blunt - - - - - - - - - - - - - - - - - - - - - - - - lemma sharpness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - stigma oblong - - - - - - - - - - - - - - - - - - - - - - - - stigma 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark grey - - - - - - - - - - - - - - - - - - - - - - - - bark color - - - - - - - - - - - - - - - - - - - - - - - - keel erect - - - - - - - - - - - - - - - - - - - - - - - - keel position - - - - - - - - - - - - - - - - - - - - - - - - leaf tomentose - - - - - - - - - - - - - - - - - - - - - - - - stipule autogenous - - - - - - - - - - - - - - - - - - - - - - - - stipule structure - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pubescent - - - - - - - - - - - - - - - - - - - - - - - - - inflorescence maturity - - - - - - - - - - - - - - - - - - - - - - - - - - - - stalk phenotype - - - - - - - - - - - - - - - - - - - - - - - - stalk glabrous - - - - - - - - - - - - - - - - - - - - - - - - stalk pilosity - - - - - - - - - - - - - - - - - - - - - - - - leaf loose - - - - - - - - - - - - - - - - - - - - - - - - leaf spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bract triangular - - - - - - - - - - - - - - - - - - - - - - - - corolla white - - - - - - - - - - - - - - - - - - - - - - - - flower linear - - - - - - - - - - - - - - - - - - - - - - - - anther linear - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein arched - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein concavity - - - - - - - - - - - - - - - - - - - - - - - - stem pinnate - - - - - - - - - - - - - - - - - - - - - - - - bract increased length - - - - - - - - - - - - - - - - - - - - - - - - bract length - - - - - - - - - - - - - - - - - - - - - - - - lamina elliptic - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle pinnate - - - - - - - - - - - - - - - - - - - - - - - - petiole convex - - - - - - - - - - - - - - - - - - - - - - - - petiole concavity - - - - - - - - - - - - - - - - - - - - - - - - root tip acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaflet alternate placement - - - - - - - - - - - - - - - - - - - - - - - - leaflet spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - lamina pink - - - - - - - - - - - - - - - - - - - - - - - - shoot apex terminal - - - - - - - - - - - - - - - - - - - - - - - - root swollen - - - - - - - - - - - - - - - - - - - - - - - - root structure - - - - - - - - - - - - - - - - - - - - - - - - inflorescence cylindrical - - - - - - - - - - - - - - - - - - - - - - - - spikelet sterile - - - - - - - - - - - - - - - - - - - - - - - - spikelet fertility - - - - - - - - - - - - - - - - - - - - - - - - fruit trilobed - - - - - - - - - - - - - - - - - - - - - - - - fruit smooth - - - - - - - - - - - - - - - - - - - - - - - - fruit texture - - - - - - - - - - - - - - - - - - - - - - - - bark brown - - - - - - - - - - - - - - - - - - - - - - - - banner petal dorsal to - - - - - - - - - - - - - - - - - - - - - - - - banner petal position - - - - - - - - - - - - - - - - - - - - - - - - anther erect - - - - - - - - - - - - - - - - - - - - - - - - anther position - - - - - - - - - - - - - - - - - - - - - - - - fruit spinous - fruit spiny - - - - - - - - - - - - - - - - - - - - - - - - petal fleshy - - - - - - - - - - - - - - - - - - - - - - - - petal composition - - - - - - - - - - - - - - - - - - - - - - - - bracteole increased length - - - - - - - - - - - - - - - - - - - - - - - - bracteole length - - - - - - - - - - - - - - - - - - - - - - - - seed trichome decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - seed trichome thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit ovate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member pedicellate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member attachment quality - - - - - - - - - - - - - - - - - - - - - - - - fruit ornamentation - - - - - - - - - - - - - - - - - - - - - - - - whole plant branched - - - - - - - - - - - - - - - - - - - - - - - - whole plant branchiness - - - - - - - - - - - - - - - - - - - - - - - - flower protruding into - - - - - - - - - - - - - - - - - - - - - - - - disk flower glabrous - - - - - - - - - - - - - - - - - - - - - - - - disk flower pilosity - - - - - - - - - - - - - - - - - - - - - - - - disk flower simple - - - - - - - - - - - - - - - - - - - - - - - - disk flower complexity - - - - - - - - - - - - - - - - - - - - - - - - corolla slender - - - - - - - - - - - - - - - - - - - - - - - - bud pink - - - - - - - - - - - - - - - - - - - - - - - - bud color - - - - - - - - pedicel hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - shoot apex heart shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot apex concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium erect - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium position - - - - - - - - - - - - - - - - - - - - - - - - lamina simple - - - - - - - - - - - - - - - - - - - - - - - - lamina complexity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex swollen - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle undulate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex rough - - - - - - - - - - - - - - - - - - - - - - - - shoot apex texture - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle obovate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit sharpness - - - - - - - - - - - - - - - - - - - - - - - - root tip distributed - - - - - - - - - - - - - - - - - - - - - - - - root tip spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - peduncle distal to - - - - - - - - - - - - - - - - - - - - - - - - - - - - carpel phenotype - - - - - - - - - - - - - - - - - - - - - - - - carpel pubescent - - - - - - - - - - - - - - - - - - - - - - - - carpel maturity - - - - - - - - - - - - - - - - - - - - - - - - leaflet increased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaflet thickness - - - - - - - - - - - - - - - - - - - - - - - - corolla cylindrical - - - - - - - - - - - - - - - - - - - - - - - - perianth fleshy - - - - - - - - - - - - - - - - - - - - - - - - perianth composition - - - - - - - - - - - - - - - - - - - - - - - - bark rough - - - - - - - - - - - - - - - - - - - - - - - - shoot apex increased thickness - - - - - - - - - - - - - - - - - - - - - - - - trichome kinked - - - - - - - - - - - - - - - - - - - - - - - - trichome shape - - - - - - - - - - - - - - - - - - - - - - - - bud yellow - - - - - - - - - - - - - - - - - - - - - - - - calyx increased thickness - - - - - - - - - - - - - - - - - - - - - - - - calyx thickness - - - - - - - - - - - - - - - - - - - - - - - - petiole cuneate - - - - - - - - - - - - - - - - - - - - - - - - fruit attenuate - - - - - - - - - - - - - - - - - - - - - - - - petiole opposite - - - - - - - - - - - - - - - - - - - - - - - - branch striated - - - - - - - - - - - - - - - - - - - - - - - - branch shape - - - - - - - - - - - - - - - - - - - - - - - - flower glandular - - - - - - - - - - - - - - - - - - - - - - - - flower morphology - - - - - - - - - - - - - - - - - - - - - - - - fruit star shaped - - - - - - - - - - - - - - - - - - - - - - - - trichome concave - - - - - - - - - - - - - - - - - - - - - - - - trichome concavity - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal tomentose - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal pilosity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence erect - - - - - - - - - - - - - - - - - - - - - - - - seed striated - - - - - - - - - - - - - - - - - - - - - - - - pedicel increased thickness - - - - - - - - - - - - - - - - - - - - - - - - receptacle elliptic - - - - - - - - - - - - - - - - - - - - - - - - receptacle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - scutellar node glabrous - - - - - - - - - - - - - - - - - - - - - - - - receptacle inserted into - - - - - - - - - - - - - - - - - - - - - - - - receptacle position - - - - - - - - - - - - - - - - - - - - - - - - androecium increased length - - - - - - - - - - - - - - - - - - - - - - - - androecium length - - - - - - - - - - - - - - - - - - - - - - - - lamina grey - - - - - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl phenotype - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl curved - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl curvature - - - - - - - - - - - - - - - - - - - - - - - - tubercle ovate - - - - - - - - - - - - - - - - - - - - - - - - tubercle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - style glabrous - - - - - - - - - - - - - - - - - - - - - - - - style pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - stolon phenotype - - - - - - - - - - - - - - - - - - - - - - - - stolon swollen - - - - - - - - - - - - - - - - - - - - - - - - stolon structure - - - - - - - - - - - - - - - - - - - - - - - - stem erect - - - - - - - - - - - - - - - - - - - - - - - - leaf cauline to - - - - - - - - - - - - - - - - - - - - - - - - petiole increased thickness - - - - - - - - - - - - - - - - - - - - - - - - petiole thickness - - - - - - - - - - - - - - - - - - - - - - - - testa dorsal to - - - - - - - - - - - - - - - - - - - - - - - - testa position - - - - - - - - - - - - - - - - - - - - - - - - stamen exserted - - - - - - - - - - - - - - - - - - - - - - - - stamen position - - - - - - - - - - - - - - - - - - - - - - - - ovary wall hairy - - - - - - - - - - - - - - - - - - - - - - - - style constricted - - - - - - - - - - - - - - - - - - - - - - - - petiole erect - - - - - - - - - - - - - - - - - - - - - - - - leaf alternate placement - - - - - - - - stem up - true - - - - - - - - - - - - - - - - - - - - - - - - stem direction - - - - - - - - - - - - - - - - - - - - - - - - petiole simple - - - - - - - - - - - - - - - - - - - - - - - - petiole complexity - - - - - - - - - - - - - - - - - - - - - - - - lamina pubescent - - - - - - - - - - - - - - - - - - - - - - - - lamina maturity - - - - - - - - - - - - - - - - - - - - - - - - disk flower circular - - - - - - - - - - - - - - - - - - - - - - - - disk flower 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit cylindrical - - - - - - - - - - - - - - - - - - - - - - - - lamina basal to - - - - - - - - - - - - - - - - - - - - - - - - petiole broad - - - - - - - - - - - - - - - - - - - - - - - - petiole shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex obtuse - - - - - - - - - - - - - - - - - - - - - - - - bract decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - bract thickness - - - - - - - - - - - - - - - - - - - - - - - - stamen hairy - - - - - - - - - - - - - - - - - - - - - - - - fruit spongy - - - - - - - - - - - - - - - - - - - - - - - - fruit structure - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle folded - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - endocarp phenotype - - - - - - - - - - - - - - - - - - - - - - - - endocarp elliptic - - - - - - - - - - - - - - - - - - - - - - - - endocarp 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf decreased amount - - - - - - - - - - - - - - - - - - - - - - - - leaf amount - - - - - - - - - - - - - - - - - - - - - - - - leaf discoid - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina cuneate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle prominent - - - - - - - - - - - - - - - - - - - - - - - - fruit yellow - - - - - - - - - - - - - - - - - - - - - - - - perianth autogenous - - - - - - - - - - - - - - - - - - - - - - - - leaf wrinkled - - - - - - - - - - - - - - - - - - - - - - - - leaf texture - - - - - - - - - - - - - - - - - - - - - - - - shoot apex conical - - - - - - - - - - - - - - - - - - - - - - - - axil lanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower decreased amount - - - - - - - - - - - - - - - - - - - - - - - - flower amount - - - - - - - - - - - - - - - - - - - - - - - - crown root basal to - - - - - - - - - - - - - - - - - - - - - - - - crown root position - - - - - - - - - - - - - - - - - - - - - - - - pedicel inserted into - - - - - - - - - - - - - - - - - - - - - - - - pedicel position - - - - - - - - - - - - - - - - - - - - - - - - - - - - valve phenotype - - - - - - - - - - - - - - - - - - - - - - - - valve warty - - - - - - - - - - - - - - - - - - - - - - - - valve texture - - - - - - - - - - - - - - - - - - - - - - - - corolla length - - - - - - - - - - - - - - - - - - - - - - - - bark ochre - - - - - - - - - - - - - - - - - - - - - - - - filament autogenous - - - - - - - - - - - - - - - - - - - - - - - - filament structure - - - - - - - - - - - - - - - - - - - - - - - - leaflet lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaflet sharpness - - - - - - - - - - - - - - - - - - - - - - - - bud broad - - - - - - - - - - - - - - - - - - - - - - - - pedicel articulated with - - - - - - - - - - - - - - - - - - - - - - - - pedicel structure - - - - - - - - - - - - - - - - - - - - - - - - disk flower pubescent - - - - - - - - - - - - - - - - - - - - - - - - disk flower maturity - - - - - - - - - - - - - - - - - - - - - - - - corolla lilac - - - - - - - - - - - - - - - - - - - - - - - - stigma orbicular - - - - - - - - - - - - - - - - - - - - - - - - petiole truncated - - - - - - - - - - - - - - - - - - - - - - - - spikelet orbicular - - - - - - - - - - - - - - - - - - - - - - - - spikelet 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - sepal dorsal to - - - - - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure phenotype - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure whorled - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - petiole obovate - - - - - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus phenotype - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus heart shaped - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule bifurcated - - - - - - - - - - - - - - - - - - - - - - - - stipule branchiness - - - - - - - - - - - - - - - - - - - - - - - - - - - - epidermis phenotype - - - - - - - - - - - - - - - - - - - - - - - - epidermis glabrous - - - - - - - - - - - - - - - - - - - - - - - - epidermis pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - pistillode phenotype - - - - - - - - - - - - - - - - - - - - - - - - pistillode pubescent - - - - - - - - - - - - - - - - - - - - - - - - pistillode maturity - - - - - - - - flower fascicle female - true - - - - - - - - flower fascicle phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - flower open - - - - - - - - - - - - - - - - - - - - - - - - flower closure - - - - - - - - - - - - - - - - - - - - - - - - bract hairy - - - - - - - - - - - - - - - - - - - - - - - - bract pilosity - - - - - - - - - - - - - - - - - - - - - - - - trichome lanceolate - - - - - - - - - - - - - - - - - - - - - - - - trichome sharpness - - - - - - - - - - - - - - - - - - - - - - - - hypanthium obconical - - - - - - - - - - - - - - - - - - - - - - - - hypanthium convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein raised - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex triangular - - - - - - - - - - - - - - - - - - - - - - - - - - - - pappus phenotype - - - - - - - - - - - - - - - - - - - - - - - - pappus white - - - - - - - - - - - - - - - - - - - - - - - - pappus color - - - - - - - - - - - - - - - - - - - - - - - - flower oblong - - - - - - - - - - - - - - - - - - - - - - - - flower 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - mesocarp phenotype - - - - - - - - - - - - - - - - - - - - - - - - mesocarp decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - mesocarp water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf increased length - - - - - - - - - - - - - - - - - - - - - - - - leaf length - - - - - - - - - - - - - - - - - - - - - - - - leaf triangular - - - - - - - - - - - - - - - - - - - - - - - - glume increased length - - - - - - - - - - - - - - - - - - - - - - - - leaflet obovate - - - - - - - - - - - - - - - - - - - - - - - - leaflet convex 3-D shape - - - - - - - - pedicel acute - true - - - - - - - - pedicel duration - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle erect - - - - - - - - - - - - - - - - - - - - - - - - lemma length - - - - - - - - - - - - - - - - - - - - - - - - fruit indurated - - - - - - - - - - - - - - - - - - - - - - - - branch decumbent - - - - - - - - - - - - - - - - - - - - - - - - bud acuminate - - - - - - - - - - - - - - - - - - - - - - - - bud sharpness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex auriculate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - petal erect - - - - - - - - - - - - - - - - - - - - - - - - petal position - - - - - - - - - - - - - - - - - - - - - - - - ovary wall linear - - - - - - - - - - - - - - - - - - - - - - - - glume erect - - - - - - - - - - - - - - - - - - - - - - - - glume position - - - - - - - - - - - - - - - - - - - - - - - - petiole acuminate - - - - - - - - - - - - - - - - - - - - - - - - banner petal auriculate - - - - - - - - - - - - - - - - - - - - - - - - lenticel pubescent - - - - - - - - - - - - - - - - - - - - - - - - lenticel maturity - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant callus phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant callus pubescent - - - - - - - - - - - - - - - - - - - - - - - - plant callus maturity - - - - - - - - - - - - - - - - - - - - - - - - stem obovate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet opposite - - - - - - - - - - - - - - - - - - - - - - - - flower curved - - - - - - - - - - - - - - - - - - - - - - - - flower curvature - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pedicellate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence attachment quality - - - - - - - - - - - - - - - - - - - - - - - - whole plant striated - - - - - - - - - - - - - - - - - - - - - - - - whole plant shape - - - - - - - - - - - - - - - - - - - - - - - - petiolule flattened - - - - - - - - - - - - - - - - - - - - - - - - petiolule curvature - - - - - - - - - - - - - - - - - - - - - - - - pedicel glandular - - - - - - - - - - - - - - - - - - - - - - - - pedicel morphology - - - - - - - - - - - - - - - - - - - - - - - - petiole absent - - - - - - - - - - - - - - - - - - - - - - - - petiole amount - - - - - - - - - - - - - - - - - - - - - - - - endocarp furrowed - - - - - - - - - - - - - - - - - - - - - - - - endocarp texture - - - - - - - - - - - - - - - - - - - - - - - - fruit broad - - - - - - - - - - - - - - - - - - - - - - - - branch glabrous - - - - - - - - - - - - - - - - - - - - - - - - branch pilosity - - - - - - - - - - - - - - - - - - - - - - - - ray system ventral to - - - - - - - - - - - - - - - - - - - - - - - - ray system position - - - - - - - - - - - - - - - - - - - - - - - - rhizome area - - - - - - - - - - - - - - - - - - - - - - - - leaf striated - - - - - - - - - - - - - - - - - - - - - - - - bark young - - - - - - - - - - - - - - - - - - - - - - - - bark age - - - - - - - - - - - - - - - - - - - - - - - - - - - - short shoot phenotype - - - - - - - - - - - - - - - - - - - - - - - - short shoot terminal - - - - - - - - - - - - - - - - - - - - - - - - short shoot position - - - - - - - - - - - - - - - - - - - - - - - - hypanthium tubular - - - - - - - - - - - - - - - - - - - - - - - - style increased thickness - - - - - - - - - - - - - - - - - - - - - - - - style thickness - - - - - - - - - - - - - - - - - - - - - - - - calyx elliptic - - - - - - - - - - - - - - - - - - - - - - - - perianth fused with - - - - - - - - - - - - - - - - - - - - - - - - banner petal oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle leaf-like - - - - - - - - - - - - - - - - - - - - - - - - inflorescence increased thickness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence thickness - - - - - - - - - - - - - - - - - - - - - - - - disk flower conical - - - - - - - - - - - - - - - - - - - - - - - - disk flower convex 3-D shape - - - - - - - - petiole acute - true - - - - - - - - petiole duration - true - - - - - - - - - - - - - - - - - - - - - - - - petal oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex purple - - - - - - - - - - - - - - - - - - - - - - - - shoot apex color - - - - - - - - - - - - - - - - - - - - - - - - whole plant increased length - - - - - - - - - - - - - - - - - - - - - - - - whole plant length - - - - - - - - - - - - - - - - - - - - - - - - pedicel falciform - - - - - - - - - - - - - - - - - - - - - - - - flower punctate - - - - - - - - - - - - - - - - - - - - - - - - flower spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - trichome subulate - - - - - - - - - - - - - - - - - - - - - - - - fruit white - - - - - - - - - - - - - - - - - - - - - - - - pistillode dilated - - - - - - - - - - - - - - - - - - - - - - - - pistillode size - - - - - - - - - - - - - - - - - - - - - - - - pedicel ovate - - - - - - - - - - - - - - - - - - - - - - - - petiole curled - - - - - - - - - - - - - - - - - - - - - - - - corolla multifid - - - - - - - - - - - - - - - - - - - - - - - - fruit triangular - - - - - - - - - - - - - - - - - - - - - - - - receptacle diameter - - - - - - - - - - - - - - - - - - - - - - - - rhizome brown - - - - - - - - - - - - - - - - - - - - - - - - rhizome color - - - - - - - - - - - - - - - - - - - - - - - - flower purple - - - - - - - - - - - - - - - - - - - - - - - - flower color - - - - - - - - - - - - - - - - - - - - - - - - leaf cuneate - - - - - - - - - - - - - - - - - - - - - - - - - - - - locule phenotype - - - - - - - - - - - - - - - - - - - - - - - - locule hard - - - - - - - - - - - - - - - - - - - - - - - - locule hardness - - - - - - - - - - - - - - - - - - - - - - - - bud green - - - - - - - - - - - - - - - - - - - - - - - - tubercle obovate - - - - - - - - - - - - - - - - - - - - - - - - bark sterile - - - - - - - - - - - - - - - - - - - - - - - - bark fertility - - - - - - - - endocarp up - true - - - - - - - - - - - - - - - - - - - - - - - - endocarp direction - - - - - - - - - - - - - - - - - - - - - - - - endocarp pubescent - - - - - - - - - - - - - - - - - - - - - - - - endocarp maturity - - - - - - - - - - - - - - - - - - - - - - - - - - - - stereome phenotype - - - - - - - - - - - - - - - - - - - - - - - - stereome brown - - - - - - - - - - - - - - - - - - - - - - - - stereome color - - - - - - - - - - - - - - - - - - - - - - - - leaf time - - - - - - - - - - - - - - - - - - - - - - - - connective erect - - - - - - - - - - - - - - - - - - - - - - - - connective position - - - - - - - - - - - - - - - - - - - - - - - - style red - - - - - - - - - - - - - - - - - - - - - - - - style color - - - - - - - - - - - - - - - - - - - - - - - - ligule lanceolate - - - - - - - - - - - - - - - - - - - - - - - - ligule sharpness - - - - - - - - - - - - - - - - - - - - - - - - glume furrowed - - - - - - - - - - - - - - - - - - - - - - - - glume texture - - - - - - - - - - - - - - - - - - - - - - - - calyx terminal - - - - - - - - - - - - - - - - - - - - - - - - calyx position - - - - - - - - - - - - - - - - - - - - - - - - leaf erect - - - - - - - - - - - - - - - - - - - - - - - - petal autogenous - - - - - - - - - - - - - - - - - - - - - - - - petal structure - - - - - - - - - - - - - - - - - - - - - - - - apical hook ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf elongated - - - - - - - - - - - - - - - - - - - - - - - - aril white - - - - - - - - - - - - - - - - - - - - - - - - aril color - - - - - - - - - - - - - - - - - - - - - - - - style protruding into - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle water composition - - - - - - - - - - - - - - - - - - - - - - - - spikelet exserted - - - - - - - - - - - - - - - - - - - - - - - - spikelet position - - - - - - - - - - - - - - - - - - - - - - - - flower hairy - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal ovate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule increased length - - - - - - - - - - - - - - - - - - - - - - - - stipule length - - - - - - - - - - - - - - - - - - - - - - - - pedicel absent - - - - - - - - - - - - - - - - - - - - - - - - pedicel amount - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle ovate - - - - - - - - - - - - - - - - - - - - - - - - fruit lateral to - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue glabrous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue pilosity - - - - - - - - - - - - - - - - - - - - - - - - fruit increased thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit thickness - - - - - - - - - - - - - - - - - - - - - - - - stamen erect - - - - - - - - - - - - - - - - - - - - - - - - lamina area - - - - - - - - - - - - - - - - - - - - - - - - shoot apex furrowed - - - - - - - - - - - - - - - - - - - - - - - - petiole raised - - - - - - - - - - - - - - - - - - - - - - - - perianth open - - - - - - - - - - - - - - - - - - - - - - - - perianth closure - - - - - - - - - - - - - - - - - - - - - - - - leaflet increased length - - - - - - - - - - - - - - - - - - - - - - - - leaflet length - - - - - - - - - - - - - - - - - - - - - - - - flower basal to - - - - - - - - - - - - - - - - - - - - - - - - petal increased length - - - - - - - - - - - - - - - - - - - - - - - - petal length - - - - - - - - - - - - - - - - - - - - - - - - petiole linear - - - - - - - - - - - - - - - - - - - - - - - - inflorescence kinked - - - - - - - - - - - - - - - - - - - - - - - - lenticel cylindrical - - - - - - - - - - - - - - - - - - - - - - - - lenticel convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - trichome brittle - - - - - - - - - - - - - - - - - - - - - - - - trichome structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - anther theca phenotype - - - - - - - - - - - - - - - - - - - - - - - - anther theca inserted into - - - - - - - - - - - - - - - - - - - - - - - - anther theca position - - - - - - - - - - - - - - - - - - - - - - - - leaf attenuate - - - - - - - - - - - - - - - - - - - - - - - - bud elliptic - - - - - - - - - - - - - - - - - - - - - - - - bud 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence hairy - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence pilosity - - - - - - - - - - - - - - - - - - - - - - - - branch star shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma warty - - - - - - - - - - - - - - - - - - - - - - - - stigma texture - - - - - - - - - - - - - - - - - - - - - - - - flower sharp - - - - - - - - - - - - - - - - - - - - - - - - apical hook raised - - - - - - - - - - - - - - - - - - - - - - - - apical hook shape - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue linear - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue shape - - - - - - - - petiole up - true - - - - - - - - - - - - - - - - - - - - - - - - petiole direction - - - - - - - - - - - - - - - - - - - - - - - - mesocarp mass - - - - - - - - fruit up - true - - - - - - - - - - - - - - - - - - - - - - - - fruit direction - - - - - - - - - - - - - - - - - - - - - - - - - - - - shoot system phenotype - - - - - - - - - - - - - - - - - - - - - - - - shoot system decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - shoot system water composition - - - - - - - - - - - - - - - - - - - - - - - - flower radial - flower radially symmetrical - flower actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - flower radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - seed trichome erect - - - - - - - - - - - - - - - - - - - - - - - - seed trichome position - - - - - - - - - - - - - - - - - - - - - - - - leaflet opposite - - - - - - - - - - - - - - - - - - - - - - - - petal hairy - - - - - - - - calyx female - true - - - - - - - - calyx phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - shoot apex cuneate - - - - - - - - - - - - - - - - - - - - - - - - petiolule smooth - - - - - - - - - - - - - - - - - - - - - - - - petiolule texture - - - - - - - - - - - - - - - - - - - - - - - - style white - - - - - - - - - - - - - - - - - - - - - - - - - - - - septum phenotype - - - - - - - - - - - - - - - - - - - - - - - - septum dorsal to - - - - - - - - - - - - - - - - - - - - - - - - septum position - - - - - - - - - - - - - - - - - - - - - - - - fruit clavate - - - - - - - - - - - - - - - - - - - - - - - - fruit concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit tomentose - - - - - - - - - - - - - - - - - - - - - - - - petal truncated - - - - - - - - - - - - - - - - - - - - - - - - calyx folded - - - - - - - - - - - - - - - - - - - - - - - - calyx surface feature shape - - - - - - - - lower glume acute - true - - - - - - - - - - - - - - - - - - - - - - - - shoot apex branched - - - - - - - - - - - - - - - - - - - - - - - - - - - - pericarp phenotype - - - - - - - - - - - - - - - - - - - - - - - - pericarp fleshy - - - - - - - - - - - - - - - - - - - - - - - - pericarp composition - - - - - - - - - - - - - - - - - - - - - - - - style cylindrical - - - - - - - - - - - - - - - - - - - - - - - - style convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bud decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - bud thickness - - - - - - - - - - - - - - - - - - - - - - - - upper glume acuminate - - - - - - - - - - - - - - - - - - - - - - - - upper glume sharpness - - - - - - - - - - - - - - - - - - - - - - - - petiole flattened - - - - - - - - - - - - - - - - - - - - - - - - petiole curvature - - - - - - - - - - - - - - - - - - - - - - - - shoot apex concave - - - - - - - - - - - - - - - - - - - - - - - - shoot apex concavity - - - - - - - - - - - - - - - - - - - - - - - - corolla orange - - - - - - - - - - - - - - - - - - - - - - - - bract inserted into - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal glabrous - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus undulate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus shape - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet glabrous - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet pilosity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system truncated - - - - - - - - - - - - - - - - - - - - - - - - sepal glabrous - - - - - - - - - - - - - - - - - - - - - - - - sepal pilosity - - - - - - - - - - - - - - - - - - - - - - - - petal spatulate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence abaxial to - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence position - - - - - - - - - - - - - - - - - - - - - - - - fruit increased length - - - - - - - - - - - - - - - - - - - - - - - - fruit length - - - - - - - - - - - - - - - - - - - - - - - - root tip elliptic - - - - - - - - - - - - - - - - - - - - - - - - root tip 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - upper glume ovate - - - - - - - - - - - - - - - - - - - - - - - - upper glume convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - style lateral to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence congested - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle swollen - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle structure - - - - - - - - - - - - - - - - - - - - - - - - leaf sterile - - - - - - - - - - - - - - - - - - - - - - - - leaf fertility - - - - - - - - - - - - - - - - - - - - - - - - leaf straight - - - - - - - - - - - - - - - - - - - - - - - - filament inserted into - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root dentated - - - - - - - - - - - - - - - - - - - - - - - - calyx inserted into - - - - - - - - - - - - - - - - - - - - - - - - growth ring increased thickness - - - - - - - - - - - - - - - - - - - - - - - - growth ring thickness - - - - - - - - - - - - - - - - - - - - - - - - disk flower inserted into - - - - - - - - - - - - - - - - - - - - - - - - disk flower position - - - - - - - - - - - - - - - - - - - - - - - - seed elliptic - - - - - - - - - - - - - - - - - - - - - - - - seed 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit red - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal simple - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal complexity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex dorsal to - - - - - - - - - - - - - - - - - - - - - - - - - - - - awn phenotype - - - - - - - - - - - - - - - - - - - - - - - - awn elliptic - - - - - - - - - - - - - - - - - - - - - - - - awn 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system linear - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence elliptic - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel hairy - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pubescent - inflorescence hairy - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pilosity - - - - - - - - palea up - true - - - - - - - - - - - - - - - - - - - - - - - - palea direction - - - - - - - - - - - - - - - - - - - - - - - - bract pink - - - - - - - - - - - - - - - - - - - - - - - - bract color - - - - - - - - - - - - - - - - - - - - - - - - fruit angular - - - - - - - - - - - - - - - - - - - - - - - - sepal autogenous - - - - - - - - - - - - - - - - - - - - - - - - sepal structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - shoot internode phenotype - - - - - - - - - - - - - - - - - - - - - - - - shoot internode decumbent - - - - - - - - - - - - - - - - - - - - - - - - shoot internode position - - - - - - - - - - - - - - - - - - - - - - - - banner petal fleshy - - - - - - - - - - - - - - - - - - - - - - - - banner petal composition - - - - - - - - - - - - - - - - - - - - - - - - flower reniform - - - - - - - - - - - - - - - - - - - - - - - - flower concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf water composition - - - - - - - - - - - - - - - - - - - - - - - - receptacle constricted - - - - - - - - - - - - - - - - - - - - - - - - receptacle structure - - - - - - - - - - - - - - - - - - - - - - - - anther sharpness - - - - - - - - - - - - - - - - - - - - - - - - calyx obtuse - - - - - - - - bud up - true - - - - - - - - - - - - - - - - - - - - - - - - bud direction - - - - - - - - - - - - - - - - - - - - - - - - shoot apex wrinkled - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle thickness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle star shaped - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet attenuate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle bifurcated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle branchiness - - - - - - - - - - - - - - - - - - - - - - - - bracteole ovate - - - - - - - - - - - - - - - - - - - - - - - - bracteole convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - root tip dentated - - - - - - - - - - - - - - - - - - - - - - - - root tip shape - - - - - - - - - - - - - - - - - - - - - - - - scutellar node acuminate - - - - - - - - - - - - - - - - - - - - - - - - scutellar node sharpness - - - - - - - - - - - - - - - - - - - - - - - - anther circular - - - - - - - - - - - - - - - - - - - - - - - - anther 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pappus lanceolate - - - - - - - - - - - - - - - - - - - - - - - - pappus sharpness - - - - - - - - - - - - - - - - - - - - - - - - peristome purple - - - - - - - - - - - - - - - - - - - - - - - - crown root increased thickness - - - - - - - - - - - - - - - - - - - - - - - - crown root thickness - - - - - - - - - - - - - - - - - - - - - - - - sepal concave - - - - - - - - - - - - - - - - - - - - - - - - sepal concavity - - - - - - - - - - - - - - - - - - - - - - - - seed drooping - - - - - - - - - - - - - - - - - - - - - - - - lamina whole - - - - - - - - - - - - - - - - - - - - - - - - lamina wholeness - - - - - - - - - - - - - - - - - - - - - - - - trichome branched - - - - - - - - - - - - - - - - - - - - - - - - trichome branchiness - - - - - - - - - - - - - - - - - - - - - - - - lamina decurrent - - - - - - - - - - - - - - - - - - - - - - - - stem grooved - - - - - - - - - - - - - - - - - - - - - - - - stem texture - - - - - - - - - - - - - - - - - - - - - - - - carpel glabrous - - - - - - - - - - - - - - - - - - - - - - - - carpel pilosity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex punctate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bracteole spatulate - - - - - - - - - - - - - - - - - - - - - - - - bracteole 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant callus trilobed - - - - - - - - - - - - - - - - - - - - - - - - plant callus shape - - - - - - - - sepal acute - true - - - - - - - - sepal duration - true - - - - - - - - - - - - - - - - - - - - - - - - calyx truncated - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein smooth - - - - - - - - - - - - - - - - - - - - - - - - fruit condensed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence tomentose - - - - - - - - - - - - - - - - - - - - - - - - - - - - epicalyx phenotype - - - - - - - - - - - - - - - - - - - - - - - - epicalyx elliptic - - - - - - - - - - - - - - - - - - - - - - - - epicalyx 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - caruncle phenotype - - - - - - - - - - - - - - - - - - - - - - - - caruncle flattened - - - - - - - - - - - - - - - - - - - - - - - - caruncle curvature - - - - - - - - - - - - - - - - - - - - - - - - carpel increased length - - - - - - - - - - - - - - - - - - - - - - - - carpel length - - - - - - - - - - - - - - - - - - - - - - - - peduncle bifurcated - - - - - - - - - - - - - - - - - - - - - - - - peduncle branchiness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex warty - - - - - - - - - - - - - - - - - - - - - - - - leaflet orbicular - - - - - - - - - - - - - - - - - - - - - - - - stereome yellow - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal increased length - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal length - - - - - - - - - - - - - - - - - - - - - - - - petal elliptic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence increased size - - - - - - - - - - - - - - - - - - - - - - - - inflorescence size - - - - - - - - - - - - - - - - - - - - - - - - stigma obtuse - - - - - - - - - - - - - - - - - - - - - - - - shoot apex glistening - - - - - - - - - - - - - - - - - - - - - - - - shoot apex reflectivity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem increased length - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem length - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle pubescent - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle maturity - - - - - - - - - - - - - - - - - - - - - - - - sepal oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - calyx dry - - - - - - - - - - - - - - - - - - - - - - - - calyx wetness - - - - - - - - - - - - - - - - - - - - - - - - pedicel circular - - - - - - - - - - - - - - - - - - - - - - - - pedicel 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence condensed - - - - - - - - - - - - - - - - - - - - - - - - petiole elliptic - - - - - - - - - - - - - - - - - - - - - - - - style slender - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal lanceolate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal sharpness - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus punctate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - whole plant dentated - - - - - - - - - - - - - - - - - - - - - - - - flower flat - - - - - - - - - - - - - - - - - - - - - - - - glume lanceolate - - - - - - - - - - - - - - - - - - - - - - - - glume sharpness - - - - - - - - - - - - - - - - - - - - - - - - seed angular - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle trilobed - - - - - - - - - - - - - - - - - - - - - - - - seed oblong - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue pinnate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member increased length - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member length - - - - - - - - - - - - - - - - - - - - - - - - pedicel exserted - - - - - - - - - - - - - - - - - - - - - - - - leaf exserted - - - - - - - - - - - - - - - - - - - - - - - - flower tubular - - - - - - - - - - - - - - - - - - - - - - - - bract glabrous - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle oblong - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - valve slit-like - - - - - - - - - - - - - - - - - - - - - - - - valve shape - - - - - - - - - - - - - - - - - - - - - - - - lamina prominent - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein undulate - - - - - - - - - - - - - - - - - - - - - - - - - - - - hilum phenotype - - - - - - - - - - - - - - - - - - - - - - - - hilum condensed - - - - - - - - - - - - - - - - - - - - - - - - hilum structure - - - - - - - - - - - - - - - - - - - - - - - - branch cylindrical - - - - - - - - - - - - - - - - - - - - - - - - branch convex 3-D shape - - - - - - - - spikelet acute - true - - - - - - - - spikelet duration - true - - - - - - - - - - - - - - - - - - - - - - - - stele pedicellate - - - - - - - - - - - - - - - - - - - - - - - - stele attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf yellow - - - - - - - - - - - - - - - - - - - - - - - - leaf color - - - - - - - - - - - - - - - - - - - - - - - - sepal obovate - - - - - - - - - - - - - - - - - - - - - - - - anther increased length - - - - - - - - - - - - - - - - - - - - - - - - anther length - - - - - - - - - - - - - - - - - - - - - - - - petal ovate - - - - - - - - - - - - - - - - - - - - - - - - locule inserted into - - - - - - - - - - - - - - - - - - - - - - - - locule position - - - - - - - - - - - - - - - - - - - - - - - - pedicel increased length - - - - - - - - - - - - - - - - - - - - - - - - pedicel length - - - - - - - - - - - - - - - - - - - - - - - - carpel split - - - - - - - - - - - - - - - - - - - - - - - - carpel shape - - - - - - - - - - - - - - - - - - - - - - - - stamen sunken - - - - - - - - - - - - - - - - - - - - - - - - stamen elevation - - - - - - - - - - - - - - - - - - - - - - - - petiole decurrent - - - - - - - - - - - - - - - - - - - - - - - - leaf bilobed - - - - - - - - - - - - - - - - - - - - - - - - rhizome erect - - - - - - - - - - - - - - - - - - - - - - - - rhizome position - - - - - - - - peduncle male - true - - - - - - - - peduncle phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - stem lobed - - - - - - - - - - - - - - - - - - - - - - - - branch furrowed - - - - - - - - - - - - - - - - - - - - - - - - fruit green - - - - - - - - lamina up - true - - - - - - - - - - - - - - - - - - - - - - - - lamina direction - - - - - - - - - - - - - - - - - - - - - - - - stalk split - - - - - - - - - - - - - - - - - - - - - - - - stalk shape - - - - - - - - - - - - - - - - - - - - - - - - leaf age - - - - - - - - - - - - - - - - - - - - - - - - bark simple - - - - - - - - - - - - - - - - - - - - - - - - bark complexity - - - - - - - - - - - - - - - - - - - - - - - - - - - - raphe phenotype - - - - - - - - - - - - - - - - - - - - - - - - raphe drooping - - - - - - - - - - - - - - - - - - - - - - - - raphe shape - - - - - - - - - - - - - - - - - - - - - - - - disk flower spherical - - - - - - - - - - - - - - - - - - - - - - - - branch oblong - - - - - - - - - - - - - - - - - - - - - - - - calyx dentated - - - - - - - - - - - - - - - - - - - - - - - - calyx glandular - - - - - - - - - - - - - - - - - - - - - - - - calyx morphology - - - - - - - - - - - - - - - - - - - - - - - - pedicel leaf-like - - - - - - - - - - - - - - - - - - - - - - - - bud clavate - - - - - - - - - - - - - - - - - - - - - - - - bud concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx undulate - - - - - - - - - - - - - - - - - - - - - - - - stem subulate - - - - - - - - - - - - - - - - - - - - - - - - glume pedicellate - - - - - - - - - - - - - - - - - - - - - - - - glume attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stigma pubescent - - - - - - - - - - - - - - - - - - - - - - - - stigma maturity - - - - - - - - - - - - - - - - - - - - - - - - fruit immature - - - - - - - - - - - - - - - - - - - - - - - - central zone ovate - - - - - - - - - - - - - - - - - - - - - - - - central zone convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bud glabrous - - - - - - - - - - - - - - - - - - - - - - - - bud pilosity - - - - - - - - - - - - - - - - - - - - - - - - calyx diameter - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle acuminate - - - - - - - - - - - - - - - - - - - - - - - - bract subulate - - - - - - - - - - - - - - - - - - - - - - - - leaflet distal to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex kinked - - - - - - - - - - - - - - - - - - - - - - - - filament arched - - - - - - - - - - - - - - - - - - - - - - - - filament concavity - - - - - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf phenotype - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf heart shaped - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lemma laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - root circular - - - - - - - - - - - - - - - - - - - - - - - - root 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule triangular - - - - - - - - - - - - - - - - - - - - - - - - stipule 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall increased length - - - - - - - - - - - - - - - - - - - - - - - - ovary wall length - - - - - - - - - - - - - - - - - - - - - - - - petiole caudate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet obtuse - - - - - - - - - - - - - - - - - - - - - - - - seed trichome star shaped - - - - - - - - - - - - - - - - - - - - - - - - seed trichome shape - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence glabrous - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet dentated - - - - - - - - - - - - - - - - - - - - - - - - calyx circular - - - - - - - - - - - - - - - - - - - - - - - - ovary wall triangular - - - - - - - - - - - - - - - - - - - - - - - - ovary wall 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - fruit slender - - - - - - - - - - - - - - - - - - - - - - - - shoot apex decurrent - - - - - - - - - - - - - - - - - - - - - - - - inflorescence inserted into - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet acuminate - - - - - - - - - - - - - - - - - - - - - - - - ligule elliptic - - - - - - - - - - - - - - - - - - - - - - - - ligule 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - corolla red - - - - - - - - - - - - - - - - - - - - - - - - costa oblique to - - - - - - - - - - - - - - - - - - - - - - - - axil terminal - - - - - - - - - - - - - - - - - - - - - - - - axil position - - - - - - - - - - - - - - - - - - - - - - - - petiolule pubescent - - - - - - - - - - - - - - - - - - - - - - - - petiolule maturity - - - - - - - - - - - - - - - - - - - - - - - - bract glandular - - - - - - - - - - - - - - - - - - - - - - - - bract morphology - - - - - - - - - - - - - - - - - - - - - - - - - - - - prickle phenotype - - - - - - - - - - - - - - - - - - - - - - - - prickle dentated - - - - - - - - - - - - - - - - - - - - - - - - prickle shape - - - - - - - - - - - - - - - - - - - - - - - - testa spherical - - - - - - - - - - - - - - - - - - - - - - - - testa convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf obovate - - - - - - - - flower male - true - - - - - - - - - - - - - - - - - - - - - - - - peduncle tomentose - - - - - - - - - - - - - - - - - - - - - - - - sepal pubescent - - - - - - - - - - - - - - - - - - - - - - - - sepal maturity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle linear - - - - - - - - - - - - - - - - - - - - - - - - pedicel acuminate - - - - - - - - - - - - - - - - - - - - - - - - pedicel sharpness - - - - - - - - - - - - - - - - - - - - - - - - style hairy - - - - - - - - - - - - - - - - - - - - - - - - corolla violet - - - - - - - - - - - - - - - - - - - - - - - - rhizome simple - - - - - - - - - - - - - - - - - - - - - - - - rhizome complexity - - - - - - - - - - - - - - - - - - - - - - - - branch curved - - - - - - - - - - - - - - - - - - - - - - - - branch curvature - - - - - - - - - - - - - - - - - - - - - - - - sepal punctate - - - - - - - - - - - - - - - - - - - - - - - - sepal spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - style triangular - - - - - - - - - - - - - - - - - - - - - - - - filament linear - - - - - - - - - - - - - - - - - - - - - - - - filament shape - - - - - - - - - - - - - - - - - - - - - - - - bark brittle - - - - - - - - - - - - - - - - - - - - - - - - bark structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant embryo phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant embryo curved - - - - - - - - - - - - - - - - - - - - - - - - plant embryo curvature - - - - - - - - - - - - - - - - - - - - - - - - seed kinked - - - - - - - - - - - - - - - - - - - - - - - - stipule leaf-like - - - - - - - - androecium up - true - - - - - - - - - - - - - - - - - - - - - - - - androecium direction - - - - - - - - - - - - - - - - - - - - - - - - flower pink - - - - - - - - - - - - - - - - - - - - - - - - inflorescence conical - - - - - - - - - - - - - - - - - - - - - - - - hypanthium glabrous - - - - - - - - - - - - - - - - - - - - - - - - hypanthium pilosity - - - - - - - - - - - - - - - - - - - - - - - - plant callus attenuate - - - - - - - - - - - - - - - - - - - - - - - - plant callus sharpness - - - - - - - - - - - - - - - - - - - - - - - - peduncle spherical - - - - - - - - - - - - - - - - - - - - - - - - peduncle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem whorled - - - - - - - - - - - - - - - - - - - - - - - - stem spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bud closed - - - - - - - - - - - - - - - - - - - - - - - - bud closure - - - - - - - - - - - - - - - - - - - - - - - - stem fleshy - - - - - - - - - - - - - - - - - - - - - - - - stem composition - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract pubescent - - - - - - - - - - - - - - - - - - - - - - - - bract maturity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle kinked - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle branched - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle branchiness - - - - - - - - - - - - - - - - - - - - - - - - flower decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - involucre notched - - - - - - - - - - - - - - - - - - - - - - - - involucre concavity - - - - - - - - - - - - - - - - - - - - - - - - stamen orange - - - - - - - - - - - - - - - - - - - - - - - - stamen color - - - - - - - - - - - - - - - - - - - - - - - - flower subulate - - - - - - - - - - - - - - - - - - - - - - - - petiole prominent - - - - - - - - - - - - - - - - - - - - - - - - branch inserted into - - - - - - - - - - - - - - - - - - - - - - - - fruit protruding - - - - - - - - - - - - - - - - - - - - - - - - bract sterile - - - - - - - - - - - - - - - - - - - - - - - - bract fertility - - - - - - - - - - - - - - - - - - - - - - - - root tip obtuse - - - - - - - - - - - - - - - - - - - - - - - - petal circular - - - - - - - - - - - - - - - - - - - - - - - - branch elliptic - - - - - - - - - - - - - - - - - - - - - - - - stem whole - - - - - - - - - - - - - - - - - - - - - - - - stem wholeness - - - - - - - - - - - - - - - - - - - - - - - - bract erect - - - - - - - - - - - - - - - - - - - - - - - - fruit dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaflet elliptic - - - - - - - - - - - - - - - - - - - - - - - - calyx orbicular - - - - - - - - - - - - - - - - - - - - - - - - fruit fusiform - - - - - - - - - - - - - - - - - - - - - - - - axil swollen - - - - - - - - - - - - - - - - - - - - - - - - axil structure - - - - - - - - - - - - - - - - - - - - - - - - lamina glabrous - - - - - - - - - - - - - - - - - - - - - - - - lamina pilosity - - - - - - - - - - - - - - - - - - - - - - - - banner petal truncated - - - - - - - - - - - - - - - - - - - - - - - - sepal lanceolate - - - - - - - - - - - - - - - - - - - - - - - - sepal sharpness - - - - - - - - - - - - - - - - - - - - - - - - apical hook angular - - - - - - - - - - - - - - - - - - - - - - - - stipule acuminate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal pedicellate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal attachment quality - - - - - - - - - - - - - - - - - - - - - - - - receptacle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - receptacle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein obovate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence cuneate - - - - - - - - - - - - - - - - - - - - - - - - calyx brown - - - - - - - - - - - - - - - - - - - - - - - - calyx color - - - - - - - - - - - - - - - - - - - - - - - - corolla decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - corolla water composition - - - - - - - - - - - - - - - - - - - - - - - - flower white - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf pubescent - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf maturity - - - - - - - - - - - - - - - - - - - - - - - - stigma increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stigma thickness - - - - - - - - - - - - - - - - - - - - - - - - style erect - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet heart shaped - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - style robust - - - - - - - - - - - - - - - - - - - - - - - - keel orbicular - - - - - - - - - - - - - - - - - - - - - - - - keel 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - involucre conical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex inserted into - - - - - - - - - - - - - - - - - - - - - - - - petal concave - - - - - - - - - - - - - - - - - - - - - - - - petal concavity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem pedicellate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina oblong - - - - - - - - - - - - - - - - - - - - - - - - scutellar node branched - - - - - - - - - - - - - - - - - - - - - - - - scutellar node branchiness - - - - - - - - - - - - - - - - - - - - - - - - ray system undulate - - - - - - - - - - - - - - - - - - - - - - - - awn pubescent - - - - - - - - - - - - - - - - - - - - - - - - awn maturity - - - - - - - - - - - - - - - - - - - - - - - - calyx linear - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina sharpness - - - - - - - - - - - - - - - - - - - - - - - - stamen curved - - - - - - - - - - - - - - - - - - - - - - - - stamen curvature - - - - - - - - - - - - - - - - - - - - - - - - scutellar node smooth - - - - - - - - - - - - - - - - - - - - - - - - scutellar node texture - - - - - - - - - - - - - - - - - - - - - - - - seed trichome cuneate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - pappus subulate - - - - - - - - - - - - - - - - - - - - - - - - pappus shape - - - - - - - - - - - - - - - - - - - - - - - - pericarp hairy - - - - - - - - - - - - - - - - - - - - - - - - pericarp pilosity - - - - - - - - - - - - - - - - - - - - - - - - flower attenuate - - - - - - - - - - - - - - - - - - - - - - - - lamina brown - - - - - - - - - - - - - - - - - - - - - - - - - - - - thorn phenotype - - - - - - - - - - - - - - - - - - - - - - - - thorn decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - thorn thickness - - - - - - - - - - - - - - - - - - - - - - - - aril yellow - - - - - - - - - - - - - - - - - - - - - - - - bracteole triangular - - - - - - - - - - - - - - - - - - - - - - - - lamina lanceolate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp furrowed - - - - - - - - - - - - - - - - - - - - - - - - mesocarp texture - - - - - - - - - - - - - - - - - - - - - - - - lamina obtuse - - - - - - - - - - - - - - - - - - - - - - - - inflorescence whole - - - - - - - - - - - - - - - - - - - - - - - - inflorescence wholeness - - - - - - - - - - - - - - - - - - - - - - - - awn bilobed - - - - - - - - - - - - - - - - - - - - - - - - awn shape - - - - - - - - - - - - - - - - - - - - - - - - tubercle glabrous - - - - - - - - - - - - - - - - - - - - - - - - seed granular - - - - - - - - - - - - - - - - - - - - - - - - seed composition - - - - - - - - - - - - - - - - - - - - - - - - seed purple - - - - - - - - - - - - - - - - - - - - - - - - bracteole acuminate - - - - - - - - - - - - - - - - - - - - - - - - bracteole sharpness - - - - - - - - - - - - - - - - - - - - - - - - - - - - seta phenotype - - - - - - - - - - - - - - - - - - - - - - - - seta green - - - - - - - - - - - - - - - - - - - - - - - - seta color - - - - - - - - - - - - - - - - - - - - - - - - peduncle pedicellate - - - - - - - - - - - - - - - - - - - - - - - - peduncle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bud spherical - - - - - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus phenotype - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus shape - - - - - - - - - - - - - - - - - - - - - - - - lamina parallel to - - - - - - - - - - - - - - - - - - - - - - - - root erect - - - - - - - - - - - - - - - - - - - - - - - - root position - - - - - - - - - - - - - - - - - - - - - - - - keel lateral to - - - - - - - - - - - - - - - - - - - - - - - - stigma involute - - - - - - - - - - - - - - - - - - - - - - - - petiole increased length - - - - - - - - - - - - - - - - - - - - - - - - petiole length - - - - - - - - - - - - - - - - - - - - - - - - pedicel linear - - - - - - - - - - - - - - - - - - - - - - - - stigma diameter - - - - - - - - - - - - - - - - - - - - - - - - bark yellow - - - - - - - - - - - - - - - - - - - - - - - - aril brown - - - - - - - - - - - - - - - - - - - - - - - - sepal acuminate - - - - - - - - - - - - - - - - - - - - - - - - axil increased length - - - - - - - - - - - - - - - - - - - - - - - - axil length - - - - - - - - - - - - - - - - - - - - - - - - bud condensed - - - - - - - - - - - - - - - - - - - - - - - - bud structure - - - - - - - - - - - - - - - - - - - - - - - - periderm lateral to - - - - - - - - - - - - - - - - - - - - - - - - periderm position - - - - - - - - - - - - - - - - - - - - - - - - root slender - - - - - - - - - - - - - - - - - - - - - - - - root shape - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system obtuse - - - - - - - - - - - - - - - - - - - - - - - - lenticel glabrous - - - - - - - - - - - - - - - - - - - - - - - - lenticel pilosity - - - - - - - - locule up - true - - - - - - - - - - - - - - - - - - - - - - - - locule direction - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet inserted into - - - - - - - - - - - - - - - - - - - - - - - - shoot apex emarginate - - - - - - - - - - - - - - - - - - - - - - - - peristome red - - - - - - - - - - - - - - - - - - - - - - - - leaf cylindrical - - - - - - - - - - - - - - - - - - - - - - - - receptacle lanceolate - - - - - - - - - - - - - - - - - - - - - - - - receptacle sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf acuminate - - - - - - - - - - - - - - - - - - - - - - - - spikelet acuminate - - - - - - - - - - - - - - - - - - - - - - - - stamen inserted into - - - - - - - - - - - - - - - - - - - - - - - - tuber erect - - - - - - - - - - - - - - - - - - - - - - - - tuber position - - - - - - - - - - - - - - - - - - - - - - - - disk flower autogenous - - - - - - - - - - - - - - - - - - - - - - - - disk flower structure - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member erect - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member position - - - - - - - - - - - - - - - - - - - - - - - - branch tomentose - - - - - - - - - - - - - - - - - - - - - - - - stem decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - stem water composition - - - - - - - - - - - - - - - - - - - - - - - - trichome decreased amount - - - - - - - - - - - - - - - - - - - - - - - - trichome amount - - - - - - - - - - - - - - - - - - - - - - - - sepal brittle - - - - - - - - - - - - - - - - - - - - - - - - fruit punctate - - - - - - - - - - - - - - - - - - - - - - - - fruit spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - perianth white - - - - - - - - - - - - - - - - - - - - - - - - perianth color - - - - - - - - - - - - - - - - - - - - - - - - seed transparent - - - - - - - - - - - - - - - - - - - - - - - - seed opacity - - - - - - - - - - - - - - - - - - - - - - - - upper glume glabrous - - - - - - - - - - - - - - - - - - - - - - - - upper glume pilosity - - - - - - - - - - - - - - - - - - - - - - - - calyx dark red - - - - - - - - - - - - - - - - - - - - - - - - bract obovate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium basal to - - - - - - - - glume up - true - - - - - - - - - - - - - - - - - - - - - - - - stigma branched - - - - - - - - - - - - - - - - - - - - - - - - stigma branchiness - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf acuminate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf sharpness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx dentated - - - - - - - - - - - - - - - - - - - - - - - - epicalyx shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle opposite - - - - - - - - - - - - - - - - - - - - - - - - petiolule opposite - - - - - - - - - - - - - - - - - - - - - - - - petiolule position - - - - - - - - - - - - - - - - - - - - - - - - leaf glistening - - - - - - - - - - - - - - - - - - - - - - - - leaf reflectivity - - - - - - - - - - - - - - - - - - - - - - - - corolla black - - - - - - - - - - - - - - - - - - - - - - - - oil gland smooth - - - - - - - - - - - - - - - - - - - - - - - - oil gland texture - - - - - - - - - - - - - - - - - - - - - - - - bracteole mature - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member acuminate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem obtuse - - - - - - - - - - - - - - - - - - - - - - - - style tapered - - - - - - - - - - - - - - - - - - - - - - - - style sharpness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member alternate placement - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - calyx smooth - - - - - - - - - - - - - - - - - - - - - - - - calyx texture - - - - - - - - - - - - - - - - - - - - - - - - shoot apex spotted - - - - - - - - - - - - - - - - - - - - - - - - shoot apex color pattern - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein coating - - - - - - - - - - - - - - - - - - - - - - - - mesocarp dry - - - - - - - - - - - - - - - - - - - - - - - - mesocarp wetness - - - - - - - - bud acute - true - - - - - - - - bud duration - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle blunt - - - - - - - - - - - - - - - - - - - - - - - - petiole undulate - - - - - - - - perianth male - true - - - - - - - - perianth phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - leaflet acuminate - - - - - - - - - - - - - - - - - - - - - - - - bud basal to - - - - - - - - - - - - - - - - - - - - - - - - bud position - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle punctate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - cotyledon phenotype - - - - - - - - - - - - - - - - - - - - - - - - cotyledon glabrous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon pilosity - - - - - - - - - - - - - - - - - - - - - - - - stipule heart shaped - - - - - - - - - - - - - - - - - - - - - - - - stipule concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - petal apex phenotype - - - - - - - - - - - - - - - - - - - - - - - - petal apex grooved - - - - - - - - - - - - - - - - - - - - - - - - petal apex texture - - - - - - - - - - - - - - - - - - - - - - - - endocarp striated - - - - - - - - - - - - - - - - - - - - - - - - endocarp shape - - - - - - - - - - - - - - - - - - - - - - - - flower undulate - - - - - - - - - - - - - - - - - - - - - - - - lamina width - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member oblong - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract prominent - - - - - - - - - - - - - - - - - - - - - - - - peduncle pedunculate - - - - - - - - - - - - - - - - - - - - - - - - peduncle structure - - - - - - - - - - - - - - - - - - - - - - - - lenticel wrinkled - - - - - - - - - - - - - - - - - - - - - - - - lenticel texture - - - - - - - - - - - - - - - - - - - - - - - - leaf fleshy - - - - - - - - - - - - - - - - - - - - - - - - leaf composition - - - - - - - - - - - - - - - - - - - - - - - - stamen abaxial to - - - - - - - - - - - - - - - - - - - - - - - - glume convex - - - - - - - - - - - - - - - - - - - - - - - - glume concavity - - - - - - - - - - - - - - - - - - - - - - - - shoot system terminal - - - - - - - - - - - - - - - - - - - - - - - - shoot system position - - - - - - - - - - - - - - - - - - - - - - - - petal folded - - - - - - - - - - - - - - - - - - - - - - - - petal surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - bud young - - - - - - - - - - - - - - - - - - - - - - - - bud age - - - - - - - - - - - - - - - - - - - - - - - - stem glandular - - - - - - - - - - - - - - - - - - - - - - - - stem morphology - - - - - - - - - - - - - - - - - - - - - - - - fruit ventral to - - - - - - - - - - - - - - - - - - - - - - - - involucre green - - - - - - - - - - - - - - - - - - - - - - - - involucre color - - - - - - - - - - - - - - - - - - - - - - - - shoot apex curved - - - - - - - - - - - - - - - - - - - - - - - - shoot apex curvature - - - - - - - - - - - - - - - - - - - - - - - - anther subterminal - - - - - - - - - - - - - - - - - - - - - - - - perianth cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - perianth concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petal simple - - - - - - - - - - - - - - - - - - - - - - - - petal complexity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall drooping - - - - - - - - - - - - - - - - - - - - - - - - rhizome absent - - - - - - - - - - - - - - - - - - - - - - - - rhizome amount - - - - - - - - - - - - - - - - - - - - - - - - anther triangular - - - - - - - - - - - - - - - - - - - - - - - - shoot apex leaf-like - - - - - - - - - - - - - - - - - - - - - - - - ovary wall obovate - - - - - - - - - - - - - - - - - - - - - - - - aril basal to - - - - - - - - - - - - - - - - - - - - - - - - aril position - - - - - - - - - - - - - - - - - - - - - - - - corolla broken - - - - - - - - - - - - - - - - - - - - - - - - corolla wholeness - - - - - - - - - - - - - - - - - - - - - - - - peristome inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf basal to - - - - - - - - - - - - - - - - - - - - - - - - whole plant purple - - - - - - - - - - - - - - - - - - - - - - - - whole plant color - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem pubescent - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem maturity - - - - - - - - - - - - - - - - - - - - - - - - petiolule circular - - - - - - - - - - - - - - - - - - - - - - - - petiolule 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stem thickness - - - - - - - - - - - - - - - - - - - - - - - - flower cauline to - - - - - - - - - - - - - - - - - - - - - - - - peristome broad - - - - - - - - - - - - - - - - - - - - - - - - peristome shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle dentated - - - - - - - - - - - - - - - - - - - - - - - - calyx closed - - - - - - - - - - - - - - - - - - - - - - - - calyx closure - - - - - - - - - - - - - - - - - - - - - - - - seed green - - - - - - - - - - - - - - - - - - - - - - - - central zone decreased amount - - - - - - - - - - - - - - - - - - - - - - - - central zone amount - - - - - - - - - - - - - - - - - - - - - - - - shoot apex basal to - - - - - - - - - - - - - - - - - - - - - - - - seed trichome serrated - - - - - - - - - - - - - - - - - - - - - - - - tubercle cuneate - - - - - - - - - - - - - - - - - - - - - - - - tubercle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem attenuate - - - - - - - - - - - - - - - - - - - - - - - - seed fleshy - - - - - - - - - - - - - - - - - - - - - - - - disk flower open - - - - - - - - - - - - - - - - - - - - - - - - disk flower closure - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril simple - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril complexity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle elliptic - - - - - - - - - - - - - - - - - - - - - - - - pedicel flattened - - - - - - - - - - - - - - - - - - - - - - - - pedicel curvature - - - - - - - - - - - - - - - - - - - - - - - - - - - - simple leaf phenotype - - - - - - - - - - - - - - - - - - - - - - - - simple leaf terminal - - - - - - - - - - - - - - - - - - - - - - - - simple leaf position - - - - - - - - - - - - - - - - - - - - - - - - bud grey - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf alternate placement - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stem pink - - - - - - - - - - - - - - - - - - - - - - - - exocarp smooth - - - - - - - - - - - - - - - - - - - - - - - - exocarp texture - - - - - - - - - - - - - - - - - - - - - - - - shoot apex erect - - - - - - - - - - - - - - - - - - - - - - - - receptacle glabrous - - - - - - - - - - - - - - - - - - - - - - - - receptacle pilosity - - - - - - - - - - - - - - - - - - - - - - - - whole plant lanceolate - - - - - - - - - - - - - - - - - - - - - - - - whole plant sharpness - - - - - - - - - - - - - - - - - - - - - - - - anther elliptic - - - - - - - - - - - - - - - - - - - - - - - - flower opposite - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - leaf purple - - - - - - - - - - - - - - - - - - - - - - - - stem multicellular - - - - - - - - - - - - - - - - - - - - - - - - stem cellularity - - - - - - - - - - - - - - - - - - - - - - - - awn white - - - - - - - - - - - - - - - - - - - - - - - - awn color - - - - - - - - - - - - - - - - - - - - - - - - peduncle simple - - - - - - - - - - - - - - - - - - - - - - - - peduncle complexity - - - - - - - - - - - - - - - - - - - - - - - - hypanthium pubescent - - - - - - - - - - - - - - - - - - - - - - - - hypanthium maturity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall oblong - - - - - - - - - - - - - - - - - - - - - - - - leaf truncated - - - - - - - - - - - - - - - - - - - - - - - - growth ring decumbent - - - - - - - - - - - - - - - - - - - - - - - - growth ring position - - - - - - - - - - - - - - - - - - - - - - - - leaf smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf obtuse - - - - - - - - - - - - - - - - - - - - - - - - bracteole bifurcated - - - - - - - - - - - - - - - - - - - - - - - - bracteole branchiness - - - - - - - - - - - - - - - - - - - - - - - - calyx bifurcated - - - - - - - - - - - - - - - - - - - - - - - - calyx branchiness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall pubescent - - - - - - - - - - - - - - - - - - - - - - - - ovary wall maturity - - - - - - - - - - - - - - - - - - - - - - - - lamina branched - - - - - - - - leaf acute - true - - - - - - - - leaf duration - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge phenotype - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge triangular - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit lanceolate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure opposite - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure position - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue dentated - - - - - - - - - - - - - - - - - - - - - - - - flower concave - - - - - - - - - - - - - - - - - - - - - - - - flower concavity - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - peristome subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - peristome convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - anther conical - - - - - - - - - - - - - - - - - - - - - - - - perianth bilobed - - - - - - - - - - - - - - - - - - - - - - - - leaflet punctate - - - - - - - - - - - - - - - - - - - - - - - - branch hairy - - - - - - - - - - - - - - - - - - - - - - - - perianth cylindrical - - - - - - - - - - - - - - - - - - - - - - - - perianth convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina triangular - - - - - - - - - - - - - - - - - - - - - - - - style conspicuous - - - - - - - - - - - - - - - - - - - - - - - - calyx edible - - - - - - - - - - - - - - - - - - - - - - - - calyx edibility - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle inflexible - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle flexibility - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - perianth loose - - - - - - - - - - - - - - - - - - - - - - - - perianth spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bark scaly - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle pubescent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle maturity - - - - - - - - - - - - - - - - - - - - - - - - banner petal glandular - - - - - - - - - - - - - - - - - - - - - - - - banner petal morphology - - - - - - - - - - - - - - - - - - - - - - - - branch pedicellate - - - - - - - - - - - - - - - - - - - - - - - - branch attachment quality - - - - - - - - - - - - - - - - - - - - - - - - calyx obovate - - - - - - - - - - - - - - - - - - - - - - - - whole plant decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - sepal increased thickness - - - - - - - - - - - - - - - - - - - - - - - - sepal thickness - - - - - - - - - - - - - - - - - - - - - - - - endocarp fleshy - - - - - - - - - - - - - - - - - - - - - - - - endocarp composition - - - - - - - - - - - - - - - - - - - - - - - - stamen pubescent - - - - - - - - - - - - - - - - - - - - - - - - stamen maturity - - - - - - - - - - - - - - - - - - - - - - - - bracteole elliptic - - - - - - - - - - - - - - - - - - - - - - - - filament divergent from - - - - - - - - - - - - - - - - - - - - - - - - seed trichome swollen - - - - - - - - - - - - - - - - - - - - - - - - seed trichome structure - - - - - - - - - - - - - - - - - - - - - - - - axil absent - - - - - - - - - - - - - - - - - - - - - - - - axil amount - - - - - - - - - - - - - - - - - - - - - - - - banner petal obovate - - - - - - - - - - - - - - - - - - - - - - - - banner petal convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem size - - - - - - - - - - - - - - - - - - - - - - - - flower terminal - - - - - - - - - - - - - - - - - - - - - - - - filament glandular - - - - - - - - - - - - - - - - - - - - - - - - filament morphology - - - - - - - - - - - - - - - - - - - - - - - - lenticel prominent - - - - - - - - - - - - - - - - - - - - - - - - lenticel position - - - - - - - - - - - - - - - - - - - - - - - - seed trichome caudate - - - - - - - - - - - - - - - - - - - - - - - - leaf hard - - - - - - - - - - - - - - - - - - - - - - - - leaf hardness - - - - - - - - - - - - - - - - - - - - - - - - calyx white - - - - - - - - - - - - - - - - - - - - - - - - calyx erect - - - - - - - - - - - - - - - - - - - - - - - - anther inserted into - - - - - - - - - - - - - - - - - - - - - - - - pericarp white - - - - - - - - - - - - - - - - - - - - - - - - pericarp color - - - - - - - - - - - - - - - - - - - - - - - - aril terminal - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member glandular - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member morphology - - - - - - - - - - - - - - - - - - - - - - - - seed trichome brittle - - - - - - - - - - - - - - - - - - - - - - - - petiole margin obtuse - - - - - - - - - - - - - - - - - - - - - - - - petiole margin 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - valve split - - - - - - - - - - - - - - - - - - - - - - - - petiole decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf green - - - - - - - - - - - - - - - - - - - - - - - - leaf auriculate - - - - - - - - - - - - - - - - - - - - - - - - style fertile - - - - - - - - - - - - - - - - - - - - - - - - style fertility - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem thickness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet ovate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - style lobed - - - - - - - - - - - - - - - - - - - - - - - - trichome punctate - - - - - - - - - - - - - - - - - - - - - - - - trichome spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bark green - - - - - - - - - - - - - - - - - - - - - - - - stem acuminate - - - - - - - - - - - - - - - - - - - - - - - - bracteole glabrous - - - - - - - - - - - - - - - - - - - - - - - - bracteole pilosity - - - - - - - - - - - - - - - - - - - - - - - - aril absent - - - - - - - - - - - - - - - - - - - - - - - - aril amount - - - - - - - - - - - - - - - - - - - - - - - - fruit fleshy - - - - - - - - - - - - - - - - - - - - - - - - fruit composition - - - - - - - - - - - - - - - - - - - - - - - - leaf distributed - - - - - - - - - - - - - - - - - - - - - - - - exocarp wrinkled - - - - - - - - - - - - - - - - - - - - - - - - rhizome increased length - - - - - - - - - - - - - - - - - - - - - - - - lenticel warty - - - - - - - - - - - - - - - - - - - - - - - - corolla pale pink - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member linear - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member shape - - - - - - - - - - - - - - - - - - - - - - - - stem white - - - - - - - - - - - - - - - - - - - - - - - - fruit oblique to - - - - - - - - - - - - - - - - - - - - - - - - testa laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - testa curvature - - - - - - - - - - - - - - - - - - - - - - - - - - - - nectary phenotype - - - - - - - - - - - - - - - - - - - - - - - - nectary basal to - - - - - - - - - - - - - - - - - - - - - - - - nectary position - - - - - - - - - - - - - - - - - - - - - - - - keel blunt - - - - - - - - - - - - - - - - - - - - - - - - keel sharpness - - - - - - - - - - - - - - - - - - - - - - - - peduncle erect - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle terminal - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle position - - - - - - - - - - - - - - - - - - - - - - - - petiole oblong - - - - - - - - - - - - - - - - - - - - - - - - axil green - - - - - - - - - - - - - - - - - - - - - - - - axil color - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem branched - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem branchiness - - - - - - - - - - - - - - - - - - - - - - - - anther raised - - - - - - - - - - - - - - - - - - - - - - - - perianth dorsal to - - - - - - - - - - - - - - - - - - - - - - - - perianth position - - - - - - - - - - - - - - - - - - - - - - - - stipule dentated - - - - - - - - - - - - - - - - - - - - - - - - petiole tomentose - - - - - - - - - - - - - - - - - - - - - - - - leaflet punctiform - - - - - - - - - - - - - - - - - - - - - - - - flower decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - flower water composition - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - branch distichous - - - - - - - - - - - - - - - - - - - - - - - - filament pubescent - - - - - - - - - - - - - - - - - - - - - - - - filament maturity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall elliptic - - - - - - - - - - - - - - - - - - - - - - - - calyx ovate - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus pubescent - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus maturity - - - - - - - - - - - - - - - - - - - - - - - - fruit grey - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus inserted into - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus position - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue thickness - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf glandular - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf morphology - - - - - - - - - - - - - - - - - - - - - - - - lemma sterile - - - - - - - - - - - - - - - - - - - - - - - - lemma fertility - - - - - - - - - - - - - - - - - - - - - - - - corolla obtuse - - - - - - - - - - - - - - - - - - - - - - - - - - - - papilla cell phenotype - - - - - - - - - - - - - - - - - - - - - - - - papilla cell adaxial to - - - - - - - - - - - - - - - - - - - - - - - - papilla cell position - - - - - - - - - - - - - - - - - - - - - - - - root spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - root convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - sheath cell linear - - - - - - - - shoot apex arrested - true - - - - - - - - shoot apex offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue triangular - - - - - - - - - - - - - - - - - - - - - - - - aril orange - - - - - - - - - - - - - - - - - - - - - - - - anther arched - - - - - - - - - - - - - - - - - - - - - - - - anther concavity - - - - - - - - - - - - - - - - - - - - - - - - filament curved - - - - - - - - - - - - - - - - - - - - - - - - filament curvature - - - - - - - - - - - - - - - - - - - - - - - - filament spherical - - - - - - - - - - - - - - - - - - - - - - - - filament convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiole hairy - - - - - - - - - - - - - - - - - - - - - - - - branch alternate placement - - - - - - - - - - - - - - - - - - - - - - - - branch spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member obovate - - - - - - - - - - - - - - - - - - - - - - - - pedicel angular - - - - - - - - - - - - - - - - - - - - - - - - shoot apex recurved - - - - - - - - - - - - - - - - - - - - - - - - anther theca bifurcated - - - - - - - - - - - - - - - - - - - - - - - - anther theca branchiness - - - - - - - - leaf lamina acute - true - - - - - - - - leaf lamina duration - true - - - - - - - - - - - - - - - - - - - - - - - - whole plant angular - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence obtuse - - - - - - - - - - - - - - - - - - - - - - - - periderm dry - - - - - - - - - - - - - - - - - - - - - - - - periderm wetness - - - - - - - - - - - - - - - - - - - - - - - - pericarp distal to - - - - - - - - - - - - - - - - - - - - - - - - pericarp position - - - - - - - - - - - - - - - - - - - - - - - - root whole - - - - - - - - - - - - - - - - - - - - - - - - root wholeness - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence oblong - - - - - - - - - - - - - - - - - - - - - - - - growth ring erect - - - - - - - - - - - - - - - - - - - - - - - - ray system glandular - - - - - - - - - - - - - - - - - - - - - - - - ray system morphology - - - - - - - - - - - - - - - - - - - - - - - - shoot internode smooth - - - - - - - - - - - - - - - - - - - - - - - - shoot internode texture - - - - - - - - - - - - - - - - - - - - - - - - corolla brown - - - - - - - - - - - - - - - - - - - - - - - - flower inserted into - - - - - - - - - - - - - - - - - - - - - - - - ovary wall autogenous - - - - - - - - - - - - - - - - - - - - - - - - ovary wall structure - - - - - - - - - - - - - - - - - - - - - - - - crown root furrowed - - - - - - - - - - - - - - - - - - - - - - - - crown root texture - - - - - - - - - - - - - - - - - - - - - - - - anther truncated - - - - - - - - - - - - - - - - - - - - - - - - style bent - - - - - - - - inflorescence hermaphrodite - true - - - - - - - - inflorescence phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome grey - - - - - - - - - - - - - - - - - - - - - - - - plant callus basal to - - - - - - - - - - - - - - - - - - - - - - - - plant callus position - - - - - - - - - - - - - - - - - - - - - - - - costa superficial - - - - - - - - - - - - - - - - - - - - - - - - petal clavate - - - - - - - - - - - - - - - - - - - - - - - - petal concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - testa rugose - - - - - - - - - - - - - - - - - - - - - - - - testa surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - stem broad - - - - - - - - - - - - - - - - - - - - - - - - plant embryo convex - - - - - - - - - - - - - - - - - - - - - - - - plant embryo concavity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem heart shaped - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem divergent from - - - - - - - - - - - - - - - - - - - - - - - - spikelet spherical - - - - - - - - - - - - - - - - - - - - - - - - spikelet convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex flattened - - - - - - - - - - - - - - - - - - - - - - - - testa conical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex glandular - - - - - - - - - - - - - - - - - - - - - - - - shoot apex morphology - - - - - - - - sepal subacute - true - - - - - - - - - - - - - - - - - - - - - - - - seed cylindrical - - - - - - - - - - - - - - - - - - - - - - - - seed convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - connective aggregated - - - - - - - - - - - - - - - - - - - - - - - - connective spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - locule sterile - - - - - - - - - - - - - - - - - - - - - - - - locule fertility - - - - - - - - - - - - - - - - - - - - - - - - axil glabrous - - - - - - - - - - - - - - - - - - - - - - - - axil pilosity - - - - - - - - - - - - - - - - - - - - - - - - stigma terminal - - - - - - - - - - - - - - - - - - - - - - - - filament erect - - - - - - - - - - - - - - - - - - - - - - - - ovary wall bilobed - - - - - - - - - - - - - - - - - - - - - - - - leaflet truncated - - - - - - - - - - - - - - - - - - - - - - - - anther spherical - - - - - - - - - - - - - - - - - - - - - - - - peduncle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex distichous - - - - - - - - - - - - - - - - - - - - - - - - anther theca truncated - - - - - - - - - - - - - - - - - - - - - - - - anther theca shape - - - - - - - - - - - - - - - - - - - - - - - - trichome oblong - - - - - - - - - - - - - - - - - - - - - - - - inflorescence glabrous - - - - - - - - - - - - - - - - - - - - - - - - peduncle striated - - - - - - - - - - - - - - - - - - - - - - - - peduncle shape - - - - - - - - keel acute - true - - - - - - - - keel duration - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle thickness - - - - - - - - - - - - - - - - - - - - - - - - bud swollen - - - - - - - - calyx acute - true - - - - - - - - calyx duration - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle concave - - - - - - - - - - - - - - - - - - - - - - - - - - - - bulb phenotype - - - - - - - - - - - - - - - - - - - - - - - - bulb diameter - - - - - - - - - - - - - - - - - - - - - - - - calyx yellow - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root hairy - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root pilosity - - - - - - - - - - - - - - - - - - - - - - - - fruit purple - - - - - - - - - - - - - - - - - - - - - - - - fruit conical - - - - - - - - flower up - true - - - - - - - - - - - - - - - - - - - - - - - - flower direction - - - - - - - - - - - - - - - - - - - - - - - - leaf whorled - - - - - - - - - - - - - - - - - - - - - - - - stem opposite - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle glistening - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle reflectivity - - - - - - - - - - - - - - - - - - - - - - - - sepal attenuate - - - - - - - - - - - - - - - - - - - - - - - - sepal hairy - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence decreased amount - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence amount - - - - - - - - - - - - - - - - - - - - - - - - shoot apex broken - - - - - - - - - - - - - - - - - - - - - - - - shoot apex wholeness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal triangular - - - - - - - - - - - - - - - - - - - - - - - - pappus absent - - - - - - - - - - - - - - - - - - - - - - - - pappus amount - - - - - - - - - - - - - - - - - - - - - - - - petal pubescent - - - - - - - - - - - - - - - - - - - - - - - - petal maturity - - - - - - - - - - - - - - - - - - - - - - - - involucre triangular - - - - - - - - - - - - - - - - - - - - - - - - involucre 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - keel green - - - - - - - - - - - - - - - - - - - - - - - - flower lobed - - - - - - - - - - - - - - - - - - - - - - - - palea oblong - - - - - - - - - - - - - - - - - - - - - - - - palea 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - root robust - - - - - - - - - - - - - - - - - - - - - - - - rhizome articulated with - - - - - - - - - - - - - - - - - - - - - - - - rhizome structure - - - - - - - - - - - - - - - - - - - - - - - - leaf punctate - - - - - - - - - - - - - - - - - - - - - - - - connective parallel to - - - - - - - - - - - - - - - - - - - - - - - - mesocarp fleshy - - - - - - - - - - - - - - - - - - - - - - - - mesocarp composition - - - - - - - - - - - - - - - - - - - - - - - - petiole basal to - - - - - - - - - - - - - - - - - - - - - - - - seed spherical - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle auriculate - - - - - - - - - - - - - - - - - - - - - - - - root tip erect - - - - - - - - - - - - - - - - - - - - - - - - root tip position - - - - - - - - - - - - - - - - - - - - - - - - sepal pink - - - - - - - - - - - - - - - - - - - - - - - - sepal color - - - - - - - - - - - - - - - - - - - - - - - - shoot apex drooping - - - - - - - - - - - - - - - - - - - - - - - - corolla tubular - - - - - - - - - - - - - - - - - - - - - - - - tubercle rugose - - - - - - - - - - - - - - - - - - - - - - - - tubercle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal subulate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal shape - - - - - - - - - - - - - - - - - - - - - - - - stem slender - - - - - - - - - - - - - - - - - - - - - - - - stem red - - - - - - - - - - - - - - - - - - - - - - - - stem tomentose - - - - - - - - - - - - - - - - - - - - - - - - spikelet flattened - - - - - - - - - - - - - - - - - - - - - - - - spikelet curvature - - - - - - - - - - - - - - - - - - - - - - - - fruit bilobed - - - - - - - - - - - - - - - - - - - - - - - - bud circular - - - - - - - - - - - - - - - - - - - - - - - - fruit grooved - - - - - - - - - - - - - - - - - - - - - - - - stem furrowed - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system pilosity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - bracteole linear - - - - - - - - - - - - - - - - - - - - - - - - bracteole shape - - - - - - - - - - - - - - - - - - - - - - - - exocarp spherical - - - - - - - - - - - - - - - - - - - - - - - - exocarp convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit obovate - - - - - - - - - - - - - - - - - - - - - - - - anther subulate - - - - - - - - - - - - - - - - - - - - - - - - petal increased thickness - - - - - - - - - - - - - - - - - - - - - - - - petal thickness - - - - - - - - - - - - - - - - - - - - - - - - bark black - - - - - - - - glume female - true - - - - - - - - glume phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - calyx notched - - - - - - - - - - - - - - - - - - - - - - - - calyx concavity - - - - - - - - - - - - - - - - - - - - - - - - petiole attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaflet smooth - - - - - - - - - - - - - - - - - - - - - - - - leaflet texture - - - - - - - - - - - - - - - - - - - - - - - - corolla hairy - - - - - - - - - - - - - - - - - - - - - - - - stem ovate - - - - - - - - - - - - - - - - - - - - - - - - corolla dentated - - - - - - - - - - - - - - - - - - - - - - - - bud terminal - - - - - - - - - - - - - - - - - - - - - - - - cotyledon acuminate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon sharpness - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle pedicellate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence simple - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence complexity - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence branched - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence branchiness - - - - - - - - - - - - - - - - - - - - - - - - bud angular - - - - - - - - - - - - - - - - - - - - - - - - pedicel green - - - - - - - - - - - - - - - - - - - - - - - - pedicel color - - - - - - - - - - - - - - - - - - - - - - - - - - - - sapwood phenotype - - - - - - - - - - - - - - - - - - - - - - - - sapwood white - - - - - - - - - - - - - - - - - - - - - - - - sapwood color - - - - - - - - - - - - - - - - - - - - - - - - fruit notched - - - - - - - - - - - - - - - - - - - - - - - - fruit concavity - - - - - - - - - - - - - - - - - - - - - - - - palea ovate - - - - - - - - - - - - - - - - - - - - - - - - palea convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark flaky - - - - - - - - fruit male - true - - - - - - - - fruit phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - bract bifurcated - - - - - - - - - - - - - - - - - - - - - - - - bract branchiness - - - - - - - - - - - - - - - - - - - - - - - - trichome linear - - - - - - - - - - - - - - - - - - - - - - - - stem conical - - - - - - - - - - - - - - - - - - - - - - - - apical hook linear - - - - - - - - inflorescence up - - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence direction - - - - - - - - - - - - - - - - - - - - - - - - - leaflet obtuse - - - - - - - - - - - - - - - - - - - - - - - - bud pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf hairy - - - - - - - - spikelet male - true - - - - - - - - spikelet phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle truncated - - - - - - - - - - - - - - - - - - - - - - - - - - - - areole bud phenotype - - - - - - - - - - - - - - - - - - - - - - - - areole bud circular - - - - - - - - - - - - - - - - - - - - - - - - areole bud 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit erect - - - - - - - - - - - - - - - - - - - - - - - - fruit vertical to - - - - - - - - - - - - - - - - - - - - - - - - perianth obovate - - - - - - - - - - - - - - - - - - - - - - - - bract heart shaped - - - - - - - - - - - - - - - - - - - - - - - - bract concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lenticel decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - lenticel water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf falciform - - - - - - - - - - - - - - - - - - - - - - - - sepal opposite - - - - - - - - - - - - - - - - - - - - - - - - lemma ovate - - - - - - - - - - - - - - - - - - - - - - - - lemma convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiole wrinkled - - - - - - - - - - - - - - - - - - - - - - - - involucre absent - - - - - - - - - - - - - - - - - - - - - - - - involucre amount - - - - - - - - - - - - - - - - - - - - - - - - leaflet linear - - - - - - - - - - - - - - - - - - - - - - - - bark soft - - - - - - - - - - - - - - - - - - - - - - - - bark hardness - - - - - - - - - - - - - - - - - - - - - - - - axil vestigial - - - - - - - - - - - - - - - - - - - - - - - - spikelet increased length - - - - - - - - - - - - - - - - - - - - - - - - spikelet length - - - - - - - - - - - - - - - - - - - - - - - - flower dark blue - - - - - - - - - - - - - - - - - - - - - - - - inflorescence lanceolate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence sharpness - - - - - - - - - - - - - - - - - - - - - - - - stalk fusiform - - - - - - - - - - - - - - - - - - - - - - - - stalk convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - thallus phenotype - - - - - - - - - - - - - - - - - - - - - - - - thallus fertile - - - - - - - - - - - - - - - - - - - - - - - - thallus fertility - - - - - - - - - - - - - - - - - - - - - - - - apical hook truncated - - - - - - - - - - - - - - - - - - - - - - - - calyx lobed - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal obovate - - - - - - - - - - - - - - - - - - - - - - - - bud lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stamen linear - - - - - - - - - - - - - - - - - - - - - - - - bracteole raised - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system sharpness - - - - - - - - bracteole male - true - - - - - - - - bracteole phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - peristome horizontal - - - - - - - - - - - - - - - - - - - - - - - - peristome position - - - - - - - - - - - - - - - - - - - - - - - - septum emarginate - - - - - - - - - - - - - - - - - - - - - - - - septum concavity - - - - - - - - - - - - - - - - - - - - - - - - connective bilateral - - - - - - - - - - - - - - - - - - - - - - - - thorn simple - - - - - - - - - - - - - - - - - - - - - - - - thorn complexity - - - - - - - - - - - - - - - - - - - - - - - - stem increased thickness - - - - - - - - glume acute - true - - - - - - - - glume duration - true - - - - - - - - - - - - - - - - - - - - - - - - shoot apex falciform - - - - - - - - - - - - - - - - - - - - - - - - stipule alternate placement - - - - - - - - - - - - - - - - - - - - - - - - stipule spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stem concealed by - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina maturity - - - - - - - - - - - - - - - - - - - - - - - - ligule absent - - - - - - - - - - - - - - - - - - - - - - - - ligule amount - - - - - - - - - - - - - - - - - - - - - - - - trichome pubescent - - - - - - - - - - - - - - - - - - - - - - - - trichome maturity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex cupulate - - - - - - - - - - - - - - - - - - - - - - - - fruit opposite - - - - - - - - - - - - - - - - - - - - - - - - stem fertile - - - - - - - - - - - - - - - - - - - - - - - - branch branched - - - - - - - - - - - - - - - - - - - - - - - - branch branchiness - - - - - - - - - - - - - - - - - - - - - - - - peduncle subulate - - - - - - - - - - - - - - - - - - - - - - - - fruit furrowed - - - - - - - - - - - - - - - - - - - - - - - - lemma overlapping - - - - - - - - - - - - - - - - - - - - - - - - lemma structure - - - - - - - - - - - - - - - - - - - - - - - - staminode glandular - - - - - - - - - - - - - - - - - - - - - - - - staminode morphology - - - - - - - - - - - - - - - - - - - - - - - - exocarp dry - - - - - - - - - - - - - - - - - - - - - - - - exocarp wetness - - - - - - - - - - - - - - - - - - - - - - - - branch recurved - - - - - - - - - - - - - - - - - - - - - - - - lamina pinnate - - - - - - - - - - - - - - - - - - - - - - - - whole plant pedicellate - - - - - - - - - - - - - - - - - - - - - - - - whole plant attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system leaf-like - - - - - - - - - - - - - - - - - - - - - - - - petiole lateral to - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle triangular - - - - - - - - - - - - - - - - - - - - - - - - lamina revolute - - - - - - - - - - - - - - - - - - - - - - - - lemma flattened - - - - - - - - - - - - - - - - - - - - - - - - stem brown - - - - - - - - - - - - - - - - - - - - - - - - stigma flattened - - - - - - - - - - - - - - - - - - - - - - - - stigma curvature - - - - - - - - - - - - - - - - - - - - - - - - stigma inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - sepal star shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma autogenous - - - - - - - - - - - - - - - - - - - - - - - - stigma structure - - - - - - - - - - - - - - - - - - - - - - - - petal bifurcated - - - - - - - - - - - - - - - - - - - - - - - - petal branchiness - - - - - - - - - - - - - - - - - - - - - - - - lamina black - - - - - - - - - - - - - - - - - - - - - - - - involucre time - - - - - - - - - - - - - - - - - - - - - - - - sepal decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stamen dark red - - - - - - - - - - - - - - - - - - - - - - - - corolla glandular - - - - - - - - - - - - - - - - - - - - - - - - corolla morphology - - - - - - - - - - - - - - - - - - - - - - - - style subulate - - - - - - - - - - - - - - - - - - - - - - - - disk flower divergent from - - - - - - - - - - - - - - - - - - - - - - - - bracteole sterile - - - - - - - - - - - - - - - - - - - - - - - - bracteole fertility - - - - - - - - - - - - - - - - - - - - - - - - disk flower fleshy - - - - - - - - - - - - - - - - - - - - - - - - disk flower composition - - - - - - - - - - - - - - - - - - - - - - - - petiole proximal to - - - - - - - - - - - - - - - - - - - - - - - - plant cell circular - - - - - - - - - - - - - - - - - - - - - - - - plant cell 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - plant embryo coiled - - - - - - - - - - - - - - - - - - - - - - - - plant embryo coiling - - - - - - - - - - - - - - - - - - - - - - - - prickle pubescent - - - - - - - - - - - - - - - - - - - - - - - - prickle maturity - - - - - - - - - - - - - - - - - - - - - - - - petiole inflexible - - - - - - - - - - - - - - - - - - - - - - - - petiole flexibility - - - - - - - - - - - - - - - - - - - - - - - - bark swollen - - - - - - - - - - - - - - - - - - - - - - - - flower drooping - - - - - - - - - - - - - - - - - - - - - - - - - - - - corm phenotype - - - - - - - - - - - - - - - - - - - - - - - - corm grey - - - - - - - - - - - - - - - - - - - - - - - - corm color - - - - - - - - - - - - - - - - - - - - - - - - androecium reniform - - - - - - - - - - - - - - - - - - - - - - - - androecium concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf young - - - - - - - - central zone hermaphrodite - true - - - - - - - - central zone phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - bud white - - - - - - - - - - - - - - - - - - - - - - - - stem hairy - - - - - - - - - - - - - - - - - - - - - - - - calyx red - - - - - - - - - - - - - - - - - - - - - - - - involucre ovate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle retuse - - - - - - - - - - - - - - - - - - - - - - - - corm erect - - - - - - - - - - - - - - - - - - - - - - - - corm position - - - - - - - - - - - - - - - - - - - - - - - - bud attenuate - - - - - - - - - - - - - - - - - - - - - - - - crown root decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - crown root water composition - - - - - - - - - - - - - - - - - - - - - - - - stigma pedicellate - - - - - - - - - - - - - - - - - - - - - - - - stigma attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bracteole concave - - - - - - - - - - - - - - - - - - - - - - - - bracteole concavity - - - - - - - - - - - - - - - - - - - - - - - - branch lateral to - - - - - - - - lamina acute - true - - - - - - - - lamina duration - true - - - - - - - - - - - - - - - - - - - - - - - - involucre distichous - - - - - - - - - - - - - - - - - - - - - - - - involucre position - - - - - - - - - - - - - - - - - - - - - - - - fruit warty - - - - - - - - - - - - - - - - - - - - - - - - pedicel open - - - - - - - - - - - - - - - - - - - - - - - - pedicel closure - - - - - - - - - - - - - - - - - - - - - - - - sepal decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - sepal water composition - - - - - - - - - - - - - - - - - - - - - - - - stem elliptic - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member pubescent - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member maturity - - - - - - - - filament male - true - - - - - - - - filament phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - cotyledon convex - - - - - - - - - - - - - - - - - - - - - - - - cotyledon concavity - - - - - - - - - - - - - - - - - - - - - - - - anther exserted - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl cylindrical - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - style conical - - - - - - - - - - - - - - - - - - - - - - - - pedicel smooth - - - - - - - - - - - - - - - - - - - - - - - - pedicel texture - - - - - - - - - - - - - - - - - - - - - - - - leaf absent - - - - - - - - - - - - - - - - - - - - - - - - stipule revolute - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle glabrous - - - - - - - - - - - - - - - - - - - - - - - - apical hook grooved - - - - - - - - - - - - - - - - - - - - - - - - apical hook texture - - - - - - - - - - - - - - - - - - - - - - - - style autogenous - - - - - - - - - - - - - - - - - - - - - - - - stem cuneate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue auriculate - - - - - - - - - - - - - - - - - - - - - - - - calyx autogenous - - - - - - - - - - - - - - - - - - - - - - - - epidermis linear - - - - - - - - - - - - - - - - - - - - - - - - epidermis shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet ovate - - - - - - - - - - - - - - - - - - - - - - - - peduncle brown - - - - - - - - - - - - - - - - - - - - - - - - peduncle color - - - - - - - - fruit female - true - - - - - - - - - - - - - - - - - - - - - - - - calyx increased length - - - - - - - - - - - - - - - - - - - - - - - - peduncle slender - - - - - - - - - - - - - - - - - - - - - - - - canal slit-like - - - - - - - - - - - - - - - - - - - - - - - - canal shape - - - - - - - - - - - - - - - - - - - - - - - - petiole dentated - - - - - - - - - - - - - - - - - - - - - - - - ovary wall convex - - - - - - - - - - - - - - - - - - - - - - - - ovary wall concavity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet scalloped - - - - - - - - - - - - - - - - - - - - - - - - areole bud areolate - - - - - - - - - - - - - - - - - - - - - - - - areole bud surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - involucre whorled - - - - - - - - - - - - - - - - - - - - - - - - involucre spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member cuneate - - - - - - - - - - - - - - - - - - - - - - - - calyx star shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system position - - - - - - - - - - - - - - - - - - - - - - - - branch increased thickness - - - - - - - - - - - - - - - - - - - - - - - - branch thickness - - - - - - - - - - - - - - - - - - - - - - - - stipule oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - stigma glabrous - - - - - - - - - - - - - - - - - - - - - - - - stigma pilosity - - - - - - - - - - - - - - - - - - - - - - - - plant embryo leaf-like - - - - - - - - - - - - - - - - - - - - - - - - plant embryo shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle diameter - - - - - - - - - - - - - - - - - - - - - - - - growth ring inflexible - - - - - - - - - - - - - - - - - - - - - - - - growth ring flexibility - - - - - - - - - - - - - - - - - - - - - - - - perianth convex - - - - - - - - - - - - - - - - - - - - - - - - perianth concavity - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal linear - - - - - - - - - - - - - - - - - - - - - - - - calyx branched - - - - - - - - - - - - - - - - - - - - - - - - - - - - placenta phenotype - - - - - - - - - - - - - - - - - - - - - - - - placenta glandular - - - - - - - - - - - - - - - - - - - - - - - - placenta morphology - - - - - - - - ligule female - true - - - - - - - - ligule phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - bract obtuse - - - - - - - - - - - - - - - - - - - - - - - - stigma simple - - - - - - - - - - - - - - - - - - - - - - - - stigma complexity - - - - - - - - - - - - - - - - - - - - - - - - carpel kinked - - - - - - - - - - - - - - - - - - - - - - - - leaf articulated with - - - - - - - - - - - - - - - - - - - - - - - - tepal spatulate - - - - - - - - - - - - - - - - - - - - - - - - tepal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bud dense - - - - - - - - - - - - - - - - - - - - - - - - bud mass density - - - - - - - - - - - - - - - - - - - - - - - - shoot internode fleshy - - - - - - - - - - - - - - - - - - - - - - - - shoot internode composition - - - - - - - - - - - - - - - - - - - - - - - - anther autogenous - - - - - - - - - - - - - - - - - - - - - - - - anther structure - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence striated - - - - - - - - - - - - - - - - - - - - - - - - seed trichome terminal - - - - - - - - - - - - - - - - - - - - - - - - palea protruding - - - - - - - - - - - - - - - - - - - - - - - - palea position - - - - - - - - - - - - - - - - - - - - - - - - prickle glandular - - - - - - - - - - - - - - - - - - - - - - - - prickle morphology - - - - - - - - - - - - - - - - - - - - - - - - rhizome flattened - - - - - - - - - - - - - - - - - - - - - - - - rhizome curvature - - - - - - - - - - - - - - - - - - - - - - - - growth ring glabrous - - - - - - - - - - - - - - - - - - - - - - - - growth ring pilosity - - - - - - - - - - - - - - - - - - - - - - - - branch ovate - - - - - - - - - - - - - - - - - - - - - - - - seed smooth - - - - - - - - - - - - - - - - - - - - - - - - seed texture - - - - - - - - - - - - - - - - - - - - - - - - petiole margin elliptic - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure spherical - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - keel yellow - - - - - - - - - - - - - - - - - - - - - - - - shoot apex serrated - - - - - - - - - - - - - - - - - - - - - - - - spikelet flat - - - - - - - - - - - - - - - - - - - - - - - - pericarp cylindrical - - - - - - - - - - - - - - - - - - - - - - - - pericarp convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - branch decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - anther cylindrical - - - - - - - - - - - - - - - - - - - - - - - - corolla tomentose - - - - - - - - - - - - - - - - - - - - - - - - spikelet pubescent - - - - - - - - - - - - - - - - - - - - - - - - spikelet maturity - - - - - - - - - - - - - - - - - - - - - - - - corolla left - - - - - - - - - - - - - - - - - - - - - - - - corolla direction - - - - - - - - - - - - - - - - - - - - - - - - flower autogenous - - - - - - - - - - - - - - - - - - - - - - - - flower structure - - - - - - - - inflorescence acute - - true - - - - - - - - inflorescence duration - - true - - - - - - - - - - - - - - - - - - - - - - - - stigma spherical - - - - - - - - - - - - - - - - - - - - - - - - stigma convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex lobed - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle pedicellate - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bark vertical - - - - - - - - - - - - - - - - - - - - - - - - bark spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bud fleshy - - - - - - - - - - - - - - - - - - - - - - - - bud composition - - - - - - - - - - - - - - - - - - - - - - - - anther increased thickness - - - - - - - - - - - - - - - - - - - - - - - - anther thickness - - - - - - - - - - - - - - - - - - - - - - - - petiolule hairy - - - - - - - - - - - - - - - - - - - - - - - - petiolule pilosity - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root hispid - - - - - - - - - - - - - - - - - - - - - - - - style brown - - - - - - - - - - - - - - - - - - - - - - - - stem smooth - - - - - - - - - - - - - - - - - - - - - - - - style proximal to - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf triangular - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - scutellar node inserted into - - - - - - - - - - - - - - - - - - - - - - - - style green - - - - - - - - - - - - - - - - - - - - - - - - pericarp dry - - - - - - - - - - - - - - - - - - - - - - - - pericarp wetness - - - - - - - - - - - - - - - - - - - - - - - - perianth dry - - - - - - - - - - - - - - - - - - - - - - - - perianth wetness - - - - - - - - - - - - - - - - - - - - - - - - corolla terminal - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle cuneate - - - - - - - - - - - - - - - - - - - - - - - - plant callus furrowed - - - - - - - - - - - - - - - - - - - - - - - - plant callus texture - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence increased length - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence length - - - - - - - - - - - - - - - - - - - - - - - - upper glume soft - - - - - - - - - - - - - - - - - - - - - - - - upper glume hardness - - - - - - - - - - - - - - - - - - - - - - - - leaf decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex alternate placement - - - - - - - - - - - - - - - - - - - - - - - - ovary wall obtuse - - - - - - - - - - - - - - - - - - - - - - - - bracteole hairy - - - - - - - - - - - - - - - - - - - - - - - - peduncle triangular - - - - - - - - - - - - - - - - - - - - - - - - peduncle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - sepal pedicellate - - - - - - - - - - - - - - - - - - - - - - - - sepal attachment quality - - - - - - - - - - - - - - - - - - - - - - - - ovary wall erect - - - - - - - - - - - - - - - - - - - - - - - - calyx raised - - - - - - - - - - - - - - - - - - - - - - - - fruit dark purple - - - - - - - - - - - - - - - - - - - - - - - - tepal spherical - - - - - - - - - - - - - - - - - - - - - - - - tepal convex 3-D shape - - - - - - - - palea hermaphrodite - true - - - - - - - - palea phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - petal purple - - - - - - - - - - - - - - - - - - - - - - - - fruit pink - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue acuminate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue sharpness - - - - - - - - - - - - - - - - - - - - - - - - lamina juvenile - - - - - - - - - - - - - - - - - - - - - - - - plant cell angular - - - - - - - - - - - - - - - - - - - - - - - - plant cell shape - - - - - - - - - - - - - - - - - - - - - - - - tuber conical - - - - - - - - - - - - - - - - - - - - - - - - tuber convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - seed thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit articulated with - - - - - - - - - - - - - - - - - - - - - - - - fruit black - - - - - - - - - - - - - - - - - - - - - - - - axil basal to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence multicellular - - - - - - - - - - - - - - - - - - - - - - - - - inflorescence cellularity - - - - - - - - - - - - - - - - - - - - - - - - - style grooved - - - - - - - - - - - - - - - - - - - - - - - - style texture - - - - - - - - - - - - - - - - - - - - - - - - lamina semicircular - - - - - - - - rhizome acute - true - - - - - - - - rhizome duration - true - - - - - - - - - - - - - - - - - - - - - - - - petiolule alternate placement - - - - - - - - - - - - - - - - - - - - - - - - petiolule spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - epidermis sunken - - - - - - - - - - - - - - - - - - - - - - - - epidermis elevation - - - - - - - - - - - - - - - - - - - - - - - - seed trichome kinked - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence acuminate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence sharpness - - - - - - - - - - - - - - - - - - - - - - - - style bilobed - - - - - - - - - - - - - - - - - - - - - - - - stamen actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - stamen radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - petiole robust - - - - - - - - - - - - - - - - - - - - - - - - ligule basal to - - - - - - - - - - - - - - - - - - - - - - - - ligule position - - - - - - - - - - - - - - - - - - - - - - - - petiole spiny - - - - - - - - - - - - - - - - - - - - - - - - petiole surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - sepal auriculate - - - - - - - - - - - - - - - - - - - - - - - - corolla linear - - - - - - - - - - - - - - - - - - - - - - - - branch attenuate - - - - - - - - - - - - - - - - - - - - - - - - branch sharpness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall glandular - - - - - - - - - - - - - - - - - - - - - - - - ovary wall morphology - - - - - - - - - - - - - - - - - - - - - - - - stalk obtuse - - - - - - - - - - - - - - - - - - - - - - - - stalk 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue spherical - - - - - - - - - - - - - - - - - - - - - - - - upper glume separated from - - - - - - - - - - - - - - - - - - - - - - - - upper glume structure - - - - - - - - - - - - - - - - - - - - - - - - tubercle position - - - - - - - - - - - - - - - - - - - - - - - - bract white - - - - - - - - - - - - - - - - - - - - - - - - bracteole angular - - - - - - - - - - - - - - - - - - - - - - - - trichome increased length - - - - - - - - - - - - - - - - - - - - - - - - trichome length - - - - - - - - - - - - - - - - - - - - - - - - petal obtuse - - - - - - - - - - - - - - - - - - - - - - - - bracteole lanceolate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium hairy - - - - - - - - - - - - - - - - - - - - - - - - glume ovate - - - - - - - - - - - - - - - - - - - - - - - - glume convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract fused with - - - - - - - - - - - - - - - - - - - - - - - - bract structure - - - - - - - - - - - - - - - - - - - - - - - - stereome pink - - - - - - - - - - - - - - - - - - - - - - - - growth ring decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall ventral to - - - - - - - - - - - - - - - - - - - - - - - - petiole circular - - - - - - - - - - - - - - - - - - - - - - - - keel width - - - - - - - - - - - - - - - - - - - - - - - - awn length - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue pubescent - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue maturity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall trilobed - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein position - - - - - - - - - - - - - - - - - - - - - - - - anther hairy - - - - - - - - - - - - - - - - - - - - - - - - lower glume length - - - - - - - - - - - - - - - - - - - - - - - - filament lateral to - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein dentated - - - - - - - - - - - - - - - - - - - - - - - - corolla green - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein shape - - - - - - - - - - - - - - - - - - - - - - - - filament whorled - - - - - - - - - - - - - - - - - - - - - - - - filament spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - papilla cell truncated - - - - - - - - - - - - - - - - - - - - - - - - papilla cell shape - - - - - - - - - - - - - - - - - - - - - - - - glume glabrous - - - - - - - - - - - - - - - - - - - - - - - - glume pilosity - - - - - - - - - - - - - - - - - - - - - - - - leaf heart shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - endosperm flattened - - - - - - - - - - - - - - - - - - - - - - - - endosperm curvature - - - - - - - - - - - - - - - - - - - - - - - - flower adaxial to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall curved - - - - - - - - - - - - - - - - - - - - - - - - ovary wall curvature - - - - - - - - - - - - - - - - - - - - - - - - petiole cylindrical - - - - - - - - - - - - - - - - - - - - - - - - stigma cylindrical - - - - - - - - - - - - - - - - - - - - - - - - exocarp obtuse - - - - - - - - - - - - - - - - - - - - - - - - exocarp 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue position - - - - - - - - style male - true - - - - - - - - style phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - fruit areolate - - - - - - - - - - - - - - - - - - - - - - - - flower spatulate - - - - - - - - - - - - - - - - - - - - - - - - fruit spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - anther cuneate - - - - - - - - - - - - - - - - - - - - - - - - stem terminal - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle star shaped - - - - - - - - - - - - - - - - - - - - - - - - stalk whole - - - - - - - - - - - - - - - - - - - - - - - - stalk wholeness - - - - - - - - - - - - - - - - - - - - - - - - tepal arched - - - - - - - - - - - - - - - - - - - - - - - - tepal concavity - - - - - - - - perianth premature - true - - - - - - - - perianth onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue branched - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue branchiness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal pubescent - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal maturity - - - - - - - - - - - - - - - - - - - - - - - - pericarp increased thickness - - - - - - - - - - - - - - - - - - - - - - - - pericarp thickness - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf axil phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf axil lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaf axil position - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle drooping - - - - - - - - - - - - - - - - - - - - - - - - endocarp yellow - - - - - - - - - - - - - - - - - - - - - - - - endocarp color - - - - - - - - - - - - - - - - - - - - - - - - stalk green - - - - - - - - - - - - - - - - - - - - - - - - stalk color - - - - - - - - - - - - - - - - - - - - - - - - petiole swollen - - - - - - - - - - - - - - - - - - - - - - - - anther heart shaped - - - - - - - - - - - - - - - - - - - - - - - - anther concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - keel glabrous - - - - - - - - - - - - - - - - - - - - - - - - keel pilosity - - - - - - - - - - - - - - - - - - - - - - - - perianth glabrous - - - - - - - - - - - - - - - - - - - - - - - - perianth pilosity - - - - - - - - - - - - - - - - - - - - - - - - branch prominent - - - - - - - - - - - - - - - - - - - - - - - - fruit autogenous - - - - - - - - - - - - - - - - - - - - - - - - style bifurcated - - - - - - - - - - - - - - - - - - - - - - - - style branchiness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet lanceolate - - - - - - - - - - - - - - - - - - - - - - - - receptacle straight - - - - - - - - - - - - - - - - - - - - - - - - receptacle shape - - - - - - - - - - - - - - - - - - - - - - - - petiole hispid - - - - - - - - - - - - - - - - - - - - - - - - shoot apex pedicellate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex attachment quality - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle triangular - - - - - - - - ovule primordium hermaphrodite - true - - - - - - - - ovule primordium phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - hilum black - - - - - - - - - - - - - - - - - - - - - - - - hilum color - - - - - - - - - - - - - - - - - - - - - - - - fruit setose - - - - - - - - - - - - - - - - - - - - - - - - seed curved - - - - - - - - - - - - - - - - - - - - - - - - seed curvature - - - - - - - - - - - - - - - - - - - - - - - - lower glume back - - - - - - - - - - - - - - - - - - - - - - - - lower glume direction - - - - - - - - - - - - - - - - - - - - - - - - stalk slender - - - - - - - - - - - - - - - - - - - - - - - - calyx differentiated - - - - - - - - - - - - - - - - - - - - - - - - calyx cellular potency - - - - - - - - - - - - - - - - - - - - - - - - pericarp young - - - - - - - - - - - - - - - - - - - - - - - - pericarp age - - - - - - - - - - - - - - - - - - - - - - - - perianth linear - - - - - - - - - - - - - - - - - - - - - - - - shoot apex prominent - - - - - - - - - - - - - - - - - - - - - - - - pedicel terminal - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - keel brown - - - - - - - - - - - - - - - - - - - - - - - - - - - - terminal bud phenotype - - - - - - - - - - - - - - - - - - - - - - - - terminal bud present - - - - - - - - - - - - - - - - - - - - - - - - terminal bud amount - - - - - - - - - - - - - - - - - - - - - - - - petiole star shaped - - - - - - - - - - - - - - - - - - - - - - - - testa prominent - - - - - - - - - - - - - - - - - - - - - - - - bract attenuate - - - - - - - - - - - - - - - - - - - - - - - - root tip truncated - - - - - - - - - - - - - - - - - - - - - - - - perianth increased thickness - - - - - - - - - - - - - - - - - - - - - - - - perianth thickness - - - - - - - - - - - - - - - - - - - - - - - - pappus flat - - - - - - - - - - - - - - - - - - - - - - - - pappus curvature - - - - - - - - - - - - - - - - - - - - - - - - corolla autogenous - - - - - - - - - - - - - - - - - - - - - - - - corolla structure - - - - - - - - - - - - - - - - - - - - - - - - plant embryo fleshy - - - - - - - - - - - - - - - - - - - - - - - - plant embryo composition - - - - - - - - - - - - - - - - - - - - - - - - involucre linear - - - - - - - - - - - - - - - - - - - - - - - - involucre shape - - - - - - - - - - - - - - - - - - - - - - - - stalk cylindrical - - - - - - - - - - - - - - - - - - - - - - - - stigma lobed - - - - - - - - - - - - - - - - - - - - - - - - ligule tubular - - - - - - - - - - - - - - - - - - - - - - - - ligule convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - root cylindrical - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system circular - - - - - - - - - - - - - - - - - - - - - - - - valve flattened - - - - - - - - - - - - - - - - - - - - - - - - valve curvature - - - - - - - - - - - - - - - - - - - - - - - - branch brittle - - - - - - - - - - - - - - - - - - - - - - - - branch structure - - - - - - - - - - - - - - - - - - - - - - - - filament cylindrical - - - - - - - - - - - - - - - - - - - - - - - - trichome fleshy - - - - - - - - - - - - - - - - - - - - - - - - trichome composition - - - - - - - - - - - - - - - - - - - - - - - - anther theca hairy - - - - - - - - - - - - - - - - - - - - - - - - anther theca pilosity - - - - - - - - - - - - - - - - - - - - - - - - growth ring pubescent - - - - - - - - - - - - - - - - - - - - - - - - growth ring maturity - - - - - - - - - - - - - - - - - - - - - - - - hilum green - - - - - - - - - - - - - - - - - - - - - - - - leaf ventral to - - - - - - - - - - - - - - - - - - - - - - - - bracteole transparent - - - - - - - - - - - - - - - - - - - - - - - - bracteole opacity - - - - - - - - - - - - - - - - - - - - - - - - stem inserted into - - - - - - - - - - - - - - - - - - - - - - - - scutellar node flattened - - - - - - - - - - - - - - - - - - - - - - - - scutellar node curvature - - - - - - - - - - - - - - - - - - - - - - - - seed attenuate - - - - - - - - - - - - - - - - - - - - - - - - seed sharpness - - - - - - - - - - - - - - - - - - - - - - - - rhizome purple - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle branched - - - - - - - - - - - - - - - - - - - - - - - - lemma obtuse - - - - - - - - - - - - - - - - - - - - - - - - rhizome cylindrical - - - - - - - - - - - - - - - - - - - - - - - - flower condensed - - - - - - - - - - - - - - - - - - - - - - - - petal absent - - - - - - - - - - - - - - - - - - - - - - - - petal number - petal amount - - - - - - - - bark up - true - - - - - - - - - - - - - - - - - - - - - - - - bark direction - true - - - - - - - - - - - - - - - - - - - - - - - - perianth funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system erect - - - - - - - - - - - - - - - - - - - - - - - - petiolule increased length - - - - - - - - - - - - - - - - - - - - - - - - petiolule length - - - - - - - - - - - - - - - - - - - - - - - - sepal circular - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system scalloped - - - - - - - - - - - - - - - - - - - - - - - - aril attached to - - - - - - - - - - - - - - - - - - - - - - - - aril attachment quality - - - - - - - - - - - - - - - - - - - - - - - - petiolule oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - petiolule shape - - - - - - - - - - - - - - - - - - - - - - - - testa purple - - - - - - - - - - - - - - - - - - - - - - - - testa color - - - - - - - - - - - - - - - - - - - - - - - - leaf parallel to - - - - - - - - costa acute - true - - - - - - - - costa duration - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - seed coat phenotype - - - - - - - - - - - - - - - - - - - - - - - - seed coat smooth - - - - - - - - - - - - - - - - - - - - - - - - seed coat texture - - - - - - - - - - - - - - - - - - - - - - - - areole bud increased length - - - - - - - - - - - - - - - - - - - - - - - - areole bud length - - - - - - - - - - - - - - - - - - - - - - - - style furrowed - - - - - - - - - - - - - - - - - - - - - - - - epidermis striated - - - - - - - - - - - - - - - - - - - - - - - - bract terminal - - - - - - - - - - - - - - - - - - - - - - - - pappus decreased amount - - - - - - - - - - - - - - - - - - - - - - - - branch glandular - - - - - - - - - - - - - - - - - - - - - - - - branch morphology - - - - - - - - - - - - - - - - - - - - - - - - epicalyx linear - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel cylindrical - - - - - - - - - - - - - - - - - - - - - - - - scutellar node terminal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence decussate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein position - - - - - - - - - - - - - - - - - - - - - - - - fruit brown green - - - - - - - - - - - - - - - - - - - - - - - - staminode opposite - - - - - - - - - - - - - - - - - - - - - - - - staminode position - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure inserted into - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal erect - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal position - - - - - - - - - - - - - - - - - - - - - - - - lamina broad - - - - - - - - - - - - - - - - - - - - - - - - apical hook erect - - - - - - - - - - - - - - - - - - - - - - - - apical hook position - - - - - - - - - - - - - - - - - - - - - - - - stalk increased length - - - - - - - - - - - - - - - - - - - - - - - - stalk length - - - - - - - - - - - - - - - - - - - - - - - - rhizome dilated - - - - - - - - - - - - - - - - - - - - - - - - rhizome size - - - - - - - - - - - - - - - - - - - - - - - - ligule dentated - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet warty - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet texture - - - - - - - - - - - - - - - - - - - - - - - - bud right - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stamen decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stamen thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex spatulate - - - - - - - - - - - - - - - - - - - - - - - - lenticel striated - - - - - - - - - - - - - - - - - - - - - - - - lenticel shape - - - - - - - - - - - - - - - - - - - - - - - - perianth blunt - - - - - - - - - - - - - - - - - - - - - - - - perianth sharpness - - - - - - - - - - - - - - - - - - - - - - - - axil subulate - - - - - - - - - - - - - - - - - - - - - - - - axil shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle maturity - - - - - - - - - - - - - - - - - - - - - - - - pedicel decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - pedicel water composition - - - - - - - - fruit acute - true - - - - - - - - fruit duration - true - - - - - - - - - - - - - - - - - - - - - - - - cotyledon oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon shape - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system branched - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system branchiness - - - - - - - - - - - - - - - - - - - - - - - - lamina fleshy - - - - - - - - - - - - - - - - - - - - - - - - lamina composition - - - - - - - - - - - - - - - - - - - - - - - - seed brown - - - - - - - - - - - - - - - - - - - - - - - - keel grey - - - - - - - - - - - - - - - - - - - - - - - - rhizome white - - - - - - - - - - - - - - - - - - - - - - - - stereome opaque - - - - - - - - - - - - - - - - - - - - - - - - stereome opacity - - - - - - - - - - - - - - - - - - - - - - - - endocarp increased length - - - - - - - - - - - - - - - - - - - - - - - - endocarp length - - - - - - - - - - - - - - - - - - - - - - - - style spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle dorsal to - - - - - - - - - - - - - - - - - - - - - - - - flower oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - bark erect - - - - - - - - - - - - - - - - - - - - - - - - bark position - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet involute - - - - - - - - - - - - - - - - - - - - - - - - corolla increased length - - - - - - - - - - - - - - - - - - - - - - - - tepal glabrous - - - - - - - - - - - - - - - - - - - - - - - - tepal pilosity - - - - - - - - - - - - - - - - - - - - - - - - bud erect - - - - - - - - - - - - - - - - - - - - - - - - leaf increased thickness - - - - - - - - inflorescence male - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle drooping - - - - - - - - - - - - - - - - - - - - - - - - tepal obovate - - - - - - - - - - - - - - - - - - - - - - - - central zone raised - - - - - - - - - - - - - - - - - - - - - - - - central zone shape - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member divergent from - - - - - - - - - - - - - - - - - - - - - - - - stigma wrinkled - - - - - - - - - - - - - - - - - - - - - - - - stem young - - - - - - - - - - - - - - - - - - - - - - - - stem age - - - - - - - - - - - - - - - - - - - - - - - - pericarp hard - - - - - - - - - - - - - - - - - - - - - - - - pericarp hardness - - - - - - - - - - - - - - - - - - - - - - - - root slit-like - - - - - - - - - - - - - - - - - - - - - - - - stigma blunt - - - - - - - - - - - - - - - - - - - - - - - - stigma sharpness - - - - - - - - - - - - - - - - - - - - - - - - - - - - plumule phenotype - - - - - - - - - - - - - - - - - - - - - - - - plumule increased thickness - - - - - - - - - - - - - - - - - - - - - - - - plumule thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit flattened - - - - - - - - - - - - - - - - - - - - - - - - fruit curvature - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure truncated - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure shape - - - - - - - - - - - - - - - - - - - - - - - - stigma hairy - - - - - - - - - - - - - - - - - - - - - - - - style increased length - - - - - - - - - - - - - - - - - - - - - - - - style length - - - - - - - - - - - - - - - - - - - - - - - - tubercle area - - - - - - - - - - - - - - - - - - - - - - - - corolla whole - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus spherical - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem absent - - - - - - - - - - - - - - - - - - - - - - - - endocarp smooth - - - - - - - - - - - - - - - - - - - - - - - - peristome conspicuous - - - - - - - - - - - - - - - - - - - - - - - - stamen cuneate - - - - - - - - - - - - - - - - - - - - - - - - stamen 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - scutellar node opposite - - - - - - - - - - - - - - - - - - - - - - - - ovary wall conical - - - - - - - - - - - - - - - - - - - - - - - - petal glandular - - - - - - - - - - - - - - - - - - - - - - - - petal morphology - - - - - - - - - - - - - - - - - - - - - - - - rhizome decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - rhizome thickness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle obovate - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel lobed - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril maturity - - - - - - - - - - - - - - - - - - - - - - - - papilla cell oblong - - - - - - - - - - - - - - - - - - - - - - - - papilla cell 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - style oblique to - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence obovate - - - - - - - - - - - - - - - - - - - - - - - - root tip glabrous - - - - - - - - - - - - - - - - - - - - - - - - root tip pilosity - - - - - - - - shoot system premature - true - - - - - - - - shoot system onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - lamina straight - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle punctiform - - - - - - - - - - - - - - - - - - - - - - - - style tomentose - - - - - - - - - - - - - - - - - - - - - - - - fruit terminal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence coiled - - - - - - - - - - - - - - - - - - - - - - - - inflorescence coiling - - - - - - - - - - - - - - - - - - - - - - - - receptacle flat - - - - - - - - - - - - - - - - - - - - - - - - receptacle curvature - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem hispid - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - gynophore phenotype - - - - - - - - gynophore up - true - - - - - - - - - - - - - - - - - - - - - - - - gynophore direction - - - - - - - - tuber up - true - - - - - - - - - - - - - - - - - - - - - - - - tuber direction - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle terminal - - - - - - - - - - - - - - - - - - - - - - - - awn lanceolate - - - - - - - - - - - - - - - - - - - - - - - - awn sharpness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall condensed - - - - - - - - - - - - - - - - - - - - - - - - stigma linear - - - - - - - - - - - - - - - - - - - - - - - - inflorescence glandular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence morphology - - - - - - - - - - - - - - - - - - - - - - - - peristome green - - - - - - - - - - - - - - - - - - - - - - - - flower heart shaped - - - - - - - - - - - - - - - - - - - - - - - - sepal abaxial to - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet pubescent - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet maturity - - - - - - - - - - - - - - - - - - - - - - - - tepal oblong - - - - - - - - - - - - - - - - - - - - - - - - calyx surrounding - - - - - - - - - - - - - - - - - - - - - - - - seed trichome circular - - - - - - - - - - - - - - - - - - - - - - - - testa fleshy - - - - - - - - - - - - - - - - - - - - - - - - testa composition - - - - - - - - - - - - - - - - - - - - - - - - root tip purple - - - - - - - - - - - - - - - - - - - - - - - - root tip color - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus triangular - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel tapered - - - - - - - - - - - - - - - - - - - - - - - - petiole pinnate - - - - - - - - - - - - - - - - - - - - - - - - leaf subulate - - - - - - - - - - - - - - - - - - - - - - - - stem increased size - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem hairy - - - - - - - - - - - - - - - - - - - - - - - - fruit diameter - - - - - - - - - - - - - - - - - - - - - - - - stamen dorsal to - - - - - - - - - - - - - - - - - - - - - - - - anther pedicellate - - - - - - - - - - - - - - - - - - - - - - - - anther attachment quality - - - - - - - - - - - - - - - - - - - - - - - - seed glistening - - - - - - - - - - - - - - - - - - - - - - - - seed reflectivity - - - - - - - - - - - - - - - - - - - - - - - - bud bilobed - - - - - - - - - - - - - - - - - - - - - - - - bark white - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system notched - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system concavity - - - - - - - - - - - - - - - - - - - - - - - - keel bent - - - - - - - - - - - - - - - - - - - - - - - - keel shape - - - - - - - - - - - - - - - - - - - - - - - - sheath cell coiled - - - - - - - - - - - - - - - - - - - - - - - - sheath cell coiling - - - - - - - - - - - - - - - - - - - - - - - - flower simple - - - - - - - - - - - - - - - - - - - - - - - - flower complexity - - - - - - - - - - - - - - - - - - - - - - - - leaf hispid - - - - - - - - - - - - - - - - - - - - - - - - tepal exserted - - - - - - - - - - - - - - - - - - - - - - - - tepal position - - - - - - - - - - - - - - - - - - - - - - - - lamina far from - - - - - - - - - - - - - - - - - - - - - - - - receptacle attached to - - - - - - - - - - - - - - - - - - - - - - - - receptacle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bracteole terminal - - - - - - - - - - - - - - - - - - - - - - - - seed ventral to - - - - - - - - - - - - - - - - - - - - - - - - seed position - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - - - - - radicle phenotype - - - - - - - - - - - - - - - - - - - - - - - - radicle basal to - - - - - - - - - - - - - - - - - - - - - - - - radicle position - - - - - - - - - - - - - - - - - - - - - - - - inflorescence robust - - - - - - - - - - - - - - - - - - - - - - - - oil gland increased thickness - - - - - - - - - - - - - - - - - - - - - - - - oil gland thickness - - - - - - - - - - - - - - - - - - - - - - - - whole plant overlapping - - - - - - - - - - - - - - - - - - - - - - - - whole plant structure - - - - - - - - - - - - - - - - - - - - - - - - bark orange - - - - - - - - - - - - - - - - - - - - - - - - leaflet broad - - - - - - - - - - - - - - - - - - - - - - - - calyx absent - - - - - - - - - - - - - - - - - - - - - - - - calyx amount - - - - - - - - - - - - - - - - - - - - - - - - filament hispid - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein erect - - - - - - - - - - - - - - - - - - - - - - - - shoot apex condensed - - - - - - - - - - - - - - - - - - - - - - - - shoot apex grooved - - - - - - - - - - - - - - - - - - - - - - - - bud obtuse - - - - - - - - - - - - - - - - - - - - - - - - shoot apex angular - - - - - - - - - - - - - - - - - - - - - - - - trichome elliptic - - - - - - - - - - - - - - - - - - - - - - - - perianth erect - - - - - - - - - - - - - - - - - - - - - - - - exocarp brittle - - - - - - - - - - - - - - - - - - - - - - - - exocarp structure - - - - - - - - - - - - - - - - - - - - - - - - anther theca increased length - - - - - - - - - - - - - - - - - - - - - - - - anther theca length - - - - - - - - - - - - - - - - - - - - - - - - branch spherical - - - - - - - - - - - - - - - - - - - - - - - - lamina young - - - - - - - - - - - - - - - - - - - - - - - - lamina age - - - - - - - - - - - - - - - - - - - - - - - - apical hook pubescent - - - - - - - - - - - - - - - - - - - - - - - - apical hook maturity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle reniform - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract truncated - - - - - - - - - - - - - - - - - - - - - - - - bracteole slender - - - - - - - - - - - - - - - - - - - - - - - - seed condensed - - - - - - - - - - - - - - - - - - - - - - - - seed structure - - - - - - - - - - - - - - - - - - - - - - - - radicle dense - - - - - - - - - - - - - - - - - - - - - - - - radicle mass density - - - - - - - - - - - - - - - - - - - - - - - - corolla basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system striated - - - - - - - - - - - - - - - - - - - - - - - - calyx subulate - - - - - - - - - - - - - - - - - - - - - - - - filament obovate - - - - - - - - stem arrested - true - - - - - - - - stem offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - stalk quadrangular - - - - - - - - - - - - - - - - - - - - - - - - lamina attenuate - - - - - - - - - - - - - - - - - - - - - - - - bud dorsal to - - - - - - - - - - - - - - - - - - - - - - - - style dorsal to - - - - - - - - - - - - - - - - - - - - - - - - receptacle conspicuous - - - - - - - - - - - - - - - - - - - - - - - - seed trichome cylindrical - - - - - - - - - - - - - - - - - - - - - - - - seed trichome convex 3-D shape - - - - - - - - stipule premature - true - - - - - - - - stipule onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - hilum mottled - - - - - - - - - - - - - - - - - - - - - - - - hilum color pattern - - - - - - - - - - - - - - - - - - - - - - - - style linear - - - - - - - - - - - - - - - - - - - - - - - - shoot apex fleshy - - - - - - - - - - - - - - - - - - - - - - - - shoot apex composition - - - - - - - - - - - - - - - - - - - - - - - - calyx tomentose - - - - - - - - - - - - - - - - - - - - - - - - corolla immature - - - - - - - - - - - - - - - - - - - - - - - - corolla triangular - - - - - - - - - - - - - - - - - - - - - - - - anther theca linear - - - - - - - - - - - - - - - - - - - - - - - - lamina hairy - - - - - - - - - - - - - - - - - - - - - - - - petiole red - - - - - - - - - - - - - - - - - - - - - - - - petiole color - - - - - - - - - - - - - - - - - - - - - - - - style obovate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall flattened - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle simple - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle complexity - - - - - - - - - - - - - - - - - - - - - - - - stem triangular - - - - - - - - - - - - - - - - - - - - - - - - papilla cell conical - - - - - - - - - - - - - - - - - - - - - - - - papilla cell convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - thorn branched - - - - - - - - - - - - - - - - - - - - - - - - thorn branchiness - - - - - - - - - - - - - - - - - - - - - - - - growth ring swollen - - - - - - - - - - - - - - - - - - - - - - - - growth ring structure - - - - - - - - - - - - - - - - - - - - - - - - androecium fused with - - - - - - - - - - - - - - - - - - - - - - - - androecium structure - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system areolate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - bract decussate - - - - - - - - - - - - - - - - - - - - - - - - bract spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - upper glume spherical - - - - - - - - - - - - - - - - - - - - - - - - style protruding - - - - - - - - - - - - - - - - - - - - - - - - fruit open - - - - - - - - - - - - - - - - - - - - - - - - fruit closure - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal thickness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx grey - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue increased thickness - - - - - - - - - - - - - - - - - - - - - - - - rhizome dense - - - - - - - - - - - - - - - - - - - - - - - - rhizome mass density - - - - - - - - - - - - - - - - - - - - - - - - flower elliptic - - - - - - - - - - - - - - - - - - - - - - - - apical hook triangular - - - - - - - - - - - - - - - - - - - - - - - - apical hook 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - axil obtuse - - - - - - - - - - - - - - - - - - - - - - - - axil 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - hilum linear - - - - - - - - - - - - - - - - - - - - - - - - hilum shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf lateral to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex star shaped - - - - - - - - - - - - - - - - - - - - - - - - growth ring cylindrical - - - - - - - - - - - - - - - - - - - - - - - - growth ring convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue hairy - - - - - - - - - - - - - - - - - - - - - - - - inflorescence furrowed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence texture - - - - - - - - - - - - - - - - - - - - - - - - petal inflexible - - - - - - - - - - - - - - - - - - - - - - - - petal flexibility - - - - - - - - - - - - - - - - - - - - - - - - petiole old - - - - - - - - - - - - - - - - - - - - - - - - petiole age - - - - - - - - - - - - - - - - - - - - - - - - spikelet condensed - - - - - - - - - - - - - - - - - - - - - - - - spikelet structure - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein thickness - - - - - - - - - - - - - - - - - - - - - - - - perianth constricted - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence terminal - - - - - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis phenotype - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis branched - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis branchiness - - - - - - - - - - - - - - - - - - - - - - - - tubercle linear - - - - - - - - - - - - - - - - - - - - - - - - tubercle shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex simple - - - - - - - - - - - - - - - - - - - - - - - - shoot apex complexity - - - - - - - - - - - - - - - - - - - - - - - - carpel attached to - - - - - - - - - - - - - - - - - - - - - - - - carpel attachment quality - - - - - - - - - - - - - - - - - - - - - - - - keel surrounding - - - - - - - - - - - - - - - - - - - - - - - - costa adjacent to - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle open - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle closure - - - - - - - - - - - - - - - - - - - - - - - - raphe prominent - - - - - - - - - - - - - - - - - - - - - - - - raphe position - - - - - - - - - - - - - - - - - - - - - - - - petiole fleshy - - - - - - - - - - - - - - - - - - - - - - - - petiole composition - - - - - - - - - - - - - - - - - - - - - - - - stem green - - - - - - - - - - - - - - - - - - - - - - - - petiole slender - - - - - - - - - - - - - - - - - - - - - - - - stem inverted - - - - - - - - - - - - - - - - - - - - - - - - perianth punctiform - - - - - - - - - - - - - - - - - - - - - - - - stamen autogenous - - - - - - - - - - - - - - - - - - - - - - - - stamen structure - - - - - - - - - - - - - - - - - - - - - - - - pedicel mixed - - - - - - - - - - - - - - - - - - - - - - - - pedicel composition - - - - - - - - - - - - - - - - - - - - - - - - - - - - hydathode phenotype - - - - - - - - - - - - - - - - - - - - - - - - hydathode erect - - - - - - - - - - - - - - - - - - - - - - - - hydathode position - - - - - - - - - - - - - - - - - - - - - - - - style wrinkled - - - - - - - - - - - - - - - - - - - - - - - - fruit firm - - - - - - - - - - - - - - - - - - - - - - - - fruit hardness - - - - - - - - - - - - - - - - - - - - - - - - fruit wrinkled - - - - - - - - - - - - - - - - - - - - - - - - spikelet linear - - - - - - - - - - - - - - - - - - - - - - - - spikelet shape - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem truncated - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem shape - - - - - - - - - - - - - - - - - - - - - - - - sapwood red - - - - - - - - - - - - - - - - - - - - - - - - sapwood brown - - - - - - - - - - - - - - - - - - - - - - - - anther terminal - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein heart shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower exserted - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root erect - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root position - - - - - - - - - - - - - - - - - - - - - - - - bud oblong - - - - - - - - - - - - - - - - - - - - - - - - - - - - heartwood phenotype - - - - - - - - - - - - - - - - - - - - - - - - heartwood lobed - - - - - - - - - - - - - - - - - - - - - - - - heartwood shape - - - - - - - - - - - - - - - - - - - - - - - - mesocarp increased thickness - - - - - - - - - - - - - - - - - - - - - - - - mesocarp thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root branched - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root branchiness - - - - - - - - - - - - - - - - - - - - - - - - valve decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - valve thickness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet leaf-like - - - - - - - - - - - - - - - - - - - - - - - - ray system spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - ray system convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - glume pubescent - - - - - - - - - - - - - - - - - - - - - - - - glume maturity - - - - - - - - - - - - - - - - - - - - - - - - corolla oblong - - - - - - - - - - - - - - - - - - - - - - - - seed hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system heart shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract decreased amount - - - - - - - - - - - - - - - - - - - - - - - - bract amount - - - - - - - - - - - - - - - - - - - - - - - - - - - - infructescence phenotype - - - - - - - - - - - - - - - - - - - - - - - - infructescence brown - - - - - - - - - - - - - - - - - - - - - - - - infructescence color - - - - - - - - - - - - - - - - - - - - - - - - flower raised - - - - - - - - - - - - - - - - - - - - - - - - pedicel simple - - - - - - - - - - - - - - - - - - - - - - - - pedicel complexity - - - - - - - - - - - - - - - - - - - - - - - - stamen arched - - - - - - - - - - - - - - - - - - - - - - - - stamen concavity - - - - - - - - - - - - - - - - - - - - - - - - petiole oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - perianth cleft - - - - - - - - - - - - - - - - - - - - - - - - stalk erect - - - - - - - - - - - - - - - - - - - - - - - - stalk position - - - - - - - - - - - - - - - - - - - - - - - - spikelet pedicellate - - - - - - - - - - - - - - - - - - - - - - - - spikelet attachment quality - - - - - - - - calyx up - true - - - - - - - - - - - - - - - - - - - - - - - - calyx direction - - - - - - - - - - - - - - - - - - - - - - - - root tip increased length - - - - - - - - - - - - - - - - - - - - - - - - root tip length - - - - - - - - - - - - - - - - - - - - - - - - scutellar node striated - - - - - - - - - - - - - - - - - - - - - - - - scutellar node shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle hairy - - - - - - - - - - - - - - - - - - - - - - - - awn oblong - - - - - - - - - - - - - - - - - - - - - - - - petiolule cylindrical - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet erect - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet alternate placement - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet spatial pattern - - - - - - - - anther acute - - true - - - - - - - - anther duration - - true - - - - - - - - - - - - - - - - - - - - - - - - flower funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - tepal elliptic - - - - - - - - - - - - - - - - - - - - - - - - central zone drooping - - - - - - - - - - - - - - - - - - - - - - - - apical hook branched - - - - - - - - - - - - - - - - - - - - - - - - apical hook branchiness - - - - - - - - - - - - - - - - - - - - - - - - peduncle retrorse - - - - - - - - - - - - - - - - - - - - - - - - peduncle curvature - - - - - - - - - - - - - - - - - - - - - - - - bract oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - stem procumbent - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal striated - - - - - - - - - - - - - - - - - - - - - - - - seed increased thickness - - - - - - - - - - - - - - - - - - - - - - - - canal autogenous - - - - - - - - - - - - - - - - - - - - - - - - canal structure - - - - - - - - - - - - - - - - - - - - - - - - apical hook obtuse - - - - - - - - - - - - - - - - - - - - - - - - inflorescence loose - - - - - - - - - - - - - - - - - - - - - - - - leaf pedicellate - - - - - - - - - - - - - - - - - - - - - - - - leaf attachment quality - - - - - - - - - - - - - - - - - - - - - - - - peduncle loose - - - - - - - - - - - - - - - - - - - - - - - - peduncle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein increased length - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein length - - - - - - - - - - - - - - - - - - - - - - - - stigma subulate - - - - - - - - - - - - - - - - - - - - - - - - stipule glabrous - - - - - - - - - - - - - - - - - - - - - - - - stipule pilosity - - - - - - - - - - - - - - - - - - - - - - - - petiole margin decurrent - - - - - - - - - - - - - - - - - - - - - - - - petiole margin shape - - - - - - - - - - - - - - - - - - - - - - - - lamina drooping - - - - - - - - - - - - - - - - - - - - - - - - - - - - pollen phenotype - - - - - - - - - - - - - - - - - - - - - - - - pollen yellow - - - - - - - - - - - - - - - - - - - - - - - - pollen color - - - - - - - - - - - - - - - - - - - - - - - - petal punctate - - - - - - - - - - - - - - - - - - - - - - - - petal spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - gynophore cylindrical - - - - - - - - - - - - - - - - - - - - - - - - gynophore convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle increased length - - - - - - - - - - - - - - - - - - - - - - - - peduncle length - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril pinnate - - - - - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract phenotype - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract terminal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract position - - - - - - - - - - - - - - - - - - - - - - - - ovary wall angular - - - - - - - - - - - - - - - - - - - - - - - - leaf depth - - - - - - - - - - - - - - - - - - - - - - - - connective black - - - - - - - - - - - - - - - - - - - - - - - - connective color - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet smooth - - - - - - - - - - - - - - - - - - - - - - - - inflorescence slender - - - - - - - - - - - - - - - - - - - - - - - - petal smooth - - - - - - - - - - - - - - - - - - - - - - - - petal texture - - - - - - - - - - - - - - - - - - - - - - - - bracteole orbicular - - - - - - - - - - - - - - - - - - - - - - - - anther theca erect - - - - - - - - - - - - - - - - - - - - - - - - staminode bilobed - - - - - - - - - - - - - - - - - - - - - - - - staminode shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet sterile - - - - - - - - - - - - - - - - - - - - - - - - leaflet fertility - - - - - - - - - - - - - - - - - - - - - - - - sepal fleshy - - - - - - - - - - - - - - - - - - - - - - - - sepal composition - - - - - - - - - - - - - - - - - - - - - - - - stalk glandular - - - - - - - - - - - - - - - - - - - - - - - - stalk morphology - - - - - - - - - - - - - - - - - - - - - - - - inflorescence funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - pedicel whorled - - - - - - - - - - - - - - - - - - - - - - - - pedicel spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - petiolule acuminate - - - - - - - - - - - - - - - - - - - - - - - - petiolule sharpness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal acuminate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem increased thickness - - - - - - - - - - - - - - - - - - - - - - - - areole bud spherical - - - - - - - - - - - - - - - - - - - - - - - - areole bud convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - fruit volume - - - - - - - - - - - - - - - - - - - - - - - - petiolule lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaflet cuneate - - - - - - - - - - - - - - - - - - - - - - - - pedicel curved - - - - - - - - - - - - - - - - - - - - - - - - leaf dark red - - - - - - - - - - - - - - - - - - - - - - - - seed constricted - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member auriculate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system punctate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence angular - - - - - - - - - - - - - - - - - - - - - - - - peduncle angular - - - - - - - - - - - - - - - - - - - - - - - - calyx concave - - - - - - - - - - - - - - - - - - - - - - - - shoot apex pointed - - - - - - - - - - - - - - - - - - - - - - - - rhizome ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf brown - - - - - - - - - - - - - - - - - - - - - - - - flower cylindrical - - - - - - - - - - - - - - - - - - - - - - - - corolla increased thickness - - - - - - - - - - - - - - - - - - - - - - - - corolla thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit glandular - - - - - - - - - - - - - - - - - - - - - - - - fruit morphology - - - - - - - - - - - - - - - - - - - - - - - - cotyledon decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - cotyledon thickness - - - - - - - - - - - - - - - - - - - - - - - - branch hispid - - - - - - - - - - - - - - - - - - - - - - - - caruncle orange - - - - - - - - - - - - - - - - - - - - - - - - caruncle color - - - - - - - - - - - - - - - - - - - - - - - - fruit edible - - - - - - - - - - - - - - - - - - - - - - - - fruit edibility - - - - - - - - - - - - - - - - - - - - - - - - pappus dentated - - - - - - - - - - - - - - - - - - - - - - - - infructescence flattened - - - - - - - - - - - - - - - - - - - - - - - - infructescence curvature - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium flattened - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium curvature - - - - - - - - - - - - - - - - - - - - - - - - petiole grey - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium thickness - - - - - - - - - - - - - - - - - - - - - - - - disk flower swollen - - - - - - - - - - - - - - - - - - - - - - - - - - - - pseudostem phenotype - - - - - - - - - - - - - - - - - - - - - - - - pseudostem overlapping - - - - - - - - - - - - - - - - - - - - - - - - pseudostem structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath closed - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath closure - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet glandular - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet morphology - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium circular - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue raised - - - - - - - - - - - - - - - - - - - - - - - - petiole striated - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium split - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium shape - - - - - - - - - - - - - - - - - - - - - - - - testa cylindrical - - - - - - - - - - - - - - - - - - - - - - - - ovary wall circular - - - - - - - - - - - - - - - - - - - - - - - - petiole grooved - - - - - - - - - - - - - - - - - - - - - - - - petiole subcircular - - - - - - - - - - - - - - - - - - - - - - - - corolla attached to - - - - - - - - - - - - - - - - - - - - - - - - corolla attachment quality - - - - - - - - - - - - - - - - - - - - - - - - sheath cell erect - - - - - - - - - - - - - - - - - - - - - - - - sheath cell position - - - - - - - - - - - - - - - - - - - - - - - - flower diameter - - - - - - - - - - - - - - - - - - - - - - - - filament increased thickness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium elliptic - - - - - - - - - - - - - - - - - - - - - - - - flower broken - - - - - - - - - - - - - - - - - - - - - - - - flower wholeness - - - - - - - - - - - - - - - - - - - - - - - - glume acuminate - - - - - - - - - - - - - - - - - - - - - - - - root tip oblong - - - - - - - - - - - - - - - - - - - - - - - - crown root elliptic - - - - - - - - - - - - - - - - - - - - - - - - crown root 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stigma truncated - - - - - - - - petiole subacute - true - - - - - - - - - - - - - - - - - - - - - - - - carpel star shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma oblique to - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence lanceolate - - - - - - - - - - - - - - - - - - - - - - - - lenticel broken - - - - - - - - - - - - - - - - - - - - - - - - lenticel wholeness - - - - - - - - leaf lamina up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina direction - - - - - - - - - - - - - - - - - - - - - - - - petiole glistening - - - - - - - - - - - - - - - - - - - - - - - - petiole reflectivity - - - - - - - - - - - - - - - - - - - - - - - - - - - - stipel phenotype - - - - - - - - - - - - - - - - - - - - - - - - stipel glabrous - - - - - - - - - - - - - - - - - - - - - - - - stipel pilosity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex subulate - - - - - - - - - - - - - - - - - - - - - - - - lamina terminal - - - - - - - - - - - - - - - - - - - - - - - - axil young - - - - - - - - - - - - - - - - - - - - - - - - axil age - - - - - - - - - - - - - - - - - - - - - - - - leaflet raised - - - - - - - - - - - - - - - - - - - - - - - - sepal increased length - - - - - - - - - - - - - - - - - - - - - - - - sepal length - - - - - - - - - - - - - - - - - - - - - - - - locule slender - - - - - - - - - - - - - - - - - - - - - - - - locule shape - - - - - - - - pistillode female - true - - - - - - - - pistillode phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel erect - - - - - - - - - - - - - - - - - - - - - - - - exocarp pubescent - - - - - - - - - - - - - - - - - - - - - - - - exocarp maturity - - - - - - - - - - - - - - - - - - - - - - - - petiole ventral to - - - - - - - - - - - - - - - - - - - - - - - - epidermis increased length - - - - - - - - - - - - - - - - - - - - - - - - epidermis length - - - - - - - - - - - - - - - - - - - - - - - - petal anterior to - - - - - - - - - - - - - - - - - - - - - - - - stigma yellow - - - - - - - - - - - - - - - - - - - - - - - - stigma color - - - - - - - - - - - - - - - - - - - - - - - - bark pink - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium pubescent - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium maturity - - - - - - - - - - - - - - - - - - - - - - - - growth ring simple - - - - - - - - - - - - - - - - - - - - - - - - growth ring complexity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence cauline to - - - - - - - - - - - - - - - - - - - - - - - - pericarp dense - - - - - - - - - - - - - - - - - - - - - - - - pericarp mass density - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex smooth - - - - - - - - - - - - - - - - - - - - - - - - scutellar node spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - scutellar node convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel present - - - - - - - - - - - - - - - - - - - - - - - - leaf curved - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium drooping - - - - - - - - - - - - - - - - - - - - - - - - androecium protruding - - - - - - - - - - - - - - - - - - - - - - - - androecium position - - - - - - - - - - - - - - - - - - - - - - - - scutellar node angular - - - - - - - - - - - - - - - - - - - - - - - - whole plant cylindrical - - - - - - - - - - - - - - - - - - - - - - - - whole plant convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lenticel elliptic - - - - - - - - - - - - - - - - - - - - - - - - lenticel 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - connective decurrent - - - - - - - - - - - - - - - - - - - - - - - - lower glume lanceolate - - - - - - - - - - - - - - - - - - - - - - - - lower glume sharpness - - - - - - - - - - - - - - - - - - - - - - - - valve angular - - - - - - - - - - - - - - - - - - - - - - - - stigma blue - - - - - - - - - - - - - - - - - - - - - - - - inflorescence drooping - - - - - - - - - - - - - - - - - - - - - - - - filament obtuse - - - - - - - - - - - - - - - - - - - - - - - - filament 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - papilla cell purple - - - - - - - - - - - - - - - - - - - - - - - - papilla cell color - - - - - - - - - - - - - - - - - - - - - - - - pedicel subulate - - - - - - - - - - - - - - - - - - - - - - - - papilla cell trilobed - - - - - - - - - - - - - - - - - - - - - - - - peduncle adaxial to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall furrowed - - - - - - - - - - - - - - - - - - - - - - - - ovary wall texture - - - - - - - - - - - - - - - - - - - - - - - - lamina dark brown - - - - - - - - - - - - - - - - - - - - - - - - scutellar node increased thickness - - - - - - - - - - - - - - - - - - - - - - - - scutellar node thickness - - - - - - - - - - - - - - - - - - - - - - - - connective straight - - - - - - - - - - - - - - - - - - - - - - - - flower cupulate - - - - - - - - - - - - - - - - - - - - - - - - pedicel oblong - - - - - - - - - - - - - - - - - - - - - - - - epidermis triangular - - - - - - - - - - - - - - - - - - - - - - - - epidermis 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - caruncle vertical to - - - - - - - - - - - - - - - - - - - - - - - - caruncle position - - - - - - - - - - - - - - - - - - - - - - - - endosperm fleshy - - - - - - - - - - - - - - - - - - - - - - - - endosperm composition - - - - - - - - - - - - - - - - - - - - - - - - plant cell erect - - - - - - - - - - - - - - - - - - - - - - - - plant cell position - - - - - - - - - - - - - - - - - - - - - - - - epidermis retrorse - - - - - - - - - - - - - - - - - - - - - - - - epidermis curvature - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root glandular - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root morphology - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue terminal - - - - - - - - - - - - - - - - - - - - - - - - anther simple - - - - - - - - - - - - - - - - - - - - - - - - anther complexity - - - - - - - - - - - - - - - - - - - - - - - - apical hook inserted into - - - - - - - - - - - - - - - - - - - - - - - - epidermis tomentose - - - - - - - - - - - - - - - - - - - - - - - - whole plant whole - - - - - - - - - - - - - - - - - - - - - - - - whole plant wholeness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence lateral to - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member circular - - - - - - - - - - - - - - - - - - - - - - - - corolla clavate - - - - - - - - - - - - - - - - - - - - - - - - corolla concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pistillode yellow - - - - - - - - - - - - - - - - - - - - - - - - pistillode color - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue curled - - - - - - - - - - - - - - - - - - - - - - - - style columnar - - - - - - - - - - - - - - - - - - - - - - - - sepal tomentose - - - - - - - - - - - - - - - - - - - - - - - - petal glistening - - - - - - - - - - - - - - - - - - - - - - - - petal reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system lanceolate - - - - - - - - - - - - - - - - - - - - - - - - testa glistening - - - - - - - - - - - - - - - - - - - - - - - - testa reflectivity - - - - - - - - - - - - - - - - - - - - - - - - stem robust - - - - - - - - - - - - - - - - - - - - - - - - scutellar node raised - - - - - - - - - - - - - - - - - - - - - - - - keel obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaflet hairy - - - - - - - - - - - - - - - - - - - - - - - - disk flower erect - - - - - - - - - - - - - - - - - - - - - - - - seed dentated - - - - - - - - - - - - - - - - - - - - - - - - peduncle flattened - - - - - - - - - - - - - - - - - - - - - - - - branch simple - - - - - - - - - - - - - - - - - - - - - - - - branch complexity - - - - - - - - - - - - - - - - - - - - - - - - petiolule elliptic - - - - - - - - - - - - - - - - - - - - - - - - lower glume dorsal to - - - - - - - - - - - - - - - - - - - - - - - - lower glume position - - - - - - - - - - - - - - - - - - - - - - - - anther theca opposite - - - - - - - - - - - - - - - - - - - - - - - - petiolule glabrous - - - - - - - - branch premature - true - - - - - - - - branch onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - seed glandular - - - - - - - - - - - - - - - - - - - - - - - - seed morphology - - - - - - - - - - - - - - - - - - - - - - - - connective ovate - - - - - - - - - - - - - - - - - - - - - - - - connective convex 3-D shape - - - - - - - - pedicel female - true - - - - - - - - - - - - - - - - - - - - - - - - glume crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - seed sparse - - - - - - - - - - - - - - - - - - - - - - - - seed spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stalk basal to - - - - - - - - - - - - - - - - - - - - - - - - trichome dentated - - - - - - - - - - - - - - - - - - - - - - - - whole plant linear - - - - - - - - - - - - - - - - - - - - - - - - petiole margin glabrous - - - - - - - - - - - - - - - - - - - - - - - - petiole margin pilosity - - - - - - - - calyx male - true - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet serrated - - - - - - - - - - - - - - - - - - - - - - - - bud fertile - - - - - - - - - - - - - - - - - - - - - - - - bud fertility - - - - - - - - - - - - - - - - - - - - - - - - bud quadrangular - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina shape - - - - - - - - - - - - - - - - - - - - - - - - fruit adaxial to - - - - - - - - - - - - - - - - - - - - - - - - connective dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf reniform - - - - - - - - - - - - - - - - - - - - - - - - anther obtuse - - - - - - - - - - - - - - - - - - - - - - - - fruit raised - - - - - - - - - - - - - - - - - - - - - - - - connective broad - - - - - - - - - - - - - - - - - - - - - - - - fruit young - - - - - - - - - - - - - - - - - - - - - - - - fruit age - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus obtuse - - - - - - - - - - - - - - - - - - - - - - - - ovary wall arched - - - - - - - - - - - - - - - - - - - - - - - - tepal basal to - - - - - - - - - - - - - - - - - - - - - - - - axil lateral to - - - - - - - - - - - - - - - - - - - - - - - - spikelet kinked - - - - - - - - - - - - - - - - - - - - - - - - anther glistening - - - - - - - - - - - - - - - - - - - - - - - - anther reflectivity - - - - - - - - - - - - - - - - - - - - - - - - prickle swollen - - - - - - - - - - - - - - - - - - - - - - - - prickle structure - - - - - - - - - - - - - - - - - - - - - - - - style glandular - - - - - - - - - - - - - - - - - - - - - - - - style morphology - - - - - - - - - - - - - - - - - - - - - - - - leaf cleft - - - - - - - - - - - - - - - - - - - - - - - - leaf concavity - - - - - - - - - - - - - - - - - - - - - - - - placenta branched - - - - - - - - - - - - - - - - - - - - - - - - placenta branchiness - - - - - - - - - - - - - - - - - - - - - - - - petiole green - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus ovate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark branched - - - - - - - - - - - - - - - - - - - - - - - - bark branchiness - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle emarginate - - - - - - - - - - - - - - - - - - - - - - - - anther revolute - - - - - - - - - - - - - - - - - - - - - - - - anther slit-like - - - - - - - - - - - - - - - - - - - - - - - - exocarp osseous - - - - - - - - - - - - - - - - - - - - - - - - exocarp composition - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf cuneate - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl glabrous - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl pilosity - - - - - - - - - - - - - - - - - - - - - - - - style terminal - - - - - - - - - - - - - - - - - - - - - - - - crown root whorled - - - - - - - - - - - - - - - - - - - - - - - - crown root spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - carpel discoid - - - - - - - - - - - - - - - - - - - - - - - - carpel convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle increased length - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle length - - - - - - - - - - - - - - - - - - - - - - - - perianth brown - - - - - - - - - - - - - - - - - - - - - - - - style absent - - - - - - - - - - - - - - - - - - - - - - - - style amount - - - - - - - - - - - - - - - - - - - - - - - - banner petal hairy - - - - - - - - - - - - - - - - - - - - - - - - endocarp red - - - - - - - - - - - - - - - - - - - - - - - - spikelet cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - spikelet composition - - - - - - - - - - - - - - - - - - - - - - - - aril strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - aril shape - - - - - - - - - - - - - - - - - - - - - - - - stalk obovate - - - - - - - - - - - - - - - - - - - - - - - - palea smooth - - - - - - - - - - - - - - - - - - - - - - - - palea texture - - - - - - - - - - - - - - - - - - - - - - - - style purple - - - - - - - - - - - - - - - - - - - - - - - - central zone erect - - - - - - - - - - - - - - - - - - - - - - - - central zone position - - - - - - - - - - - - - - - - - - - - - - - - endosperm straight - - - - - - - - - - - - - - - - - - - - - - - - endosperm shape - - - - - - - - - - - - - - - - - - - - - - - - axil circular - - - - - - - - - - - - - - - - - - - - - - - - costa brown - - - - - - - - - - - - - - - - - - - - - - - - costa color - - - - - - - - - - - - - - - - - - - - - - - - style attenuate - - - - - - - - - - - - - - - - - - - - - - - - corolla notched - - - - - - - - - - - - - - - - - - - - - - - - corolla concavity - - - - - - - - - - - - - - - - - - - - - - - - petiole pulvinate - - - - - - - - - - - - - - - - - - - - - - - - branch linear - - - - - - - - - - - - - - - - - - - - - - - - seed furrowed - - - - - - - - - - - - - - - - - - - - - - - - root tip heart shaped - - - - - - - - - - - - - - - - - - - - - - - - root tip concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark elliptic - - - - - - - - - - - - - - - - - - - - - - - - bark 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit obtuse - - - - - - - - - - - - - - - - - - - - - - - - rhizome horizontal - - - - - - - - - - - - - - - - - - - - - - - - branch cuneate - - - - - - - - - - - - - - - - - - - - - - - - prickle conical - - - - - - - - - - - - - - - - - - - - - - - - prickle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed slender - - - - - - - - - - - - - - - - - - - - - - - - shoot internode striated - - - - - - - - - - - - - - - - - - - - - - - - shoot internode shape - - - - - - - - - - - - - - - - - - - - - - - - root branched - - - - - - - - - - - - - - - - - - - - - - - - root branchiness - - - - - - - - - - - - - - - - - - - - - - - - pistillode structure - - - - - - - - - - - - - - - - - - - - - - - - petiole brown - - - - - - - - - - - - - - - - - - - - - - - - hypanthium smooth - - - - - - - - - - - - - - - - - - - - - - - - hypanthium texture - - - - - - - - - - - - - - - - - - - - - - - - inflorescence elliptic - - - - - - - - - - - - - - - - - - - - - - - - tubercle pubescent - - - - - - - - - - - - - - - - - - - - - - - - tubercle maturity - - - - - - - - - - - - - - - - - - - - - - - - whole plant simple - - - - - - - - - - - - - - - - - - - - - - - - whole plant complexity - - - - - - - - - - - - - - - - - - - - - - - - petal spotted - - - - - - - - - - - - - - - - - - - - - - - - petal color pattern - - - - - - - - - - - - - - - - - - - - - - - - seed basal to - - - - - - - - - - - - - - - - - - - - - - - - seed trichome glabrous - - - - - - - - - - - - - - - - - - - - - - - - seed trichome pilosity - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein ovate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf slender - - - - - - - - - - - - - - - - - - - - - - - - flower conical - - - - - - - - bracteole female - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome linear - - - - - - - - - - - - - - - - - - - - - - - - stem drooping - - - - - - - - - - - - - - - - - - - - - - - - shoot apex hispid - - - - - - - - - - - - - - - - - - - - - - - - lamina circular - - - - - - - - - - - - - - - - - - - - - - - - perianth immature - - - - - - - - - - - - - - - - - - - - - - - - perianth maturity - - - - - - - - - - - - - - - - - - - - - - - - leaf broad - - - - - - - - - - - - - - - - - - - - - - - - style funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - trichome pedicellate - - - - - - - - - - - - - - - - - - - - - - - - trichome attachment quality - - - - - - - - - - - - - - - - - - - - - - - - style fleshy - - - - - - - - - - - - - - - - - - - - - - - - style composition - - - - - - - - - - - - - - - - - - - - - - - - filament grooved - - - - - - - - - - - - - - - - - - - - - - - - filament texture - - - - - - - - - - - - - - - - - - - - - - - - leaf present - - - - - - - - - - - - - - - - - - - - - - - - valve increased length - - - - - - - - - - - - - - - - - - - - - - - - valve length - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence autogenous - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - pith phenotype - - - - - - - - - - - - - - - - - - - - - - - - pith pubescent - - - - - - - - - - - - - - - - - - - - - - - - pith maturity - - - - - - - - - - - - - - - - - - - - - - - - endocarp decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - endocarp thickness - - - - - - - - - - - - - - - - - - - - - - - - stem concave - - - - - - - - - - - - - - - - - - - - - - - - stem concavity - - - - - - - - - - - - - - - - - - - - - - - - root tip ovate - - - - - - - - - - - - - - - - - - - - - - - - root tip convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - anther dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf leaf-like - - - - - - - - - - - - - - - - - - - - - - - - axil old - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle acuminate - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle sharpness - - - - - - - - - - - - - - - - - - - - - - - - root tip raised - - - - - - - - leaflet up - true - - - - - - - - - - - - - - - - - - - - - - - - leaflet direction - - - - - - - - - - - - - - - - - - - - - - - - calyx simple - - - - - - - - - - - - - - - - - - - - - - - - calyx complexity - - - - - - - - - - - - - - - - - - - - - - - - seed warty - - - - - - - - - - - - - - - - - - - - - - - - style branched - - - - - - - - - - - - - - - - - - - - - - - - stigma curved - - - - - - - - - - - - - - - - - - - - - - - - filament broken - - - - - - - - - - - - - - - - - - - - - - - - filament wholeness - - - - - - - - - - - - - - - - - - - - - - - - style oblong - - - - - - - - - - - - - - - - - - - - - - - - radicle ventral to - - - - - - - - - - - - - - - - - - - - - - - - glume elliptic - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle cuspidate - - - - - - - - - - - - - - - - - - - - - - - - pericarp kinked - - - - - - - - - - - - - - - - - - - - - - - - pericarp shape - - - - - - - - - - - - - - - - - - - - - - - - stamen sterile - - - - - - - - - - - - - - - - - - - - - - - - stamen fertility - - - - - - - - - - - - - - - - - - - - - - - - fruit swollen - - - - - - - - - - - - - - - - - - - - - - - - fruit blue - - - - - - - - - - - - - - - - - - - - - - - - leaf flattened - - - - - - - - - - - - - - - - - - - - - - - - sepal orbicular - - - - - - - - - - - - - - - - - - - - - - - - flower obovate - - - - - - - - - - - - - - - - - - - - - - - - banner petal orbicular - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue heart shaped - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot internode erect - - - - - - - - - - - - - - - - - - - - - - - - aril angular - - - - - - - - - - - - - - - - - - - - - - - - branch divergent from - - - - - - - - - - - - - - - - - - - - - - - - locule basal to - - - - - - - - - - - - - - - - - - - - - - - - anther inflexible - - - - - - - - - - - - - - - - - - - - - - - - anther flexibility - - - - - - - - - - - - - - - - - - - - - - - - filament length - - - - - - - - - - - - - - - - - - - - - - - - calyx emarginate - - - - - - - - - - - - - - - - - - - - - - - - shoot internode glabrous - - - - - - - - - - - - - - - - - - - - - - - - shoot internode pilosity - - - - - - - - - - - - - - - - - - - - - - - - spikelet decreased amount - - - - - - - - - - - - - - - - - - - - - - - - spikelet amount - - - - - - - - - - - - - - - - - - - - - - - - inflorescence open - - - - - - - - - - - - - - - - - - - - - - - - inflorescence closure - - - - - - - - - - - - - - - - - - - - - - - - leaf fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - seed circular - - - - - - - - - - - - - - - - - - - - - - - - periderm glabrous - - - - - - - - - - - - - - - - - - - - - - - - periderm pilosity - - - - - - - - - - - - - - - - - - - - - - - - tepal ovate - - - - - - - - - - - - - - - - - - - - - - - - lemma width - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis angle - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus areolate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle glandular - - - - - - - - - - - - - - - - - - - - - - - - peduncle morphology - - - - - - - - - - - - - - - - - - - - - - - - root glabrous - - - - - - - - - - - - - - - - - - - - - - - - root pilosity - - - - - - - - - - - - - - - - - - - - - - - - leaf angular - - - - - - - - - - - - - - - - - - - - - - - - perianth slender - - - - - - - - - - - - - - - - - - - - - - - - inflorescence exserted - - - - - - - - - - - - - - - - - - - - - - - - lemma absent - - - - - - - - - - - - - - - - - - - - - - - - lemma amount - - - - - - - - - - - - - - - - - - - - - - - - bark old - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem angular - - - - - - - - - - - - - - - - - - - - - - - - costa whole - - - - - - - - - - - - - - - - - - - - - - - - costa wholeness - - - - - - - - - - - - - - - - - - - - - - - - leaf retuse - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein areolate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal leaf-like - - - - - - - - - - - - - - - - - - - - - - - - staminode bifurcated - - - - - - - - - - - - - - - - - - - - - - - - staminode branchiness - - - - - - - - - - - - - - - - - - - - - - - - seed prominent - - - - - - - - - - - - - - - - - - - - - - - - palea glabrous - - - - - - - - - - - - - - - - - - - - - - - - palea pilosity - - - - - - - - - - - - - - - - - - - - - - - - leaflet undulate - - - - - - - - bract female - true - - - - - - - - bract phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet pedicellate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaflet glistening - - - - - - - - - - - - - - - - - - - - - - - - leaflet reflectivity - - - - - - - - - - - - - - - - - - - - - - - - seed ovate - - - - - - - - - - - - - - - - - - - - - - - - banner petal pubescent - - - - - - - - - - - - - - - - - - - - - - - - banner petal maturity - - - - - - - - - - - - - - - - - - - - - - - - aril surrounding - - - - - - - - - - - - - - - - - - - - - - - - rhizome kinked - - - - - - - - - - - - - - - - - - - - - - - - stem star shaped - - - - - - - - - - - - - - - - - - - - - - - - branch subulate - - - - - - - - - - - - - - - - - - - - - - - - androecium laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - androecium curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina elliptic - - - - - - - - - - - - - - - - - - - - - - - - shoot apex folded - - - - - - - - - - - - - - - - - - - - - - - - shoot apex surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - endosperm concave - - - - - - - - - - - - - - - - - - - - - - - - endosperm concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf overlapping - - - - - - - - - - - - - - - - - - - - - - - - palea back - - - - - - - - - - - - - - - - - - - - - - - - stigma elliptic - - - - - - - - - - - - - - - - - - - - - - - - flower convex - - - - - - - - - - - - - - - - - - - - - - - - anther punctate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall smooth - - - - - - - - - - - - - - - - - - - - - - - - rhizome glandular - - - - - - - - - - - - - - - - - - - - - - - - rhizome morphology - - - - - - - - - - - - - - - - - - - - - - - - epidermis lateral to - - - - - - - - - - - - - - - - - - - - - - - - epidermis position - - - - - - - - - - - - - - - - - - - - - - - - corolla pedicellate - - - - - - - - - - - - - - - - - - - - - - - - pericarp ovate - - - - - - - - - - - - - - - - - - - - - - - - lenticel decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - lenticel thickness - - - - - - - - - - - - - - - - - - - - - - - - - - - - gynoecium phenotype - - - - - - - - - - - - - - - - - - - - - - - - gynoecium fusiform - - - - - - - - - - - - - - - - - - - - - - - - gynoecium convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus acuminate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus sharpness - - - - - - - - - - - - - - - - - - - - - - - - aril smooth - - - - - - - - - - - - - - - - - - - - - - - - aril texture - - - - - - - - glume male - true - - - - - - - - - - - - - - - - - - - - - - - - seed inserted into - - - - - - - - - - - - - - - - - - - - - - - - corolla spotted - - - - - - - - - - - - - - - - - - - - - - - - corolla color pattern - - - - - - - - bract up - true - - - - - - - - - - - - - - - - - - - - - - - - bract direction - - - - - - - - - - - - - - - - - - - - - - - - involucre glandular - - - - - - - - - - - - - - - - - - - - - - - - involucre morphology - - - - - - - - - - - - - - - - - - - - - - - - stipule notched - - - - - - - - - - - - - - - - - - - - - - - - stipule concavity - - - - - - - - - - - - - - - - - - - - - - - - rhizome multicellular - - - - - - - - - - - - - - - - - - - - - - - - rhizome cellularity - - - - - - - - - - - - - - - - - - - - - - - - calyx opposite - - - - - - - - - - - - - - - - - - - - - - - - petal star shaped - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue pedicellate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue attachment quality - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf divergent from - - - - - - - - - - - - - - - - - - - - - - - - anther oblong - - - - - - - - - - - - - - - - - - - - - - - - disk flower increased length - - - - - - - - - - - - - - - - - - - - - - - - disk flower length - - - - - - - - - - - - - - - - - - - - - - - - thorn decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - thorn water composition - - - - - - - - - - - - - - - - - - - - - - - - peduncle elongated - - - - - - - - - - - - - - - - - - - - - - - - stalk branched - - - - - - - - - - - - - - - - - - - - - - - - stalk branchiness - - - - - - - - - - - - - - - - - - - - - - - - bract opposite - - - - - - - - - - - - - - - - - - - - - - - - filament oblong - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium glandular - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium morphology - - - - - - - - calyx down - true - - - - - - - - - - - - - - - - - - - - - - - - branch swollen - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue opposite - - - - - - - - - - - - - - - - - - - - - - - - seta curved - - - - - - - - - - - - - - - - - - - - - - - - seta curvature - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle conical - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle heart shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence unbranched - - - - - - - - - - - - - - - - - - - - - - - - cotyledon oblong - - - - - - - - - - - - - - - - - - - - - - - - cotyledon 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - petal dorsal to - - - - - - - - - - - - - - - - - - - - - - - - seed trichome hairy - - - - - - - - - - - - - - - - - - - - - - - - seed tomentose - - - - - - - - - - - - - - - - - - - - - - - - sheath cell pubescent - - - - - - - - - - - - - - - - - - - - - - - - sheath cell maturity - - - - - - - - - - - - - - - - - - - - - - - - lamina white - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member elliptic - - - - - - - - - - - - - - - - - - - - - - - - pappus exserted - - - - - - - - - - - - - - - - - - - - - - - - pappus position - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence serrated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle coiled - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle coiling - - - - - - - - - - - - - - - - - - - - - - - - petiolule emarginate - - - - - - - - - - - - - - - - - - - - - - - - petiolule concavity - - - - - - - - - - - - - - - - - - - - - - - - connective exserted - - - - - - - - - - - - - - - - - - - - - - - - branch sterile - - - - - - - - - - - - - - - - - - - - - - - - branch fertility - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle decurrent - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf obtuse - - - - - - - - - - - - - - - - - - - - - - - - sepal convex - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system triangular - - - - - - - - - - - - - - - - - - - - - - - - receptacle glandular - - - - - - - - - - - - - - - - - - - - - - - - receptacle morphology - - - - - - - - - - - - - - - - - - - - - - - - pistillode fused with - - - - - - - - - - - - - - - - - - - - - - - - leaf rough - - - - - - - - - - - - - - - - - - - - - - - - - - - - exotesta phenotype - - - - - - - - - - - - - - - - - - - - - - - - exotesta dark grey - - - - - - - - - - - - - - - - - - - - - - - - exotesta color - - - - - - - - - - - - - - - - - - - - - - - - endocarp increased thickness - - - - - - - - - - - - - - - - - - - - - - - - corm swollen - - - - - - - - - - - - - - - - - - - - - - - - corm structure - - - - - - - - - - - - - - - - - - - - - - - - canal dorsal to - - - - - - - - - - - - - - - - - - - - - - - - canal position - - - - - - - - - - - - - - - - - - - - - - - - fruit striated - - - - - - - - - - - - - - - - - - - - - - - - branch angular - - - - - - - - receptacle up - true - - - - - - - - - - - - - - - - - - - - - - - - receptacle direction - - - - - - - - - - - - - - - - - - - - - - - - tubercle swollen - - - - - - - - - - - - - - - - - - - - - - - - tubercle structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf margin phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf margin elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf margin 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bracteole subulate - - - - - - - - - - - - - - - - - - - - - - - - fruit orange - - - - - - - - - - - - - - - - - - - - - - - - bracteole opposite - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem glabrous - - - - - - - - - - - - - - - - - - - - - - - - bract revolute - - - - - - - - - - - - - - - - - - - - - - - - branch lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tepal erect - - - - - - - - - - - - - - - - - - - - - - - - leaflet oblanceolate - - - - - - - - anther up - true - - - - - - - - - - - - - - - - - - - - - - - - anther direction - - - - - - - - - - - - - - - - - - - - - - - - inflorescence diameter - - - - - - - - - - - - - - - - - - - - - - - - whole plant decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - whole plant water composition - - - - - - - - - - - - - - - - - - - - - - - - testa mature - - - - - - - - - - - - - - - - - - - - - - - - testa maturity - - - - - - - - - - - - - - - - - - - - - - - - seed star shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf tubular - - - - - - - - - - - - - - - - - - - - - - - - aril decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - aril thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit split - - - - - - - - - - - - - - - - - - - - - - - - calyx black - - - - - - - - - - - - - - - - - - - - - - - - fruit arched - - - - - - - - - - - - - - - - - - - - - - - - root tip punctate - - - - - - - - - - - - - - - - - - - - - - - - perianth present - - - - - - - - - - - - - - - - - - - - - - - - perianth amount - - - - - - - - - - - - - - - - - - - - - - - - stem swollen - - - - - - - - - - - - - - - - - - - - - - - - seed split - - - - - - - - - - - - - - - - - - - - - - - - trichome furrowed - - - - - - - - - - - - - - - - - - - - - - - - trichome texture - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence water composition - - - - - - - - - - - - - - - - - - - - - - - - endocarp erect - - - - - - - - - - - - - - - - - - - - - - - - endocarp position - - - - - - - - - - - - - - - - - - - - - - - - corolla fertile - - - - - - - - - - - - - - - - - - - - - - - - corolla fertility - - - - - - - - - - - - - - - - - - - - - - - - leaf increased size - - - - - - - - - - - - - - - - - - - - - - - - leaf size - - - - - - - - - - - - - - - - - - - - - - - - stem inflexible - - - - - - - - - - - - - - - - - - - - - - - - stem flexibility - - - - - - - - - - - - - - - - - - - - - - - - petiolule raised - - - - - - - - - - - - - - - - - - - - - - - - pedicel kinked - - - - - - - - - - - - - - - - - - - - - - - - leaflet pedicellate - - - - - - - - - - - - - - - - - - - - - - - - leaflet attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaflet spatulate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure circular - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex decreased amount - - - - - - - - - - - - - - - - - - - - - - - - shoot apex amount - - - - - - - - - - - - - - - - - - - - - - - - petiole whorled - - - - - - - - - - - - - - - - - - - - - - - - lemma white - - - - - - - - - - - - - - - - - - - - - - - - lemma color - - - - - - - - - - - - - - - - - - - - - - - - perianth ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf white - - - - - - - - bracteole up - true - - - - - - - - - - - - - - - - - - - - - - - - bracteole direction - - - - - - - - - - - - - - - - - - - - - - - - perianth exserted - - - - - - - - - - - - - - - - - - - - - - - - calyx cylindrical - - - - - - - - - - - - - - - - - - - - - - - - radicle hairy - - - - - - - - - - - - - - - - - - - - - - - - radicle pilosity - - - - - - - - apical hook premature - true - - - - - - - - apical hook onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence pedicellate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence attachment quality - - - - - - - - - - - - - - - - - - - - - - - - root tip decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - root tip thickness - - - - - - - - - - - - - - - - - - - - - - - - stamen cylindrical - - - - - - - - - - - - - - - - - - - - - - - - perianth red - - - - - - - - - - - - - - - - - - - - - - - - receptacle acuminate - - - - - - - - - - - - - - - - - - - - - - - - nectary triangular - - - - - - - - - - - - - - - - - - - - - - - - nectary 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - rhizome furrowed - - - - - - - - - - - - - - - - - - - - - - - - rhizome texture - - - - - - - - - - - - - - - - - - - - - - - - inflorescence angular - - - - - - - - - - - - - - - - - - - - - - - - perianth increased length - - - - - - - - - - - - - - - - - - - - - - - - perianth length - - - - - - - - - - - - - - - - - - - - - - - - corolla subulate - - - - - - - - - - - - - - - - - - - - - - - - sepal smooth - - - - - - - - - - - - - - - - - - - - - - - - sepal texture - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract increased length - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract length - - - - - - - - - - - - - - - - - - - - - - - - perianth rugose - - - - - - - - - - - - - - - - - - - - - - - - perianth surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence inflexible - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence flexibility - - - - - - - - - - - - - - - - - - - - - - - - anther green - - - - - - - - - - - - - - - - - - - - - - - - anther color - - - - - - - - - - - - - - - - - - - - - - - - perianth pubescent - - - - - - - - - - - - - - - - - - - - - - - - bract fleshy - - - - - - - - - - - - - - - - - - - - - - - - bract composition - - - - - - - - - - - - - - - - - - - - - - - - leaf soft - - - - - - - - - - - - - - - - - - - - - - - - seed punctate - - - - - - - - - - - - - - - - - - - - - - - - calyx cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - keel right - - - - - - - - - - - - - - - - - - - - - - - - corolla zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - corolla symmetry - - - - - - - - - - - - - - - - - - - - - - - - stem decumbent - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue caudate - - - - - - - - - - - - - - - - - - - - - - - - sepal dentated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle coating - - - - - - - - - - - - - - - - - - - - - - - - petiole rough - - - - - - - - - - - - - - - - - - - - - - - - whole plant lobed - - - - - - - - - - - - - - - - - - - - - - - - stereome ovate - - - - - - - - - - - - - - - - - - - - - - - - stereome convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel cleft - - - - - - - - - - - - - - - - - - - - - - - - pedicel concavity - - - - - - - - - - - - - - - - - - - - - - - - stem circumference - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium decreased amount - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium amount - - - - - - - - - - - - - - - - - - - - - - - - bulb flattened - - - - - - - - - - - - - - - - - - - - - - - - bulb curvature - - - - - - - - - - - - - - - - - - - - - - - - mesocarp decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - plant callus lanceolate - - - - - - - - - - - - - - - - - - - - - - - - anther attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf inflexible - - - - - - - - - - - - - - - - - - - - - - - - leaf flexibility - - - - - - - - - - - - - - - - - - - - - - - - corolla erect - - - - - - - - - - - - - - - - - - - - - - - - plant callus undulate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium glabrous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium pilosity - - - - - - - - - - - - - - - - - - - - - - - - hilum reniform - - - - - - - - - - - - - - - - - - - - - - - - hilum concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system star shaped - - - - - - - - - - - - - - - - - - - - - - - - petal decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - involucre autogenous - - - - - - - - - - - - - - - - - - - - - - - - involucre structure - - - - - - - - - - - - - - - - - - - - - - - - crown root glabrous - - - - - - - - - - - - - - - - - - - - - - - - crown root pilosity - - - - - - - - - - - - - - - - - - - - - - - - fruit translucent - - - - - - - - - - - - - - - - - - - - - - - - fruit opacity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex striated - - - - - - - - - - - - - - - - - - - - - - - - bracteole alternate placement - - - - - - - - - - - - - - - - - - - - - - - - bracteole spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - peduncle obtuse - - - - - - - - - - - - - - - - - - - - - - - - disk flower increased thickness - - - - - - - - - - - - - - - - - - - - - - - - disk flower thickness - - - - - - - - - - - - - - - - - - - - - - - - flower bilobed - - - - - - - - - - - - - - - - - - - - - - - - shoot internode decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - shoot internode water composition - - - - - - - - - - - - - - - - - - - - - - - - whole plant kinked - - - - - - - - - - - - - - - - - - - - - - - - stigma brown - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle opposite - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem warty - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem texture - - - - - - - - - - - - - - - - - - - - - - - - inflorescence striated - - - - - - - - - - - - - - - - - - - - - - - - petal retuse - - - - - - - - - - - - - - - - - - - - - - - - flower coiled - - - - - - - - - - - - - - - - - - - - - - - - flower coiling - - - - - - - - - - - - - - - - - - - - - - - - testa brown - - - - - - - - - - - - - - - - - - - - - - - - calyx swollen - - - - - - - - - - - - - - - - - - - - - - - - banner petal attenuate - - - - - - - - - - - - - - - - - - - - - - - - banner petal sharpness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex notched - - - - - - - - - - - - - - - - - - - - - - - - central zone punctate - - - - - - - - - - - - - - - - - - - - - - - - central zone spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bract dentated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence ovate - - - - - - - - - - - - - - - - - - - - - - - - calyx scalloped - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member heart shaped - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx condensed - - - - - - - - - - - - - - - - - - - - - - - - nectary circular - - - - - - - - - - - - - - - - - - - - - - - - fruit orbicular - - - - - - - - - - - - - - - - - - - - - - - - fruit curved - - - - - - - - - - - - - - - - - - - - - - - - stipule decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stipule thickness - - - - - - - - - - - - - - - - - - - - - - - - petal inserted into - - - - - - - - - - - - - - - - - - - - - - - - leaf oblate - - - - - - - - - - - - - - - - - - - - - - - - leaf circinate - - - - - - - - - - - - - - - - - - - - - - - - bark decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - bark thickness - - - - - - - - - - - - - - - - - - - - - - - - infructescence sharpness - - - - - - - - - - - - - - - - - - - - - - - - stamen oblong - - - - - - - - - - - - - - - - - - - - - - - - fruit rough - - - - - - - - - - - - - - - - - - - - - - - - central zone circular - - - - - - - - - - - - - - - - - - - - - - - - central zone 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall attenuate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall sharpness - - - - - - - - - - - - - - - - - - - - - - - - stigma conical - - - - - - - - - - - - - - - - - - - - - - - - ovary wall cylindrical - - - - - - - - - - - - - - - - - - - - - - - - seta triangular - - - - - - - - - - - - - - - - - - - - - - - - seta 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - petal decreased amount - - - - - - - - - - - - - - - - - - - - - - - - style spherical - - - - - - - - - - - - - - - - - - - - - - - - pistillode inserted into - - - - - - - - - - - - - - - - - - - - - - - - pistillode position - - - - - - - - filament acute - true - - - - - - - - filament duration - true - - - - - - - - - - - - - - - - - - - - - - - - keel prominent - - - - - - - - - - - - - - - - - - - - - - - - exocarp red - - - - - - - - - - - - - - - - - - - - - - - - exocarp color - - - - - - - - - - - - - - - - - - - - - - - - petiolule slender - - - - - - - - leaf vascular system premature - true - - - - - - - - leaf vascular system onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - flower mature - - - - - - - - - - - - - - - - - - - - - - - - disk flower ovate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium tomentose - - - - - - - - - - - - - - - - - - - - - - - - anther lanceolate - - - - - - - - - - - - - - - - - - - - - - - - gynophore increased thickness - - - - - - - - - - - - - - - - - - - - - - - - gynophore thickness - - - - - - - - - - - - - - - - - - - - - - - - stipule simple - - - - - - - - - - - - - - - - - - - - - - - - stipule complexity - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf sterile - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf fertility - - - - - - - - - - - - - - - - - - - - - - - - ligule linear - - - - - - - - - - - - - - - - - - - - - - - - root increased thickness - - - - - - - - - - - - - - - - - - - - - - - - root thickness - - - - - - - - - - - - - - - - - - - - - - - - exocarp glabrous - - - - - - - - - - - - - - - - - - - - - - - - exocarp pilosity - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member decreased amount - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member amount - - - - - - - - - - - - - - - - - - - - - - - - involucre prominent - - - - - - - - - - - - - - - - - - - - - - - - upper glume drooping - - - - - - - - - - - - - - - - - - - - - - - - trichome notched - - - - - - - - - - - - - - - - - - - - - - - - banner petal ovate - - - - - - - - - - - - - - - - - - - - - - - - stipule inserted into - - - - - - - - - - - - - - - - - - - - - - - - anther glandular - - - - - - - - - - - - - - - - - - - - - - - - anther morphology - - - - - - - - - - - - - - - - - - - - - - - - testa yellow - - - - - - - - - - - - - - - - - - - - - - - - stamen filamentous - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member triangular - - - - - - - - - - - - - - - - - - - - - - - - seed adaxial to - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus autogenous - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus structure - - - - - - - - - - - - - - - - - - - - - - - - androecium slit-like - - - - - - - - - - - - - - - - - - - - - - - - flower green - - - - - - - - - - - - - - - - - - - - - - - - seed trichome elliptic - - - - - - - - - - - - - - - - - - - - - - - - stigma whorled - - - - - - - - - - - - - - - - - - - - - - - - stigma spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf base phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf base ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf base convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - papilla cell coating - - - - - - - - - - - - - - - - - - - - - - - - papilla cell texture - - - - - - - - - - - - - - - - - - - - - - - - bud ovate - - - - - - - - - - - - - - - - - - - - - - - - staminode oblong - - - - - - - - - - - - - - - - - - - - - - - - staminode 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx punctate - - - - - - - - - - - - - - - - - - - - - - - - calyx spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - pollen lobed - - - - - - - - - - - - - - - - - - - - - - - - pollen shape - - - - - - - - - - - - - - - - - - - - - - - - bark slender - - - - - - - - - - - - - - - - - - - - - - - - bark shape - - - - - - - - - - - - - - - - - - - - - - - - leaf ridged - - - - - - - - - - - - - - - - - - - - - - - - shoot apex coiled - - - - - - - - - - - - - - - - - - - - - - - - shoot apex coiling - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus lanceolate - - - - - - - - - - - - - - - - - - - - - - - - sapwood smooth - - - - - - - - - - - - - - - - - - - - - - - - sapwood texture - - - - - - - - - - - - - - - - - - - - - - - - flower sterile - - - - - - - - - - - - - - - - - - - - - - - - flower fertility - - - - - - - - - - - - - - - - - - - - - - - - locule attached to - - - - - - - - - - - - - - - - - - - - - - - - locule attachment quality - - - - - - - - - - - - - - - - - - - - - - - - awn straight - - - - - - - - - - - - - - - - - - - - - - - - inflorescence abaxial to - - - - - - - - - - - - - - - - - - - - - - - - receptacle white - - - - - - - - - - - - - - - - - - - - - - - - receptacle color - - - - - - - - - - - - - - - - - - - - - - - - valve sharpness - - - - - - - - - - - - - - - - - - - - - - - - cotyledon increased thickness - - - - - - - - - - - - - - - - - - - - - - - - bracteole absent - - - - - - - - - - - - - - - - - - - - - - - - bracteole amount - - - - - - - - - - - - - - - - - - - - - - - - nectary pedicellate - - - - - - - - - - - - - - - - - - - - - - - - nectary attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaflet glandular - - - - - - - - - - - - - - - - - - - - - - - - leaflet morphology - - - - - - - - - - - - - - - - - - - - - - - - leaf convolute - - - - - - - - - - - - - - - - - - - - - - - - shoot apex ventral to - - - - - - - - - - - - - - - - - - - - - - - - lamina superficial - - - - - - - - - - - - - - - - - - - - - - - - connective horizontal - - - - - - - - - - - - - - - - - - - - - - - - caruncle brown - - - - - - - - - - - - - - - - - - - - - - - - root tip foveate - - - - - - - - - - - - - - - - - - - - - - - - root tip texture - - - - - - - - - - - - - - - - - - - - - - - - scutellar node decumbent - - - - - - - - - - - - - - - - - - - - - - - - leaf closed - - - - - - - - - - - - - - - - - - - - - - - - leaf closure - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle decreased amount - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle amount - - - - - - - - - - - - - - - - - - - - - - - - seed trichome lanceolate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome sharpness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - apical hook circular - - - - - - - - - - - - - - - - - - - - - - - - leaf dorsal to - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem glandular - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem morphology - - - - - - - - - - - - - - - - - - - - - - - - testa decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - testa thickness - - - - - - - - - - - - - - - - - - - - - - - - axil simple - - - - - - - - - - - - - - - - - - - - - - - - axil complexity - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina young - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina age - - - - - - - - - - - - - - - - - - - - - - - - leaflet abaxial to - - - - - - - - - - - - - - - - - - - - - - - - papilla cell glabrous - - - - - - - - - - - - - - - - - - - - - - - - papilla cell pilosity - - - - - - - - - - - - - - - - - - - - - - - - seed trichome drooping - - - - - - - - - - - - - - - - - - - - - - - - epicalyx broken - - - - - - - - - - - - - - - - - - - - - - - - epicalyx wholeness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle simple - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle complexity - - - - - - - - - - - - - - - - - - - - - - - - rhizome dark brown - - - - - - - - - - - - - - - - - - - - - - - - leaf star shaped - - - - - - - - - - - - - - - - - - - - - - - - receptacle kinked - - - - - - - - - - - - - - - - - - - - - - - - upper glume oblong - - - - - - - - - - - - - - - - - - - - - - - - bracteole attenuate - - - - - - - - - - - - - - - - - - - - - - - - plant cell cuneate - - - - - - - - upper glume up - true - - - - - - - - - - - - - - - - - - - - - - - - upper glume direction - - - - - - - - - - - - - - - - - - - - - - - - tepal decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - tepal water composition - - - - - - - - - - - - - - - - - - - - - - - - axil opposite - - - - - - - - - - - - - - - - - - - - - - - - petiole white - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue star shaped - - - - - - - - - - - - - - - - - - - - - - - - spikelet obtuse - - - - - - - - - - - - - - - - - - - - - - - - rhizome swollen - - - - - - - - - - - - - - - - - - - - - - - - branch young - - - - - - - - - - - - - - - - - - - - - - - - branch age - - - - - - - - - - - - - - - - - - - - - - - - bark cylindrical - - - - - - - - - - - - - - - - - - - - - - - - bark convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex retuse - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle thickness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member subulate - - - - - - - - - - - - - - - - - - - - - - - - corolla opposite - - - - - - - - - - - - - - - - - - - - - - - - testa dark brown - - - - - - - - - - - - - - - - - - - - - - - - rhizome branched - - - - - - - - - - - - - - - - - - - - - - - - rhizome branchiness - - - - - - - - - - - - - - - - - - - - - - - - fruit hispid - - - - - - - - - - - - - - - - - - - - - - - - aril trilobed - - - - - - - - - - - - - - - - - - - - - - - - tubercle decurrent - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue glistening - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue reflectivity - - - - - - - - - - - - - - - - - - - - - - - - branch decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - branch water composition - - - - - - - - - - - - - - - - - - - - - - - - shoot apex trilobed - - - - - - - - - - - - - - - - - - - - - - - - pericarp brittle - - - - - - - - - - - - - - - - - - - - - - - - pericarp structure - - - - - - - - - - - - - - - - - - - - - - - - bud black - - - - - - - - - - - - - - - - - - - - - - - - style dark red - - - - - - - - - - - - - - - - - - - - - - - - shoot apex cauline to - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence acuminate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence crowded - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus glabrous - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus pilosity - - - - - - - - - - - - - - - - - - - - - - - - carpel spherical - - - - - - - - - - - - - - - - - - - - - - - - branch obovate - - - - - - - - - - - - - - - - - - - - - - - - root tip decurrent - - - - - - - - - - - - - - - - - - - - - - - - bract spatulate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal undulate - - - - - - - - - - - - - - - - - - - - - - - - stamen dentated - - - - - - - - - - - - - - - - - - - - - - - - bark light brown - - - - - - - - - - - - - - - - - - - - - - - - flower fleshy - - - - - - - - - - - - - - - - - - - - - - - - flower composition - - - - - - - - leaf hermaphrodite - true - - - - - - - - leaf phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue truncated - - - - - - - - - - - - - - - - - - - - - - - - bract flattened - - - - - - - - - - - - - - - - - - - - - - - - bract curvature - - - - - - - - - - - - - - - - - - - - - - - - fruit antrorse - - - - - - - - - - - - - - - - - - - - - - - - ray system conical - - - - - - - - - - - - - - - - - - - - - - - - style decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - pericarp glabrous - - - - - - - - inflorescence female - true - - - - - - - - - - - - - - - - - - - - - - - - filament increased length - - - - - - - - - - - - - - - - - - - - - - - - bud conical - - - - - - - - - - - - - - - - - - - - - - - - shoot system linear - - - - - - - - - - - - - - - - - - - - - - - - shoot system shape - - - - - - - - - - - - - - - - - - - - - - - - endocarp diameter - - - - - - - - - - - - - - - - - - - - - - - - papilla cell abaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system raised - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet revolute - - - - - - - - - - - - - - - - - - - - - - - - inflorescence sterile - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fertility - - - - - - - - - - - - - - - - - - - - - - - - staminode fleshy - - - - - - - - - - - - - - - - - - - - - - - - staminode composition - - - - - - - - - - - - - - - - - - - - - - - - stigma grooved - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system waxy - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system waxiness - - - - - - - - - - - - - - - - - - - - - - - - epidermis brown - - - - - - - - - - - - - - - - - - - - - - - - epidermis color - - - - - - - - - - - - - - - - - - - - - - - - corolla elliptic - - - - - - - - - - - - - - - - - - - - - - - - lemma bilobed - - - - - - - - - - - - - - - - - - - - - - - - corolla V-shaped - - - - - - - - - - - - - - - - - - - - - - - - peduncle white - - - - - - - - - - - - - - - - - - - - - - - - pappus linear - - - - - - - - - - - - - - - - - - - - - - - - petal arched - - - - - - - - - - - - - - - - - - - - - - - - disk flower inflexible - - - - - - - - - - - - - - - - - - - - - - - - disk flower flexibility - - - - - - - - - - - - - - - - - - - - - - - - endosperm hard - - - - - - - - - - - - - - - - - - - - - - - - endosperm hardness - - - - - - - - - - - - - - - - - - - - - - - - shoot apex tomentose - - - - - - - - - - - - - - - - - - - - - - - - staminode pubescent - - - - - - - - - - - - - - - - - - - - - - - - staminode maturity - - - - - - - - - - - - - - - - - - - - - - - - trichome basal to - - - - - - - - - - - - - - - - - - - - - - - - trichome position - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle absent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle amount - - - - - - - - - - - - - - - - - - - - - - - - epidermis tubular - - - - - - - - - - - - - - - - - - - - - - - - epidermis convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower ochre - - - - - - - - - - - - - - - - - - - - - - - - seed raised - - - - - - - - - - - - - - - - - - - - - - - - petal drooping - - - - - - - - - - - - - - - - - - - - - - - - corolla striated - - - - - - - - - - - - - - - - - - - - - - - - stem coiled - - - - - - - - - - - - - - - - - - - - - - - - stem coiling - - - - - - - - - - - - - - - - - - - - - - - - canal open - - - - - - - - - - - - - - - - - - - - - - - - canal closure - - - - - - - - - - - - - - - - - - - - - - - - seed dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petal undulate - - - - - - - - - - - - - - - - - - - - - - - - palea flat - - - - - - - - - - - - - - - - - - - - - - - - palea curvature - - - - - - - - - - - - - - - - - - - - - - - - bud triangular - - - - - - - - - - - - - - - - - - - - - - - - lemma pubescent - - - - - - - - - - - - - - - - - - - - - - - - lemma maturity - - - - - - - - - - - - - - - - - - - - - - - - style ovate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex bilobed - - - - - - - - - - - - - - - - - - - - - - - - flower slender - - - - - - - - - - - - - - - - - - - - - - - - keel pubescent - - - - - - - - - - - - - - - - - - - - - - - - keel maturity - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf ovate - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf drooping - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system dentated - - - - - - - - corolla male - true - - - - - - - - corolla phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - style hispid - - - - - - - - style hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle glandular - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle morphology - - - - - - - - - - - - - - - - - - - - - - - - seed erect - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet whorled - - - - - - - - - - - - - - - - - - - - - - - - peduncle hispid - - - - - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma phenotype - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma fertile - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma fertility - - - - - - - - - - - - - - - - - - - - - - - - corolla inflated - - - - - - - - - - - - - - - - - - - - - - - - corolla structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - canal furrowed - - - - - - - - - - - - - - - - - - - - - - - - canal texture - - - - - - - - - - - - - - - - - - - - - - - - glume flat - - - - - - - - - - - - - - - - - - - - - - - - glume curvature - - - - - - - - - - - - - - - - - - - - - - - - stigma confluent with - - - - - - - - - - - - - - - - - - - - - - - - receptacle dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf congested - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem decreased amount - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem amount - - - - - - - - - - - - - - - - - - - - - - - - stigma exserted - - - - - - - - - - - - - - - - - - - - - - - - leaf conspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein cuneate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system glandular - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system morphology - - - - - - - - - - - - - - - - - - - - - - - - filament sharpness - - - - - - - - - - - - - - - - - - - - - - - - testa grooved - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system acuminate - - - - - - - - - - - - - - - - - - - - - - - - style striated - - - - - - - - - - - - - - - - - - - - - - - - leaf asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaf symmetry - - - - - - - - - - - - - - - - - - - - - - - - shoot apex convex - - - - - - - - - - - - - - - - - - - - - - - - rhizome increased thickness - - - - - - - - - - - - - - - - - - - - - - - - calyx sinuous - - - - - - - - - - - - - - - - - - - - - - - - calyx curvature - - - - - - - - - - - - - - - - - - - - - - - - testa hard - - - - - - - - - - - - - - - - - - - - - - - - testa hardness - - - - - - - - - - - - - - - - - - - - - - - - pedicel lanceolate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence decurrent - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member kinked - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet simple - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet complexity - - - - - - - - - - - - - - - - - - - - - - - - whole plant spongy - - - - - - - - - - - - - - - - - - - - - - - - pedicel straight - - - - - - - - - - - - - - - - - - - - - - - - hypanthium obtuse - - - - - - - - - - - - - - - - - - - - - - - - hypanthium 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - style circular - - - - - - - - - - - - - - - - - - - - - - - - axil pubescent - - - - - - - - - - - - - - - - - - - - - - - - axil maturity - - - - - - - - - - - - - - - - - - - - - - - - sepal subulate - - - - - - - - - - - - - - - - - - - - - - - - lemma emarginate - - - - - - - - - - - - - - - - - - - - - - - - lemma concavity - - - - - - - - - - - - - - - - - - - - - - - - - - - - parenchyma phenotype - - - - - - - - - - - - - - - - - - - - - - - - parenchyma circular - - - - - - - - - - - - - - - - - - - - - - - - parenchyma 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - endocarp flattened - - - - - - - - - - - - - - - - - - - - - - - - endocarp curvature - - - - - - - - - - - - - - - - - - - - - - - - petiole distichous - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle scalloped - - - - - - - - - - - - - - - - - - - - - - - - stamen fleshy - - - - - - - - - - - - - - - - - - - - - - - - stamen composition - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member autogenous - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member structure - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus concave - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus concavity - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue kinked - - - - - - - - - - - - - - - - - - - - - - - - lemma linear - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence auriculate - - - - - - - - - - - - - - - - - - - - - - - - leaflet foveate - - - - - - - - - - - - - - - - - - - - - - - - receptacle conical - - - - - - - - - - - - - - - - - - - - - - - - tubercle age - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf obovate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - sporangium phenotype - - - - - - - - - - - - - - - - - - - - - - - - sporangium lateral to - - - - - - - - - - - - - - - - - - - - - - - - sporangium position - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet triangular - - - - - - - - - - - - - - - - - - - - - - - - corolla dry - - - - - - - - - - - - - - - - - - - - - - - - corolla wetness - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem opposite - - - - - - - - - - - - - - - - - - - - - - - - ovary wall basal to - - - - - - - - - - - - - - - - - - - - - - - - bud red - - - - - - - - - - - - - - - - - - - - - - - - bract broken - - - - - - - - - - - - - - - - - - - - - - - - bract wholeness - - - - - - - - - - - - - - - - - - - - - - - - bract cuneate - - - - - - - - - - - - - - - - - - - - - - - - whole plant elliptic - - - - - - - - - - - - - - - - - - - - - - - - whole plant 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein maturity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall subulate - - - - - - - - - - - - - - - - - - - - - - - - spikelet subulate - - - - - - - - - - - - - - - - - - - - - - - - tuber spongy - - - - - - - - - - - - - - - - - - - - - - - - tuber structure - - - - - - - - - - - - - - - - - - - - - - - - stem serrated - - - - - - - - - - - - - - - - - - - - - - - - bud back - - - - - - - - - - - - - - - - - - - - - - - - leaf serrated - - - - - - - - - - - - - - - - - - - - - - - - thorn recurved - - - - - - - - - - - - - - - - - - - - - - - - thorn curvature - - - - - - - - - - - - - - - - - - - - - - - - petiolule obtuse - - - - - - - - - - - - - - - - - - - - - - - - fruit whole - - - - - - - - - - - - - - - - - - - - - - - - fruit wholeness - - - - - - - - - - - - - - - - - - - - - - - - bark opposite - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet dorsal to - - - - - - - - involucre male - true - - - - - - - - - - - - - - - - - - - - - - - - central zone swollen - - - - - - - - - - - - - - - - - - - - - - - - central zone structure - - - - - - - - - - - - - - - - - - - - - - - - pappus oblong - - - - - - - - - - - - - - - - - - - - - - - - pappus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system undulate - - - - - - - - - - - - - - - - - - - - - - - - peduncle lobed - - - - - - - - - - - - - - - - - - - - - - - - sheath cell hairy - - - - - - - - - - - - - - - - - - - - - - - - pedicel white - - - - - - - - - - - - - - - - - - - - - - - - bud purple - - - - - - - - - - - - - - - - - - - - - - - - filament offset - - - - - - - - - - - - - - - - - - - - - - - - lamina fertile - - - - - - - - - - - - - - - - - - - - - - - - stigma slender - - - - - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell phenotype - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell oblong - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - connective lateral to - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet hairy - - - - - - - - - - - - - - - - - - - - - - - - receptacle smooth - - - - - - - - - - - - - - - - - - - - - - - - receptacle texture - - - - - - - - - - - - - - - - - - - - - - - - hilum smooth - - - - - - - - - - - - - - - - - - - - - - - - hilum texture - - - - - - - - - - - - - - - - - - - - - - - - petiolule dentated - - - - - - - - - - - - - - - - - - - - - - - - staminode triangular - - - - - - - - - - - - - - - - - - - - - - - - fruit dilated - - - - - - - - - - - - - - - - - - - - - - - - fruit size - - - - - - - - - - - - - - - - - - - - - - - - anther flattened - - - - - - - - - - - - - - - - - - - - - - - - anther curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf vertical - - - - - - - - - - - - - - - - - - - - - - - - leaf autogenous - - - - - - - - - - - - - - - - - - - - - - - - style hollow - - - - - - - - - - - - - - - - - - - - - - - - style structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - endosperm distributed - - - - - - - - - - - - - - - - - - - - - - - - endosperm spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stalk sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem symmetrical - - - - - - - - - - - - - - - - - - - - - - - - stem symmetry - - - - - - - - - - - - - - - - - - - - - - - - branch basal to - - - - - - - - - - - - - - - - - - - - - - - - seed rough - - - - - - - - - - - - - - - - - - - - - - - - aril grooved - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem dentated - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet truncated - - - - - - - - - - - - - - - - - - - - - - - - calyx present - - - - - - - - - - - - - - - - - - - - - - - - branch flattened - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member hairy - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member pilosity - - - - - - - - - - - - - - - - - - - - - - - - lenticel drooping - - - - - - - - - - - - - - - - - - - - - - - - filament funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - infructescence glabrous - - - - - - - - - - - - - - - - - - - - - - - - infructescence pilosity - - - - - - - - - - - - - - - - - - - - - - - - bark granular - - - - - - - - - - - - - - - - - - - - - - - - bark composition - - - - - - - - - - - - - - - - - - - - - - - - inflorescence decurrent - - - - - - - - - - - - - - - - - - - - - - - - bud brown - - - - - - - - - - - - - - - - - - - - - - - - prickle obovate - - - - - - - - - - - - - - - - - - - - - - - - prickle glabrous - - - - - - - - - - - - - - - - - - - - - - - - prickle pilosity - - - - - - - - - - - - - - - - - - - - - - - - trichome exserted - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure increased thickness - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure thickness - - - - - - - - - - - - - - - - - - - - - - - - branch grooved - - - - - - - - - - - - - - - - - - - - - - - - lamina dry - - - - - - - - - - - - - - - - - - - - - - - - lamina wetness - - - - - - - - - - - - - - - - - - - - - - - - sheath cell tubular - - - - - - - - - - - - - - - - - - - - - - - - sheath cell convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - corolla symmetrical - - - - - - - - - - - - - - - - - - - - - - - - seed coat orange - - - - - - - - - - - - - - - - - - - - - - - - seed coat color - - - - - - - - palea acute - true - - - - - - - - palea duration - true - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril sharpness - - - - - - - - - - - - - - - - - - - - - - - - tepal autogenous - - - - - - - - - - - - - - - - - - - - - - - - tepal structure - - - - - - - - - - - - - - - - - - - - - - - - fruit simple - - - - - - - - - - - - - - - - - - - - - - - - fruit complexity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system obovate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence proximal to - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril circinate - - - - - - - - - - - - - - - - - - - - - - - - carpel hairy - - - - - - - - - - - - - - - - - - - - - - - - disk flower undulate - - - - - - - - - - - - - - - - - - - - - - - - disk flower shape - - - - - - - - - - - - - - - - - - - - - - - - upper glume smooth - - - - - - - - - - - - - - - - - - - - - - - - upper glume texture - - - - - - - - - - - - - - - - - - - - - - - - infructescence dark brown - - - - - - - - - - - - - - - - - - - - - - - - fruit glistening - - - - - - - - - - - - - - - - - - - - - - - - fruit reflectivity - - - - - - - - - - - - - - - - - - - - - - - - androecium upturned - - - - - - - - - - - - - - - - - - - - - - - - crown root decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - testa black - - - - - - - - - - - - - - - - - - - - - - - - seed trichome truncated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle orbicular - - - - - - - - - - - - - - - - - - - - - - - - leaf decurrent - - - - - - - - - - - - - - - - - - - - - - - - filament involute - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit prominent - - - - - - - - stamen female - true - - - - - - - - stamen phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - glume subulate - - - - - - - - - - - - - - - - - - - - - - - - glume shape - - - - - - - - - - - - - - - - - - - - - - - - stipule elliptic - - - - - - - - - - - - - - - - - - - - - - - - petal decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - petal water composition - - - - - - - - - - - - - - - - - - - - - - - - petiole lobed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence raised - - - - - - - - - - - - - - - - - - - - - - - - sepal pyramidal - - - - - - - - - - - - - - - - - - - - - - - - shoot apex whorled - - - - - - - - - - - - - - - - - - - - - - - - endocarp edible - - - - - - - - - - - - - - - - - - - - - - - - endocarp edibility - - - - - - - - - - - - - - - - - - - - - - - - stamen clavate - - - - - - - - - - - - - - - - - - - - - - - - stamen concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - whole plant split - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem cauline to - - - - - - - - - - - - - - - - - - - - - - - - raphe ventral to - - - - - - - - - - - - - - - - - - - - - - - - sepal glandular - - - - - - - - - - - - - - - - - - - - - - - - sepal morphology - - - - - - - - - - - - - - - - - - - - - - - - carpel black - - - - - - - - - - - - - - - - - - - - - - - - carpel color - - - - - - - - - - - - - - - - - - - - - - - - filament attached to - - - - - - - - - - - - - - - - - - - - - - - - filament attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein pilosity - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant spore phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant spore ovate - - - - - - - - - - - - - - - - - - - - - - - - plant spore convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - papilla cell folded - - - - - - - - - - - - - - - - - - - - - - - - papilla cell surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - sepal purple - - - - - - - - - - - - - - - - - - - - - - - - calyx funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - pedicel brown - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus truncated - - - - - - - - - - - - - - - - - - - - - - - - pollen sterile - - - - - - - - - - - - - - - - - - - - - - - - pollen fertility - - - - - - - - - - - - - - - - - - - - - - - - lamina orbicular - - - - - - - - - - - - - - - - - - - - - - - - seed inverted - - - - - - - - - - - - - - - - - - - - - - - - ovary wall lanceolate - - - - - - - - - - - - - - - - - - - - - - - - peduncle coiled - - - - - - - - - - - - - - - - - - - - - - - - peduncle coiling - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system maturity - - - - - - - - - - - - - - - - - - - - - - - - flower distichous - - - - - - - - - - - - - - - - - - - - - - - - style lanceolate - - - - - - - - - - - - - - - - - - - - - - - - bark dark brown - - - - - - - - perianth female - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - tuberous root phenotype - - - - - - - - - - - - - - - - - - - - - - - - tuberous root fleshy - - - - - - - - - - - - - - - - - - - - - - - - tuberous root composition - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue lanceolate - - - - - - - - - - - - - - - - - - - - - - - - style divergent from - - - - - - - - - - - - - - - - - - - - - - - - plant callus caudate - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell increased length - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell length - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis white - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis color - - - - - - - - - - - - - - - - - - - - - - - - petiole decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - petiole water composition - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle fleshy - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle composition - - - - - - - - infructescence up - true - - - - - - - - - - - - - - - - - - - - - - - - infructescence direction - - - - - - - - - - - - - - - - - - - - - - - - perianth conspicuous - - - - - - - - - - - - - - - - - - - - - - - - flower cleft - - - - - - - - - - - - - - - - - - - - - - - - bud bent - - - - - - - - - - - - - - - - - - - - - - - - endocarp glabrous - - - - - - - - - - - - - - - - - - - - - - - - endocarp pilosity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall decreased amount - - - - - - - - - - - - - - - - - - - - - - - - ovary wall amount - - - - - - - - - - - - - - - - - - - - - - - - fruit acuminate - - - - - - - - - - - - - - - - - - - - - - - - petiole concave - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem erect - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein raised - - - - - - - - - - - - - - - - - - - - - - - - leaf width - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein distributed - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - root tip linear - - - - - - - - - - - - - - - - - - - - - - - - leaflet scalloped - - - - - - - - - - - - - - - - - - - - - - - - carpel oblong - - - - - - - - - - - - - - - - - - - - - - - - carpel 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stamen increased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril pilosity - - - - - - - - - - - - - - - - - - - - - - - - petiole angle - - - - - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell phenotype - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell spherical - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet brown - - - - - - - - - - - - - - - - - - - - - - - - leaflet color - - - - - - - - - - - - - - - - - - - - - - - - disk flower scalloped - - - - - - - - - - - - - - - - - - - - - - - - apical hook increased thickness - - - - - - - - - - - - - - - - - - - - - - - - apical hook thickness - - - - - - - - - - - - - - - - - - - - - - - - hydathode acuminate - - - - - - - - - - - - - - - - - - - - - - - - hydathode sharpness - - - - - - - - - - - - - - - - - - - - - - - - shoot internode furrowed - - - - - - - - - - - - - - - - - - - - - - - - aril increased length - - - - - - - - - - - - - - - - - - - - - - - - aril length - - - - - - - - - - - - - - - - - - - - - - - - bud robust - - - - - - - - - - - - - - - - - - - - - - - - - - - - endotesta phenotype - - - - - - - - - - - - - - - - - - - - - - - - endotesta grey - - - - - - - - - - - - - - - - - - - - - - - - endotesta color - - - - - - - - - - - - - - - - - - - - - - - - nectary subulate - - - - - - - - - - - - - - - - - - - - - - - - nectary shape - - - - - - - - - - - - - - - - - - - - - - - - bracteole dorsal to - - - - - - - - - - - - - - - - - - - - - - - - pericarp decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - petiole auriculate - - - - - - - - - - - - - - - - - - - - - - - - stamen arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence undulate - - - - - - - - - - - - - - - - - - - - - - - - spikelet broad - - - - - - - - - - - - - - - - - - - - - - - - spikelet conical - - - - - - - - axil up - true - - - - - - - - - - - - - - - - - - - - - - - - axil direction - - - - - - - - - - - - - - - - - - - - - - - - leaflet simple - - - - - - - - - - - - - - - - - - - - - - - - leaflet complexity - - - - - - - - - - - - - - - - - - - - - - - - filament hairy - - - - - - - - - - - - - - - - - - - - - - - - shoot apex autogenous - - - - - - - - - - - - - - - - - - - - - - - - lamina caudate - - - - - - - - - - - - - - - - - - - - - - - - root tip attenuate - - - - - - - - - - - - - - - - - - - - - - - - peduncle quadrangular - - - - - - - - - - - - - - - - - - - - - - - - peristome yellow - - - - - - - - - - - - - - - - - - - - - - - - apical hook elliptic - - - - - - - - testa acute - true - - - - - - - - testa duration - true - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue dispersed - - - - - - - - - - - - - - - - - - - - - - - - tepal increased thickness - - - - - - - - - - - - - - - - - - - - - - - - tepal thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf undulate - - - - - - - - - - - - - - - - - - - - - - - - stem loose - - - - - - - - - - - - - - - - - - - - - - - - receptacle orange - - - - - - - - - - - - - - - - - - - - - - - - rhizome opaque - - - - - - - - - - - - - - - - - - - - - - - - rhizome opacity - - - - - - - - - - - - - - - - - - - - - - - - bark diameter - - - - - - - - - - - - - - - - - - - - - - - - style dark brown - - - - - - - - - - - - - - - - - - - - - - - - leaf revolute - - - - - - - - - - - - - - - - - - - - - - - - staminode glabrous - - - - - - - - - - - - - - - - - - - - - - - - staminode pilosity - - - - - - - - - - - - - - - - - - - - - - - - thorn increased length - - - - - - - - - - - - - - - - - - - - - - - - thorn length - - - - - - - - - - - - - - - - - - - - - - - - petal curved - - - - - - - - - - - - - - - - - - - - - - - - petal curvature - - - - - - - - - - - - - - - - - - - - - - - - leaflet decreased thickness - - - - - - - - corolla up - true - - - - - - - - - - - - - - - - - - - - - - - - mesocarp soft - - - - - - - - - - - - - - - - - - - - - - - - mesocarp hardness - - - - - - - - - - - - - - - - - - - - - - - - cotyledon emarginate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein pubescent - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein maturity - - - - - - - - - - - - - - - - - - - - - - - - stem circular - - - - - - - - - - - - - - - - - - - - - - - - flower young - - - - - - - - - - - - - - - - - - - - - - - - flower age - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem simple - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem complexity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system concave - - - - - - - - - - - - - - - - - - - - - - - - trichome increased thickness - - - - - - - - - - - - - - - - - - - - - - - - trichome thickness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle leaf-like - - - - - - - - - - - - - - - - - - - - - - - - glume bilobed - - - - - - - - - - - - - - - - - - - - - - - - peduncle attenuate - - - - - - - - - - - - - - - - - - - - - - - - peduncle sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem rough - - - - - - - - lenticel premature - true - - - - - - - - lenticel onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - style coiled - - - - - - - - - - - - - - - - - - - - - - - - style coiling - - - - - - - - - - - - - - - - - - - - - - - - trichome warty - - - - - - - - - - - - - - - - - - - - - - - - androecium flattened - - - - - - - - - - - - - - - - - - - - - - - - plant embryo increased thickness - - - - - - - - - - - - - - - - - - - - - - - - plant embryo thickness - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle hairy - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle pilosity - - - - - - - - - - - - - - - - - - - - - - - - shoot internode hairy - - - - - - - - - - - - - - - - - - - - - - - - stem arched - - - - - - - - - - - - - - - - - - - - - - - - ligule sterile - - - - - - - - - - - - - - - - - - - - - - - - ligule fertility - - - - - - - - - - - - - - - - - - - - - - - - stigma opposite - - - - - - - - - - - - - - - - - - - - - - - - inflorescence spotted - - - - - - - - - - - - - - - - - - - - - - - - cotyledon leaf-like - - - - - - - - - - - - - - - - - - - - - - - - keel cuspidate - - - - - - - - - - - - - - - - - - - - - - - - epidermis yellow - - - - - - - - - - - - - - - - - - - - - - - - petiolule cuneate - - - - - - - - - - - - - - - - - - - - - - - - petal attenuate - - - - - - - - - - - - - - - - - - - - - - - - corolla straight - - - - - - - - - - - - - - - - - - - - - - - - petal dentated - - - - - - - - - - - - - - - - - - - - - - - - perianth dark red - - - - - - - - - - - - - - - - - - - - - - - - branch glistening - - - - - - - - - - - - - - - - - - - - - - - - branch reflectivity - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle pinnate - - - - - - - - - - - - - - - - - - - - - - - - pericarp oblong - - - - - - - - - - - - - - - - - - - - - - - - pericarp 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - lower glume convex - - - - - - - - - - - - - - - - - - - - - - - - lower glume concavity - - - - - - - - - - - - - - - - - - - - - - - - leaflet lobed - - - - - - - - - - - - - - - - - - - - - - - - stem raised - - - - - - - - - - - - - - - - - - - - - - - - lamina lobed - - - - - - - - - - - - - - - - - - - - - - - - stolon fleshy - - - - - - - - - - - - - - - - - - - - - - - - stolon composition - - - - - - - - - - - - - - - - - - - - - - - - inflorescence triangular - - - - - - - - - - - - - - - - - - - - - - - - ovary wall swollen - - - - - - - - - - - - - - - - - - - - - - - - sepal spherical - - - - - - - - - - - - - - - - - - - - - - - - spikelet back - - - - - - - - - - - - - - - - - - - - - - - - spikelet direction - - - - - - - - - - - - - - - - - - - - - - - - inflorescence grey - - - - - - - - - - - - - - - - - - - - - - - - bracteole fleshy - - - - - - - - - - - - - - - - - - - - - - - - bracteole composition - - - - - - - - - - - - - - - - - - - - - - - - heartwood spherical - - - - - - - - - - - - - - - - - - - - - - - - heartwood convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed foveate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue obtuse - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle hispid - - - - - - - - - - - - - - - - - - - - - - - - branch drooping - - - - - - - - - - - - - - - - - - - - - - - - prickle pinnate - - - - - - - - - - - - - - - - - - - - - - - - anther attached to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall scalloped - - - - - - - - - - - - - - - - - - - - - - - - lamina mature - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium oblong - - - - - - - - - - - - - - - - - - - - - - - - shoot system erect - - - - - - - - - - - - - - - - - - - - - - - - trichome acuminate - - - - - - - - - - - - - - - - - - - - - - - - gynophore punctate - - - - - - - - - - - - - - - - - - - - - - - - gynophore spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet tomentose - - - - - - - - - - - - - - - - - - - - - - - - fruit convex - - - - - - - - - - - - - - - - - - - - - - - - perianth yellow - - - - - - - - - - - - - - - - - - - - - - - - keel hispidulous - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina acuminate - - - - - - - - - - - - - - - - - - - - - - - - bark increased length - - - - - - - - - - - - - - - - - - - - - - - - bark length - - - - - - - - - - - - - - - - - - - - - - - - carpel autogenous - - - - - - - - - - - - - - - - - - - - - - - - carpel structure - - - - - - - - - - - - - - - - - - - - - - - - growth ring star shaped - - - - - - - - - - - - - - - - - - - - - - - - growth ring shape - - - - - - - - - - - - - - - - - - - - - - - - perianth sterile - - - - - - - - - - - - - - - - - - - - - - - - perianth fertility - - - - - - - - - - - - - - - - - - - - - - - - lemma purple - - - - - - - - - - - - - - - - - - - - - - - - glume triangular - - - - - - - - - - - - - - - - - - - - - - - - petiole terminal - - - - - - - - - - - - - - - - - - - - - - - - anther horizontal - - - - - - - - - - - - - - - - - - - - - - - - flower height - - - - - - - - - - - - - - - - - - - - - - - - hilum red - - - - - - - - - - - - - - - - - - - - - - - - stem constricted - - - - - - - - - - - - - - - - - - - - - - - - stalk spherical - - - - - - - - - - - - - - - - - - - - - - - - petal offset - - - - - - - - - - - - - - - - - - - - - - - - connective hairy - - - - - - - - - - - - - - - - - - - - - - - - connective pilosity - - - - - - - - - - - - - - - - - - - - - - - - corolla open - - - - - - - - - - - - - - - - - - - - - - - - corolla closure - - - - - - - - - - - - - - - - - - - - - - - - root tip whorled - - - - - - - - - - - - - - - - - - - - - - - - mesocarp brown - - - - - - - - - - - - - - - - - - - - - - - - mesocarp color - - - - - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma phenotype - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma Y-shaped - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf distal to - - - - - - - - - - - - - - - - - - - - - - - - calyx broken - - - - - - - - - - - - - - - - - - - - - - - - calyx wholeness - - - - - - - - - - - - - - - - - - - - - - - - trichome striated - - - - - - - - - - - - - - - - - - - - - - - - testa red - - - - - - - - - - - - - - - - - - - - - - - - perianth warty - - - - - - - - - - - - - - - - - - - - - - - - perianth texture - - - - - - - - - - - - - - - - - - - - - - - - fruit mature - - - - - - - - - - - - - - - - - - - - - - - - spikelet conspicuous - - - - - - - - - - - - - - - - - - - - - - - - seed maturity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet pinnate - - - - - - - - - - - - - - - - - - - - - - - - hilum sharp - - - - - - - - - - - - - - - - - - - - - - - - hilum sharpness - - - - - - - - - - - - - - - - - - - - - - - - gynophore spherical - - - - - - - - - - - - - - - - - - - - - - - - pedicel adjacent to - - - - - - - - - - - - - - - - - - - - - - - - receptacle autogenous - - - - - - - - - - - - - - - - - - - - - - - - crown root fleshy - - - - - - - - - - - - - - - - - - - - - - - - crown root composition - - - - - - - - - - - - - - - - - - - - - - - - placenta cylindrical - - - - - - - - - - - - - - - - - - - - - - - - placenta convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit yellow green - - - - - - - - upper glume acute - true - - - - - - - - upper glume duration - true - - - - - - - - - - - - - - - - - - - - - - - - lamina waxy - - - - - - - - - - - - - - - - - - - - - - - - lamina waxiness - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus caudate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus position - - - - - - - - - - - - - - - - - - - - - - - - seed trichome increased length - - - - - - - - - - - - - - - - - - - - - - - - seed trichome length - - - - - - - - - - - - - - - - - - - - - - - - apical hook glabrous - - - - - - - - - - - - - - - - - - - - - - - - apical hook pilosity - - - - - - - - - - - - - - - - - - - - - - - - petiolule terminal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence basal to - - - - - - - - - - - - - - - - - - - - - - - - fruit abaxial to - - - - - - - - - - - - - - - - - - - - - - - - involucre fertile - - - - - - - - - - - - - - - - - - - - - - - - involucre fertility - - - - - - - - - - - - - - - - - - - - - - - - whole plant fleshy - - - - - - - - - - - - - - - - - - - - - - - - whole plant composition - - - - - - - - - - - - - - - - - - - - - - - - glume raised - - - - - - - - - - - - - - - - - - - - - - - - bract notched - - - - - - - - - - - - - - - - - - - - - - - - bract concavity - - - - - - - - - - - - - - - - - - - - - - - - shoot internode terminal - - - - - - - - - - - - - - - - - - - - - - - - sepal conical - - - - - - - - - - - - - - - - - - - - - - - - rhizome diameter - - - - - - - - - - - - - - - - - - - - - - - - style abaxial to - - - - - - - - - - - - - - - - - - - - - - - - stamen spherical - - - - - - - - - - - - - - - - - - - - - - - - pedicel obovate - - - - - - - - - - - - - - - - - - - - - - - - bark mottled - - - - - - - - - - - - - - - - - - - - - - - - bark color pattern - - - - - - - - - - - - - - - - - - - - - - - - bud inflexible - - - - - - - - - - - - - - - - - - - - - - - - bud flexibility - - - - - - - - - - - - - - - - - - - - - - - - stem basal to - - - - - - - - - - - - - - - - - - - - - - - - banner petal elliptic - - - - - - - - - - - - - - - - - - - - - - - - calyx constricted - - - - - - - - - - - - - - - - - - - - - - - - filament broad - - - - - - - - - - - - - - - - - - - - - - - - stalk fertile - - - - - - - - - - - - - - - - - - - - - - - - stalk fertility - - - - - - - - - - - - - - - - - - - - - - - - spikelet ovate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon erect - - - - - - - - - - - - - - - - - - - - - - - - cotyledon position - - - - - - - - - - - - - - - - - - - - - - - - spikelet loose - - - - - - - - - - - - - - - - - - - - - - - - spikelet spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril increased length - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril length - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle whorled - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle spatial pattern - - - - - - - - leaf subacute - true - - - - - - - - - - - - - - - - - - - - - - - - androecium glabrous - - - - - - - - - - - - - - - - - - - - - - - - androecium pilosity - - - - - - - - - - - - - - - - - - - - - - - - endocarp obtuse - - - - - - - - - - - - - - - - - - - - - - - - stamen drooping - - - - - - - - - - - - - - - - - - - - - - - - corolla split - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dentated - - - - - - - - - - - - - - - - - - - - - - - - carpel decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - carpel thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - stem clavate - - - - - - - - - - - - - - - - - - - - - - - - stem concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall inserted into - - - - - - - - - - - - - - - - - - - - - - - - filament sterile - - - - - - - - - - - - - - - - - - - - - - - - filament fertility - - - - - - - - - - - - - - - - - - - - - - - - flower flattened - - - - - - - - - - - - - - - - - - - - - - - - canal arched - - - - - - - - - - - - - - - - - - - - - - - - canal concavity - - - - - - - - - - - - - - - - - - - - - - - - petal triangular - - - - - - - - - - - - - - - - - - - - - - - - bud left - - - - - - - - - - - - - - - - - - - - - - - - hilum dorsal to - - - - - - - - - - - - - - - - - - - - - - - - hilum position - - - - - - - - - - - - - - - - - - - - - - - - stem blunt - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium pedicellate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium attachment quality - - - - - - - - - - - - - - - - - - - - - - - - anther violet - - - - - - - - - - - - - - - - - - - - - - - - lemma caudate - - - - - - - - - - - - - - - - - - - - - - - - lemma position - - - - - - - - - - - - - - - - - - - - - - - - pericarp star shaped - - - - - - - - - - - - - - - - - - - - - - - - stalk diameter - - - - - - - - - - - - - - - - - - - - - - - - fruit coiled - - - - - - - - - - - - - - - - - - - - - - - - fruit coiling - - - - - - - - - - - - - - - - - - - - - - - - filament simple - - - - - - - - - - - - - - - - - - - - - - - - filament complexity - - - - - - - - - - - - - - - - - - - - - - - - whole plant pubescent - - - - - - - - - - - - - - - - - - - - - - - - whole plant maturity - - - - - - - - - - - - - - - - - - - - - - - - petal acuminate - - - - - - - - - - - - - - - - - - - - - - - - plant callus triangular - - - - - - - - - - - - - - - - - - - - - - - - plant callus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - spikelet elliptic - - - - - - - - - - - - - - - - - - - - - - - - corolla dark purple - - - - - - - - - - - - - - - - - - - - - - - - inflorescence segmented - - - - - - - - - - - - - - - - - - - - - - - - prickle raised - - - - - - - - - - - - - - - - - - - - - - - - anther spotted - - - - - - - - - - - - - - - - - - - - - - - - anther color pattern - - - - - - - - - - - - - - - - - - - - - - - - pappus brown - - - - - - - - - - - - - - - - - - - - - - - - fruit dense - - - - - - - - - - - - - - - - - - - - - - - - fruit mass density - - - - - - - - - - - - - - - - - - - - - - - - cotyledon simple - - - - - - - - - - - - - - - - - - - - - - - - cotyledon complexity - - - - - - - - - - - - - - - - - - - - - - - - fruit undulate - - - - - - - - - - - - - - - - - - - - - - - - calyx conical - - - - - - - - - - - - - - - - - - - - - - - - root tip triangular - - - - - - - - stamen male - true - - - - - - - - vascular bundle hermaphrodite - true - - - - - - - - vascular bundle phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - leaf dark green - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue autogenous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue structure - - - - - - - - - - - - - - - - - - - - - - - - exotesta grey - - - - - - - - - - - - - - - - - - - - - - - - branch condensed - - - - - - - - - - - - - - - - - - - - - - - - apical hook smooth - - - - - - - - - - - - - - - - - - - - - - - - corolla spherical - - - - - - - - - - - - - - - - - - - - - - - - lamina horizontal - - - - - - - - - - - - - - - - - - - - - - - - petiolule increased thickness - - - - - - - - - - - - - - - - - - - - - - - - petiolule thickness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx truncated - - - - - - - - - - - - - - - - - - - - - - - - petiole smooth - - - - - - - - - - - - - - - - - - - - - - - - stolon pedicellate - - - - - - - - - - - - - - - - - - - - - - - - stolon attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stalk pubescent - - - - - - - - - - - - - - - - - - - - - - - - stalk maturity - - - - - - - - - - - - - - - - - - - - - - - - bark hairy - - - - - - - - - - - - - - - - - - - - - - - - pappus viscid - - - - - - - - - - - - - - - - - - - - - - - - pappus texture - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein prominent - - - - - - - - - - - - - - - - - - - - - - - - tubercle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - mesocarp smooth - - - - - - - - - - - - - - - - - - - - - - - - sepal inserted into - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue increased length - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue length - - - - - - - - - - - - - - - - - - - - - - - - pedicel elongated - - - - - - - - - - - - - - - - - - - - - - - - ligule oblong - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit decreased amount - - - - - - - - - - - - - - - - - - - - - - - - fruit amount - - - - - - - - - - - - - - - - - - - - - - - - seed trichome obtuse - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue concave - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue concavity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall fleshy - - - - - - - - - - - - - - - - - - - - - - - - ovary wall composition - - - - - - - - - - - - - - - - - - - - - - - - fruit laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - awn flattened - - - - - - - - - - - - - - - - - - - - - - - - awn curvature - - - - - - - - - - - - - - - - - - - - - - - - infructescence cylindrical - - - - - - - - - - - - - - - - - - - - - - - - infructescence convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - aril erect - - - - - - - - - - - - - - - - - - - - - - - - ovary wall falciform - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root triangular - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root 2-D shape - - - - - - - - corolla acute - true - - - - - - - - corolla duration - true - - - - - - - - - - - - - - - - - - - - - - - - central zone discoid - - - - - - - - corolla hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - flower yellow - - - - - - - - - - - - - - - - - - - - - - - - stipule raised - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet exserted - - - - - - - - - - - - - - - - - - - - - - - - stem mass - - - - - - - - - - - - - - - - - - - - - - - - stigma trumpet-shaped - - - - - - - - - - - - - - - - - - - - - - - - seed undulate - - - - - - - - - - - - - - - - - - - - - - - - tepal orbicular - - - - - - - - - - - - - - - - - - - - - - - - leaflet swollen - - - - - - - - - - - - - - - - - - - - - - - - leaflet structure - - - - - - - - - - - - - - - - - - - - - - - - anther acuminate - - - - - - - - - - - - - - - - - - - - - - - - peduncle arched - - - - - - - - - - - - - - - - - - - - - - - - peduncle concavity - - - - - - - - - - - - - - - - - - - - - - - - stigma erect - - - - - - - - - - - - - - - - - - - - - - - - bud overlapping - - - - - - - - - - - - - - - - - - - - - - - - receptacle columnar - - - - - - - - - - - - - - - - - - - - - - - - shoot apex exserted - - - - - - - - - - - - - - - - - - - - - - - - seed reniform - - - - - - - - - - - - - - - - - - - - - - - - seed concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - aril waxy - - - - - - - - - - - - - - - - - - - - - - - - aril waxiness - - - - - - - - - - - - - - - - - - - - - - - - stigma spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - valve red - - - - - - - - - - - - - - - - - - - - - - - - valve color - - - - - - - - - - - - - - - - - - - - - - - - anther theca increased thickness - - - - - - - - - - - - - - - - - - - - - - - - anther theca thickness - - - - - - - - root tip male - true - - - - - - - - root tip phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - connective flat - - - - - - - - - - - - - - - - - - - - - - - - connective curvature - - - - - - - - - - - - - - - - - - - - - - - - epidermis white - - - - - - - - - - - - - - - - - - - - - - - - glume decreased amount - - - - - - - - - - - - - - - - - - - - - - - - glume amount - - - - - - - - - - - - - - - - - - - - - - - - bark pubescent - - - - - - - - - - - - - - - - - - - - - - - - bark maturity - - - - - - - - - - - - - - - - - - - - - - - - bark raised - - - - - - - - - - - - - - - - - - - - - - - - peduncle purple - - - - - - - - - - - - - - - - - - - - - - - - filament triangular - - - - - - - - - - - - - - - - - - - - - - - - pistillode trilobed - - - - - - - - - - - - - - - - - - - - - - - - pistillode shape - - - - - - - - - - - - - - - - - - - - - - - - perianth recurved - - - - - - - - - - - - - - - - - - - - - - - - perianth curvature - - - - - - - - - - - - - - - - - - - - - - - - papilla cell smooth - - - - - - - - - - - - - - - - - - - - - - - - petiole scalloped - - - - - - - - - - - - - - - - - - - - - - - - tepal purple - - - - - - - - - - - - - - - - - - - - - - - - tepal color - - - - - - - - - - - - - - - - - - - - - - - - keel white - - - - - - - - - - - - - - - - - - - - - - - - spikelet swollen - - - - - - - - - - - - - - - - - - - - - - - - pericarp striated - - - - - - - - - - - - - - - - - - - - - - - - sepal black - - - - - - - - - - - - - - - - - - - - - - - - style decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - style water composition - - - - - - - - - - - - - - - - - - - - - - - - pedicel sparse - - - - - - - - - - - - - - - - - - - - - - - - keel dorsal to - - - - - - - - - - - - - - - - - - - - - - - - anther divergent from - - - - - - - - - - - - - - - - - - - - - - - - involucre scaly - - - - - - - - - - - - - - - - - - - - - - - - involucre texture - - - - - - - - - - - - - - - - - - - - - - - - plant cell increased length - - - - - - - - - - - - - - - - - - - - - - - - plant cell length - - - - - - - - - - - - - - - - - - - - - - - - endosperm vestigial - - - - - - - - - - - - - - - - - - - - - - - - endosperm structure - - - - - - - - - - - - - - - - - - - - - - - - caruncle grey - - - - - - - - stalk up - true - - - - - - - - - - - - - - - - - - - - - - - - stalk direction - - - - - - - - - - - - - - - - - - - - - - - - ovary wall divergent from - - - - - - - - - - - - - - - - - - - - - - - - perianth acuminate - - - - - - - - - - - - - - - - - - - - - - - - lemma green - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem glistening - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem reflectivity - - - - - - - - - - - - - - - - - - - - - - - - tepal flat - - - - - - - - - - - - - - - - - - - - - - - - tepal curvature - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle areolate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf glabrous - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf pilosity - - - - - - - - - - - - - - - - - - - - - - - - stipule star shaped - - - - - - - - - - - - - - - - - - - - - - - - stipule punctate - - - - - - - - - - - - - - - - - - - - - - - - petiole parallel to - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue attenuate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member leaf-like - - - - - - - - - - - - - - - - - - - - - - - - trichome sterile - - - - - - - - - - - - - - - - - - - - - - - - trichome fertility - - - - - - - - - - - - - - - - - - - - - - - - shoot apex revolute - - - - - - - - - - - - - - - - - - - - - - - - bark exposed - - - - - - - - - - - - - - - - - - - - - - - - tubercle truncated - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle ovate - - - - - - - - - - - - - - - - - - - - - - - - thorn conical - - - - - - - - - - - - - - - - - - - - - - - - thorn convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - perianth dispersed - - - - - - - - - - - - - - - - - - - - - - - - bracteole dentated - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet broken - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet wholeness - - - - - - - - - - - - - - - - - - - - - - - - glume punctate - - - - - - - - - - - - - - - - - - - - - - - - glume spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - seed coat brown - - - - - - - - - - - - - - - - - - - - - - - - flower absent - - - - - - - - - - - - - - - - - - - - - - - - fruit reniform - - - - - - - - - - - - - - - - - - - - - - - - pedicel basal to - - - - - - - - - - - - - - - - - - - - - - - - stem orbicular - - - - - - - - - - - - - - - - - - - - - - - - peduncle mature - - - - - - - - - - - - - - - - - - - - - - - - locule black - - - - - - - - - - - - - - - - - - - - - - - - locule color - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle cauline to - - - - - - - - bulb up - true - - - - - - - - - - - - - - - - - - - - - - - - bulb direction - - - - - - - - - - - - - - - - - - - - - - - - ligule triangular - - - - - - - - - - - - - - - - - - - - - - - - peduncle decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - pappus decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - pappus thickness - - - - - - - - - - - - - - - - - - - - - - - - petiolule curved - - - - - - - - - - - - - - - - - - - - - - - - rhizome old - - - - - - - - - - - - - - - - - - - - - - - - rhizome age - - - - - - - - - - - - - - - - - - - - - - - - staminode obtuse - - - - - - - - - - - - - - - - - - - - - - - - seed coat ventral to - - - - - - - - - - - - - - - - - - - - - - - - seed coat position - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle subulate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf prominent - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf position - - - - - - - - - - - - - - - - - - - - - - - - leaf dark grey - - - - - - - - - - - - - - - - - - - - - - - - stamen sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath bulbous - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein furrowed - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein texture - - - - - - - - - - - - - - - - - - - - - - - - leaflet tomentose - - - - - - - - - - - - - - - - - - - - - - - - calyx basal to - - - - - - - - - - - - - - - - - - - - - - - - stigma zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - stigma symmetry - - - - - - - - - - - - - - - - - - - - - - - - lamina reniform - - - - - - - - - - - - - - - - - - - - - - - - lamina concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - lodicule phenotype - - - - - - - - - - - - - - - - - - - - - - - - lodicule glabrous - - - - - - - - - - - - - - - - - - - - - - - - lodicule pilosity - - - - - - - - - - - - - - - - - - - - - - - - pedicel elliptic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence inflated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - leaflet size - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member dentated - - - - - - - - - - - - - - - - - - - - - - - - axil acuminate - - - - - - - - - - - - - - - - - - - - - - - - corolla maroon - - - - - - - - - - - - - - - - - - - - - - - - axil red - - - - - - - - - - - - - - - - - - - - - - - - growth ring hispid - - - - - - - - - - - - - - - - - - - - - - - - costa simple - - - - - - - - - - - - - - - - - - - - - - - - costa complexity - - - - - - - - - - - - - - - - - - - - - - - - flower lateral to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence elongated - - - - - - - - - - - - - - - - - - - - - - - - flower present - - - - - - - - - - - - - - - - - - - - - - - - ligule autogenous - - - - - - - - - - - - - - - - - - - - - - - - ligule structure - - - - - - - - involucre female - true - - - - - - - - fruit arrested - true - - - - - - - - fruit offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome grooved - - - - - - - - - - - - - - - - - - - - - - - - scutellar node oblong - - - - - - - - - - - - - - - - - - - - - - - - scutellar node 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pericarp smooth - - - - - - - - - - - - - - - - - - - - - - - - pericarp texture - - - - - - - - - - - - - - - - - - - - - - - - epidermis decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - epidermis water composition - - - - - - - - - - - - - - - - - - - - - - - - stipel terminal - - - - - - - - - - - - - - - - - - - - - - - - stipel position - - - - - - - - - - - - - - - - - - - - - - - - lemma raised - - - - - - - - - - - - - - - - - - - - - - - - pollen level with - - - - - - - - - - - - - - - - - - - - - - - - pollen position - - - - - - - - - - - - - - - - - - - - - - - - style basal to - - - - - - - - - - - - - - - - - - - - - - - - testa rough - - - - - - - - - - - - - - - - - - - - - - - - fruit cuspidate - - - - - - - - - - - - - - - - - - - - - - - - lamina raised - - - - - - - - - - - - - - - - - - - - - - - - costa glabrous - - - - - - - - - - - - - - - - - - - - - - - - costa pilosity - - - - - - - - - - - - - - - - - - - - - - - - pollen black - - - - - - - - - - - - - - - - - - - - - - - - calyx conspicuous - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal oblong - - - - - - - - - - - - - - - - - - - - - - - - stem alternate placement - - - - - - - - - - - - - - - - - - - - - - - - pericarp rough - - - - - - - - - - - - - - - - - - - - - - - - anther present - - - - - - - - - - - - - - - - - - - - - - - - anther amount - - - - - - - - - - - - - - - - - - - - - - - - leaflet orange - - - - - - - - - - - - - - - - - - - - - - - - lemma cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - lemma composition - - - - - - - - perianth subacute - true - - - - - - - - perianth duration - true - - - - - - - - leaflet acute - true - - - - - - - - leaflet duration - true - - - - - - - - - - - - - - - - - - - - - - - - perianth oblique to - - - - - - - - - - - - - - - - - - - - - - - - sepal broken - - - - - - - - - - - - - - - - - - - - - - - - sepal wholeness - - - - - - - - - - - - - - - - - - - - - - - - leaf broken - - - - - - - - - - - - - - - - - - - - - - - - leaf wholeness - - - - - - - - - - - - - - - - - - - - - - - - bracteole broad - - - - - - - - - - - - - - - - - - - - - - - - carpel mature - - - - - - - - - - - - - - - - - - - - - - - - infructescence oblong - - - - - - - - - - - - - - - - - - - - - - - - infructescence 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract circular - - - - - - - - - - - - - - - - - - - - - - - - receptacle protruding - - - - - - - - - - - - - - - - - - - - - - - - rhizome light brown - - - - - - - - - - - - - - - - - - - - - - - - branch diameter - - - - - - - - axillary bud meristem male - true - - - - - - - - axillary bud meristem phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - stigma attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaflet young - - - - - - - - - - - - - - - - - - - - - - - - leaflet age - - - - - - - - - - - - - - - - - - - - - - - - central zone elliptic - - - - - - - - - - - - - - - - - - - - - - - - lemma rugose - - - - - - - - - - - - - - - - - - - - - - - - lemma surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - root tip cylindrical - - - - - - - - - - - - - - - - - - - - - - - - receptacle length - - - - - - - - - - - - - - - - - - - - - - - - bark vertical to - - - - - - - - - - - - - - - - - - - - - - - - seed decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - seed water composition - - - - - - - - - - - - - - - - - - - - - - - - petiolule decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - nectary linear - - - - - - - - - - - - - - - - - - - - - - - - style firm - - - - - - - - - - - - - - - - - - - - - - - - style hardness - - - - - - - - - - - - - - - - - - - - - - - - peduncle ovate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall pedicellate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall attachment quality - - - - - - - - - - - - - - - - - - - - - - - - aril hairy - - - - - - - - - - - - - - - - - - - - - - - - aril pilosity - - - - - - - - - - - - - - - - - - - - - - - - filament fertile - - - - - - - - - - - - - - - - - - - - - - - - cotyledon smooth - - - - - - - - - - - - - - - - - - - - - - - - cotyledon texture - - - - - - - - - - - - - - - - - - - - - - - - leaf furrowed - - - - - - - - - - - - - - - - - - - - - - - - testa reniform - - - - - - - - - - - - - - - - - - - - - - - - testa concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lenticel grooved - - - - - - - - - - - - - - - - - - - - - - - - seed trichome autogenous - - - - - - - - - - - - - - - - - - - - - - - - - - - - strobilus phenotype - - - - - - - - - - - - - - - - - - - - - - - - strobilus obtuse - - - - - - - - - - - - - - - - - - - - - - - - strobilus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - anther yellow - - - - - - - - - - - - - - - - - - - - - - - - axil ovate - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus brittle - - - - - - - - - - - - - - - - - - - - - - - - bud star shaped - - - - - - - - - - - - - - - - - - - - - - - - plant callus fleshy - - - - - - - - - - - - - - - - - - - - - - - - plant callus composition - - - - - - - - - - - - - - - - - - - - - - - - carpel curved - - - - - - - - - - - - - - - - - - - - - - - - carpel curvature - - - - - - - - - - - - - - - - - - - - - - - - bud hairy - - - - - - - - - - - - - - - - - - - - - - - - style pedicellate - - - - - - - - - - - - - - - - - - - - - - - - style attachment quality - - - - - - - - - - - - - - - - - - - - - - - - style clavate - - - - - - - - - - - - - - - - - - - - - - - - banner petal raised - - - - - - - - - - - - - - - - - - - - - - - - hypanthium cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - hypanthium concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath diameter - - - - - - - - - - - - - - - - - - - - - - - - sorus young - - - - - - - - - - - - - - - - - - - - - - - - sorus age - - - - - - - - - - - - - - - - - - - - - - - - axil condensed - - - - - - - - - - - - - - - - - - - - - - - - connective arched - - - - - - - - - - - - - - - - - - - - - - - - connective concavity - - - - - - - - - - - - - - - - - - - - - - - - ligule wrinkled - - - - - - - - - - - - - - - - - - - - - - - - ligule texture - - - - - - - - - - - - - - - - - - - - - - - - testa furrowed - - - - - - - - - - - - - - - - - - - - - - - - valve striated - - - - - - - - lemma hermaphrodite - true - - - - - - - - lemma phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - leaf crowded - - - - - - - - - - - - - - - - - - - - - - - - hilum oblong - - - - - - - - - - - - - - - - - - - - - - - - hilum 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower discoid - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member notched - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member concavity - - - - - - - - - - - - - - - - - - - - - - - - lamina firm - - - - - - - - - - - - - - - - - - - - - - - - lamina hardness - - - - - - - - - - - - - - - - - - - - - - - - stem spotted - - - - - - - - - - - - - - - - - - - - - - - - stem color pattern - - - - - - - - - - - - - - - - - - - - - - - - sepal curved - - - - - - - - - - - - - - - - - - - - - - - - sepal curvature - - - - - - - - - - - - - - - - - - - - - - - - endocarp circular - - - - - - - - - - - - - - - - - - - - - - - - central zone increased length - - - - - - - - - - - - - - - - - - - - - - - - central zone length - - - - - - - - - - - - - - - - - - - - - - - - stamen pedicellate - - - - - - - - - - - - - - - - - - - - - - - - stamen attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bract decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - bract water composition - - - - - - - - - - - - - - - - - - - - - - - - shoot apex cuspidate - - - - - - - - bract hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - petiole punctate - - - - - - - - - - - - - - - - - - - - - - - - costa swollen - - - - - - - - - - - - - - - - - - - - - - - - costa structure - - - - - - - - - - - - - - - - - - - - - - - - ligule dorsal to - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf scalloped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence whorled - - - - - - - - - - - - - - - - - - - - - - - - branch broken - - - - - - - - - - - - - - - - - - - - - - - - branch wholeness - - - - - - - - - - - - - - - - - - - - - - - - root decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - calyx mature - - - - - - - - - - - - - - - - - - - - - - - - ovary wall inflexible - - - - - - - - - - - - - - - - - - - - - - - - ovary wall flexibility - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle falciform - - - - - - - - - - - - - - - - - - - - - - - - fruit mass - - - - - - - - - - - - - - - - - - - - - - - - cotyledon angular - - - - - - - - - - - - - - - - - - - - - - - - plant spore granular - - - - - - - - - - - - - - - - - - - - - - - - plant spore composition - - - - - - - - - - - - - - - - - - - - - - - - leaf base articulated with - - - - - - - - - - - - - - - - - - - - - - - - leaf base structure - - - - - - - - - - - - - - - - - - - - - - - - anther lobed - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue obovate - - - - - - - - - - - - - - - - - - - - - - - - style level with - - - - - - - - leaf axil up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf axil direction - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus emarginate - - - - - - - - - - - - - - - - - - - - - - - - gynophore absent - - - - - - - - - - - - - - - - - - - - - - - - gynophore amount - - - - - - - - - - - - - - - - - - - - - - - - fruit light brown - - - - - - - - - - - - - - - - - - - - - - - - mesocarp elliptic - - - - - - - - - - - - - - - - - - - - - - - - mesocarp 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiolule lanceolate - - - - - - - - - - - - - - - - - - - - - - - - pericarp elongated - - - - - - - - - - - - - - - - - - - - - - - - thorn cylindrical - - - - - - - - - - - - - - - - - - - - - - - - testa striated - - - - - - - - - - - - - - - - - - - - - - - - testa shape - - - - - - - - - - - - - - - - - - - - - - - - anther falciform - - - - - - - - - - - - - - - - - - - - - - - - lower glume linear - - - - - - - - - - - - - - - - - - - - - - - - lower glume shape - - - - - - - - - - - - - - - - - - - - - - - - lenticel dark brown - - - - - - - - - - - - - - - - - - - - - - - - lenticel color - - - - - - - - - - - - - - - - - - - - - - - - tepal obtuse - - - - - - - - - - - - - - - - - - - - - - - - glume smooth - - - - - - - - - - - - - - - - - - - - - - - - branch warty - - - - - - - - - - - - - - - - - - - - - - - - hypanthium deep pink - - - - - - - - - - - - - - - - - - - - - - - - hypanthium color - - - - - - - - - - - - - - - - - - - - - - - - exocarp fleshy - - - - - - - - - - - - - - - - - - - - - - - - endocarp separating - - - - - - - - - - - - - - - - - - - - - - - - endocarp structure - - - - - - - - - - - - - - - - - - - - - - - - carpel bifurcated - - - - - - - - - - - - - - - - - - - - - - - - carpel branchiness - - - - - - - - - - - - - - - - - - - - - - - - tubercle hairy - - - - - - - - - - - - - - - - - - - - - - - - leaflet lateral to - - - - - - - - - - - - - - - - - - - - - - - - peristome basal to - - - - - - - - - - - - - - - - - - - - - - - - keel lanceolate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp red - - - - - - - - - - - - - - - - - - - - - - - - corolla orbicular - - - - - - - - - - - - - - - - - - - - - - - - plant embryo split - - - - - - - - - - - - - - - - - - - - - - - - androecium cylindrical - - - - - - - - - - - - - - - - - - - - - - - - androecium convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - trichome triangular - - - - - - - - - - - - - - - - - - - - - - - - petiole young - - - - - - - - - - - - - - - - - - - - - - - - bracteole truncated - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf unicellular - - - - - - - - - - - - - - - - - - - - - - - - leaf cellularity - - - - - - - - - - - - - - - - - - - - - - - - epicalyx basal to - - - - - - - - - - - - - - - - - - - - - - - - epicalyx position - - - - - - - - - - - - - - - - - - - - - - - - seed obtuse - - - - - - - - - - - - - - - - - - - - - - - - whole plant hispid - - - - - - - - - - - - - - - - - - - - - - - - leaflet pinnate - - - - - - - - - - - - - - - - - - - - - - - - calyx immature - - - - - - - - - - - - - - - - - - - - - - - - bud opposite - - - - - - - - - - - - - - - - - - - - - - - - stamen attenuate - - - - - - - - - - - - - - - - - - - - - - - - disk flower linear - - - - - - - - - - - - - - - - - - - - - - - - axil waxy - - - - - - - - - - - - - - - - - - - - - - - - axil waxiness - - - - - - - - - - - - - - - - - - - - - - - - stigma fused with - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal glandular - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal morphology - - - - - - - - - - - - - - - - - - - - - - - - stamen flattened - - - - - - - - - - - - - - - - - - - - - - - - seed translucent - - - - - - - - - - - - - - - - - - - - - - - - ligule oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower truncated - - - - - - - - - - - - - - - - - - - - - - - - carpel attenuate - - - - - - - - - - - - - - - - - - - - - - - - carpel sharpness - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence linear - - - - - - - - - - - - - - - - - - - - - - - - trichome terminal - - - - - - - - - - - - - - - - - - - - - - - - axil clavate - - - - - - - - - - - - - - - - - - - - - - - - axil concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bracteole age - - - - - - - - - - - - - - - - - - - - - - - - petiole scarred - - - - - - - - - - - - - - - - - - - - - - - - stigma circular - - - - - - - - - - - - - - - - - - - - - - - - involucre white - - - - - - - - - - - - - - - - - - - - - - - - - - - - resin canal phenotype - - - - - - - - - - - - - - - - - - - - - - - - resin canal pedicellate - - - - - - - - - - - - - - - - - - - - - - - - resin canal attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system curved - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system curvature - - - - - - - - - - - - - - - - - - - - - - - - awn glabrous - - - - - - - - - - - - - - - - - - - - - - - - awn pilosity - - - - - - - - - - - - - - - - - - - - - - - - stamen broken - - - - - - - - - - - - - - - - - - - - - - - - stamen wholeness - - - - - - - - - - - - - - - - - - - - - - - - receptacle crowded - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence circular - - - - - - - - - - - - - - - - - - - - - - - - lamina texture - - - - - - - - - - - - - - - - - - - - - - - - receptacle broad - - - - - - - - - - - - - - - - - - - - - - - - sepal trilobed - - - - - - - - - - - - - - - - - - - - - - - - exocarp cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - petiolule swollen - - - - - - - - - - - - - - - - - - - - - - - - petiolule structure - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system opposite - - - - - - - - - - - - - - - - - - - - - - - - - - - - vascular system phenotype - - - - - - - - - - - - - - - - - - - - - - - - vascular system complex - - - - - - - - - - - - - - - - - - - - - - - - vascular system complexity - - - - - - - - - - - - - - - - - - - - - - - - staminode sterile - - - - - - - - - - - - - - - - - - - - - - - - staminode fertility - - - - - - - - - - - - - - - - - - - - - - - - thorn erect - - - - - - - - - - - - - - - - - - - - - - - - thorn position - - - - - - - - - - - - - - - - - - - - - - - - stem transparent - - - - - - - - - - - - - - - - - - - - - - - - stem opacity - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus terminal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence white - - - - - - - - - - - - - - - - - - - - - - - - filament posterior to - - - - - - - - - - - - - - - - - - - - - - - - bark spotted - - - - - - - - - - - - - - - - - - - - - - - - placenta straight - - - - - - - - - - - - - - - - - - - - - - - - placenta shape - - - - - - - - - - - - - - - - - - - - - - - - tubercle obtuse - - - - - - - - - - - - - - - - - - - - - - - - pedicel decreased amount - - - - - - - - - - - - - - - - - - - - - - - - stipule erect - - - - - - - - - - - - - - - - - - - - - - - - calyx pedicellate - - - - - - - - - - - - - - - - - - - - - - - - calyx attachment quality - - - - - - - - - - - - - - - - - - - - - - - - fruit dentated - - - - - - - - - - - - - - - - - - - - - - - - receptacle present - - - - - - - - - - - - - - - - - - - - - - - - receptacle amount - - - - - - - - - - - - - - - - - - - - - - - - branch dentated - - - - - - - - - - - - - - - - - - - - - - - - trichome erect - - - - - - - - - - - - - - - - - - - - - - - - perianth articulated with - - - - - - - - - - - - - - - - - - - - - - - - root tip kinked - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet oblong - - - - - - - - - - - - - - - - - - - - - - - - scutellar node condensed - - - - - - - - - - - - - - - - - - - - - - - - prickle erect - - - - - - - - - - - - - - - - - - - - - - - - prickle position - - - - - - - - - - - - - - - - - - - - - - - - bracteole ventral to - - - - - - - - - - - - - - - - - - - - - - - - bud columnar - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root pubescent - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root maturity - - - - - - - - - - - - - - - - - - - - - - - - petal constricted - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina obovate - - - - - - - - - - - - - - - - - - - - - - - - shoot internode inflexible - - - - - - - - - - - - - - - - - - - - - - - - shoot internode flexibility - - - - - - - - - - - - - - - - - - - - - - - - seed trichome pubescent - - - - - - - - - - - - - - - - - - - - - - - - seed trichome maturity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem elliptic - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - gynophore triangular - - - - - - - - - - - - - - - - - - - - - - - - gynophore 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - staminode absent - - - - - - - - - - - - - - - - - - - - - - - - staminode amount - - - - - - - - - - - - - - - - - - - - - - - - perianth differentiated - - - - - - - - - - - - - - - - - - - - - - - - perianth cellular potency - - - - - - - - - - - - - - - - - - - - - - - - bud orange - - - - - - - - - - - - - - - - - - - - - - - - root tip condensed - - - - - - - - - - - - - - - - - - - - - - - - root tip structure - - - - - - - - - - - - - - - - - - - - - - - - perianth hard - - - - - - - - - - - - - - - - - - - - - - - - perianth hardness - - - - - - - - - - - - - - - - - - - - - - - - root tip spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - testa conspicuous - - - - - - - - - - - - - - - - - - - - - - - - calyx dark brown - - - - - - - - - - - - - - - - - - - - - - - - rhizome oblong - - - - - - - - - - - - - - - - - - - - - - - - rhizome 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract increased thickness - - - - - - - - - - - - - - - - - - - - - - - - sepal hispid - - - - - - - - - - - - - - - - - - - - - - - - petal cupulate - - - - - - - - - - - - - - - - - - - - - - - - bark red - - - - - - - - - - - - - - - - - - - - - - - - branch distributed - - - - - - - - - - - - - - - - - - - - - - - - whole plant star shaped - - - - - - - - - - - - - - - - - - - - - - - - tubercle oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf orbicular - - - - - - - - - - - - - - - - - - - - - - - - petal falciform - - - - - - - - - - - - - - - - - - - - - - - - bud banded - - - - - - - - - - - - - - - - - - - - - - - - bud color pattern - - - - - - - - - - - - - - - - - - - - - - - - apical hook swollen - - - - - - - - - - - - - - - - - - - - - - - - apical hook structure - - - - - - - - - - - - - - - - - - - - - - - - pappus erose - - - - - - - - tubercle acute - true - - - - - - - - tubercle duration - true - - - - - - - - - - - - - - - - - - - - - - - - thorn glabrous - - - - - - - - - - - - - - - - - - - - - - - - thorn pilosity - - - - - - - - - - - - - - - - - - - - - - - - bud exposed - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell elliptic - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - infructescence flexible - - - - - - - - - - - - - - - - - - - - - - - - infructescence flexibility - - - - - - - - - - - - - - - - - - - - - - - - exocarp brown - - - - - - - - - - - - - - - - - - - - - - - - bulb increased length - - - - - - - - - - - - - - - - - - - - - - - - bulb length - - - - - - - - - - - - - - - - - - - - - - - - central zone obtuse - - - - - - - - - - - - - - - - - - - - - - - - style broad - - - - - - - - - - - - - - - - - - - - - - - - vascular system acuminate - - - - - - - - - - - - - - - - - - - - - - - - vascular system sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system spatulate - - - - - - - - - - - - - - - - - - - - - - - - stem dark green - - - - - - - - - - - - - - - - - - - - - - - - receptacle cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - receptacle concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle branched - - - - - - - - - - - - - - - - - - - - - - - - whole plant circular - - - - - - - - - - - - - - - - - - - - - - - - calyx blue - - - - - - - - - - - - - - - - - - - - - - - - rhizome dentated - - - - - - - - - - - - - - - - - - - - - - - - style ventral to - - - - - - - - - - - - - - - - - - - - - - - - branch conical - - - - - - - - - - - - - - - - - - - - - - - - sepal warty - - - - - - - - - - - - - - - - - - - - - - - - stalk tomentose - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus glabrous - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus pilosity - - - - - - - - - - - - - - - - - - - - - - - - spikelet cylindrical - - - - - - - - - - - - - - - - - - - - - - - - plant embryo erect - - - - - - - - - - - - - - - - - - - - - - - - plant embryo position - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal drooping - - - - - - - - - - - - - - - - - - - - - - - - apical hook lobed - - - - - - - - - - - - - - - - - - - - - - - - androecium sterile - - - - - - - - - - - - - - - - - - - - - - - - androecium fertility - - - - - - - - flower fascicle hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - leaf red - - - - - - - - - - - - - - - - - - - - - - - - lenticel smooth - - - - - - - - - - - - - - - - - - - - - - - - flower bifurcated - - - - - - - - - - - - - - - - - - - - - - - - flower branchiness - - - - - - - - - - - - - - - - - - - - - - - - exocarp hard - - - - - - - - - - - - - - - - - - - - - - - - exocarp hardness - - - - - - - - - - - - - - - - - - - - - - - - perianth anterior to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall brown - - - - - - - - - - - - - - - - - - - - - - - - ovary wall color - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system cuneate - - - - - - - - - - - - - - - - - - - - - - - - axil increased size - - - - - - - - - - - - - - - - - - - - - - - - axil size - - - - - - - - - - - - - - - - - - - - - - - - ovary wall increased thickness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall thickness - - - - - - - - - - - - - - - - - - - - - - - - plant cell acuminate - - - - - - - - - - - - - - - - - - - - - - - - plant cell sharpness - - - - - - - - - - - - - - - - - - - - - - - - epidermis young - - - - - - - - - - - - - - - - - - - - - - - - epidermis age - - - - - - - - - - - - - - - - - - - - - - - - cotyledon dorsal to - - - - - - - - - - - - - - - - - - - - - - - - aril fleshy - - - - - - - - - - - - - - - - - - - - - - - - aril composition - - - - - - - - - - - - - - - - - - - - - - - - anther reniform - - - - - - - - - - - - - - - - - - - - - - - - leaf flaky - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf increased thickness - - - - - - - - - - - - - - - - - - - - - - - - costa attenuate - - - - - - - - - - - - - - - - - - - - - - - - costa sharpness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle glandular - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle morphology - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure cylindrical - - - - - - - - - - - - - - - - - - - - - - - - anther theca flattened - - - - - - - - - - - - - - - - - - - - - - - - anther theca curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system oblong - - - - - - - - - - - - - - - - - - - - - - - - tubercle inflexible - - - - - - - - - - - - - - - - - - - - - - - - tubercle flexibility - - - - - - - - - - - - - - - - - - - - - - - - rhizome slender - - - - - - - - - - - - - - - - - - - - - - - - calyx articulated with - - - - - - - - - - - - - - - - - - - - - - - - calyx inflated - - - - - - - - - - - - - - - - - - - - - - - - calyx structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - style yellow - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue punctate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - exocarp furrowed - - - - - - - - - - - - - - - - - - - - - - - - ligule auriculate - - - - - - - - - - - - - - - - - - - - - - - - stipule falciform - - - - - - - - - - - - - - - - - - - - - - - - root arched - - - - - - - - - - - - - - - - - - - - - - - - root concavity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall viscous - - - - - - - - - - - - - - - - - - - - - - - - ovary wall viscosity - - - - - - - - - - - - - - - - - - - - - - - - stamen triangular - - - - - - - - - - - - - - - - - - - - - - - - stem dispersed - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium spherical - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle convex - - - - - - - - - - - - - - - - - - - - - - - - receptacle concavity - - - - - - - - - - - - - - - - - - - - - - - - perianth dark purple - - - - - - - - - - - - - - - - - - - - - - - - leaf distichous - - - - - - - - - - - - - - - - - - - - - - - - branch whorled - - - - - - - - - - - - - - - - - - - - - - - - calyx flat - - - - - - - - - - - - - - - - - - - - - - - - rhizome present - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member drooping - - - - - - - - - - - - - - - - - - - - - - - - shoot apex arched - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem whorled - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - branch level with - - - - - - - - - - - - - - - - - - - - - - - - ovary wall undulate - - - - - - - - - - - - - - - - - - - - - - - - ligule decreased amount - - - - - - - - - - - - - - - - - - - - - - - - heartwood striated - - - - - - - - - - - - - - - - - - - - - - - - fruit absent - - - - - - - - - - - - - - - - - - - - - - - - filament ovate - - - - - - - - - - - - - - - - - - - - - - - - rhizome orange - - - - - - - - - - - - - - - - - - - - - - - - connective oblong - - - - - - - - - - - - - - - - - - - - - - - - connective 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stamen circular - - - - - - - - - - - - - - - - - - - - - - - - seed white - - - - - - - - - - - - - - - - - - - - - - - - stipule tomentose - - - - - - - - - - - - - - - - - - - - - - - - scutellar node cauline to - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf ovate - - - - - - - - - - - - - - - - - - - - - - - - petal raised - - - - - - - - leaf female - true - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein circular - - - - - - - - - - - - - - - - - - - - - - - - seed trichome simple - - - - - - - - - - - - - - - - - - - - - - - - seed trichome complexity - - - - - - - - - - - - - - - - - - - - - - - - leaflet circular - - - - - - - - - - - - - - - - - - - - - - - - stem hispid - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem arched - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem concavity - - - - - - - - - - - - - - - - - - - - - - - - stamen glandular - - - - - - - - - - - - - - - - - - - - - - - - stamen morphology - - - - - - - - - - - - - - - - - - - - - - - - petiolule wrinkled - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence star shaped - - - - - - - - shoot system hermaphrodite - true - - - - - - - - shoot system phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - tepal caudate - - - - - - - - - - - - - - - - - - - - - - - - stigma reniform - - - - - - - - - - - - - - - - - - - - - - - - cotyledon grooved - - - - - - - - - - - - - - - - - - - - - - - - corm brittle - - - - - - - - - - - - - - - - - - - - - - - - papilla cell elliptic - - - - - - - - - - - - - - - - - - - - - - - - sepal coiled - - - - - - - - - - - - - - - - - - - - - - - - sepal coiling - - - - - - - - - - - - - - - - - - - - - - - - seed age - - - - - - - - - - - - - - - - - - - - - - - - aril oblique to - - - - - - - - - - - - - - - - - - - - - - - - epidermis sparse - - - - - - - - - - - - - - - - - - - - - - - - epidermis spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure purple - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure color - - - - - - - - - - - - - - - - - - - - - - - - stigma separating - - - - - - - - - - - - - - - - - - - - - - - - staminode clavate - - - - - - - - - - - - - - - - - - - - - - - - staminode concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - filament dorsal to - - - - - - - - - - - - - - - - - - - - - - - - stamen discoid - - - - - - - - - - - - - - - - - - - - - - - - keel hispid - - - - - - - - - - - - - - - - - - - - - - - - style punctiform - - - - - - - - - - - - - - - - - - - - - - - - petal emarginate - - - - - - - - - - - - - - - - - - - - - - - - stipel attenuate - - - - - - - - - - - - - - - - - - - - - - - - stipel sharpness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence attenuate - - - - - - - - - - - - - - - - - - - - - - - - keel acuminate - - - - - - - - - - - - - - - - - - - - - - - - flower bilateral - flower bilaterally symmetrical - flower zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - flower symmetry - - - - - - - - - - - - - - - - - - - - - - - - bark ridged - - - - - - - - - - - - - - - - - - - - - - - - crown root branched - - - - - - - - - - - - - - - - - - - - - - - - crown root branchiness - - - - - - - - - - - - - - - - - - - - - - - - seed trichome tomentose - - - - - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system phenotype - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system purple - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system color - - - - - - - - - - - - - - - - - - - - - - - - petal scalloped - - - - - - - - - - - - - - - - - - - - - - - - staminode curved - - - - - - - - - - - - - - - - - - - - - - - - staminode curvature - - - - - - - - - - - - - - - - - - - - - - - - stereome white - - - - - - - - - - - - - - - - - - - - - - - - peristome flattened - - - - - - - - - - - - - - - - - - - - - - - - peristome curvature - - - - - - - - - - - - - - - - - - - - - - - - thorn linear - - - - - - - - - - - - - - - - - - - - - - - - thorn shape - - - - - - - - - - - - - - - - - - - - - - - - stem unbranched - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member spatulate - - - - - - - - - - - - - - - - - - - - - - - - staminode subulate - - - - - - - - - - - - - - - - - - - - - - - - bud sparse - - - - - - - - - - - - - - - - - - - - - - - - bud spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - axillary bud phenotype - - - - - - - - - - - - - - - - - - - - - - - - axillary bud white - - - - - - - - - - - - - - - - - - - - - - - - axillary bud color - - - - - - - - - - - - - - - - - - - - - - - - corolla swollen - - - - - - - - - - - - - - - - - - - - - - - - sepal fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf folded - - - - - - - - - - - - - - - - - - - - - - - - leaf surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - lemma oblong - - - - - - - - - - - - - - - - - - - - - - - - petal basal to - - - - - - - - - - - - - - - - - - - - - - - - keel ovate - - - - - - - - - - - - - - - - - - - - - - - - keel convex 3-D shape - - - - - - - - bark down - true - - - - - - - - - - - - - - - - - - - - - - - - stem multiple - - - - - - - - - - - - - - - - - - - - - - - - inflorescence oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence discoid - - - - - - - - - - - - - - - - - - - - - - - - stigma flat - - - - - - - - - - - - - - - - - - - - - - - - leaf emarginate - - - - - - - - - - - - - - - - - - - - - - - - stem curled - - - - - - - - - - - - - - - - - - - - - - - - disk flower dentated - - - - - - - - - - - - - - - - - - - - - - - - whole plant ovate - - - - - - - - - - - - - - - - - - - - - - - - anther parallel to - - - - - - - - - - - - - - - - - - - - - - - - keel basal to - - - - - - - - - - - - - - - - - - - - - - - - hypanthium funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - hypanthium shape - - - - - - - - ovary wall premature - true - - - - - - - - ovary wall onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein reniform - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem ovate - - - - - - - - - - - - - - - - - - - - - - - - corolla lateral to - - - - - - - - - - - - - - - - - - - - - - - - bract auriculate - - - - - - - - - - - - - - - - - - - - - - - - testa grey - - - - - - - - - - - - - - - - - - - - - - - - bark inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - branch decreased amount - - - - - - - - - - - - - - - - - - - - - - - - branch amount - - - - - - - - - - - - - - - - - - - - - - - - seed trichome triangular - - - - - - - - - - - - - - - - - - - - - - - - leaf dry - - - - - - - - - - - - - - - - - - - - - - - - leaf wetness - - - - - - - - - - - - - - - - - - - - - - - - bract crowded - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle arched - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle concavity - - - - - - - - - - - - - - - - - - - - - - - - whole plant age - - - - - - - - - - - - - - - - - - - - - - - - filament acuminate - - - - - - - - - - - - - - - - - - - - - - - - pistillode present - - - - - - - - - - - - - - - - - - - - - - - - pistillode amount - - - - - - - - - - - - - - - - - - - - - - - - petiolule glistening - - - - - - - - - - - - - - - - - - - - - - - - petiolule reflectivity - - - - - - - - - - - - - - - - - - - - - - - - lenticel increased thickness - - - - - - - - - - - - - - - - - - - - - - - - sapwood yellow - - - - - - - - - - - - - - - - - - - - - - - - awn curved - - - - - - - - - - - - - - - - - - - - - - - - trichome spherical - - - - - - - - - - - - - - - - - - - - - - - - trichome convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed trichome acuminate - - - - - - - - - - - - - - - - - - - - - - - - bud open - - - - - - - - - - - - - - - - - - - - - - - - calyx arched - - - - - - - - - - - - - - - - - - - - - - - - stem congested - - - - - - - - - - - - - - - - - - - - - - - - involucre aggregated - - - - - - - - - - - - - - - - - - - - - - - - bract green - - - - - - - - - - - - - - - - - - - - - - - - seed trichome dorsal to - - - - - - - - - - - - - - - - - - - - - - - - stigma funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence grooved - - - - - - - - - - - - - - - - - - - - - - - - petal green - - - - - - - - - - - - - - - - - - - - - - - - prickle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - prickle thickness - - - - - - - - - - - - - - - - - - - - - - - - calyx osseous - - - - - - - - - - - - - - - - - - - - - - - - calyx composition - - - - - - - - - - - - - - - - - - - - - - - - leaf axil pedunculate - - - - - - - - - - - - - - - - - - - - - - - - leaf axil structure - - - - - - - - - - - - - - - - - - - - - - - - lemma fertile - - - - - - - - petiolule acute - true - - - - - - - - petiolule duration - true - - - - - - - - - - - - - - - - - - - - - - - - scutellar node furrowed - - - - - - - - - - - - - - - - - - - - - - - - endocarp granular - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein hairy - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle cauline to - - - - - - - - - - - - - - - - - - - - - - - - stem vertical - - - - - - - - - - - - - - - - - - - - - - - - thorn falciform - - - - - - - - - - - - - - - - - - - - - - - - leaf axil unbranched - - - - - - - - - - - - - - - - - - - - - - - - leaf axil branchiness - - - - - - - - inflorescence subacute - - true - - - - - - - - - - - - - - - - - - - - - - - - disk flower hairy - - - - - - - - - - - - - - - - - - - - - - - - valve condensed - - - - - - - - - - - - - - - - - - - - - - - - valve structure - - - - - - - - - - - - - - - - - - - - - - - - leaf swollen - - - - - - - - - - - - - - - - - - - - - - - - tuber old - - - - - - - - - - - - - - - - - - - - - - - - tuber age - - - - - - - - - - - - - - - - - - - - - - - - seed spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - stalk horizontal - - - - - - - - - - - - - - - - - - - - - - - - stereome linear - - - - - - - - - - - - - - - - - - - - - - - - stereome shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal serrated - - - - - - - - - - - - - - - - - - - - - - - - bud striated - - - - - - - - - - - - - - - - - - - - - - - - bark furrowed - - - - - - - - - - - - - - - - - - - - - - - - hilum purple - - - - - - - - - - - - - - - - - - - - - - - - sepal cupulate - - - - - - - - - - - - - - - - - - - - - - - - sepal concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet obovate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence brown - - - - - - - - - - - - - - - - - - - - - - - - petiole emarginate - - - - - - - - - - - - - - - - - - - - - - - - stigma prominent - - - - - - - - - - - - - - - - - - - - - - - - stigma concave - - - - - - - - - - - - - - - - - - - - - - - - stigma concavity - - - - - - - - - - - - - - - - - - - - - - - - crown root raised - - - - - - - - peduncle female - true - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet flattened - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet curvature - - - - - - - - - - - - - - - - - - - - - - - - testa granular - - - - - - - - - - - - - - - - - - - - - - - - androecium subcircular - - - - - - - - - - - - - - - - - - - - - - - - androecium 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle yellow - - - - - - - - - - - - - - - - - - - - - - - - receptacle adaxial to - - - - - - - - - - - - - - - - - - - - - - - - caruncle yellow - - - - - - - - - - - - - - - - - - - - - - - - costa raised - - - - - - - - - - - - - - - - - - - - - - - - costa shape - - - - - - - - - - - - - - - - - - - - - - - - stalk dark brown - - - - - - - - - - - - - - - - - - - - - - - - corolla inflexible - - - - - - - - - - - - - - - - - - - - - - - - corolla flexibility - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf undulate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal auriculate - - - - - - - - - - - - - - - - - - - - - - - - filament pedicellate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence warty - - - - - - - - - - - - - - - - - - - - - - - - filament swollen - - - - - - - - - - - - - - - - - - - - - - - - tubercle raised - - - - - - - - - - - - - - - - - - - - - - - - flower swollen - - - - - - - - - - - - - - - - - - - - - - - - flower separating - - - - - - - - - - - - - - - - - - - - - - - - petal coiled - - - - - - - - - - - - - - - - - - - - - - - - petal coiling - - - - - - - - - - - - - - - - - - - - - - - - pith split - - - - - - - - - - - - - - - - - - - - - - - - pith shape - - - - - - - - - - - - - - - - - - - - - - - - petiole serrated - - - - - - - - bract premature - true - - - - - - - - bract onset quality - true - - - - - - - - axil male - true - - - - - - - - axil phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein glabrous - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein pilosity - - - - - - - - - - - - - - - - - - - - - - - - rhizome matted - - - - - - - - - - - - - - - - - - - - - - - - disk flower furrowed - - - - - - - - - - - - - - - - - - - - - - - - disk flower texture - - - - - - - - - - - - - - - - - - - - - - - - calyx dense - - - - - - - - - - - - - - - - - - - - - - - - calyx mass density - - - - - - - - - - - - - - - - - - - - - - - - testa hairy - - - - - - - - - - - - - - - - - - - - - - - - testa pilosity - - - - - - - - - - - - - - - - - - - - - - - - axil erect - - - - - - - - - - - - - - - - - - - - - - - - tubercle grooved - - - - - - - - - - - - - - - - - - - - - - - - tubercle texture - - - - - - - - - - - - - - - - - - - - - - - - stem dilated - - - - - - - - - - - - - - - - - - - - - - - - trichome alternate placement - - - - - - - - sepal male - true - - - - - - - - - - - - - - - - - - - - - - - - seed trichome linear - - - - - - - - - - - - - - - - - - - - - - - - fruit cuneate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence lobed - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue trilobed - - - - - - - - - - - - - - - - - - - - - - - - fruit discoid - - - - - - - - - - - - - - - - - - - - - - - - whole plant evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - whole plant shedability - - - - - - - - - - - - - - - - - - - - - - - - petal lobed - - - - - - - - - - - - - - - - - - - - - - - - tuber orange - - - - - - - - - - - - - - - - - - - - - - - - tuber color - - - - - - - - - - - - - - - - - - - - - - - - whole plant leaf-like - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein falciform - - - - - - - - - - - - - - - - - - - - - - - - petiolule grooved - - - - - - - - - - - - - - - - - - - - - - - - peristome concave - - - - - - - - - - - - - - - - - - - - - - - - peristome concavity - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium sharpness - - - - - - - - - - - - - - - - - - - - - - - - plant cell caudate - - - - - - - - - - - - - - - - - - - - - - - - hilum lateral to - - - - - - - - - - - - - - - - - - - - - - - - perianth inserted into - - - - - - - - - - - - - - - - - - - - - - - - leaflet decurrent - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein tomentose - - - - - - - - - - - - - - - - - - - - - - - - flower fused with - - - - - - - - - - - - - - - - - - - - - - - - pericarp split - - - - - - - - - - - - - - - - - - - - - - - - petal orbicular - - - - - - - - - - - - - - - - - - - - - - - - perianth pink - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence swollen - - - - - - - - - - - - - - - - - - - - - - - - seed trichome oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - pistillode absent - - - - - - - - - - - - - - - - - - - - - - - - valve prominent - - - - - - - - - - - - - - - - - - - - - - - - valve position - - - - - - - - - - - - - - - - - - - - - - - - calyx spherical - - - - - - - - - - - - - - - - - - - - - - - - shoot internode swollen - - - - - - - - - - - - - - - - - - - - - - - - shoot internode structure - - - - - - - - - - - - - - - - - - - - - - - - leaflet oblong - - - - - - - - - - - - - - - - - - - - - - - - keel length - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell cupulate - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiolule green - - - - - - - - - - - - - - - - - - - - - - - - petiolule color - - - - - - - - - - - - - - - - - - - - - - - - androecium left - - - - - - - - - - - - - - - - - - - - - - - - stamen slit-like - - - - - - - - - - - - - - - - - - - - - - - - ligule dark yellow - - - - - - - - - - - - - - - - - - - - - - - - ligule color - - - - - - - - - - - - - - - - - - - - - - - - sepal raised - - - - - - - - - - - - - - - - - - - - - - - - gynophore glabrous - - - - - - - - - - - - - - - - - - - - - - - - gynophore pilosity - - - - - - - - - - - - - - - - - - - - - - - - palea obtuse - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf erect - - - - - - - - - - - - - - - - - - - - - - - - central zone exserted - - - - - - - - - - - - - - - - - - - - - - - - petal divergent from - - - - - - - - - - - - - - - - - - - - - - - - seed trichome broken - - - - - - - - - - - - - - - - - - - - - - - - seed trichome wholeness - - - - - - - - - - - - - - - - - - - - - - - - canal increased length - - - - - - - - - - - - - - - - - - - - - - - - canal length - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet increased thickness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet thickness - - - - - - - - - - - - - - - - - - - - - - - - nectary raised - - - - - - - - - - - - - - - - - - - - - - - - carpel spatulate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin caudate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin position - - - - - - - - - - - - - - - - - - - - - - - - inflorescence linear - - - - - - - - - - - - - - - - - - - - - - - - nectary square - - - - - - - - - - - - - - - - - - - - - - - - glume slender - - - - - - - - - - - - - - - - - - - - - - - - perianth triangular - - - - - - - - - - - - - - - - - - - - - - - - plant callus circular - - - - - - - - - - - - - - - - - - - - - - - - calyx attenuate - - - - - - - - - - - - - - - - - - - - - - - - stem flattened - - - - - - - - - - - - - - - - - - - - - - - - stem curvature - - - - - - - - - - - - - - - - - - - - - - - - bud obovate - - - - - - - - - - - - - - - - - - - - - - - - fruit unbranched - - - - - - - - - - - - - - - - - - - - - - - - fruit branchiness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal raised - - - - - - - - - - - - - - - - - - - - - - - - costa red brown - - - - - - - - - - - - - - - - - - - - - - - - pedicel dentated - - - - - - - - branch subacute - true - - - - - - - - branch duration - true - - - - - - - - - - - - - - - - - - - - - - - - testa oblong - - - - - - - - - - - - - - - - - - - - - - - - testa 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant cell decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - plant cell thickness - - - - - - - - - - - - - - - - - - - - - - - - root tip concave - - - - - - - - - - - - - - - - - - - - - - - - root tip concavity - - - - - - - - - - - - - - - - - - - - - - - - androecium tubular - - - - - - - - - - - - - - - - - - - - - - - - branch bifurcated - - - - - - - - - - - - - - - - - - - - - - - - style ornamentation - - - - - - - - - - - - - - - - - - - - - - - - style surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - fruit slit-like - - - - - - - - - - - - - - - - - - - - - - - - - - - - cortex phenotype - - - - - - - - - - - - - - - - - - - - - - - - cortex young - - - - - - - - - - - - - - - - - - - - - - - - cortex age - - - - - - - - - - - - - - - - - - - - - - - - peduncle elliptic - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle serrated - - - - - - - - - - - - - - - - - - - - - - - - seed trichome attenuate - - - - - - - - - - - - - - - - - - - - - - - - receptacle age - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril increased thickness - - - - - - - - - - - - - - - - - - - - - - - - anther protruding - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma pubescent - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma maturity - - - - - - - - - - - - - - - - - - - - - - - - perianth size - - - - - - - - - - - - - - - - - - - - - - - - endosperm present - - - - - - - - - - - - - - - - - - - - - - - - bract yellow - - - - - - - - - - - - - - - - - - - - - - - - peduncle immature - - - - - - - - - - - - - - - - - - - - - - - - style separating - - - - - - - - - - - - - - - - - - - - - - - - perianth flattened - - - - - - - - locule acute - true - - - - - - - - locule duration - true - - - - - - - - - - - - - - - - - - - - - - - - bract raised - - - - - - - - - - - - - - - - - - - - - - - - pedicel swollen - - - - - - - - - - - - - - - - - - - - - - - - root present - - - - - - - - - - - - - - - - - - - - - - - - root amount - - - - - - - - central zone premature - true - - - - - - - - central zone onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - apical hook oblong - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem scalloped - - - - - - - - - - - - - - - - - - - - - - - - testa brittle - - - - - - - - - - - - - - - - - - - - - - - - testa structure - - - - - - - - - - - - - - - - - - - - - - - - bract young - - - - - - - - - - - - - - - - - - - - - - - - bract age - - - - - - - - - - - - - - - - - - - - - - - - stem crowded - - - - - - - - - - - - - - - - - - - - - - - - flower dispersed - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence fleshy - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence composition - - - - - - - - - - - - - - - - - - - - - - - - stipel pubescent - - - - - - - - - - - - - - - - - - - - - - - - - stipel maturity - - - - - - - - - - - - - - - - - - - - - - - - - banner petal emarginate - - - - - - - - - - - - - - - - - - - - - - - - banner petal concavity - - - - - - - - - - - - - - - - - - - - - - - - shoot system increased thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot system thickness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence present - - - - - - - - - - - - - - - - - - - - - - - - branch present - - - - - - - - - - - - - - - - - - - - - - - - cotyledon fleshy - - - - - - - - - - - - - - - - - - - - - - - - cotyledon composition - - - - - - - - - - - - - - - - - - - - - - - - keel young - - - - - - - - - - - - - - - - - - - - - - - - keel age - - - - - - - - - - - - - - - - - - - - - - - - trichome decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf convex - - - - - - - - - - - - - - - - - - - - - - - - bud pedicellate - - - - - - - - - - - - - - - - - - - - - - - - bud attachment quality - - - - - - - - - - - - - - - - - - - - - - - - sapwood pink - - - - - - - - - - - - - - - - - - - - - - - - disk flower heart shaped - - - - - - - - - - - - - - - - - - - - - - - - disk flower concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle size - - - - - - - - - - - - - - - - - - - - - - - - upper glume curled - - - - - - - - root up - true - - - - - - - - - - - - - - - - - - - - - - - - root direction - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue hispid - - - - - - - - - - - - - - - - - - - - - - - - perianth green - - - - - - - - - - - - - - - - - - - - - - - - plant cell prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf prostrate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex reniform - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle erect - - - - - - - - - - - - - - - - - - - - - - - - - - - - stem base phenotype - - - - - - - - - - - - - - - - - - - - - - - - stem base swollen - - - - - - - - - - - - - - - - - - - - - - - - stem base structure - - - - - - - - - - - - - - - - - - - - - - - - leaf vertical to - - - - - - - - - - - - - - - - - - - - - - - - banner petal lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein circular - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet fleshy - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet composition - - - - - - - - - - - - - - - - - - - - - - - - flower glistening - - - - - - - - - - - - - - - - - - - - - - - - flower reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf blunt - - - - - - - - - - - - - - - - - - - - - - - - gynophore hairy - - - - - - - - - - - - - - - - - - - - - - - - apical hook condensed - - - - - - - - - - - - - - - - - - - - - - - - pollen violet - - - - - - - - - - - - - - - - - - - - - - - - stem oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - seed convex - - - - - - - - - - - - - - - - - - - - - - - - seed concavity - - - - - - - - - - - - - - - - - - - - - - - - stigma spatulate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member glabrous - - - - - - - - - - - - - - - - - - - - - - - - stalk attenuate - - - - - - - - - - - - - - - - - - - - - - - - upper glume conical - - - - - - - - hypanthium up - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium direction - - - - - - - - - - - - - - - - - - - - - - - - stem ventral to - - - - - - - - perianth up - true - - - - - - - - - - - - - - - - - - - - - - - - perianth direction - - - - - - - - - - - - - - - - - - - - - - - - nectary autogenous - - - - - - - - - - - - - - - - - - - - - - - - nectary structure - - - - - - - - - - - - - - - - - - - - - - - - peduncle oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - stamen adaxial to - - - - - - - - - - - - - - - - - - - - - - - - whole plant hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf base cleft - - - - - - - - - - - - - - - - - - - - - - - - leaf base concavity - - - - - - - - - - - - - - - - - - - - - - - - corolla obconical - - - - - - - - - - - - - - - - - - - - - - - - bud rectangular - - - - - - - - - - - - - - - - - - - - - - - - hypanthium hairy - - - - - - - - - - - - - - - - - - - - - - - - perianth inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - pistillode vestigial - - - - - - - - - - - - - - - - - - - - - - - - flower abaxial to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence caudate - - - - - - - - - - - - - - - - - - - - - - - - stamen posterior to - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath young - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath age - - - - - - - - root acute - true - - - - - - - - root duration - true - - - - - - - - - - - - - - - - - - - - - - - - hilum elliptic - - - - - - - - - - - - - - - - - - - - - - - - peduncle fleshy - - - - - - - - - - - - - - - - - - - - - - - - peduncle composition - - - - - - - - - - - - - - - - - - - - - - - - style trilobed - - - - - - - - - - - - - - - - - - - - - - - - style opposite - - - - - - - - - - - - - - - - - - - - - - - - rhizome inserted into - - - - - - - - - - - - - - - - - - - - - - - - connective dilated - - - - - - - - - - - - - - - - - - - - - - - - connective size - - - - - - - - - - - - - - - - - - - - - - - - exocarp hispid - - - - - - - - - - - - - - - - - - - - - - - - branch heart shaped - - - - - - - - - - - - - - - - - - - - - - - - branch concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower overlapping - - - - - - - - - - - - - - - - - - - - - - - - style elliptic - - - - - - - - - - - - - - - - - - - - - - - - stem bifurcated - - - - - - - - - - - - - - - - - - - - - - - - filament flattened - - - - - - - - - - - - - - - - - - - - - - - - seed flattened - - - - - - - - - - - - - - - - - - - - - - - - apical hook basal to - - - - - - - - - - - - - - - - - - - - - - - - staminode cylindrical - - - - - - - - - - - - - - - - - - - - - - - - staminode convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule inflexible - - - - - - - - - - - - - - - - - - - - - - - - stipule flexibility - - - - - - - - - - - - - - - - - - - - - - - - stigma decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaflet heart shaped - - - - - - - - - - - - - - - - - - - - - - - - leaflet concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - aril lateral to - - - - - - - - - - - - - - - - - - - - - - - - gynophore length - - - - - - - - - - - - - - - - - - - - - - - - lamina sunken - - - - - - - - - - - - - - - - - - - - - - - - lamina elevation - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle autogenous - - - - - - - - - - - - - - - - - - - - - - - - papilla cell glandular - - - - - - - - - - - - - - - - - - - - - - - - papilla cell morphology - - - - - - - - - - - - - - - - - - - - - - - - receptacle funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma surrounding - - - - - - - - - - - - - - - - - - - - - - - - perianth decussate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - gynoecium symmetry - - - - - - - - - - - - - - - - - - - - - - - - anther theca glabrous - - - - - - - - - - - - - - - - - - - - - - - - stem soft - - - - - - - - - - - - - - - - - - - - - - - - stem hardness - - - - - - - - - - - - - - - - - - - - - - - - stereome lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stereome sharpness - - - - - - - - - - - - - - - - - - - - - - - - bract condensed - - - - - - - - - - - - - - - - - - - - - - - - style attached to - - - - - - - - - - - - - - - - - - - - - - - - plant callus simple - - - - - - - - - - - - - - - - - - - - - - - - plant callus complexity - - - - - - - - stipule acute - true - - - - - - - - stipule duration - true - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal clavate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - canal offset - - - - - - - - - - - - - - - - - - - - - - - - connective posterior to - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium fleshy - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium composition - - - - - - - - - - - - - - - - - - - - - - - - epicalyx inflexible - - - - - - - - - - - - - - - - - - - - - - - - epicalyx flexibility - - - - - - - - - - - - - - - - - - - - - - - - sepal branched - - - - - - - - - - - - - - - - - - - - - - - - sepal branchiness - - - - - - - - - - - - - - - - - - - - - - - - trichome simple - - - - - - - - - - - - - - - - - - - - - - - - trichome complexity - - - - - - - - - - - - - - - - - - - - - - - - branch arched - - - - - - - - - - - - - - - - - - - - - - - - branch concavity - - - - - - - - - - - - - - - - - - - - - - - - corolla well differentiated - - - - - - - - - - - - - - - - - - - - - - - - corolla cellular potency - - - - - - - - - - - - - - - - - - - - - - - - leaf conical - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence alternate placement - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - corolla lobed - - - - - - - - - - - - - - - - - - - - - - - - stalk orbicular - - - - - - - - - - - - - - - - - - - - - - - - leaf base decurrent - - - - - - - - - - - - - - - - - - - - - - - - leaf base shape - - - - - - - - - - - - - - - - - - - - - - - - style ridged - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue wrinkled - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue texture - - - - - - - - - - - - - - - - - - - - - - - - central zone hairy - - - - - - - - - - - - - - - - - - - - - - - - - - - - coma phenotype - - - - - - - - - - - - - - - - - - - - - - - - coma pubescent - - - - - - - - - - - - - - - - - - - - - - - - coma maturity - - - - - - - - - - - - - - - - - - - - - - - - plant callus elliptic - - - - - - - - - - - - - - - - - - - - - - - - papilla cell circular - - - - - - - - - - - - - - - - - - - - - - - - epidermis erect - - - - - - - - seta acute - true - - - - - - - - seta duration - true - - - - - - - - - - - - - - - - - - - - - - - - fruit conspicuous - - - - - - - - - - - - - - - - - - - - - - - - bark lanceolate - - - - - - - - - - - - - - - - - - - - - - - - bark sharpness - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure erect - - - - - - - - - - - - - - - - - - - - - - - - androecium red - - - - - - - - - - - - - - - - - - - - - - - - androecium color - - - - - - - - - - - - - - - - - - - - - - - - sepal spongy - - - - - - - - - - - - - - - - - - - - - - - - bud dry - - - - - - - - - - - - - - - - - - - - - - - - bud wetness - - - - - - - - - - - - - - - - - - - - - - - - cotyledon orbicular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence absent - - - - - - - - - - - - - - - - - - - - - - - - central zone inserted into - - - - - - - - - - - - - - - - - - - - - - - - spikelet punctate - - - - - - - - - - - - - - - - - - - - - - - - seed closed - - - - - - - - - - - - - - - - - - - - - - - - seed closure - - - - - - - - - - - - - - - - - - - - - - - - seed trichome coating - - - - - - - - - - - - - - - - - - - - - - - - seed trichome texture - - - - - - - - - - - - - - - - - - - - - - - - involucre terminal - - - - - - - - - - - - - - - - - - - - - - - - involucre present - - - - - - - - - - - - - - - - - - - - - - - - seed bilobed - - - - - - - - - - - - - - - - - - - - - - - - lamina height - - - - - - - - - - - - - - - - - - - - - - - - petiolule truncated - - - - - - - - - - - - - - - - - - - - - - - - stigma drooping - - - - - - - - - - - - - - - - - - - - - - - - tuber basal to - - - - - - - - - - - - - - - - - - - - - - - - calyx glistening - - - - - - - - - - - - - - - - - - - - - - - - calyx reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaflet multicellular - - - - - - - - - - - - - - - - - - - - - - - - leaflet cellularity - - - - - - - - - - - - - - - - - - - - - - - - anther theca divergent from - - - - - - - - - - - - - - - - - - - - - - - - pericarp spongy - - - - - - - - - - - - - - - - - - - - - - - - whole plant arched - - - - - - - - - - - - - - - - - - - - - - - - whole plant concavity - - - - - - - - - - - - - - - - - - - - - - - - rhizome vertical to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence arched - - - - - - - - - - - - - - - - - - - - - - - - inflorescence concavity - - - - - - - - - - - - - - - - - - - - - - - - receptacle setose - - - - - - - - - - - - - - - - - - - - - - - - thorn distributed - - - - - - - - - - - - - - - - - - - - - - - - thorn spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - inflorescence translucent - - - - - - - - - - - - - - - - - - - - - - - - inflorescence opacity - - - - - - - - - - - - - - - - - - - - - - - - androecium circular - - - - - - - - - - - - - - - - - - - - - - - - stereome hairy - - - - - - - - - - - - - - - - - - - - - - - - stereome pilosity - - - - - - - - - - - - - - - - - - - - - - - - papilla cell prominent - - - - - - - - - - - - - - - - - - - - - - - - heartwood cylindrical - - - - - - - - - - - - - - - - - - - - - - - - flower vertical to - - - - - - - - involucre acute - true - - - - - - - - involucre duration - true - - - - - - - - - - - - - - - - - - - - - - - - stem quadrangular - - - - - - - - - - - - - - - - - - - - - - - - whole plant swollen - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein obovate - - - - - - - - - - - - - - - - - - - - - - - - stele drooping - - - - - - - - - - - - - - - - - - - - - - - - stele shape - - - - - - - - - - - - - - - - - - - - - - - - stamen subulate - - - - - - - - - - - - - - - - - - - - - - - - gynophore decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - peristome oblique to - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal inserted into - - - - - - - - - - - - - - - - - - - - - - - - stem base revolute - - - - - - - - - - - - - - - - - - - - - - - - stem base shape - - - - - - - - - - - - - - - - - - - - - - - - bud increased thickness - - - - - - - - - - - - - - - - - - - - - - - - bud inflated - - - - - - - - - - - - - - - - - - - - - - - - bud structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - rhizome arched - - - - - - - - - - - - - - - - - - - - - - - - rhizome concavity - - - - - - - - - - - - - - - - - - - - - - - - style young - - - - - - - - - - - - - - - - - - - - - - - - style age - - - - - - - - - - - - - - - - - - - - - - - - pith young - - - - - - - - - - - - - - - - - - - - - - - - pith age - - - - - - - - - - - - - - - - - - - - - - - - - - - - columella phenotype - - - - - - - - - - - - - - - - - - - - - - - - columella terminal - - - - - - - - - - - - - - - - - - - - - - - - columella position - - - - - - - - - - - - - - - - - - - - - - - - glume spherical - - - - - - - - - - - - - - - - - - - - - - - - spikelet glabrous - - - - - - - - - - - - - - - - - - - - - - - - spikelet pilosity - - - - - - - - - - - - - - - - - - - - - - - - petal pale pink - - - - - - - - - - - - - - - - - - - - - - - - bract concave - - - - - - - - - - - - - - - - - - - - - - - - peristome recurved - - - - - - - - - - - - - - - - - - - - - - - - bark dark grey - - - - - - - - - - - - - - - - - - - - - - - - rhizome vertical - - - - - - - - - - - - - - - - - - - - - - - - rhizome spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf caudate - - - - - - - - - - - - - - - - - - - - - - - - lower glume acuminate - - - - - - - - - - - - - - - - - - - - - - - - stipule branched - - - - - - - - - - - - - - - - - - - - - - - - disk flower notched - - - - - - - - - - - - - - - - - - - - - - - - disk flower concavity - - - - - - - - - - - - - - - - - - - - - - - - corolla constricted - - - - - - - - - - - - - - - - - - - - - - - - calyx purple - - - - - - - - - - - - - - - - - - - - - - - - petal exserted - - - - - - - - - - - - - - - - - - - - - - - - whole plant tomentose - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf falciform - - - - - - - - - - - - - - - - - - - - - - - - flower divergent from - - - - - - - - - - - - - - - - - - - - - - - - keel concentrated - - - - - - - - - - - - - - - - - - - - - - - - keel concentration of - - - - - - - - - - - - - - - - - - - - - - - - stem elongated - - - - - - - - - - - - - - - - - - - - - - - - leaf involute - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem oblong - - - - - - - - - - - - - - - - - - - - - - - - leaf margin area - - - - - - - - - - - - - - - - - - - - - - - - lamina subcircular - - - - - - - - - - - - - - - - - - - - - - - - infructescence curved - - - - - - - - - - - - - - - - - - - - - - - - septum basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf sparse - - - - - - - - - - - - - - - - - - - - - - - - bracteole coiled - - - - - - - - - - - - - - - - - - - - - - - - bracteole coiling - - - - - - - - - - - - - - - - - - - - - - - - flower obtuse - - - - - - - - - - - - - - - - - - - - - - - - corolla decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - whole plant warty - - - - - - - - - - - - - - - - - - - - - - - - whole plant texture - - - - - - - - - - - - - - - - - - - - - - - - perianth actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - perianth radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence erect - - - - - - - - - - - - - - - - - - - - - - - - peduncle sterile - - - - - - - - - - - - - - - - - - - - - - - - peduncle fertility - - - - - - - - spikelet female - true - - - - - - - - - - - - - - - - - - - - - - - - stamen spotted - - - - - - - - - - - - - - - - - - - - - - - - stamen color pattern - - - - - - - - - - - - - - - - - - - - - - - - shoot apex arrow-shaped - - - - - - - - stipule up - true - - - - - - - - - - - - - - - - - - - - - - - - stipule direction - - - - - - - - - - - - - - - - - - - - - - - - papilla cell star shaped - - - - - - - - - - - - - - - - - - - - - - - - root tip circular - - - - - - - - - - - - - - - - - - - - - - - - ovary wall punctate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - keel sinuous - - - - - - - - - - - - - - - - - - - - - - - - keel curvature - - - - - - - - - - - - - - - - - - - - - - - - bud increased length - - - - - - - - - - - - - - - - - - - - - - - - ligule ovate - - - - - - - - - - - - - - - - - - - - - - - - corolla bilobed - - - - - - - - - - - - - - - - - - - - - - - - endocarp cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - flower hispid - - - - - - - - - - - - - - - - - - - - - - - - androecium furrowed - - - - - - - - - - - - - - - - - - - - - - - - androecium texture - - - - - - - - - - - - - - - - - - - - - - - - axil dense - - - - - - - - - - - - - - - - - - - - - - - - axil mass density - - - - - - - - - - - - - - - - - - - - - - - - raphe U-shaped - - - - - - - - - - - - - - - - - - - - - - - - raphe concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit falciform - - - - - - - - - - - - - - - - - - - - - - - - rhizome proximal to - - - - - - - - - - - - - - - - - - - - - - - - petiole juvenile - - - - - - - - - - - - - - - - - - - - - - - - lemma glabrous - - - - - - - - - - - - - - - - - - - - - - - - lemma pilosity - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue adhesive - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue adhesivity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fleshy - - - - - - - - - - - - - - - - - - - - - - - - inflorescence composition - - - - - - - - - - - - - - - - - - - - - - - - stigma bifurcated - - - - - - - - - - - - - - - - - - - - - - - - leaf margin dense - - - - - - - - - - - - - - - - - - - - - - - - leaf margin mass density - - - - - - - - - - - - - - - - - - - - - - - - petiole sterile - - - - - - - - - - - - - - - - - - - - - - - - petiole fertility - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium bilobed - - - - - - - - - - - - - - - - - - - - - - - - ligule red - - - - - - - - - - - - - - - - - - - - - - - - stipule cylindrical - - - - - - - - - - - - - - - - - - - - - - - - mesocarp prominent - - - - - - - - - - - - - - - - - - - - - - - - mesocarp position - - - - - - - - - - - - - - - - - - - - - - - - ligule increased thickness - - - - - - - - - - - - - - - - - - - - - - - - ligule thickness - - - - - - - - - - - - - - - - - - - - - - - - hilum punctiform - - - - - - - - - - - - - - - - - - - - - - - - glume truncated - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet split - - - - - - - - - - - - - - - - - - - - - - - - lamina proximal to - - - - - - - - - - - - - - - - - - - - - - - - anther decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - anther water composition - - - - - - - - - - - - - - - - - - - - - - - - scutellar node simple - - - - - - - - - - - - - - - - - - - - - - - - scutellar node complexity - - - - - - - - - - - - - - - - - - - - - - - - androecium exserted - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf apex phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaf apex attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf apex sharpness - - - - - - - - - - - - - - - - - - - - - - - - anther brittle - - - - - - - - - - - - - - - - - - - - - - - - septum attached to - - - - - - - - - - - - - - - - - - - - - - - - septum attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stipule terminal - - - - - - - - - - - - - - - - - - - - - - - - papilla cell fleshy - - - - - - - - - - - - - - - - - - - - - - - - papilla cell composition - - - - - - - - - - - - - - - - - - - - - - - - bark horizontal - - - - - - - - - - - - - - - - - - - - - - - - heartwood pubescent - - - - - - - - - - - - - - - - - - - - - - - - heartwood maturity - - - - - - - - - - - - - - - - - - - - - - - - calyx pointed - - - - - - - - - - - - - - - - - - - - - - - - calyx pink - - - - - - - - - - - - - - - - - - - - - - - - bud inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon lanceolate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium warty - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium texture - - - - - - - - valve arrested - true - - - - - - - - valve offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - style split - - - - - - - - - - - - - - - - - - - - - - - - calyx auriculate - - - - - - - - carpel hermaphrodite - true - - - - - - - - carpel phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - stigma convex - - - - - - - - - - - - - - - - - - - - - - - - peduncle robust - - - - - - - - - - - - - - - - - - - - - - - - receptacle translucent - - - - - - - - - - - - - - - - - - - - - - - - receptacle opacity - - - - - - - - - - - - - - - - - - - - - - - - lamina dark green - - - - - - - - - - - - - - - - - - - - - - - - spikelet increased thickness - - - - - - - - - - - - - - - - - - - - - - - - spikelet thickness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet cauline to - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus erect - - - - - - - - anther hermaphrodite - true - - - - - - - - anther phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - fruit dark green - - - - - - - - - - - - - - - - - - - - - - - - petal distance - - - - - - - - - - - - - - - - - - - - - - - - stigma discoid - - - - - - - - - - - - - - - - - - - - - - - - bud edible - - - - - - - - - - - - - - - - - - - - - - - - bud edibility - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf erect - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf position - - - - - - - - - - - - - - - - - - - - - - - - flower notched - - - - - - - - - - - - - - - - - - - - - - - - flower fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma swollen - - - - - - - - - - - - - - - - - - - - - - - - lemma straight - - - - - - - - - - - - - - - - - - - - - - - - ovary wall leaf-like - - - - - - - - - - - - - - - - - - - - - - - - keel purple - - - - - - - - - - - - - - - - - - - - - - - - leaf raised - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle conical - - - - - - - - - - - - - - - - - - - - - - - - bracteole glandular - - - - - - - - - - - - - - - - - - - - - - - - bracteole morphology - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle prominent - - - - - - - - - - - - - - - - - - - - - - - - costa prominent - - - - - - - - - - - - - - - - - - - - - - - - heartwood acuminate - - - - - - - - - - - - - - - - - - - - - - - - heartwood sharpness - - - - - - - - - - - - - - - - - - - - - - - - flower triangular - - - - - - - - - - - - - - - - - - - - - - - - calyx fleshy - - - - - - - - - - - - - - - - - - - - - - - - lower glume recurved - - - - - - - - - - - - - - - - - - - - - - - - lower glume curvature - - - - - - - - - - - - - - - - - - - - - - - - branch size - - - - - - - - - - - - - - - - - - - - - - - - canal erect - - - - - - - - - - - - - - - - - - - - - - - - stigma purple - - - - - - - - - - - - - - - - - - - - - - - - petiole purple - - - - - - - - - - - - - - - - - - - - - - - - leaf coiled - - - - - - - - - - - - - - - - - - - - - - - - leaf coiling - - - - - - - - - - - - - - - - - - - - - - - - costa angle - - - - - - - - bract male - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fertile - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal cylindrical - - - - - - - - - - - - - - - - - - - - - - - - seta cuneate - - - - - - - - - - - - - - - - - - - - - - - - trichome hairy - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue fleshy - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue composition - - - - - - - - - - - - - - - - - - - - - - - - rhizome waxy - - - - - - - - - - - - - - - - - - - - - - - - rhizome waxiness - - - - - - - - - - - - - - - - - - - - - - - - disk flower concave - - - - - - - - - - - - - - - - - - - - - - - - leaf yellow green - - - - - - - - - - - - - - - - - - - - - - - - branch kinked - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus thickness - - - - - - - - - - - - - - - - - - - - - - - - infructescence conical - - - - - - - - - - - - - - - - - - - - - - - - pedicel fleshy - - - - - - - - - - - - - - - - - - - - - - - - style flat - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf terminal - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem lanceolate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem sharpness - - - - - - - - - - - - - - - - - - - - - - - - epidermis branched - - - - - - - - - - - - - - - - - - - - - - - - epidermis branchiness - - - - - - - - - - - - - - - - - - - - - - - - tepal lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tepal sharpness - - - - - - - - petiolule up - true - - - - - - - - - - - - - - - - - - - - - - - - petiolule direction - - - - - - - - - - - - - - - - - - - - - - - - stipule prominent - - - - - - - - - - - - - - - - - - - - - - - - axil linear - - - - - - - - - - - - - - - - - - - - - - - - stamen lobed - - - - - - - - - - - - - - - - - - - - - - - - staminode decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - staminode thickness - - - - - - - - - - - - - - - - - - - - - - - - rhizome decreased amount - - - - - - - - - - - - - - - - - - - - - - - - gynoecium conical - - - - - - - - - - - - - - - - - - - - - - - - stereome glandular - - - - - - - - - - - - - - - - - - - - - - - - stereome morphology - - - - - - - - - - - - - - - - - - - - - - - - peduncle inserted into - - - - - - - - - - - - - - - - - - - - - - - - stigma ovate - - - - - - - - stem female - true - - - - - - - - stem phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - lower glume separated from - - - - - - - - - - - - - - - - - - - - - - - - lower glume structure - - - - - - - - - - - - - - - - - - - - - - - - androecium hollow - - - - - - - - - - - - - - - - - - - - - - - - androecium structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - whole plant cauline to - - - - - - - - - - - - - - - - - - - - - - - - whole plant grooved - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril branched - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle angular - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma inconspicuous - - - - - - - - inflorescence down - - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel loose - - - - - - - - - - - - - - - - - - - - - - - - ovary wall lobed - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath pilosity - - - - - - - - - - - - - - - - - - - - - - - - bract hispid - - - - - - - - - - - - - - - - - - - - - - - - anther leaf-like - - - - - - - - - - - - - - - - - - - - - - - - seed trichome hispid - - - - - - - - - - - - - - - - - - - - - - - - tepal decreased amount - - - - - - - - - - - - - - - - - - - - - - - - tepal amount - - - - - - - - - - - - - - - - - - - - - - - - perianth clavate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle caudate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence hispid - - - - - - - - - - - - - - - - - - - - - - - - carpel decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - carpel water composition - - - - - - - - - - - - - - - - - - - - - - - - shoot apex symmetrical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex symmetry - - - - - - - - - - - - - - - - - - - - - - - - stem inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - bark circumference - - - - - - - - - - - - - - - - - - - - - - - - lenticel punctate - - - - - - - - - - - - - - - - - - - - - - - - lenticel spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - papilla cell curved - - - - - - - - - - - - - - - - - - - - - - - - papilla cell curvature - - - - - - - - - - - - - - - - - - - - - - - - plant callus glabrous - - - - - - - - - - - - - - - - - - - - - - - - plant callus pilosity - - - - - - - - - - - - - - - - - - - - - - - - connective glabrous - - - - - - - - - - - - - - - - - - - - - - - - pedicel dense - - - - - - - - - - - - - - - - - - - - - - - - pedicel mass density - - - - - - - - - - - - - - - - - - - - - - - - filament abaxial to - - - - - - - - - - - - - - - - - - - - - - - - style undivided - - - - - - - - - - - - - - - - - - - - - - - - ovary wall hispid - - - - - - - - - - - - - - - - - - - - - - - - pedicel star shaped - - - - - - - - - - - - - - - - - - - - - - - - bud recurved - - - - - - - - - - - - - - - - - - - - - - - - bud curvature - - - - - - - - - - - - - - - - - - - - - - - - ovary wall columnar - - - - - - - - - - - - - - - - - - - - - - - - style notched - - - - - - - - - - - - - - - - - - - - - - - - style concavity - - - - - - - - - - - - - - - - - - - - - - - - whole plant sterile - - - - - - - - - - - - - - - - - - - - - - - - whole plant fertility - - - - - - - - - - - - - - - - - - - - - - - - - - - - root cap phenotype - - - - - - - - root cap acute - true - - - - - - - - root cap duration - true - - - - - - - - - - - - - - - - - - - - - - - - parenchyma fleshy - - - - - - - - - - - - - - - - - - - - - - - - parenchyma composition - - - - - - - - - - - - - - - - - - - - - - - - petiolule broad - - - - - - - - - - - - - - - - - - - - - - - - canal emarginate - - - - - - - - - - - - - - - - - - - - - - - - lamina concave - - - - - - - - - - - - - - - - - - - - - - - - lamina concavity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - petal curled - - - - - - - - - - - - - - - - - - - - - - - - oil gland glabrous - - - - - - - - - - - - - - - - - - - - - - - - oil gland pilosity - - - - - - - - seed up - true - - - - - - - - - - - - - - - - - - - - - - - - seed direction - - - - - - - - - - - - - - - - - - - - - - - - prickle decurrent - - - - - - - - - - - - - - - - - - - - - - - - petiole dense - - - - - - - - - - - - - - - - - - - - - - - - petiole mass density - - - - - - - - - - - - - - - - - - - - - - - - petal cuneate - - - - - - - - vascular bundle premature - true - - - - - - - - vascular bundle onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - fruit loose - - - - - - - - - - - - - - - - - - - - - - - - flower circular - - - - - - - - - - - - - - - - - - - - - - - - peduncle hard - - - - - - - - - - - - - - - - - - - - - - - - peduncle hardness - - - - - - - - - - - - - - - - - - - - - - - - trichome autogenous - - - - - - - - - - - - - - - - - - - - - - - - branch raised - - - - - - - - - - - - - - - - - - - - - - - - stigma punctiform - - - - - - - - - - - - - - - - - - - - - - - - style punctate - - - - - - - - - - - - - - - - - - - - - - - - style spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stem old - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue dorsal to - - - - - - - - - - - - - - - - - - - - - - - - branch circular - - - - - - - - - - - - - - - - - - - - - - - - bracteole tubular - - - - - - - - - - - - - - - - - - - - - - - - bracteole leaf-like - - - - - - - - - - - - - - - - - - - - - - - - fruit emarginate - - - - - - - - - - - - - - - - - - - - - - - - stipel lanceolate - - - - - - - - - - - - - - - - - - - - - - - - sepal green - - - - - - - - - - - - - - - - - - - - - - - - aril soft - - - - - - - - - - - - - - - - - - - - - - - - aril hardness - - - - - - - - - - - - - - - - - - - - - - - - disk flower slit-like - - - - - - - - - - - - - - - - - - - - - - - - valve light green - - - - - - - - - - - - - - - - - - - - - - - - bud truncated - - - - - - - - - - - - - - - - - - - - - - - - costa lobed - - - - - - - - - - - - - - - - - - - - - - - - anther theca constricted - - - - - - - - - - - - - - - - - - - - - - - - anther theca structure - - - - - - - - - - - - - - - - - - - - - - - - lamina spiny - - - - - - - - - - - - - - - - - - - - - - - - lamina surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - aril foveate - - - - - - - - - - - - - - - - - - - - - - - - glume lateral to - - - - - - - - - - - - - - - - - - - - - - - - canal spherical - - - - - - - - - - - - - - - - - - - - - - - - canal convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium increased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina pilosity - - - - - - - - - - - - - - - - - - - - - - - - prickle striated - - - - - - - - - - - - - - - - - - - - - - - - leaf spiny - - - - - - - - - - - - - - - - - - - - - - - - pedicel arched - - - - - - - - - - - - - - - - - - - - - - - - epidermis dark brown - - - - - - - - sclerenchyma up - true - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma direction - - - - - - - - awn up - true - - - - - - - - - - - - - - - - - - - - - - - - awn direction - - - - - - - - - - - - - - - - - - - - - - - - calyx broad - - - - - - - - - - - - - - - - - - - - - - - - ligule glabrous - - - - - - - - - - - - - - - - - - - - - - - - ligule pilosity - - - - - - - - - - - - - - - - - - - - - - - - androecium elliptic - - - - - - - - - - - - - - - - - - - - - - - - seed trichome raised - - - - - - - - - - - - - - - - - - - - - - - - seed falciform - - - - - - - - - - - - - - - - - - - - - - - - leaflet kinked - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet spherical - - - - - - - - - - - - - - - - - - - - - - - - inflorescence smooth - - - - - - - - - - - - - - - - - - - - - - - - pedicel soft - - - - - - - - - - - - - - - - - - - - - - - - pedicel hardness - - - - - - - - - - - - - - - - - - - - - - - - bract lobed - - - - - - - - - - - - - - - - - - - - - - - - exocarp prominent - - - - - - - - - - - - - - - - - - - - - - - - exocarp position - - - - - - - - - - - - - - - - - - - - - - - - corolla differentiated - - - - - - - - - - - - - - - - - - - - - - - - lenticel erect - - - - - - - - - - - - - - - - - - - - - - - - bract dorsal to - - - - - - - - - - - - - - - - - - - - - - - - shoot internode increased thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot internode thickness - - - - - - - - - - - - - - - - - - - - - - - - flower hexagonal - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle alternate placement - - - - - - - - - - - - - - - - - - - - - - - - whole plant viscous - - - - - - - - - - - - - - - - - - - - - - - - whole plant viscosity - - - - - - - - - - - - - - - - - - - - - - - - stamen angular - - - - - - - - infructescence acute - true - - - - - - - - infructescence duration - true - - - - - - - - - - - - - - - - - - - - - - - - leaf base green - - - - - - - - - - - - - - - - - - - - - - - - leaf base color - - - - - - - - - - - - - - - - - - - - - - - - peduncle ridged - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma slit-like - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma shape - - - - - - - - - - - - - - - - - - - - - - - - lamina curved - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein orbicular - - - - - - - - - - - - - - - - - - - - - - - - receptacle flattened - - - - - - - - - - - - - - - - - - - - - - - - root tip hairy - - - - - - - - - - - - - - - - - - - - - - - - corm red - - - - - - - - - - - - - - - - - - - - - - - - valve hairy - - - - - - - - - - - - - - - - - - - - - - - - valve pilosity - - - - - - - - - - - - - - - - - - - - - - - - calyx cupulate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium fleshy - - - - - - - - - - - - - - - - - - - - - - - - hypanthium composition - - - - - - - - - - - - - - - - - - - - - - - - apical hook arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - stalk flattened - - - - - - - - - - - - - - - - - - - - - - - - stalk curvature - - - - - - - - - - - - - - - - - - - - - - - - stem aggregated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle spatulate - - - - - - - - - - - - - - - - - - - - - - - - hilum flattened - - - - - - - - - - - - - - - - - - - - - - - - hilum curvature - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem dispersed - - - - - - - - epidermis continuous - true - - - - - - - - epidermis occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - corolla curved - - - - - - - - - - - - - - - - - - - - - - - - corolla curvature - - - - - - - - - - - - - - - - - - - - - - - - canal pubescent - - - - - - - - - - - - - - - - - - - - - - - - canal maturity - - - - - - - - - - - - - - - - - - - - - - - - bract articulated with - - - - - - - - - - - - - - - - - - - - - - - - perianth tubular - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet autogenous - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet structure - - - - - - - - - - - - - - - - - - - - - - - - flower star shaped - - - - - - - - - - - - - - - - - - - - - - - - whole plant concave - - - - - - - - - - - - - - - - - - - - - - - - testa elliptic - - - - - - - - - - - - - - - - - - - - - - - - petiole retuse - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle inserted into - - - - - - - - - - - - - - - - - - - - - - - - anther swollen - - - - - - - - - - - - - - - - - - - - - - - - awn slender - - - - - - - - - - - - - - - - - - - - - - - - glume undulate - - - - - - - - - - - - - - - - - - - - - - - - shoot internode glandular - - - - - - - - - - - - - - - - - - - - - - - - shoot internode morphology - - - - - - - - - - - - - - - - - - - - - - - - pericarp pubescent - - - - - - - - - - - - - - - - - - - - - - - - pericarp maturity - - - - - - - - - - - - - - - - - - - - - - - - bud decreased amount - - - - - - - - - - - - - - - - - - - - - - - - bud amount - - - - - - - - stem male - true - - - - - - - - - - - - - - - - - - - - - - - - stem falciform - - - - - - - - - - - - - - - - - - - - - - - - keel glandular - - - - - - - - - - - - - - - - - - - - - - - - keel morphology - - - - - - - - - - - - - - - - - - - - - - - - peduncle kinked - - - - - - - - - - - - - - - - - - - - - - - - stem translucent - - - - - - - - crown root hermaphrodite - true - - - - - - - - crown root phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - lamina absent - - - - - - - - - - - - - - - - - - - - - - - - branch acuminate - - - - - - - - - - - - - - - - - - - - - - - - petal bilobed - - - - - - - - anther male - true - - - - - - - - - - - - - - - - - - - - - - - - lenticel raised - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - bud tomentose - - - - - - - - - - - - - - - - - - - - - - - - ligule pinnate - - - - - - - - - - - - - - - - - - - - - - - - petiole spatulate - - - - - - - - - - - - - - - - - - - - - - - - staminode whorled - - - - - - - - - - - - - - - - - - - - - - - - staminode spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence ventral to - - - - - - - - - - - - - - - - - - - - - - - - spikelet oblong - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure linear - - - - - - - - - - - - - - - - - - - - - - - - gynoecium autogenous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium structure - - - - - - - - stalk male - true - - - - - - - - stalk phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - lower glume obtuse - - - - - - - - - - - - - - - - - - - - - - - - lower glume 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - perianth elliptic - - - - - - - - - - - - - - - - - - - - - - - - style straight - - - - - - - - - - - - - - - - - - - - - - - - pith increased thickness - - - - - - - - - - - - - - - - - - - - - - - - pith thickness - - - - - - - - - - - - - - - - - - - - - - - - stem time - - - - - - - - - - - - - - - - - - - - - - - - stamen swollen - - - - - - - - - - - - - - - - - - - - - - - - stem viscous - - - - - - - - - - - - - - - - - - - - - - - - stem viscosity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis glabrous - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis pilosity - - - - - - - - - - - - - - - - - - - - - - - - sepal decreased amount - - - - - - - - - - - - - - - - - - - - - - - - sepal amount - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium conical - - - - - - - - - - - - - - - - - - - - - - - - endocarp trilobed - - - - - - - - - - - - - - - - - - - - - - - - locule erect - - - - - - - - - - - - - - - - - - - - - - - - trichome inflexible - - - - - - - - - - - - - - - - - - - - - - - - trichome flexibility - - - - - - - - - - - - - - - - - - - - - - - - trichome swollen - - - - - - - - - - - - - - - - - - - - - - - - flower dense - - - - - - - - - - - - - - - - - - - - - - - - flower mass density - - - - - - - - - - - - - - - - - - - - - - - - central zone revolute - - - - - - - - - - - - - - - - - - - - - - - - leaf unbranched - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet hispid - - - - - - - - - - - - - - - - - - - - - - - - trichome attenuate - - - - - - - - - - - - - - - - - - - - - - - - bract reniform - - - - - - - - - - - - - - - - - - - - - - - - thorn triangular - - - - - - - - - - - - - - - - - - - - - - - - thorn 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed trichome striated - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member serrated - - - - - - - - - - - - - - - - - - - - - - - - receptacle curved - - - - - - - - - - - - - - - - - - - - - - - - peduncle orbicular - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue erect - - - - - - - - - - - - - - - - - - - - - - - - rhizome wrinkled - - - - - - - - - - - - - - - - - - - - - - - - root tip emarginate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence adjacent to - - - - - - - - - - - - - - - - - - - - - - - - disk flower truncated - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal star shaped - - - - - - - - - - - - - - - - - - - - - - - - seed pubescent - - - - - - - - - - - - - - - - - - - - - - - - stem herbaceous - - - - - - - - - - - - - - - - - - - - - - - - stem shedability - - - - - - - - - - - - - - - - - - - - - - - - - - - - funicle phenotype - - - - - - - - - - - - - - - - - - - - - - - - funicle separating - - - - - - - - - - - - - - - - - - - - - - - - funicle structure - - - - - - - - - - - - - - - - - - - - - - - - pericarp flexible - - - - - - - - - - - - - - - - - - - - - - - - pericarp flexibility - - - - - - - - - - - - - - - - - - - - - - - - bract broad - - - - - - - - - - - - - - - - - - - - - - - - crown root simple - - - - - - - - - - - - - - - - - - - - - - - - crown root complexity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pink - - - - - - - - - - - - - - - - - - - - - - - - flower split - - - - - - - - - - - - - - - - - - - - - - - - cotyledon pubescent - - - - - - - - - - - - - - - - - - - - - - - - cotyledon maturity - - - - - - - - - - - - - - - - - - - - - - - - pericarp cut - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle dispersed - - - - - - - - involucre up - true - - - - - - - - - - - - - - - - - - - - - - - - involucre direction - - - - - - - - - - - - - - - - - - - - - - - - anther prominent - - - - - - - - - - - - - - - - - - - - - - - - heartwood smooth - - - - - - - - - - - - - - - - - - - - - - - - heartwood texture - - - - - - - - trichome hermaphrodite - true - - - - - - - - trichome phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - central zone fleshy - - - - - - - - - - - - - - - - - - - - - - - - central zone composition - - - - - - - - - - - - - - - - - - - - - - - - leaf apex lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaf apex position - - - - - - - - - - - - - - - - - - - - - - - - gynoecium concave - - - - - - - - - - - - - - - - - - - - - - - - gynoecium concavity - - - - - - - - - - - - - - - - - - - - - - - - infructescence young - - - - - - - - - - - - - - - - - - - - - - - - infructescence age - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem triangular - - - - - - - - - - - - - - - - - - - - - - - - shoot system bifurcated - - - - - - - - - - - - - - - - - - - - - - - - shoot system branchiness - - - - - - - - - - - - - - - - - - - - - - - - stamen acuminate - - - - - - - - short shoot acute - true - - - - - - - - short shoot duration - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore phenotype - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore autogenous - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore structure - - - - - - - - - - - - - - - - - - - - - - - - leaf foveate - - - - - - - - - - - - - - - - - - - - - - - - apical hook auriculate - - - - - - - - - - - - - - - - - - - - - - - - petiole soft - - - - - - - - - - - - - - - - - - - - - - - - petiole hardness - - - - - - - - - - - - - - - - - - - - - - - - petiole curved - - - - - - - - - - - - - - - - - - - - - - - - shoot apex distributed - - - - - - - - - - - - - - - - - - - - - - - - stigma undulate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem multi-colored - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem color pattern - - - - - - - - - - - - - - - - - - - - - - - - androecium hairy - - - - - - - - - - - - - - - - - - - - - - - - tuber flattened - - - - - - - - - - - - - - - - - - - - - - - - tuber curvature - - - - - - - - - - - - - - - - - - - - - - - - shoot system oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - endosperm brown - - - - - - - - - - - - - - - - - - - - - - - - endosperm color - - - - - - - - - - - - - - - - - - - - - - - - seed trichome furrowed - - - - - - - - - - - - - - - - - - - - - - - - endocarp grooved - - - - - - - - - - - - - - - - - - - - - - - - filament elliptic - - - - - - - - - - - - - - - - - - - - - - - - canal glabrous - - - - - - - - - - - - - - - - - - - - - - - - canal pilosity - - - - - - - - - - - - - - - - - - - - - - - - aril red - - - - - - - - - - - - - - - - - - - - - - - - androecium clavate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue whorled - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein oblong - - - - - - - - - - - - - - - - - - - - - - - - heartwood decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - heartwood thickness - - - - - - - - - - - - - - - - - - - - - - - - connective swollen - - - - - - - - - - - - - - - - - - - - - - - - connective structure - - - - - - - - - - - - - - - - - - - - - - - - stipule reniform - - - - - - - - - - - - - - - - - - - - - - - - pericarp green - - - - - - - - - - - - - - - - - - - - - - - - leaf tripartite - - - - - - - - - - - - - - - - - - - - - - - - bract purple - - - - - - - - - - - - - - - - - - - - - - - - seed proximal to - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem conical - - - - - - - - - - - - - - - - - - - - - - - - tubercle elliptic - - - - - - - - - - - - - - - - - - - - - - - - stipule hairy - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue scalloped - - - - - - - - - - - - - - - - - - - - - - - - plant cell linear - - - - - - - - - - - - - - - - - - - - - - - - connective linear - - - - - - - - - - - - - - - - - - - - - - - - anther emarginate - - - - - - - - - - - - - - - - - - - - - - - - filament scalloped - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue glandular - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue morphology - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma present - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma amount - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle open - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle closure - - - - - - - - - - - - - - - - - - - - - - - - peristome undulate - - - - - - - - - - - - - - - - - - - - - - - - branch dispersed - - - - - - - - - - - - - - - - - - - - - - - - stamen spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - perianth area - - - - - - - - - - - - - - - - - - - - - - - - connective split - - - - - - - - - - - - - - - - - - - - - - - - branch fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - rhizome robust - - - - - - - - - - - - - - - - - - - - - - - - shoot apex inflexible - - - - - - - - - - - - - - - - - - - - - - - - shoot apex flexibility - - - - - - - - - - - - - - - - - - - - - - - - staminode increased thickness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx terminal - - - - - - - - - - - - - - - - - - - - - - - - central zone basal to - - - - - - - - - - - - - - - - - - - - - - - - lamina sharp - - - - - - - - - - - - - - - - - - - - - - - - lemma hairy - - - - - - - - - - - - - - - - - - - - - - - - areole bud linear - - - - - - - - - - - - - - - - - - - - - - - - areole bud shape - - - - - - - - - - - - - - - - - - - - - - - - staminode posterior to - - - - - - - - - - - - - - - - - - - - - - - - bracteole decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - bracteole thickness - - - - - - - - - - - - - - - - - - - - - - - - style mixed - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - bark wrinkled - - - - - - - - - - - - - - - - - - - - - - - - corolla scalloped - - - - - - - - - - - - - - - - - - - - - - - - seed fatty - - - - - - - - - - - - - - - - - - - - - - - - exocarp glandular - - - - - - - - - - - - - - - - - - - - - - - - exocarp morphology - - - - - - - - - - - - - - - - - - - - - - - - central zone lanceolate - - - - - - - - - - - - - - - - - - - - - - - - central zone sharpness - - - - - - - - - - - - - - - - - - - - - - - - keel hairy - - - - - - - - - - - - - - - - - - - - - - - - nectary lateral to - - - - - - - - - - - - - - - - - - - - - - - - lower glume light brown - - - - - - - - - - - - - - - - - - - - - - - - pericarp firm - - - - - - - - stem down - true - - - - - - - - - - - - - - - - - - - - - - - - keel pedunculate - - - - - - - - - - - - - - - - - - - - - - - - keel structure - - - - - - - - - - - - - - - - - - - - - - - - ligule undulate - - - - - - - - - - - - - - - - - - - - - - - - disk flower flattened - - - - - - - - - - - - - - - - - - - - - - - - disk flower curvature - - - - - - - - - - - - - - - - - - - - - - - - root tip pubescent - - - - - - - - - - - - - - - - - - - - - - - - root tip maturity - - - - - - - - - - - - - - - - - - - - - - - - testa condensed - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf lanceolate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem condensed - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem structure - - - - - - - - - - - - - - - - - - - - - - - - stolon oblong - - - - - - - - - - - - - - - - - - - - - - - - stolon 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed black - - - - - - - - - - - - - - - - - - - - - - - - stem cauline to - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet circular - - - - - - - - - - - - - - - - - - - - - - - - receptacle oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - prickle flattened - - - - - - - - - - - - - - - - - - - - - - - - prickle curvature - - - - - - - - - - - - - - - - - - - - - - - - corolla condensed - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet undulate - - - - - - - - - - - - - - - - - - - - - - - - epidermis simple - - - - - - - - - - - - - - - - - - - - - - - - epidermis complexity - - - - - - - - - - - - - - - - - - - - - - - - petiole sparse - - - - - - - - - - - - - - - - - - - - - - - - root simple - - - - - - - - - - - - - - - - - - - - - - - - root complexity - - - - - - - - - - - - - - - - - - - - - - - - pedicel orbicular - - - - - - - - - - - - - - - - - - - - - - - - petiole circumference - - - - - - - - - - - - - - - - - - - - - - - - bud conspicuous - - - - - - - - - - - - - - - - - - - - - - - - inflorescence star shaped - - - - - - - - - - - - - - - - - - - - - - - - pericarp viscous - - - - - - - - - - - - - - - - - - - - - - - - pericarp viscosity - - - - - - - - - - - - - - - - - - - - - - - - sepal swollen - - - - - - - - - - - - - - - - - - - - - - - - disk flower sterile - - - - - - - - - - - - - - - - - - - - - - - - disk flower fertility - - - - - - - - - - - - - - - - - - - - - - - - disk flower wrinkled - - - - - - - - - - - - - - - - - - - - - - - - crown root pubescent - - - - - - - - - - - - - - - - - - - - - - - - crown root maturity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet furrowed - - - - - - - - - - - - - - - - - - - - - - - - testa flat - - - - - - - - - - - - - - - - - - - - - - - - hilum glistening - - - - - - - - - - - - - - - - - - - - - - - - hilum reflectivity - - - - - - - - - - - - - - - - - - - - - - - - receptacle vertical - - - - - - - - - - - - - - - - - - - - - - - - receptacle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - awn hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - keel red - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root glabrous - - - - - - - - - - - - - - - - - - - - - - - - valve elliptic - - - - - - - - - - - - - - - - - - - - - - - - valve 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal prominent - - - - - - - - - - - - - - - - - - - - - - - - papilla cell sharpness - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system glabrous - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system pilosity - - - - - - - - - - - - - - - - - - - - - - - - petiolule simple - - - - - - - - - - - - - - - - - - - - - - - - petiolule complexity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle pointed - - - - - - - - - - - - - - - - - - - - - - - - keel concave - - - - - - - - - - - - - - - - - - - - - - - - keel concavity - - - - - - - - - - - - - - - - - - - - - - - - seed brittle - - - - - - - - - - - - - - - - - - - - - - - - growth ring angular - - - - - - - - - - - - - - - - - - - - - - - - sheath cell smooth - - - - - - - - - - - - - - - - - - - - - - - - sheath cell texture - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell heart shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf robust - - - - - - - - - - - - - - - - - - - - - - - - leaf sunken - - - - - - - - - - - - - - - - - - - - - - - - leaf elevation - - - - - - - - - - - - - - - - - - - - - - - - sepal glistening - - - - - - - - - - - - - - - - - - - - - - - - sepal reflectivity - - - - - - - - - - - - - - - - - - - - - - - - fruit watery - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root increased length - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root length - - - - - - - - - - - - - - - - - - - - - - - - apical hook obovate - - - - - - - - - - - - - - - - - - - - - - - - stigma fusiform - - - - - - - - - - - - - - - - - - - - - - - - hypanthium absent - - - - - - - - - - - - - - - - - - - - - - - - hypanthium amount - - - - - - - - - - - - - - - - - - - - - - - - keel inflated - - - - - - - - - - - - - - - - - - - - - - - - keel structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - stigma constricted - - - - - - - - - - - - - - - - - - - - - - - - petiole nodular - - - - - - - - - - - - - - - - - - - - - - - - lemma back - - - - - - - - - - - - - - - - - - - - - - - - lemma direction - - - - - - - - - - - - - - - - - - - - - - - - involucre acuminate - - - - - - - - - - - - - - - - - - - - - - - - involucre sharpness - - - - - - - - - - - - - - - - - - - - - - - - papilla cell scalloped - - - - - - - - - - - - - - - - - - - - - - - - petiole conspicuous - - - - - - - - - - - - - - - - - - - - - - - - calyx setose - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member concave - - - - - - - - - - - - - - - - - - - - - - - - peduncle lanceolate - - - - - - - - - - - - - - - - - - - - - - - - locule fleshy - - - - - - - - - - - - - - - - - - - - - - - - locule composition - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence glistening - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence reflectivity - - - - - - - - - - - - - - - - - - - - - - - - bud straight - - - - - - - - - - - - - - - - - - - - - - - - root tip pinnate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal punctate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - petiole branched - - - - - - - - - - - - - - - - - - - - - - - - petiole branchiness - - - - - - - - - - - - - - - - - - - - - - - - sheath cell basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf pedunculate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet swollen - - - - - - - - - - - - - - - - - - - - - - - - spikelet convex - - - - - - - - - - - - - - - - - - - - - - - - spikelet concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system bifurcated - - - - - - - - - - - - - - - - - - - - - - - - bract branched - - - - - - - - - - - - - - - - - - - - - - - - pedicel rugose - - - - - - - - - - - - - - - - - - - - - - - - pedicel surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system water composition - - - - - - - - - - - - - - - - - - - - - - - - thorn increased thickness - - - - - - - - - - - - - - - - - - - - - - - - sepal terminal - - - - - - - - - - - - - - - - - - - - - - - - shoot system triangular - - - - - - - - - - - - - - - - - - - - - - - - shoot system 2-D shape - - - - - - - - style subacute - true - - - - - - - - style duration - true - - - - - - - - - - - - - - - - - - - - - - - - seed trichome bifurcated - - - - - - - - - - - - - - - - - - - - - - - - flower whorled - - - - - - - - - - - - - - - - - - - - - - - - anther broken - - - - - - - - - - - - - - - - - - - - - - - - anther wholeness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal dentated - - - - - - - - lower glume up - true - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence raised - - - - - - - - - - - - - - - - - - - - - - - - central zone alternate placement - - - - - - - - - - - - - - - - - - - - - - - - palea whole - - - - - - - - - - - - - - - - - - - - - - - - palea wholeness - - - - - - - - - - - - - - - - - - - - - - - - involucre oblong - - - - - - - - - - - - - - - - - - - - - - - - keel rugose - - - - - - - - - - - - - - - - - - - - - - - - keel surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - spikelet terminal - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus dentated - - - - - - - - - - - - - - - - - - - - - - - - flower brittle - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus obovate - - - - - - - - - - - - - - - - - - - - - - - - stigma green - - - - - - - - - - - - - - - - - - - - - - - - tubercle white - - - - - - - - - - - - - - - - - - - - - - - - tubercle color - - - - - - - - - - - - - - - - - - - - - - - - shoot apex split - - - - - - - - - - - - - - - - - - - - - - - - sepal sepal-like - - - - - - - - - - - - - - - - - - - - - - - - corolla flattened - - - - - - - - - - - - - - - - - - - - - - - - fruit subulate - - - - - - - - - - - - - - - - - - - - - - - - fruit soft - - - - - - - - - - - - - - - - - - - - - - - - locule vertical - - - - - - - - - - - - - - - - - - - - - - - - locule spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - sepal scalloped - - - - - - - - - - - - - - - - - - - - - - - - receptacle surrounding - - - - - - - - - - - - - - - - - - - - - - - - leaf grey - - - - - - - - - - - - - - - - - - - - - - - - branch emarginate - - - - - - - - - - - - - - - - - - - - - - - - pedicel grey - - - - - - - - - - - - - - - - - - - - - - - - caruncle mottled - - - - - - - - - - - - - - - - - - - - - - - - caruncle color pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system serrated - - - - - - - - - - - - - - - - - - - - - - - - leaf lobed - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle distichous - - - - - - - - - - - - - - - - - - - - - - - - spikelet slender - - - - - - - - - - - - - - - - - - - - - - - - seed trichome pedicellate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome attachment quality - - - - - - - - - - - - - - - - - - - - - - - - costa terminal - - - - - - - - - - - - - - - - - - - - - - - - epidermis slender - - - - - - - - - - - - - - - - - - - - - - - - filament coiled - - - - - - - - - - - - - - - - - - - - - - - - filament coiling - - - - - - - - bud subacute - true - - - - - - - - - - - - - - - - - - - - - - - - corolla transparent - - - - - - - - - - - - - - - - - - - - - - - - corolla opacity - - - - - - - - - - - - - - - - - - - - - - - - flower broad - - - - - - - - - - - - - - - - - - - - - - - - shoot apex sterile - - - - - - - - - - - - - - - - - - - - - - - - shoot apex fertility - - - - - - - - - - - - - - - - - - - - - - - - peduncle swollen - - - - - - - - - - - - - - - - - - - - - - - - staminode inserted into - - - - - - - - - - - - - - - - - - - - - - - - leaf axil red - - - - - - - - - - - - - - - - - - - - - - - - leaf axil color - - - - - - - - - - - - - - - - - - - - - - - - style surrounding - - - - - - - - - - - - - - - - - - - - - - - - - - - - strophiole phenotype - - - - - - - - - - - - - - - - - - - - - - - - strophiole smooth - - - - - - - - - - - - - - - - - - - - - - - - strophiole texture - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue coiled - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue coiling - - - - - - - - - - - - - - - - - - - - - - - - plant callus increased length - - - - - - - - - - - - - - - - - - - - - - - - plant callus length - - - - - - - - - - - - - - - - - - - - - - - - ovary wall tomentose - - - - - - - - - - - - - - - - - - - - - - - - inflorescence broad - - - - - - - - - - - - - - - - - - - - - - - - stamen lanceolate - - - - - - - - - - - - - - - - - - - - - - - - bud curved - - - - - - - - - - - - - - - - - - - - - - - - bud crowded - - - - - - - - - - - - - - - - - - - - - - - - whole plant decumbent - - - - - - - - - - - - - - - - - - - - - - - - root tip increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stem present - - - - - - - - - - - - - - - - - - - - - - - - pedicel sterile - - - - - - - - - - - - - - - - - - - - - - - - pedicel fertility - - - - - - - - - - - - - - - - - - - - - - - - whole plant punctate - - - - - - - - - - - - - - - - - - - - - - - - whole plant spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stipule fimbriated - - - - - - - - - - - - - - - - - - - - - - - - leaflet proximal to - - - - - - - - - - - - - - - - - - - - - - - - peduncle dense - - - - - - - - - - - - - - - - - - - - - - - - peduncle mass density - - - - - - - - - - - - - - - - - - - - - - - - style differentiated - - - - - - - - - - - - - - - - - - - - - - - - style cellular potency - - - - - - - - - - - - - - - - - - - - - - - - root tip autogenous - - - - - - - - - - - - - - - - - - - - - - - - corolla star shaped - - - - - - - - - - - - - - - - - - - - - - - - seed yellow brown - - - - - - - - - - - - - - - - - - - - - - - - costa branched - - - - - - - - - - - - - - - - - - - - - - - - costa branchiness - - - - - - - - - - - - - - - - - - - - - - - - pedicel drooping - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet decussate - - - - - - - - - - - - - - - - - - - - - - - - style vestigial - - - - - - - - - - - - - - - - - - - - - - - - branch undulate - - - - - - - - - - - - - - - - - - - - - - - - stem complex - - - - - - - - connective acute - true - - - - - - - - connective duration - true - - - - - - - - - - - - - - - - - - - - - - - - stipule decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - stipule water composition - - - - - - - - - - - - - - - - - - - - - - - - corolla broad - - - - - - - - - - - - - - - - - - - - - - - - stigma cuneate - - - - - - - - - - - - - - - - - - - - - - - - petiole brittle - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member multifid - - - - - - - - - - - - - - - - - - - - - - - - disk flower funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - stalk truncated - - - - - - - - - - - - - - - - - - - - - - - - pedicel hispid - - - - - - - - - - - - - - - - - - - - - - - - androecium dark brown - - - - - - - - - - - - - - - - - - - - - - - - fruit waxy - - - - - - - - - - - - - - - - - - - - - - - - fruit waxiness - - - - - - - - - - - - - - - - - - - - - - - - - - - - cambium phenotype - - - - - - - - - - - - - - - - - - - - - - - - cambium orange - - - - - - - - - - - - - - - - - - - - - - - - cambium color - - - - - - - - - - - - - - - - - - - - - - - - shoot internode increased length - - - - - - - - - - - - - - - - - - - - - - - - shoot internode length - - - - - - - - - - - - - - - - - - - - - - - - bract scalloped - - - - - - - - keel up - true - - - - - - - - - - - - - - - - - - - - - - - - fruit symmetrical - - - - - - - - - - - - - - - - - - - - - - - - fruit symmetry - - - - - - - - - - - - - - - - - - - - - - - - receptacle tomentose - - - - - - - - - - - - - - - - - - - - - - - - carpel spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - anther decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - bract brown - - - - - - - - - - - - - - - - - - - - - - - - filament yellow - - - - - - - - - - - - - - - - - - - - - - - - filament color - - - - - - - - - - - - - - - - - - - - - - - - style blue - - - - - - - - - - - - - - - - - - - - - - - - trichome bifurcated - - - - - - - - - - - - - - - - - - - - - - - - spikelet herbaceous - - - - - - - - - - - - - - - - - - - - - - - - spikelet shedability - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member attenuate - - - - - - - - - - - - - - - - - - - - - - - - sepal white - - - - - - - - - - - - - - - - - - - - - - - - ovary wall ovate - - - - - - - - - - - - - - - - - - - - - - - - pistillode spherical - - - - - - - - - - - - - - - - - - - - - - - - pistillode convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - carpel inserted into - - - - - - - - - - - - - - - - - - - - - - - - carpel position - - - - - - - - - - - - - - - - - - - - - - - - septum obovate - - - - - - - - - - - - - - - - - - - - - - - - septum convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract striated - - - - - - - - - - - - - - - - - - - - - - - - stigma setose - - - - - - - - - - - - - - - - - - - - - - - - infructescence simple - - - - - - - - - - - - - - - - - - - - - - - - infructescence complexity - - - - - - - - - - - - - - - - - - - - - - - - stem convex - - - - - - - - - - - - - - - - - - - - - - - - petal cylindrical - - - - - - - - cotyledon premature - true - - - - - - - - cotyledon onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - keel flat - - - - - - - - - - - - - - - - - - - - - - - - pappus triangular - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal hairy - - - - - - - - - - - - - - - - - - - - - - - - stalk decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stalk thickness - - - - - - - - - - - - - - - - - - - - - - - - trichome bilobed - - - - - - - - - - - - - - - - - - - - - - - - stigma columnar - - - - - - - - - - - - - - - - - - - - - - - - tepal dorsal to - - - - - - - - - - - - - - - - - - - - - - - - exocarp green - - - - - - - - - - - - - - - - - - - - - - - - bark flattened - - - - - - - - - - - - - - - - - - - - - - - - bark curvature - - - - - - - - - - - - - - - - - - - - - - - - pistillode glandular - - - - - - - - - - - - - - - - - - - - - - - - pistillode morphology - - - - - - - - - - - - - - - - - - - - - - - - anther theca sharpness - - - - - - - - - - - - - - - - - - - - - - - - filament cupulate - - - - - - - - - - - - - - - - - - - - - - - - filament concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiole warty - - - - - - - - - - - - - - - - - - - - - - - - tubercle revolute - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus thickness - - - - - - - - - - - - - - - - - - - - - - - - bract punctate - - - - - - - - - - - - - - - - - - - - - - - - pericarp yellow - - - - - - - - - - - - - - - - - - - - - - - - anther subtriangular - - - - - - - - - - - - - - - - - - - - - - - - bud pale pink - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus hairy - - - - - - - - - - - - - - - - - - - - - - - - parenchyma increased thickness - - - - - - - - - - - - - - - - - - - - - - - - parenchyma thickness - - - - - - - - - - - - - - - - - - - - - - - - growth ring linear - - - - - - - - - - - - - - - - - - - - - - - - stalk elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf inserted into - - - - - - - - - - - - - - - - - - - - - - - - petal slit-like - - - - - - - - - - - - - - - - - - - - - - - - growth ring basal to - - - - - - - - - - - - - - - - - - - - - - - - pedicel conical - - - - - - - - - - - - - - - - - - - - - - - - apical hook sterile - - - - - - - - - - - - - - - - - - - - - - - - apical hook fertility - - - - - - - - - - - - - - - - - - - - - - - - apical hook slit-like - - - - - - - - - - - - - - - - - - - - - - - - perianth purple - - - - - - - - - - - - - - - - - - - - - - - - ligule smooth - - - - - - - - - - - - - - - - - - - - - - - - connective inserted into - - - - - - - - - - - - - - - - - - - - - - - - cotyledon decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - cotyledon water composition - - - - - - - - - - - - - - - - - - - - - - - - whole plant transparent - - - - - - - - - - - - - - - - - - - - - - - - whole plant opacity - - - - - - - - - - - - - - - - - - - - - - - - pedicel inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - testa angular - - - - - - - - - - - - - - - - - - - - - - - - glume circular - - - - - - - - - - - - - - - - - - - - - - - - pistillode striated - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf simple - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf complexity - - - - - - - - - - - - - - - - - - - - - - - - shoot internode pubescent - - - - - - - - - - - - - - - - - - - - - - - - shoot internode maturity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet decreased amount - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet amount - - - - - - - - - - - - - - - - - - - - - - - - calyx exserted - - - - - - - - - - - - - - - - - - - - - - - - stigma decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - stigma water composition - - - - - - - - - - - - - - - - - - - - - - - - prickle falciform - - - - - - - - - - - - - - - - - - - - - - - - corolla dorsal to - - - - - - - - - - - - - - - - - - - - - - - - whole plant drooping - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle raised - - - - - - - - - - - - - - - - - - - - - - - - endocarp spotted - - - - - - - - - - - - - - - - - - - - - - - - endocarp color pattern - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure fleshy - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure composition - - - - - - - - - - - - - - - - - - - - - - - - bract undulate - - - - - - - - - - - - - - - - - - - - - - - - perianth firm - - - - - - - - - - - - - - - - - - - - - - - - seed grooved - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma acuminate - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma sharpness - - - - - - - - - - - - - - - - - - - - - - - - petiolule oblong - - - - - - - - - - - - - - - - - - - - - - - - leaf divergent from - - - - - - - - - - - - - - - - - - - - - - - - endocarp ornamentation - - - - - - - - - - - - - - - - - - - - - - - - endocarp surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - canal spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - crown root erect - - - - - - - - - - - - - - - - - - - - - - - - style concave - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein glandular - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein morphology - - - - - - - - - - - - - - - - - - - - - - - - flower angular - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein oblong - - - - - - - - - - - - - - - - - - - - - - - - receptacle obovate - - - - - - - - - - - - - - - - - - - - - - - - calyx red brown - - - - - - - - - - - - - - - - - - - - - - - - endocarp hairy - - - - - - - - - - - - - - - - - - - - - - - - infructescence obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf axil dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaflet areolate - - - - - - - - - - - - - - - - - - - - - - - - leaflet surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - lodicule decreased amount - - - - - - - - - - - - - - - - - - - - - - - - lodicule amount - - - - - - - - - - - - - - - - - - - - - - - - sepal striated - - - - - - - - stamen hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - leaf radius - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure lanceolate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure sharpness - - - - - - - - - - - - - - - - - - - - - - - - canal increased thickness - - - - - - - - - - - - - - - - - - - - - - - - oil gland areolate - - - - - - - - - - - - - - - - - - - - - - - - oil gland surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - costa sterile - - - - - - - - - - - - - - - - - - - - - - - - costa fertility - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle swollen - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle structure - - - - - - - - - - - - - - - - - - - - - - - - stipule decreased amount - - - - - - - - - - - - - - - - - - - - - - - - stipule amount - - - - - - - - - - - - - - - - - - - - - - - - peduncle oblong - - - - - - - - - - - - - - - - - - - - - - - - stamen convex - - - - - - - - - - - - - - - - - - - - - - - - leaf bifurcated - - - - - - - - - - - - - - - - - - - - - - - - tubercle curved - - - - - - - - - - - - - - - - - - - - - - - - tubercle curvature - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence notched - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence concavity - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence glandular - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence morphology - - - - - - - - - - - - - - - - - - - - - - - - bract spherical - - - - - - - - - - - - - - - - - - - - - - - - peduncle opposite - - - - - - - - - - - - - - - - - - - - - - - - stem prominent - - - - - - - - - - - - - - - - - - - - - - - - peduncle sparse - - - - - - - - - - - - - - - - - - - - - - - - stamen elliptic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence distal to - - - - - - - - - - - - - - - - - - - - - - - - central zone emarginate - - - - - - - - - - - - - - - - - - - - - - - - central zone concavity - - - - - - - - - - - - - - - - - - - - - - - - involucre exserted - - - - - - - - - - - - - - - - - - - - - - - - bract axial to - - - - - - - - - - - - - - - - - - - - - - - - pedicel funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - epicalyx erect - - - - - - - - - - - - - - - - - - - - - - - - bract dark green - - - - - - - - - - - - - - - - - - - - - - - - perianth flat - - - - - - - - - - - - - - - - - - - - - - - - perianth blue - - - - - - - - - - - - - - - - - - - - - - - - endocarp decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - endocarp water composition - - - - - - - - - - - - - - - - - - - - - - - - calyx inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - scutellar node fleshy - - - - - - - - - - - - - - - - - - - - - - - - scutellar node composition - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl folded - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet water composition - - - - - - - - - - - - - - - - - - - - - - - - nectary distributed - - - - - - - - - - - - - - - - - - - - - - - - nectary spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - corolla old - - - - - - - - - - - - - - - - - - - - - - - - corolla age - - - - - - - - - - - - - - - - - - - - - - - - scutellar node pubescent - - - - - - - - - - - - - - - - - - - - - - - - scutellar node maturity - - - - - - - - - - - - - - - - - - - - - - - - disk flower bilobed - - - - - - - - - - - - - - - - - - - - - - - - petiole margin undulate - - - - - - - - - - - - - - - - - - - - - - - - connective angular - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle sterile - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle fertility - - - - - - - - stamen up - true - - - - - - - - - - - - - - - - - - - - - - - - stamen direction - - - - - - - - - - - - - - - - - - - - - - - - thorn spotted - - - - - - - - - - - - - - - - - - - - - - - - thorn color pattern - - - - - - - - - - - - - - - - - - - - - - - - tubercle absent - - - - - - - - - - - - - - - - - - - - - - - - tubercle amount - - - - - - - - - - - - - - - - - - - - - - - - calyx recurved - - - - - - - - - - - - - - - - - - - - - - - - pistillode tripartite - - - - - - - - - - - - - - - - - - - - - - - - pistillode concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stamen green - - - - - - - - - - - - - - - - - - - - - - - - corolla robust - - - - - - - - - - - - - - - - - - - - - - - - perianth swollen - - - - - - - - - - - - - - - - - - - - - - - - stem ridged - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal fleshy - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal composition - - - - - - - - - - - - - - - - - - - - - - - - central zone obovate - - - - - - - - - - - - - - - - - - - - - - - - anther discoid - - - - - - - - - - - - - - - - - - - - - - - - stamen spatulate - - - - - - - - - - - - - - - - - - - - - - - - epidermis red - - - - - - - - - - - - - - - - - - - - - - - - petiole angular - - - - - - - - - - - - - - - - - - - - - - - - filament drooping - - - - - - - - leaf premature - true - - - - - - - - leaf onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - bract kinked - - - - - - - - - - - - - - - - - - - - - - - - stigma arched - - - - - - - - - - - - - - - - - - - - - - - - pedicel wrinkled - - - - - - - - - - - - - - - - - - - - - - - - hypanthium dilated - - - - - - - - - - - - - - - - - - - - - - - - hypanthium size - - - - - - - - - - - - - - - - - - - - - - - - leaf decumbent - - - - - - - - - - - - - - - - - - - - - - - - glandular trichome present - with glandular hairs - trichome glandular - - - - - - - - - - - - - - - - - - - - - - - - trichome morphology - - - - - - - - - - - - - - - - - - - - - - - - flower warty - - - - - - - - - - - - - - - - - - - - - - - - flower texture - - - - - - - - - - - - - - - - - - - - - - - - fruit inflated - - - - - - - - - - - - - - - - - - - - - - - - fruit structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - carpel elliptic - - - - - - - - - - - - - - - - - - - - - - - - branch fleshy - - - - - - - - - - - - - - - - - - - - - - - - branch composition - - - - - - - - - - - - - - - - - - - - - - - - leaflet auriculate - - - - - - - - - - - - - - - - - - - - - - - - filament lanceolate - - - - - - - - - - - - - - - - - - - - - - - - bracteole erect - - - - - - - - - - - - - - - - - - - - - - - - shoot apex slit-like - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue cuneate - - - - - - - - - - - - - - - - - - - - - - - - anther pointed - - - - - - - - - - - - - - - - - - - - - - - - connective subcircular - - - - - - - - - - - - - - - - - - - - - - - - axil conical - - - - - - - - - - - - - - - - - - - - - - - - corolla dilated - - - - - - - - - - - - - - - - - - - - - - - - corolla size - - - - - - - - - - - - - - - - - - - - - - - - rhizome dorsal to - - - - - - - - - - - - - - - - - - - - - - - - disk flower decreased amount - - - - - - - - - - - - - - - - - - - - - - - - disk flower amount - - - - - - - - - - - - - - - - - - - - - - - - pistillode flat - - - - - - - - - - - - - - - - - - - - - - - - pistillode curvature - - - - - - - - - - - - - - - - - - - - - - - - stem dense - - - - - - - - - - - - - - - - - - - - - - - - stem mass density - - - - - - - - - - - - - - - - - - - - - - - - glume increased thickness - - - - - - - - - - - - - - - - - - - - - - - - glume thickness - - - - - - - - - - - - - - - - - - - - - - - - epidermis hispid - - - - - - - - - - - - - - - - - - - - - - - - epidermis pubescent - - - - - - - - - - - - - - - - - - - - - - - - epidermis maturity - - - - - - - - - - - - - - - - - - - - - - - - locule lobed - - - - - - - - - - - - - - - - - - - - - - - - rhizome lateral to - - - - - - - - - - - - - - - - - - - - - - - - thallus flat - - - - - - - - - - - - - - - - - - - - - - - - thallus curvature - - - - - - - - - - - - - - - - - - - - - - - - caruncle diameter - - - - - - - - - - - - - - - - - - - - - - - - leaf inverted - - - - - - - - - - - - - - - - - - - - - - - - connective hollow - - - - - - - - - - - - - - - - - - - - - - - - connective structure, cavities - - - - - - - - lemma acute - true - - - - - - - - lemma duration - true - - - - - - - - - - - - - - - - - - - - - - - - fruit brittle - - - - - - - - - - - - - - - - - - - - - - - - axil kinked - - - - - - - - - - - - - - - - - - - - - - - - peduncle absent - - - - - - - - - - - - - - - - - - - - - - - - peduncle amount - - - - - - - - - - - - - - - - - - - - - - - - branch adhesive - - - - - - - - - - - - - - - - - - - - - - - - branch adhesivity - - - - - - - - - - - - - - - - - - - - - - - - caruncle white - - - - - - - - - - - - - - - - - - - - - - - - endocarp spherical - - - - - - - - - - - - - - - - - - - - - - - - endocarp convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - carpel raised - - - - - - - - - - - - - - - - - - - - - - - - endocarp rough - - - - - - - - - - - - - - - - - - - - - - - - inflorescence flattened - - - - - - - - - - - - - - - - - - - - - - - - inflorescence curvature - - - - - - - - - - - - - - - - - - - - - - - - style diameter - - - - - - - - - - - - - - - - - - - - - - - - corm diameter - - - - - - - - - - - - - - - - - - - - - - - - glume vestigial - - - - - - - - - - - - - - - - - - - - - - - - keel oblong - - - - - - - - - - - - - - - - - - - - - - - - leaf grooved - - - - - - - - - - - - - - - - - - - - - - - - stem leaf-like - - - - - - - - - - - - - - - - - - - - - - - - lamina scaly - - - - - - - - - - - - - - - - - - - - - - - - mesocarp absent - - - - - - - - - - - - - - - - - - - - - - - - mesocarp amount - - - - - - - - - - - - - - - - - - - - - - - - awn subulate - - - - - - - - - - - - - - - - - - - - - - - - infructescence red - - - - - - - - - - - - - - - - - - - - - - - - lower glume circular - - - - - - - - branch male - true - - - - - - - - branch phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence inserted into - - - - - - - - - - - - - - - - - - - - - - - - bract simple - - - - - - - - - - - - - - - - - - - - - - - - bract complexity - - - - - - - - - - - - - - - - - - - - - - - - disk flower cylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein truncated - - - - - - - - - - - - - - - - - - - - - - - - trichome scalloped - - - - - - - - - - - - - - - - - - - - - - - - pedicel punctate - - - - - - - - - - - - - - - - - - - - - - - - stigma trilobed - - - - - - - - - - - - - - - - - - - - - - - - trichome clavate - - - - - - - - - - - - - - - - - - - - - - - - trichome concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - carpel cylindrical - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal obtuse - - - - - - - - - - - - - - - - - - - - - - - - filament slit-like - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus increased thickness - - - - - - - - - - - - - - - - - - - - - - - - hilum ventral to - - - - - - - - - - - - - - - - - - - - - - - - lamina multicellular - - - - - - - - - - - - - - - - - - - - - - - - lamina cellularity - - - - - - - - - - - - - - - - - - - - - - - - sheath cell increased length - - - - - - - - - - - - - - - - - - - - - - - - sheath cell length - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle coiled - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle coiling - - - - - - - - - - - - - - - - - - - - - - - - sheath cell decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - sheath cell water composition - - - - - - - - - - - - - - - - - - - - - - - - filament clavate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue brittle - - - - - - - - - - - - - - - - - - - - - - - - calyx obconical - - - - - - - - - - - - - - - - - - - - - - - - peduncle discoid - - - - - - - - - - - - - - - - - - - - - - - - lamina marbled - - - - - - - - - - - - - - - - - - - - - - - - lamina color pattern - - - - - - - - - - - - - - - - - - - - - - - - petiole waxy - - - - - - - - - - - - - - - - - - - - - - - - petiole waxiness - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence ovate - - - - - - - - - - - - - - - - - - - - - - - - calyx flattened - - - - - - - - - - - - - - - - - - - - - - - - inflorescence inflexible - - - - - - - - - - - - - - - - - - - - - - - - inflorescence flexibility - - - - - - - - - - - - - - - - - - - - - - - - inflorescence shortened - - - - - - - - - - - - - - - - - - - - - - - - petal grooved - - - - - - - - - - - - - - - - - - - - - - - - rhizome increased size - - - - - - - - - - - - - - - - - - - - - - - - lamina trilobed - - - - - - - - - - - - - - - - - - - - - - - - trichome oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower time - - - - - - - - - - - - - - - - - - - - - - - - inflorescence young - - - - - - - - - - - - - - - - - - - - - - - - seed lateral to - - - - - - - - - - - - - - - - - - - - - - - - corolla blunt - - - - - - - - - - - - - - - - - - - - - - - - sepal prominent - - - - - - - - - - - - - - - - - - - - - - - - plant embryo conspicuous - - - - - - - - - - - - - - - - - - - - - - - - hilum circular - - - - - - - - - - - - - - - - - - - - - - - - radicle length - - - - - - - - - - - - - - - - - - - - - - - - infructescence increased length - - - - - - - - - - - - - - - - - - - - - - - - infructescence length - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem drooping - - - - - - - - - - - - - - - - - - - - - - - - peduncle decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - peduncle water composition - - - - - - - - - - - - - - - - - - - - - - - - seed dry - - - - - - - - - - - - - - - - - - - - - - - - seed wetness - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure ovate - - - - - - - - - - - - - - - - - - - - - - - - seed rectangular - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle condensed - - - - - - - - - - - - - - - - - - - - - - - - epicalyx funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - papilla cell spherical - - - - - - - - - - - - - - - - - - - - - - - - crown root ovate - - - - - - - - - - - - - - - - - - - - - - - - crown root convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petal lateral to - - - - - - - - - - - - - - - - - - - - - - - - pistillode decreased amount - - - - - - - - - - - - - - - - - - - - - - - - ovary wall dorsal to - - - - - - - - - - - - - - - - - - - - - - - - pericarp raised - - - - - - - - - - - - - - - - - - - - - - - - ray system inserted into - - - - - - - - - - - - - - - - - - - - - - - - involucre spherical - - - - - - - - - - - - - - - - - - - - - - - - calyx orange - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge bifurcated - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge branchiness - - - - - - - - - - - - - - - - - - - - - - - - receptacle inverted - - - - - - - - - - - - - - - - - - - - - - - - perianth decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - bark blue - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system texture - - - - - - - - - - - - - - - - - - - - - - - - mesocarp increased size - - - - - - - - - - - - - - - - - - - - - - - - mesocarp size - - - - - - - - - - - - - - - - - - - - - - - - keel obovate - - - - - - - - - - - - - - - - - - - - - - - - ligule raised - - - - - - - - - - - - - - - - - - - - - - - - perianth hispid - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein elliptic - - - - - - - - - - - - - - - - - - - - - - - - lamina rhomboid - - - - - - - - - - - - - - - - - - - - - - - - short shoot circumference - - - - - - - - - - - - - - - - - - - - - - - - perianth basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf base distichous - - - - - - - - - - - - - - - - - - - - - - - - leaf base position - - - - - - - - - - - - - - - - - - - - - - - - leaflet dentated - - - - - - - - - - - - - - - - - - - - - - - - lamina conspicuous - - - - - - - - - - - - - - - - - - - - - - - - corolla angular - - - - - - - - - - - - - - - - - - - - - - - - - - - - flower bud phenotype - - - - - - - - - - - - - - - - - - - - - - - - flower bud erect - - - - - - - - - - - - - - - - - - - - - - - - flower bud position - - - - - - - - - - - - - - - - - - - - - - - - costa old - - - - - - - - - - - - - - - - - - - - - - - - costa age - - - - - - - - - - - - - - - - - - - - - - - - aril fused with - - - - - - - - - - - - - - - - - - - - - - - - aril structure - - - - - - - - - - - - - - - - - - - - - - - - glume white - - - - - - - - - - - - - - - - - - - - - - - - glume color - - - - - - - - - - - - - - - - - - - - - - - - pedicel angle - - - - - - - - - - - - - - - - - - - - - - - - bud rough - - - - - - - - - - - - - - - - - - - - - - - - bud texture - - - - - - - - - - - - - - - - - - - - - - - - axil decreased amount - - - - - - - - - - - - - - - - - - - - - - - - carpel reniform - - - - - - - - - - - - - - - - - - - - - - - - carpel concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed trichome smooth - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore slit-like - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore shape - - - - - - - - - - - - - - - - - - - - - - - - petiole present - - - - - - - - - - - - - - - - - - - - - - - - trichome emarginate - - - - - - - - - - - - - - - - - - - - - - - - seed triangular - - - - - - - - - - - - - - - - - - - - - - - - plant cell undulate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence convex - - - - - - - - - - - - - - - - - - - - - - - - lamina prostrate - - - - - - - - - - - - - - - - - - - - - - - - leaf spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure simple - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure complexity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem inserted into - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - bud diameter - - - - - - - - - - - - - - - - - - - - - - - - tepal pedicellate - - - - - - - - - - - - - - - - - - - - - - - - tepal attachment quality - - - - - - - - - - - - - - - - - - - - - - - - staminode abaxial to - - - - - - - - - - - - - - - - - - - - - - - - calyx kinked - - - - - - - - - - - - - - - - - - - - - - - - pappus slender - - - - - - - - - - - - - - - - - - - - - - - - pericarp wrinkled - - - - - - - - - - - - - - - - - - - - - - - - petiole margin punctate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - costa diameter - - - - - - - - - - - - - - - - - - - - - - - - lenticel hairy - - - - - - - - - - - - - - - - - - - - - - - - style discoid - - - - - - - - - - - - - - - - - - - - - - - - leaf old - - - - - - - - - - - - - - - - - - - - - - - - endocarp basal to - - - - - - - - - - - - - - - - - - - - - - - - root tip undulate - - - - - - - - - - - - - - - - - - - - - - - - sapwood soft - - - - - - - - - - - - - - - - - - - - - - - - sapwood hardness - - - - - - - - - - - - - - - - - - - - - - - - stipule basal to - - - - - - - - - - - - - - - - - - - - - - - - cotyledon retuse - - - - - - - - - - - - - - - - - - - - - - - - petal diameter - - - - - - - - - - - - - - - - - - - - - - - - pistillode back - - - - - - - - - - - - - - - - - - - - - - - - pistillode direction - - - - - - - - - - - - - - - - - - - - - - - - testa glandular - - - - - - - - - - - - - - - - - - - - - - - - testa morphology - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal decreased amount - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal amount - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle inserted into - - - - - - - - - - - - - - - - - - - - - - - - infructescence drooping - - - - - - - - - - - - - - - - - - - - - - - - infructescence shape - - - - - - - - - - - - - - - - - - - - - - - - stamen undulate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure exserted - - - - - - - - - - - - - - - - - - - - - - - - filament dentated - - - - - - - - - - - - - - - - - - - - - - - - fruit divergent from - - - - - - - - - - - - - - - - - - - - - - - - bract distal to - - - - - - - - - - - - - - - - - - - - - - - - pedicel triangular - - - - - - - - - - - - - - - - - - - - - - - - banner petal spherical - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet curved - - - - - - - - - - - - - - - - - - - - - - - - calyx bilobed - - - - - - - - - - - - - - - - - - - - - - - - petiolule cut - - - - - - - - - - - - - - - - - - - - - - - - involucre basal to - - - - - - - - - - - - - - - - - - - - - - - - style condensed - - - - - - - - - - - - - - - - - - - - - - - - seed trichome oblong - - - - - - - - - - - - - - - - - - - - - - - - radicle present - - - - - - - - - - - - - - - - - - - - - - - - radicle amount - - - - - - - - - - - - - - - - - - - - - - - - bark conspicuous - - - - - - - - - - - - - - - - - - - - - - - - palea absent - - - - - - - - - - - - - - - - - - - - - - - - palea amount - - - - - - - - - - - - - - - - - - - - - - - - ovary wall raised - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein dispersed - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus linear - - - - - - - - - - - - - - - - - - - - - - - - prickle obtuse - - - - - - - - - - - - - - - - - - - - - - - - prickle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - anther protruding into - - - - - - - - - - - - - - - - - - - - - - - - endocarp axial to - - - - - - - - - - - - - - - - - - - - - - - - lamina erect - - - - - - - - - - - - - - - - - - - - - - - - leaflet diameter - - - - - - - - - - - - - - - - - - - - - - - - tubercle simple - - - - - - - - - - - - - - - - - - - - - - - - tubercle complexity - - - - - - - - - - - - - - - - - - - - - - - - lower glume brown - - - - - - - - - - - - - - - - - - - - - - - - pedicel cupulate - - - - - - - - - - - - - - - - - - - - - - - - pedicel concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - exocarp raised - - - - - - - - - - - - - - - - - - - - - - - - exocarp shape - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - axil branched - - - - - - - - - - - - - - - - - - - - - - - - axil branchiness - - - - - - - - - - - - - - - - - - - - - - - - keel linear - - - - - - - - - - - - - - - - - - - - - - - - gynoecium elliptic - - - - - - - - - - - - - - - - - - - - - - - - gynoecium 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bracteole present - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member undulate - - - - - - - - - - - - - - - - - - - - - - - - flower clavate - - - - - - - - - - - - - - - - - - - - - - - - branch serrated - - - - - - - - - - - - - - - - - - - - - - - - corolla oblanceolate - - - - - - - - leaf apex subacute - true - - - - - - - - leaf apex duration - true - - - - - - - - - - - - - - - - - - - - - - - - calyx hispid - - - - - - - - - - - - - - - - - - - - - - - - peduncle star shaped - - - - - - - - - - - - - - - - - - - - - - - - parenchyma decreased thickness - - - - - - - - lamina subacute - true - - - - - - - - - - - - - - - - - - - - - - - - fruit elongated - - - - - - - - - - - - - - - - - - - - - - - - involucre lanceolate - - - - - - - - - - - - - - - - - - - - - - - - fruit auriculate - - - - - - - - - - - - - - - - - - - - - - - - peduncle inflexible - - - - - - - - - - - - - - - - - - - - - - - - peduncle flexibility - - - - - - - - - - - - - - - - - - - - - - - - corm oblique to - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina green - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina color - - - - - - - - - - - - - - - - - - - - - - - - fruit involute - - - - - - - - - - - - - - - - - - - - - - - - aril bilobed - - - - - - - - - - - - - - - - - - - - - - - - cortex tomentose - - - - - - - - - - - - - - - - - - - - - - - - cortex pilosity - - - - - - - - - - - - - - - - - - - - - - - - tuberous root tomentose - - - - - - - - - - - - - - - - - - - - - - - - tuberous root pilosity - - - - - - - - gynoecium female - true - - - - - - - - gynoecium phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - lower glume smooth - - - - - - - - - - - - - - - - - - - - - - - - lower glume texture - - - - - - - - - - - - - - - - - - - - - - - - inflorescence autogenous - - - - - - - - - - - - - - - - - - - - - - - - tuber firm - - - - - - - - - - - - - - - - - - - - - - - - tuber hardness - - - - - - - - - - - - - - - - - - - - - - - - seed trichome glandular - - - - - - - - - - - - - - - - - - - - - - - - seed trichome morphology - - - - - - - - - - - - - - - - - - - - - - - - perianth dentated - - - - - - - - - - - - - - - - - - - - - - - - cotyledon circular - - - - - - - - - - - - - - - - - - - - - - - - axil pale pink - - - - - - - - - - - - - - - - - - - - - - - - caruncle black - - - - - - - - - - - - - - - - - - - - - - - - stamen ovate - - - - - - - - - - - - - - - - - - - - - - - - aril notched - - - - - - - - - - - - - - - - - - - - - - - - aril concavity - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal basal to - - - - - - - - - - - - - - - - - - - - - - - - anther basal to - - - - - - - - - - - - - - - - - - - - - - - - anther fusiform - - - - - - - - - - - - - - - - - - - - - - - - seta ovate - - - - - - - - - - - - - - - - - - - - - - - - seta convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiole cleft - - - - - - - - - - - - - - - - - - - - - - - - bracteole autogenous - - - - - - - - - - - - - - - - - - - - - - - - bracteole structure - - - - - - - - - - - - - - - - - - - - - - - - stalk pedicellate - - - - - - - - - - - - - - - - - - - - - - - - stalk attachment quality - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle cuspidate - - - - - - - - - - - - - - - - - - - - - - - - epidermis oblong - - - - - - - - - - - - - - - - - - - - - - - - seed simple - - - - - - - - - - - - - - - - - - - - - - - - seed complexity - - - - - - - - - - - - - - - - - - - - - - - - glume emarginate - - - - - - - - - - - - - - - - - - - - - - - - petal notched - - - - - - - - - - - - - - - - - - - - - - - - leaf diameter - - - - - - - - - - - - - - - - - - - - - - - - pollen glabrous - - - - - - - - - - - - - - - - - - - - - - - - pollen pilosity - - - - - - - - - - - - - - - - - - - - - - - - seed trichome ovate - - - - - - - - - - - - - - - - - - - - - - - - lamina distance - - - - - - - - - - - - - - - - - - - - - - - - corolla conspicuous - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma absent - - - - - - - - - - - - - - - - - - - - - - - - lenticel glistening - - - - - - - - - - - - - - - - - - - - - - - - lenticel reflectivity - - - - - - - - - - - - - - - - - - - - - - - - filament circular - - - - - - - - - - - - - - - - - - - - - - - - endosperm cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - keel digitate - - - - - - - - - - - - - - - - - - - - - - - - tuber herbaceous - - - - - - - - - - - - - - - - - - - - - - - - tuber shedability - - - - - - - - - - - - - - - - - - - - - - - - leaf flexible - - - - - - - - - - - - - - - - - - - - - - - - stipel ovate - - - - - - - - - - - - - - - - - - - - - - - - stipel convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf apex glandular - - - - - - - - - - - - - - - - - - - - - - - - leaf apex morphology - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system symmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system symmetry - - - - - - - - - - - - - - - - - - - - - - - - rhizome oblique to - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma inverted - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma spatial pattern - - - - - - - - calyx subacute - true - - - - - - - - costa up - true - - - - - - - - - - - - - - - - - - - - - - - - costa direction - - - - - - - - - - - - - - - - - - - - - - - - corolla retracted - - - - - - - - - - - - - - - - - - - - - - - - carpel dentated - - - - - - - - - - - - - - - - - - - - - - - - whole plant smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril cuneate - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - epicalyx increased length - - - - - - - - - - - - - - - - - - - - - - - - epicalyx length - - - - - - - - - - - - - - - - - - - - - - - - valve lateral to - - - - - - - - - - - - - - - - - - - - - - - - petiole dark brown - - - - - - - - - - - - - - - - - - - - - - - - leaf margin glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf margin pilosity - - - - - - - - - - - - - - - - - - - - - - - - branch purple - - - - - - - - - - - - - - - - - - - - - - - - branch color - - - - - - - - - - - - - - - - - - - - - - - - filament banded - - - - - - - - - - - - - - - - - - - - - - - - filament color pattern - - - - - - - - - - - - - - - - - - - - - - - - flower cuneate - - - - - - - - - - - - - - - - - - - - - - - - hydathode simple - - - - - - - - - - - - - - - - - - - - - - - - hydathode complexity - - - - - - - - - - - - - - - - - - - - - - - - testa ventral to - - - - - - - - - - - - - - - - - - - - - - - - seed trichome pointed - - - - - - - - - - - - - - - - - - - - - - - - scutellar node increased length - - - - - - - - - - - - - - - - - - - - - - - - scutellar node length - - - - - - - - - - - - - - - - - - - - - - - - leaf rhomboid - - - - - - - - - - - - - - - - - - - - - - - - calyx fusiform - - - - - - - - seed trichome premature - true - - - - - - - - seed trichome onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel grooved - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf simple - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf complexity - - - - - - - - - - - - - - - - - - - - - - - - bracteole simple - - - - - - - - - - - - - - - - - - - - - - - - bracteole complexity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bronze - - - - - - - - - - - - - - - - - - - - - - - - flower fertile - - - - - - - - - - - - - - - - - - - - - - - - stigma lanceolate - - - - - - - - - - - - - - - - - - - - - - - - pedicel attenuate - - - - - - - - - - - - - - - - - - - - - - - - aril broken - - - - - - - - - - - - - - - - - - - - - - - - aril wholeness - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus alternate placement - - - - - - - - - - - - - - - - - - - - - - - - whole plant coiled - - - - - - - - - - - - - - - - - - - - - - - - whole plant coiling - - - - - - - - - - - - - - - - - - - - - - - - petiolule obovate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp triangular - - - - - - - - - - - - - - - - - - - - - - - - seed attached to - - - - - - - - - - - - - - - - - - - - - - - - seed attachment quality - - - - - - - - - - - - - - - - - - - - - - - - central zone scalloped - - - - - - - - - - - - - - - - - - - - - - - - lamina level with - - - - - - - - - - - - - - - - - - - - - - - - lower glume oblong - - - - - - - - - - - - - - - - - - - - - - - - disk flower glandular - - - - - - - - - - - - - - - - - - - - - - - - disk flower morphology - - - - - - - - - - - - - - - - - - - - - - - - aril condensed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence green - - - - - - - - - - - - - - - - - - - - - - - - receptacle green - - - - - - - - - - - - - - - - - - - - - - - - ovary wall exserted - - - - - - - - - - - - - - - - - - - - - - - - glume linear - - - - - - - - - - - - - - - - - - - - - - - - carpel lateral to - - - - - - - - - - - - - - - - - - - - - - - - anther sterile - - - - - - - - - - - - - - - - - - - - - - - - anther fertility - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet emarginate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet concavity - - - - - - - - - - - - - - - - - - - - - - - - tubercle subulate - - - - - - - - - - - - - - - - - - - - - - - - fruit dark brown - - - - - - - - - - - - - - - - - - - - - - - - involucre attenuate - - - - - - - - - - - - - - - - - - - - - - - - aril black - - - - - - - - - - - - - - - - - - - - - - - - stalk increased thickness - - - - - - - - - - - - - - - - - - - - - - - - bract present - - - - - - - - - - - - - - - - - - - - - - - - anther lateral to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall star shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx grooved - - - - - - - - - - - - - - - - - - - - - - - - epicalyx triangular - - - - - - - - funicle up - true - - - - - - - - - - - - - - - - - - - - - - - - funicle direction - - - - - - - - - - - - - - - - - - - - - - - - petiole distributed - - - - - - - - - - - - - - - - - - - - - - - - tepal circular - - - - - - - - - - - - - - - - - - - - - - - - seed laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - ovary wall dentated - - - - - - - - - - - - - - - - - - - - - - - - carpel blue - - - - - - - - - - - - - - - - - - - - - - - - pedicel recurved - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem kinked - - - - - - - - - - - - - - - - - - - - - - - - connective back - - - - - - - - - - - - - - - - - - - - - - - - pericarp ventral to - - - - - - - - - - - - - - - - - - - - - - - - filament raised - - - - - - - - - - - - - - - - - - - - - - - - stipule glandular - - - - - - - - - - - - - - - - - - - - - - - - stipule morphology - - - - - - - - - - - - - - - - - - - - - - - - hydathode broad - - - - - - - - - - - - - - - - - - - - - - - - hydathode shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet bilobed - - - - - - - - - - - - - - - - - - - - - - - - tubercle circular - - - - - - - - - - - - - - - - - - - - - - - - stipel tomentose - - - - - - - - - - - - - - - - - - - - - - - - leaflet autogenous - - - - - - - - - - - - - - - - - - - - - - - - perianth yellow green - - - - - - - - - - - - - - - - - - - - - - - - sepal basal to - - - - - - - - - - - - - - - - - - - - - - - - petal lilac - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - root tip recurved - - - - - - - - - - - - - - - - - - - - - - - - root tip curvature - - - - - - - - keel subacute - true - - - - - - - - - - - - - - - - - - - - - - - - leaf whole - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril furrowed - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril texture - - - - - - - - - - - - - - - - - - - - - - - - central zone autogenous - - - - - - - - - - - - - - - - - - - - - - - - perianth diameter - - - - - - - - - - - - - - - - - - - - - - - - leaf spatulate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal increased thickness - - - - - - - - - - - - - - - - - - - - - - - - corolla subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - trichome whorled - - - - - - - - - - - - - - - - - - - - - - - - fruit congested - - - - - - - - - - - - - - - - - - - - - - - - sheath cell cauline to - - - - - - - - - - - - - - - - - - - - - - - - seed lanceolate - - - - - - - - - - - - - - - - - - - - - - - - endocarp green - - - - - - - - - - - - - - - - - - - - - - - - style smooth - - - - - - - - - - - - - - - - - - - - - - - - petal opposite - - - - - - - - - - - - - - - - - - - - - - - - papilla cell increased thickness - - - - - - - - - - - - - - - - - - - - - - - - papilla cell thickness - - - - - - - - - - - - - - - - - - - - - - - - seed diameter - - - - - - - - - - - - - - - - - - - - - - - - receptacle pubescent - - - - - - - - - - - - - - - - - - - - - - - - petiole bifurcated - - - - - - - - - - - - - - - - - - - - - - - - corolla dark red - - - - - - - - - - - - - - - - - - - - - - - - hydathode raised - - - - - - - - - - - - - - - - - - - - - - - - endosperm spongy - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure alternate placement - - - - - - - - - - - - - - - - - - - - - - - - leaf decussate - - - - - - - - shoot apex female - true - - - - - - - - shoot apex phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - trichome distichous - - - - - - - - - - - - - - - - - - - - - - - - petiolule linear - - - - - - - - - - - - - - - - - - - - - - - - calyx leaf-like - - - - - - - - - - - - - - - - - - - - - - - - lenticel angular - - - - - - - - - - - - - - - - - - - - - - - - petiolule erect - - - - - - - - - - - - - - - - - - - - - - - - gynophore diameter - - - - - - - - - - - - - - - - - - - - - - - - stigma dense - - - - - - - - - - - - - - - - - - - - - - - - stigma mass density - - - - - - - - - - - - - - - - - - - - - - - - involucre glabrous - - - - - - - - - - - - - - - - - - - - - - - - involucre pilosity - - - - - - - - - - - - - - - - - - - - - - - - seed red brown - - - - - - - - - - - - - - - - - - - - - - - - keel orange - - - - - - - - corolla female - true - - - - - - - - - - - - - - - - - - - - - - - - cotyledon ovate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - endosperm convex - - - - - - - - - - - - - - - - - - - - - - - - cotyledon obtuse - - - - - - - - - - - - - - - - - - - - - - - - nectary obovate - - - - - - - - - - - - - - - - - - - - - - - - nectary convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - areole bud elliptic - - - - - - - - - - - - - - - - - - - - - - - - flower red - - - - - - - - - - - - - - - - - - - - - - - - leaf warty - - - - - - - - - - - - - - - - - - - - - - - - stigma tapered - - - - - - - - - - - - - - - - - - - - - - - - locule dense - - - - - - - - - - - - - - - - - - - - - - - - locule mass density - - - - - - - - - - - - - - - - - - - - - - - - bark tomentose - - - - - - - - - - - - - - - - - - - - - - - - stigma raised - - - - - - - - - - - - - - - - - - - - - - - - calyx green - - - - - - - - - - - - - - - - - - - - - - - - hypanthium cuneate - - - - - - - - - - - - - - - - - - - - - - - - heartwood red - - - - - - - - - - - - - - - - - - - - - - - - heartwood color - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein water composition - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle fleshy - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle composition - - - - - - - - - - - - - - - - - - - - - - - - fruit kinked - - - - - - - - - - - - - - - - - - - - - - - - seed orbicular - - - - - - - - - - - - - - - - - - - - - - - - oil gland ovate - - - - - - - - - - - - - - - - - - - - - - - - oil gland convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - branch opposite - - - - - - - - - - - - - - - - - - - - - - - - costa acuminate - - - - - - - - - - - - - - - - - - - - - - - - perianth whole - - - - - - - - - - - - - - - - - - - - - - - - perianth wholeness - - - - - - - - - - - - - - - - - - - - - - - - aril mature - - - - - - - - - - - - - - - - - - - - - - - - aril maturity - - - - - - - - - - - - - - - - - - - - - - - - gynoecium drooping - - - - - - - - - - - - - - - - - - - - - - - - gynoecium shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence convex - - - - - - - - phyllome sinus premature - true - - - - - - - - phyllome sinus onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - ovary wall bifurcated - - - - - - - - - - - - - - - - - - - - - - - - ovary wall branchiness - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - pith grooved - - - - - - - - - - - - - - - - - - - - - - - - pith texture - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence triangular - - - - - - - - - - - - - - - - - - - - - - - - corolla bifurcated - - - - - - - - - - - - - - - - - - - - - - - - corolla branchiness - - - - - - - - - - - - - - - - - - - - - - - - root unbranched - - - - - - - - - - - - - - - - - - - - - - - - carpel white - - - - - - - - - - - - - - - - - - - - - - - - involucre dark purple - - - - - - - - - - - - - - - - - - - - - - - - lamina smooth - - - - - - - - - - - - - - - - - - - - - - - - stipel triangular - - - - - - - - - - - - - - - - - - - - - - - - stipel 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - exocarp granular - - - - - - - - - - - - - - - - - - - - - - - - aril increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stigma smooth - - - - - - - - - - - - - - - - - - - - - - - - glume sterile - - - - - - - - - - - - - - - - - - - - - - - - glume fertility - - - - - - - - - - - - - - - - - - - - - - - - bract autogenous - - - - - - - - - - - - - - - - - - - - - - - - androecium terminal - - - - - - - - - - - - - - - - - - - - - - - - lamina emarginate - - - - - - - - - - - - - - - - - - - - - - - - spikelet basal to - - - - - - - - - - - - - - - - - - - - - - - - bracteole emarginate - - - - - - - - seed trichome arrested - true - - - - - - - - seed trichome offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - endocarp spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - fruit ridged - - - - - - - - tassel sessile spikelet hermaphrodite - true - - - - - - - - tassel sessile spikelet phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - banner petal linear - - - - - - - - - - - - - - - - - - - - - - - - flower adjacent to - - - - - - - - - - - - - - - - - - - - - - - - peduncle concealed by - - - - - - - - - - - - - - - - - - - - - - - - glume terminal - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle recurved - - - - - - - - - - - - - - - - - - - - - - - - lamina yellow green - - - - - - - - - - - - - - - - - - - - - - - - ovary wall sterile - - - - - - - - - - - - - - - - - - - - - - - - ovary wall fertility - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member hispid - - - - - - - - - - - - - - - - - - - - - - - - whole plant flattened - - - - - - - - - - - - - - - - - - - - - - - - whole plant curvature - - - - - - - - - - - - - - - - - - - - - - - - plant callus oblong - - - - - - - - - - - - - - - - - - - - - - - - aril attenuate - - - - - - - - - - - - - - - - - - - - - - - - aril sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem decussate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus orbicular - - - - - - - - - - - - - - - - - - - - - - - - stamen lateral to - - - - - - - - - - - - - - - - - - - - - - - - style fused with - - - - - - - - - - - - - - - - - - - - - - - - leaf sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - glume dorsal to - - - - - - - - - - - - - - - - - - - - - - - - corolla firm - - - - - - - - - - - - - - - - - - - - - - - - corolla hardness - - - - - - - - - - - - - - - - - - - - - - - - plant cell simple - - - - - - - - - - - - - - - - - - - - - - - - plant cell complexity - - - - - - - - - - - - - - - - - - - - - - - - endocarp hard - - - - - - - - - - - - - - - - - - - - - - - - endocarp hardness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium punctate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium spatial pattern - - - - - - - - trichome female - true - - - - - - - - - - - - - - - - - - - - - - - - androecium oblong - - - - - - - - - - - - - - - - - - - - - - - - style dry - - - - - - - - - - - - - - - - - - - - - - - - style wetness - - - - - - - - - - - - - - - - - - - - - - - - whole plant autogenous - - - - - - - - - - - - - - - - - - - - - - - - leaf base elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf base 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - testa elongated - - - - - - - - - - - - - - - - - - - - - - - - perianth obtuse - - - - - - - - - - - - - - - - - - - - - - - - pericarp spherical - - - - - - - - - - - - - - - - - - - - - - - - lemma brown - - - - - - - - - - - - - - - - - - - - - - - - crown root terminal - - - - - - - - - - - - - - - - - - - - - - - - radicle erect - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus elliptic - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle fertile - - - - - - - - - - - - - - - - - - - - - - - - plant callus increased thickness - - - - - - - - - - - - - - - - - - - - - - - - plant callus thickness - - - - - - - - spore capsule annulus female - true - - - - - - - - spore capsule annulus phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - prickle elliptic - - - - - - - - - - - - - - - - - - - - - - - - bracteole yellow brown - - - - - - - - - - - - - - - - - - - - - - - - bracteole color - - - - - - - - - - - - - - - - - - - - - - - - sporangium simple - - - - - - - - - - - - - - - - - - - - - - - - sporangium complexity - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium multi-colored - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium color pattern - - - - - - - - gynoecium arrested - true - - - - - - - - gynoecium offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - anther symmetrical - - - - - - - - - - - - - - - - - - - - - - - - anther symmetry - - - - - - - - - - - - - - - - - - - - - - - - inflorescence alternate placement - - - - - - - - - - - - - - - - - - - - - - - - stamen open - - - - - - - - - - - - - - - - - - - - - - - - stamen closure - - - - - - - - - - - - - - - - - - - - - - - - corolla yellow green - - - - - - - - - - - - - - - - - - - - - - - - costa straight - - - - - - - - - - - - - - - - - - - - - - - - flower protruding - - - - - - - - bracteole hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - ligule brown - - - - - - - - persistent sepal premature - true - - - - - - - - persistent sepal onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - endocarp truncated - - - - - - - - - - - - - - - - - - - - - - - - pappus increased length - - - - - - - - - - - - - - - - - - - - - - - - pappus length - - - - - - - - - - - - - - - - - - - - - - - - pericarp warty - - - - - - - - - - - - - - - - - - - - - - - - tubercle basal to - - - - - - - - - - - - - - - - - - - - - - - - leaflet angular - - - - - - - - - - - - - - - - - - - - - - - - trichome ovate - - - - - - - - - - - - - - - - - - - - - - - - branch immature - - - - - - - - - - - - - - - - - - - - - - - - valve convex - - - - - - - - - - - - - - - - - - - - - - - - valve concavity - - - - - - - - - - - - - - - - - - - - - - - - rhizome pointed - - - - - - - - - - - - - - - - - - - - - - - - stem sunken - - - - - - - - - - - - - - - - - - - - - - - - stem elevation - - - - - - - - - - - - - - - - - - - - - - - - stalk wrinkled - - - - - - - - - - - - - - - - - - - - - - - - stalk texture - - - - - - - - - - - - - - - - - - - - - - - - infructescence soft - - - - - - - - - - - - - - - - - - - - - - - - infructescence hardness - - - - - - - - - - - - - - - - - - - - - - - - root terminal - - - - - - - - - - - - - - - - - - - - - - - - corolla cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - crown root sharpness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle hispid - - - - - - - - - - - - - - - - - - - - - - - - bract smooth - - - - - - - - - - - - - - - - - - - - - - - - bract texture - - - - - - - - - - - - - - - - - - - - - - - - stalk curved - - - - - - - - - - - - - - - - - - - - - - - - rhizome elliptic - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet ventral to - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus cylindrical - - - - - - - - - - - - - - - - - - - - - - - - receptacle inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - lamina sparse - - - - - - - - - - - - - - - - - - - - - - - - lamina spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue emarginate - - - - - - - - - - - - - - - - - - - - - - - - valve glabrous - - - - - - - - - - - - - - - - - - - - - - - - lamina opaque - - - - - - - - - - - - - - - - - - - - - - - - lamina opacity - - - - - - - - - - - - - - - - - - - - - - - - funicle cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - funicle composition - - - - - - - - - - - - - - - - - - - - - - - - gynophore smooth - - - - - - - - - - - - - - - - - - - - - - - - gynophore texture - - - - - - - - - - - - - - - - - - - - - - - - fruit pointed - - - - - - - - - - - - - - - - - - - - - - - - central zone white - - - - - - - - - - - - - - - - - - - - - - - - central zone color - - - - - - - - - - - - - - - - - - - - - - - - style warty - - - - - - - - - - - - - - - - - - - - - - - - seed red - - - - - - - - - - - - - - - - - - - - - - - - pedicel fusiform - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet cupulate - - - - - - - - - - - - - - - - - - - - - - - - calyx distributed - - - - - - - - - - - - - - - - - - - - - - - - radicle folded - - - - - - - - - - - - - - - - - - - - - - - - radicle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - apical hook cylindrical - - - - - - - - - - - - - - - - - - - - - - - - petiole recurved - - - - - - - - - - - - - - - - - - - - - - - - sheath cell dentated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle waxy - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle waxiness - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma punctate - - - - - - - - - - - - - - - - - - - - - - - - receptacle erect - - - - - - - - - - - - - - - - - - - - - - - - peduncle inflated - - - - - - - - - - - - - - - - - - - - - - - - peduncle structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - aril present - - - - - - - - - - - - - - - - - - - - - - - - apical hook scalloped - - - - - - - - - - - - - - - - - - - - - - - - petal broken - - - - - - - - - - - - - - - - - - - - - - - - petal wholeness - - - - - - - - - - - - - - - - - - - - - - - - lamina opposite - - - - - - - - - - - - - - - - - - - - - - - - septum inflated - - - - - - - - - - - - - - - - - - - - - - - - septum structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - locule oblong - - - - - - - - - - - - - - - - - - - - - - - - locule 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - branch inflexible - - - - - - - - - - - - - - - - - - - - - - - - branch flexibility - - - - - - - - - - - - - - - - - - - - - - - - inflorescence yellow - - - - - - - - - - - - - - - - - - - - - - - - stigma hard - - - - - - - - - - - - - - - - - - - - - - - - stigma hardness - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue clavate - - - - - - - - - - - - - - - - - - - - - - - - keel curved - - - - - - - - - - - - - - - - - - - - - - - - lower glume adaxial to - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member bilobed - - - - - - - - - - - - - - - - - - - - - - - - bud autogenous - - - - - - - - - - - - - - - - - - - - - - - - glume dentated - - - - - - - - - - - - - - - - - - - - - - - - anther absent - - - - - - - - - - - - - - - - - - - - - - - - seed swollen - - - - - - - - - - - - - - - - - - - - - - - - bracteole kinked - - - - - - - - - - - - - - - - - - - - - - - - stele glabrous - - - - - - - - - - - - - - - - - - - - - - - - stele pilosity - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus bilobed - - - - - - - - - - - - - - - - - - - - - - - - epidermis fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - locule diameter - - - - - - - - staminode hermaphrodite - true - - - - - - - - staminode phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - epicotyl phenotype - - - - - - - - - - - - - - - - - - - - - - - - epicotyl glabrous - - - - - - - - - - - - - - - - - - - - - - - - epicotyl pilosity - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf triangular - - - - - - - - - - - - - - - - - - - - - - - - stamen brittle - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus increased length - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus length - - - - - - - - - - - - - - - - - - - - - - - - pedicel concave - - - - - - - - - - - - - - - - - - - - - - - - receptacle basal to - - - - - - - - - - - - - - - - - - - - - - - - lemma lanceolate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal autogenous - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal structure - - - - - - - - - - - - - - - - - - - - - - - - stamen basal to - - - - - - - - - - - - - - - - - - - - - - - - sepal distance - - - - - - - - - - - - - - - - - - - - - - - - testa foveate - - - - - - - - - - - - - - - - - - - - - - - - corolla sterile - - - - - - - - - - - - - - - - - - - - - - - - stem arachnose - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue transparent - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue opacity - - - - - - - - - - - - - - - - - - - - - - - - whole plant curved - - - - - - - - filament up - true - - - - - - - - - - - - - - - - - - - - - - - - filament direction - - - - - - - - - - - - - - - - - - - - - - - - root pubescent - - - - - - - - - - - - - - - - - - - - - - - - root maturity - - - - - - - - - - - - - - - - - - - - - - - - tubercle increased length - - - - - - - - - - - - - - - - - - - - - - - - tubercle length - - - - - - - - - - - - - - - - - - - - - - - - shoot internode branched - - - - - - - - - - - - - - - - - - - - - - - - shoot internode branchiness - - - - - - - - - - - - - - - - - - - - - - - - peristome brown - - - - - - - - - - - - - - - - - - - - - - - - stamen furrowed - - - - - - - - - - - - - - - - - - - - - - - - stamen texture - - - - - - - - - - - - - - - - - - - - - - - - corolla proximal to - - - - - - - - - - - - - - - - - - - - - - - - upper glume pubescent - - - - - - - - - - - - - - - - - - - - - - - - upper glume maturity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall clavate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - funicle basal to - - - - - - - - - - - - - - - - - - - - - - - - funicle position - - - - - - - - - - - - - - - - - - - - - - - - caruncle tight - - - - - - - - - - - - - - - - - - - - - - - - caruncle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - inflorescence curved - - - - - - - - - - - - - - - - - - - - - - - - trichome obtuse - - - - - - - - - - - - - - - - - - - - - - - - petiole revolute - - - - - - - - - - - - - - - - - - - - - - - - corolla inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal heart shaped - - - - - - - - - - - - - - - - - - - - - - - - coma basal to - - - - - - - - - - - - - - - - - - - - - - - - coma position - - - - - - - - - - - - - - - - - - - - - - - - stem heart shaped - - - - - - - - - - - - - - - - - - - - - - - - papilla cell obovate - - - - - - - - - - - - - - - - - - - - - - - - leaflet prominent - - - - - - - - - - - - - - - - - - - - - - - - anther convolute - - - - - - - - - - - - - - - - - - - - - - - - corolla spatulate - - - - - - - - - - - - - - - - - - - - - - - - whole plant white - - - - - - - - - - - - - - - - - - - - - - - - corolla area - - - - - - - - whole plant premature - true - - - - - - - - whole plant onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - crown root punctate - - - - - - - - - - - - - - - - - - - - - - - - lemma confluent with - - - - - - - - - - - - - - - - - - - - - - - - coma glabrous - - - - - - - - - - - - - - - - - - - - - - - - coma pilosity - - - - - - - - - - - - - - - - - - - - - - - - plant cell dentated - - - - - - - - shoot apex male - true - - - - - - - - - - - - - - - - - - - - - - - - costa sunken - - - - - - - - - - - - - - - - - - - - - - - - costa elevation - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein opposite - - - - - - - - ligule up - true - - - - - - - - - - - - - - - - - - - - - - - - ligule direction - - - - - - - - - - - - - - - - - - - - - - - - central zone triangular - - - - - - - - - - - - - - - - - - - - - - - - apical hook concave - - - - - - - - - - - - - - - - - - - - - - - - apical hook concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf oblique to - - - - - - - - - - - - - - - - - - - - - - - - shoot internode angular - - - - - - - - - - - - - - - - - - - - - - - - anther fleshy - - - - - - - - - - - - - - - - - - - - - - - - anther composition - - - - - - - - - - - - - - - - - - - - - - - - root diameter - - - - - - - - - - - - - - - - - - - - - - - - bud cuneate - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril pedicellate - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril attachment quality - - - - - - - - - - - - - - - - - - - - - - - - lenticel furrowed - - - - - - - - - - - - - - - - - - - - - - - - flower kinked - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root bifurcated - - - - - - - - - - - - - - - - - - - - - - - - sporangium smooth - - - - - - - - - - - - - - - - - - - - - - - - sporangium texture - - - - - - - - - - - - - - - - - - - - - - - - tepal star shaped - - - - - - - - - - - - - - - - - - - - - - - - scutellar node punctate - - - - - - - - - - - - - - - - - - - - - - - - scutellar node spatial pattern - - - - - - - - leaflet subacute - true - - - - - - - - - - - - - - - - - - - - - - - - flower recurved - - - - - - - - - - - - - - - - - - - - - - - - receptacle red - - - - - - - - - - - - - - - - - - - - - - - - endocarp hispid - - - - - - - - - - - - - - - - - - - - - - - - lamina old - - - - - - - - - - - - - - - - - - - - - - - - perianth fertile - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue cylindrical - - - - - - - - - - - - - - - - - - - - - - - - testa spongy - - - - - - - - - - - - - - - - - - - - - - - - bracteole oblong - - - - - - - - - - - - - - - - - - - - - - - - pericarp brown - - - - - - - - - - - - - - - - - - - - - - - - petiolule white - - - - - - - - - - - - - - - - - - - - - - - - glume straight - - - - - - - - - - - - - - - - - - - - - - - - receptacle tubular - - - - - - - - - - - - - - - - - - - - - - - - glume kinked - - - - - - - - - - - - - - - - - - - - - - - - leaf inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus swollen - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus structure - - - - - - - - - - - - - - - - - - - - - - - - seed marbled - - - - - - - - - - - - - - - - - - - - - - - - seed color pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - antiraphe phenotype - - - - - - - - - - - - - - - - - - - - - - - - antiraphe attached to - - - - - - - - - - - - - - - - - - - - - - - - antiraphe attachment quality - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal circular - - - - - - - - tubercle up - true - - - - - - - - - - - - - - - - - - - - - - - - tubercle direction - - - - - - - - - - - - - - - - - - - - - - - - stalk inverted - - - - - - - - - - - - - - - - - - - - - - - - stalk spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence warty - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence texture - - - - - - - - - - - - - - - - - - - - - - - - tuber swollen - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein lanceolate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member obtuse - - - - - - - - - - - - - - - - - - - - - - - - scutellar node cylindrical - - - - - - - - - - - - - - - - - - - - - - - - bracteole oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - palea hispidulous - - - - - - - - - - - - - - - - - - - - - - - - costa parallel to - - - - - - - - - - - - - - - - - - - - - - - - anther opposite - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell increased thickness - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath articulated with - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath structure - - - - - - - - - - - - - - - - - - - - - - - - simple leaf simple - - - - - - - - - - - - - - - - - - - - - - - - simple leaf complexity - - - - - - - - - - - - - - - - - - - - - - - - pedicel autogenous - - - - - - - - - - - - - - - - - - - - - - - - pedicel orange - - - - - - - - - - - - - - - - - - - - - - - - androecium trilobed - - - - - - - - - - - - - - - - - - - - - - - - rhizome unbranched - - - - - - - - - - - - - - - - - - - - - - - - stipule area - - - - - - - - leaf down - true - - - - - - - - short shoot female - true - - - - - - - - short shoot phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - calyx yellow green - - - - - - - - - - - - - - - - - - - - - - - - lamina hispidulous - - - - - - - - - - - - - - - - - - - - - - - - stalk grey - - - - - - - - - - - - - - - - - - - - - - - - cotyledon obovate - - - - - - - - - - - - - - - - - - - - - - - - fruit flat - - - - - - - - - - - - - - - - - - - - - - - - tubercle grey - - - - - - - - - - - - - - - - - - - - - - - - trichome decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - trichome water composition - - - - - - - - - - - - - - - - - - - - - - - - pedicel emarginate - - - - - - - - - - - - - - - - - - - - - - - - pedicel furrowed - - - - - - - - - - - - - - - - - - - - - - - - peduncle straight - - - - - - - - - - - - - - - - - - - - - - - - pedicel cauline to - - - - - - - - - - - - - - - - - - - - - - - - flower prominent - - - - - - - - - - - - - - - - - - - - - - - - seed trichome punctate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - sepal notched - - - - - - - - - - - - - - - - - - - - - - - - stalk linear - - - - - - - - - - - - - - - - - - - - - - - - sepal sunken - - - - - - - - - - - - - - - - - - - - - - - - sepal elevation - - - - - - - - - - - - - - - - - - - - - - - - keel back - - - - - - - - - - - - - - - - - - - - - - - - flower arched - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal terminal - - - - - - - - - - - - - - - - - - - - - - - - style pointed - - - - - - - - - - - - - - - - - - - - - - - - crown root constricted - - - - - - - - - - - - - - - - - - - - - - - - root tip convex - - - - - - - - - - - - - - - - - - - - - - - - root tip glandular - - - - - - - - - - - - - - - - - - - - - - - - root tip morphology - - - - - - - - - - - - - - - - - - - - - - - - leaf attached to - - - - - - - - - - - - - - - - - - - - - - - - petiole hispidulous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue decreased amount - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue amount - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis terminal - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis position - - - - - - - - - - - - - - - - - - - - - - - - central zone cylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex cut - - - - - - - - - - - - - - - - - - - - - - - - lenticel circular - - - - - - - - - - - - - - - - - - - - - - - - upper glume linear - - - - - - - - - - - - - - - - - - - - - - - - leaflet sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - calyx trilobed - - - - - - - - - - - - - - - - - - - - - - - - funicle attached to - - - - - - - - - - - - - - - - - - - - - - - - funicle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - hilum undulate - - - - - - - - - - - - - - - - - - - - - - - - glume spotted - - - - - - - - - - - - - - - - - - - - - - - - glume color pattern - - - - - - - - - - - - - - - - - - - - - - - - bud waxy - - - - - - - - - - - - - - - - - - - - - - - - bud waxiness - - - - - - - - - - - - - - - - - - - - - - - - petiole dark green - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue decussate - - - - - - - - - - - - - - - - - - - - - - - - bracteole obovate - - - - - - - - - - - - - - - - - - - - - - - - seed waxy - - - - - - - - - - - - - - - - - - - - - - - - seed waxiness - - - - - - - - - - - - - - - - - - - - - - - - pappus black - - - - - - - - - - - - - - - - - - - - - - - - valve oblong - - - - - - - - - - - - - - - - - - - - - - - - carpel fused with - - - - - - - - - - - - - - - - - - - - - - - - lower glume hairy - - - - - - - - - - - - - - - - - - - - - - - - lower glume pilosity - - - - - - - - - - - - - - - - - - - - - - - - stigma absent - - - - - - - - - - - - - - - - - - - - - - - - stigma amount - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet cuneate - - - - - - - - - - - - - - - - - - - - - - - - rhizome triangular - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium bifurcated - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium branchiness - - - - - - - - - - - - - - - - - - - - - - - - testa increased thickness - - - - - - - - - - - - - - - - - - - - - - - - tubercle glandular - - - - - - - - - - - - - - - - - - - - - - - - tubercle morphology - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence constricted - - - - - - - - - - - - - - - - - - - - - - - - terminal bud terminal - - - - - - - - - - - - - - - - - - - - - - - - terminal bud position - - - - - - - - - - - - - - - - - - - - - - - - root tip transparent - - - - - - - - - - - - - - - - - - - - - - - - root tip opacity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet convex - - - - - - - - - - - - - - - - - - - - - - - - stigma bent - - - - - - - - - - - - - - - - - - - - - - - - petiole attached to - - - - - - - - - - - - - - - - - - - - - - - - petiole attachment quality - - - - - - - - - - - - - - - - - - - - - - - - petiolule punctate - - - - - - - - - - - - - - - - - - - - - - - - petiolule attenuate - - - - - - - - - - - - - - - - - - - - - - - - involucre tubular - - - - - - - - - - - - - - - - - - - - - - - - exocarp star shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx slender - - - - - - - - - - - - - - - - - - - - - - - - septum separating - - - - - - - - - - - - - - - - - - - - - - - - septum structure - - - - - - - - - - - - - - - - - - - - - - - - costa inconspicuous - - - - - - - - axil hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus pubescent - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus maturity - - - - - - - - - - - - - - - - - - - - - - - - flower bud elongated - - - - - - - - - - - - - - - - - - - - - - - - flower bud shape - - - - - - - - carpel up - true - - - - - - - - - - - - - - - - - - - - - - - - carpel direction - - - - - - - - - - - - - - - - - - - - - - - - areole bud autogenous - - - - - - - - - - - - - - - - - - - - - - - - areole bud structure - - - - - - - - - - - - - - - - - - - - - - - - bud surrounding - - - - - - - - - - - - - - - - - - - - - - - - flower light brown - - - - - - - - - - - - - - - - - - - - - - - - testa green - - - - - - - - - - - - - - - - - - - - - - - - glume inserted into - - - - - - - - - - - - - - - - - - - - - - - - bark upturned - - - - - - - - - - - - - - - - - - - - - - - - cotyledon increased length - - - - - - - - - - - - - - - - - - - - - - - - cotyledon length - - - - - - - - - - - - - - - - - - - - - - - - perianth overlapping - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure cuneate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex conspicuous - - - - - - - - - - - - - - - - - - - - - - - - stalk inserted into - - - - - - - - - - - - - - - - - - - - - - - - peduncle decreased amount - - - - - - - - - - - - - - - - - - - - - - - - bark size - - - - - - - - - - - - - - - - - - - - - - - - seed lobed - - - - - - - - - - - - - - - - - - - - - - - - flower retuse - - - - - - - - - - - - - - - - - - - - - - - - carpel recurved - - - - - - - - - - - - - - - - - - - - - - - - locule obovate - - - - - - - - - - - - - - - - - - - - - - - - locule convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - whole plant dense - - - - - - - - - - - - - - - - - - - - - - - - whole plant mass density - - - - - - - - - - - - - - - - - - - - - - - - rhizome subulate - - - - - - - - - - - - - - - - - - - - - - - - shoot internode decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - awn raised - - - - - - - - - - - - - - - - - - - - - - - - papilla cell raised - - - - - - - - - - - - - - - - - - - - - - - - petiolule star shaped - - - - - - - - - - - - - - - - - - - - - - - - stipule orbicular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence flat - - - - - - - - - - - - - - - - - - - - - - - - bract sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - style elongated - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system autogenous - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system structure - - - - - - - - - - - - - - - - - - - - - - - - whole plant yellow - - - - - - - - - - - - - - - - - - - - - - - - root decumbent - - - - - - - - - - - - - - - - - - - - - - - - petal brittle - - - - - - - - - - - - - - - - - - - - - - - - stolon increased length - - - - - - - - - - - - - - - - - - - - - - - - stolon length - - - - - - - - - - - - - - - - - - - - - - - - staminode flattened - - - - - - - - - - - - - - - - - - - - - - - - petiolule prominent - - - - - - - - - - - - - - - - - - - - - - - - upper glume emarginate - - - - - - - - - - - - - - - - - - - - - - - - upper glume concavity - - - - - - - - - - - - - - - - - - - - - - - - pedicel rough - - - - - - - - - - - - - - - - - - - - - - - - infructescence sparse - - - - - - - - - - - - - - - - - - - - - - - - infructescence spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - sepal rectangular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence subulate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet glistening - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet reflectivity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex involute - - - - - - - - - - - - - - - - - - - - - - - - stalk funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - ligule acuminate - - - - - - - - - - - - - - - - - - - - - - - - tuber fleshy - - - - - - - - - - - - - - - - - - - - - - - - tuber composition - - - - - - - - - - - - - - - - - - - - - - - - tubercle size - - - - - - - - - - - - - - - - - - - - - - - - bud present - - - - - - - - - - - - - - - - - - - - - - - - stipel lateral to - - - - - - - - - - - - - - - - - - - - - - - - flower emarginate - - - - - - - - - - - - - - - - - - - - - - - - bract funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - corolla strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - perianth surrounding - - - - - - - - - - - - - - - - - - - - - - - - anther curved - - - - - - - - - - - - - - - - - - - - - - - - leaf mixed - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet caudate - - - - - - - - - - - - - - - - - - - - - - - - androecium diameter - - - - - - - - - - - - - - - - - - - - - - - - pedicel clavate - - - - - - - - - - - - - - - - - - - - - - - - glume curved - - - - - - - - - - - - - - - - - - - - - - - - petal white - - - - - - - - - - - - - - - - - - - - - - - - lamina dense - - - - - - - - - - - - - - - - - - - - - - - - lamina mass density - - - - - - - - - - - - - - - - - - - - - - - - endocarp level with - - - - - - - - - - - - - - - - - - - - - - - - leaflet width - - - - - - - - - - - - - - - - - - - - - - - - peristome circular - - - - - - - - - - - - - - - - - - - - - - - - peristome 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - carpel drooping - - - - - - - - - - - - - - - - - - - - - - - - lamina V-shaped - - - - - - - - - - - - - - - - - - - - - - - - pericarp distributed - - - - - - - - - - - - - - - - - - - - - - - - pericarp spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stipule distichous - - - - - - - - - - - - - - - - - - - - - - - - keel grooved - - - - - - - - - - - - - - - - - - - - - - - - keel texture - - - - - - - - - - - - - - - - - - - - - - - - leaflet cut - - - - - - - - - - - - - - - - - - - - - - - - scutellar node circular - - - - - - - - - - - - - - - - - - - - - - - - spikelet simple - - - - - - - - - - - - - - - - - - - - - - - - spikelet complexity - - - - - - - - - - - - - - - - - - - - - - - - cotyledon decussate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon spatial pattern - - - - - - - - fruit hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - carpel decreased amount - - - - - - - - - - - - - - - - - - - - - - - - carpel amount - - - - - - - - - - - - - - - - - - - - - - - - mesocarp axial to - - - - - - - - - - - - - - - - - - - - - - - - lemma pointed - - - - - - - - - - - - - - - - - - - - - - - - branch orbicular - - - - - - - - - - - - - - - - - - - - - - - - peduncle furrowed - - - - - - - - - - - - - - - - - - - - - - - - whole plant aromatic - - - - - - - - - - - - - - - - - - - - - - - - whole plant aromaticity - - - - - - - - - - - - - - - - - - - - - - - - hilum terminal - - - - - - - - - - - - - - - - - - - - - - - - lamina lobate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet punctate - - - - - - - - - - - - - - - - - - - - - - - - stigma spheroid - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system terminal - - - - - - - - - - - - - - - - - - - - - - - - leaf blue - - - - - - - - - - - - - - - - - - - - - - - - peduncle wrinkled - - - - - - - - - - - - - - - - - - - - - - - - lamina herbaceous - - - - - - - - - - - - - - - - - - - - - - - - lamina shedability - - - - - - - - - - - - - - - - - - - - - - - - corolla truncated - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue spongy - - - - - - - - - - - - - - - - - - - - - - - - spikelet concave - - - - - - - - - - - - - - - - - - - - - - - - whole plant cuneate - - - - - - - - - - - - - - - - - - - - - - - - valve pubescent - - - - - - - - - - - - - - - - - - - - - - - - valve maturity - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure oblong - - - - - - - - - - - - - - - - - - - - - - - - stalk rough - - - - - - - - - - - - - - - - - - - - - - - - aril yellow orange - - - - - - - - - - - - - - - - - - - - - - - - - - - - perisperm phenotype - - - - - - - - - - - - - - - - - - - - - - - - perisperm absent - - - - - - - - - - - - - - - - - - - - - - - - perisperm amount - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem obovate - - - - - - - - - - - - - - - - - - - - - - - - seed truncated - - - - - - - - - - - - - - - - - - - - - - - - whole plant pinnate - - - - - - - - - - - - - - - - - - - - - - - - stalk fleshy - - - - - - - - - - - - - - - - - - - - - - - - stalk composition - - - - - - - - - - - - - - - - - - - - - - - - anther condensed - - - - - - - - - - - - - - - - - - - - - - - - connective orange - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein dentated - - - - - - - - - - - - - - - - - - - - - - - - seed trichome increased thickness - - - - - - - - - - - - - - - - - - - - - - - - trichome convolute - - - - - - - - - - - - - - - - - - - - - - - - sepal undulate - - - - - - - - - - - - - - - - - - - - - - - - hilum curved - - - - - - - - - - - - - - - - - - - - - - - - root herbaceous - - - - - - - - - - - - - - - - - - - - - - - - root shedability - - - - - - - - - - - - - - - - - - - - - - - - costa length - - - - - - - - - - - - - - - - - - - - - - - - corolla decreased amount - - - - - - - - - - - - - - - - - - - - - - - - corolla amount - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system orbicular - - - - - - - - - - - - - - - - - - - - - - - - axil diameter - - - - - - - - - - - - - - - - - - - - - - - - leaflet decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - leaflet water composition - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf glabrous - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf pilosity - - - - - - - - - - - - - - - - - - - - - - - - lemma punctate - - - - - - - - - - - - - - - - - - - - - - - - lemma spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - glume condensed - - - - - - - - - - - - - - - - - - - - - - - - filament red - - - - - - - - - - - - - - - - - - - - - - - - bracteole increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stipel brittle - - - - - - - - - - - - - - - - - - - - - - - - stipel structure - - - - - - - - - - - - - - - - - - - - - - - - keel pink - - - - - - - - filament premature - true - - - - - - - - filament onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - sepal leaf-like - - - - - - - - - - - - - - - - - - - - - - - - bark dark green - - - - - - - - - - - - - - - - - - - - - - - - canal heart shaped - - - - - - - - - - - - - - - - - - - - - - - - canal concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - trichome prominent - - - - - - - - - - - - - - - - - - - - - - - - leaflet striated - - - - - - - - - - - - - - - - - - - - - - - - - - - - hypodermis phenotype - - - - - - - - - - - - - - - - - - - - - - - - hypodermis absent - - - - - - - - - - - - - - - - - - - - - - - - hypodermis amount - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue sterile - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue fertility - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf auriculate - - - - - - - - - - - - - - - - - - - - - - - - peristome front - - - - - - - - - - - - - - - - - - - - - - - - peristome direction - - - - - - - - - - - - - - - - - - - - - - - - valve fleshy - - - - - - - - - - - - - - - - - - - - - - - - valve composition - - - - - - - - - - - - - - - - - - - - - - - - lamina undivided - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle angular - - - - - - - - - - - - - - - - - - - - - - - - pappus obtuse - - - - - - - - - - - - - - - - - - - - - - - - bark circular - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore furrowed - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore texture - - - - - - - - - - - - - - - - - - - - - - - - flower spotted - - - - - - - - - - - - - - - - - - - - - - - - flower color pattern - - - - - - - - - - - - - - - - - - - - - - - - ovary wall multi-colored - - - - - - - - - - - - - - - - - - - - - - - - ovary wall color pattern - - - - - - - - - - - - - - - - - - - - - - - - pedicel conspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein concave - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein concavity - - - - - - - - - - - - - - - - - - - - - - - - caruncle smooth - - - - - - - - - - - - - - - - - - - - - - - - caruncle texture - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle clavate - - - - - - - - - - - - - - - - - - - - - - - - testa wrinkled - - - - - - - - - - - - - - - - - - - - - - - - awn back - - - - - - - - - - - - - - - - - - - - - - - - peduncle obtuse angle to - - - - - - - - - - - - - - - - - - - - - - - - peduncle angle - - - - - - - - - - - - - - - - - - - - - - - - awn acuminate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence clavate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pappus erect - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril sterile - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril fertility - - - - - - - - - - - - - - - - - - - - - - - - seed osseous - - - - - - - - - - - - - - - - - - - - - - - - filament arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - areole bud smooth - - - - - - - - - - - - - - - - - - - - - - - - areole bud texture - - - - - - - - - - - - - - - - - - - - - - - - peristome curved - - - - - - - - - - - - - - - - - - - - - - - - valve right - - - - - - - - - - - - - - - - - - - - - - - - valve direction - - - - - - - - - - - - - - - - - - - - - - - - scutellar node decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stipule fleshy - - - - - - - - - - - - - - - - - - - - - - - - stipule composition - - - - - - - - - - - - - - - - - - - - - - - - keel flattened - - - - - - - - - - - - - - - - - - - - - - - - receptacle dry - - - - - - - - - - - - - - - - - - - - - - - - receptacle wetness - - - - - - - - - - - - - - - - - - - - - - - - perianth emarginate - - - - - - - - - - - - - - - - - - - - - - - - anther split - - - - - - - - - - - - - - - - - - - - - - - - lower glume discoid - - - - - - - - - - - - - - - - - - - - - - - - flower transparent - - - - - - - - - - - - - - - - - - - - - - - - flower opacity - - - - - - - - - - - - - - - - - - - - - - - - columella fleshy - - - - - - - - - - - - - - - - - - - - - - - - columella composition - - - - - - - - - - - - - - - - - - - - - - - - sheath cell decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - sheath cell thickness - - - - - - - - - - - - - - - - - - - - - - - - stipel subulate - - - - - - - - - - - - - - - - - - - - - - - - stipel shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet retuse - - - - - - - - - - - - - - - - - - - - - - - - sepal arched - - - - - - - - - - - - - - - - - - - - - - - - stipule whorled - - - - - - - - - - - - - - - - - - - - - - - - awn emarginate - - - - - - - - - - - - - - - - - - - - - - - - awn concavity - - - - - - - - - - - - - - - - - - - - - - - - stalk shortened - - - - - - - - - - - - - - - - - - - - - - - - stigma lateral to - - - - - - - - - - - - - - - - - - - - - - - - connective fused with - - - - - - - - - - - - - - - - - - - - - - - - hypanthium brown - - - - - - - - - - - - - - - - - - - - - - - - filament bent - - - - - - - - - - - - - - - - - - - - - - - - epicotyl striated - - - - - - - - - - - - - - - - - - - - - - - - epicotyl shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - sepal bent - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure fused with - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure structure - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue oblong - - - - - - - - - - - - - - - - - - - - - - - - androecium autogenous - - - - - - - - - - - - - - - - - - - - - - - - receptacle subcircular - - - - - - - - - - - - - - - - - - - - - - - - staminode alternate placement - - - - - - - - - - - - - - - - - - - - - - - - aril convex - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system basal to - - - - - - - - - - - - - - - - - - - - - - - - fruit distal to - - - - - - - - - - - - - - - - - - - - - - - - stipule flattened - - - - - - - - - - - - - - - - - - - - - - - - stipule curvature - - - - - - - - - - - - - - - - - - - - - - - - seed pedicellate - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle spherical - - - - - - - - - - - - - - - - - - - - - - - - anther theca acuminate - - - - - - - - - - - - - - - - - - - - - - - - epicotyl pubescent - - - - - - - - - - - - - - - - - - - - - - - - epicotyl maturity - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf lanceolate - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf sharpness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member star shaped - - - - - - - - - - - - - - - - - - - - - - - - aril granular - - - - - - - - - - - - - - - - - - - - - - - - stigma front - - - - - - - - - - - - - - - - - - - - - - - - stigma direction - - - - - - - - - - - - - - - - - - - - - - - - axil smooth - - - - - - - - - - - - - - - - - - - - - - - - axil texture - - - - - - - - - - - - - - - - - - - - - - - - fruit exserted - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue serrated - - - - - - - - - - - - - - - - - - - - - - - - hilum yellow - - - - - - - - - - - - - - - - - - - - - - - - disk flower lobed - - - - - - - - - - - - - - - - - - - - - - - - bark viscous - - - - - - - - - - - - - - - - - - - - - - - - bark viscosity - - - - - - - - - - - - - - - - - - - - - - - - rhizome sunken - - - - - - - - - - - - - - - - - - - - - - - - rhizome elevation - - - - - - - - - - - - - - - - - - - - - - - - stem angle - - - - - - - - - - - - - - - - - - - - - - - - stolon increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stolon thickness - - - - - - - - - - - - - - - - - - - - - - - - sepal ventral to - - - - - - - - - - - - - - - - - - - - - - - - involucre oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - bark rectangular - - - - - - - - - - - - - - - - - - - - - - - - stalk raised - - - - - - - - - - - - - - - - - - - - - - - - valve coiled - - - - - - - - - - - - - - - - - - - - - - - - valve coiling - - - - - - - - - - - - - - - - - - - - - - - - leaf procumbent - - - - - - - - - - - - - - - - - - - - - - - - testa ornamentation - - - - - - - - - - - - - - - - - - - - - - - - crown root decreased amount - - - - - - - - - - - - - - - - - - - - - - - - crown root amount - - - - - - - - - - - - - - - - - - - - - - - - - - - - shoot axis phenotype - - - - - - - - - - - - - - - - - - - - - - - - shoot axis orange - - - - - - - - - - - - - - - - - - - - - - - - shoot axis color - - - - - - - - - - - - - - - - - - - - - - - - sepal lateral to - - - - - - - - - - - - - - - - - - - - - - - - sepal emarginate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence coating - - - - - - - - - - - - - - - - - - - - - - - - stipule auriculate - - - - - - - - - - - - - - - - - - - - - - - - bark star shaped - - - - - - - - - - - - - - - - - - - - - - - - branch open - - - - - - - - - - - - - - - - - - - - - - - - branch closure - - - - - - - - - - - - - - - - - - - - - - - - rhizome spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - cortex grey - - - - - - - - - - - - - - - - - - - - - - - - cortex color - - - - - - - - - - - - - - - - - - - - - - - - keel straight - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue orbicular - - - - - - - - stereome acute - true - - - - - - - - stereome duration - true - - - - - - - - - - - - - - - - - - - - - - - - anther theca drooping - - - - - - - - - - - - - - - - - - - - - - - - stamen bifurcated - - - - - - - - - - - - - - - - - - - - - - - - stamen branchiness - - - - - - - - - - - - - - - - - - - - - - - - petal brown - - - - - - - - - - - - - - - - - - - - - - - - flower maroon - - - - - - - - - - - - - - - - - - - - - - - - gynoecium discoid - - - - - - - - - - - - - - - - - - - - - - - - leaflet decreased amount - - - - - - - - - - - - - - - - - - - - - - - - leaflet amount - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein punctate - - - - - - - - - - - - - - - - - - - - - - - - pedicel subcircular - - - - - - - - - - - - - - - - - - - - - - - - calyx decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - calyx water composition - - - - - - - - - - - - - - - - - - - - - - - - placenta ovate - - - - - - - - - - - - - - - - - - - - - - - - stipule absent - - - - - - - - - - - - - - - - - - - - - - - - flower caudate - - - - - - - - - - - - - - - - - - - - - - - - pedicel mature - - - - - - - - - - - - - - - - - - - - - - - - plant embryo striated - - - - - - - - - - - - - - - - - - - - - - - - pith striated - - - - - - - - - - - - - - - - - - - - - - - - root tip waxy - - - - - - - - - - - - - - - - - - - - - - - - root tip waxiness - - - - - - - - - - - - - - - - - - - - - - - - corolla conical - - - - - - - - - - - - - - - - - - - - - - - - anther dentated - - - - - - - - - - - - - - - - - - - - - - - - ovary wall coiled - - - - - - - - - - - - - - - - - - - - - - - - ovary wall coiling - - - - - - - - - - - - - - - - - - - - - - - - endosperm basal to - - - - - - - - - - - - - - - - - - - - - - - - endosperm position - - - - - - - - - - - - - - - - - - - - - - - - tubercle rough - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure pubescent - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure maturity - - - - - - - - - - - - - - - - - - - - - - - - thorn obovate - - - - - - - - - - - - - - - - - - - - - - - - keel fleshy - - - - - - - - - - - - - - - - - - - - - - - - keel composition - - - - - - - - - - - - - - - - - - - - - - - - corolla fleshy - - - - - - - - - - - - - - - - - - - - - - - - corolla composition - - - - - - - - - - - - - - - - - - - - - - - - carpel obovate - - - - - - - - - - - - - - - - - - - - - - - - style distal to - - - - - - - - - - - - - - - - - - - - - - - - flower ventral to - - - - - - - - - - - - - - - - - - - - - - - - hilum square - - - - - - - - - - - - - - - - - - - - - - - - epicalyx discoid - - - - - - - - - - - - - - - - - - - - - - - - epicalyx convex 3-D shape - - - - - - - - petiolule subacute - true - - - - - - - - - - - - - - - - - - - - - - - - prickle decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaflet dense - - - - - - - - - - - - - - - - - - - - - - - - leaflet mass density - - - - - - - - - - - - - - - - - - - - - - - - branch reniform - - - - - - - - petal male - - true - - - - - - - - petal phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - style translucent - - - - - - - - - - - - - - - - - - - - - - - - style opacity - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue alternate placement - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue angular - - - - - - - - - - - - - - - - - - - - - - - - leaflet yellow - - - - - - - - - - - - - - - - - - - - - - - - apical hook decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - apical hook clavate - - - - - - - - - - - - - - - - - - - - - - - - apical hook concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex open - - - - - - - - - - - - - - - - - - - - - - - - shoot apex closure - - - - - - - - - - - - - - - - - - - - - - - - involucre sterile - - - - - - - - - - - - - - - - - - - - - - - - trichome wrinkled - - - - - - - - - - - - - - - - - - - - - - - - crown root cylindrical - - - - - - - - - - - - - - - - - - - - - - - - style arched - - - - - - - - - - - - - - - - - - - - - - - - flower branched - - - - - - - - - - - - - - - - - - - - - - - - ligule coiled - - - - - - - - - - - - - - - - - - - - - - - - ligule coiling - - - - - - - - - - - - - - - - - - - - - - - - seed trichome adaxial to - - - - - - - - - - - - - - - - - - - - - - - - apical hook funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - papilla cell clavate - - - - - - - - - - - - - - - - - - - - - - - - papilla cell concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - flower bract phenotype - - - - - - - - - - - - - - - - - - - - - - - - flower bract triangular - - - - - - - - - - - - - - - - - - - - - - - - flower bract 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower decumbent - - - - - - - - - - - - - - - - - - - - - - - - lamina adaxial to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex brittle - - - - - - - - - - - - - - - - - - - - - - - - tepal fleshy - - - - - - - - - - - - - - - - - - - - - - - - tepal composition - - - - - - - - ligule acute - true - - - - - - - - ligule duration - true - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein glistening - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein reflectivity - - - - - - - - - - - - - - - - - - - - - - - - banner petal triangular - - - - - - - - - - - - - - - - - - - - - - - - stigma unicellular - - - - - - - - - - - - - - - - - - - - - - - - stigma cellularity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet cylindrical - - - - - - - - - - - - - - - - - - - - - - - - tubercle erect - - - - - - - - - - - - - - - - - - - - - - - - - - - - mesophyll phenotype - - - - - - - - - - - - - - - - - - - - - - - - mesophyll branched - - - - - - - - - - - - - - - - - - - - - - - - mesophyll branchiness - - - - - - - - - - - - - - - - - - - - - - - - disk flower exserted - - - - - - - - - - - - - - - - - - - - - - - - hilum distal to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence glistening - - - - - - - - - - - - - - - - - - - - - - - - inflorescence reflectivity - - - - - - - - - - - - - - - - - - - - - - - - shoot internode drooping - - - - - - - - - - - - - - - - - - - - - - - - flower columnar - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle distributed - - - - - - - - - - - - - - - - - - - - - - - - pappus decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - pappus water composition - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure autogenous - - - - - - - - stigma up - true - - - - - - - - - - - - - - - - - - - - - - - - stele obovate - - - - - - - - - - - - - - - - - - - - - - - - fruit leaf-like - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle spotted - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle color pattern - - - - - - - - - - - - - - - - - - - - - - - - stamen fused with - - - - - - - - - - - - - - - - - - - - - - - - style caudate - - - - - - - - - - - - - - - - - - - - - - - - fruit present - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member bifurcated - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member branchiness - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein dorsal to - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma coiled - - - - - - - - - - - - - - - - - - - - - - - - stigma coiling - - - - - - - - - - - - - - - - - - - - - - - - gynoecium truncated - - - - - - - - - - - - - - - - - - - - - - - - lamina glandular - - - - - - - - - - - - - - - - - - - - - - - - lamina morphology - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member water composition - - - - - - - - ovary wall hermaphrodite - true - - - - - - - - ovary wall phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - epidermis lanceolate - - - - - - - - - - - - - - - - - - - - - - - - epidermis sharpness - - - - - - - - - - - - - - - - - - - - - - - - carpel acuminate - - - - - - - - - - - - - - - - - - - - - - - - perianth abaxial to - - - - - - - - - - - - - - - - - - - - - - - - petiole pedicellate - - - - - - - - - - - - - - - - - - - - - - - - pistillode cylindrical - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal attenuate - - - - - - - - - - - - - - - - - - - - - - - - filament closed - - - - - - - - - - - - - - - - - - - - - - - - filament closure - - - - - - - - - - - - - - - - - - - - - - - - branch convex - - - - - - - - - - - - - - - - - - - - - - - - anther purple - - - - - - - - axil female - true - - - - - - - - - - - - - - - - - - - - - - - - corolla overlapping - - - - - - - - - - - - - - - - - - - - - - - - terminal bud slender - - - - - - - - - - - - - - - - - - - - - - - - terminal bud shape - - - - - - - - - - - - - - - - - - - - - - - - lamina purple - - - - - - - - - - - - - - - - - - - - - - - - petiolule coating - - - - - - - - - - - - - - - - - - - - - - - - bud smooth - - - - - - - - - - - - - - - - - - - - - - - - rhizome decumbent - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis tomentose - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein obtuse - - - - - - - - receptacle male - true - - - - - - - - receptacle phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - lamina distal to - - - - - - - - petal premature - true - - - - - - - - petal onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - staminode linear - - - - - - - - - - - - - - - - - - - - - - - - columella lobed - - - - - - - - - - - - - - - - - - - - - - - - columella shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence obtuse - - - - - - - - - - - - - - - - - - - - - - - - lemma curved - - - - - - - - - - - - - - - - - - - - - - - - central zone oblong - - - - - - - - - - - - - - - - - - - - - - - - disk flower distributed - - - - - - - - - - - - - - - - - - - - - - - - - disk flower spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - hilum arched - - - - - - - - - - - - - - - - - - - - - - - - hilum concavity - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus pedicellate - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus attachment quality - - - - - - - - - - - - - - - - - - - - - - - - hydathode pubescent - - - - - - - - - - - - - - - - - - - - - - - - hydathode maturity - - - - - - - - - - - - - - - - - - - - - - - - calyx curved - - - - - - - - - - - - - - - - - - - - - - - - keel blue - - - - - - - - - - - - - - - - - - - - - - - - papilla cell triangular - - - - - - - - shoot apex hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal spherical - - - - - - - - - - - - - - - - - - - - - - - - staminode swollen - - - - - - - - - - - - - - - - - - - - - - - - inflorescence subterminal - - - - - - - - - - - - - - - - - - - - - - - - upper glume subulate - - - - - - - - - - - - - - - - - - - - - - - - apical hook cuneate - - - - - - - - - - - - - - - - - - - - - - - - axil hairy - - - - - - - - - - - - - - - - - - - - - - - - root tip caudate - - - - - - - - - - - - - - - - - - - - - - - - gynophore elliptic - - - - - - - - - - - - - - - - - - - - - - - - lower glume terminal - - - - - - - - - - - - - - - - - - - - - - - - peduncle funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - apical hook subulate - - - - - - - - - - - - - - - - - - - - - - - - locule hairy - - - - - - - - - - - - - - - - - - - - - - - - locule pilosity - - - - - - - - - - - - - - - - - - - - - - - - bark dark red brown - - - - - - - - - - - - - - - - - - - - - - - - involucre proximal to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence spatulate - - - - - - - - - - - - - - - - - - - - - - - - fruit subcircular - - - - - - - - - - - - - - - - - - - - - - - - calyx split - - - - - - - - - - - - - - - - - - - - - - - - involucre hairy - - - - - - - - - - - - - - - - - - - - - - - - hypanthium lobed - - - - - - - - - - - - - - - - - - - - - - - - banner petal undulate - - - - - - - - - - - - - - - - - - - - - - - - style mass - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal smooth - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal texture - - - - - - - - - - - - - - - - - - - - - - - - style pyramidal - - - - - - - - - - - - - - - - - - - - - - - - anther fertile - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member punctate - - - - - - - - - - - - - - - - - - - - - - - - apical hook tubular - - - - - - - - - - - - - - - - - - - - - - - - trichome grooved - - - - - - - - - - - - - - - - - - - - - - - - crown root oblong - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle inflexible - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle flexibility - - - - - - - - - - - - - - - - - - - - - - - - glume brown - - - - - - - - - - - - - - - - - - - - - - - - endotesta smooth - - - - - - - - - - - - - - - - - - - - - - - - endotesta texture - - - - - - - - - - - - - - - - - - - - - - - - canal elliptic - - - - - - - - - - - - - - - - - - - - - - - - canal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - locule pubescent - - - - - - - - - - - - - - - - - - - - - - - - locule maturity - - - - - - - - - - - - - - - - - - - - - - - - carpel purple - - - - - - - - - - - - - - - - - - - - - - - - sepal spatulate - - - - - - - - - - - - - - - - - - - - - - - - receptacle angular - - - - - - - - - - - - - - - - - - - - - - - - style multiple - - - - - - - - - - - - - - - - - - - - - - - - corolla right - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal opposite - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle linear - - - - - - - - - - - - - - - - - - - - - - - - raphe inserted into - - - - - - - - - - - - - - - - - - - - - - - - fruit drooping - - - - - - - - - - - - - - - - - - - - - - - - lamina folded - - - - - - - - - - - - - - - - - - - - - - - - leaf herbaceous - - - - - - - - - - - - - - - - - - - - - - - - leaf shedability - - - - - - - - - - - - - - - - - - - - - - - - lemma subulate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin acuminate - - - - - - - - - - - - - - - - - - - - - - - - filament dilated - - - - - - - - - - - - - - - - - - - - - - - - filament size - - - - - - - - - - - - - - - - - - - - - - - - sheath cell purple - - - - - - - - - - - - - - - - - - - - - - - - sheath cell color - - - - - - - - - - - - - - - - - - - - - - - - pericarp curved - - - - - - - - - - - - - - - - - - - - - - - - pericarp curvature - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem flattened - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem curvature - - - - - - - - - - - - - - - - - - - - - - - - endocarp protruding into - - - - - - - - - - - - - - - - - - - - - - - - stigma white - - - - - - - - - - - - - - - - - - - - - - - - costa present - - - - - - - - - - - - - - - - - - - - - - - - costa amount - - - - - - - - - - - - - - - - - - - - - - - - pistillode pedicellate - - - - - - - - - - - - - - - - - - - - - - - - pistillode attachment quality - - - - - - - - - - - - - - - - - - - - - - - - keel attached to - - - - - - - - - - - - - - - - - - - - - - - - keel attachment quality - - - - - - - - - - - - - - - - - - - - - - - - fruit hard - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis size - - - - - - - - - - - - - - - - - - - - - - - - lemma lateral to - - - - - - - - - - - - - - - - - - - - - - - - hilum angular - - - - - - - - - - - - - - - - - - - - - - - - stalk inflated - - - - - - - - - - - - - - - - - - - - - - - - stalk structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - ligule fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - petiolule decreased amount - - - - - - - - - - - - - - - - - - - - - - - - petiolule amount - - - - - - - - - - - - - - - - - - - - - - - - trichome undulate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence distance - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal curled - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence opposite - - - - - - - - - - - - - - - - - - - - - - - - apical hook broken - - - - - - - - - - - - - - - - - - - - - - - - apical hook wholeness - - - - - - - - - - - - - - - - - - - - - - - - ligule mixed - - - - - - - - - - - - - - - - - - - - - - - - ligule composition - - - - - - - - - - - - - - - - - - - - - - - - fruit area - - - - - - - - - - - - - - - - - - - - - - - - seed orange - - - - - - - - - - - - - - - - - - - - - - - - calyx whorled - - - - - - - - - - - - - - - - - - - - - - - - lamina size - - - - - - - - - - - - - - - - - - - - - - - - canal broken - - - - - - - - - - - - - - - - - - - - - - - - canal wholeness - - - - - - - - - - - - - - - - - - - - - - - - stem coating - - - - - - - - - - - - - - - - - - - - - - - - pedicel rhomboid - - - - - - - - - - - - - - - - - - - - - - - - corm unbranched - - - - - - - - - - - - - - - - - - - - - - - - corm branchiness - - - - - - - - - - - - - - - - - - - - - - - - petiole straight - - - - - - - - - - - - - - - - - - - - - - - - petiole cuspidate - - - - - - - - - - - - - - - - - - - - - - - - corolla anterior to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system hispid - - - - - - - - - - - - - - - - - - - - - - - - whole plant furrowed - - - - - - - - - - - - - - - - - - - - - - - - receptacle clavate - - - - - - - - - - - - - - - - - - - - - - - - axil cylindrical - - - - - - - - - - - - - - - - - - - - - - - - calyx caudate - - - - - - - - - - - - - - - - - - - - - - - - fruit vertical - - - - - - - - - - - - - - - - - - - - - - - - pedicel condensed - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence cauline to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system thickness - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf opposite - - - - - - - - - - - - - - - - - - - - - - - - staminode ventral to - - - - - - - - - - - - - - - - - - - - - - - - heartwood brown - - - - - - - - - - - - - - - - - - - - - - - - costa lateral to - - - - - - - - - - - - - - - - - - - - - - - - pollen triangular - - - - - - - - - - - - - - - - - - - - - - - - pollen 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - tubercle tangled - - - - - - - - - - - - - - - - - - - - - - - - sheath cell lanceolate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell sharpness - - - - - - - - - - - - - - - - - - - - - - - - sepal back - - - - - - - - - - - - - - - - - - - - - - - - sepal direction - - - - - - - - - - - - - - - - - - - - - - - - endocarp sterile - - - - - - - - - - - - - - - - - - - - - - - - endocarp fertility - - - - - - - - - - - - - - - - - - - - - - - - trichome smooth - - - - - - - - - - - - - - - - - - - - - - - - costa lanceolate - - - - - - - - - - - - - - - - - - - - - - - - placenta U-shaped - - - - - - - - - - - - - - - - - - - - - - - - placenta concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - tuber spherical - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue split - - - - - - - - - - - - - - - - - - - - - - - - bud flattened - - - - - - - - - - - - - - - - - - - - - - - - peduncle acuminate - - - - - - - - - - - - - - - - - - - - - - - - spikelet vestigial - - - - - - - - - - - - - - - - - - - - - - - - corolla emarginate - - - - - - - - - - - - - - - - - - - - - - - - banner petal cuneate - - - - - - - - - - - - - - - - - - - - - - - - peduncle basal to - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence sterile - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence fertility - - - - - - - - - - - - - - - - - - - - - - - - corolla recurved - - - - - - - - - - - - - - - - - - - - - - - - aril raised - - - - - - - - - - - - - - - - - - - - - - - - caruncle laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - endosperm curved - - - - - - - - - - - - - - - - - - - - - - - - coma elliptic - - - - - - - - - - - - - - - - - - - - - - - - coma 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bracteole obtuse - - - - - - - - glume subacute - true - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem convex - - - - - - - - - - - - - - - - - - - - - - - - sepal viscous - - - - - - - - - - - - - - - - - - - - - - - - sepal viscosity - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf circular - - - - - - - - - - - - - - - - - - - - - - - - ligule obtuse - - - - - - - - - - - - - - - - - - - - - - - - ovary wall involute - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system coiled - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system coiling - - - - - - - - - - - - - - - - - - - - - - - - stamen waxy - - - - - - - - - - - - - - - - - - - - - - - - stamen waxiness - - - - - - - - - - - - - - - - - - - - - - - - lemma clavate - - - - - - - - - - - - - - - - - - - - - - - - lemma concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle convex - - - - - - - - - - - - - - - - - - - - - - - - calyx clavate - - - - - - - - - - - - - - - - - - - - - - - - peduncle cauline to - - - - - - - - - - - - - - - - - - - - - - - - pedicel obtuse - - - - - - - - - - - - - - - - - - - - - - - - petal auriculate - - - - - - - - - - - - - - - - - - - - - - - - central zone star shaped - - - - - - - - - - - - - - - - - - - - - - - - sepal revolute - - - - - - - - - - - - - - - - - - - - - - - - stem open - - - - - - - - - - - - - - - - - - - - - - - - stem closure - - - - - - - - - - - - - - - - - - - - - - - - connective convex - - - - - - - - - - - - - - - - - - - - - - - - peduncle circular - - - - - - - - - - - - - - - - - - - - - - - - corolla magenta - - - - - - - - - - - - - - - - - - - - - - - - bark yellow green - - - - - - - - - - - - - - - - - - - - - - - - thallus opaque - - - - - - - - - - - - - - - - - - - - - - - - thallus opacity - - - - - - - - - - - - - - - - - - - - - - - - receptacle subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - stamen bilobed - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system exserted - - - - - - - - - - - - - - - - - - - - - - - - stem level with - - - - - - - - - - - - - - - - - - - - - - - - banner petal decurrent - - - - - - - - - - - - - - - - - - - - - - - - costa external to - - - - - - - - - - - - - - - - - - - - - - - - testa raised - - - - - - - - - - - - - - - - - - - - - - - - tepal dentated - - - - - - - - - - - - - - - - - - - - - - - - bark increased thickness - - - - - - - - - - - - - - - - - - - - - - - - flower alternate placement - - - - - - - - bracteole acute - true - - - - - - - - bracteole duration - true - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal bifurcated - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal branchiness - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein acuminate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein sharpness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence digitate - - - - - - - - - - - - - - - - - - - - - - - - exocarp conical - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle striated - - - - - - - - - - - - - - - - - - - - - - - - locule wrinkled - - - - - - - - - - - - - - - - - - - - - - - - locule texture - - - - - - - - - - - - - - - - - - - - - - - - disk flower split - - - - - - - - - - - - - - - - - - - - - - - - carpel erect - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf decreased amount - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf amount - - - - - - - - - - - - - - - - - - - - - - - - petiole orbicular - - - - - - - - - - - - - - - - - - - - - - - - stipule concave - - - - - - - - style female - true - - - - - - - - - - - - - - - - - - - - - - - - costa ventral to - - - - - - - - - - - - - - - - - - - - - - - - stalk convex - - - - - - - - - - - - - - - - - - - - - - - - stalk concavity - - - - - - - - - - - - - - - - - - - - - - - - bud linear - - - - - - - - - - - - - - - - - - - - - - - - root tip alternate placement - - - - - - - - - - - - - - - - - - - - - - - - peduncle grooved - - - - - - - - - - - - - - - - - - - - - - - - leaf vestigial - - - - - - - - - - - - - - - - - - - - - - - - apical hook adaxial to - - - - - - - - - - - - - - - - - - - - - - - - prickle increased length - - - - - - - - - - - - - - - - - - - - - - - - prickle length - - - - - - - - - - - - - - - - - - - - - - - - funicle dilated - - - - - - - - - - - - - - - - - - - - - - - - funicle size - - - - - - - - - - - - - - - - - - - - - - - - trichome slit-like - - - - - - - - - - - - - - - - - - - - - - - - valve decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - valve water composition - - - - - - - - - - - - - - - - - - - - - - - - tepal opposite - - - - - - - - - - - - - - - - - - - - - - - - stem conspicuous - - - - - - - - - - - - - - - - - - - - - - - - sepal caudate - - - - - - - - - - - - - - - - - - - - - - - - fruit fertile - - - - - - - - - - - - - - - - - - - - - - - - fruit fertility - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence arched - - - - - - - - - - - - - - - - - - - - - - - - androecium spherical - - - - - - - - - - - - - - - - - - - - - - - - parenchyma furrowed - - - - - - - - - - - - - - - - - - - - - - - - parenchyma texture - - - - - - - - - - - - - - - - - - - - - - - - seed punctiform - - - - - - - - - - - - - - - - - - - - - - - - epidermis angle - - - - - - - - - - - - - - - - - - - - - - - - lamina decussate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex foveate - - - - - - - - - - - - - - - - - - - - - - - - bud pedunculate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome fleshy - - - - - - - - - - - - - - - - - - - - - - - - seed trichome composition - - - - - - - - - - - - - - - - - - - - - - - - lamina transparent - - - - - - - - - - - - - - - - - - - - - - - - axil leaf-like - - - - - - - - - - - - - - - - - - - - - - - - rhizome hairy - - - - - - - - - - - - - - - - - - - - - - - - glume flattened - - - - - - - - - - - - - - - - - - - - - - - - stipel obtuse - - - - - - - - - - - - - - - - - - - - - - - - perianth circular - - - - - - - - - - - - - - - - - - - - - - - - - - - - pneumatophore phenotype - - - - - - - - - - - - - - - - - - - - - - - - pneumatophore brown - - - - - - - - - - - - - - - - - - - - - - - - pneumatophore color - - - - - - - - - - - - - - - - - - - - - - - - hypanthium protruding into - - - - - - - - - - - - - - - - - - - - - - - - flower cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot apex sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - seed trichome revolute - - - - - - - - - - - - - - - - - - - - - - - - perianth elongated - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure triangular - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf attenuate - - - - - - - - - - - - - - - - - - - - - - - - lower glume black - - - - - - - - - - - - - - - - - - - - - - - - bract curled - - - - - - - - - - - - - - - - - - - - - - - - leaflet firm - - - - - - - - - - - - - - - - - - - - - - - - leaflet hardness - - - - - - - - - - - - - - - - - - - - - - - - receptacle brown - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell obtuse - - - - - - - - - - - - - - - - - - - - - - - - banner petal decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - banner petal water composition - - - - - - - - - - - - - - - - - - - - - - - - peduncle divergent from - - - - - - - - - - - - - - - - - - - - - - - - root elongated - - - - - - - - - - - - - - - - - - - - - - - - placenta convex - - - - - - - - - - - - - - - - - - - - - - - - placenta concavity - - - - - - - - - - - - - - - - - - - - - - - - bracteole smooth - - - - - - - - - - - - - - - - - - - - - - - - bracteole texture - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal broken - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal wholeness - - - - - - - - - - - - - - - - - - - - - - - - petiole sunken - - - - - - - - - - - - - - - - - - - - - - - - petiole elevation - - - - - - - - - - - - - - - - - - - - - - - - nectary coiled - - - - - - - - - - - - - - - - - - - - - - - - nectary coiling - - - - - - - - - - - - - - - - - - - - - - - - anther rugose - - - - - - - - - - - - - - - - - - - - - - - - anther surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf dentated - - - - - - - - - - - - - - - - - - - - - - - - sheath cell distichous - - - - - - - - - - - - - - - - - - - - - - - - mesocarp osseous - - - - - - - - bract acute - true - - - - - - - - bract duration - true - - - - - - - - - - - - - - - - - - - - - - - - stigma fleshy - - - - - - - - - - - - - - - - - - - - - - - - stigma composition - - - - - - - - - - - - - - - - - - - - - - - - gynoecium pubescent - - - - - - - - - - - - - - - - - - - - - - - - gynoecium maturity - - - - - - - - - - - - - - - - - - - - - - - - pappus flattened - - - - - - - - - - - - - - - - - - - - - - - - filament punctate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus decurrent - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf raised - - - - - - - - - - - - - - - - - - - - - - - - sepal bifurcated - - - - - - - - - - - - - - - - - - - - - - - - hilum opposite - - - - - - - - - - - - - - - - - - - - - - - - lamina recurved - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus bilobed - - - - - - - - - - - - - - - - - - - - - - - - anther broad - - - - - - - - - - - - - - - - - - - - - - - - style orange - - - - - - - - bracteole premature - true - - - - - - - - bracteole onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - sepal heart shaped - - - - - - - - - - - - - - - - - - - - - - - - gynophore striated - - - - - - - - - - - - - - - - - - - - - - - - gynophore shape - - - - - - - - - - - - - - - - - - - - - - - - ray system split - - - - - - - - - - - - - - - - - - - - - - - - bud simple - - - - - - - - - - - - - - - - - - - - - - - - bud complexity - - - - - - - - - - - - - - - - - - - - - - - - testa translucent - - - - - - - - - - - - - - - - - - - - - - - - testa opacity - - - - - - - - - - - - - - - - - - - - - - - - anther theca whorled - - - - - - - - - - - - - - - - - - - - - - - - anther theca spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - corolla absent - - - - - - - - - - - - - - - - - - - - - - - - bark glandular - - - - - - - - - - - - - - - - - - - - - - - - bark morphology - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein punctate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - apical hook oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - rhizome red brown - - - - - - - - - - - - - - - - - - - - - - - - lower glume flat - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member coiled - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member coiling - - - - - - - - - - - - - - - - - - - - - - - - corolla raised - - - - - - - - - - - - - - - - - - - - - - - - flower serrated - - - - - - - - - - - - - - - - - - - - - - - - tepal transparent - - - - - - - - - - - - - - - - - - - - - - - - tepal opacity - - - - - - - - - - - - - - - - - - - - - - - - glume concave - - - - - - - - - - - - - - - - - - - - - - - - fruit concave - - - - - - - - - - - - - - - - - - - - - - - - bark purple - - - - - - - - - - - - - - - - - - - - - - - - plant callus glandular - - - - - - - - - - - - - - - - - - - - - - - - plant callus morphology - - - - - - - - pseudostem up - true - - - - - - - - - - - - - - - - - - - - - - - - pseudostem direction - - - - - - - - - - - - - - - - - - - - - - - - heartwood drooping - - - - - - - - stalk acute - true - - - - - - - - stalk duration - true - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue striated - - - - - - - - - - - - - - - - - - - - - - - - endocarp black - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem striated - - - - - - - - - - - - - - - - - - - - - - - - stigma robust - - - - - - - - - - - - - - - - - - - - - - - - epidermis dry - - - - - - - - - - - - - - - - - - - - - - - - epidermis wetness - - - - - - - - - - - - - - - - - - - - - - - - perianth curved - - - - - - - - - - - - - - - - - - - - - - - - petiolule triangular - - - - - - - - - - - - - - - - - - - - - - - - apical hook conical - - - - - - - - - - - - - - - - - - - - - - - - leaf base recurved - - - - - - - - - - - - - - - - - - - - - - - - leaf base curvature - - - - - - - - - - - - - - - - - - - - - - - - sheath cell inflexible - - - - - - - - - - - - - - - - - - - - - - - - sheath cell flexibility - - - - - - - - - - - - - - - - - - - - - - - - hypanthium length - - - - - - - - - - - - - - - - - - - - - - - - rhizome brittle - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence brittle - - - - - - - - - - - - - - - - - - - - - - - - leaf dark brown - - - - - - - - - - - - - - - - - - - - - - - - gynoecium fleshy - - - - - - - - - - - - - - - - - - - - - - - - gynoecium composition - - - - - - - - - - - - - - - - - - - - - - - - bark dark red - - - - - - - - fruit down - true - - - - - - - - - - - - - - - - - - - - - - - - bark red brown - - - - - - - - - - - - - - - - - - - - - - - - apical hook attenuate - - - - - - - - - - - - - - - - - - - - - - - - apical hook sharpness - - - - - - - - - - - - - - - - - - - - - - - - lenticel heart shaped - - - - - - - - - - - - - - - - - - - - - - - - lenticel concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath mixed - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath composition - - - - - - - - - - - - - - - - - - - - - - - - flower sparse - - - - - - - - - - - - - - - - - - - - - - - - pedicel red - - - - - - - - - - - - - - - - - - - - - - - - endocarp obovate - - - - - - - - - - - - - - - - - - - - - - - - trichome cauline to - - - - - - - - - - - - - - - - - - - - - - - - perianth dilated - - - - - - - - - - - - - - - - - - - - - - - - staminode present - - - - - - - - - - - - - - - - - - - - - - - - petal striated - - - - - - - - - - - - - - - - - - - - - - - - stamen condensed - - - - - - - - - - - - - - - - - - - - - - - - flower trilobed - - - - - - - - - - - - - - - - - - - - - - - - hypanthium slender - - - - - - - - - - - - - - - - - - - - - - - - leaf immature - - - - - - - - - - - - - - - - - - - - - - - - bract open - - - - - - - - - - - - - - - - - - - - - - - - bract closure - - - - - - - - - - - - - - - - - - - - - - - - gynoecium split - - - - - - - - - - - - - - - - - - - - - - - - testa triangular - - - - - - - - - - - - - - - - - - - - - - - - whole plant conical - - - - - - - - - - - - - - - - - - - - - - - - costa confluent with - - - - - - - - - - - - - - - - - - - - - - - - glume absent - - - - - - - - - - - - - - - - - - - - - - - - anther front - - - - - - - - - - - - - - - - - - - - - - - - peristome yellow green - - - - - - - - - - - - - - - - - - - - - - - - growth ring kinked - - - - - - - - - - - - - - - - - - - - - - - - androecium hexagonal - - - - - - - - central zone female - true - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet arched - - - - - - - - - - - - - - - - - - - - - - - - locule convex - - - - - - - - - - - - - - - - - - - - - - - - locule concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf mass - - - - - - - - - - - - - - - - - - - - - - - - stigma split - - - - - - - - - - - - - - - - - - - - - - - - ligule falciform - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril erect - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril position - - - - - - - - - - - - - - - - - - - - - - - - seed obovate - - - - - - - - - - - - - - - - - - - - - - - - stem dentated - - - - - - - - - - - - - - - - - - - - - - - - branch leaf-like - - - - - - - - palmate leaf premature - true - - - - - - - - palmate leaf onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - central zone spongy - - - - - - - - - - - - - - - - - - - - - - - - seed branched - - - - - - - - - - - - - - - - - - - - - - - - seed branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaflet sparse - - - - - - - - - - - - - - - - - - - - - - - - receptacle bilobed - - - - - - - - - - - - - - - - - - - - - - - - lamina mottled - - - - - - - - - - - - - - - - - - - - - - - - leaf black - - - - - - - - - - - - - - - - - - - - - - - - calyx serration - - - - - - - - - - - - - - - - - - - - - - - - apical hook opposite - - - - - - - - - - - - - - - - - - - - - - - - connective area - - - - - - - - - - - - - - - - - - - - - - - - stem damaged - - - - - - - - - - - - - - - - - - - - - - - - stem damage - - - - - - - - - - - - - - - - - - - - - - - - stamen raised - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem punctate - - - - - - - - - - - - - - - - - - - - - - - - lenticel absent - - - - - - - - - - - - - - - - - - - - - - - - lenticel amount - - - - - - - - - - - - - - - - - - - - - - - - papilla cell acuminate - - - - - - - - - - - - - - - - - - - - - - - - glume obovate - - - - - - - - bud arrested - true - - - - - - - - bud offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - corm soft - - - - - - - - - - - - - - - - - - - - - - - - corm hardness - - - - - - - - - - - - - - - - - - - - - - - - anther yellow green - - - - - - - - - - - - - - - - - - - - - - - - corm dark red - - - - - - - - - - - - - - - - - - - - - - - - ligule hairy - - - - - - - - - - - - - - - - - - - - - - - - trichome spatulate - - - - - - - - - - - - - - - - - - - - - - - - petal spherical - - - - - - - - - - - - - - - - - - - - - - - - lower glume curved - - - - - - - - - - - - - - - - - - - - - - - - aril ventral to - - - - - - - - - - - - - - - - - - - - - - - - epidermis hispidulous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon curved - - - - - - - - - - - - - - - - - - - - - - - - cotyledon curvature - - - - - - - - - - - - - - - - - - - - - - - - connective white - - - - - - - - - - - - - - - - - - - - - - - - pappus yellow - - - - - - - - - - - - - - - - - - - - - - - - glume cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - glume composition - - - - - - - - - - - - - - - - - - - - - - - - crown root dentated - - - - - - - - - - - - - - - - - - - - - - - - carpel emarginate - - - - - - - - - - - - - - - - - - - - - - - - carpel concavity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dry - - - - - - - - - - - - - - - - - - - - - - - - inflorescence wetness - - - - - - - - - - - - - - - - - - - - - - - - fruit multicellular - - - - - - - - - - - - - - - - - - - - - - - - fruit cellularity - - - - - - - - - - - - - - - - - - - - - - - - seed trichome divergent from - - - - - - - - - - - - - - - - - - - - - - - - flower spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf hairy - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence purple - - - - - - - - - - - - - - - - - - - - - - - - style right - - - - - - - - coma up - true - - - - - - - - - - - - - - - - - - - - - - - - coma direction - - - - - - - - - - - - - - - - - - - - - - - - disk flower smooth - - - - - - - - - - - - - - - - - - - - - - - - sepal overlapping - - - - - - - - - - - - - - - - - - - - - - - - perianth lanceolate - - - - - - - - - - - - - - - - - - - - - - - - central zone linear - - - - - - - - - - - - - - - - - - - - - - - - lamina rugose - - - - - - - - - - - - - - - - - - - - - - - - seed viscous - - - - - - - - - - - - - - - - - - - - - - - - seed viscosity - - - - - - - - hilum up - true - - - - - - - - - - - - - - - - - - - - - - - - hilum direction - - - - - - - - - - - - - - - - - - - - - - - - rhizome prostrate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle foveate - - - - - - - - - - - - - - - - - - - - - - - - fruit subterminal - - - - - - - - - - - - - - - - - - - - - - - - tubercle smooth - - - - - - - - lemma up - true - - - - - - - - filament continuous - true - - - - - - - - filament occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - perianth lateral to - - - - - - - - - - - - - - - - - - - - - - - - whole plant triangular - - - - - - - - - - - - - - - - - - - - - - - - stipule truncated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle rough - - - - - - - - - - - - - - - - - - - - - - - - sepal square - - - - - - - - - - - - - - - - - - - - - - - - axil obovate - - - - - - - - - - - - - - - - - - - - - - - - disk flower broken - - - - - - - - - - - - - - - - - - - - - - - - disk flower wholeness - - - - - - - - - - - - - - - - - - - - - - - - rhizome heart shaped - - - - - - - - - - - - - - - - - - - - - - - - rhizome concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell split - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell shape - - - - - - - - - - - - - - - - - - - - - - - - lower glume glabrous - - - - - - - - - - - - - - - - - - - - - - - - ligule yellow - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus water composition - - - - - - - - - - - - - - - - - - - - - - - - plant cell ovate - - - - - - - - - - - - - - - - - - - - - - - - plant cell convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath white - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath color - - - - - - - - - - - - - - - - - - - - - - - - bract orange - - - - - - - - - - - - - - - - - - - - - - - - shoot internode tomentose - - - - - - - - - - - - - - - - - - - - - - - - style parallel to - - - - - - - - - - - - - - - - - - - - - - - - pedicel oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - filament subulate - - - - - - - - - - - - - - - - - - - - - - - - glume herbaceous - - - - - - - - - - - - - - - - - - - - - - - - glume shedability - - - - - - - - - - - - - - - - - - - - - - - - fruit obconical - - - - - - - - - - - - - - - - - - - - - - - - tepal increased length - - - - - - - - - - - - - - - - - - - - - - - - tepal length - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus reniform - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem water composition - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf smooth - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf texture - - - - - - - - - - - - - - - - - - - - - - - - lenticel obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein emarginate - - - - - - - - - - - - - - - - - - - - - - - - exocarp absent - - - - - - - - - - - - - - - - - - - - - - - - exocarp amount - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue arched - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus decreased amount - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus amount - - - - - - - - - - - - - - - - - - - - - - - - calyx antrorse - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system tomentose - - - - - - - - - - - - - - - - - - - - - - - - glume coiled - - - - - - - - - - - - - - - - - - - - - - - - glume coiling - - - - - - - - - - - - - - - - - - - - - - - - sorus superficial - - - - - - - - - - - - - - - - - - - - - - - - sorus position - - - - - - - - - - - - - - - - - - - - - - - - staminode trilobed - - - - - - - - - - - - - - - - - - - - - - - - stamen star shaped - - - - - - - - - - - - - - - - - - - - - - - - receptacle exserted - - - - - - - - - - - - - - - - - - - - - - - - gynoecium circular - - - - - - - - - - - - - - - - - - - - - - - - upper glume lanceolate - - - - - - - - - - - - - - - - - - - - - - - - receptacle fused with - - - - - - - - - - - - - - - - - - - - - - - - bract grooved - - - - - - - - - - - - - - - - - - - - - - - - anther theca cuneate - - - - - - - - - - - - - - - - - - - - - - - - anther theca 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina brittle - - - - - - - - - - - - - - - - - - - - - - - - lamina structure - - - - - - - - - - - - - - - - - - - - - - - - involucre pinnate - - - - - - - - - - - - - - - - - - - - - - - - calyx straight - - - - - - - - - - - - - - - - - - - - - - - - staminode decreased amount - - - - - - - - - - - - - - - - - - - - - - - - infructescence crowded - - - - - - - - - - - - - - - - - - - - - - - - infructescence position - - - - - - - - - - - - - - - - - - - - - - - - bark falciform - - - - - - - - - - - - - - - - - - - - - - - - petiolule trilobed - - - - - - - - - - - - - - - - - - - - - - - - hilum brown - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bifurcated - - - - - - - - - - - - - - - - - - - - - - - - thorn striated - - - - - - - - - - - - - - - - - - - - - - - - tepal inserted into - - - - - - - - - - - - - - - - - - - - - - - - leaf notched - - - - - - - - - - - - - - - - - - - - - - - - bud concave - - - - - - - - - - - - - - - - - - - - - - - - bud concavity - - - - - - - - - - - - - - - - - - - - - - - - peduncle linear - - - - - - - - - - - - - - - - - - - - - - - - banner petal increased length - - - - - - - - - - - - - - - - - - - - - - - - banner petal length - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle divergent from - - - - - - - - - - - - - - - - - - - - - - - - bracteole spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium autogenous - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium structure - - - - - - - - - - - - - - - - - - - - - - - - bracteole star shaped - - - - - - - - - - - - - - - - - - - - - - - - pistillode fleshy - - - - - - - - - - - - - - - - - - - - - - - - pistillode composition - - - - - - - - - - - - - - - - - - - - - - - - mesocarp spongy - - - - - - - - - - - - - - - - - - - - - - - - mesocarp structure - - - - - - - - - - - - - - - - - - - - - - - - seed areolate - - - - - - - - - - - - - - - - - - - - - - - - seed surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - fruit foveate - - - - - - - - - - - - - - - - - - - - - - - - whole plant raised - - - - - - - - - - - - - - - - - - - - - - - - lamina time - - - - - - - - - - - - - - - - - - - - - - - - nectary retuse - - - - - - - - - - - - - - - - - - - - - - - - nectary sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf distance - - - - - - - - - - - - - - - - - - - - - - - - stalk caudate - - - - - - - - - - - - - - - - - - - - - - - - seed hard - - - - - - - - - - - - - - - - - - - - - - - - seed hardness - - - - - - - - - - - - - - - - - - - - - - - - receptacle undulate - - - - - - - - - - - - - - - - - - - - - - - - ligule pubescent - - - - - - - - - - - - - - - - - - - - - - - - ligule maturity - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal conical - - - - - - - - - - - - - - - - - - - - - - - - corolla actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - corolla radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - bark herbaceous - - - - - - - - - - - - - - - - - - - - - - - - bark shedability - - - - - - - - - - - - - - - - - - - - - - - - calyx left - - - - - - - - - - - - - - - - - - - - - - - - valve lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf base cuneate - - - - - - - - - - - - - - - - - - - - - - - - corolla tapered - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf orbicular - - - - - - - - - - - - - - - - - - - - - - - - corolla fused with - - - - - - - - - - - - - - - - - - - - - - - - fruit viscid - - - - - - - - - - - - - - - - - - - - - - - - petiole margin obovate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - upper glume branched - - - - - - - - - - - - - - - - - - - - - - - - upper glume branchiness - - - - - - - - - - - - - - - - - - - - - - - - perianth obconical - - - - - - - - - - - - - - - - - - - - - - - - leaf setose - - - - - - - - - - - - - - - - - - - - - - - - shoot apex curled - - - - - - - - - - - - - - - - - - - - - - - - anther anterior to - - - - - - - - - - - - - - - - - - - - - - - - leaf axil length - - - - - - - - - - - - - - - - - - - - - - - - pedicel tomentose - - - - - - - - - - - - - - - - - - - - - - - - stamen concave - - - - - - - - - - - - - - - - - - - - - - - - pedicel ventral to - - - - - - - - axillary bud meristem hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - receptacle fleshy - - - - - - - - - - - - - - - - - - - - - - - - receptacle composition - - - - - - - - - - - - - - - - - - - - - - - - trichome hispid - - - - - - - - - - - - - - - - - - - - - - - - stipel orbicular - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence hispid - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract decreased amount - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract amount - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus cuneate - - - - - - - - - - - - - - - - - - - - - - - - keel smooth - - - - - - - - - - - - - - - - - - - - - - - - upper glume concealed by - - - - - - - - - - - - - - - - - - - - - - - - upper glume position - - - - - - - - - - - - - - - - - - - - - - - - seed spongy - - - - - - - - - - - - - - - - - - - - - - - - disk flower oblong - - - - - - - - - - - - - - - - - - - - - - - - receptacle prominent - - - - - - - - - - - - - - - - - - - - - - - - palea convolute - - - - - - - - - - - - - - - - - - - - - - - - palea shape - - - - - - - - - - - - - - - - - - - - - - - - bract swollen - - - - - - - - - - - - - - - - - - - - - - - - leaf arched - - - - - - - - - - - - - - - - - - - - - - - - central zone attenuate - - - - - - - - - - - - - - - - - - - - - - - - - - - - prophyll phenotype - - - - - - - - - - - - - - - - - - - - - - - - prophyll glabrous - - - - - - - - - - - - - - - - - - - - - - - - prophyll pilosity - - - - - - - - - - - - - - - - - - - - - - - - lower glume cuspidate - - - - - - - - - - - - - - - - - - - - - - - - disk flower constricted - - - - - - - - - - - - - - - - - - - - - - - - bract adaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf mature - - - - - - - - - - - - - - - - - - - - - - - - flower articulated with - - - - - - - - - - - - - - - - - - - - - - - - stigma granular - - - - - - - - - - - - - - - - - - - - - - - - style edible - - - - - - - - - - - - - - - - - - - - - - - - style edibility - - - - - - - - - - - - - - - - - - - - - - - - pedicel lateral to - - - - - - - - - - - - - - - - - - - - - - - - carpel hispid - - - - - - - - - - - - - - - - - - - - - - - - gynoecium increased length - - - - - - - - - - - - - - - - - - - - - - - - gynoecium length - - - - - - - - - - - - - - - - - - - - - - - - glume attenuate - - - - - - - - - - - - - - - - - - - - - - - - pericarp lobed - - - - - - - - - - - - - - - - - - - - - - - - androecium concave - - - - - - - - - - - - - - - - - - - - - - - - androecium concavity - - - - - - - - - - - - - - - - - - - - - - - - glume cylindrical - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf pinnate - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf shape - - - - - - - - - - - - - - - - - - - - - - - - keel dark brown - - - - - - - - - - - - - - - - - - - - - - - - pistillode hairy - - - - - - - - - - - - - - - - - - - - - - - - pistillode pilosity - - - - - - - - - - - - - - - - - - - - - - - - pericarp drooping - - - - - - - - - - - - - - - - - - - - - - - - banner petal acuminate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus circular - - - - - - - - - - - - - - - - - - - - - - - - lenticel spherical - - - - - - - - - - - - - - - - - - - - - - - - aril broad - - - - - - - - - - - - - - - - - - - - - - - - petiole dilated - - - - - - - - - - - - - - - - - - - - - - - - petiole size - - - - - - - - - - - - - - - - - - - - - - - - gynoecium hairy - - - - - - - - - - - - - - - - - - - - - - - - petiolule tomentose - - - - - - - - - - - - - - - - - - - - - - - - pedicel setose - - - - - - - - - - - - - - - - - - - - - - - - sepal lobed - - - - - - - - - - - - - - - - - - - - - - - - hydathode attenuate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - bracteole overlapping - - - - - - - - - - - - - - - - - - - - - - - - endocarp lobed - - - - - - - - - - - - - - - - - - - - - - - - - - - - integument phenotype - - - - - - - - - - - - - - - - - - - - - - - - integument brown - - - - - - - - - - - - - - - - - - - - - - - - integument color - - - - - - - - - - - - - - - - - - - - - - - - stigma triangular - - - - - - - - - - - - - - - - - - - - - - - - leaf multicellular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence broken - - - - - - - - - - - - - - - - - - - - - - - - petiolule tapered - - - - - - - - - - - - - - - - - - - - - - - - bud raised - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina dense - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina mass density - - - - - - - - stalk female - true - - - - - - - - petiole down - true - - - - - - - - - - - - - - - - - - - - - - - - testa convex - - - - - - - - - - - - - - - - - - - - - - - - testa concavity - - - - - - - - - - - - - - - - - - - - - - - - flower inflated - - - - - - - - - - - - - - - - - - - - - - - - flower structure, cavities - - - - - - - - bud male - true - - - - - - - - bud phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - filament decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - filament water composition - - - - - - - - - - - - - - - - - - - - - - - - gynoecium inserted into - - - - - - - - - - - - - - - - - - - - - - - - gynoecium position - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member terminal - - - - - - - - - - - - - - - - - - - - - - - - pappus abaxial to - - - - - - - - - - - - - - - - - - - - - - - - bud constricted - - - - - - - - - - - - - - - - - - - - - - - - leaf perfoliate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet basal to - - - - - - - - - - - - - - - - - - - - - - - - lower glume setose - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf inserted into - - - - - - - - - - - - - - - - - - - - - - - - pappus basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system increased length - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system length - - - - - - - - - - - - - - - - - - - - - - - - inflorescence sparse - - - - - - - - - - - - - - - - - - - - - - - - whole plant acuminate - - - - - - - - - - - - - - - - - - - - - - - - infructescence terminal - - - - - - - - - - - - - - - - - - - - - - - - upper glume simple - - - - - - - - - - - - - - - - - - - - - - - - upper glume complexity - - - - - - - - - - - - - - - - - - - - - - - - shoot apex tubular - - - - - - - - anther premature - true - - - - - - - - anther onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - peduncle present - - - - - - - - - - - - - - - - - - - - - - - - central zone terminal - - - - - - - - - - - - - - - - - - - - - - - - tuber hairy - - - - - - - - - - - - - - - - - - - - - - - - tuber pilosity - - - - - - - - awn acute - true - - - - - - - - awn duration - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle notched - - - - - - - - - - - - - - - - - - - - - - - - trichome distributed - - - - - - - - - - - - - - - - - - - - - - - - epidermis elliptic - - - - - - - - - - - - - - - - - - - - - - - - peduncle drooping - - - - - - - - - - - - - - - - - - - - - - - - perianth black - - - - - - - - - - - - - - - - - - - - - - - - endocarp condensed - - - - - - - - - - - - - - - - - - - - - - - - bract glistening - - - - - - - - - - - - - - - - - - - - - - - - bract reflectivity - - - - - - - - - - - - - - - - - - - - - - - - endosperm sparse - - - - - - - - - - - - - - - - - - - - - - - - pericarp transparent - - - - - - - - - - - - - - - - - - - - - - - - pericarp opacity - - - - - - - - - - - - - - - - - - - - - - - - petal abaxial to - - - - - - - - peristome up - true - - - - - - - - - - - - - - - - - - - - - - - - branch absent - - - - - - - - - - - - - - - - - - - - - - - - stele increased length - - - - - - - - - - - - - - - - - - - - - - - - stele length - - - - - - - - pericarp up - true - - - - - - - - - - - - - - - - - - - - - - - - pericarp direction - - - - - - - - - - - - - - - - - - - - - - - - mesocarp increased length - - - - - - - - - - - - - - - - - - - - - - - - mesocarp length - - - - - - - - - - - - - - - - - - - - - - - - lenticel star shaped - - - - - - - - - - - - - - - - - - - - - - - - hypanthium elliptic - - - - - - - - - - - - - - - - - - - - - - - - stipel circular - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root decumbent - - - - - - - - - - - - - - - - - - - - - - - - lamina undulate - - - - - - - - - - - - - - - - - - - - - - - - style dilated - - - - - - - - - - - - - - - - - - - - - - - - style size - - - - - - - - perianth hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence cuneate - - - - - - - - - - - - - - - - - - - - - - - - seed sterile - - - - - - - - - - - - - - - - - - - - - - - - seed fertility - - - - - - - - - - - - - - - - - - - - - - - - root tip decreased amount - - - - - - - - - - - - - - - - - - - - - - - - root tip amount - - - - - - - - - - - - - - - - - - - - - - - - endocarp brown - - - - - - - - - - - - - - - - - - - - - - - - branch obtuse - - - - - - - - - - - - - - - - - - - - - - - - gynoecium sterile - - - - - - - - - - - - - - - - - - - - - - - - gynoecium fertility - - - - - - - - - - - - - - - - - - - - - - - - filament opposite - - - - - - - - - - - - - - - - - - - - - - - - columella smooth - - - - - - - - - - - - - - - - - - - - - - - - columella texture - - - - - - - - - - - - - - - - - - - - - - - - leaflet old - - - - - - - - - - - - - - - - - - - - - - - - spikelet laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - stem antrorse - - - - - - - - - - - - - - - - - - - - - - - - rhizome attenuate - - - - - - - - - - - - - - - - - - - - - - - - tubercle conspicuous - - - - - - - - - - - - - - - - - - - - - - - - petal orange - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member involute - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member pinnate - - - - - - - - - - - - - - - - - - - - - - - - canal truncated - - - - - - - - - - - - - - - - - - - - - - - - stem distributed - - - - - - - - - - - - - - - - - - - - - - - - leaf fused with - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system swollen - - - - - - - - - - - - - - - - - - - - - - - - bud pinnate - - - - - - - - - - - - - - - - - - - - - - - - lamina auriculate - - - - - - - - - - - - - - - - - - - - - - - - carpel whorled - - - - - - - - - - - - - - - - - - - - - - - - carpel spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - tubercle granular - - - - - - - - - - - - - - - - - - - - - - - - tubercle composition - - - - - - - - - - - - - - - - - - - - - - - - scutellar node curled - - - - - - - - - - - - - - - - - - - - - - - - axil triangular - - - - - - - - - - - - - - - - - - - - - - - - bracteole spherical - - - - - - - - - - - - - - - - - - - - - - - - endocarp osseous - - - - - - - - - - - - - - - - - - - - - - - - bud grooved - - - - - - - - - - - - - - - - - - - - - - - - awn ovate - - - - - - - - - - - - - - - - - - - - - - - - awn convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule decussate - - - - - - - - - - - - - - - - - - - - - - - - stamen dilated - - - - - - - - - - - - - - - - - - - - - - - - stamen size - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle elliptic - - - - - - - - - - - - - - - - - - - - - - - - style vertical - - - - - - - - - - - - - - - - - - - - - - - - gynoecium fused with - - - - - - - - - - - - - - - - - - - - - - - - lamina sinuous - - - - - - - - - - - - - - - - - - - - - - - - septum broad - - - - - - - - - - - - - - - - - - - - - - - - septum shape - - - - - - - - - - - - - - - - - - - - - - - - sepal drooping - - - - - - - - - - - - - - - - - - - - - - - - scutellar node divergent from - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell sharpness - - - - - - - - - - - - - - - - - - - - - - - - stele oblong - - - - - - - - - - - - - - - - - - - - - - - - stele 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pistillode truncated - - - - - - - - - - - - - - - - - - - - - - - - testa scrobiculate - - - - - - - - - - - - - - - - - - - - - - - - leaf axil linear - - - - - - - - - - - - - - - - - - - - - - - - leaf axil shape - - - - - - - - - - - - - - - - - - - - - - - - gynophore trilobed - - - - - - - - - - - - - - - - - - - - - - - - valve spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - valve convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - sepal distributed - - - - - - - - - - - - - - - - - - - - - - - - spikelet elongated - - - - - - - - - - - - - - - - - - - - - - - - ligule notched - - - - - - - - - - - - - - - - - - - - - - - - ligule concavity - - - - - - - - - - - - - - - - - - - - - - - - whole plant osseous - - - - - - - - - - - - - - - - - - - - - - - - glume hairy - - - - - - - - - - - - - - - - - - - - - - - - bracteole conspicuous - - - - - - - - - - - - - - - - - - - - - - - - axil pedicellate - - - - - - - - - - - - - - - - - - - - - - - - axil attachment quality - - - - - - - - - - - - - - - - - - - - - - - - flower smooth - - - - - - - - - - - - - - - - - - - - - - - - bark straight - - - - - - - - - - - - - - - - - - - - - - - - lamina hispid - - - - - - - - - - - - - - - - - - - - - - - - androecium actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - androecium radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - mesocarp glabrous - - - - - - - - - - - - - - - - - - - - - - - - mesocarp pilosity - - - - - - - - - - - - - - - - - - - - - - - - stalk terminal - - - - - - - - - - - - - - - - - - - - - - - - involucre erect - - - - - - - - - - - - - - - - - - - - - - - - branch oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet condensed - - - - - - - - - - - - - - - - - - - - - - - - apical hook pinnate - - - - - - - - - - - - - - - - - - - - - - - - papilla cell subulate - - - - - - - - - - - - - - - - - - - - - - - - bud blue - - - - - - - - - - - - - - - - - - - - - - - - stem discoid - - - - - - - - - - - - - - - - - - - - - - - - scutellar node elliptic - - - - - - - - - - - - - - - - - - - - - - - - sapwood orange - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium scalloped - - - - - - - - - - - - - - - - - - - - - - - - staminode emarginate - - - - - - - - - - - - - - - - - - - - - - - - staminode concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf axil dense - - - - - - - - - - - - - - - - - - - - - - - - leaf axil mass density - - - - - - - - - - - - - - - - - - - - - - - - staminode circular - - - - - - - - - - - - - - - - - - - - - - - - stigma hispid - - - - - - - - - - - - - - - - - - - - - - - - exocarp increased thickness - - - - - - - - - - - - - - - - - - - - - - - - style inserted into - - - - - - - - - - - - - - - - - - - - - - - - keel granular - - - - - - - - - - - - - - - - - - - - - - - - stamen smooth - - - - - - - - - - - - - - - - - - - - - - - - peduncle leaf-like - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril glandular - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril morphology - - - - - - - - - - - - - - - - - - - - - - - - sheath cell kinked - - - - - - - - - - - - - - - - - - - - - - - - anther tapered - - - - - - - - - - - - - - - - - - - - - - - - cambium furrowed - - - - - - - - - - - - - - - - - - - - - - - - cambium texture - - - - - - - - - - - - - - - - - - - - - - - - epicalyx glabrous - - - - - - - - - - - - - - - - - - - - - - - - epicalyx pilosity - - - - - - - - - - - - - - - - - - - - - - - - leaf margin pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf margin maturity - - - - - - - - - - - - - - - - - - - - - - - - testa loose - - - - - - - - - - - - - - - - - - - - - - - - testa spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf leaf-like - - - - - - - - - - - - - - - - - - - - - - - - root sunken - - - - - - - - - - - - - - - - - - - - - - - - root elevation - - - - - - - - - - - - - - - - - - - - - - - - seed distal to - - - - - - - - - - - - - - - - - - - - - - - - leaflet notched - - - - - - - - - - - - - - - - - - - - - - - - petiole margin revolute - - - - - - - - - - - - - - - - - - - - - - - - filament spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - root increased length - - - - - - - - - - - - - - - - - - - - - - - - root length - - - - - - - - - - - - - - - - - - - - - - - - stipel divergent from - - - - - - - - - - - - - - - - - - - - - - - - bracteole inflexible - - - - - - - - - - - - - - - - - - - - - - - - bracteole flexibility - - - - - - - - - - - - - - - - - - - - - - - - peduncle old - - - - - - - - - - - - - - - - - - - - - - - - peduncle age - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus hairy - - - - - - - - - - - - - - - - - - - - - - - - aril bifurcated - - - - - - - - - - - - - - - - - - - - - - - - aril branchiness - - - - - - - - - - - - - - - - - - - - - - - - crown root hairy - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure terminal - - - - - - - - - - - - - - - - - - - - - - - - perianth divergent from - - - - - - - - - - - - - - - - - - - - - - - - peduncle glistening - - - - - - - - - - - - - - - - - - - - - - - - peduncle reflectivity - - - - - - - - - - - - - - - - - - - - - - - - connective separating - - - - - - - - - - - - - - - - - - - - - - - - seed trichome inserted into - - - - - - - - - - - - - - - - - - - - - - - - bud orbicular - - - - - - - - - - - - - - - - - - - - - - - - seed trichome obovate - - - - - - - - - - - - - - - - - - - - - - - - carpel adaxial to - - - - - - - - - - - - - - - - - - - - - - - - flower multi-colored - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle conspicuous - - - - - - - - - - - - - - - - - - - - - - - - shoot apex discoid - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system simple - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system complexity - - - - - - - - - - - - - - - - - - - - - - - - petiolule decurrent - - - - - - - - - - - - - - - - - - - - - - - - calyx dorsal to - - - - - - - - - - - - - - - - - - - - - - - - tepal fused with - - - - - - - - - - - - - - - - - - - - - - - - petal heart shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot apex actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - shoot apex radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - leaf normal - - - - - - - - - - - - - - - - - - - - - - - - leaf deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - axil dispersed - - - - - - - - - - - - - - - - - - - - - - - - leaf cuspidate - - - - - - - - pistillode male - true - - - - - - - - - - - - - - - - - - - - - - - - lenticel conical - - - - - - - - - - - - - - - - - - - - - - - - lower glume lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril triangular - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence smooth - - - - - - - - - - - - - - - - - - - - - - - - lower glume concave - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root smooth - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root texture - - - - - - - - stigma hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - stigma rectangular - - - - - - - - aril up - true - - - - - - - - - - - - - - - - - - - - - - - - aril direction - - - - - - - - - - - - - - - - - - - - - - - - heartwood furrowed - - - - - - - - - - - - - - - - - - - - - - - - lamina radius - - - - - - - - - - - - - - - - - - - - - - - - stem yellow - - - - - - - - - - - - - - - - - - - - - - - - spikelet hairy - - - - - - - - - - - - - - - - - - - - - - - - involucre lobed - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member increased thickness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member thickness - - - - - - - - - - - - - - - - - - - - - - - - papilla cell obtuse - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root distributed - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - fruit fused with - - - - - - - - - - - - - - - - - - - - - - - - locule fertile - - - - - - - - - - - - - - - - - - - - - - - - connective terminal - - - - - - - - - - - - - - - - - - - - - - - - fruit heart shaped - - - - - - - - - - - - - - - - - - - - - - - - tubercle broken - - - - - - - - - - - - - - - - - - - - - - - - tubercle wholeness - - - - - - - - - - - - - - - - - - - - - - - - corolla waxy - - - - - - - - - - - - - - - - - - - - - - - - corolla waxiness - - - - - - - - - - - - - - - - - - - - - - - - papilla cell dentated - - - - - - - - - - - - - - - - - - - - - - - - leaf spherical - - - - - - - - - - - - - - - - - - - - - - - - corolla punctate - - - - - - - - - - - - - - - - - - - - - - - - corolla spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - scutellar node decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - scutellar node water composition - - - - - - - - - - - - - - - - - - - - - - - - oil gland terminal - - - - - - - - - - - - - - - - - - - - - - - - oil gland position - - - - - - - - - - - - - - - - - - - - - - - - carpel distributed - - - - - - - - - - - - - - - - - - - - - - - - stem broken - - - - - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system phenotype - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system shape - - - - - - - - - - - - - - - - - - - - - - - - carpel obtuse - - - - - - - - - - - - - - - - - - - - - - - - sheath cell triangular - - - - - - - - - - - - - - - - - - - - - - - - sheath cell 2-D shape - - - - - - - - epidermis up - true - - - - - - - - - - - - - - - - - - - - - - - - epidermis direction - - - - - - - - - - - - - - - - - - - - - - - - whole plant reniform - - - - - - - - - - - - - - - - - - - - - - - - whole plant concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract coiled - - - - - - - - - - - - - - - - - - - - - - - - bract coiling - - - - - - - - - - - - - - - - - - - - - - - - fruit right - - - - - - - - - - - - - - - - - - - - - - - - rhizome fusiform - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence kinked - - - - - - - - - - - - - - - - - - - - - - - - rhizome hollow - - - - - - - - - - - - - - - - - - - - - - - - rhizome structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - crown root obovate - - - - - - - - - - - - - - - - - - - - - - - - peduncle brittle - - - - - - - - - - - - - - - - - - - - - - - - gynophore articulated with - - - - - - - - - - - - - - - - - - - - - - - - gynophore structure - - - - - - - - inflorescence premature - true - - - - - - - - inflorescence onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome hard - - - - - - - - - - - - - - - - - - - - - - - - rhizome hardness - - - - - - - - - - - - - - - - - - - - - - - - tuberous root branched - - - - - - - - - - - - - - - - - - - - - - - - tuberous root branchiness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence circular - - - - - - - - - - - - - - - - - - - - - - - - axil lobed - - - - - - - - - - - - - - - - - - - - - - - - - - - - petal base phenotype - - - - - - - - - - - - - - - - - - - - - - - - petal base whole - - - - - - - - - - - - - - - - - - - - - - - - petal base wholeness - - - - - - - - - - - - - - - - - - - - - - - - - - - - extrafloral nectary phenotype - - - - - - - - - - - - - - - - - - - - - - - - extrafloral nectary viscid - - - - - - - - - - - - - - - - - - - - - - - - extrafloral nectary texture - - - - - - - - - - - - - - - - - - - - - - - - palea lanceolate - - - - - - - - - - - - - - - - - - - - - - - - palea sharpness - - - - - - - - - - - - - - - - - - - - - - - - fruit inserted into - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet orbicular - - - - - - - - - - - - - - - - - - - - - - - - endosperm simple - - - - - - - - - - - - - - - - - - - - - - - - endosperm complexity - - - - - - - - papilla cell female - true - - - - - - - - papilla cell phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - coma ovate - - - - - - - - - - - - - - - - - - - - - - - - coma convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - thorn curved - - - - - - - - - - - - - - - - - - - - - - - - pistillode glabrous - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus bifurcated - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus branchiness - - - - - - - - - - - - - - - - - - - - - - - - bract brittle - - - - - - - - - - - - - - - - - - - - - - - - plant cell lanceolate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf serrated - - - - - - - - - - - - - - - - - - - - - - - - lenticel rough - - - - - - - - - - - - - - - - - - - - - - - - ligule glandular - - - - - - - - - - - - - - - - - - - - - - - - ligule morphology - - - - - - - - - - - - - - - - - - - - - - - - central zone kinked - - - - - - - - - - - - - - - - - - - - - - - - root tip warty - - - - - - - - - - - - - - - - - - - - - - - - androecium straight - - - - - - - - locule hermaphrodite - true - - - - - - - - locule phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel dilated - - - - - - - - - - - - - - - - - - - - - - - - pedicel size - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell cylindrical - - - - - - - - - - - - - - - - - - - - - - - - stipule attenuate - - - - - - - - - - - - - - - - - - - - - - - - stamen purple - - - - - - - - - - - - - - - - - - - - - - - - epicalyx tomentose - - - - - - - - - - - - - - - - - - - - - - - - calyx whole - - - - - - - - - - - - - - - - - - - - - - - - peduncle alternate placement - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure basal to - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl lateral to - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl position - - - - - - - - - - - - - - - - - - - - - - - - filament lobed - - - - - - - - - - - - - - - - - - - - - - - - stalk trilobed - - - - - - - - leaf vascular system female - true - - - - - - - - leaf vascular system phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - aril pale pink - - - - - - - - - - - - - - - - - - - - - - - - endocarp ovate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal orbicular - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium increased length - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium length - - - - - - - - - - - - - - - - - - - - - - - - aril grey - - - - - - - - - - - - - - - - - - - - - - - - corolla obovate - - - - - - - - - - - - - - - - - - - - - - - - calyx sparse - - - - - - - - - - - - - - - - - - - - - - - - petal branched - - - - - - - - - - - - - - - - - - - - - - - - receptacle dark grey - - - - - - - - - - - - - - - - - - - - - - - - stem sparse - - - - - - - - - - - - - - - - - - - - - - - - gynoecium diameter - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pyramidal - - - - - - - - - - - - - - - - - - - - - - - - shoot internode pedicellate - - - - - - - - - - - - - - - - - - - - - - - - shoot internode attachment quality - - - - - - - - - - - - - - - - - - - - - - - - shoot internode cylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot internode convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark absent - - - - - - - - - - - - - - - - - - - - - - - - bark amount - - - - - - - - - - - - - - - - - - - - - - - - calyx horizontal - - - - - - - - - - - - - - - - - - - - - - - - pappus lateral to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system tubular - - - - - - - - disk flower arrested - true - - - - - - - - disk flower offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - calyx cuspidate - - - - - - - - - - - - - - - - - - - - - - - - thorn bifurcated - - - - - - - - pericarp acute - true - - - - - - - - pericarp duration - true - - - - - - - - - - - - - - - - - - - - - - - - papilla cell attenuate - - - - - - - - - - - - - - - - - - - - - - - - receptacle circular - - - - - - - - - - - - - - - - - - - - - - - - glume orbicular - - - - - - - - - - - - - - - - - - - - - - - - flower inflexible - - - - - - - - - - - - - - - - - - - - - - - - flower flexibility - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence curved - - - - - - - - - - - - - - - - - - - - - - - - endocarp dense - - - - - - - - - - - - - - - - - - - - - - - - endocarp mass density - - - - - - - - - - - - - - - - - - - - - - - - disk flower punctate - - - - - - - - - - - - - - - - - - - - - - - - seed decreased amount - - - - - - - - - - - - - - - - - - - - - - - - seed amount - - - - - - - - - - - - - - - - - - - - - - - - plant cell glistening - - - - - - - - - - - - - - - - - - - - - - - - plant cell reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf symmetrical - - - - - - - - - - - - - - - - - - - - - - - - apical hook dentated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petiole kinked - - - - - - - - - - - - - - - - - - - - - - - - fruit lobate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp adhesive - - - - - - - - - - - - - - - - - - - - - - - - mesocarp adhesivity - - - - - - - - - - - - - - - - - - - - - - - - connective pubescent - - - - - - - - - - - - - - - - - - - - - - - - connective maturity - - - - - - - - - - - - - - - - - - - - - - - - seed trichome purple - - - - - - - - - - - - - - - - - - - - - - - - seed trichome color - - - - - - - - - - - - - - - - - - - - - - - - stipule circular - - - - - - - - - - - - - - - - - - - - - - - - bract cauline to - - - - - - - - - - - - - - - - - - - - - - - - endocarp split - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis brown - - - - - - - - - - - - - - - - - - - - - - - - plumule terminal - - - - - - - - - - - - - - - - - - - - - - - - plumule position - - - - - - - - - - - - - - - - - - - - - - - - parenchyma attenuate - - - - - - - - - - - - - - - - - - - - - - - - parenchyma sharpness - - - - - - - - - - - - - - - - - - - - - - - - filament pointed - - - - - - - - - - - - - - - - - - - - - - - - stipel clavate - - - - - - - - - - - - - - - - - - - - - - - - stipel concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stalk mottled - - - - - - - - - - - - - - - - - - - - - - - - stalk color pattern - - - - - - - - - - - - - - - - - - - - - - - - axil fleshy - - - - - - - - - - - - - - - - - - - - - - - - axil composition - - - - - - - - - - - - - - - - - - - - - - - - style inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf trilobed - - - - - - - - - - - - - - - - - - - - - - - - stigma spoon-shaped - - - - - - - - - - - - - - - - - - - - - - - - stipule obovate - - - - - - - - - - - - - - - - - - - - - - - - root spherical - - - - - - - - - - - - - - - - - - - - - - - - prickle smooth - - - - - - - - - - - - - - - - - - - - - - - - prickle texture - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus flattened - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus curvature - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus truncated - - - - - - - - - - - - - - - - - - - - - - - - testa diameter - - - - - - - - - - - - - - - - - - - - - - - - anther decurrent - - - - - - - - - - - - - - - - - - - - - - - - whole plant rough - - - - - - - - - - - - - - - - - - - - - - - - costa circular - - - - - - - - - - - - - - - - - - - - - - - - costa 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - gynophore yellow - - - - - - - - - - - - - - - - - - - - - - - - gynophore color - - - - - - - - - - - - - - - - - - - - - - - - pedicel blunt - - - - - - - - pedicel premature - true - - - - - - - - pedicel onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - pericarp foveate - - - - - - - - - - - - - - - - - - - - - - - - disk flower acuminate - - - - - - - - - - - - - - - - - - - - - - - - disk flower sharpness - - - - - - - - - - - - - - - - - - - - - - - - testa sinuous - - - - - - - - - - - - - - - - - - - - - - - - fruit detached from - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore increased length - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore length - - - - - - - - - - - - - - - - - - - - - - - - hypanthium linear - - - - - - - - - - - - - - - - - - - - - - - - leaf pink - - - - - - - - - - - - - - - - - - - - - - - - stalk decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - stalk water composition - - - - - - - - vascular bundle male - true - - - - - - - - - - - - - - - - - - - - - - - - aril vertical to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence straight - - - - - - - - - - - - - - - - - - - - - - - - lamina blue - - - - - - - - - - - - - - - - - - - - - - - - bract warty - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system pinnate - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system shape - - - - - - - - - - - - - - - - - - - - - - - - carpel convex - - - - - - - - - - - - - - - - - - - - - - - - disk flower alternate placement - - - - - - - - - - - - - - - - - - - - - - - - - - - - phloem phenotype - - - - - - - - - - - - - - - - - - - - - - - - phloem black - - - - - - - - - - - - - - - - - - - - - - - - phloem color - - - - - - - - - - - - - - - - - - - - - - - - disk flower triangular - - - - - - - - - - - - - - - - - - - - - - - - pedicel vestigial - - - - - - - - - - - - - - - - - - - - - - - - cotyledon conspicuous - - - - - - - - - - - - - - - - - - - - - - - - costa hexagonal - - - - - - - - - - - - - - - - - - - - - - - - central zone bifurcated - - - - - - - - - - - - - - - - - - - - - - - - peduncle distributed - - - - - - - - - - - - - - - - - - - - - - - - sepal recurved - - - - - - - - - - - - - - - - - - - - - - - - petiole decreased amount - - - - - - - - petal up - - true - - - - - - - - - - - - - - - - - - - - - - - - petal direction - - - - - - - - - - - - - - - - - - - - - - - - petiolule oblique to - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein obtuse - - - - - - - - - - - - - - - - - - - - - - - - periderm acuminate - - - - - - - - - - - - - - - - - - - - - - - - periderm sharpness - - - - - - - - - - - - - - - - - - - - - - - - endocarp glistening - - - - - - - - - - - - - - - - - - - - - - - - endocarp reflectivity - - - - - - - - - - - - - - - - - - - - - - - - petal furrowed - - - - - - - - petiolule premature - true - - - - - - - - petiolule onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - receptacle concave - - - - - - - - - - - - - - - - - - - - - - - - infructescence pointed - - - - - - - - - - - - - - - - - - - - - - - - stem undulate - - - - - - - - - - - - - - - - - - - - - - - - stamen decreased amount - - - - - - - - - - - - - - - - - - - - - - - - stamen amount - - - - - - - - - - - - - - - - - - - - - - - - anther spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium discoid - - - - - - - - - - - - - - - - - - - - - - - - petiole drooping - - - - - - - - - - - - - - - - - - - - - - - - hilum sunken - - - - - - - - - - - - - - - - - - - - - - - - hilum elevation - - - - - - - - - - - - - - - - - - - - - - - - lamina punctate - - - - - - - - - - - - - - - - - - - - - - - - receptacle obconical - - - - - - - - - - - - - - - - - - - - - - - - endocarp sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein ovate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure glabrous - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure pilosity - - - - - - - - - - - - - - - - - - - - - - - - androecium slender - - - - - - - - - - - - - - - - - - - - - - - - perianth zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - perianth symmetry - - - - - - - - - - - - - - - - - - - - - - - - aril inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon spherical - - - - - - - - - - - - - - - - - - - - - - - - apical hook terminal - - - - - - - - - - - - - - - - - - - - - - - - stem right - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axial to - - - - - - - - - - - - - - - - - - - - - - - - epidermis juvenile - - - - - - - - - - - - - - - - - - - - - - - - parenchyma glabrous - - - - - - - - - - - - - - - - - - - - - - - - parenchyma pilosity - - - - - - - - - - - - - - - - - - - - - - - - plant callus ovate - - - - - - - - - - - - - - - - - - - - - - - - plant callus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - rhizome pubescent - - - - - - - - - - - - - - - - - - - - - - - - rhizome maturity - - - - - - - - - - - - - - - - - - - - - - - - coma length - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem discoid - - - - - - - - - - - - - - - - - - - - - - - - petiole arched - - - - - - - - - - - - - - - - - - - - - - - - leaflet distributed - - - - - - - - - - - - - - - - - - - - - - - - shoot internode distichous - - - - - - - - - - - - - - - - - - - - - - - - glume external to - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence condensed - - - - - - - - - - - - - - - - - - - - - - - - peduncle dry - - - - - - - - - - - - - - - - - - - - - - - - peduncle wetness - - - - - - - - - - - - - - - - - - - - - - - - stem red brown - - - - - - - - - - - - - - - - - - - - - - - - awn fertile - - - - - - - - - - - - - - - - - - - - - - - - awn fertility - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue punctiform - - - - - - - - - - - - - - - - - - - - - - - - central zone increased thickness - - - - - - - - - - - - - - - - - - - - - - - - central zone thickness - - - - - - - - - - - - - - - - - - - - - - - - epidermis quadrangular - - - - - - - - - - - - - - - - - - - - - - - - spikelet neoplastic, spontaneous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon folded - - - - - - - - - - - - - - - - - - - - - - - - cotyledon surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - staminode increased length - - - - - - - - - - - - - - - - - - - - - - - - staminode length - - - - - - - - - - - - - - - - - - - - - - - - peduncle revolute - - - - - - - - - - - - - - - - - - - - - - - - fruit left - - - - - - - - pollen recent - true - - - - - - - - pollen onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium fusiform - - - - - - - - - - - - - - - - - - - - - - - - branch tubular - - - - - - - - - - - - - - - - - - - - - - - - corolla coiled - - - - - - - - - - - - - - - - - - - - - - - - corolla coiling - - - - - - - - - - - - - - - - - - - - - - - - funicle multicellular - - - - - - - - - - - - - - - - - - - - - - - - funicle cellularity - - - - - - - - - - - - - - - - - - - - - - - - ovary wall split - - - - - - - - - - - - - - - - - - - - - - - - corolla diameter - - - - - - - - - - - - - - - - - - - - - - - - infructescence immature - - - - - - - - - - - - - - - - - - - - - - - - infructescence maturity - - - - - - - - - - - - - - - - - - - - - - - - scutellar node increased size - - - - - - - - - - - - - - - - - - - - - - - - scutellar node size - - - - - - - - - - - - - - - - - - - - - - - - tubercle hispid - - - - - - - - - - - - - - - - - - - - - - - - oil gland oblong - - - - - - - - - - - - - - - - - - - - - - - - oil gland 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stalk lobed - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - receptacle linear - - - - - - - - - - - - - - - - - - - - - - - - petiole distal to - - - - - - - - - - - - - - - - - - - - - - - - hydathode pinnate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon truncated - - - - - - - - - - - - - - - - - - - - - - - - anther constricted - - - - - - - - - - - - - - - - - - - - - - - - radicle fleshy - - - - - - - - - - - - - - - - - - - - - - - - radicle composition - - - - - - - - - - - - - - - - - - - - - - - - stipel erect - - - - - - - - - - - - - - - - - - - - - - - - shoot apex sigmoid - - - - - - - - - - - - - - - - - - - - - - - - perianth mixed - - - - - - - - - - - - - - - - - - - - - - - - stigma dry - - - - - - - - - - - - - - - - - - - - - - - - stigma wetness - - - - - - - - - - - - - - - - - - - - - - - - lenticel hispid - - - - - - - - stigma male - true - - - - - - - - - - - - - - - - - - - - - - - - stalk lanceolate - - - - - - - - - - - - - - - - - - - - - - - - corm attenuate - - - - - - - - - - - - - - - - - - - - - - - - corm sharpness - - - - - - - - - - - - - - - - - - - - - - - - petal pedicellate - - - - - - - - - - - - - - - - - - - - - - - - leaf aromatic - - - - - - - - - - - - - - - - - - - - - - - - leaf aromaticity - - - - - - - - - - - - - - - - - - - - - - - - perianth orange - - - - - - - - - - - - - - - - - - - - - - - - inflorescence procumbent - - - - - - - - - - - - - - - - - - - - - - - - rhizome acuminate - - - - - - - - - - - - - - - - - - - - - - - - crown root conical - - - - - - - - - - - - - - - - - - - - - - - - calyx fertile - - - - - - - - - - - - - - - - - - - - - - - - calyx fertility - - - - - - - - - - - - - - - - - - - - - - - - stem reniform - - - - - - - - - - - - - - - - - - - - - - - - epidermis purple - - - - - - - - - - - - - - - - - - - - - - - - aril cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - plant cell fleshy - - - - - - - - - - - - - - - - - - - - - - - - plant cell composition - - - - - - - - - - - - - - - - - - - - - - - - connective triangular - - - - - - - - - - - - - - - - - - - - - - - - lamina laminar - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein terminal - - - - - - - - - - - - - - - - - - - - - - - - testa soft - - - - - - - - - - - - - - - - - - - - - - - - root tip terminal - - - - - - - - - - - - - - - - - - - - - - - - rhizome scaly - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system pubescent - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system maturity - - - - - - - - - - - - - - - - - - - - - - - - stem split - - - - - - - - - - - - - - - - - - - - - - - - inflorescence tubular - - - - - - - - - - - - - - - - - - - - - - - - spikelet truncated - - - - - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel phenotype - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel punctate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue notched - - - - - - - - - - - - - - - - - - - - - - - - costa radius - - - - - - - - - - - - - - - - - - - - - - - - central zone transparent - - - - - - - - - - - - - - - - - - - - - - - - central zone opacity - - - - - - - - - - - - - - - - - - - - - - - - spikelet fertile - - - - - - - - - - - - - - - - - - - - - - - - seed ochre - - - - - - - - - - - - - - - - - - - - - - - - endocarp warty - - - - - - - - - - - - - - - - - - - - - - - - pericarp circular - - - - - - - - - - - - - - - - - - - - - - - - - - - - juice sac phenotype - - - - - - - - - - - - - - - - - - - - - - - - juice sac brittle - - - - - - - - - - - - - - - - - - - - - - - - juice sac structure - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal falciform - - - - - - - - - - - - - - - - - - - - - - - - receptacle multiple - - - - - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud phenotype - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud distichous - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud position - - - - - - - - - - - - - - - - - - - - - - - - lamina flattened - - - - - - - - - - - - - - - - - - - - - - - - trichome obovate - - - - - - - - - - - - - - - - - - - - - - - - connective basal to - - - - - - - - - - - - - - - - - - - - - - - - whole plant attenuate - - - - - - - - - - - - - - - - - - - - - - - - whole plant spotted - - - - - - - - - - - - - - - - - - - - - - - - whole plant color pattern - - - - - - - - - - - - - - - - - - - - - - - - stereome erose - - - - - - - - - - - - - - - - - - - - - - - - inflorescence truncated - - - - - - - - - - - - - - - - - - - - - - - - lamina attached to - - - - - - - - - - - - - - - - - - - - - - - - lamina attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bark dark purple - - - - - - - - - - - - - - - - - - - - - - - - inflorescence obconical - - - - - - - - - - - - - - - - - - - - - - - - rhizome surrounding - - - - - - - - fruit subacute - true - - - - - - - - - - - - - - - - - - - - - - - - leaf kinked - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure reniform - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark glistening - - - - - - - - - - - - - - - - - - - - - - - - bark reflectivity - - - - - - - - - - - - - - - - - - - - - - - - keel emarginate - - - - - - - - - - - - - - - - - - - - - - - - growth ring glandular - - - - - - - - - - - - - - - - - - - - - - - - growth ring morphology - - - - - - - - - - - - - - - - - - - - - - - - petal whorled - - - - - - - - - - - - - - - - - - - - - - - - testa ornamented - - - - - - - - septum up - true - - - - - - - - - - - - - - - - - - - - - - - - septum direction - - - - - - - - - - - - - - - - - - - - - - - - style tubular - - - - - - - - - - - - - - - - - - - - - - - - peduncle concealed - - - - - - - - - - - - - - - - - - - - - - - - hypanthium adaxial to - - - - - - - - inflorescence axis up - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis direction - - - - - - - - - - - - - - - - - - - - - - - - sepal angular - - - - - - - - - - - - - - - - - - - - - - - - branch decurrent - - - - - - - - - - - - - - - - - - - - - - - - crown root lobed - - - - - - - - - - - - - - - - - - - - - - - - perianth separating - - - - - - - - - - - - - - - - - - - - - - - - shoot system tomentose - - - - - - - - - - - - - - - - - - - - - - - - shoot system pilosity - - - - - - - - - - - - - - - - - - - - - - - - stipule striated - - - - - - - - - - - - - - - - - - - - - - - - seed trichome angular - - - - - - - - - - - - - - - - - - - - - - - - flower brown - - - - - - - - - - - - - - - - - - - - - - - - lenticel branched - - - - - - - - - - - - - - - - - - - - - - - - lenticel branchiness - - - - - - - - - - - - - - - - - - - - - - - - pith glabrous - - - - - - - - - - - - - - - - - - - - - - - - pith pilosity - - - - - - - - - - - - - - - - - - - - - - - - aril translucent - - - - - - - - - - - - - - - - - - - - - - - - aril opacity - - - - - - - - - - - - - - - - - - - - - - - - calyx prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina position - - - - - - - - - - - - - - - - - - - - - - - - exocarp black - - - - - - - - - - - - - - - - - - - - - - - - root tip cuspidate - - - - - - - - - - - - - - - - - - - - - - - - oil gland spherical - - - - - - - - - - - - - - - - - - - - - - - - staminode curled - - - - - - - - - - - - - - - - - - - - - - - - aril dry - - - - - - - - - - - - - - - - - - - - - - - - aril wetness - - - - - - - - - - - - - - - - - - - - - - - - seed discoid - - - - - - - - - - - - - - - - - - - - - - - - tubercle lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tubercle sharpness - - - - - - - - - - - - - - - - - - - - - - - - seed conspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf surrounding - - - - - - - - - - - - - - - - - - - - - - - - leaf open - - - - - - - - - - - - - - - - - - - - - - - - stigma dilated - - - - - - - - - - - - - - - - - - - - - - - - stigma size - - - - - - - - - - - - - - - - - - - - - - - - rhizome opposite - - - - - - - - - - - - - - - - - - - - - - - - stigma coating - - - - - - - - - - - - - - - - - - - - - - - - cotyledon linear - - - - - - - - - - - - - - - - - - - - - - - - shoot apex age - - - - - - - - - - - - - - - - - - - - - - - - stem vertical to - - - - - - - - - - - - - - - - - - - - - - - - stem violet - - - - - - - - - - - - - - - - - - - - - - - - filament transformed to - - - - - - - - - - - - - - - - - - - - - - - - receptacle lateral to - - - - - - - - - - - - - - - - - - - - - - - - androecium flat - - - - - - - - - - - - - - - - - - - - - - - - stipule broken - - - - - - - - - - - - - - - - - - - - - - - - stipule wholeness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx hairy - - - - - - - - - - - - - - - - - - - - - - - - epicalyx lanceolate - - - - - - - - - - - - - - - - - - - - - - - - epicalyx sharpness - - - - - - - - - - - - - - - - - - - - - - - - stigma firm - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus increased thickness - - - - - - - - - - - - - - - - - - - - - - - - connective glandular - - - - - - - - - - - - - - - - - - - - - - - - connective morphology - - - - - - - - - - - - - - - - - - - - - - - - seed broad - - - - - - - - - - - - - - - - - - - - - - - - bud spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - petal broad - - - - - - - - - - - - - - - - - - - - - - - - rhizome red - - - - - - - - - - - - - - - - - - - - - - - - corm lobed - - - - - - - - - - - - - - - - - - - - - - - - corm shape - - - - - - - - - - - - - - - - - - - - - - - - tepal whorled - - - - - - - - - - - - - - - - - - - - - - - - tepal spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stamen attached to - - - - - - - - - - - - - - - - - - - - - - - - leaflet brittle - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet sterile - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet fertility - - - - - - - - - - - - - - - - - - - - - - - - corolla smooth - - - - - - - - - - - - - - - - - - - - - - - - corolla texture - - - - - - - - - - - - - - - - - - - - - - - - apical hook decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - apical hook water composition - - - - - - - - - - - - - - - - - - - - - - - - stigma basal to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex convolute - - - - - - - - - - - - - - - - - - - - - - - - bark elongated - - - - - - - - - - - - - - - - - - - - - - - - central zone cuneate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex clavate - - - - - - - - tepal male - true - - - - - - - - tepal phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - ovary wall oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower loose - - - - - - - - - - - - - - - - - - - - - - - - stamen trilobed - - - - - - - - - - - - - - - - - - - - - - - - endosperm smooth - - - - - - - - - - - - - - - - - - - - - - - - endosperm texture - - - - - - - - - - - - - - - - - - - - - - - - thorn obtuse - - - - - - - - - - - - - - - - - - - - - - - - bract divergent from - - - - - - - - - - - - - - - - - - - - - - - - central zone acuminate - - - - - - - - - - - - - - - - - - - - - - - - funicle strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - funicle shape - - - - - - - - - - - - - - - - - - - - - - - - seed trichome dentated - - - - - - - - - - - - - - - - - - - - - - - - trichome purple - - - - - - - - - - - - - - - - - - - - - - - - trichome color - - - - - - - - spikelet up - true - - - - - - - - - - - - - - - - - - - - - - - - involucre lateral to - - - - - - - - - - - - - - - - - - - - - - - - anther undulate - - - - - - - - calyx continuous - true - - - - - - - - calyx occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - carpel angular - - - - - - - - - - - - - - - - - - - - - - - - fruit dark red - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle revolute - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue ornamentation - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - bark spongy - - - - - - - - - - - - - - - - - - - - - - - - bract time - - - - - - - - - - - - - - - - - - - - - - - - fruit blunt - - - - - - - - - - - - - - - - - - - - - - - - corm obtuse - - - - - - - - - - - - - - - - - - - - - - - - corm 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - locule orange - - - - - - - - - - - - - - - - - - - - - - - - calyx subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - infructescence pubescent - - - - - - - - - - - - - - - - - - - - - - - - trichome caudate - - - - - - - - - - - - - - - - - - - - - - - - corolla external to - - - - - - - - - - - - - - - - - - - - - - - - branch lobed - - - - - - - - - - - - - - - - - - - - - - - - leaflet curled - - - - - - - - - - - - - - - - - - - - - - - - bud pointed - - - - - - - - - - - - - - - - - - - - - - - - pith orbicular - - - - - - - - - - - - - - - - - - - - - - - - pith 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant cell hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - plant cell volume - - - - - - - - - - - - - - - - - - - - - - - - staminode cuneate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis slender - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis shape - - - - - - - - - - - - - - - - - - - - - - - - radicle straight - - - - - - - - - - - - - - - - - - - - - - - - radicle shape - - - - - - - - disk flower male - true - - - - - - - - - - - - - - - - - - - - - - - - exocarp broad - - - - - - - - - - - - - - - - - - - - - - - - radicle curved - - - - - - - - - - - - - - - - - - - - - - - - radicle curvature - - - - - - - - - - - - - - - - - - - - - - - - gynoecium pointed - - - - - - - - - - - - - - - - - - - - - - - - gynoecium sharpness - - - - - - - - - - - - - - - - - - - - - - - - locule triangular - - - - - - - - - - - - - - - - - - - - - - - - glume soft - - - - - - - - - - - - - - - - - - - - - - - - glume hardness - - - - - - - - - - - - - - - - - - - - - - - - perianth sparse - - - - - - - - - - - - - - - - - - - - - - - - involucre tomentose - - - - - - - - - - - - - - - - - - - - - - - - root lateral to - - - - - - - - - - - - - - - - - - - - - - - - sepal retuse - - - - - - - - - - - - - - - - - - - - - - - - palea acuminate - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin phenotype - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin recurved - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin curvature - - - - - - - - - - - - - - - - - - - - - - - - gynoecium fertile - - - - - - - - - - - - - - - - - - - - - - - - bud warty - - - - - - - - - - - - - - - - - - - - - - - - bracteole spotted - - - - - - - - - - - - - - - - - - - - - - - - bracteole color pattern - - - - - - - - - - - - - - - - - - - - - - - - seta acuminate - - - - - - - - - - - - - - - - - - - - - - - - seta sharpness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member raised - - - - - - - - - - - - - - - - - - - - - - - - sepal bilobed - - - - - - - - - - - - - - - - - - - - - - - - leaf base angle - - - - - - - - - - - - - - - - - - - - - - - - pistillode bilobed - - - - - - - - - - - - - - - - - - - - - - - - mesocarp rugose - - - - - - - - - - - - - - - - - - - - - - - - mesocarp surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - shoot apex divergent from - - - - - - - - - - - - - - - - - - - - - - - - involucre pink - - - - - - - - - - - - - - - - - - - - - - - - canal ovate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal increased size - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal size - - - - - - - - - - - - - - - - - - - - - - - - corolla grey - - - - - - - - - - - - - - - - - - - - - - - - apical hook open - - - - - - - - - - - - - - - - - - - - - - - - apical hook closure - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal furrowed - - - - - - - - - - - - - - - - - - - - - - - - seed trichome scalloped - - - - - - - - - - - - - - - - - - - - - - - - petal warty - - - - - - - - - - - - - - - - - - - - - - - - anther hexagonal - - - - - - - - - - - - - - - - - - - - - - - - stamen ventral to - - - - - - - - - - - - - - - - - - - - - - - - seed concave - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge recurved - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge curvature - - - - - - - - - - - - - - - - - - - - - - - - plant spore raised - - - - - - - - - - - - - - - - - - - - - - - - plant spore shape - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus glandular - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus morphology - - - - - - - - - - - - - - - - - - - - - - - - fruit dispersed - - - - - - - - - - - - - - - - - - - - - - - - ligule obovate - - - - - - - - - - - - - - - - - - - - - - - - receptacle pedicellate - - - - - - - - - - - - - - - - - - - - - - - - bracteole reniform - - - - - - - - - - - - - - - - - - - - - - - - bracteole concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle discoid - - - - - - - - - - - - - - - - - - - - - - - - perianth ridged - - - - - - - - - - - - - - - - - - - - - - - - fruit biconvex - - - - - - - - - - - - - - - - - - - - - - - - awn linear - - - - - - - - - - - - - - - - - - - - - - - - seed hispidulous - - - - - - - - - - - - - - - - - - - - - - - - petal size - - - - - - - - - - - - - - - - - - - - - - - - fruit constricted - - - - - - - - - - - - - - - - - - - - - - - - hilum raised - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fusiform - - - - - - - - - - - - - - - - - - - - - - - - flower furrowed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence angle - - - - - - - - - - - - - - - - - - - - - - - - seed cuneate - - - - - - - - - - - - - - - - - - - - - - - - bracteole branched - - - - - - - - - - - - - - - - - - - - - - - - filament bilobed - - - - - - - - - - - - - - - - - - - - - - - - central zone sterile - - - - - - - - - - - - - - - - - - - - - - - - central zone fertility - - - - - - - - - - - - - - - - - - - - - - - - calyx heart shaped - - - - - - - - - - - - - - - - - - - - - - - - pericarp glandular - - - - - - - - - - - - - - - - - - - - - - - - pericarp morphology - - - - - - - - - - - - - - - - - - - - - - - - petiole subulate - - - - - - - - - - - - - - - - - - - - - - - - bud dentated - - - - - - - - - - - - - - - - - - - - - - - - plant cell heart shaped - - - - - - - - - - - - - - - - - - - - - - - - plant cell concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma adaxial to - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma position - - - - - - - - - - - - - - - - - - - - - - - - calyx vertical - - - - - - - - - - - - - - - - - - - - - - - - thorn lanceolate - - - - - - - - - - - - - - - - - - - - - - - - thorn sharpness - - - - - - - - - - - - - - - - - - - - - - - - bulb bulbous - - - - - - - - - - - - - - - - - - - - - - - - bulb convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge terminal - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge position - - - - - - - - - - - - - - - - - - - - - - - - petiolule pinnate - - - - - - - - - - - - - - - - - - - - - - - - style right angle to - - - - - - - - - - - - - - - - - - - - - - - - style angle - - - - - - - - - - - - - - - - - - - - - - - - bud kinked - - - - - - - - - - - - - - - - - - - - - - - - lenticel ochre - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus fleshy - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus composition - - - - - - - - - - - - - - - - - - - - - - - - bracteole subcircular - - - - - - - - - - - - - - - - - - - - - - - - prophyll tubular - - - - - - - - - - - - - - - - - - - - - - - - prophyll convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pistillode cupulate - - - - - - - - - - - - - - - - - - - - - - - - style blunt - - - - - - - - - - - - - - - - - - - - - - - - mesophyll simple - - - - - - - - - - - - - - - - - - - - - - - - mesophyll complexity - - - - - - - - - - - - - - - - - - - - - - - - bracteole purple - - - - - - - - - - - - - - - - - - - - - - - - pedicel offset - - - - - - - - - - - - - - - - - - - - - - - - axillary bud cuneate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant cell auriculate - - - - - - - - - - - - - - - - - - - - - - - - connective clavate - - - - - - - - - - - - - - - - - - - - - - - - connective concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf axil pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf axil maturity - - - - - - - - - - - - - - - - - - - - - - - - stigma vertical to - - - - - - - - - - - - - - - - - - - - - - - - epicalyx pubescent - - - - - - - - - - - - - - - - - - - - - - - - epicalyx maturity - - - - - - - - - - - - - - - - - - - - - - - - axil glandular - - - - - - - - - - - - - - - - - - - - - - - - axil morphology - - - - - - - - - - - - - - - - - - - - - - - - seed trichome grooved - - - - - - - - - - - - - - - - - - - - - - - - leaf axial to - - - - - - - - - - - - - - - - - - - - - - - - bark square - - - - - - - - - - - - - - - - - - - - - - - - pericarp convex - - - - - - - - - - - - - - - - - - - - - - - - pericarp concavity - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root swollen - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root structure - - - - - - - - - - - - - - - - - - - - - - - - banner petal reniform - - - - - - - - - - - - - - - - - - - - - - - - banner petal concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract abaxial to - - - - - - - - - - - - - - - - - - - - - - - - stigma dorsal to - - - - - - - - - - - - - - - - - - - - - - - - upper glume convex - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle autogenous - - - - - - - - lamina variant - true - - - - - - - - lamina variability - true - - - - - - - - keel female - true - - - - - - - - keel phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus elliptic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence waxy - - - - - - - - - - - - - - - - - - - - - - - - inflorescence waxiness - - - - - - - - - - - - - - - - - - - - - - - - peduncle truncated - - - - - - - - - - - - - - - - - - - - - - - - lamina inflated - - - - - - - - - - - - - - - - - - - - - - - - lamina structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - sepal red - - - - - - - - - - - - - - - - - - - - - - - - root tip oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - axil unbranched - - - - - - - - - - - - - - - - - - - - - - - - plant callus cuneate - - - - - - - - - - - - - - - - - - - - - - - - corm light brown - - - - - - - - - - - - - - - - - - - - - - - - seed blunt - - - - - - - - - - - - - - - - - - - - - - - - oil gland undulate - - - - - - - - - - - - - - - - - - - - - - - - oil gland shape - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf cut - - - - - - - - - - - - - - - - - - - - - - - - heartwood fleshy - - - - - - - - - - - - - - - - - - - - - - - - heartwood composition - - - - - - - - - - - - - - - - - - - - - - - - axil present - - - - - - - - - - - - - - - - - - - - - - - - prickle straight - - - - - - - - - - - - - - - - - - - - - - - - central zone concave - - - - - - - - - - - - - - - - - - - - - - - - keel diameter - - - - - - - - ovule primordium arrested - true - - - - - - - - ovule primordium offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - stem spatulate - - - - - - - - - - - - - - - - - - - - - - - - costa elongated - - - - - - - - - - - - - - - - - - - - - - - - aril scalloped - - - - - - - - - - - - - - - - - - - - - - - - lenticel flattened - - - - - - - - - - - - - - - - - - - - - - - - lenticel curvature - - - - - - - - - - - - - - - - - - - - - - - - stigma brittle - - - - - - - - - - - - - - - - - - - - - - - - stamen simple - - - - - - - - - - - - - - - - - - - - - - - - stamen complexity - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus sharpness - - - - - - - - - - - - - - - - - - - - - - - - exocarp separated from - - - - - - - - - - - - - - - - - - - - - - - - shoot apex perfoliate - - - - - - - - - - - - - - - - - - - - - - - - whole plant condensed - - - - - - - - - - - - - - - - - - - - - - - - endocarp lateral to - - - - - - - - - - - - - - - - - - - - - - - - areole bud orbicular - - - - - - - - - - - - - - - - - - - - - - - - prickle diameter - - - - - - - - - - - - - - - - - - - - - - - - endocarp pointed - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue conical - - - - - - - - - - - - - - - - - - - - - - - - corolla sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus opposite - - - - - - - - - - - - - - - - - - - - - - - - valve tomentose - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet decreased thickness - - - - - - - - periderm acute - true - - - - - - - - periderm duration - true - - - - - - - - - - - - - - - - - - - - - - - - petiole pointed - - - - - - - - - - - - - - - - - - - - - - - - stamen funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - branch dark green - - - - - - - - - - - - - - - - - - - - - - - - resin canal glabrous - - - - - - - - - - - - - - - - - - - - - - - - resin canal pilosity - - - - - - - - - - - - - - - - - - - - - - - - corolla dark yellow - - - - - - - - - - - - - - - - - - - - - - - - petal reniform - - - - - - - - - - - - - - - - - - - - - - - - sheath cell cylindrical - - - - - - - - - - - - - - - - - - - - - - - - ray system broken - - - - - - - - - - - - - - - - - - - - - - - - ray system wholeness - - - - - - - - - - - - - - - - - - - - - - - - ray system decreased amount - - - - - - - - - - - - - - - - - - - - - - - - ray system amount - - - - - - - - - - - - - - - - - - - - - - - - perianth distance - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina constricted - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina structure - - - - - - - - - - - - - - - - - - - - - - - - bract elongated - - - - - - - - - - - - - - - - - - - - - - - - stalk granular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence soft - - - - - - - - - - - - - - - - - - - - - - - - inflorescence hardness - - - - - - - - - - - - - - - - - - - - - - - - papilla cell discoid - - - - - - - - - - - - - - - - - - - - - - - - aril pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein linear - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue warty - - - - - - - - - - - - - - - - - - - - - - - - growth ring sunken - - - - - - - - - - - - - - - - - - - - - - - - growth ring elevation - - - - - - - - - - - - - - - - - - - - - - - - pedicel opposite - - - - - - - - pappus hermaphrodite - true - - - - - - - - pappus phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - anther fused with - - - - - - - - - - - - - - - - - - - - - - - - gynoecium terminal - - - - - - - - - - - - - - - - - - - - - - - - plant cell smooth - - - - - - - - - - - - - - - - - - - - - - - - plant cell texture - - - - - - - - - - - - - - - - - - - - - - - - plant cell glabrous - - - - - - - - - - - - - - - - - - - - - - - - plant cell pilosity - - - - - - - - - - - - - - - - - - - - - - - - pericarp watery - - - - - - - - - - - - - - - - - - - - - - - - ovary wall offset - - - - - - - - - - - - - - - - - - - - - - - - prickle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - aril decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - aril water composition - - - - - - - - - - - - - - - - - - - - - - - - androecium broad - - - - - - - - - - - - - - - - - - - - - - - - stalk orange - - - - - - - - - - - - - - - - - - - - - - - - pistillode broad - - - - - - - - - - - - - - - - - - - - - - - - lower glume broad - - - - - - - - - - - - - - - - - - - - - - - - tubercle bifurcated - - - - - - - - - - - - - - - - - - - - - - - - tubercle branchiness - - - - - - - - - - - - - - - - - - - - - - - - seed coat rugose - - - - - - - - - - - - - - - - - - - - - - - - seed coat surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - stereome pubescent - - - - - - - - - - - - - - - - - - - - - - - - stereome maturity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence adaxial to - - - - - - - - - - - - - - - - - - - - - - - - fruit robust - - - - - - - - - - - - - - - - - - - - - - - - costa hairy - - - - - - - - - - - - - - - - - - - - - - - - crown root pedicellate - - - - - - - - - - - - - - - - - - - - - - - - crown root attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system hairy - - - - - - - - - - - - - - - - - - - - - - - - thorn pinnate - - - - - - - - tassel sessile spikelet male - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel young - - - - - - - - - - - - - - - - - - - - - - - - pedicel age - - - - - - - - - - - - - - - - - - - - - - - - pedicel immature - - - - - - - - - - - - - - - - - - - - - - - - petiolule subcircular - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath black - - - - - - - - - - - - - - - - - - - - - - - - anther drooping - - - - - - - - - - - - - - - - - - - - - - - - carpel condensed - - - - - - - - - - - - - - - - - - - - - - - - filament caudate - - - - - - - - branch synchronous - true - - - - - - - - branch occurrence - true - - - - - - - - portion of secretory tissue female - true - - - - - - - - portion of secretory tissue phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - trichome orbicular - - - - - - - - - - - - - - - - - - - - - - - - apical hook trilobed - - - - - - - - - - - - - - - - - - - - - - - - glume clavate - - - - - - - - - - - - - - - - - - - - - - - - glume concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem smooth - - - - - - - - - - - - - - - - - - - - - - - - inflorescence firm - - - - - - - - - - - - - - - - - - - - - - - - calyx oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - crown root smooth - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue decurrent - - - - - - - - - - - - - - - - - - - - - - - - branch viscous - - - - - - - - - - - - - - - - - - - - - - - - branch viscosity - - - - - - - - - - - - - - - - - - - - - - - - leaf angle - - - - - - - - - - - - - - - - - - - - - - - - apical hook emarginate - - - - - - - - - - - - - - - - - - - - - - - - crown root broken - - - - - - - - - - - - - - - - - - - - - - - - crown root wholeness - - - - - - - - - - - - - - - - - - - - - - - - pericarp decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - pericarp water composition - - - - - - - - - - - - - - - - - - - - - - - - lamina distichous - - - - - - - - - - - - - - - - - - - - - - - - pappus oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - style cleft - - - - - - - - - - - - - - - - - - - - - - - - shoot apex abaxial to - - - - - - - - - - - - - - - - - - - - - - - - whole plant basal to - - - - - - - - - - - - - - - - - - - - - - - - flower firm - - - - - - - - - - - - - - - - - - - - - - - - flower hardness - - - - - - - - - - - - - - - - - - - - - - - - stigma divergent from - - - - - - - - - - - - - - - - - - - - - - - - root tip hispid - - - - - - - - - - - - - - - - - - - - - - - - stalk dorsal to - - - - - - - - - - - - - - - - - - - - - - - - lamina confluent with - - - - - - - - - - - - - - - - - - - - - - - - shoot apex granular - - - - - - - - - - - - - - - - - - - - - - - - flower inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - connective red - - - - - - - - - - - - - - - - - - - - - - - - anther dry - - - - - - - - - - - - - - - - - - - - - - - - anther wetness - - - - - - - - - - - - - - - - - - - - - - - - - - - - megaspore phenotype - - - - - - - - - - - - - - - - - - - - - - - - megaspore granular - - - - - - - - - - - - - - - - - - - - - - - - megaspore composition - - - - - - - - - - - - - - - - - - - - - - - - filament dendritic - - - - - - - - - - - - - - - - - - - - - - - - filament branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina size - - - - - - - - - - - - - - - - - - - - - - - - receptacle dark purple - - - - - - - - - - - - - - - - - - - - - - - - glume opposite - - - - - - - - - - - - - - - - - - - - - - - - anther smooth - - - - - - - - - - - - - - - - - - - - - - - - anther texture - - - - - - - - - - - - - - - - - - - - - - - - sapwood dark brown - - - - - - - - - - - - - - - - - - - - - - - - bark prominent - - - - - - - - - - - - - - - - - - - - - - - - bark sharp - - - - - - - - - - - - - - - - - - - - - - - - pedicel distichous - - - - - - - - - - - - - - - - - - - - - - - - stem dry - - - - - - - - - - - - - - - - - - - - - - - - stem wetness - - - - - - - - - - - - - - - - - - - - - - - - central zone striated - - - - - - - - - - - - - - - - - - - - - - - - bark basal to - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet kinked - - - - - - - - - - - - - - - - - - - - - - - - trichome antrorse - - - - - - - - - - - - - - - - - - - - - - - - trichome curvature - - - - - - - - - - - - - - - - - - - - - - - - involucre dentated - - - - - - - - - - - - - - - - - - - - - - - - stipule cauline to - - - - - - - - - - - - - - - - - - - - - - - - caruncle vertical - - - - - - - - ovary wall male - true - - - - - - - - - - - - - - - - - - - - - - - - ligule exserted - - - - - - - - - - - - - - - - - - - - - - - - bracteole diameter - - - - - - - - - - - - - - - - - - - - - - - - leaflet whorled - - - - - - - - - - - - - - - - - - - - - - - - style prominent - - - - - - - - - - - - - - - - - - - - - - - - receptacle serrated - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf bifurcated - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf branchiness - - - - - - - - - - - - - - - - - - - - - - - - petiole margin auriculate - - - - - - - - - - - - - - - - - - - - - - - - root tip decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - root tip water composition - - - - - - - - - - - - - - - - - - - - - - - - keel lilac - - - - - - - - - - - - - - - - - - - - - - - - pericarp pedicellate - - - - - - - - - - - - - - - - - - - - - - - - pericarp attachment quality - - - - - - - - - - - - - - - - - - - - - - - - lower glume blunt - - - - - - - - - - - - - - - - - - - - - - - - calyx overlapping - - - - - - - - - - - - - - - - - - - - - - - - heartwood branched - - - - - - - - - - - - - - - - - - - - - - - - heartwood branchiness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx white - - - - - - - - - - - - - - - - - - - - - - - - epicalyx color - - - - - - - - - - - - - - - - - - - - - - - - whole plant inflexible - - - - - - - - - - - - - - - - - - - - - - - - whole plant flexibility - - - - - - - - - - - - - - - - - - - - - - - - hypanthium glandular - - - - - - - - - - - - - - - - - - - - - - - - hypanthium morphology - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus dentated - - - - - - - - - - - - - - - - - - - - - - - - aril pink - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril coiled - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril coiling - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal swollen - - - - - - - - - - - - - - - - - - - - - - - - peduncle red brown - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem autogenous - - - - - - - - - - - - - - - - - - - - - - - - branch right - - - - - - - - - - - - - - - - - - - - - - - - bud tubular - - - - - - - - - - - - - - - - - - - - - - - - perianth crowded - - - - - - - - - - - - - - - - - - - - - - - - pericarp sharpness - - - - - - - - - - - - - - - - - - - - - - - - stem overlapping - - - - - - - - - - - - - - - - - - - - - - - - involucre undivided - - - - - - - - - - - - - - - - - - - - - - - - involucre obtuse - - - - - - - - - - - - - - - - - - - - - - - - stipule scarred - - - - - - - - - - - - - - - - - - - - - - - - apical hook sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence truncated - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle wrinkled - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle texture - - - - - - - - branch female - true - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein inflexible - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein flexibility - - - - - - - - - - - - - - - - - - - - - - - - axil pedunculate - - - - - - - - - - - - - - - - - - - - - - - - lower glume pubescent - - - - - - - - - - - - - - - - - - - - - - - - lower glume maturity - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root spotted - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root color pattern - - - - - - - - - - - - - - - - - - - - - - - - pistillode subulate - - - - - - - - - - - - - - - - - - - - - - - - stele fleshy - - - - - - - - - - - - - - - - - - - - - - - - stele composition - - - - - - - - - - - - - - - - - - - - - - - - petiole cauline to - - - - - - - - - - - - - - - - - - - - - - - - bud lateral to - - - - - - - - - - - - - - - - - - - - - - - - central zone pedicellate - - - - - - - - - - - - - - - - - - - - - - - - central zone attachment quality - - - - - - - - - - - - - - - - - - - - - - - - inflorescence distichous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue basal to - - - - - - - - - - - - - - - - - - - - - - - - involucre adaxial to - - - - - - - - - - - - - - - - - - - - - - - - rhizome angular - - - - - - - - - - - - - - - - - - - - - - - - fruit cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - lemma smooth - - - - - - - - - - - - - - - - - - - - - - - - lemma texture - - - - - - - - - - - - - - - - - - - - - - - - tepal alternate placement - - - - - - - - - - - - - - - - - - - - - - - - bud drooping - - - - - - - - - - - - - - - - - - - - - - - - growth ring striated - - - - - - - - - - - - - - - - - - - - - - - - stigma falciform - - - - - - - - - - - - - - - - - - - - - - - - root dispersed - - - - - - - - - - - - - - - - - - - - - - - - lemma indurated - - - - - - - - - - - - - - - - - - - - - - - - staminode cuspidate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium condensed - - - - - - - - - - - - - - - - - - - - - - - - petal transparent - - - - - - - - - - - - - - - - - - - - - - - - petal opacity - - - - - - - - - - - - - - - - - - - - - - - - leaflet concave - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem prominent - - - - - - - - - - - - - - - - - - - - - - - - branch symmetrical - - - - - - - - - - - - - - - - - - - - - - - - branch symmetry - - - - - - - - - - - - - - - - - - - - - - - - shoot apex overlapping - - - - - - - - - - - - - - - - - - - - - - - - gynoecium angular - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell pedicellate - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bud sterile - - - - - - - - - - - - - - - - - - - - - - - - shoot internode circular - - - - - - - - - - - - - - - - - - - - - - - - shoot internode 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - central zone areolate - - - - - - - - - - - - - - - - - - - - - - - - central zone surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - branch dense - - - - - - - - - - - - - - - - - - - - - - - - branch mass density - - - - - - - - - - - - - - - - - - - - - - - - style whorled - - - - - - - - - - - - - - - - - - - - - - - - lamina soft - - - - - - - - - - - - - - - - - - - - - - - - canal basal to - - - - - - - - - - - - - - - - - - - - - - - - canal sharpness - - - - - - - - - - - - - - - - - - - - - - - - gynoecium articulated with - - - - - - - - - - - - - - - - - - - - - - - - involucre fleshy - - - - - - - - - - - - - - - - - - - - - - - - involucre composition - - - - - - - - - - - - - - - - - - - - - - - - carpel swollen - - - - - - - - - - - - - - - - - - - - - - - - trichome raised - - - - - - - - - - - - - - - - - - - - - - - - tuber obconical - - - - - - - - - - - - - - - - - - - - - - - - keel subtriangular - - - - - - - - upper glume arrested - true - - - - - - - - upper glume offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - leaf undivided - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system sterile - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system fertility - - - - - - - - - - - - - - - - - - - - - - - - branch multi-colored - - - - - - - - - - - - - - - - - - - - - - - - branch color pattern - - - - - - - - - - - - - - - - - - - - - - - - periderm tomentose - - - - - - - - - - - - - - - - - - - - - - - - seed wrinkled - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system broken - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system wholeness - - - - - - - - - - - - - - - - - - - - - - - - palea cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - palea composition - - - - - - - - - - - - - - - - - - - - - - - - whole plant obovate - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle flattened - - - - - - - - - - - - - - - - - - - - - - - - trichome cuneate - - - - - - - - stem subacute - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence level with - - - - - - - - - - - - - - - - - - - - - - - - areole bud convex - - - - - - - - - - - - - - - - - - - - - - - - areole bud concavity - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf heart shaped - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - tuber unbranched - - - - - - - - - - - - - - - - - - - - - - - - tuber branchiness - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure curved - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf area - - - - - - - - - - - - - - - - - - - - - - - - upper glume back - - - - - - - - - - - - - - - - - - - - - - - - shoot internode linear - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet concave - - - - - - - - - - - - - - - - - - - - - - - - petiole margin oblong - - - - - - - - - - - - - - - - - - - - - - - - infructescence erect - - - - - - - - - - - - - - - - - - - - - - - - bract tomentose - - - - - - - - - - - - - - - - - - - - - - - - spikelet brown - - - - - - - - - - - - - - - - - - - - - - - - spikelet color - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin brown - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin color - - - - - - - - - - - - - - - - - - - - - - - - pistillode columnar - - - - - - - - - - - - - - - - - - - - - - - - bracteole basal to - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure increased length - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure length - - - - - - - - petal acute - true - - - - - - - - petal duration - true - - - - - - - - - - - - - - - - - - - - - - - - heartwood hard - - - - - - - - - - - - - - - - - - - - - - - - heartwood hardness - - - - - - - - - - - - - - - - - - - - - - - - gynophore increased length - - - - - - - - - - - - - - - - - - - - - - - - connective pale pink - - - - - - - - - - - - - - - - - - - - - - - - carpel increased thickness - - - - - - - - - - - - - - - - - - - - - - - - carpel dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petal apex dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petal apex position - - - - - - - - - - - - - - - - - - - - - - - - stele lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stele sharpness - - - - - - - - - - - - - - - - - - - - - - - - lower glume herbaceous - - - - - - - - - - - - - - - - - - - - - - - - lower glume shedability - - - - - - - - - - - - - - - - - - - - - - - - leaflet green - - - - - - - - - - - - - - - - - - - - - - - - epidermis subulate - - - - - - - - - - - - - - - - - - - - - - - - apical hook flattened - - - - - - - - - - - - - - - - - - - - - - - - apical hook curvature - - - - - - - - - - - - - - - - - - - - - - - - apical hook lanceolate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus revolute - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus inserted into - - - - - - - - - - - - - - - - - - - - - - - - tepal glistening - - - - - - - - - - - - - - - - - - - - - - - - tepal reflectivity - - - - - - - - - - - - - - - - - - - - - - - - carpel fleshy - - - - - - - - - - - - - - - - - - - - - - - - carpel composition - - - - - - - - - - - - - - - - - - - - - - - - - - - - bract apex phenotype - - - - - - - - - - - - - - - - - - - - - - - - bract apex maturity - - - - - - - - - - - - - - - - - - - - - - - - disk flower decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - whole plant opposite - - - - - - - - - - - - - - - - - - - - - - - - stalk straight - - - - - - - - leaf axil female - true - - - - - - - - leaf axil phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel striated - - - - - - - - - - - - - - - - - - - - - - - - stalk oblate - - - - - - - - - - - - - - - - - - - - - - - - axil translucent - - - - - - - - - - - - - - - - - - - - - - - - axil opacity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence undulate - - - - - - - - - - - - - - - - - - - - - - - - androecium obconical - - - - - - - - - - - - - - - - - - - - - - - - plant callus tubular - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem open - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem closure - - - - - - - - - - - - - - - - - - - - - - - - petal subulate - - - - - - - - - - - - - - - - - - - - - - - - stipule drooping - - - - - - - - - - - - - - - - - - - - - - - - stalk simple - - - - - - - - - - - - - - - - - - - - - - - - stalk complexity - - - - - - - - - - - - - - - - - - - - - - - - canal wrinkled - - - - - - - - - - - - - - - - - - - - - - - - scutellar node drooping - - - - - - - - - - - - - - - - - - - - - - - - disk flower obovate - - - - - - - - - - - - - - - - - - - - - - - - root tip smooth - - - - - - - - - - - - - - - - - - - - - - - - trichome convex - - - - - - - - - - - - - - - - - - - - - - - - infructescence yellow brown - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin length - - - - - - - - - - - - - - - - - - - - - - - - cotyledon pointed - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina involute - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle abaxial to - - - - - - - - flower acute - true - - - - - - - - flower duration - true - - - - - - - - - - - - - - - - - - - - - - - - calyx slit-like - - - - - - - - - - - - - - - - - - - - - - - - whole plant oblong - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence dentated - - - - - - - - - - - - - - - - - - - - - - - - parenchyma pubescent - - - - - - - - - - - - - - - - - - - - - - - - parenchyma maturity - - - - - - - - - - - - - - - - - - - - - - - - plant callus truncated - - - - - - - - leaf male - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle tomentose - - - - - - - - - - - - - - - - - - - - - - - - keel angle - - - - - - - - - - - - - - - - - - - - - - - - seed flat - - - - - - - - - - - - - - - - - - - - - - - - stipule spatulate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp glistening - - - - - - - - - - - - - - - - - - - - - - - - mesocarp reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf base unbranched - - - - - - - - - - - - - - - - - - - - - - - - leaf base branchiness - - - - - - - - - - - - - - - - - - - - - - - - bud loose - - - - - - - - - - - - - - - - - - - - - - - - hypanthium present - - - - - - - - androecium subacute - - true - - - - - - - - androecium duration - - true - - - - - - - - - - - - - - - - - - - - - - - - aril curved - - - - - - - - - - - - - - - - - - - - - - - - aril curvature - - - - - - - - - - - - - - - - - - - - - - - - style sinuous - - - - - - - - - - - - - - - - - - - - - - - - flower orbicular - - - - - - - - - - - - - - - - - - - - - - - - bract unilateral - - - - - - - - - - - - - - - - - - - - - - - - filament oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - placenta fleshy - - - - - - - - - - - - - - - - - - - - - - - - placenta composition - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle kinked - - - - - - - - - - - - - - - - - - - - - - - - ovary wall grooved - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence falciform - - - - - - - - - - - - - - - - - - - - - - - - scutellar node convex - - - - - - - - - - - - - - - - - - - - - - - - scutellar node concavity - - - - - - - - - - - - - - - - - - - - - - - - peduncle size - - - - - - - - radicle acute - true - - - - - - - - radicle duration - true - - - - - - - - - - - - - - - - - - - - - - - - stem divergent from - - - - - - - - - - - - - - - - - - - - - - - - stigma straight - - - - - - - - - - - - - - - - - - - - - - - - bud branched - - - - - - - - - - - - - - - - - - - - - - - - bud branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaf margin present - - - - - - - - - - - - - - - - - - - - - - - - leaf margin amount - - - - - - - - - - - - - - - - - - - - - - - - heartwood rough - - - - - - - - - - - - - - - - - - - - - - - - periderm basal to - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence furrowed - - - - - - - - - - - - - - - - - - - - - - - - pericarp red - - - - - - - - - - - - - - - - - - - - - - - - pedicel coiled - - - - - - - - - - - - - - - - - - - - - - - - pedicel coiling - - - - - - - - - - - - - - - - - - - - - - - - axil inserted into - - - - - - - - - - - - - - - - - - - - - - - - receptacle absent - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system emarginate - - - - - - - - - - - - - - - - - - - - - - - - branch pinnate - - - - - - - - - - - - - - - - - - - - - - - - apical hook bifurcated - - - - - - - - - - - - - - - - - - - - - - - - lower glume notched - - - - - - - - - - - - - - - - - - - - - - - - - - - - microspore phenotype - - - - - - - - - - - - - - - - - - - - - - - - microspore smooth - - - - - - - - - - - - - - - - - - - - - - - - microspore texture - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue lobed - - - - - - - - - - - - - - - - - - - - - - - - keel sharp - - - - - - - - - - - - - - - - - - - - - - - - upper glume hairy - - - - - - - - flower premature - true - - - - - - - - flower onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - epidermis ridged - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus orbicular - - - - - - - - - - - - - - - - - - - - - - - - mesocarp viscous - - - - - - - - - - - - - - - - - - - - - - - - mesocarp viscosity - - - - - - - - - - - - - - - - - - - - - - - - plant spore kinked - - - - - - - - sepal up - true - - - - - - - - - - - - - - - - - - - - - - - - flower antrorse - - - - - - - - - - - - - - - - - - - - - - - - stalk level with - - - - - - - - - - - - - - - - - - - - - - - - stipule dry - - - - - - - - - - - - - - - - - - - - - - - - stipule wetness - - - - - - - - - - - - - - - - - - - - - - - - banner petal autogenous - - - - - - - - - - - - - - - - - - - - - - - - banner petal structure - - - - - - - - - - - - - - - - - - - - - - - - leaf curled - - - - - - - - - - - - - - - - - - - - - - - - anther blue - - - - - - - - prophyll female - true - - - - - - - - prophyll phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - bud oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - trichome cylindrical - - - - - - - - - - - - - - - - - - - - - - - - tubercle angular - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - infructescence spherical - - - - - - - - - - - - - - - - - - - - - - - - megaspore open - - - - - - - - - - - - - - - - - - - - - - - - megaspore closure - - - - - - - - - - - - - - - - - - - - - - - - valve triangular - - - - - - - - - - - - - - - - - - - - - - - - crown root fused with - - - - - - - - - - - - - - - - - - - - - - - - carpel circular - - - - - - - - - - - - - - - - - - - - - - - - raphe attenuate - - - - - - - - - - - - - - - - - - - - - - - - raphe sharpness - - - - - - - - - - - - - - - - - - - - - - - - pericarp dark brown - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system drooping - - - - - - - - - - - - - - - - - - - - - - - - stigma dark violet - - - - - - - - - - - - - - - - - - - - - - - - lemma convex - - - - - - - - - - - - - - - - - - - - - - - - awn branched - - - - - - - - - - - - - - - - - - - - - - - - awn branchiness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall wrinkled - - - - - - - - - - - - - - - - - - - - - - - - rhizome fertile - - - - - - - - - - - - - - - - - - - - - - - - rhizome fertility - - - - - - - - - - - - - - - - - - - - - - - - stem attached to - - - - - - - - - - - - - - - - - - - - - - - - androecium subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - tuber pink - - - - - - - - - - - - - - - - - - - - - - - - stem dark brown - - - - - - - - - - - - - - - - - - - - - - - - petal leaf-like - - - - - - - - - - - - - - - - - - - - - - - - perianth caudate - - - - - - - - stele premature - true - - - - - - - - stele onset quality - true - - - - - - - - testa iridescent - true - - - - - - - - testa variability of color - true - - - - - - - - - - - - - - - - - - - - - - - - lemma broad - - - - - - - - - - - - - - - - - - - - - - - - lamina involute - - - - - - - - - - - - - - - - - - - - - - - - palea white - - - - - - - - - - - - - - - - - - - - - - - - palea color - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium ovate - - - - - - - - - - - - - - - - - - - - - - - - flower leaf-like - - - - - - - - - - - - - - - - - - - - - - - - banner petal glistening - - - - - - - - - - - - - - - - - - - - - - - - banner petal reflectivity - - - - - - - - - - - - - - - - - - - - - - - - filament undulate - - - - - - - - - - - - - - - - - - - - - - - - calyx cut - - - - - - - - - - - - - - - - - - - - - - - - branch viscid - - - - - - - - - - - - - - - - - - - - - - - - leaf concealed - - - - - - - - - - - - - - - - - - - - - - - - glume autogenous - - - - - - - - - - - - - - - - - - - - - - - - pistillode conical - - - - - - - - - - - - - - - - - - - - - - - - stigma pointed - - - - - - - - - - - - - - - - - - - - - - - - bark dark orange - - - - - - - - - - - - - - - - - - - - - - - - apical hook revolute - - - - - - - - - - - - - - - - - - - - - - - - root tip branched - - - - - - - - - - - - - - - - - - - - - - - - root tip branchiness - - - - - - - - - - - - - - - - - - - - - - - - trichome star shaped - - - - - - - - - - - - - - - - - - - - - - - - lenticel punctiform - - - - - - - - - - - - - - - - - - - - - - - - lower glume present - - - - - - - - - - - - - - - - - - - - - - - - lower glume amount - - - - - - - - - - - - - - - - - - - - - - - - ligule bifurcated - - - - - - - - - - - - - - - - - - - - - - - - ligule branchiness - - - - - - - - - - - - - - - - - - - - - - - - involucre increased length - - - - - - - - - - - - - - - - - - - - - - - - involucre length - - - - - - - - - - - - - - - - - - - - - - - - bulb basal to - - - - - - - - - - - - - - - - - - - - - - - - bulb position - - - - - - - - - - - - - - - - - - - - - - - - receptacle ventral to - - - - - - - - - - - - - - - - - - - - - - - - branch spotted - - - - - - - - - - - - - - - - - - - - - - - - seed ornamentation - - - - - - - - - - - - - - - - - - - - - - - - corm yellow brown - - - - - - - - - - - - - - - - - - - - - - - - root tip symmetrical - - - - - - - - - - - - - - - - - - - - - - - - root tip symmetry - - - - - - - - - - - - - - - - - - - - - - - - keel whole - - - - - - - - - - - - - - - - - - - - - - - - keel wholeness - - - - - - - - - - - - - - - - - - - - - - - - style dentated - - - - - - - - involucre continuous - true - - - - - - - - involucre occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - stalk hairy - - - - - - - - - - - - - - - - - - - - - - - - thorn star shaped - - - - - - - - - - - - - - - - - - - - - - - - stem hollow - - - - - - - - - - - - - - - - - - - - - - - - stem structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - gynoecium cylindrical - - - - - - - - - - - - - - - - - - - - - - - - pericarp elliptic - - - - - - - - - - - - - - - - - - - - - - - - spikelet decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - epidermis concave - - - - - - - - - - - - - - - - - - - - - - - - epidermis concavity - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus retuse - - - - - - - - - - - - - - - - - - - - - - - - aril vestigial - - - - - - - - - - - - - - - - - - - - - - - - carpel funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - stem funnel-shaped - - - - - - - - ovary wall arrested - true - - - - - - - - ovary wall offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - stamen opposite - - - - - - - - - - - - - - - - - - - - - - - - bark oblong - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein scalloped - - - - - - - - - - - - - - - - - - - - - - - - involucre elliptic - - - - - - - - - - - - - - - - - - - - - - - - scutellar node tomentose - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf thickness - - - - - - - - - - - - - - - - - - - - - - - - stem retrorse - - - - - - - - - - - - - - - - - - - - - - - - calyx open - - - - - - - - - - - - - - - - - - - - - - - - anther level with - - - - - - - - - - - - - - - - - - - - - - - - bark nodular - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell dorsal to - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell position - - - - - - - - - - - - - - - - - - - - - - - - glume ornamentation - - - - - - - - - - - - - - - - - - - - - - - - glume surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - locule horizontal - - - - - - - - - - - - - - - - - - - - - - - - carpel basal to - - - - - - - - - - - - - - - - - - - - - - - - nectary yellow - - - - - - - - - - - - - - - - - - - - - - - - nectary color - - - - - - - - - - - - - - - - - - - - - - - - lenticel purple - - - - - - - - - - - - - - - - - - - - - - - - root tip scalloped - - - - - - - - - - - - - - - - - - - - - - - - involucre red - - - - - - - - - - - - - - - - - - - - - - - - valve ovate - - - - - - - - petiole rate - true - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl pubescent - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl maturity - - - - - - - - - - - - - - - - - - - - - - - - apical hook increased length - - - - - - - - - - - - - - - - - - - - - - - - apical hook length - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore divergent from - - - - - - - - - - - - - - - - - - - - - - - - infructescence dense - - - - - - - - - - - - - - - - - - - - - - - - infructescence mass density - - - - - - - - - - - - - - - - - - - - - - - - bark conical - - - - - - - - - - - - - - - - - - - - - - - - seed trichome open - - - - - - - - - - - - - - - - - - - - - - - - seed trichome closure - - - - - - - - - - - - - - - - - - - - - - - - calyx abaxial to - - - - - - - - - - - - - - - - - - - - - - - - peduncle whorled - - - - - - - - - - - - - - - - - - - - - - - - gynoecium present - - - - - - - - - - - - - - - - - - - - - - - - gynoecium amount - - - - - - - - infructescence subacute - true - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina present - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina amount - - - - - - - - - - - - - - - - - - - - - - - - cotyledon straight - - - - - - - - - - - - - - - - - - - - - - - - stamen scalloped - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus oblong - - - - - - - - - - - - - - - - - - - - - - - - peduncle grey - - - - - - - - - - - - - - - - - - - - - - - - whole plant brittle - - - - - - - - - - - - - - - - - - - - - - - - raphe triangular - - - - - - - - - - - - - - - - - - - - - - - - raphe 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal divergent from - - - - - - - - - - - - - - - - - - - - - - - - placenta attached to - - - - - - - - - - - - - - - - - - - - - - - - placenta attachment quality - - - - - - - - - - - - - - - - - - - - - - - - trichome leaf-like - - - - - - - - - - - - - - - - - - - - - - - - sorus oblong - - - - - - - - - - - - - - - - - - - - - - - - sorus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf base present - - - - - - - - - - - - - - - - - - - - - - - - leaf base amount - - - - - - - - - - - - - - - - - - - - - - - - mesocarp tomentose - - - - - - - - style continuous - true - - - - - - - - style occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - leaf waxy - - - - - - - - - - - - - - - - - - - - - - - - leaf waxiness - - - - - - - - - - - - - - - - - - - - - - - - testa red brown - - - - - - - - - - - - - - - - - - - - - - - - disk flower elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf base pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf base maturity - - - - - - - - - - - - - - - - - - - - - - - - shoot internode simple - - - - - - - - - - - - - - - - - - - - - - - - shoot internode complexity - - - - - - - - - - - - - - - - - - - - - - - - pollen simple - - - - - - - - - - - - - - - - - - - - - - - - pollen complexity - - - - - - - - - - - - - - - - - - - - - - - - stigma pink - - - - - - - - - - - - - - - - - - - - - - - - mesocarp bitter - - - - - - - - - - - - - - - - - - - - - - - - mesocarp flavor - - - - - - - - - - - - - - - - - - - - - - - - gynoecium increased thickness - - - - - - - - - - - - - - - - - - - - - - - - gynoecium thickness - - - - - - - - - - - - - - - - - - - - - - - - papilla cell flattened - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member truncated - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem transparent - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem opacity - - - - - - - - - - - - - - - - - - - - - - - - seed leaf-like - - - - - - - - - - - - - - - - - - - - - - - - aril glabrous - - - - - - - - prophyll male - true - - - - - - - - - - - - - - - - - - - - - - - - style acuminate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet falciform - - - - - - - - - - - - - - - - - - - - - - - - bud wrinkled - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem decussate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure concave - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure concavity - - - - - - - - - - - - - - - - - - - - - - - - exotesta fleshy - - - - - - - - - - - - - - - - - - - - - - - - exotesta composition - - - - - - - - - - - - - - - - - - - - - - - - epicalyx undulate - - - - - - - - - - - - - - - - - - - - - - - - keel laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - terminal bud mixed - - - - - - - - - - - - - - - - - - - - - - - - terminal bud composition - - - - - - - - - - - - - - - - - - - - - - - - peristome obtuse - - - - - - - - - - - - - - - - - - - - - - - - locule green - - - - - - - - - - - - - - - - - - - - - - - - - - - - free tepal phenotype - - - - - - - - - - - - - - - - - - - - - - - - free tepal fused with - - - - - - - - - - - - - - - - - - - - - - - - free tepal structure - - - - - - - - - - - - - - - - - - - - - - - - stem bilobed - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf increased length - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf length - - - - - - - - - - - - - - - - - - - - - - - - stipule convex - - - - - - - - - - - - - - - - - - - - - - - - lemma sharp - - - - - - - - - - - - - - - - - - - - - - - - filament elongated - - - - - - - - - - - - - - - - - - - - - - - - stipel truncated - - - - - - - - - - - - - - - - - - - - - - - - stem warty - - - - - - - - - - - - - - - - - - - - - - - - lamina vestigial - - - - - - - - - - - - - - - - - - - - - - - - whole plant inserted into - - - - - - - - - - - - - - - - - - - - - - - - seed hollow - - - - - - - - - - - - - - - - - - - - - - - - seed structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - stem brittle - - - - - - - - - - - - - - - - - - - - - - - - central zone curved - - - - - - - - - - - - - - - - - - - - - - - - central zone curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf base protruding - - - - - - - - - - - - - - - - - - - - - - - - hypanthium truncated - - - - - - - - - - - - - - - - - - - - - - - - connective protruding into - - - - - - - - - - - - - - - - - - - - - - - - bract aggregated - - - - - - - - - - - - - - - - - - - - - - - - hilum white - - - - - - - - - - - - - - - - - - - - - - - - bract increased size - - - - - - - - - - - - - - - - - - - - - - - - bract size - - - - - - - - - - - - - - - - - - - - - - - - seed opposite - - - - - - - - - - - - - - - - - - - - - - - - anther slender - - - - - - - - - - - - - - - - - - - - - - - - inflorescence perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem wrinkled - - - - - - - - - - - - - - - - - - - - - - - - - - - - pulvinus phenotype - - - - - - - - - - - - - - - - - - - - - - - - pulvinus prominent - - - - - - - - - - - - - - - - - - - - - - - - pulvinus position - - - - - - - - - - - - - - - - - - - - - - - - whole plant prominent - - - - - - - - - - - - - - - - - - - - - - - - radicle displaced - - - - - - - - - - - - - - - - - - - - - - - - funicle parallel to - - - - - - - - - - - - - - - - - - - - - - - - sepal falciform - - - - - - - - - - - - - - - - - - - - - - - - bud dilated - - - - - - - - - - - - - - - - - - - - - - - - bud size - - - - - - - - - - - - - - - - - - - - - - - - stalk smooth - - - - - - - - short shoot male - true - - - - - - - - - - - - - - - - - - - - - - - - pulvinus distal to - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina subcircular - - - - - - - - - - - - - - - - - - - - - - - - plant embryo slit-like - - - - - - - - - - - - - - - - - - - - - - - - endosperm rugose - - - - - - - - - - - - - - - - - - - - - - - - endosperm surface feature shape - - - - - - - - valve up - true - - - - - - - - - - - - - - - - - - - - - - - - epicalyx subulate - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath brown - - - - - - - - - - - - - - - - - - - - - - - - lower glume elliptic - - - - - - - - - - - - - - - - - - - - - - - - corolla retuse - - - - - - - - - - - - - - - - - - - - - - - - whole plant truncated - - - - - - - - - - - - - - - - - - - - - - - - lamina translucent - - - - - - - - - - - - - - - - - - - - - - - - corolla dark orange - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member reniform - - - - - - - - - - - - - - - - - - - - - - - - areole bud glabrous - - - - - - - - - - - - - - - - - - - - - - - - areole bud pilosity - - - - - - - - - - - - - - - - - - - - - - - - bark rugose - - - - - - - - - - - - - - - - - - - - - - - - bark surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - bud exserted - - - - - - - - style down - true - - - - - - - - - - - - - - - - - - - - - - - - stalk condensed - - - - - - - - - - - - - - - - - - - - - - - - stalk structure - - - - - - - - - - - - - - - - - - - - - - - - pedicel red brown - - - - - - - - - - - - - - - - - - - - - - - - stem prostrate - - - - - - - - - - - - - - - - - - - - - - - - sepal folded - - - - - - - - - - - - - - - - - - - - - - - - sepal surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - bark mixed - - - - - - - - - - - - - - - - - - - - - - - - flower size - - - - - - - - - - - - - - - - - - - - - - - - septum concave - - - - - - - - - - - - - - - - - - - - - - - - corm simple - - - - - - - - - - - - - - - - - - - - - - - - corm complexity - - - - - - - - - - - - - - - - - - - - - - - - hilum ovate - - - - - - - - - - - - - - - - - - - - - - - - hilum convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - sheath cell decumbent - - - - - - - - - - - - - - - - - - - - - - - - ligule whole - - - - - - - - - - - - - - - - - - - - - - - - ligule wholeness - - - - - - - - - - - - - - - - - - - - - - - - papilla cell exserted - - - - - - - - - - - - - - - - - - - - - - - - calyx spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - apical hook hairy - - - - - - - - - - - - - - - - - - - - - - - - locule flattened - - - - - - - - - - - - - - - - - - - - - - - - locule curvature - - - - - - - - - - - - - - - - - - - - - - - - glume recurved - - - - - - - - - - - - - - - - - - - - - - - - filament front - - - - - - - - - - - - - - - - - - - - - - - - root tip clavate - - - - - - - - - - - - - - - - - - - - - - - - bark light yellow - - - - - - - - stalk down - true - - - - - - - - - - - - - - - - - - - - - - - - stipule axial to - - - - - - - - - - - - - - - - - - - - - - - - tubercle dense - - - - - - - - - - - - - - - - - - - - - - - - tubercle mass density - - - - - - - - - - - - - - - - - - - - - - - - stalk warty - - - - - - - - - - - - - - - - - - - - - - - - bract fertile - - - - - - - - - - - - - - - - - - - - - - - - glume grooved - - - - - - - - - - - - - - - - - - - - - - - - keel elliptic - - - - - - - - - - - - - - - - - - - - - - - - scutellar node obovate - - - - - - - - - - - - - - - - - - - - - - - - corolla slit-like - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem linear - - - - - - - - - - - - - - - - - - - - - - - - axil fused with - - - - - - - - - - - - - - - - - - - - - - - - perianth decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - perianth water composition - - - - - - - - - - - - - - - - - - - - - - - - fruit concealed - - - - - - - - - - - - - - - - - - - - - - - - stem sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - short shoot normal - - - - - - - - - - - - - - - - - - - - - - - - short shoot deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - stem straight - - - - - - - - - - - - - - - - - - - - - - - - lower glume green - - - - - - - - - - - - - - - - - - - - - - - - epidermis wrinkled - - - - - - - - - - - - - - - - - - - - - - - - epidermis texture - - - - - - - - - - - - - - - - - - - - - - - - stele elliptic - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet discoid - - - - - - - - - - - - - - - - - - - - - - - - infructescence green - - - - - - - - - - - - - - - - - - - - - - - - peduncle autogenous - - - - - - - - - - - - - - - - - - - - - - - - valve spongy - - - - - - - - - - - - - - - - - - - - - - - - plumule heart shaped - - - - - - - - - - - - - - - - - - - - - - - - plumule concave 3-D shape - - - - - - - - flower fascicle male - true - - - - - - - - - - - - - - - - - - - - - - - - central zone glandular - - - - - - - - - - - - - - - - - - - - - - - - central zone morphology - - - - - - - - - - - - - - - - - - - - - - - - rhizome mass - - - - - - - - - - - - - - - - - - - - - - - - leaflet conspicuous - - - - - - - - - - - - - - - - - - - - - - - - peristome cylindrical - - - - - - - - - - - - - - - - - - - - - - - - staminode dorsal to - - - - - - - - - - - - - - - - - - - - - - - - lamina red brown - - - - - - - - - - - - - - - - - - - - - - - - pedicel spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem fleshy - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem composition - - - - - - - - - - - - - - - - - - - - - - - - petiole quadrangular - - - - - - - - - - - - - - - - - - - - - - - - pedicel reniform - - - - - - - - - - - - - - - - - - - - - - - - keel fertile - - - - - - - - - - - - - - - - - - - - - - - - keel fertility - - - - - - - - - - - - - - - - - - - - - - - - raphe length - - - - - - - - - - - - - - - - - - - - - - - - inflorescence ventral to - - - - - - - - - - - - - - - - - - - - - - - - keel cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - crown root circinate - - - - - - - - - - - - - - - - - - - - - - - - anther filamentous - - - - - - - - - - - - - - - - - - - - - - - - stigma ventral to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex adaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein leaf-like - - - - - - - - - - - - - - - - - - - - - - - - thorn dorsal to - - - - - - - - - - - - - - - - - - - - - - - - upper glume recurved - - - - - - - - - - - - - - - - - - - - - - - - upper glume curvature - - - - - - - - - - - - - - - - - - - - - - - - tubercle acuminate - - - - - - - - - - - - - - - - - - - - - - - - endocarp wrinkled - - - - - - - - - - - - - - - - - - - - - - - - receptacle truncated - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus rough - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus texture - - - - - - - - - - - - - - - - - - - - - - - - palea front - - - - - - - - - - - - - - - - - - - - - - - - receptacle arched - - - - - - - - - - - - - - - - - - - - - - - - leaflet drooping - - - - - - - - - - - - - - - - - - - - - - - - style involute - - - - - - - - - - - - - - - - - - - - - - - - leaflet white - - - - - - - - - - - - - - - - - - - - - - - - pollen flattened - - - - - - - - - - - - - - - - - - - - - - - - pollen curvature - - - - - - - - - - - - - - - - - - - - - - - - aril rugose - - - - - - - - - - - - - - - - - - - - - - - - aril surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - locule flat - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure branched - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure branchiness - - - - - - - - - - - - - - - - - - - - - - - - anther immature - - - - - - - - - - - - - - - - - - - - - - - - receptacle obtuse - - - - - - - - - - - - - - - - - - - - - - - - thallus separating - - - - - - - - - - - - - - - - - - - - - - - - thallus structure - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle spherical - - - - - - - - - - - - - - - - - - - - - - - - testa basal to - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium inserted into - - - - - - - - - - - - - - - - - - - - - - - - plant cell triangular - - - - - - - - - - - - - - - - - - - - - - - - petal angular - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - heartwood light brown - - - - - - - - - - - - - - - - - - - - - - - - antiraphe red - - - - - - - - - - - - - - - - - - - - - - - - antiraphe color - - - - - - - - - - - - - - - - - - - - - - - - plumule hispid - - - - - - - - - - - - - - - - - - - - - - - - plumule pilosity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle decreased amount - - - - - - - - - - - - - - - - - - - - - - - - aril blue - - - - - - - - - - - - - - - - - - - - - - - - axil elliptic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence auriculate - - - - - - - - - - - - - - - - - - - - - - - - hilum swollen - - - - - - - - - - - - - - - - - - - - - - - - cotyledon opposite - - - - - - - - - - - - - - - - - - - - - - - - anther cupulate - - - - - - - - - - - - - - - - - - - - - - - - stigma filamentous - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal purple - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal color - - - - - - - - - - - - - - - - - - - - - - - - gynoecium pedicellate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stipule caudate - - - - - - - - - - - - - - - - - - - - - - - - stem acute angle to - - - - - - - - - - - - - - - - - - - - - - - - crown root spherical - - - - - - - - - - - - - - - - - - - - - - - - bud subulate - - - - - - - - - - - - - - - - - - - - - - - - testa curved - - - - - - - - - - - - - - - - - - - - - - - - fruit parallel to - - - - - - - - - - - - - - - - - - - - - - - - locule smooth - - - - - - - - staminode female - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome recurved - - - - - - - - - - - - - - - - - - - - - - - - epicalyx absent - - - - - - - - - - - - - - - - - - - - - - - - epicalyx amount - - - - - - - - - - - - - - - - - - - - - - - - petiole leaf-like - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell punctate - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - infructescence purple - - - - - - - - - - - - - - - - - - - - - - - - corolla protruding - - - - - - - - - - - - - - - - - - - - - - - - whole plant orbicular - - - - - - - - - - - - - - - - - - - - - - - - sepal straight - - - - - - - - - - - - - - - - - - - - - - - - ovary wall prominent - - - - - - - - - - - - - - - - - - - - - - - - scutellar node distichous - - - - - - - - - - - - - - - - - - - - - - - - stamen tubular - - - - - - - - - - - - - - - - - - - - - - - - cortex old - - - - - - - - - - - - - - - - - - - - - - - - rhizome broad - - - - - - - - - - - - - - - - - - - - - - - - ovary wall notched - - - - - - - - - - - - - - - - - - - - - - - - canal condensed - - - - - - - - - - - - - - - - - - - - - - - - prickle recurved - - - - - - - - - - - - - - - - - - - - - - - - hydathode glabrous - - - - - - - - - - - - - - - - - - - - - - - - hydathode pilosity - - - - - - - - - - - - - - - - - - - - - - - - disk flower raised - - - - - - - - - - - - - - - - - - - - - - - - peduncle raised - - - - - - - - - - - - - - - - - - - - - - - - infructescence glistening - - - - - - - - - - - - - - - - - - - - - - - - infructescence reflectivity - - - - - - - - - - - - - - - - - - - - - - - - prickle simple - - - - - - - - - - - - - - - - - - - - - - - - prickle complexity - - - - - - - - - - - - - - - - - - - - - - - - anther theca triangular - - - - - - - - - - - - - - - - - - - - - - - - leaf aggregated - - - - - - - - - - - - - - - - - - - - - - - - leaf hollow - - - - - - - - - - - - - - - - - - - - - - - - leaf structure, cavities - - - - - - - - ovary wall female - true - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal water composition - - - - - - - - - - - - - - - - - - - - - - - - keel raised - - - - - - - - - - - - - - - - - - - - - - - - plant embryo heart shaped - - - - - - - - - - - - - - - - - - - - - - - - plant embryo concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf pointed - - - - - - - - - - - - - - - - - - - - - - - - sheath cell attenuate - - - - - - - - - - - - - - - - - - - - - - - - tepal actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - tepal radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore spherical - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein curved - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein curvature - - - - - - - - - - - - - - - - - - - - - - - - bulb loose - - - - - - - - - - - - - - - - - - - - - - - - bulb spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stamen divergent from - - - - - - - - - - - - - - - - - - - - - - - - bract apex red - - - - - - - - - - - - - - - - - - - - - - - - bract apex color - - - - - - - - - - - - - - - - - - - - - - - - hypanthium diameter - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein simple - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein complexity - - - - - - - - - - - - - - - - - - - - - - - - fruit oblate - - - - - - - - - - - - - - - - - - - - - - - - infructescence white - - - - - - - - - - - - - - - - - - - - - - - - root star shaped - - - - - - - - - - - - - - - - - - - - - - - - filament obconical - - - - - - - - - - - - - - - - - - - - - - - - peduncle pointed - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein kinked - - - - - - - - - - - - - - - - - - - - - - - - exocarp ridged - - - - - - - - - - - - - - - - - - - - - - - - receptacle spherical - - - - - - - - - - - - - - - - - - - - - - - - bract emarginate - - - - - - - - - - - - - - - - - - - - - - - - endosperm flat - - - - - - - - - - - - - - - - - - - - - - - - plant callus whorled - - - - - - - - - - - - - - - - - - - - - - - - plant callus spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - oil gland diameter - - - - - - - - - - - - - - - - - - - - - - - - peristome white - - - - - - - - - - - - - - - - - - - - - - - - involucre simple - - - - - - - - - - - - - - - - - - - - - - - - involucre complexity - - - - - - - - - - - - - - - - - - - - - - - - staminode exserted - - - - - - - - - - - - - - - - - - - - - - - - inflorescence ridged - - - - - - - - - - - - - - - - - - - - - - - - perianth hispidulous - - - - - - - - - - - - - - - - - - - - - - - - bracteole falciform - - - - - - - - - - - - - - - - - - - - - - - - bracteole striated - - - - - - - - - - - - - - - - - - - - - - - - peduncle condensed - - - - - - - - - - - - - - - - - - - - - - - - petiole distance - - - - - - - - - - - - - - - - - - - - - - - - growth ring purple - - - - - - - - - - - - - - - - - - - - - - - - growth ring color - - - - - - - - - - - - - - - - - - - - - - - - flower yellow green - - - - - - - - - - - - - - - - - - - - - - - - leaf funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - thallus green - - - - - - - - - - - - - - - - - - - - - - - - thallus color - - - - - - - - - - - - - - - - - - - - - - - - seed coat dark brown - - - - - - - - - - - - - - - - - - - - - - - - growth ring increased length - - - - - - - - - - - - - - - - - - - - - - - - growth ring length - - - - - - - - - - - - - - - - - - - - - - - - scutellar node glandular - - - - - - - - - - - - - - - - - - - - - - - - scutellar node morphology - - - - - - - - - - - - - - - - - - - - - - - - hilum abaxial to - - - - - - - - - - - - - - - - - - - - - - - - valve raised - - - - - - - - - - - - - - - - - - - - - - - - ovary wall opposite - - - - - - - - - - - - - - - - - - - - - - - - branch coiled - - - - - - - - - - - - - - - - - - - - - - - - branch coiling - - - - - - - - - - - - - - - - - - - - - - - - palea elliptic - - - - - - - - - - - - - - - - - - - - - - - - sorus present - - - - - - - - - - - - - - - - - - - - - - - - sorus amount - - - - - - - - - - - - - - - - - - - - - - - - plant cell adhesive - - - - - - - - - - - - - - - - - - - - - - - - plant cell adhesivity - - - - - - - - - - - - - - - - - - - - - - - - hydathode lateral to - - - - - - - - - - - - - - - - - - - - - - - - central zone decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - root tip opposite - - - - - - - - - - - - - - - - - - - - - - - - disk flower obtuse - - - - - - - - - - - - - - - - - - - - - - - - cotyledon involute - - - - - - - - - - - - - - - - - - - - - - - - bract drooping - - - - - - - - - - - - - - - - - - - - - - - - apical hook exserted - - - - - - - - - - - - - - - - - - - - - - - - central zone dentated - - - - - - - - - - - - - - - - - - - - - - - - stolon spatulate - - - - - - - - - - - - - - - - - - - - - - - - palea clavate - - - - - - - - - - - - - - - - - - - - - - - - palea concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem tapered - - - - - - - - - - - - - - - - - - - - - - - - corm brown - - - - - - - - - - - - - - - - - - - - - - - - sepal spotted - - - - - - - - - - - - - - - - - - - - - - - - sepal color pattern - - - - - - - - pistillode up - true - - - - - - - - - - - - - - - - - - - - - - - - periderm yellow - - - - - - - - - - - - - - - - - - - - - - - - periderm color - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl straight - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl shape - - - - - - - - - - - - - - - - - - - - - - - - bark warty - - - - - - - - - - - - - - - - - - - - - - - - flower horizontal - - - - - - - - - - - - - - - - - - - - - - - - leaf margin lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaf margin position - - - - - - - - - - - - - - - - - - - - - - - - inflorescence concave - - - - - - - - - - - - - - - - - - - - - - - - epidermis drooping - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus auriculate - - - - - - - - - - - - - - - - - - - - - - - - placenta vestigial - - - - - - - - - - - - - - - - - - - - - - - - placenta structure - - - - - - - - - - - - - - - - - - - - - - - - sepal cylindrical - - - - - - - - - - - - - - - - - - - - - - - - corolla rugose - - - - - - - - - - - - - - - - - - - - - - - - corolla surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - pedicel undulate - - - - - - - - - - - - - - - - - - - - - - - - seed conical - - - - - - - - - - - - - - - - - - - - - - - - central zone arachnose - - - - - - - - - - - - - - - - - - - - - - - - fruit square - - - - - - - - - - - - - - - - - - - - - - - - stigma furrowed - - - - - - - - - - - - - - - - - - - - - - - - corolla dark brown - - - - - - - - - - - - - - - - - - - - - - - - shoot apex axial to - - - - - - - - - - - - - - - - - - - - - - - - spikelet erect - - - - - - - - - - - - - - - - - - - - - - - - central zone leaf-like - - - - - - - - - - - - - - - - - - - - - - - - flower pedunculate - - - - - - - - - - - - - - - - - - - - - - - - bud furrowed - - - - - - - - - - - - - - - - - - - - - - - - testa mottled - - - - - - - - - - - - - - - - - - - - - - - - testa color pattern - - - - - - - - - - - - - - - - - - - - - - - - hilum dark brown - - - - - - - - - - - - - - - - - - - - - - - - stele increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stele thickness - - - - - - - - - - - - - - - - - - - - - - - - whole plant viscid - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system erect - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system position - - - - - - - - - - - - - - - - - - - - - - - - endocarp purple - - - - - - - - - - - - - - - - - - - - - - - - calyx sunken - - - - - - - - - - - - - - - - - - - - - - - - calyx elevation - - - - - - - - - - - - - - - - - - - - - - - - epicotyl furrowed - - - - - - - - - - - - - - - - - - - - - - - - epicotyl texture - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein condensed - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein structure - - - - - - - - - - - - - - - - - - - - - - - - lenticel curled - - - - - - - - - - - - - - - - - - - - - - - - calyx posterior to - - - - - - - - - - - - - - - - - - - - - - - - thorn green - - - - - - - - - - - - - - - - - - - - - - - - thorn color - - - - - - - - - - - - - - - - - - - - - - - - filament green - - - - - - - - - - - - - - - - - - - - - - - - corolla dark blue - - - - - - - - - - - - - - - - - - - - - - - - pedicel actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - pedicel radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - sheath cell elliptic - - - - - - - - - - - - - - - - - - - - - - - - locule angular - - - - - - - - - - - - - - - - - - - - - - - - stigma recurved - - - - - - - - - - - - - - - - - - - - - - - - stem oriented - - - - - - - - leaf sheath up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath direction - - - - - - - - - - - - - - - - - - - - - - - - peristome level with - - - - - - - - - - - - - - - - - - - - - - - - mesocarp white - - - - - - - - - - - - - - - - - - - - - - - - petal alternate placement - - - - - - - - - - - - - - - - - - - - - - - - apical hook alternate placement - - - - - - - - - - - - - - - - - - - - - - - - apical hook spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - ligule reniform - - - - - - - - - - - - - - - - - - - - - - - - ligule concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiolule rough - - - - - - - - - - - - - - - - - - - - - - - - pedicel heart shaped - - - - - - - - - - - - - - - - - - - - - - - - seed whole - - - - - - - - - - - - - - - - - - - - - - - - seed wholeness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium attenuate - - - - - - - - - - - - - - - - - - - - - - - - branch unbranched - - - - - - - - - - - - - - - - - - - - - - - - testa absent - - - - - - - - - - - - - - - - - - - - - - - - testa amount - - - - - - - - - - - - - - - - - - - - - - - - style folded - - - - - - - - - - - - - - - - - - - - - - - - tubercle straight - - - - - - - - - - - - - - - - - - - - - - - - whole plant ornamentation - - - - - - - - - - - - - - - - - - - - - - - - whole plant surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - filament conical - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system glistening - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system reflectivity - - - - - - - - - - - - - - - - - - - - - - - - stipule distributed - - - - - - - - - - - - - - - - - - - - - - - - branch flat - - - - - - - - - - - - - - - - - - - - - - - - stereome glabrous - - - - - - - - - - - - - - - - - - - - - - - - corolla adaxial to - - - - - - - - - - - - - - - - - - - - - - - - heartwood edible - - - - - - - - - - - - - - - - - - - - - - - - heartwood edibility - - - - - - - - - - - - - - - - - - - - - - - - bud proximal to - - - - - - - - - - - - - - - - - - - - - - - - petiole diameter - - - - - - - - - - - - - - - - - - - - - - - - central zone purple - - - - - - - - - - - - - - - - - - - - - - - - bract whorled - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf fleshy - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf composition - - - - - - - - lemma down - true - - - - - - - - - - - - - - - - - - - - - - - - peduncle broad - - - - - - - - - - - - - - - - - - - - - - - - staminode hairy - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma curvature - - - - - - - - - - - - - - - - - - - - - - - - gynophore angular - - - - - - - - spikelet subacute - true - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system pedicellate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system attachment quality - - - - - - - - anther subacute - true - - - - - - - - - - - - - - - - - - - - - - - - costa fertile - - - - - - - - - - - - - - - - - - - - - - - - leaflet oblique to - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue smooth - - - - - - - - - - - - - - - - - - - - - - - - leaflet arched - - - - - - - - - - - - - - - - - - - - - - - - stalk ovate - - - - - - - - - - - - - - - - - - - - - - - - stamen split - - - - - - - - - - - - - - - - - - - - - - - - connective cylindrical - - - - - - - - - - - - - - - - - - - - - - - - stele decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - stele water composition - - - - - - - - - - - - - - - - - - - - - - - - lamina yellow - - - - - - - - - - - - - - - - - - - - - - - - stem tight - - - - - - - - - - - - - - - - - - - - - - - - leaflet serrated - - - - - - - - - - - - - - - - - - - - - - - - leaf multi-colored - - - - - - - - - - - - - - - - - - - - - - - - leaf color pattern - - - - - - - - - - - - - - - - - - - - - - - - gynophore pedicellate - - - - - - - - - - - - - - - - - - - - - - - - gynophore attachment quality - - - - - - - - - - - - - - - - - - - - - - - - corm branched - - - - - - - - - - - - - - - - - - - - - - - - epidermis cuneate - - - - - - - - - - - - - - - - - - - - - - - - whole plant open - - - - - - - - - - - - - - - - - - - - - - - - whole plant closure - - - - - - - - - - - - - - - - - - - - - - - - sepal flattened - - - - - - - - - - - - - - - - - - - - - - - - aril slit-like - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein increased thickness - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein thickness - - - - - - - - disk flower hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - root spongy - - - - - - - - - - - - - - - - - - - - - - - - leaf apex simple - - - - - - - - - - - - - - - - - - - - - - - - leaf apex complexity - - - - - - - - - - - - - - - - - - - - - - - - stalk flat - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf reniform - - - - - - - - - - - - - - - - - - - - - - - - tubercle decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - tubercle thickness - - - - - - - - - - - - - - - - - - - - - - - - hypanthium abaxial to - - - - - - - - - - - - - - - - - - - - - - - - root tip coiled - - - - - - - - - - - - - - - - - - - - - - - - root tip coiling - - - - - - - - - - - - - - - - - - - - - - - - tepal hairy - - - - - - - - - - - - - - - - - - - - - - - - stigma distance - - - - - - - - - - - - - - - - - - - - - - - - lower glume grooved - - - - - - - - - - - - - - - - - - - - - - - - spikelet triangular - - - - - - - - - - - - - - - - - - - - - - - - stalk oblong - - - - - - - - - - - - - - - - - - - - - - - - filament red brown - - - - - - - - - - - - - - - - - - - - - - - - branch punctate - - - - - - - - - - - - - - - - - - - - - - - - connective slender - - - - - - - - - - - - - - - - - - - - - - - - valve linear - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf flattened - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf curvature - - - - - - - - - - - - - - - - - - - - - - - - stipule yellow - - - - - - - - - - - - - - - - - - - - - - - - stipule color - - - - - - - - - - - - - - - - - - - - - - - - corolla dense - - - - - - - - - - - - - - - - - - - - - - - - corolla mass density - - - - - - - - - - - - - - - - - - - - - - - - petiole margin emarginate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin concavity - - - - - - - - - - - - - - - - - - - - - - - - canal decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - canal water composition - - - - - - - - - - - - - - - - - - - - - - - - branch curled - - - - - - - - - - - - - - - - - - - - - - - - fruit caudate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence horizontal - - - - - - - - - - - - - - - - - - - - - - - - lamina slender - - - - - - - - - - - - - - - - - - - - - - - - short shoot crowded - - - - - - - - - - - - - - - - - - - - - - - - petiole elongated - - - - - - - - - - - - - - - - - - - - - - - - infructescence ridged - - - - - - - - - - - - - - - - - - - - - - - - exocarp elliptic - - - - - - - - - - - - - - - - - - - - - - - - carpel subulate - - - - - - - - - - - - - - - - - - - - - - - - anther theca pubescent - - - - - - - - - - - - - - - - - - - - - - - - anther theca maturity - - - - - - - - - - - - - - - - - - - - - - - - androecium dense - - - - - - - - - - - - - - - - - - - - - - - - androecium mass density - - - - - - - - - - - - - - - - - - - - - - - - petiole spongy - - - - - - - - - - - - - - - - - - - - - - - - carpel ovate - - - - - - - - - - - - - - - - - - - - - - - - ligule decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - tepal striated - - - - - - - - - - - - - - - - - - - - - - - - perianth subulate - - - - - - - - - - - - - - - - - - - - - - - - perianth absent - - - - - - - - - - - - - - - - - - - - - - - - pappus fragile - - - - - - - - - - - - - - - - - - - - - - - - pappus fragility - - - - - - - - - - - - - - - - - - - - - - - - staminode obovate - - - - - - - - - - - - - - - - - - - - - - - - endosperm circular - - - - - - - - - - - - - - - - - - - - - - - - endosperm 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - infructescence wrinkled - - - - - - - - - - - - - - - - - - - - - - - - infructescence texture - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence prominent - - - - - - - - - - - - - - - - - - - - - - - - corolla undulate - - - - - - - - - - - - - - - - - - - - - - - - plant embryo arched - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle dry - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle wetness - - - - - - - - carpel male - true - - - - - - - - - - - - - - - - - - - - - - - - awn structure - - - - - - - - - - - - - - - - - - - - - - - - lemma dark brown - - - - - - - - canal female - true - - - - - - - - canal phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - aril cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - stele erect - - - - - - - - - - - - - - - - - - - - - - - - stele position - - - - - - - - - - - - - - - - - - - - - - - - branch decussate - - - - - - - - - - - - - - - - - - - - - - - - lower glume dark brown - - - - - - - - - - - - - - - - - - - - - - - - rhizome attached to - - - - - - - - - - - - - - - - - - - - - - - - rhizome attachment quality - - - - - - - - - - - - - - - - - - - - - - - - areole bud pinnate - - - - - - - - seed arrested - true - - - - - - - - seed offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - whole plant ventral to - - - - - - - - - - - - - - - - - - - - - - - - apical hook acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaflet star shaped - - - - - - - - - - - - - - - - - - - - - - - - ligule concave - - - - - - - - - - - - - - - - - - - - - - - - testa simple - - - - - - - - - - - - - - - - - - - - - - - - testa complexity - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle glabrous - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root tomentose - - - - - - - - flower variability - true - - - - - - - - - - - - - - - - - - - - - - - - gynophore adaxial to - - - - - - - - - - - - - - - - - - - - - - - - gynophore position - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member scalloped - - - - - - - - - - - - - - - - - - - - - - - - glume transparent - - - - - - - - - - - - - - - - - - - - - - - - glume opacity - - - - - - - - - - - - - - - - - - - - - - - - rhizome basal to - - - - - - - - - - - - - - - - - - - - - - - - lamina abaxial to - - - - - - - - - - - - - - - - - - - - - - - - pericarp edible - - - - - - - - - - - - - - - - - - - - - - - - pericarp edibility - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus pinnate - - - - - - - - - - - - - - - - - - - - - - - - seta broad - - - - - - - - - - - - - - - - - - - - - - - - seta shape - - - - - - - - - - - - - - - - - - - - - - - - whole plant bifurcated - - - - - - - - - - - - - - - - - - - - - - - - hypanthium broad - - - - - - - - - - - - - - - - - - - - - - - - seed dispersed - - - - - - - - - - - - - - - - - - - - - - - - sporangium glandular - - - - - - - - - - - - - - - - - - - - - - - - sporangium morphology - - - - - - - - - - - - - - - - - - - - - - - - root tip falciform - - - - - - - - - - - - - - - - - - - - - - - - bracteole swollen - - - - - - - - - - - - - - - - - - - - - - - - apical hook actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - apical hook radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - fruit scalloped - - - - - - - - - - - - - - - - - - - - - - - - stem maroon - - - - - - - - - - - - - - - - - - - - - - - - inflorescence prominent - - - - - - - - - - - - - - - - - - - - - - - - plant embryo spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - plant embryo convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - funicle inserted into - - - - - - - - - - - - - - - - - - - - - - - - seed trichome decreased amount - - - - - - - - - - - - - - - - - - - - - - - - seed trichome amount - - - - - - - - - - - - - - - - - - - - - - - - locule linear - - - - - - - - - - - - - - - - - - - - - - - - pedicel pink - - - - - - - - - - - - - - - - - - - - - - - - plant spore smooth - - - - - - - - - - - - - - - - - - - - - - - - plant spore texture - - - - - - - - - - - - - - - - - - - - - - - - staminode drooping - - - - - - - - - - - - - - - - - - - - - - - - stem flat - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein areolate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet rugose - - - - - - - - - - - - - - - - - - - - - - - - lower glume sharp - - - - - - - - - - - - - - - - - - - - - - - - tubercle trilobed - - - - - - - - - - - - - - - - - - - - - - - - calyx asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - calyx symmetry - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl leaf-like - - - - - - - - - - - - - - - - - - - - - - - - tepal recurved - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf sigmoid - - - - - - - - - - - - - - - - - - - - - - - - perianth magenta - - - - - - - - - - - - - - - - - - - - - - - - seed trichome auriculate - - - - - - - - - - - - - - - - - - - - - - - - flower foveate - - - - - - - - - - - - - - - - - - - - - - - - stele present - - - - - - - - - - - - - - - - - - - - - - - - stele amount - - - - - - - - - - - - - - - - - - - - - - - - septum flat - - - - - - - - - - - - - - - - - - - - - - - - septum curvature - - - - - - - - - - - - - - - - - - - - - - - - petiolule striated - - - - - - - - - - - - - - - - - - - - - - - - bracteole tomentose - - - - - - - - - - - - - - - - - - - - - - - - stamen obtuse - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf swollen - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf structure - - - - - - - - - - - - - - - - - - - - - - - - plant embryo increased length - - - - - - - - - - - - - - - - - - - - - - - - plant embryo length - - - - - - - - - - - - - - - - - - - - - - - - inflorescence brittle - - - - - - - - - - - - - - - - - - - - - - - - bark punctate - - - - - - - - - - - - - - - - - - - - - - - - flower falciform - - - - - - - - - - - - - - - - - - - - - - - - inflorescence scalloped - - - - - - - - - - - - - - - - - - - - - - - - tubercle emarginate - - - - - - - - - - - - - - - - - - - - - - - - tubercle concavity - - - - - - - - - - - - - - - - - - - - - - - - bracteole straight - - - - - - - - - - - - - - - - - - - - - - - - thorn pubescent - - - - - - - - - - - - - - - - - - - - - - - - thorn maturity - - - - - - - - - - - - - - - - - - - - - - - - apical hook arched - - - - - - - - - - - - - - - - - - - - - - - - canal obovate - - - - - - - - - - - - - - - - - - - - - - - - stalk height - - - - - - - - - - - - - - - - - - - - - - - - rhizome sterile - - - - - - - - - - - - - - - - - - - - - - - - stipel raised - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence offset - - - - - - - - - - - - - - - - - - - - - - - - axil decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - axil thickness - - - - - - - - - - - - - - - - - - - - - - - - hilum convex - - - - - - - - - - - - - - - - - - - - - - - - sheath cell increased thickness - - - - - - - - - - - - - - - - - - - - - - - - anther actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - anther radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - nectary flattened - - - - - - - - - - - - - - - - - - - - - - - - nectary curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf base spiny - - - - - - - - - - - - - - - - - - - - - - - - leaf base surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - bract fusiform - - - - - - - - - - - - - - - - - - - - - - - - ligule green - - - - - - - - - - - - - - - - - - - - - - - - flower tomentose - - - - - - - - - - - - - - - - - - - - - - - - tepal angular - - - - - - - - leaf margin acute - true - - - - - - - - leaf margin duration - true - - - - - - - - - - - - - - - - - - - - - - - - gynoecium lobed - - - - - - - - - - - - - - - - - - - - - - - - gynoecium spherical - - - - - - - - - - - - - - - - - - - - - - - - anther decreased amount - - - - - - - - - - - - - - - - - - - - - - - - staminode purple - - - - - - - - - - - - - - - - - - - - - - - - staminode color - - - - - - - - - - - - - - - - - - - - - - - - disk flower opposite - - - - - - - - - - - - - - - - - - - - - - - - gynophore spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - apical hook undulate - - - - - - - - - - - - - - - - - - - - - - - - peduncle right - - - - - - - - - - - - - - - - - - - - - - - - carpel triangular - - - - - - - - - - - - - - - - - - - - - - - - petal grey - - - - - - - - - - - - - - - - - - - - - - - - exocarp alive - - - - - - - - - - - - - - - - - - - - - - - - exocarp viability - - - - - - - - - - - - - - - - - - - - - - - - stigma broad - - - - - - - - - - - - - - - - - - - - - - - - peduncle scaly - - - - - - - - - - - - - - - - - - - - - - - - keel inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - cotyledon triangular - - - - - - - - - - - - - - - - - - - - - - - - calyx unilateral - - - - - - - - - - - - - - - - - - - - - - - - palea length - - - - - - - - - - - - - - - - - - - - - - - - stipule obtuse - - - - - - - - - - - - - - - - - - - - - - - - flower bud young - - - - - - - - - - - - - - - - - - - - - - - - flower bud age - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf decreased amount - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf amount - - - - - - - - - - - - - - - - - - - - - - - - rhizome distance - - - - - - - - - - - - - - - - - - - - - - - - oil gland furrowed - - - - - - - - - - - - - - - - - - - - - - - - stem stubby - - - - - - - - - - - - - - - - - - - - - - - - anther oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - bark aromatic - - - - - - - - - - - - - - - - - - - - - - - - bark aromaticity - - - - - - - - - - - - - - - - - - - - - - - - thorn hairy - - - - - - - - - - - - - - - - - - - - - - - - lenticel brittle - - - - - - - - - - - - - - - - - - - - - - - - lenticel structure - - - - - - - - - - - - - - - - - - - - - - - - glume bulbous - - - - - - - - - - - - - - - - - - - - - - - - calyx brittle - - - - - - - - - - - - - - - - - - - - - - - - shoot system star shaped - - - - - - - - - - - - - - - - - - - - - - - - root tip leaf-like - - - - - - - - - - - - - - - - - - - - - - - - seed pale pink - - - - - - - - - - - - - - - - - - - - - - - - upper glume curved - - - - - - - - - - - - - - - - - - - - - - - - columella attached to - - - - - - - - - - - - - - - - - - - - - - - - columella attachment quality - - - - - - - - - - - - - - - - - - - - - - - - spikelet smooth - - - - - - - - - - - - - - - - - - - - - - - - spikelet texture - - - - - - - - - - - - - - - - - - - - - - - - calyx discoid - - - - - - - - - - - - - - - - - - - - - - - - leaf base area - - - - - - - - - - - - - - - - - - - - - - - - petal cuspidate - - - - - - - - - - - - - - - - - - - - - - - - root obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf base grey - - - - - - - - - - - - - - - - - - - - - - - - costa linear - - - - - - - - - - - - - - - - - - - - - - - - calyx cuneate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein pinnate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence heart shaped - - - - - - - - - - - - - - - - - - - - - - - - nectary increased length - - - - - - - - - - - - - - - - - - - - - - - - nectary length - - - - - - - - - - - - - - - - - - - - - - - - thorn broken - - - - - - - - - - - - - - - - - - - - - - - - thorn wholeness - - - - - - - - - - - - - - - - - - - - - - - - tepal heart shaped - - - - - - - - - - - - - - - - - - - - - - - - tepal concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bud attached to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein triangular - - - - - - - - - - - - - - - - - - - - - - - - hilum fleshy - - - - - - - - - - - - - - - - - - - - - - - - hilum composition - - - - - - - - - - - - - - - - - - - - - - - - seed edible - - - - - - - - - - - - - - - - - - - - - - - - seed edibility - - - - - - - - - - - - - - - - - - - - - - - - plant embryo smooth - - - - - - - - - - - - - - - - - - - - - - - - plant embryo texture - - - - - - - - - - - - - - - - - - - - - - - - axil broad - - - - - - - - - - - - - - - - - - - - - - - - exocarp spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore ovate - - - - - - - - - - - - - - - - - - - - - - - - keel triangular - - - - - - - - - - - - - - - - - - - - - - - - rhizome flat - - - - - - - - - - - - - - - - - - - - - - - - inflorescence articulated with - - - - - - - - - - - - - - - - - - - - - - - - - aril lobed - - - - - - - - - - - - - - - - - - - - - - - - rhizome yellow - - - - - - - - - - - - - - - - - - - - - - - - testa increased length - - - - - - - - - - - - - - - - - - - - - - - - testa length - - - - - - - - - - - - - - - - - - - - - - - - rhizome warty - - - - - - - - - - - - - - - - - - - - - - - - bract wrinkled - - - - - - - - - - - - - - - - - - - - - - - - nectary inconspicuous - - - - - - - - portion of secretory tissue premature - true - - - - - - - - portion of secretory tissue onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - petal dark red - - - - - - - - - - - - - - - - - - - - - - - - petal revolute - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle curled - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma inverted-V shaped - - - - - - - - - - - - - - - - - - - - - - - - banner petal increased thickness - - - - - - - - - - - - - - - - - - - - - - - - banner petal thickness - - - - - - - - - - - - - - - - - - - - - - - - prickle viscid - - - - - - - - - - - - - - - - - - - - - - - - petal conical - - - - - - - - - - - - - - - - - - - - - - - - sheath cell sterile - - - - - - - - - - - - - - - - - - - - - - - - sheath cell fertility - - - - - - - - - - - - - - - - - - - - - - - - prophyll kinked - - - - - - - - - - - - - - - - - - - - - - - - prophyll shape - - - - - - - - - - - - - - - - - - - - - - - - crown root open - - - - - - - - - - - - - - - - - - - - - - - - crown root closure - - - - - - - - - - - - - - - - - - - - - - - - pappus oblique to - - - - - - - - - - - - - - - - - - - - - - - - stamen dispersed - - - - - - - - - - - - - - - - - - - - - - - - caruncle convex - - - - - - - - - - - - - - - - - - - - - - - - caruncle concavity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence decumbent - - - - - - - - - - - - - - - - - - - - - - - - seed trichome rough - - - - - - - - - - - - - - - - - - - - - - - - spikelet blunt - - - - - - - - - - - - - - - - - - - - - - - - flower distal to - - - - - - - - - - - - - - - - - - - - - - - - peduncle level with - - - - - - - - - - - - - - - - - - - - - - - - stem base ovate - - - - - - - - - - - - - - - - - - - - - - - - stem base convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - ligule increased length - - - - - - - - - - - - - - - - - - - - - - - - ligule length - - - - - - - - - - - - - - - - - - - - - - - - perianth dense - - - - - - - - - - - - - - - - - - - - - - - - perianth mass density - - - - - - - - - - - - - - - - - - - - - - - - whole plant circinate - - - - - - - - - - - - - - - - - - - - - - - - keel recurved - - - - - - - - - - - - - - - - - - - - - - - - bract cylindrical - - - - - - - - - - - - - - - - - - - - - - - - peristome constricted - - - - - - - - - - - - - - - - - - - - - - - - peristome structure - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system arched - - - - - - - - - - - - - - - - - - - - - - - - filament parallel to - - - - - - - - sepal premature - true - - - - - - - - sepal onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - corolla deep pink - - - - - - - - - - - - - - - - - - - - - - - - bract oblique to - - - - - - - - - - - - - - - - - - - - - - - - calyx young - - - - - - - - - - - - - - - - - - - - - - - - calyx age - - - - - - - - - - - - - - - - - - - - - - - - funicle brown - - - - - - - - - - - - - - - - - - - - - - - - funicle color - - - - - - - - - - - - - - - - - - - - - - - - plant embryo transparent - - - - - - - - - - - - - - - - - - - - - - - - plant embryo opacity - - - - - - - - - - - - - - - - - - - - - - - - papilla cell simple - - - - - - - - - - - - - - - - - - - - - - - - papilla cell complexity - - - - - - - - - - - - - - - - - - - - - - - - hilum distance - - - - - - - - - - - - - - - - - - - - - - - - nectary oblong - - - - - - - - - - - - - - - - - - - - - - - - stem foveate - - - - - - - - - - - - - - - - - - - - - - - - bract distributed - - - - - - - - - - - - - - - - - - - - - - - - exocarp warty - - - - - - - - - - - - - - - - - - - - - - - - stipel linear - - - - - - - - - - - - - - - - - - - - - - - - gynophore furrowed - - - - - - - - - - - - - - - - - - - - - - - - - - - - chalaza phenotype - - - - - - - - - - - - - - - - - - - - - - - - chalaza brown - - - - - - - - - - - - - - - - - - - - - - - - chalaza color - - - - - - - - - - - - - - - - - - - - - - - - root green - - - - - - - - - - - - - - - - - - - - - - - - root color - - - - - - - - - - - - - - - - - - - - - - - - branch falciform - - - - - - - - - - - - - - - - - - - - - - - - receptacle elongated - - - - - - - - - - - - - - - - - - - - - - - - lamina orange - - - - - - - - - - - - - - - - - - - - - - - - rhizome tomentose - - - - - - - - - - - - - - - - - - - - - - - - calyx light green - - - - - - - - - - - - - - - - - - - - - - - - receptacle caudate - - - - - - - - - - - - - - - - - - - - - - - - calyx normal - - - - - - - - - - - - - - - - - - - - - - - - calyx deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - plant embryo reniform - - - - - - - - - - - - - - - - - - - - - - - - perianth smooth - - - - - - - - - - - - - - - - - - - - - - - - style orbicular - - - - - - - - - - - - - - - - - - - - - - - - flower congested - - - - - - - - - - - - - - - - - - - - - - - - caruncle domed - - - - - - - - - - - - - - - - - - - - - - - - stem emarginate - - - - - - - - - - - - - - - - - - - - - - - - seed fusiform - - - - - - - - - - - - - - - - - - - - - - - - branch concave - - - - - - - - - - - - - - - - - - - - - - - - inflorescence undivided - - - - - - - - - - - - - - - - - - - - - - - - keel absent - - - - - - - - - - - - - - - - - - - - - - - - keel amount - - - - - - - - - - - - - - - - - - - - - - - - receptacle terminal - - - - - - - - - - - - - - - - - - - - - - - - hilum glabrous - - - - - - - - - - - - - - - - - - - - - - - - hilum pilosity - - - - - - - - - - - - - - - - - - - - - - - - corm age - - - - - - - - - - - - - - - - - - - - - - - - fruit crowded - - - - - - - - - - - - - - - - - - - - - - - - exocarp curved - - - - - - - - - - - - - - - - - - - - - - - - exocarp curvature - - - - - - - - - - - - - - - - - - - - - - - - flower odorous - - - - - - - - - - - - - - - - - - - - - - - - flower odor - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root inflexible - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root flexibility - - - - - - - - - - - - - - - - - - - - - - - - papilla cell branched - - - - - - - - - - - - - - - - - - - - - - - - papilla cell branchiness - - - - - - - - - - - - - - - - - - - - - - - - lamina bilobed - - - - - - - - - - - - - - - - - - - - - - - - epicalyx autogenous - - - - - - - - - - - - - - - - - - - - - - - - epicalyx structure - - - - - - - - perianth acute - true - - - - - - - - - - - - - - - - - - - - - - - - root tip glistening - - - - - - - - - - - - - - - - - - - - - - - - root tip reflectivity - - - - - - - - - - - - - - - - - - - - - - - - bract pinnate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon concave - - - - - - - - - - - - - - - - - - - - - - - - peduncle dentated - - - - - - - - - - - - - - - - - - - - - - - - calyx coating - - - - - - - - - - - - - - - - - - - - - - - - valve wrinkled - - - - - - - - - - - - - - - - - - - - - - - - plant callus obtuse - - - - - - - - - - - - - - - - - - - - - - - - palea linear - - - - - - - - - - - - - - - - - - - - - - - - palea grooved - - - - - - - - - - - - - - - - - - - - - - - - flower revolute - - - - - - - - - - - - - - - - - - - - - - - - cotyledon ventral to - - - - - - - - - - - - - - - - - - - - - - - - lamina red - - - - - - - - - - - - - - - - - - - - - - - - hypanthium spherical - - - - - - - - - - - - - - - - - - - - - - - - pollen present - - - - - - - - - - - - - - - - - - - - - - - - pollen amount - - - - - - - - - - - - - - - - - - - - - - - - pedicel purple - - - - - - - - - - - - - - - - - - - - - - - - seed heart shaped - - - - - - - - - - - - - - - - - - - - - - - - spikelet prominent - - - - - - - - lower glume arrested - true - - - - - - - - lower glume offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - root old - - - - - - - - - - - - - - - - - - - - - - - - root age - - - - - - - - - - - - - - - - - - - - - - - - tuber glabrous - - - - - - - - - - - - - - - - - - - - - - - - tubercle triangular - - - - - - - - - - - - - - - - - - - - - - - - stigma emarginate - - - - - - - - - - - - - - - - - - - - - - - - flower level with - - - - - - - - - - - - - - - - - - - - - - - - filament straight - - - - - - - - - - - - - - - - - - - - - - - - stigma kinked - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf grooved - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf texture - - - - - - - - - - - - - - - - - - - - - - - - septum cut - - - - - - - - lemma subacute - true - - - - - - - - - - - - - - - - - - - - - - - - leaflet increased size - - - - - - - - - - - - - - - - - - - - - - - - - - - - arilloid phenotype - - - - - - - - - - - - - - - - - - - - - - - - arilloid present - - - - - - - - - - - - - - - - - - - - - - - - arilloid amount - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member flattened - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member curvature - - - - - - - - - - - - - - - - - - - - - - - - raphe grey - - - - - - - - - - - - - - - - - - - - - - - - raphe color - - - - - - - - - - - - - - - - - - - - - - - - costa young - - - - - - - - - - - - - - - - - - - - - - - - stamen closed - - - - - - - - - - - - - - - - - - - - - - - - leaf base round - leaf base rounded - leaf base circular - - - - - - - - spikelet down - true - - - - - - - - - - - - - - - - - - - - - - - - perianth attached to - - - - - - - - - - - - - - - - - - - - - - - - perianth attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stalk glistening - - - - - - - - - - - - - - - - - - - - - - - - stalk reflectivity - - - - - - - - - - - - - - - - - - - - - - - - stalk cuneate - - - - - - - - - - - - - - - - - - - - - - - - bract inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - trichome truncated - - - - - - - - - - - - - - - - - - - - - - - - leaflet inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - papilla cell cylindrical - - - - - - - - - - - - - - - - - - - - - - - - valve dorsal to - - - - - - - - - - - - - - - - - - - - - - - - lamina diameter - - - - - - - - - - - - - - - - - - - - - - - - endocarp spongy - - - - - - - - - - - - - - - - - - - - - - - - whole plant glistening - - - - - - - - - - - - - - - - - - - - - - - - whole plant reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system furrowed - - - - - - - - - - - - - - - - - - - - - - - - pedicel flat - - - - - - - - - - - - - - - - - - - - - - - - receptacle glutinous - - - - - - - - - - - - - - - - - - - - - - - - receptacle amylose composition - - - - - - - - - - - - - - - - - - - - - - - - leaflet present - - - - - - - - - - - - - - - - - - - - - - - - aril discoid - - - - - - - - - - - - - - - - - - - - - - - - aril convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue upturned - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue curvature - - - - - - - - - - - - - - - - - - - - - - - - petiole yellow - - - - - - - - - - - - - - - - - - - - - - - - leaflet caudate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem acuminate - - - - - - - - - - - - - - - - - - - - - - - - fruit quadrangular - - - - - - - - - - - - - - - - - - - - - - - - shoot system emarginate - - - - - - - - - - - - - - - - - - - - - - - - shoot system concavity - - - - - - - - placenta continuous - true - - - - - - - - placenta occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium autogenous - - - - - - - - - - - - - - - - - - - - - - - - hypanthium structure - - - - - - - - - - - - - - - - - - - - - - - - leaflet fertile - - - - - - - - - - - - - - - - - - - - - - - - inflorescence interlocked with - - - - - - - - - - - - - - - - - - - - - - - - tubercle spherical - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus increased length - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus length - - - - - - - - - - - - - - - - - - - - - - - - plant embryo concave - - - - - - - - - - - - - - - - - - - - - - - - tubercle dorsal to - - - - - - - - - - - - - - - - - - - - - - - - endocarp oblong - - - - - - - - - - - - - - - - - - - - - - - - mesocarp translucent - - - - - - - - - - - - - - - - - - - - - - - - mesocarp opacity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud present - - - - - - - - - - - - - - - - - - - - - - - - axillary bud amount - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system cuspidate - - - - - - - - - - - - - - - - - - - - - - - - costa abaxial to - - - - - - - - - - - - - - - - - - - - - - - - endosperm ventral to - - - - - - - - - - - - - - - - - - - - - - - - stigma fertile - - - - - - - - - - - - - - - - - - - - - - - - stigma fertility - - - - - - - - - - - - - - - - - - - - - - - - apical hook reniform - - - - - - - - - - - - - - - - - - - - - - - - epidermis slit-like - - - - - - - - - - - - - - - - - - - - - - - - bract red - - - - - - - - - - - - - - - - - - - - - - - - bark translucent - - - - - - - - - - - - - - - - - - - - - - - - bark opacity - - - - - - - - - - - - - - - - - - - - - - - - endocarp dorsal to - - - - - - - - - - - - - - - - - - - - - - - - branch autogenous - - - - - - - - - - - - - - - - - - - - - - - - epidermis star shaped - - - - - - - - tepal up - true - - - - - - - - - - - - - - - - - - - - - - - - tepal direction - - - - - - - - - - - - - - - - - - - - - - - - costa sinuous - - - - - - - - - - - - - - - - - - - - - - - - costa curvature - - - - - - - - - - - - - - - - - - - - - - - - filament attenuate - - - - - - - - - - - - - - - - - - - - - - - - pedicel crowded - - - - - - - - - - - - - - - - - - - - - - - - seed trichome subulate - - - - - - - - - - - - - - - - - - - - - - - - aril concealed - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf branched - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf branchiness - - - - - - - - - - - - - - - - - - - - - - - - bark tendency - - - - - - - - - - - - - - - - - - - - - - - - ligule attenuate - - - - - - - - - - - - - - - - - - - - - - - - pith smooth - - - - - - - - - - - - - - - - - - - - - - - - scutellar node star shaped - - - - - - - - - - - - - - - - - - - - - - - - filament pink - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle broken - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle wholeness - - - - - - - - - - - - - - - - - - - - - - - - central zone funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf increased thickness - - - - - - - - - - - - - - - - - - - - - - - - locule absent - - - - - - - - - - - - - - - - - - - - - - - - locule amount - - - - - - - - - - - - - - - - - - - - - - - - stalk acuminate - - - - - - - - - - - - - - - - - - - - - - - - connective elongated - - - - - - - - - - - - - - - - - - - - - - - - stalk sterile - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf swollen - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf structure - - - - - - - - - - - - - - - - - - - - - - - - corolla concave - - - - - - - - - - - - - - - - - - - - - - - - shoot system grooved - - - - - - - - - - - - - - - - - - - - - - - - shoot system texture - - - - - - - - - - - - - - - - - - - - - - - - calyx ventral to - - - - - - - - - - - - - - - - - - - - - - - - shoot internode star shaped - - - - - - - - - - - - - - - - - - - - - - - - leaflet light green - - - - - - - - - - - - - - - - - - - - - - - - epicotyl opposite - - - - - - - - - - - - - - - - - - - - - - - - epicotyl position - - - - - - - - bud premature - true - - - - - - - - bud onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - seed grey - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet auriculate - - - - - - - - - - - - - - - - - - - - - - - - palea separated from - - - - - - - - - - - - - - - - - - - - - - - - palea structure - - - - - - - - - - - - - - - - - - - - - - - - lamina brochidodromous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue purple - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue color - - - - - - - - - - - - - - - - - - - - - - - - exocarp simple - - - - - - - - - - - - - - - - - - - - - - - - exocarp complexity - - - - - - - - - - - - - - - - - - - - - - - - scutellar node rough - - - - - - - - - - - - - - - - - - - - - - - - stipel glandular - - - - - - - - - - - - - - - - - - - - - - - - stipel morphology - - - - - - - - - - - - - - - - - - - - - - - - lemma involute - - - - - - - - - - - - - - - - - - - - - - - - peduncle undulate - - - - - - - - - - - - - - - - - - - - - - - - stem rhomboid - - - - - - - - - - - - - - - - - - - - - - - - calyx pale pink - - - - - - - - - - - - - - - - - - - - - - - - exocarp hairy - - - - - - - - - - - - - - - - - - - - - - - - calyx inflexible - - - - - - - - - - - - - - - - - - - - - - - - calyx flexibility - - - - - - - - - - - - - - - - - - - - - - - - locule ridged - - - - - - - - - - - - - - - - - - - - - - - - carpel simple - - - - - - - - - - - - - - - - - - - - - - - - carpel complexity - - - - - - - - - - - - - - - - - - - - - - - - calyx convex - - - - - - - - - - - - - - - - - - - - - - - - flower bent - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member brittle - - - - - - - - - - - - - - - - - - - - - - - - endosperm dry - - - - - - - - - - - - - - - - - - - - - - - - endosperm wetness - - - - - - - - - - - - - - - - - - - - - - - - carpel flattened - - - - - - - - - - - - - - - - - - - - - - - - peristome light yellow - - - - - - - - - - - - - - - - - - - - - - - - pericarp spiny - - - - - - - - - - - - - - - - - - - - - - - - pericarp surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - seed absent - - - - - - - - - - - - - - - - - - - - - - - - seta flat - - - - - - - - - - - - - - - - - - - - - - - - flower rough - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle warty - - - - - - - - central zone male - true - - - - - - - - - - - - - - - - - - - - - - - - seed trichome dispersed - - - - - - - - - - - - - - - - - - - - - - - - axil sterile - - - - - - - - - - - - - - - - - - - - - - - - axil fertility - - - - - - - - - - - - - - - - - - - - - - - - bud coiled - - - - - - - - - - - - - - - - - - - - - - - - bud coiling - - - - - - - - - - - - - - - - - - - - - - - - branch truncated - - - - - - - - - - - - - - - - - - - - - - - - anther clavate - - - - - - - - - - - - - - - - - - - - - - - - seed terminal - - - - - - - - - - - - - - - - - - - - - - - - leaflet inserted into - - - - - - - - - - - - - - - - - - - - - - - - stolon autogenous - - - - - - - - - - - - - - - - - - - - - - - - hypanthium constricted - - - - - - - - - - - - - - - - - - - - - - - - palea herbaceous - - - - - - - - - - - - - - - - - - - - - - - - palea shedability - - - - - - - - - - - - - - - - - - - - - - - - bud undulate - - - - - - - - - - - - - - - - - - - - - - - - spikelet raised - - - - - - - - - - - - - - - - - - - - - - - - filament condensed - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus split - - - - - - - - - - - - - - - - - - - - - - - - pericarp erect - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell truncated - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell shape - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf light brown - - - - - - - - - - - - - - - - - - - - - - - - petiole symmetrical - - - - - - - - - - - - - - - - - - - - - - - - petiole symmetry - - - - - - - - - - - - - - - - - - - - - - - - calyx decreased amount - - - - - - - - - - - - - - - - - - - - - - - - cotyledon convolute - - - - - - - - - - - - - - - - - - - - - - - - corolla mass - - - - - - - - - - - - - - - - - - - - - - - - stalk discoid - - - - - - - - - - - - - - - - - - - - - - - - petiole dry - - - - - - - - - - - - - - - - - - - - - - - - petiole wetness - - - - - - - - - - - - - - - - - - - - - - - - connective curved - - - - - - - - - - - - - - - - - - - - - - - - involucre dense - - - - - - - - - - - - - - - - - - - - - - - - involucre mass density - - - - - - - - - - - - - - - - - - - - - - - - inflorescence mature - - - - - - - - - - - - - - - - - - - - - - - - receptacle triangular - - - - - - - - - - - - - - - - - - - - - - - - stipel hairy - - - - - - - - - - - - - - - - - - - - - - - - perianth oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf adaxial to - - - - - - - - - - - - - - - - - - - - - - - - endosperm white - - - - - - - - - - - - - - - - - - - - - - - - root tip fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet branched - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet branchiness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal spongy - - - - - - - - - - - - - - - - - - - - - - - - apical hook curved - - - - - - - - - - - - - - - - - - - - - - - - epidermis differentiated - - - - - - - - - - - - - - - - - - - - - - - - epidermis cellular potency - - - - - - - - - - - - - - - - - - - - - - - - stigma young - - - - - - - - - - - - - - - - - - - - - - - - stigma age - - - - - - - - - - - - - - - - - - - - - - - - stem horizontal - - - - - - - - - - - - - - - - - - - - - - - - root hairy - - - - - - - - - - - - - - - - - - - - - - - - testa decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - testa water composition - - - - - - - - - - - - - - - - - - - - - - - - banner petal pedicellate - - - - - - - - - - - - - - - - - - - - - - - - banner petal attachment quality - - - - - - - - - - - - - - - - - - - - - - - - apical hook brittle - - - - - - - - - - - - - - - - - - - - - - - - stem mature - - - - - - - - - - - - - - - - - - - - - - - - ligule white - - - - - - - - - - - - - - - - - - - - - - - - branch aggregated - - - - - - - - - - - - - - - - - - - - - - - - pistillode warty - - - - - - - - - - - - - - - - - - - - - - - - pistillode texture - - - - - - - - - - - - - - - - - - - - - - - - epidermis basal to - - - - - - - - - - - - - - - - - - - - - - - - filament basal to - - - - - - - - - - - - - - - - - - - - - - - - petiole tapered - - - - - - - - - - - - - - - - - - - - - - - - sapwood grey - - - - - - - - - - - - - - - - - - - - - - - - infructescence star shaped - - - - - - - - - - - - - - - - - - - - - - - - hilum circumference - - - - - - - - - - - - - - - - - - - - - - - - palea emarginate - - - - - - - - - - - - - - - - - - - - - - - - palea concavity - - - - - - - - - - - - - - - - - - - - - - - - costa orange - - - - - - - - - - - - - - - - - - - - - - - - lenticel glandular - - - - - - - - - - - - - - - - - - - - - - - - lenticel morphology - - - - - - - - - - - - - - - - - - - - - - - - petal tomentose - - - - - - - - - - - - - - - - - - - - - - - - calyx mixed - - - - - - - - - - - - - - - - - - - - - - - - locule invaginated - - - - - - - - - - - - - - - - - - - - - - - - endocarp conical - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem grooved - - - - - - - - - - - - - - - - - - - - - - - - ovary wall decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - ovary wall water composition - - - - - - - - - - - - - - - - - - - - - - - - tepal light purple - - - - - - - - - - - - - - - - - - - - - - - - bud subcylindrical - - - - - - - - petiole premature - true - - - - - - - - petiole onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - costa acute angle to - - - - - - - - - - - - - - - - - - - - - - - - anther transformed to - - - - - - - - - - - - - - - - - - - - - - - - bracteole drooping - - - - - - - - - - - - - - - - - - - - - - - - seed tubular - - - - - - - - - - - - - - - - - - - - - - - - scutellar node alternate placement - - - - - - - - - - - - - - - - - - - - - - - - nectary truncated - - - - - - - - - - - - - - - - - - - - - - - - glume abaxial to - - - - - - - - - - - - - - - - - - - - - - - - axil hispid - - - - - - - - - - - - - - - - - - - - - - - - whole plant spherical - - - - - - - - - - - - - - - - - - - - - - - - peristome raised - - - - - - - - - - - - - - - - - - - - - - - - petiole decussate - - - - - - - - - - - - - - - - - - - - - - - - root cap hairy - - - - - - - - - - - - - - - - - - - - - - - - root cap pilosity - - - - - - - - - - - - - - - - - - - - - - - - pappus back - - - - - - - - - - - - - - - - - - - - - - - - pappus direction - - - - - - - - - - - - - - - - - - - - - - - - periderm brown - - - - - - - - - - - - - - - - - - - - - - - - peduncle fertile - - - - - - - - - - - - - - - - - - - - - - - - hypanthium curved - - - - - - - - - - - - - - - - - - - - - - - - hypanthium curvature - - - - - - - - - - - - - - - - - - - - - - - - involucre herbaceous - - - - - - - - - - - - - - - - - - - - - - - - involucre shedability - - - - - - - - - - - - - - - - - - - - - - - - branch edible - - - - - - - - - - - - - - - - - - - - - - - - branch edibility - - - - - - - - - - - - - - - - - - - - - - - - ray system scalloped - - - - - - - - - - - - - - - - - - - - - - - - stigma tubular - - - - - - - - - - - - - - - - - - - - - - - - pedicel bifurcated - - - - - - - - - - - - - - - - - - - - - - - - tuber shape - - - - - - - - - - - - - - - - - - - - - - - - nectary ovate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium recurved - - - - - - - - - - - - - - - - - - - - - - - - leaf viscous - - - - - - - - - - - - - - - - - - - - - - - - leaf viscosity - - - - - - - - - - - - - - - - - - - - - - - - style open - - - - - - - - - - - - - - - - - - - - - - - - style closure - - - - - - - - - - - - - - - - - - - - - - - - seed pointed - - - - - - - - - - - - - - - - - - - - - - - - peduncle dilated - - - - - - - - - - - - - - - - - - - - - - - - raphe angle - - - - - - - - - - - - - - - - - - - - - - - - rhizome young - - - - - - - - - - - - - - - - - - - - - - - - nectary decreased amount - - - - - - - - - - - - - - - - - - - - - - - - nectary amount - - - - - - - - - - - - - - - - - - - - - - - - flower aggregated - - - - - - - - - - - - - - - - - - - - - - - - perianth broad - - - - - - - - - - - - - - - - - - - - - - - - filament fleshy - - - - - - - - - - - - - - - - - - - - - - - - filament composition - - - - - - - - - - - - - - - - - - - - - - - - exocarp spongy - - - - - - - - - - - - - - - - - - - - - - - - branch slender - - - - - - - - - - - - - - - - - - - - - - - - involucre whole - - - - - - - - - - - - - - - - - - - - - - - - involucre wholeness - - - - - - - - - - - - - - - - - - - - - - - - perianth terminal - - - - - - - - - - - - - - - - - - - - - - - - integument ornamentation - - - - - - - - - - - - - - - - - - - - - - - - integument surface feature shape - - - - - - - - xylem vessel member hermaphrodite - true - - - - - - - - xylem vessel member phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - pedicel parallel to - - - - - - - - - - - - - - - - - - - - - - - - perianth pedicellate - - - - - - - - - - - - - - - - - - - - - - - - endosperm surrounding - - - - - - - - - - - - - - - - - - - - - - - - prophyll flattened - - - - - - - - - - - - - - - - - - - - - - - - prophyll curvature - - - - - - - - - - - - - - - - - - - - - - - - bark hispid - - - - - - - - - - - - - - - - - - - - - - - - corolla medial to - - - - - - - - - - - - - - - - - - - - - - - - stamen fertile - - - - - - - - - - - - - - - - - - - - - - - - endocarp brittle - - - - - - - - - - - - - - - - - - - - - - - - root tip inserted into - - - - - - - - - - - - - - - - - - - - - - - - gynophore dentated - - - - - - - - - - - - - - - - - - - - - - - - sepal truncated - - - - - - - - - - - - - - - - - - - - - - - - bud discoid - - - - - - - - - - - - - - - - - - - - - - - - stigma hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - stigma volume - - - - - - - - - - - - - - - - - - - - - - - - stele spherical - - - - - - - - - - - - - - - - - - - - - - - - tepal acuminate - - - - - - - - - - - - - - - - - - - - - - - - tuberous root grey - - - - - - - - - - - - - - - - - - - - - - - - tuberous root color - - - - - - - - - - - - - - - - - - - - - - - - stigma protruding into - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem sterile - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem fertility - - - - - - - - - - - - - - - - - - - - - - - - bud divergent from - - - - - - - - - - - - - - - - - - - - - - - - thallus convex - - - - - - - - - - - - - - - - - - - - - - - - thallus concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf pale pink - - - - - - - - - - - - - - - - - - - - - - - - bulb swollen - - - - - - - - - - - - - - - - - - - - - - - - bulb structure - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet star shaped - - - - - - - - - - - - - - - - - - - - - - - - stipule bilobed - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle brown - - - - - - - - - - - - - - - - - - - - - - - - infructescence decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - infructescence water composition - - - - - - - - - - - - - - - - - - - - - - - - axil oblong - - - - - - - - lamina down - true - - - - - - - - - - - - - - - - - - - - - - - - central zone actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - central zone radial symmetry - - - - - - - - anther continuous - - true - - - - - - - - anther occurrence - - true - - - - - - - - - - - - - - - - - - - - - - - - bud broken - - - - - - - - - - - - - - - - - - - - - - - - bud wholeness - - - - - - - - - - - - - - - - - - - - - - - - central zone condensed - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root striated - - - - - - - - persistent sepal female - true - - - - - - - - persistent sepal phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - disk flower discoid - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf autogenous - - - - - - - - - - - - - - - - - - - - - - - - shoot system glabrous - - - - - - - - - - - - - - - - - - - - - - - - upper glume absent - - - - - - - - - - - - - - - - - - - - - - - - upper glume amount - - - - - - - - - - - - - - - - - - - - - - - - tuber cylindrical - - - - - - - - - - - - - - - - - - - - - - - - ligule grooved - - - - - - - - - - - - - - - - - - - - - - - - bracteole heart shaped - - - - - - - - - - - - - - - - - - - - - - - - petiole margin young - - - - - - - - - - - - - - - - - - - - - - - - petiole margin age - - - - - - - - - - - - - - - - - - - - - - - - petiole flat - - - - - - - - - - - - - - - - - - - - - - - - pedicel yellow - - - - - - - - - - - - - - - - - - - - - - - - lamina dilated - - - - - - - - - - - - - - - - - - - - - - - - prickle condensed - - - - - - - - - - - - - - - - - - - - - - - - papilla cell dorsal to - - - - - - - - - - - - - - - - - - - - - - - - whole plant obtuse - - - - - - - - - - - - - - - - - - - - - - - - pistillode elliptic - - - - - - - - - - - - - - - - - - - - - - - - pistillode 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - trichome transparent - - - - - - - - - - - - - - - - - - - - - - - - trichome opacity - - - - - - - - - - - - - - - - - - - - - - - - aril edible - - - - - - - - - - - - - - - - - - - - - - - - aril edibility - - - - - - - - - - - - - - - - - - - - - - - - scutellar node triangular - - - - - - - - - - - - - - - - - - - - - - - - style reniform - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein hispid - - - - - - - - - - - - - - - - - - - - - - - - testa tapered - - - - - - - - - - - - - - - - - - - - - - - - testa sharpness - - - - - - - - - - - - - - - - - - - - - - - - staminode elliptic - - - - - - - - - - - - - - - - - - - - - - - - bracteole articulated with - - - - - - - - - - - - - - - - - - - - - - - - pappus overlapping - - - - - - - - - - - - - - - - - - - - - - - - pappus structure - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system distichous - - - - - - - - - - - - - - - - - - - - - - - - perianth hairy - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - sepal cuspidate - - - - - - - - fertile lemma up - true - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma direction - - - - - - - - - - - - - - - - - - - - - - - - bark striated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle bilobed - - - - - - - - - - - - - - - - - - - - - - - - anther hispid - - - - - - - - - - - - - - - - - - - - - - - - lamina setose - - - - - - - - - - - - - - - - - - - - - - - - petiole offset - - - - - - - - - - - - - - - - - - - - - - - - stigma inflated - - - - - - - - - - - - - - - - - - - - - - - - stigma structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - stigma offset - - - - - - - - - - - - - - - - - - - - - - - - fruit pedunculate - - - - - - - - - - - - - - - - - - - - - - - - fruit separating - - - - - - - - - - - - - - - - - - - - - - - - costa white - - - - - - - - - - - - - - - - - - - - - - - - seed acuminate - - - - - - - - - - - - - - - - - - - - - - - - endosperm folded - - - - - - - - - - - - - - - - - - - - - - - - pedicel bilobed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract drooping - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract shape - - - - - - - - - - - - - - - - - - - - - - - - pulvinus confluent with - - - - - - - - - - - - - - - - - - - - - - - - leaf offset - - - - - - - - - - - - - - - - - - - - - - - - bark unbranched - - - - - - - - - - - - - - - - - - - - - - - - stigma decurrent - - - - - - - - - - - - - - - - - - - - - - - - corolla red brown - - - - - - - - - - - - - - - - - - - - - - - - funicle swollen - - - - - - - - - - - - - - - - - - - - - - - - sporangium vertical to - - - - - - - - - - - - - - - - - - - - - - - - corolla perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - aril ochre - - - - - - - - - - - - - - - - - - - - - - - - tuberous root diameter - - - - - - - - - - - - - - - - - - - - - - - - stigma area - - - - - - - - - - - - - - - - - - - - - - - - seed trichome curved - - - - - - - - - - - - - - - - - - - - - - - - seed trichome curvature - - - - - - - - - - - - - - - - - - - - - - - - root tip subulate - - - - - - - - - - - - - - - - - - - - - - - - leaflet spherical - - - - - - - - - - - - - - - - - - - - - - - - bark yellow brown - - - - - - - - - - - - - - - - - - - - - - - - filament V-shaped - - - - - - - - - - - - - - - - - - - - - - - - keel horizontal - - - - - - - - - - - - - - - - - - - - - - - - pollen purple - - - - - - - - - - - - - - - - - - - - - - - - endocarp reniform - - - - - - - - - - - - - - - - - - - - - - - - endocarp concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal concave - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal concavity - - - - - - - - - - - - - - - - - - - - - - - - stolon decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - anther width - - - - - - - - - - - - - - - - - - - - - - - - funicle flattened - - - - - - - - - - - - - - - - - - - - - - - - funicle curvature - - - - - - - - - - - - - - - - - - - - - - - - involucre attached to - - - - - - - - - - - - - - - - - - - - - - - - involucre attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stipel increased length - - - - - - - - - - - - - - - - - - - - - - - - stipel length - - - - - - - - - - - - - - - - - - - - - - - - prophyll proximal to - - - - - - - - - - - - - - - - - - - - - - - - prophyll position - - - - - - - - - - - - - - - - - - - - - - - - carpel distance - - - - - - - - - - - - - - - - - - - - - - - - peristome protruding into - - - - - - - - - - - - - - - - - - - - - - - - petiolule proximal to - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue divergent from - - - - - - - - - - - - - - - - - - - - - - - - aril size - - - - - - - - - - - - - - - - - - - - - - - - petiole unbranched - - - - - - - - - - - - - - - - - - - - - - - - trichome ornamentation - - - - - - - - - - - - - - - - - - - - - - - - trichome surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - whole plant broken - - - - - - - - - - - - - - - - - - - - - - - - fruit cleft - - - - - - - - - - - - - - - - - - - - - - - - tepal concave - - - - - - - - - - - - - - - - - - - - - - - - heartwood inserted into - - - - - - - - - - - - - - - - - - - - - - - - heartwood position - - - - - - - - - - - - - - - - - - - - - - - - stipule hispid - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis simple - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis complexity - - - - - - - - - - - - - - - - - - - - - - - - stalk dense - - - - - - - - - - - - - - - - - - - - - - - - stalk mass density - - - - - - - - - - - - - - - - - - - - - - - - coma oblong - - - - - - - - - - - - - - - - - - - - - - - - style dark purple - - - - - - - - - - - - - - - - - - - - - - - - fruit attached to - - - - - - - - - - - - - - - - - - - - - - - - integument fleshy - - - - - - - - - - - - - - - - - - - - - - - - integument composition - - - - - - - - testa up - true - - - - - - - - - - - - - - - - - - - - - - - - testa direction - - - - - - - - - - - - - - - - - - - - - - - - petiole orange - - - - - - - - - - - - - - - - - - - - - - - - stem punctate - - - - - - - - - - - - - - - - - - - - - - - - stolon opposite - - - - - - - - - - - - - - - - - - - - - - - - stolon position - - - - - - - - - - - - - - - - - - - - - - - - root tip cuneate - - - - - - - - - - - - - - - - - - - - - - - - costa antrorse - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle circular - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein alternate placement - - - - - - - - - - - - - - - - - - - - - - - - valve oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - juice sac dentated - - - - - - - - - - - - - - - - - - - - - - - - juice sac shape - - - - - - - - - - - - - - - - - - - - - - - - locule whole - - - - - - - - - - - - - - - - - - - - - - - - locule wholeness - - - - - - - - - - - - - - - - - - - - - - - - heartwood pedicellate - - - - - - - - - - - - - - - - - - - - - - - - heartwood attachment quality - - - - - - - - - - - - - - - - - - - - - - - - bracteole sunken - - - - - - - - - - - - - - - - - - - - - - - - bracteole elevation - - - - - - - - - - - - - - - - - - - - - - - - upper glume green - - - - - - - - - - - - - - - - - - - - - - - - upper glume color - - - - - - - - - - - - - - - - - - - - - - - - pericarp orange - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge subulate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge shape - - - - - - - - - - - - - - - - - - - - - - - - staminode spotted - - - - - - - - - - - - - - - - - - - - - - - - staminode color pattern - - - - - - - - - - - - - - - - - - - - - - - - fruit yellow orange - - - - - - - - - - - - - - - - - - - - - - - - phloem cut - - - - - - - - - - - - - - - - - - - - - - - - phloem shape - - - - - - - - - - - - - - - - - - - - - - - - stipule spherical - - - - - - - - - - - - - - - - - - - - - - - - filament recurved - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle symmetrical - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle symmetry - - - - - - - - - - - - - - - - - - - - - - - - bracteole warty - - - - - - - - - - - - - - - - - - - - - - - - staminode arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - central zone prominent - - - - - - - - - - - - - - - - - - - - - - - - receptacle horizontal - - - - - - - - - - - - - - - - - - - - - - - - pericarp dorsal to - - - - - - - - - - - - - - - - - - - - - - - - valve axial to - - - - - - - - - - - - - - - - - - - - - - - - aril prominent - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root purple - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root color - - - - - - - - - - - - - - - - - - - - - - - - stigma angular - - - - - - - - - - - - - - - - - - - - - - - - fruit flexible - - - - - - - - - - - - - - - - - - - - - - - - fruit flexibility - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue recurved - - - - - - - - - - - - - - - - - - - - - - - - anther theca circular - - - - - - - - - - - - - - - - - - - - - - - - calyx adjacent to - - - - - - - - - - - - - - - - - - - - - - - - filament tubular - - - - - - - - - - - - - - - - - - - - - - - - flower ridged - - - - - - - - - - - - - - - - - - - - - - - - awn separated from - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell pubescent - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell maturity - - - - - - - - - - - - - - - - - - - - - - - - funicle dark brown - - - - - - - - - - - - - - - - - - - - - - - - hydathode adaxial to - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - stalk striated - - - - - - - - - - - - - - - - - - - - - - - - stem spherical - - - - - - - - - - - - - - - - - - - - - - - - inflorescence prostrate - - - - - - - - - - - - - - - - - - - - - - - - leaf axil obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf axil 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - axil distal to - - - - - - - - - - - - - - - - - - - - - - - - axil decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - axil water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf fertile - - - - - - - - - - - - - - - - - - - - - - - - involucre purple - - - - - - - - - - - - - - - - - - - - - - - - trichome heart shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system inserted into - - - - - - - - - - - - - - - - - - - - - - - - filament revolute - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath herbaceous - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath shedability - - - - - - - - - - - - - - - - - - - - - - - - hilum rugose - - - - - - - - - - - - - - - - - - - - - - - - hilum surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - infructescence pedicellate - - - - - - - - - - - - - - - - - - - - - - - - infructescence attachment quality - - - - - - - - - - - - - - - - - - - - - - - - perianth exposed - - - - - - - - - - - - - - - - - - - - - - - - exocarp decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - exocarp water composition - - - - - - - - - - - - - - - - - - - - - - - - ovary wall sigmoid - - - - - - - - - - - - - - - - - - - - - - - - pollen spiny - - - - - - - - - - - - - - - - - - - - - - - - pollen surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - testa orange - - - - - - - - - - - - - - - - - - - - - - - - peristome deep pink - - - - - - - - - - - - - - - - - - - - - - - - style sigmoid - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus tomentose - - - - - - - - - - - - - - - - - - - - - - - - papilla cell lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tubercle attenuate - - - - - - - - - - - - - - - - - - - - - - - - style drooping - - - - - - - - - - - - - - - - - - - - - - - - peduncle flat - - - - - - - - - - - - - - - - - - - - - - - - sporangium folded - - - - - - - - - - - - - - - - - - - - - - - - sporangium surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence aggregated - - - - - - - - - - - - - - - - - - - - - - - - shoot system spherical - - - - - - - - - - - - - - - - - - - - - - - - shoot system convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - perianth conical - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle offset - - - - - - - - - - - - - - - - - - - - - - - - tuber furrowed - - - - - - - - - - - - - - - - - - - - - - - - tuber texture - - - - - - - - - - - - - - - - - - - - - - - - fruit branched - - - - - - - - - - - - - - - - - - - - - - - - areole bud bifurcated - - - - - - - - - - - - - - - - - - - - - - - - areole bud branchiness - - - - - - - - stem hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence symmetrical - - - - - - - - - - - - - - - - - - - - - - - - inflorescence symmetry - - - - - - - - - - - - - - - - - - - - - - - - sepal simple - - - - - - - - - - - - - - - - - - - - - - - - sepal complexity - - - - - - - - - - - - - - - - - - - - - - - - corolla hollow - - - - - - - - - - - - - - - - - - - - - - - - petiole fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - fruit tubular - - - - - - - - - - - - - - - - - - - - - - - - anther obovate - - - - - - - - - - - - - - - - - - - - - - - - fruit spheroid - - - - - - - - - - - - - - - - - - - - - - - - inflorescence mixed - - - - - - - - - - - - - - - - - - - - - - - - bract dense - - - - - - - - - - - - - - - - - - - - - - - - bract mass density - - - - - - - - - - - - - - - - - - - - - - - - stipule fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf base square - - - - - - - - - - - - - - - - - - - - - - - - whole plant retuse - - - - - - - - - - - - - - - - - - - - - - - - cortex brown - - - - - - - - - - - - - - - - - - - - - - - - peristome vertical - - - - - - - - - - - - - - - - - - - - - - - - peristome spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - sorus sunken - - - - - - - - - - - - - - - - - - - - - - - - sorus elevation - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle spongy - - - - - - - - - - - - - - - - - - - - - - - - androecium decreased amount - - - - - - - - - - - - - - - - - - - - - - - - androecium amount - - - - - - - - - - - - - - - - - - - - - - - - leaflet rough - - - - - - - - - - - - - - - - - - - - - - - - gynoecium absent - - - - - - - - - - - - - - - - - - - - - - - - radicle convex - - - - - - - - - - - - - - - - - - - - - - - - radicle concavity - - - - - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber phenotype - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber herbaceous - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber shedability - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet prominent - - - - - - - - - - - - - - - - - - - - - - - - glume simple - - - - - - - - - - - - - - - - - - - - - - - - glume complexity - - - - - - - - - - - - - - - - - - - - - - - - hydathode cuneate - - - - - - - - - - - - - - - - - - - - - - - - hydathode 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf matted - - - - - - - - - - - - - - - - - - - - - - - - stem yellow brown - - - - - - - - - - - - - - - - - - - - - - - - aril dilated - - - - - - - - - - - - - - - - - - - - - - - - androecium triangular - - - - - - - - - - - - - - - - - - - - - - - - stele simple - - - - - - - - - - - - - - - - - - - - - - - - stele complexity - - - - - - - - - - - - - - - - - - - - - - - - petiole conical - - - - - - - - - - - - - - - - - - - - - - - - style retuse - - - - - - - - - - - - - - - - - - - - - - - - peduncle increased size - - - - - - - - - - - - - - - - - - - - - - - - stipule increased thickness - - - - - - - - - - - - - - - - - - - - - - - - infructescence elliptic - - - - - - - - - - - - - - - - - - - - - - - - bract cupulate - - - - - - - - - - - - - - - - - - - - - - - - peduncle congested - - - - - - - - - - - - - - - - - - - - - - - - stalk red - - - - - - - - - - - - - - - - - - - - - - - - areole bud undulate - - - - - - - - - - - - - - - - - - - - - - - - banner petal falciform - - - - - - - - - - - - - - - - - - - - - - - - leaflet flattened - - - - - - - - - - - - - - - - - - - - - - - - leaflet curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath triangular - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - scutellar node ovate - - - - - - - - - - - - - - - - - - - - - - - - seed displaced to - - - - - - - - - - - - - - - - - - - - - - - - seed orientation - - - - - - - - - - - - - - - - - - - - - - - - coma adaxial to - - - - - - - - - - - - - - - - - - - - - - - - gynoecium erect - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf bifurcated - - - - - - - - - - - - - - - - - - - - - - - - lamina separated from - - - - - - - - - - - - - - - - - - - - - - - - style violet - - - - - - - - - - - - - - - - - - - - - - - - receptacle swollen - - - - - - - - - - - - - - - - - - - - - - - - tepal cupulate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus cylindrical - - - - - - - - - - - - - - - - - - - - - - - - anther orbicular - - - - - - - - - - - - - - - - - - - - - - - - style present - - - - - - - - - - - - - - - - - - - - - - - - epidermis grooved - - - - - - - - - - - - - - - - - - - - - - - - pappus mixed - - - - - - - - - - - - - - - - - - - - - - - - pappus composition - - - - - - - - - - - - - - - - - - - - - - - - rhizome overlapping - - - - - - - - - - - - - - - - - - - - - - - - awn recurved - - - - - - - - - - - - - - - - - - - - - - - - seta recurved - - - - - - - - - - - - - - - - - - - - - - - - leaflet coating - - - - - - - - - - - - - - - - - - - - - - - - stem revolute - - - - - - - - - - - - - - - - - - - - - - - - bracteole divergent from - - - - - - - - - - - - - - - - - - - - - - - - resin canal attenuate - - - - - - - - - - - - - - - - - - - - - - - - resin canal sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaflet wrinkled - - - - - - - - - - - - - - - - - - - - - - - - fruit asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - ovary wall present - - - - - - - - - - - - - - - - - - - - - - - - seed fused with - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system increased thickness - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system thickness - - - - - - - - - - - - - - - - - - - - - - - - cotyledon heart shaped - - - - - - - - - - - - - - - - - - - - - - - - cotyledon concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lenticel foveate - - - - - - - - - - - - - - - - - - - - - - - - tubercle striated - - - - - - - - - - - - - - - - - - - - - - - - leaf base triangular - - - - - - - - - - - - - - - - - - - - - - - - pistillode clavate - - - - - - - - - - - - - - - - - - - - - - - - stigma revolute - - - - - - - - - - - - - - - - - - - - - - - - glume laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - involucre concave - - - - - - - - - - - - - - - - - - - - - - - - endosperm attached to - - - - - - - - - - - - - - - - - - - - - - - - endosperm attachment quality - - - - - - - - - - - - - - - - - - - - - - - - plant callus hairy - - - - - - - - - - - - - - - - - - - - - - - - locule conical - - - - - - - - - - - - - - - - - - - - - - - - petal recurved - - - - - - - - - - - - - - - - - - - - - - - - lower glume attenuate - - - - - - - - - - - - - - - - - - - - - - - - cortex mature - - - - - - - - - - - - - - - - - - - - - - - - cortex maturity - - - - - - - - - - - - - - - - - - - - - - - - keel spongy - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system retuse - - - - - - - - - - - - - - - - - - - - - - - - root orange - - - - - - - - - - - - - - - - - - - - - - - - anther tubular - - - - - - - - - - - - - - - - - - - - - - - - endosperm elongated - - - - - - - - - - - - - - - - - - - - - - - - tepal glandular - - - - - - - - - - - - - - - - - - - - - - - - tepal morphology - - - - - - - - - - - - - - - - - - - - - - - - peristome tubular - - - - - - - - - - - - - - - - - - - - - - - - tepal pubescent - - - - - - - - - - - - - - - - - - - - - - - - tepal maturity - - - - - - - - - - - - - - - - - - - - - - - - cotyledon decreased amount - - - - - - - - - - - - - - - - - - - - - - - - cotyledon amount - - - - - - - - stigma down - true - - - - - - - - - - - - - - - - - - - - - - - - oil gland decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium kinked - - - - - - - - - - - - - - - - - - - - - - - - rhizome width - - - - - - - - - - - - - - - - - - - - - - - - whole plant alternate placement - - - - - - - - - - - - - - - - - - - - - - - - whole plant decreased amount - - - - - - - - - - - - - - - - - - - - - - - - whole plant amount - - - - - - - - - - - - - - - - - - - - - - - - valve hispid - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril water composition - - - - - - - - petal female - - true - - - - - - - - - - - - - - - - - - - - - - - - corolla sparse - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence bifurcated - - - - - - - - - - - - - - - - - - - - - - - - petiole setose - - - - - - - - - - - - - - - - - - - - - - - - inflorescence spongy - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue tubular - - - - - - - - - - - - - - - - - - - - - - - - petiole margin cuneate - - - - - - - - - - - - - - - - - - - - - - - - corolla yellow orange - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal pinnate - - - - - - - - - - - - - - - - - - - - - - - - leaf recurved - - - - - - - - - - - - - - - - - - - - - - - - stamen cupulate - - - - - - - - - - - - - - - - - - - - - - - - seta glabrous - - - - - - - - - - - - - - - - - - - - - - - - seta pilosity - - - - - - - - - - - - - - - - - - - - - - - - sepal slit-like - - - - - - - - - - - - - - - - - - - - - - - - perianth star shaped - - - - - - - - - - - - - - - - - - - - - - - - root tip flattened - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf dentated - - - - - - - - - - - - - - - - - - - - - - - - perianth width - - - - - - - - - - - - - - - - - - - - - - - - lemma acuminate - - - - - - - - - - - - - - - - - - - - - - - - receptacle firm - - - - - - - - - - - - - - - - - - - - - - - - receptacle hardness - - - - - - - - - - - - - - - - - - - - - - - - banner petal retuse - - - - - - - - - - - - - - - - - - - - - - - - style distance - - - - - - - - - - - - - - - - - - - - - - - - endocarp pink - - - - - - - - - - - - - - - - - - - - - - - - root firm - - - - - - - - - - - - - - - - - - - - - - - - root hardness - - - - - - - - - - - - - - - - - - - - - - - - stem parallel to - - - - - - - - - - - - - - - - - - - - - - - - sepal sigmoid - - - - - - - - - - - - - - - - - - - - - - - - testa fused with - - - - - - - - - - - - - - - - - - - - - - - - locule simple - - - - - - - - - - - - - - - - - - - - - - - - locule complexity - - - - - - - - - - - - - - - - - - - - - - - - epidermis acuminate - - - - - - - - - - - - - - - - - - - - - - - - raphe pink - - - - - - - - - - - - - - - - - - - - - - - - bracteole sharp - - - - - - - - - - - - - - - - - - - - - - - - growth ring decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - growth ring water composition - - - - - - - - - - - - - - - - - - - - - - - - infructescence watery - - - - - - - - - - - - - - - - - - - - - - - - infructescence composition - - - - - - - - - - - - - - - - - - - - - - - - disk flower pedicellate - - - - - - - - - - - - - - - - - - - - - - - - disk flower attachment quality - - - - - - - - - - - - - - - - - - - - - - - - spikelet bilobed - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus striated - - - - - - - - - - - - - - - - - - - - - - - - banner petal curved - - - - - - - - - - - - - - - - - - - - - - - - banner petal curvature - - - - - - - - - - - - - - - - - - - - - - - - carpel multiple - - - - - - - - - - - - - - - - - - - - - - - - testa exposed - - - - - - - - - - - - - - - - - - - - - - - - involucre opposite - - - - - - - - - - - - - - - - - - - - - - - - receptacle coiled - - - - - - - - - - - - - - - - - - - - - - - - receptacle coiling - - - - - - - - - - - - - - - - - - - - - - - - oil gland oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - pappus scalloped - - - - - - - - - - - - - - - - - - - - - - - - placenta pressure - - - - - - - - - - - - - - - - - - - - - - - - style sterile - - - - - - - - - - - - - - - - - - - - - - - - hypanthium fused with - - - - - - - - - - - - - - - - - - - - - - - - leaflet furrowed - - - - - - - - - - - - - - - - - - - - - - - - fruit decurrent - - - - - - - - - - - - - - - - - - - - - - - - receptacle quadrangular - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein kinked - - - - - - - - - - - - - - - - - - - - - - - - lamina elongated - - - - - - - - - - - - - - - - - - - - - - - - staminode pink - - - - - - - - - - - - - - - - - - - - - - - - heartwood convex - - - - - - - - - - - - - - - - - - - - - - - - heartwood concavity - - - - - - - - - - - - - - - - - - - - - - - - sepal kinked - - - - - - - - - - - - - - - - - - - - - - - - plant callus smooth - - - - - - - - - - - - - - - - - - - - - - - - pith diameter - - - - - - - - - - - - - - - - - - - - - - - - glume light brown - - - - - - - - - - - - - - - - - - - - - - - - peduncle emarginate - - - - - - - - - - - - - - - - - - - - - - - - keel translucent - - - - - - - - - - - - - - - - - - - - - - - - keel opacity - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue leaf-like - - - - - - - - - - - - - - - - - - - - - - - - radicle displaced to - - - - - - - - - - - - - - - - - - - - - - - - radicle orientation - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf branched - - - - - - - - - - - - - - - - - - - - - - - - apical hook autogenous - - - - - - - - - - - - - - - - - - - - - - - - connective protruding - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis smooth - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis texture - - - - - - - - - - - - - - - - - - - - - - - - petal deep pink - - - - - - - - - - - - - - - - - - - - - - - - corolla revolute - - - - - - - - - - - - - - - - - - - - - - - - carpel truncated - - - - - - - - - - - - - - - - - - - - - - - - anther coiling - - - - - - - - - - - - - - - - - - - - - - - - oil gland increased length - - - - - - - - - - - - - - - - - - - - - - - - oil gland length - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence basal to - - - - - - - - - - - - - - - - - - - - - - - - style fusiform - - - - - - - - - - - - - - - - - - - - - - - - fruit concealed by - - - - - - - - - - - - - - - - - - - - - - - - upper glume exposed - - - - - - - - - - - - - - - - - - - - - - - - shoot apex decussate - - - - - - - - - - - - - - - - - - - - - - - - papilla cell convex - - - - - - - - - - - - - - - - - - - - - - - - papilla cell concavity - - - - - - - - - - - - - - - - - - - - - - - - branch green - - - - - - - - - - - - - - - - - - - - - - - - plumule pubescent - - - - - - - - - - - - - - - - - - - - - - - - plumule maturity - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member basal to - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue spatulate - - - - - - - - - - - - - - - - - - - - - - - - bract transparent - - - - - - - - - - - - - - - - - - - - - - - - bract opacity - - - - - - - - - - - - - - - - - - - - - - - - hilum decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - hilum thickness - - - - - - - - - - - - - - - - - - - - - - - - bract pedunculate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence time - - - - - - - - - - - - - - - - - - - - - - - - rhizome sinuous - - - - - - - - - - - - - - - - - - - - - - - - lemma dorsal to - - - - - - - - - - - - - - - - - - - - - - - - lenticel tomentose - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure pinnate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell swollen - - - - - - - - - - - - - - - - - - - - - - - - sheath cell structure - - - - - - - - - - - - - - - - - - - - - - - - leaf bronze - - - - - - - - - - - - - - - - - - - - - - - - pappus inflexible - - - - - - - - - - - - - - - - - - - - - - - - pappus flexibility - - - - - - - - - - - - - - - - - - - - - - - - petal ventral to - - - - - - - - - - - - - - - - - - - - - - - - costa elliptic - - - - - - - - - - - - - - - - - - - - - - - - pollen area - - - - - - - - - - - - - - - - - - - - - - - - peristome pointed - - - - - - - - - - - - - - - - - - - - - - - - peristome sharpness - - - - - - - - - - - - - - - - - - - - - - - - anther convex - - - - - - - - - - - - - - - - - - - - - - - - prickle bifurcated - - - - - - - - - - - - - - - - - - - - - - - - prickle branchiness - - - - - - - - - - - - - - - - - - - - - - - - anther coiled - - - - - - - - - - - - - - - - - - - - - - - - leaf concave - - - - - - - - - - - - - - - - - - - - - - - - awn basal to - - - - - - - - - - - - - - - - - - - - - - - - awn position - - - - - - - - - - - - - - - - - - - - - - - - seta obovate - - - - - - - - - - - - - - - - - - - - - - - - bract dispersed - - - - - - - - - - - - - - - - - - - - - - - - endocarp ligneous - - - - - - - - - - - - - - - - - - - - - - - - sepal rough - - - - - - - - - - - - - - - - - - - - - - - - endocarp absent - - - - - - - - - - - - - - - - - - - - - - - - endocarp amount - - - - - - - - - - - - - - - - - - - - - - - - involucre pedunculate - - - - - - - - - - - - - - - - - - - - - - - - lamina constricted - - - - - - - - - - - - - - - - - - - - - - - - stamen alternate placement - - - - - - - - - - - - - - - - - - - - - - - - central zone glistening - - - - - - - - - - - - - - - - - - - - - - - - central zone reflectivity - - - - - - - - - - - - - - - - - - - - - - - - canal abaxial to - - - - - - - - - - - - - - - - - - - - - - - - sepal oblique to - - - - - - - - - - - - - - - - - - - - - - - - pericarp punctate - - - - - - - - - - - - - - - - - - - - - - - - scutellar node pedicellate - - - - - - - - - - - - - - - - - - - - - - - - scutellar node attachment quality - - - - - - - - - - - - - - - - - - - - - - - - rhizome superficial - - - - - - - - - - - - - - - - - - - - - - - - glume leaf-like - - - - - - - - - - - - - - - - - - - - - - - - bud involute - - - - - - - - - - - - - - - - - - - - - - - - lenticel dispersed - - - - - - - - - - - - - - - - - - - - - - - - banner petal cupulate - - - - - - - - - - - - - - - - - - - - - - - - stamen slender - - - - - - - - - - - - - - - - - - - - - - - - stalk axial to - - - - - - - - - - - - - - - - - - - - - - - - filament split - - - - - - - - - - - - - - - - - - - - - - - - pedicel cuneate - - - - - - - - - - - - - - - - - - - - - - - - perianth inflated - - - - - - - - - - - - - - - - - - - - - - - - perianth structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - inflorescence zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin symmetry - - - - - - - - - - - - - - - - - - - - - - - - placenta erect - - - - - - - - - - - - - - - - - - - - - - - - placenta position - - - - - - - - - - - - - - - - - - - - - - - - columella tripartite - - - - - - - - - - - - - - - - - - - - - - - - columella concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - tubercle divergent from - - - - - - - - - - - - - - - - - - - - - - - - petiole hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - petiole volume - - - - - - - - - - - - - - - - - - - - - - - - epidermis inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - aril elliptic - - - - - - - - - - - - - - - - - - - - - - - - aril 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - aril flattened - - - - - - - - - - - - - - - - - - - - - - - - sheath cell opposite - - - - - - - - - - - - - - - - - - - - - - - - sorus obovate - - - - - - - - - - - - - - - - - - - - - - - - sorus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet divergent from - - - - - - - - - - - - - - - - - - - - - - - - petiole crowded - - - - - - - - - - - - - - - - - - - - - - - - trichome inserted into - - - - - - - - - - - - - - - - - - - - - - - - branch elongated - - - - - - - - - - - - - - - - - - - - - - - - peduncle rough - - - - - - - - - - - - - - - - - - - - - - - - calyx indurated - - - - - - - - - - - - - - - - - - - - - - - - petiolule articulated with - - - - - - - - - - - - - - - - - - - - - - - - banner petal divergent from - - - - - - - - - - - - - - - - - - - - - - - - gynoecium actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - gynoecium radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell ornamentation - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - bark decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - bark water composition - - - - - - - - - - - - - - - - - - - - - - - - lenticel linear - - - - - - - - - - - - - - - - - - - - - - - - stipule brown - - - - - - - - - - - - - - - - - - - - - - - - calyx elongated - - - - - - - - - - - - - - - - - - - - - - - - style star shaped - - - - - - - - - - - - - - - - - - - - - - - - fruit viscous - - - - - - - - - - - - - - - - - - - - - - - - fruit viscosity - - - - - - - - - - - - - - - - - - - - - - - - stem pointed - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus warty - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus texture - - - - - - - - - - - - - - - - - - - - - - - - sorus absent - - - - - - - - - - - - - - - - - - - - - - - - tubercle sparse - - - - - - - - - - - - - - - - - - - - - - - - tubercle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - filament bifurcated - - - - - - - - - - - - - - - - - - - - - - - - pollen mature - - - - - - - - - - - - - - - - - - - - - - - - pollen maturity - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member prominent - - - - - - - - - - - - - - - - - - - - - - - - epicalyx decreased amount - - - - - - - - - - - - - - - - - - - - - - - - raphe perpendicular to - - - - - - - - leaf axil male - true - - - - - - - - - - - - - - - - - - - - - - - - root white - - - - - - - - - - - - - - - - - - - - - - - - fruit recurved - - - - - - - - - - - - - - - - - - - - - - - - bract arched - - - - - - - - - - - - - - - - - - - - - - - - stamen pointed - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system spherical - - - - - - - - - - - - - - - - - - - - - - - - oil gland glandular - - - - - - - - - - - - - - - - - - - - - - - - oil gland morphology - - - - - - - - - - - - - - - - - - - - - - - - epidermis glistening - - - - - - - - - - - - - - - - - - - - - - - - epidermis reflectivity - - - - - - - - leaf rachis up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis direction - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle transparent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle opacity - - - - - - - - - - - - - - - - - - - - - - - - peduncle punctate - - - - - - - - - - - - - - - - - - - - - - - - stalk swollen - - - - - - - - - - - - - - - - - - - - - - - - root tip basal to - - - - - - - - - - - - - - - - - - - - - - - - carpel red - - - - - - - - - - - - - - - - - - - - - - - - leaf circumference - - - - - - - - - - - - - - - - - - - - - - - - petiole margin notched - - - - - - - - - - - - - - - - - - - - - - - - inflorescence concealed - - - - - - - - - - - - - - - - - - - - - - - - pedicel glistening - - - - - - - - - - - - - - - - - - - - - - - - pedicel reflectivity - - - - - - - - - - - - - - - - - - - - - - - - anther brown - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle ventral to - - - - - - - - - - - - - - - - - - - - - - - - pollen raised - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system raised - - - - - - - - - - - - - - - - - - - - - - - - rhizome ridged - - - - - - - - - - - - - - - - - - - - - - - - flower robust - - - - - - - - - - - - - - - - - - - - - - - - prickle hispid - - - - - - - - - - - - - - - - - - - - - - - - rhizome pinnate - - - - - - - - - - - - - - - - - - - - - - - - spikelet crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system increased length - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system length - - - - - - - - - - - - - - - - - - - - - - - - peduncle orange - - - - - - - - - - - - - - - - - - - - - - - - keel circular - - - - - - - - - - - - - - - - - - - - - - - - raphe dorsal to - - - - - - - - - - - - - - - - - - - - - - - - heartwood ochre - - - - - - - - - - - - - - - - - - - - - - - - bud dark purple - - - - - - - - - - - - - - - - - - - - - - - - radicle closed - - - - - - - - - - - - - - - - - - - - - - - - radicle closure - - - - - - - - - - - - - - - - - - - - - - - - corolla domed - - - - - - - - - - - - - - - - - - - - - - - - petal swollen - - - - - - - - - - - - - - - - - - - - - - - - connective obtuse - - - - - - - - - - - - - - - - - - - - - - - - thorn smooth - - - - - - - - - - - - - - - - - - - - - - - - thorn texture - - - - - - - - - - - - - - - - - - - - - - - - androecium angular - - - - - - - - - - - - - - - - - - - - - - - - keel dark green - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell striated - - - - - - - - - - - - - - - - - - - - - - - - tuber grey - - - - - - - - - - - - - - - - - - - - - - - - pericarp surrounding - - - - - - - - - - - - - - - - - - - - - - - - raphe obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf trumpet-shaped - - - - - - - - - - - - - - - - - - - - - - - - stem setose - - - - - - - - - - - - - - - - - - - - - - - - aril dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petiole normal - - - - - - - - - - - - - - - - - - - - - - - - petiole deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - petiole margin lateral to - - - - - - - - - - - - - - - - - - - - - - - - rhizome black - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus angular - - - - - - - - - - - - - - - - - - - - - - - - bract curved - - - - - - - - - - - - - - - - - - - - - - - - receptacle tapered - - - - - - - - - - - - - - - - - - - - - - - - plant cell brittle - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein increased length - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein length - - - - - - - - - - - - - - - - - - - - - - - - spikelet striated - - - - - - - - - - - - - - - - - - - - - - - - hilum attached to - - - - - - - - - - - - - - - - - - - - - - - - hilum attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaflet convex - - - - - - - - - - - - - - - - - - - - - - - - hilum orange - - - - - - - - - - - - - - - - - - - - - - - - upper glume setose - - - - - - - - - - - - - - - - - - - - - - - - rhizome yellow brown - - - - - - - - - - - - - - - - - - - - - - - - pith capacitance - - - - - - - - - - - - - - - - - - - - - - - - placenta orange - - - - - - - - - - - - - - - - - - - - - - - - placenta color - - - - - - - - - - - - - - - - - - - - - - - - stigma abaxial to - - - - - - - - - - - - - - - - - - - - - - - - stipule curved - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle brittle - - - - - - - - - - - - - - - - - - - - - - - - leaf evergreen (plant) - - - - - - - - petal hermaphrodite - - true - - - - - - - - - - - - - - - - - - - - - - - - sepal adaxial to - - - - - - - - - - - - - - - - - - - - - - - - anther retuse - - - - - - - - style acute - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis terminal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis position - - - - - - - - - - - - - - - - - - - - - - - - connective elliptic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis attached to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stem cut - - - - - - - - - - - - - - - - - - - - - - - - stamen straight - - - - - - - - - - - - - - - - - - - - - - - - petal violet - - - - - - - - - - - - - - - - - - - - - - - - valve smooth - - - - - - - - - - - - - - - - - - - - - - - - pappus whorled - - - - - - - - - - - - - - - - - - - - - - - - pappus spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - raphe present - - - - - - - - - - - - - - - - - - - - - - - - raphe amount - - - - - - - - - - - - - - - - - - - - - - - - upper glume sterile - - - - - - - - - - - - - - - - - - - - - - - - upper glume fertility - - - - - - - - - - - - - - - - - - - - - - - - hypanthium oblique to - - - - - - - - - - - - - - - - - - - - - - - - receptacle symmetrical - - - - - - - - - - - - - - - - - - - - - - - - receptacle symmetry - - - - - - - - - - - - - - - - - - - - - - - - spikelet soft - - - - - - - - - - - - - - - - - - - - - - - - spikelet hardness - - - - - - - - - - - - - - - - - - - - - - - - fruit cut - - - - - - - - - - - - - - - - - - - - - - - - filament furrowed - - - - - - - - - - - - - - - - - - - - - - - - bract oblong - - - - - - - - - - - - - - - - - - - - - - - - stamen kinked - - - - - - - - - - - - - - - - - - - - - - - - whole plant adhesive - - - - - - - - - - - - - - - - - - - - - - - - whole plant adhesivity - - - - - - - - - - - - - - - - - - - - - - - - hilum lanceolate - - - - - - - - - - - - - - - - - - - - - - - - glume conical - - - - - - - - - - - - - - - - - - - - - - - - cotyledon cylindrical - - - - - - - - - - - - - - - - - - - - - - - - bract umbonate - - - - - - - - - - - - - - - - - - - - - - - - corolla back - - - - - - - - - - - - - - - - - - - - - - - - stigma in contact with - - - - - - - - central spike of tassel inflorescence premature - true - - - - - - - - central spike of tassel inflorescence onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus triangular - - - - - - - - - - - - - - - - - - - - - - - - lower glume cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - lower glume composition - - - - - - - - - - - - - - - - - - - - - - - - bulb erect - - - - - - - - - - - - - - - - - - - - - - - - petiole coiled - - - - - - - - - - - - - - - - - - - - - - - - petiole coiling - - - - - - - - - - - - - - - - - - - - - - - - tepal green - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus serrated - - - - - - - - - - - - - - - - - - - - - - - - thorn furrowed - - - - - - - - - - - - - - - - - - - - - - - - spikelet open - - - - - - - - - - - - - - - - - - - - - - - - spikelet closure - - - - - - - - - - - - - - - - - - - - - - - - leaf right - - - - - - - - - - - - - - - - - - - - - - - - inflorescence granular - - - - - - - - - - - - - - - - - - - - - - - - branch coating - - - - - - - - whole plant up - true - - - - - - - - - - - - - - - - - - - - - - - - whole plant direction - - - - - - - - - - - - - - - - - - - - - - - - stipel spatulate - - - - - - - - - - - - - - - - - - - - - - - - ligule prominent - - - - - - - - - - - - - - - - - - - - - - - - disk flower tubular - - - - - - - - - - - - - - - - - - - - - - - - trichome falciform - - - - - - - - - - - - - - - - - - - - - - - - corolla multicellular - - - - - - - - - - - - - - - - - - - - - - - - corolla cellularity - - - - - - - - - - - - - - - - - - - - - - - - keel red brown - - - - - - - - - - - - - - - - - - - - - - - - stem articulated with - - - - - - - - - - - - - - - - - - - - - - - - bark lobed - - - - - - - - - - - - - - - - - - - - - - - - stipule cuspidate - - - - - - - - - - - - - - - - - - - - - - - - lamina dorsal to - - - - - - - - - - - - - - - - - - - - - - - - calyx pigmented - - - - - - - - - - - - - - - - - - - - - - - - calyx degree of pigmentation - - - - - - - - - - - - - - - - - - - - - - - - valve ventral to - - - - - - - - - - - - - - - - - - - - - - - - tepal sterile - - - - - - - - - - - - - - - - - - - - - - - - tepal fertility - - - - - - - - - - - - - - - - - - - - - - - - peduncle concave - - - - - - - - - - - - - - - - - - - - - - - - connective symmetrical - - - - - - - - - - - - - - - - - - - - - - - - connective symmetry - - - - - - - - - - - - - - - - - - - - - - - - peduncle reniform - - - - - - - - - - - - - - - - - - - - - - - - peduncle concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed clavate - - - - - - - - - - - - - - - - - - - - - - - - locule glabrous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge brittle - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge structure - - - - - - - - - - - - - - - - - - - - - - - - thorn divergent from - - - - - - - - - - - - - - - - - - - - - - - - exocarp concave - - - - - - - - - - - - - - - - - - - - - - - - exocarp concavity - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal sterile - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal fertility - - - - - - - - - - - - - - - - - - - - - - - - rhizome well differentiated - - - - - - - - - - - - - - - - - - - - - - - - rhizome cellular potency - - - - - - - - - - - - - - - - - - - - - - - - epicalyx ovate - - - - - - - - - - - - - - - - - - - - - - - - anther white - - - - - - - - - - - - - - - - - - - - - - - - sepal exserted - - - - - - - - - - - - - - - - - - - - - - - - seed trichome cut - - - - - - - - - - - - - - - - - - - - - - - - bark flat - - - - - - - - - - - - - - - - - - - - - - - - stigma folded - - - - - - - - - - - - - - - - - - - - - - - - stigma surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - spikelet attached to - - - - - - - - - - - - - - - - - - - - - - - - carpel linear - - - - - - - - - - - - - - - - - - - - - - - - lower glume autogenous - - - - - - - - - - - - - - - - - - - - - - - - peduncle curved - - - - - - - - - - - - - - - - - - - - - - - - spikelet inserted into - - - - - - - - - - - - - - - - - - - - - - - - prickle oblong - - - - - - - - - - - - - - - - - - - - - - - - testa punctate - - - - - - - - - - - - - - - - - - - - - - - - perianth punctate - - - - - - - - - - - - - - - - - - - - - - - - root tip dorsal to - - - - - - - - placenta hermaphrodite - true - - - - - - - - placenta phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - scutellar node viscous - - - - - - - - - - - - - - - - - - - - - - - - scutellar node viscosity - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore bifurcated - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore branchiness - - - - - - - - - - - - - - - - - - - - - - - - stigma open - - - - - - - - - - - - - - - - - - - - - - - - stigma closure - - - - - - - - - - - - - - - - - - - - - - - - epicalyx glandular - - - - - - - - - - - - - - - - - - - - - - - - epicalyx morphology - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member swollen - - - - - - - - - - - - - - - - - - - - - - - - ovary wall warty - - - - - - - - - - - - - - - - - - - - - - - - epidermis dense - - - - - - - - - - - - - - - - - - - - - - - - epidermis mass density - - - - - - - - - - - - - - - - - - - - - - - - androecium lobed - - - - - - - - - - - - - - - - - - - - - - - - style time - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle slender - - - - - - - - - - - - - - - - - - - - - - - - stamen terminal - - - - - - - - - - - - - - - - - - - - - - - - stigma heart shaped - - - - - - - - - - - - - - - - - - - - - - - - fruit time - - - - - - - - - - - - - - - - - - - - - - - - keel subulate - - - - - - - - - - - - - - - - - - - - - - - - leaf subcircular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence rhomboid - - - - - - - - androecium acute - - true - - - - - - - - - - - - - - - - - - - - - - - - lower glume basal to - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus dispersed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dark red - - - - - - - - - - - - - - - - - - - - - - - - leaf base acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaf base sharpness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member cylindrical - - - - - - - - androecium hermaphrodite - true - - - - - - - - androecium phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - infructescence glandular - - - - - - - - - - - - - - - - - - - - - - - - infructescence morphology - - - - - - - - - - - - - - - - - - - - - - - - leaf margin cuneate - - - - - - - - - - - - - - - - - - - - - - - - heartwood increased thickness - - - - - - - - - - - - - - - - - - - - - - - - bracteole curved - - - - - - - - - - - - - - - - - - - - - - - - bracteole curvature - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet spatulate - - - - - - - - - - - - - - - - - - - - - - - - shoot system simple - - - - - - - - - - - - - - - - - - - - - - - - shoot system complexity - - - - - - - - - - - - - - - - - - - - - - - - lamina glutinous - - - - - - - - - - - - - - - - - - - - - - - - lamina amylose composition - - - - - - - - - - - - - - - - - - - - - - - - pedicel alternate placement - - - - - - - - - - - - - - - - - - - - - - - - style overlapped by - - - - - - - - - - - - - - - - - - - - - - - - raphe convex - - - - - - - - - - - - - - - - - - - - - - - - raphe concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf axil pale pink - - - - - - - - - - - - - - - - - - - - - - - - bud anterior to - - - - - - - - - - - - - - - - - - - - - - - - keel present - - - - - - - - - - - - - - - - - - - - - - - - lower glume erect - - - - - - - - - - - - - - - - - - - - - - - - seed trichome prominent - - - - - - - - - - - - - - - - - - - - - - - - petal caudate - - - - - - - - - - - - - - - - - - - - - - - - costa laminar - - - - - - - - - - - - - - - - - - - - - - - - disk flower symmetrical - - - - - - - - - - - - - - - - - - - - - - - - disk flower symmetry - - - - - - - - - - - - - - - - - - - - - - - - petiolule symmetrical - - - - - - - - - - - - - - - - - - - - - - - - petiolule symmetry - - - - - - - - - - - - - - - - - - - - - - - - gynophore erect - - - - - - - - - - - - - - - - - - - - - - - - stolon obovate - - - - - - - - - - - - - - - - - - - - - - - - stolon convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - endotesta dark brown - - - - - - - - - - - - - - - - - - - - - - - - petal fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - flower red brown - - - - - - - - - - - - - - - - - - - - - - - - awn tubular - - - - - - - - - - - - - - - - - - - - - - - - involucre waxy - - - - - - - - - - - - - - - - - - - - - - - - involucre waxiness - - - - - - - - - - - - - - - - - - - - - - - - bark quadrangular - - - - - - - - - - - - - - - - - - - - - - - - sheath cell autogenous - - - - - - - - - - - - - - - - - - - - - - - - staminode dentated - - - - - - - - - - - - - - - - - - - - - - - - hydathode undulate - - - - - - - - - - - - - - - - - - - - - - - - disk flower striated - - - - - - - - - - - - - - - - - - - - - - - - calyx lobate - - - - - - - - - - - - - - - - - - - - - - - - calyx dark purple - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bilobed - - - - - - - - - - - - - - - - - - - - - - - - coma caudate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell drooping - - - - - - - - - - - - - - - - - - - - - - - - funicle areolate - - - - - - - - - - - - - - - - - - - - - - - - funicle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - corolla ochre - - - - - - - - - - - - - - - - - - - - - - - - bud lobed - - - - - - - - - - - - - - - - - - - - - - - - bract closed - - - - - - - - - - - - - - - - - - - - - - - - heartwood star shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf orange - - - - - - - - - - - - - - - - - - - - - - - - epidermis red brown - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure flattened - - - - - - - - - - - - - - - - - - - - - - - - rhizome elongated - - - - - - - - - - - - - - - - - - - - - - - - pericarp swollen - - - - - - - - - - - - - - - - - - - - - - - - perianth pale pink - - - - - - - - - - - - - - - - - - - - - - - - staminode pedicellate - - - - - - - - - - - - - - - - - - - - - - - - staminode attachment quality - - - - - - - - - - - - - - - - - - - - - - - - keel time - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus star shaped - - - - - - - - - - - - - - - - - - - - - - - - central zone smooth - - - - - - - - - - - - - - - - - - - - - - - - central zone texture - - - - - - - - - - - - - - - - - - - - - - - - keel conical - - - - - - - - - - - - - - - - - - - - - - - - bracteole convex - - - - - - - - - - - - - - - - - - - - - - - - pedicel dark brown - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf spatulate - - - - - - - - - - - - - - - - - - - - - - - - whole plant green - - - - - - - - - - - - - - - - - - - - - - - - root tip obovate - - - - - - - - - - - - - - - - - - - - - - - - leaf flush - - - - - - - - - - - - - - - - - - - - - - - - bud distal to - - - - - - - - - - - - - - - - - - - - - - - - keel broad - - - - - - - - corolla subacute - true - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure sterile - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure fertility - - - - - - - - - - - - - - - - - - - - - - - - sepal front - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal reniform - - - - - - - - - - - - - - - - - - - - - - - - tuber white - - - - - - - - - - - - - - - - - - - - - - - - style upturned - - - - - - - - - - - - - - - - - - - - - - - - locule oblique to - - - - - - - - - - - - - - - - - - - - - - - - ligule diameter - - - - - - - - - - - - - - - - - - - - - - - - petiole spherical - - - - - - - - - - - - - - - - - - - - - - - - petiole dorsal to - - - - - - - - - - - - - - - - - - - - - - - - root opposite - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue curved - - - - - - - - - - - - - - - - - - - - - - - - trichome conical - - - - - - - - - - - - - - - - - - - - - - - - anther bifurcated - - - - - - - - - - - - - - - - - - - - - - - - anther branchiness - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem alternate placement - - - - - - - - - - - - - - - - - - - - - - - - carpel furrowed - - - - - - - - - - - - - - - - - - - - - - - - carpel texture - - - - - - - - - - - - - - - - - - - - - - - - epicalyx acuminate - - - - - - - - - - - - - - - - - - - - - - - - trichome increased size - - - - - - - - - - - - - - - - - - - - - - - - trichome size - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue bilobed - - - - - - - - - - - - - - - - - - - - - - - - leaf coating - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein branched - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein branchiness - - - - - - - - - - - - - - - - - - - - - - - - bark setose - - - - - - - - - - - - - - - - - - - - - - - - stolon branched - - - - - - - - - - - - - - - - - - - - - - - - stolon branchiness - - - - - - - - - - - - - - - - - - - - - - - - caruncle straight - - - - - - - - - - - - - - - - - - - - - - - - caruncle shape - - - - - - - - - - - - - - - - - - - - - - - - calyx violet - - - - - - - - - - - - - - - - - - - - - - - - androecium blue - - - - - - - - - - - - - - - - - - - - - - - - pedicel truncated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fused with - - - - - - - - - - - - - - - - - - - - - - - - aril diameter - - - - - - - - - - - - - - - - - - - - - - - - filament adhesive - - - - - - - - - - - - - - - - - - - - - - - - filament adhesivity - - - - - - - - - - - - - - - - - - - - - - - - palea blunt - - - - - - - - - - - - - - - - - - - - - - - - anther back - - - - - - - - - - - - - - - - - - - - - - - - peduncle red - - - - - - - - - - - - - - - - - - - - - - - - pedicel dark red brown - - - - - - - - - - - - - - - - - - - - - - - - flower whole - - - - - - - - - - - - - - - - - - - - - - - - glume decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell flattened - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell curvature - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle furrowed - - - - - - - - - - - - - - - - - - - - - - - - petiolule brown - - - - - - - - - - - - - - - - - - - - - - - - heartwood terminal - - - - - - - - - - - - - - - - - - - - - - - - upper glume autogenous - - - - - - - - - - - - - - - - - - - - - - - - axil purple - - - - - - - - - - - - - - - - - - - - - - - - shoot internode dentated - - - - - - - - - - - - - - - - - - - - - - - - stalk reniform - - - - - - - - - - - - - - - - - - - - - - - - stalk concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - spikelet setose - - - - - - - - - - - - - - - - - - - - - - - - ovary wall kinked - - - - - - - - locule female - true - - - - - - - - - - - - - - - - - - - - - - - - bract alternate placement - - - - - - - - - - - - - - - - - - - - - - - - testa glabrous - - - - - - - - - - - - - - - - - - - - - - - - ligule elongated - - - - - - - - - - - - - - - - - - - - - - - - carpel punctate - - - - - - - - - - - - - - - - - - - - - - - - leaf concealed by - - - - - - - - - - - - - - - - - - - - - - - - awn sterile - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle grooved - - - - - - - - - - - - - - - - - - - - - - - - lower glume absent - - - - - - - - - - - - - - - - - - - - - - - - anther theca ovate - - - - - - - - - - - - - - - - - - - - - - - - anther theca convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet subulate - - - - - - - - - - - - - - - - - - - - - - - - receptacle lobed - - - - - - - - - - - - - - - - - - - - - - - - exocarp translucent - - - - - - - - - - - - - - - - - - - - - - - - exocarp opacity - - - - - - - - - - - - - - - - - - - - - - - - upper glume raised - - - - - - - - - - - - - - - - - - - - - - - - root glandular - - - - - - - - - - - - - - - - - - - - - - - - root morphology - - - - - - - - flower arrested - true - - - - - - - - flower offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - sheath cell auriculate - - - - - - - - - - - - - - - - - - - - - - - - stem blue - - - - - - - - - - - - - - - - - - - - - - - - mesocarp granular - - - - - - - - - - - - - - - - - - - - - - - - seed yellow orange - - - - - - - - - - - - - - - - - - - - - - - - bracteole blunt - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma lanceolate - - - - - - - - - - - - - - - - - - - - - - - - raphe oblong - - - - - - - - - - - - - - - - - - - - - - - - radicle pubescent - - - - - - - - - - - - - - - - - - - - - - - - radicle maturity - - - - - - - - - - - - - - - - - - - - - - - - flower bud glabrous - - - - - - - - - - - - - - - - - - - - - - - - flower bud pilosity - - - - - - - - - - - - - - - - - - - - - - - - petal flat - - - - - - - - - - - - - - - - - - - - - - - - nectary erect - - - - - - - - - - - - - - - - - - - - - - - - sepal ochre - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge pubescent - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge maturity - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal wrinkled - - - - - - - - - - - - - - - - - - - - - - - - sepal involute - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue flattened - - - - - - - - - - - - - - - - - - - - - - - - ligule cylindrical - - - - - - - - tertiary leaf vein premature - true - - - - - - - - tertiary leaf vein onset quality - true - - - - - - - - tubercle female - true - - - - - - - - tubercle phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - petal sterile - - - - - - - - - - - - - - - - - - - - - - - - - petal fertility - - - - - - - - - - - - - - - - - - - - - - - - glume hispidulous - - - - - - - - - - - - - - - - - - - - - - - - valve brittle - - - - - - - - branch acute - true - - - - - - - - - - - - - - - - - - - - - - - - connective immature - - - - - - - - - - - - - - - - - - - - - - - - anther rhomboid - - - - - - - - - - - - - - - - - - - - - - - - pedicel ridged - - - - - - - - - - - - - - - - - - - - - - - - leaf inflated - - - - - - - - - - - - - - - - - - - - - - - - pedicel surrounding - - - - - - - - - - - - - - - - - - - - - - - - raphe recurved - - - - - - - - - - - - - - - - - - - - - - - - raphe curvature - - - - - - - - - - - - - - - - - - - - - - - - pistillode robust - - - - - - - - - - - - - - - - - - - - - - - - septum circular - - - - - - - - - - - - - - - - - - - - - - - - septum 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - exocarp coiled - - - - - - - - - - - - - - - - - - - - - - - - exocarp coiling - - - - - - - - - - - - - - - - - - - - - - - - stem exposed - - - - - - - - - - - - - - - - - - - - - - - - cortex erect - - - - - - - - - - - - - - - - - - - - - - - - cortex position - - - - - - - - - - - - - - - - - - - - - - - - stigma horizontal - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein pinnate - - - - - - - - - - - - - - - - - - - - - - - - - - - - free petal phenotype - - - - - - - - - - - - - - - - - - - - - - - - free petal protruding into - - - - - - - - - - - - - - - - - - - - - - - - free petal position - - - - - - - - - - - - - - - - - - - - - - - - hilum area - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - connective anterior to - - - - - - - - - - - - - - - - - - - - - - - - columella pyramidal - - - - - - - - - - - - - - - - - - - - - - - - cambium pink - - - - - - - - - - - - - - - - - - - - - - - - nectary viscid - - - - - - - - - - - - - - - - - - - - - - - - nectary texture - - - - - - - - - - - - - - - - - - - - - - - - peristome mottled - - - - - - - - - - - - - - - - - - - - - - - - peristome color pattern - - - - - - - - - - - - - - - - - - - - - - - - fruit mottled - - - - - - - - - - - - - - - - - - - - - - - - fruit color pattern - - - - - - - - - - - - - - - - - - - - - - - - plant callus dorsal to - - - - - - - - - - - - - - - - - - - - - - - - cotyledon flattened - - - - - - - - - - - - - - - - - - - - - - - - pedicel constricted - - - - - - - - - - - - - - - - - - - - - - - - epidermis grey - - - - - - - - - - - - - - - - - - - - - - - - receptacle erose - - - - - - - - - - - - - - - - - - - - - - - - epidermis hairy - - - - - - - - - - - - - - - - - - - - - - - - connective inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - areole bud punctate - - - - - - - - - - - - - - - - - - - - - - - - areole bud spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet conical - - - - - - - - - - - - - - - - - - - - - - - - tuber green - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell bilobed - - - - - - - - - - - - - - - - - - - - - - - - costa adaxial to - - - - - - - - - - - - - - - - - - - - - - - - petiole ridged - - - - - - - - - - - - - - - - - - - - - - - - style subterminal - - - - - - - - - - - - - - - - - - - - - - - - anther sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - androecium obtuse - - - - - - - - - - - - - - - - - - - - - - - - awn spatulate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex increased size - - - - - - - - - - - - - - - - - - - - - - - - shoot apex size - - - - - - - - - - - - - - - - - - - - - - - - chalaza sunken - - - - - - - - - - - - - - - - - - - - - - - - chalaza elevation - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath circular - - - - - - - - - - - - - - - - - - - - - - - - corolla upturned - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - funicle lateral to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex transparent - - - - - - - - - - - - - - - - - - - - - - - - shoot apex opacity - - - - - - - - - - - - - - - - - - - - - - - - carpel ventral to - - - - - - - - bracteole subacute - true - - - - - - - - - - - - - - - - - - - - - - - - stipule coiled - - - - - - - - - - - - - - - - - - - - - - - - stipule coiling - - - - - - - - - - - - - - - - - - - - - - - - hypanthium pedicellate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium attachment quality - - - - - - - - - - - - - - - - - - - - - - - - prickle distributed - - - - - - - - - - - - - - - - - - - - - - - - prickle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - seed trichome heart shaped - - - - - - - - - - - - - - - - - - - - - - - - seed trichome concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina thickness - - - - - - - - - - - - - - - - - - - - - - - - stamen convolute - - - - - - - - - - - - - - - - - - - - - - - - locule semicircular - - - - - - - - - - - - - - - - - - - - - - - - peduncle clavate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence wrinkled - - - - - - - - - - - - - - - - - - - - - - - - tubercle pointed - - - - - - - - - - - - - - - - - - - - - - - - sapwood hard - - - - - - - - - - - - - - - - - - - - - - - - bud prominent - - - - - - - - - - - - - - - - - - - - - - - - bud associated with - - - - - - - - - - - - - - - - - - - - - - - - plant embryo folded - - - - - - - - - - - - - - - - - - - - - - - - plant embryo surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - trichome broken - - - - - - - - - - - - - - - - - - - - - - - - trichome wholeness - - - - - - - - - - - - - - - - - - - - - - - - bark terminal - - - - - - - - - - - - - - - - - - - - - - - - sorus concealed by - - - - - - - - - - - - - - - - - - - - - - - - epicalyx rough - - - - - - - - - - - - - - - - - - - - - - - - epicalyx texture - - - - - - - - - - - - - - - - - - - - - - - - peduncle distichous - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence purple - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence color - - - - - - - - - - - - - - - - - - - - - - - - branch cut - - - - - - - - - - - - - - - - - - - - - - - - pappus tubular - - - - - - - - - - - - - - - - - - - - - - - - pappus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - nectary acuminate - - - - - - - - - - - - - - - - - - - - - - - - perianth attenuate - - - - - - - - - - - - - - - - - - - - - - - - corolla young - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet decurrent - - - - - - - - - - - - - - - - - - - - - - - - seed autogenous - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet raised - - - - - - - - - - - - - - - - - - - - - - - - hypanthium hard - - - - - - - - - - - - - - - - - - - - - - - - hypanthium hardness - - - - - - - - - - - - - - - - - - - - - - - - branch conspicuous - - - - - - - - - - - - - - - - - - - - - - - - septum left - - - - - - - - - - - - - - - - - - - - - - - - hilum surrounding - - - - - - - - - - - - - - - - - - - - - - - - petiolule subulate - - - - - - - - - - - - - - - - - - - - - - - - rhizome conspicuous - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus raised - - - - - - - - - - - - - - - - - - - - - - - - bud dendritic - - - - - - - - - - - - - - - - - - - - - - - - lamina moderate intensity - - - - - - - - - - - - - - - - - - - - - - - - lamina intensity - - - - - - - - filament female - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence conspicuous - - - - - - - - - - - - - - - - - - - - - - - - spikelet separated from - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root coiled - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root coiling - - - - - - - - - - - - - - - - - - - - - - - - central zone trilobed - - - - - - - - - - - - - - - - - - - - - - - - branch congested - - - - - - - - - - - - - - - - - - - - - - - - shoot system increased size - - - - - - - - - - - - - - - - - - - - - - - - shoot system size - - - - - - - - - - - - - - - - - - - - - - - - bark transparent - - - - - - - - - - - - - - - - - - - - - - - - filament cuneate - - - - - - - - - - - - - - - - - - - - - - - - calyx spiny - - - - - - - - - - - - - - - - - - - - - - - - seed light brown - - - - - - - - - - - - - - - - - - - - - - - - rhizome star shaped - - - - - - - - - - - - - - - - - - - - - - - - valve revolute - - - - - - - - - - - - - - - - - - - - - - - - petiolule serrated - - - - - - - - - - - - - - - - - - - - - - - - cotyledon elliptic - - - - - - - - receptacle subacute - true - - - - - - - - receptacle duration - true - - - - - - - - - - - - - - - - - - - - - - - - papilla cell increased length - - - - - - - - - - - - - - - - - - - - - - - - papilla cell length - - - - - - - - - - - - - - - - - - - - - - - - ovary wall spatulate - - - - - - - - - - - - - - - - - - - - - - - - sepal adjacent to - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath open - - - - - - - - - - - - - - - - - - - - - - - - ligule inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - awn obovate - - - - - - - - - - - - - - - - - - - - - - - - - - - - cauline leaf phenotype - - - - - - - - - - - - - - - - - - - - - - - - cauline leaf cauline to - - - - - - - - - - - - - - - - - - - - - - - - cauline leaf position - - - - - - - - - - - - - - - - - - - - - - - - banner petal hispid - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - cotyledon autogenous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon structure - - - - - - - - - - - - - - - - - - - - - - - - leaf level with - - - - - - - - - - - - - - - - - - - - - - - - bract proximal to - - - - - - - - - - - - - - - - - - - - - - - - palea hard - - - - - - - - - - - - - - - - - - - - - - - - palea hardness - - - - - - - - - - - - - - - - - - - - - - - - awn dorsal to - - - - - - - - - - - - - - - - - - - - - - - - disk flower subulate - - - - - - - - - - - - - - - - - - - - - - - - pedicel laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - banner petal convex - - - - - - - - - - - - - - - - - - - - - - - - stamen reniform - - - - - - - - - - - - - - - - - - - - - - - - corolla drooping - - - - - - - - - - - - - - - - - - - - - - - - pedicel tubular - - - - - - - - - - - - - - - - - - - - - - - - connective conical - - - - - - - - - - - - - - - - - - - - - - - - pericarp granular - - - - - - - - - - - - - - - - - - - - - - - - sepal pointed - - - - - - - - - - - - - - - - - - - - - - - - epicalyx bifurcated - - - - - - - - - - - - - - - - - - - - - - - - epicalyx branchiness - - - - - - - - - - - - - - - - - - - - - - - - crown root falciform - - - - - - - - - - - - - - - - - - - - - - - - stamen present - - - - - - - - - - - - - - - - - - - - - - - - infructescence fusiform - - - - - - - - - - - - - - - - - - - - - - - - ovary wall acuminate - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle increased size - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle size - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet angular - - - - - - - - - - - - - - - - - - - - - - - - epidermis parallel to - - - - - - - - - - - - - - - - - - - - - - - - androecium sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore oblong - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis multicellular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis cellularity - - - - - - - - - - - - - - - - - - - - - - - - glume striated - - - - - - - - - - - - - - - - - - - - - - - - fruit proximal to - - - - - - - - - - - - - - - - - - - - - - - - valve brown - - - - - - - - - - - - - - - - - - - - - - - - bud scalloped - - - - - - - - - - - - - - - - - - - - - - - - root basal to - - - - - - - - - - - - - - - - - - - - - - - - sheath cell alternate placement - - - - - - - - - - - - - - - - - - - - - - - - sheath cell spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stem spongy - - - - - - - - - - - - - - - - - - - - - - - - tepal simple - - - - - - - - - - - - - - - - - - - - - - - - tepal complexity - - - - - - - - - - - - - - - - - - - - - - - - glume green - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure orbicular - - - - - - - - - - - - - - - - - - - - - - - - fruit circling - - - - - - - - - - - - - - - - - - - - - - - - fruit movement behavioral quality - - - - - - - - - - - - - - - - - - - - - - - - lemma light brown - - - - - - - - - - - - - - - - - - - - - - - - cotyledon coiled - - - - - - - - - - - - - - - - - - - - - - - - cotyledon coiling - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system alternate placement - - - - - - - - - - - - - - - - - - - - - - - - disk flower convex - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf pinnate - - - - - - - - - - - - - - - - - - - - - - - - leaf base black - - - - - - - - - - - - - - - - - - - - - - - - inflorescence obovate - - - - - - - - - - - - - - - - - - - - - - - - hilum ornamentation - - - - - - - - - - - - - - - - - - - - - - - - shoot system decreased amount - - - - - - - - - - - - - - - - - - - - - - - - shoot system amount - - - - - - - - - - - - - - - - - - - - - - - - stem well differentiated - - - - - - - - - - - - - - - - - - - - - - - - stem cellular potency - - - - - - - - - - - - - - - - - - - - - - - - bracteole undulate - - - - - - - - oil gland acute - true - - - - - - - - oil gland duration - true - - - - - - - - - - - - - - - - - - - - - - - - growth ring viscous - - - - - - - - - - - - - - - - - - - - - - - - growth ring viscosity - - - - - - - - - - - - - - - - - - - - - - - - seed trichome arched - - - - - - - - - - - - - - - - - - - - - - - - seed trichome concavity - - - - - - - - - - - - - - - - - - - - - - - - crown root striated - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root increased thickness - - - - - - - - - - - - - - - - - - - - - - - - oil gland obtuse - - - - - - - - peduncle acute - true - - - - - - - - peduncle duration - true - - - - - - - - - - - - - - - - - - - - - - - - caruncle linear - - - - - - - - - - - - - - - - - - - - - - - - style unbranched - - - - - - - - - - - - - - - - - - - - - - - - bract caudate - - - - - - - - - - - - - - - - - - - - - - - - fruit maroon - - - - - - - - - - - - - - - - - - - - - - - - leaflet dark brown - - - - - - - - - - - - - - - - - - - - - - - - endocarp ventral to - - - - - - - - - - - - - - - - - - - - - - - - gynophore attenuate - - - - - - - - - - - - - - - - - - - - - - - - gynophore sharpness - - - - - - - - - - - - - - - - - - - - - - - - oil gland concave - - - - - - - - - - - - - - - - - - - - - - - - oil gland concavity - - - - - - - - - - - - - - - - - - - - - - - - stigma pyramidal - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet reniform - - - - - - - - - - - - - - - - - - - - - - - - stigma star shaped - - - - - - - - - - - - - - - - - - - - - - - - hypanthium split - - - - - - - - hilum premature - true - - - - - - - - hilum onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - seed trichome convex - - - - - - - - - - - - - - - - - - - - - - - - stem curved - - - - - - - - - - - - - - - - - - - - - - - - ovary wall simple - - - - - - - - - - - - - - - - - - - - - - - - ovary wall complexity - - - - - - - - - - - - - - - - - - - - - - - - apical hook dorsal to - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus swollen - - - - - - - - - - - - - - - - - - - - - - - - stipule grooved - - - - - - - - - - - - - - - - - - - - - - - - stipule texture - - - - - - - - - - - - - - - - - - - - - - - - lower glume conspicuous - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member striated - - - - - - - - - - - - - - - - - - - - - - - - seed mature - - - - - - - - - - - - - - - - - - - - - - - - epidermis green - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system increased thickness - - - - - - - - - - - - - - - - - - - - - - - - scutellar node dentated - - - - - - - - - - - - - - - - - - - - - - - - calyx adaxial to - - - - - - - - - - - - - - - - - - - - - - - - crown root kinked - - - - - - - - - - - - - - - - - - - - - - - - pericarp soft - - - - - - - - - - - - - - - - - - - - - - - - calyx oblique to - - - - - - - - stigma acute - true - - - - - - - - stigma duration - true - - - - - - - - - - - - - - - - - - - - - - - - tuberous root glabrous - - - - - - - - - - - - - - - - - - - - - - - - peduncle conical - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium linear - - - - - - - - - - - - - - - - - - - - - - - - prickle arched - - - - - - - - - - - - - - - - - - - - - - - - prickle concavity - - - - - - - - - - - - - - - - - - - - - - - - sepal broad - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle upturned - - - - - - - - - - - - - - - - - - - - - - - - tuberous root green - - - - - - - - - - - - - - - - - - - - - - - - connective length - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root angular - - - - - - - - - - - - - - - - - - - - - - - - central zone orbicular - - - - - - - - - - - - - - - - - - - - - - - - pericarp conical - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle lanceolate - - - - - - - - - - - - - - - - - - - - - - - - sorus cuneate - - - - - - - - - - - - - - - - - - - - - - - - axil mixed - - - - - - - - - - - - - - - - - - - - - - - - exocarp undulate - - - - - - - - - - - - - - - - - - - - - - - - tubercle oblong - - - - - - - - - - - - - - - - - - - - - - - - pollen inverted - - - - - - - - - - - - - - - - - - - - - - - - pollen spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell erect - - - - - - - - - - - - - - - - - - - - - - - - pistillode decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - pistillode thickness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx swollen - - - - - - - - - - - - - - - - - - - - - - - - papilla cell transparent - - - - - - - - - - - - - - - - - - - - - - - - papilla cell opacity - - - - - - - - - - - - - - - - - - - - - - - - filament immobile - - - - - - - - - - - - - - - - - - - - - - - - filament mobility - - - - - - - - - - - - - - - - - - - - - - - - stereome undivided - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence dorsal to - - - - - - - - - - - - - - - - - - - - - - - - spikelet emarginate - - - - - - - - - - - - - - - - - - - - - - - - filament decurrent - - - - - - - - - - - - - - - - - - - - - - - - root angular - - - - - - - - - - - - - - - - - - - - - - - - gynoecium broad - - - - - - - - - - - - - - - - - - - - - - - - seed straight - - - - - - - - - - - - - - - - - - - - - - - - peduncle tubular - - - - - - - - - - - - - - - - - - - - - - - - petal posterior to - - - - - - - - - - - - - - - - - - - - - - - - filament orbicular - - - - - - - - - - - - - - - - - - - - - - - - costa absent - - - - - - - - - - - - - - - - - - - - - - - - petiole spotted - - - - - - - - - - - - - - - - - - - - - - - - petiole color pattern - - - - - - - - - - - - - - - - - - - - - - - - pedicel inflexible - - - - - - - - - - - - - - - - - - - - - - - - pedicel flexibility - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus erect - - - - - - - - - - - - - - - - - - - - - - - - stamen absent - - - - - - - - - - - - - - - - - - - - - - - - stipule pointed - - - - - - - - - - - - - - - - - - - - - - - - lemma pink - - - - - - - - - - - - - - - - - - - - - - - - exocarp punctate - - - - - - - - - - - - - - - - - - - - - - - - exocarp spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - calyx warty - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member transparent - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member opacity - - - - - - - - - - - - - - - - - - - - - - - - cotyledon arched - - - - - - - - - - - - - - - - - - - - - - - - caruncle absent - - - - - - - - - - - - - - - - - - - - - - - - caruncle amount - - - - - - - - - - - - - - - - - - - - - - - - hypanthium ovate - - - - - - - - - - - - - - - - - - - - - - - - anther young - - - - - - - - - - - - - - - - - - - - - - - - anther age - - - - - - - - - - - - - - - - - - - - - - - - shoot internode rough - - - - - - - - - - - - - - - - - - - - - - - - costa fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - bract star shaped - - - - - - - - - - - - - - - - - - - - - - - - gynophore curved - - - - - - - - - - - - - - - - - - - - - - - - gynophore curvature - - - - - - - - - - - - - - - - - - - - - - - - calyx scaly - - - - - - - - - - - - - - - - - - - - - - - - root tip curved - - - - - - - - - - - - - - - - - - - - - - - - stem wrinkled - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle cuneate - - - - - - - - - - - - - - - - - - - - - - - - nectary hollow - - - - - - - - - - - - - - - - - - - - - - - - nectary structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - upper glume laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - hilum rectangular - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl swollen - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl structure - - - - - - - - - - - - - - - - - - - - - - - - carpel ornamentation - - - - - - - - - - - - - - - - - - - - - - - - carpel surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - androecium inserted into - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem notched - - - - - - - - - - - - - - - - - - - - - - - - infructescence grey - - - - - - - - - - - - - - - - - - - - - - - - leaf base distal to - - - - - - - - - - - - - - - - - - - - - - - - flower anterior to - - - - - - - - - - - - - - - - - - - - - - - - endosperm lateral to - - - - - - - - - - - - - - - - - - - - - - - - heartwood viscous - - - - - - - - - - - - - - - - - - - - - - - - heartwood viscosity - - - - - - - - - - - - - - - - - - - - - - - - pistillode unbranched - - - - - - - - - - - - - - - - - - - - - - - - pistillode branchiness - - - - - - - - - - - - - - - - - - - - - - - - receptacle ovate - - - - - - - - - - - - - - - - - - - - - - - - root decreased amount - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell obtuse - - - - - - - - - - - - - - - - - - - - - - - - pericarp decreased amount - - - - - - - - - - - - - - - - - - - - - - - - pericarp amount - - - - - - - - - - - - - - - - - - - - - - - - hilum triangular - - - - - - - - - - - - - - - - - - - - - - - - testa autogenous - - - - - - - - - - - - - - - - - - - - - - - - juice sac broken - - - - - - - - - - - - - - - - - - - - - - - - juice sac wholeness - - - - - - - - - - - - - - - - - - - - - - - - receptacle aggregated - - - - - - - - - - - - - - - - - - - - - - - - shoot internode triangular - - - - - - - - - - - - - - - - - - - - - - - - spikelet leaf-like - - - - - - - - - - - - - - - - - - - - - - - - testa heart shaped - - - - - - - - - - - - - - - - - - - - - - - - stalk constricted - - - - - - - - - - - - - - - - - - - - - - - - stereome elliptic - - - - - - - - - - - - - - - - - - - - - - - - stereome 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - apical hook whorled - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell water composition - - - - - - - - - - - - - - - - - - - - - - - - perianth transparent - - - - - - - - - - - - - - - - - - - - - - - - perianth opacity - - - - - - - - - - - - - - - - - - - - - - - - perianth cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - inflorescence unilateral - - - - - - - - - - - - - - - - - - - - - - - - banner petal heart shaped - - - - - - - - - - - - - - - - - - - - - - - - sheath cell ovate - - - - - - - - - - - - - - - - - - - - - - - - perianth decreased amount - - - - - - - - - - - - - - - - - - - - - - - - tubercle ventral to - - - - - - - - - - - - - - - - - - - - - - - - peristome sparse - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal punctiform - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - lamina clavate - - - - - - - - - - - - - - - - - - - - - - - - costa cut - - - - - - - - - - - - - - - - - - - - - - - - branch pink - - - - - - - - - - - - - - - - - - - - - - - - locule yellow - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle grooved - - - - - - - - - - - - - - - - - - - - - - - - growth ring elliptic - - - - - - - - - - - - - - - - - - - - - - - - growth ring 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - palea glandular - - - - - - - - - - - - - - - - - - - - - - - - palea morphology - - - - - - - - - - - - - - - - - - - - - - - - peduncle decumbent - - - - - - - - - - - - - - - - - - - - - - - - bark light grey - - - - - - - - - - - - - - - - - - - - - - - - lower glume adjacent to - - - - - - - - - - - - - - - - - - - - - - - - corolla posterior to - - - - - - - - - - - - - - - - - - - - - - - - stem V-shaped - - - - - - - - - - - - - - - - - - - - - - - - gynoecium triangular - - - - - - - - - - - - - - - - - - - - - - - - epicalyx oblong - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma dark brown - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma color - - - - - - - - - - - - - - - - - - - - - - - - gynoecium spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - tuber elongated - - - - - - - - bud female - true - - - - - - - - - - - - - - - - - - - - - - - - seed trichome leaf-like - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet symmetrical - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet symmetry - - - - - - - - - - - - - - - - - - - - - - - - scutellar node wrinkled - - - - - - - - - - - - - - - - - - - - - - - - bark angular - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure punctate - - - - - - - - - - - - - - - - - - - - - - - - lenticel condensed - - - - - - - - connective down - true - - - - - - - - - - - - - - - - - - - - - - - - trichome coiled - - - - - - - - - - - - - - - - - - - - - - - - trichome coiling - - - - - - - - - - - - - - - - - - - - - - - - spikelet purple - - - - - - - - - - - - - - - - - - - - - - - - - - - - fruit pedicel phenotype - - - - - - - - - - - - - - - - - - - - - - - - fruit pedicel elongated - - - - - - - - - - - - - - - - - - - - - - - - fruit pedicel shape - - - - - - - - - - - - - - - - - - - - - - - - tepal distributed - - - - - - - - - - - - - - - - - - - - - - - - branch cauline to - - - - - - - - - - - - - - - - - - - - - - - - central zone conical - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system folded - - - - - - - - - - - - - - - - - - - - - - - - stipule swollen - - - - - - - - - - - - - - - - - - - - - - - - plant embryo foveate - - - - - - - - - - - - - - - - - - - - - - - - calyx robust - - - - - - - - - - - - - - - - - - - - - - - - funicle circular - - - - - - - - - - - - - - - - - - - - - - - - funicle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - placenta basal to - - - - - - - - - - - - - - - - - - - - - - - - connective subulate - - - - - - - - - - - - - - - - - - - - - - - - fruit surrounding - - - - - - - - - - - - - - - - - - - - - - - - connective sigmoid - - - - - - - - - - - - - - - - - - - - - - - - stolon erect - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet recurved - - - - - - - - - - - - - - - - - - - - - - - - keel tomentose - - - - - - - - - - - - - - - - - - - - - - - - sheath cell truncated - - - - - - - - - - - - - - - - - - - - - - - - bud blunt - - - - - - - - - - - - - - - - - - - - - - - - sheath cell broken - - - - - - - - - - - - - - - - - - - - - - - - sheath cell wholeness - - - - - - - - - - - - - - - - - - - - - - - - banner petal obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf axil terminal - - - - - - - - - - - - - - - - - - - - - - - - papilla cell tubular - - - - - - - - - - - - - - - - - - - - - - - - stalk exserted - - - - - - - - - - - - - - - - - - - - - - - - petiole articulated with - - - - - - - - - - - - - - - - - - - - - - - - stem recurved - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein orbicular - - - - - - - - - - - - - - - - - - - - - - - - stipel adaxial to - - - - - - - - - - - - - - - - - - - - - - - - cotyledon osseous - - - - - - - - - - - - - - - - - - - - - - - - central zone tubular - - - - - - - - - - - - - - - - - - - - - - - - peduncle viscous - - - - - - - - - - - - - - - - - - - - - - - - peduncle viscosity - - - - - - - - - - - - - - - - - - - - - - - - plant cell raised - - - - - - - - - - - - - - - - - - - - - - - - awn convolute - - - - - - - - - - - - - - - - - - - - - - - - peduncle green - - - - - - - - - - - - - - - - - - - - - - - - costa tomentose - - - - - - - - - - - - - - - - - - - - - - - - hilum located in - - - - - - - - - - - - - - - - - - - - - - - - apical hook simple - - - - - - - - - - - - - - - - - - - - - - - - apical hook complexity - - - - - - - - - - - - - - - - - - - - - - - - stalk cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - pistillode obconical - - - - - - - - - - - - - - - - - - - - - - - - branch distance - - - - - - - - - - - - - - - - - - - - - - - - stem base old - - - - - - - - - - - - - - - - - - - - - - - - stem base age - - - - - - - - - - - - - - - - - - - - - - - - glume swollen - - - - - - - - - - - - - - - - - - - - - - - - endosperm dorsal to - - - - - - - - - - - - - - - - - - - - - - - - rhizome subcircular - - - - - - - - - - - - - - - - - - - - - - - - caruncle orbicular - - - - - - - - - - - - - - - - - - - - - - - - caruncle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - ray system star shaped - - - - - - - - - - - - - - - - - - - - - - - - tepal lateral to - - - - - - - - - - - - - - - - - - - - - - - - glume rough - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem orbicular - - - - - - - - - - - - - - - - - - - - - - - - branch white - - - - - - - - - - - - - - - - - - - - - - - - shoot apex upturned - - - - - - - - - - - - - - - - - - - - - - - - placenta erose - - - - - - - - - - - - - - - - - - - - - - - - stem closed - - - - - - - - - - - - - - - - - - - - - - - - hypanthium ventral to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence immature - - - - - - - - - - - - - - - - - - - - - - - - shoot internode conical - - - - - - - - - - - - - - - - - - - - - - - - bud alternate placement - - - - - - - - - - - - - - - - - - - - - - - - bracteole hard - - - - - - - - - - - - - - - - - - - - - - - - bracteole hardness - - - - - - - - - - - - - - - - - - - - - - - - seed size - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium lobed - - - - - - - - - - - - - - - - - - - - - - - - leaf horizontal - - - - - - - - - - - - - - - - - - - - - - - - stolon alternate placement - - - - - - - - - - - - - - - - - - - - - - - - stolon spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - locule broad - - - - - - - - - - - - - - - - - - - - - - - - flower increased size - - - - - - - - - - - - - - - - - - - - - - - - oil gland autogenous - - - - - - - - - - - - - - - - - - - - - - - - oil gland structure - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell adhesive - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell adhesivity - - - - - - - - - - - - - - - - - - - - - - - - glume purple - - - - - - - - - - - - - - - - - - - - - - - - infructescence attenuate - - - - - - - - - - - - - - - - - - - - - - - - pericarp open - - - - - - - - - - - - - - - - - - - - - - - - pericarp closure - - - - - - - - - - - - - - - - - - - - - - - - resin canal simple - - - - - - - - - - - - - - - - - - - - - - - - resin canal complexity - - - - - - - - - - - - - - - - - - - - - - - - tubercle pink - - - - - - - - - - - - - - - - - - - - - - - - disk flower rough - - - - - - - - - - - - - - - - - - - - - - - - parenchyma dispersed - - - - - - - - - - - - - - - - - - - - - - - - parenchyma position - - - - - - - - - - - - - - - - - - - - - - - - epicalyx leaf-like - - - - - - - - - - - - - - - - - - - - - - - - lemma cylindrical - - - - - - - - - - - - - - - - - - - - - - - - aril conspicuous - - - - - - - - - - - - - - - - - - - - - - - - plumule conspicuous - - - - - - - - - - - - - - - - - - - - - - - - infructescence black - - - - - - - - - - - - - - - - - - - - - - - - raphe condensed - - - - - - - - - - - - - - - - - - - - - - - - raphe structure - - - - - - - - - - - - - - - - - - - - - - - - pollen morphology - - - - - - - - - - - - - - - - - - - - - - - - - - - - elaiosome phenotype - - - - - - - - - - - - - - - - - - - - - - - - elaiosome translucent - - - - - - - - - - - - - - - - - - - - - - - - elaiosome opacity - - - - - - - - - - - - - - - - - - - - - - - - involucre sparse - - - - - - - - - - - - - - - - - - - - - - - - apical hook pedicellate - - - - - - - - - - - - - - - - - - - - - - - - apical hook attachment quality - - - - - - - - - - - - - - - - - - - - - - - - glume fleshy - - - - - - - - - - - - - - - - - - - - - - - - filament deformed - - - - - - - - - - - - - - - - - - - - - - - - stem caudate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence notched - - - - - - - - - - - - - - - - - - - - - - - - receptacle scaly - - - - - - - - - - - - - - - - - - - - - - - - strophiole white - - - - - - - - - - - - - - - - - - - - - - - - strophiole color - - - - - - - - - - - - - - - - - - - - - - - - nectary cylindrical - - - - - - - - - - - - - - - - - - - - - - - - thallus present - - - - - - - - - - - - - - - - - - - - - - - - thallus amount - - - - - - - - - - - - - - - - - - - - - - - - pseudostem terminal - - - - - - - - - - - - - - - - - - - - - - - - pseudostem position - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus glandular - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus morphology - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence divergent from - - - - - - - - - - - - - - - - - - - - - - - - rhizome dry - - - - - - - - - - - - - - - - - - - - - - - - rhizome wetness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence associated with - - - - - - - - - - - - - - - - - - - - - - - - - lemma exserted - - - - - - - - spikelet hermaphrodite - true - - - - - - - - heartwood female - true - - - - - - - - heartwood phenotypic sex - true - - - - - - - - trichome premature - true - - - - - - - - trichome onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle basal to - - - - - - - - - - - - - - - - - - - - - - - - palea concave - - - - - - - - - - - - - - - - - - - - - - - - pericarp fused with - - - - - - - - - - - - - - - - - - - - - - - - awn brown - - - - - - - - - - - - - - - - - - - - - - - - leaf red brown - - - - - - - - - - - - - - - - - - - - - - - - fruit dark yellow - - - - - - - - - - - - - - - - - - - - - - - - lamina retuse - - - - - - - - - - - - - - - - - - - - - - - - hilum acuminate - - - - - - - - thorn premature - true - - - - - - - - thorn onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - endocarp mottled - - - - - - - - - - - - - - - - - - - - - - - - flower offset - - - - - - - - stele hermaphrodite - true - - - - - - - - stele phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - involucre flattened - - - - - - - - - - - - - - - - - - - - - - - - involucre curvature - - - - - - - - - - - - - - - - - - - - - - - - hilum flat - - - - - - - - - - - - - - - - - - - - - - - - plant embryo circular - - - - - - - - - - - - - - - - - - - - - - - - plant embryo 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle striated - - - - - - - - - - - - - - - - - - - - - - - - apical hook notched - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet purple - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet color - - - - - - - - - - - - - - - - - - - - - - - - whole plant distichous - - - - - - - - - - - - - - - - - - - - - - - - lower glume asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - lower glume symmetry - - - - - - - - - - - - - - - - - - - - - - - - sepal conspicuous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium recurved - - - - - - - - - - - - - - - - - - - - - - - - gynoecium curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis symmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis symmetry - - - - - - - - - - - - - - - - - - - - - - - - plant cell elliptic - - - - - - - - - - - - - - - - - - - - - - - - awn conspicuous - - - - - - - - - - - - - - - - - - - - - - - - testa white - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue undulate - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root fleshy - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root composition - - - - - - - - - - - - - - - - - - - - - - - - leaflet constricted - - - - - - - - - - - - - - - - - - - - - - - - seed inflexible - - - - - - - - - - - - - - - - - - - - - - - - seed flexibility - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue prominent - - - - - - - - - - - - - - - - - - - - - - - - androecium subtriangular - - - - - - - - - - - - - - - - - - - - - - - - spikelet adjacent to - - - - - - - - - - - - - - - - - - - - - - - - anther straight - - - - - - - - - - - - - - - - - - - - - - - - upper glume length - - - - - - - - - - - - - - - - - - - - - - - - testa fatty - - - - - - - - - - - - - - - - - - - - - - - - epicalyx simple - - - - - - - - - - - - - - - - - - - - - - - - epicalyx complexity - - - - - - - - - - - - - - - - - - - - - - - - anther star shaped - - - - - - - - - - - - - - - - - - - - - - - - branch ochre - - - - - - - - - - - - - - - - - - - - - - - - endosperm cylindrical - - - - - - - - - - - - - - - - - - - - - - - - endosperm convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - rhizome curved - - - - - - - - - - - - - - - - - - - - - - - - stalk adjacent to - - - - - - - - - - - - - - - - - - - - - - - - bract lateral to - - - - - - - - - - - - - - - - - - - - - - - - perianth whorled - - - - - - - - - - - - - - - - - - - - - - - - papilla cell furrowed - - - - - - - - - - - - - - - - - - - - - - - - gynoecium bifurcated - - - - - - - - - - - - - - - - - - - - - - - - gynoecium branchiness - - - - - - - - - - - - - - - - - - - - - - - - lamina tapered - - - - - - - - - - - - - - - - - - - - - - - - pistillode erect - - - - - - - - - - - - - - - - - - - - - - - - calyx multifid - - - - - - - - - - - - - - - - - - - - - - - - peristome ovate - - - - - - - - - - - - - - - - - - - - - - - - hilum U-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf apex opposite - - - - - - - - - - - - - - - - - - - - - - - - heartwood black - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence grooved - - - - - - - - - - - - - - - - - - - - - - - - areole bud obovate - - - - - - - - - - - - - - - - - - - - - - - - petiolule clavate - - - - - - - - - - - - - - - - - - - - - - - - petiolule concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - axil cuspidate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure elliptic - - - - - - - - - - - - - - - - - - - - - - - - branch angle - - - - - - - - - - - - - - - - - - - - - - - - pappus pubescent - - - - - - - - - - - - - - - - - - - - - - - - pappus maturity - - - - - - - - - - - - - - - - - - - - - - - - crown root linear - - - - - - - - - - - - - - - - - - - - - - - - sheath cell circular - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina cuspidate - - - - - - - - - - - - - - - - - - - - - - - - pedicel revolute - - - - - - - - - - - - - - - - - - - - - - - - ovary wall distributed - - - - - - - - - - - - - - - - - - - - - - - - seed umbonate - - - - - - - - - - - - - - - - - - - - - - - - bracteole conical - - - - - - - - - - - - - - - - - - - - - - - - petiolule sterile - - - - - - - - - - - - - - - - - - - - - - - - petiolule fertility - - - - - - - - - - - - - - - - - - - - - - - - corm oblong - - - - - - - - - - - - - - - - - - - - - - - - placenta red - - - - - - - - - - - - - - - - - - - - - - - - corolla yellow brown - - - - - - - - - - - - - - - - - - - - - - - - seed trichome condensed - - - - - - - - - - - - - - - - - - - - - - - - tubercle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - anther theca split - - - - - - - - - - - - - - - - - - - - - - - - leaflet pointed - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue tomentose - - - - - - - - - - - - - - - - - - - - - - - - leaf inverted-V shaped - - - - - - - - - - - - - - - - - - - - - - - - perianth posterior to - - - - - - - - - - - - - - - - - - - - - - - - peristome vertical to - - - - - - - - - - - - - - - - - - - - - - - - fruit spatulate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp glandular - - - - - - - - - - - - - - - - - - - - - - - - mesocarp morphology - - - - - - - - - - - - - - - - - - - - - - - - axillary bud lobed - - - - - - - - - - - - - - - - - - - - - - - - axillary bud shape - - - - - - - - - - - - - - - - - - - - - - - - upper glume present - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril decreased amount - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril amount - - - - - - - - - - - - - - - - - - - - - - - - stem distal to - - - - - - - - - - - - - - - - - - - - - - - - leaf trilobed - - - - - - - - - - - - - - - - - - - - - - - - exocarp spiny - - - - - - - - - - - - - - - - - - - - - - - - exocarp surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - branch pointed - - - - - - - - - - - - - - - - - - - - - - - - calyx undivided - - - - - - - - - - - - - - - - - - - - - - - - awn erect - - - - - - - - - - - - - - - - - - - - - - - - valve immature - - - - - - - - - - - - - - - - - - - - - - - - stolon oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - stolon shape - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus scalloped - - - - - - - - - - - - - - - - - - - - - - - - root pointed - - - - - - - - - - - - - - - - - - - - - - - - root sharpness - - - - - - - - - - - - - - - - - - - - - - - - stipel obovate - - - - - - - - - - - - - - - - - - - - - - - - glume glistening - - - - - - - - - - - - - - - - - - - - - - - - glume reflectivity - - - - - - - - - - - - - - - - - - - - - - - - flower folded - - - - - - - - - - - - - - - - - - - - - - - - flower surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - androecium abaxial to - - - - - - - - - - - - - - - - - - - - - - - - pith decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - pith water composition - - - - - - - - - - - - - - - - - - - - - - - - prickle black - - - - - - - - - - - - - - - - - - - - - - - - prickle color - - - - - - - - - - - - - - - - - - - - - - - - rhizome circular - - - - - - - - - - - - - - - - - - - - - - - - testa undulate - - - - - - - - - - - - - - - - - - - - - - - - parenchyma angular - - - - - - - - - - - - - - - - - - - - - - - - parenchyma shape - - - - - - - - - - - - - - - - - - - - - - - - infructescence left - - - - - - - - - - - - - - - - - - - - - - - - tuberous root spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - tuberous root convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - staminode brittle - - - - - - - - - - - - - - - - - - - - - - - - spikelet whorled - - - - - - - - - - - - - - - - - - - - - - - - tepal straight - - - - - - - - - - - - - - - - - - - - - - - - hypanthium protruding - - - - - - - - - - - - - - - - - - - - - - - - upper glume blunt - - - - - - - - - - - - - - - - - - - - - - - - perianth age - - - - - - - - - - - - - - - - - - - - - - - - pericarp black - - - - - - - - - - - - - - - - - - - - - - - - perisperm fleshy - - - - - - - - - - - - - - - - - - - - - - - - perisperm composition - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure subulate - - - - - - - - - - - - - - - - - - - - - - - - connective whole - - - - - - - - - - - - - - - - - - - - - - - - connective wholeness - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet drooping - - - - - - - - - - - - - - - - - - - - - - - - infructescence hairy - - - - - - - - - - - - - - - - - - - - - - - - seed width - - - - - - - - - - - - - - - - - - - - - - - - shoot system elliptic - - - - - - - - - - - - - - - - - - - - - - - - gynoecium vestigial - - - - - - - - - - - - - - - - - - - - - - - - trichome divergent from - - - - - - - - - - - - - - - - - - - - - - - - lenticel autogenous - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal flattened - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal curvature - - - - - - - - - - - - - - - - - - - - - - - - endosperm wrinkled - - - - - - - - - - - - - - - - - - - - - - - - endocarp tomentose - - - - - - - - - - - - - - - - - - - - - - - - canal reniform - - - - - - - - - - - - - - - - - - - - - - - - testa folded - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle slit-like - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium subulate - - - - - - - - - - - - - - - - - - - - - - - - branch foveate - - - - - - - - - - - - - - - - - - - - - - - - fruit sterile - - - - - - - - - - - - - - - - - - - - - - - - stigma decreased amount - - - - - - - - - - - - - - - - - - - - - - - - receptacle actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - receptacle radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - bark protruding - - - - - - - - - - - - - - - - - - - - - - - - plumule fleshy - - - - - - - - - - - - - - - - - - - - - - - - plumule composition - - - - - - - - - - - - - - - - - - - - - - - - root tip divergent from - - - - - - - - - - - - - - - - - - - - - - - - hypanthium subulate - - - - - - - - - - - - - - - - - - - - - - - - prickle spherical - - - - - - - - - - - - - - - - - - - - - - - - pedicel raised - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf linear - - - - - - - - - - - - - - - - - - - - - - - - shoot apex decumbent - - - - - - - - - - - - - - - - - - - - - - - - aril exposed - - - - - - - - - - - - - - - - - - - - - - - - receptacle black - - - - - - - - - - - - - - - - - - - - - - - - tubercle concave - - - - - - - - - - - - - - - - - - - - - - - - branch circinate - - - - - - - - - - - - - - - - - - - - - - - - bud in contact with - - - - - - - - - - - - - - - - - - - - - - - - - - - - bundle sheath phenotype - - - - - - - - - - - - - - - - - - - - - - - - bundle sheath absent - - - - - - - - - - - - - - - - - - - - - - - - bundle sheath amount - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle U-shaped - - - - - - - - - - - - - - - - - - - - - - - - carpel multi-colored - - - - - - - - - - - - - - - - - - - - - - - - carpel color pattern - - - - - - - - - - - - - - - - - - - - - - - - tepal yellow - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal glistening - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal reflectivity - - - - - - - - - - - - - - - - - - - - - - - - hilum glandular - - - - - - - - - - - - - - - - - - - - - - - - hilum morphology - - - - - - - - - - - - - - - - - - - - - - - - pappus smooth - - - - - - - - - - - - - - - - - - - - - - - - stem folded - - - - - - - - - - - - - - - - - - - - - - - - stem surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue swollen - - - - - - - - - - - - - - - - - - - - - - - - fruit bifurcated - - - - - - - - - - - - - - - - - - - - - - - - shoot system ovate - - - - - - - - - - - - - - - - - - - - - - - - endocarp ridged - - - - - - - - - - - - - - - - - - - - - - - - anther flat - - - - - - - - - - - - - - - - - - - - - - - - involucre violet - - - - - - - - - - - - - - - - - - - - - - - - valve truncated - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf obtuse - - - - - - - - - - - - - - - - - - - - - - - - pulvinus pubescent - - - - - - - - - - - - - - - - - - - - - - - - pulvinus maturity - - - - - - - - - - - - - - - - - - - - - - - - keel fused with - - - - - - - - - - - - - - - - - - - - - - - - connective rectangular - - - - - - - - - - - - - - - - - - - - - - - - filament brittle - - - - - - - - - - - - - - - - - - - - - - - - plant callus cuspidate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - stem black - - - - - - - - - - - - - - - - - - - - - - - - stele axial to - - - - - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex phenotype - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril acuminate - - - - - - - - - - - - - - - - - - - - - - - - pericarp old - - - - - - - - - - - - - - - - - - - - - - - - ligule purple - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf pubescent - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf maturity - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence conical - - - - - - - - - - - - - - - - - - - - - - - - pedicel fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - petiolule bilobed - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf acuminate - - - - - - - - - - - - - - - - - - - - - - - - septum split - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle alternate placement - - - - - - - - stem continuous - true - - - - - - - - stem occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - keel tapered - - - - - - - - - - - - - - - - - - - - - - - - stalk mixed - - - - - - - - - - - - - - - - - - - - - - - - bracteole sparse - - - - - - - - - - - - - - - - - - - - - - - - corm broken - - - - - - - - - - - - - - - - - - - - - - - - corm wholeness - - - - - - - - - - - - - - - - - - - - - - - - receptacle netted - - - - - - - - - - - - - - - - - - - - - - - - receptacle color pattern - - - - - - - - - - - - - - - - - - - - - - - - ovary wall purple - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal arched - - - - - - - - - - - - - - - - - - - - - - - - tubercle flat - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system decurrent - - - - - - - - - - - - - - - - - - - - - - - - calyx drooping - - - - - - - - - - - - - - - - - - - - - - - - apical hook cauline to - - - - - - - - - - - - - - - - - - - - - - - - tepal inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - petiole bilobed - - - - - - - - - - - - - - - - - - - - - - - - bud posterior to - - - - - - - - - - - - - - - - - - - - - - - - peduncle serrated - - - - - - - - - - - - - - - - - - - - - - - - gynophore linear - - - - - - - - - - - - - - - - - - - - - - - - receptacle unbranched - - - - - - - - - - - - - - - - - - - - - - - - receptacle branchiness - - - - - - - - - - - - - - - - - - - - - - - - pollen opposite - - - - - - - - - - - - - - - - - - - - - - - - petiole ochre - - - - - - - - - - - - - - - - - - - - - - - - leaf margin prominent - - - - - - - - - - - - - - - - - - - - - - - - testa pubescent - - - - - - - - - - - - - - - - - - - - - - - - gynophore fused with - - - - - - - - - - - - - - - - - - - - - - - - bract distichous - - - - - - - - - - - - - - - - - - - - - - - - cortex pubescent - - - - - - - - infructescence male - true - - - - - - - - infructescence phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - endosperm elliptic - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure swollen - - - - - - - - - - - - - - - - - - - - - - - - anther bilobed - - - - - - - - - - - - - - - - - - - - - - - - bract clavate - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle attenuate - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system curled - - - - - - - - - - - - - - - - - - - - - - - - nectary kinked - - - - - - - - - - - - - - - - - - - - - - - - shoot system hispid - - - - - - - - - - - - - - - - - - - - - - - - mesocarp pink - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex complex - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex complexity - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus cuspidate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf arched - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf concavity - - - - - - - - - - - - - - - - - - - - - - - - stamen sigmoid - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus attenuate - - - - - - - - - - - - - - - - - - - - - - - - bulb brown - - - - - - - - - - - - - - - - - - - - - - - - bulb color - - - - - - - - - - - - - - - - - - - - - - - - pappus autogenous - - - - - - - - - - - - - - - - - - - - - - - - lamina tomentose - - - - - - - - - - - - - - - - - - - - - - - - central zone truncated - - - - - - - - - - - - - - - - - - - - - - - - prophyll bifurcated - - - - - - - - - - - - - - - - - - - - - - - - prophyll branchiness - - - - - - - - - - - - - - - - - - - - - - - - hilum slit-like - - - - - - - - - - - - - - - - - - - - - - - - anther theca obovate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal decurrent - - - - - - - - - - - - - - - - - - - - - - - - corolla pointed - - - - - - - - - - - - - - - - - - - - - - - - anther adjacent to - - - - - - - - - - - - - - - - - - - - - - - - glume angular - - - - - - - - - - - - - - - - - - - - - - - - root tip brittle - - - - - - - - - - - - - - - - - - - - - - - - lower glume vestigial - - - - - - - - - - - - - - - - - - - - - - - - bud red brown - - - - - - - - - - - - - - - - - - - - - - - - tepal blunt - - - - - - - - - - - - - - - - - - - - - - - - hydathode lanceolate - - - - - - - - - - - - - - - - - - - - - - - - prickle sparse - - - - - - - - - - - - - - - - - - - - - - - - canal attenuate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell age - - - - - - - - - - - - - - - - - - - - - - - - scutellar node linear - - - - - - - - - - - - - - - - - - - - - - - - stele circular - - - - - - - - - - - - - - - - - - - - - - - - glume basal to - - - - - - - - - - - - - - - - - - - - - - - - locule tomentose - - - - - - - - - - - - - - - - - - - - - - - - pedicel dry - - - - - - - - - - - - - - - - - - - - - - - - pedicel wetness - - - - - - - - - - - - - - - - - - - - - - - - disk flower orbicular - - - - - - - - - - - - - - - - - - - - - - - - epidermis viscous - - - - - - - - - - - - - - - - - - - - - - - - epidermis viscosity - - - - - - - - - - - - - - - - - - - - - - - - bud indurated - - - - - - - - - - - - - - - - - - - - - - - - seta young - - - - - - - - - - - - - - - - - - - - - - - - seta age - - - - - - - - - - - - - - - - - - - - - - - - flower axial to - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein heart shaped - - - - - - - - - - - - - - - - - - - - - - - - rhizome bulbous - - - - - - - - - - - - - - - - - - - - - - - - leaf margin acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaf margin sharpness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member open - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member closure - - - - - - - - - - - - - - - - - - - - - - - - plant callus cylindrical - - - - - - - - - - - - - - - - - - - - - - - - calyx rough - - - - - - - - - - - - - - - - - - - - - - - - stem arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - simple leaf dark green - - - - - - - - - - - - - - - - - - - - - - - - simple leaf color - - - - - - - - axil acute - true - - - - - - - - axil duration - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium oblate - - - - - - - - - - - - - - - - - - - - - - - - pericarp condensed - - - - - - - - - - - - - - - - - - - - - - - - shoot system alternate placement - - - - - - - - - - - - - - - - - - - - - - - - shoot system spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - exocarp areolate - - - - - - - - - - - - - - - - - - - - - - - - rhizome concave - - - - - - - - - - - - - - - - - - - - - - - - root tip slit-like - - - - - - - - - - - - - - - - - - - - - - - - pericarp quadrangular - - - - - - - - - - - - - - - - - - - - - - - - involucre dry - - - - - - - - - - - - - - - - - - - - - - - - involucre wetness - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath purple - - - - - - - - - - - - - - - - - - - - - - - - lamina fused with - - - - - - - - - - - - - - - - - - - - - - - - hilum punctate - - - - - - - - - - - - - - - - - - - - - - - - hilum spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root punctate - - - - - - - - - - - - - - - - - - - - - - - - corolla wrinkled - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis ovate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - endocarp white - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle condensed - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet bifurcated - - - - - - - - - - - - - - - - - - - - - - - - petal arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - keel bilobed - - - - - - - - - - - - - - - - - - - - - - - - - - - - micropyle phenotype - - - - - - - - - - - - - - - - - - - - - - - - micropyle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - micropyle thickness - - - - - - - - - - - - - - - - - - - - - - - - perianth functional - - - - - - - - - - - - - - - - - - - - - - - - perianth functionality - - - - - - - - - - - - - - - - - - - - - - - - calyx dispersed - - - - - - - - gynoecium hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence hollow - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle present - - - - - - - - - - - - - - - - - - - - - - - - - - - - seed operculum phenotype - - - - - - - - - - - - - - - - - - - - - - - - seed operculum angular - - - - - - - - - - - - - - - - - - - - - - - - seed operculum shape - - - - - - - - keel male - true - - - - - - - - - - - - - - - - - - - - - - - - spikelet straight - - - - - - - - - - - - - - - - - - - - - - - - trichome dispersed - - - - - - - - - - - - - - - - - - - - - - - - seed flexible - - - - - - - - - - - - - - - - - - - - - - - - inflorescence overlapping - - - - - - - - - - - - - - - - - - - - - - - - crown root attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina dark green - - - - - - - - - - - - - - - - - - - - - - - - connective blue - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal emarginate - - - - - - - - - - - - - - - - - - - - - - - - peduncle unbranched - - - - - - - - - - - - - - - - - - - - - - - - inflorescence red - - - - - - - - connective continuous - true - - - - - - - - connective occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina linear - - - - - - - - - - - - - - - - - - - - - - - - axillary bud position - - - - - - - - - - - - - - - - - - - - - - - - testa surrounding - - - - - - - - - - - - - - - - - - - - - - - - testa right - - - - - - - - - - - - - - - - - - - - - - - - central zone ventral to - - - - - - - - - - - - - - - - - - - - - - - - thorn symmetrical - - - - - - - - - - - - - - - - - - - - - - - - thorn symmetry - - - - - - - - - - - - - - - - - - - - - - - - style convex - - - - - - - - - - - - - - - - - - - - - - - - seed surrounding - - - - - - - - - - - - - - - - - - - - - - - - endocarp convex - - - - - - - - - - - - - - - - - - - - - - - - endocarp concavity - - - - - - - - - - - - - - - - - - - - - - - - tepal broken - - - - - - - - - - - - - - - - - - - - - - - - tepal wholeness - - - - - - - - - - - - - - - - - - - - - - - - terminal bud simple - - - - - - - - - - - - - - - - - - - - - - - - terminal bud complexity - - - - - - - - - - - - - - - - - - - - - - - - stamen obovate - - - - - - - - - - - - - - - - - - - - - - - - style pink - - - - - - - - - - - - - - - - - - - - - - - - pedicel brittle - - - - - - - - - - - - - - - - - - - - - - - - connective lanceolate - - - - - - - - - - - - - - - - - - - - - - - - connective sharpness - - - - - - - - - - - - - - - - - - - - - - - - calyx old - - - - - - - - - - - - - - - - - - - - - - - - shoot apex coating - - - - - - - - - - - - - - - - - - - - - - - - spikelet branched - - - - - - - - - - - - - - - - - - - - - - - - spikelet branchiness - - - - - - - - - - - - - - - - - - - - - - - - ligule circular - - - - - - - - - - - - - - - - - - - - - - - - leaf zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - keel flush - - - - - - - - - - - - - - - - - - - - - - - - petiole increased size - - - - - - - - - - - - - - - - - - - - - - - - sporangium bilateral - - - - - - - - - - - - - - - - - - - - - - - - bract unbranched - - - - - - - - - - - - - - - - - - - - - - - - mesophyll divergent from - - - - - - - - - - - - - - - - - - - - - - - - peduncle pink - - - - - - - - - - - - - - - - - - - - - - - - pedicel sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - placenta white - - - - - - - - - - - - - - - - - - - - - - - - stolon linear - - - - - - - - - - - - - - - - - - - - - - - - placenta inserted into - - - - - - - - - - - - - - - - - - - - - - - - connective attached to - - - - - - - - - - - - - - - - - - - - - - - - connective attachment quality - - - - - - - - - - - - - - - - - - - - - - - - hypanthium emarginate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium concavity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem circular - - - - - - - - hydathode recurrent - true - - - - - - - - hydathode occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - integument brittle - - - - - - - - - - - - - - - - - - - - - - - - integument structure - - - - - - - - - - - - - - - - - - - - - - - - staminode decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - staminode water composition - - - - - - - - - - - - - - - - - - - - - - - - raphe increased thickness - - - - - - - - - - - - - - - - - - - - - - - - raphe thickness - - - - - - - - - - - - - - - - - - - - - - - - sepal transparent - - - - - - - - - - - - - - - - - - - - - - - - sepal opacity - - - - - - - - - - - - - - - - - - - - - - - - epicalyx heart shaped - - - - - - - - - - - - - - - - - - - - - - - - epicalyx concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit increased size - - - - - - - - - - - - - - - - - - - - - - - - epicalyx hispid - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus slit-like - - - - - - - - - - - - - - - - - - - - - - - - apical hook decreased amount - - - - - - - - - - - - - - - - - - - - - - - - apical hook amount - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf terminal - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue bifurcated - - - - - - - - - - - - - - - - - - - - - - - - filament truncated - - - - - - - - - - - - - - - - - - - - - - - - style brittle - - - - - - - - - - - - - - - - - - - - - - - - keel swollen - - - - - - - - - - - - - - - - - - - - - - - - seed adhesive - - - - - - - - - - - - - - - - - - - - - - - - seed adhesivity - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell swollen - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell structure - - - - - - - - - - - - - - - - - - - - - - - - - - - - sepal margin phenotype - - - - - - - - - - - - - - - - - - - - - - - - sepal margin square - - - - - - - - - - - - - - - - - - - - - - - - sepal margin 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell condensed - - - - - - - - - - - - - - - - - - - - - - - - hilum erect - - - - - - - - - - - - - - - - - - - - - - - - costa folded - - - - - - - - - - - - - - - - - - - - - - - - costa surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - rhizome spherical - - - - - - - - - - - - - - - - - - - - - - - - funicle flat - - - - - - - - - - - - - - - - - - - - - - - - gynoecium size - - - - - - - - - - - - - - - - - - - - - - - - endosperm purple - - - - - - - - - - - - - - - - - - - - - - - - valve increased thickness - - - - - - - - - - - - - - - - - - - - - - - - epidermis smooth - - - - - - - - - - - - - - - - - - - - - - - - connective flattened - - - - - - - - - - - - - - - - - - - - - - - - prickle decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - prickle water composition - - - - - - - - - - - - - - - - - - - - - - - - disk flower trilobed - - - - - - - - - - - - - - - - - - - - - - - - palea fertile - - - - - - - - - - - - - - - - - - - - - - - - staminode pale pink - - - - - - - - - - - - - - - - - - - - - - - - petiole margin lanceolate - - - - - - - - - - - - - - - - - - - - - - - - trichome angular - - - - - - - - - - - - - - - - - - - - - - - - sapwood purple - - - - - - - - - - - - - - - - - - - - - - - - costa obtuse - - - - - - - - - - - - - - - - - - - - - - - - stalk translucent - - - - - - - - - - - - - - - - - - - - - - - - stalk opacity - - - - - - - - - - - - - - - - - - - - - - - - seed bifurcated - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem bifurcated - - - - - - - - - - - - - - - - - - - - - - - - anther furrowed - - - - - - - - - - - - - - - - - - - - - - - - costa oblong - - - - - - - - - - - - - - - - - - - - - - - - costa right - - - - - - - - - - - - - - - - - - - - - - - - stipule pinnate - - - - - - - - - - - - - - - - - - - - - - - - pericarp laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - stem concentrated - - - - - - - - - - - - - - - - - - - - - - - - stem concentration of - - - - - - - - - - - - - - - - - - - - - - - - endosperm grooved - - - - - - - - - - - - - - - - - - - - - - - - petiolule falciform - - - - - - - - - - - - - - - - - - - - - - - - funicle proximal to - - - - - - - - epidermis subacute - true - - - - - - - - epidermis duration - true - - - - - - - - - - - - - - - - - - - - - - - - filament purple - - - - - - - - receptacle acute - true - - - - - - - - - - - - - - - - - - - - - - - - calyx blunt - - - - - - - - - - - - - - - - - - - - - - - - aril kinked - - - - - - - - - - - - - - - - - - - - - - - - rhizome loose - - - - - - - - style premature - true - - - - - - - - style onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - calyx rugose - - - - - - - - - - - - - - - - - - - - - - - - sheath cell condensed - - - - - - - - - - - - - - - - - - - - - - - - anther theca bilobed - - - - - - - - - - - - - - - - - - - - - - - - bark mature - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium raised - - - - - - - - - - - - - - - - - - - - - - - - leaflet leaf-like - - - - - - - - - - - - - - - - - - - - - - - - tuberous root swollen - - - - - - - - - - - - - - - - - - - - - - - - tuberous root structure - - - - - - - - - - - - - - - - - - - - - - - - glume rugose - - - - - - - - - - - - - - - - - - - - - - - - tubercle yellow - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina tomentose - - - - - - - - pappus male - true - - - - - - - - - - - - - - - - - - - - - - - - thorn yellow - - - - - - - - - - - - - - - - - - - - - - - - lower glume subulate - - - - - - - - - - - - - - - - - - - - - - - - lodicule fleshy - - - - - - - - - - - - - - - - - - - - - - - - lodicule composition - - - - - - - - - - - - - - - - - - - - - - - - inflorescence transparent - - - - - - - - - - - - - - - - - - - - - - - - inflorescence actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - bract slender - - - - - - - - - - - - - - - - - - - - - - - - involucre slender - - - - - - - - - - - - - - - - - - - - - - - - corolla convex - - - - - - - - - - - - - - - - - - - - - - - - leaflet branched - - - - - - - - - - - - - - - - - - - - - - - - leaflet branchiness - - - - - - - - - - - - - - - - - - - - - - - - sheath cell bilobed - - - - - - - - - - - - - - - - - - - - - - - - involucre yellow green - - - - - - - - - - - - - - - - - - - - - - - - gynophore warty - - - - - - - - - - - - - - - - - - - - - - - - anther theca convex - - - - - - - - - - - - - - - - - - - - - - - - anther theca concavity - - - - - - - - - - - - - - - - - - - - - - - - stem ornamentation - - - - - - - - - - - - - - - - - - - - - - - - root tip simple - - - - - - - - - - - - - - - - - - - - - - - - root tip complexity - - - - - - - - - - - - - - - - - - - - - - - - growth ring alternate placement - - - - - - - - - - - - - - - - - - - - - - - - growth ring spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - aril violet - - - - - - - - - - - - - - - - - - - - - - - - petiole cut - - - - - - - - - - - - - - - - - - - - - - - - bracteole wrinkled - - - - - - - - - - - - - - - - - - - - - - - - receptacle areolate - - - - - - - - - - - - - - - - - - - - - - - - receptacle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - petiolule dry - - - - - - - - - - - - - - - - - - - - - - - - petiolule wetness - - - - - - - - - - - - - - - - - - - - - - - - hydathode diameter - - - - - - - - - - - - - - - - - - - - - - - - keel dead - - - - - - - - - - - - - - - - - - - - - - - - keel viability - - - - - - - - - - - - - - - - - - - - - - - - inflorescence black - - - - - - - - - - - - - - - - - - - - - - - - stalk offset - - - - - - - - - - - - - - - - - - - - - - - - endosperm areolate - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell cauline to - - - - - - - - - - - - - - - - - - - - - - - - papilla cell condensed - - - - - - - - - - - - - - - - - - - - - - - - papilla cell structure - - - - - - - - endocarp acute - true - - - - - - - - endocarp duration - true - - - - - - - - - - - - - - - - - - - - - - - - tubercle dentated - - - - - - - - - - - - - - - - - - - - - - - - scutellar node attenuate - - - - - - - - - - - - - - - - - - - - - - - - testa asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - testa symmetry - - - - - - - - - - - - - - - - - - - - - - - - flower auriculate - - - - - - - - - - - - - - - - - - - - - - - - petiole clavate - - - - - - - - - - - - - - - - - - - - - - - - hilum conspicuous - - - - - - - - - - - - - - - - - - - - - - - - staminode columnar - - - - - - - - - - - - - - - - - - - - - - - - plant callus retuse - - - - - - - - - - - - - - - - - - - - - - - - tepal red - - - - - - - - - - - - - - - - - - - - - - - - bracteole broken - - - - - - - - - - - - - - - - - - - - - - - - bracteole wholeness - - - - - - - - - - - - - - - - - - - - - - - - epidermis curved - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf kinked - - - - - - - - - - - - - - - - - - - - - - - - exocarp erect - - - - - - - - - - - - - - - - - - - - - - - - bracteole decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - bracteole water composition - - - - - - - - - - - - - - - - - - - - - - - - rhizome light orange - - - - - - - - peduncle down - true - - - - - - - - - - - - - - - - - - - - - - - - seed subcircular - - - - - - - - - - - - - - - - - - - - - - - - stem surrounding - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem purple - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem color - - - - - - - - - - - - - - - - - - - - - - - - crown root funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - canal hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf base oblong - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf linear - - - - - - - - - - - - - - - - - - - - - - - - petiole margin folded - - - - - - - - - - - - - - - - - - - - - - - - petiole margin surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - ray system dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petal flattened - - - - - - - - - - - - - - - - - - - - - - - - leaf multifid - - - - - - - - - - - - - - - - - - - - - - - - corolla brittle - - - - - - - - - - - - - - - - - - - - - - - - androecium sharpness - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell linear - - - - - - - - - - - - - - - - - - - - - - - - lemma area - - - - - - - - - - - - - - - - - - - - - - - - petal yellow - - - - - - - - - - - - - - - - - - - - - - - - pedicel trilobed - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system fleshy - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system composition - - - - - - - - - - - - - - - - - - - - - - - - petal terminal - - - - - - - - - - - - - - - - - - - - - - - - style decreased amount - - - - - - - - - - - - - - - - - - - - - - - - petiole pedunculate - - - - - - - - - - - - - - - - - - - - - - - - peduncle conspicuous - - - - - - - - apical hook female - true - - - - - - - - apical hook phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - infructescence umbonate - - - - - - - - - - - - - - - - - - - - - - - - crown root concave - - - - - - - - - - - - - - - - - - - - - - - - crown root concavity - - - - - - - - - - - - - - - - - - - - - - - - bract soft - - - - - - - - - - - - - - - - - - - - - - - - bract hardness - - - - - - - - - - - - - - - - - - - - - - - - corolla bent - - - - - - - - - - - - - - - - - - - - - - - - tepal white - - - - - - - - - - - - - - - - - - - - - - - - style cuneate - - - - - - - - - - - - - - - - - - - - - - - - flower decussate - - - - - - - - - - - - - - - - - - - - - - - - bracteole hispid - - - - - - - - - - - - - - - - - - - - - - - - corolla subcircular - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet trilobed - - - - - - - - - - - - - - - - - - - - - - - - pedicel vertical - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal warty - - - - - - - - - - - - - - - - - - - - - - - - inflorescence emarginate - - - - - - - - - - - - - - - - - - - - - - - - pappus setose - - - - - - - - - - - - - - - - - - - - - - - - pappus pilosity - - - - - - - - - - - - - - - - - - - - - - - - stem rugose - - - - - - - - - - - - - - - - - - - - - - - - anther pink - - - - - - - - stamen premature - true - - - - - - - - stamen onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - calyx cleft - - - - - - - - - - - - - - - - - - - - - - - - peristome bronze - - - - - - - - - - - - - - - - - - - - - - - - flower viscous - - - - - - - - - - - - - - - - - - - - - - - - flower viscosity - - - - - - - - - - - - - - - - - - - - - - - - flower bud white - - - - - - - - - - - - - - - - - - - - - - - - flower bud color - - - - - - - - - - - - - - - - - - - - - - - - involucre smooth - - - - - - - - - - - - - - - - - - - - - - - - aril concealed by - - - - - - - - - - - - - - - - - - - - - - - - plant spore warty - - - - - - - - - - - - - - - - - - - - - - - - rhizome ligneous - - - - - - - - - - - - - - - - - - - - - - - - infructescence fleshy - - - - - - - - - - - - - - - - - - - - - - - - receptacle spatulate - - - - - - - - - - - - - - - - - - - - - - - - corm red brown - - - - - - - - - - - - - - - - - - - - - - - - perianth laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge wrinkled - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge texture - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root age - - - - - - - - - - - - - - - - - - - - - - - - heartwood decreased amount - - - - - - - - - - - - - - - - - - - - - - - - heartwood amount - - - - - - - - - - - - - - - - - - - - - - - - anther confluent with - - - - - - - - - - - - - - - - - - - - - - - - pericarp inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - apical hook fused with - - - - - - - - - - - - - - - - - - - - - - - - keel attenuate - - - - - - - - - - - - - - - - - - - - - - - - awn indurated - - - - - - - - - - - - - - - - - - - - - - - - flower normal - - - - - - - - - - - - - - - - - - - - - - - - flower deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - peduncle sharp - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf circular - - - - - - - - - - - - - - - - - - - - - - - - spikelet white - - - - - - - - - - - - - - - - - - - - - - - - seed trichome osseous - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore glabrous - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore pilosity - - - - - - - - - - - - - - - - - - - - - - - - valve acuminate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member opposite - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure bifurcated - - - - - - - - - - - - - - - - - - - - - - - - valve angle - - - - - - - - - - - - - - - - - - - - - - - - palea green - - - - - - - - - - - - - - - - - - - - - - - - corolla vertical to - - - - - - - - - - - - - - - - - - - - - - - - root warty - - - - - - - - - - - - - - - - - - - - - - - - root texture - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus glistening - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus reflectivity - - - - - - - - - - - - - - - - - - - - - - - - bracteole auriculate - - - - - - - - - - - - - - - - - - - - - - - - hilum orbicular - - - - - - - - - - - - - - - - - - - - - - - - stipule white - - - - - - - - - - - - - - - - - - - - - - - - sorus brown - - - - - - - - - - - - - - - - - - - - - - - - sorus color - - - - - - - - - - - - - - - - - - - - - - - - corolla trumpet-shaped - - - - - - - - - - - - - - - - - - - - - - - - mesocarp orange - - - - - - - - - - - - - - - - - - - - - - - - bark magenta - - - - - - - - - - - - - - - - - - - - - - - - bud falciform - - - - - - - - - - - - - - - - - - - - - - - - stalk tapered - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore truncated - - - - - - - - - - - - - - - - - - - - - - - - leaf tight - - - - - - - - - - - - - - - - - - - - - - - - petiolule size - - - - - - - - rhizome iridescent - true - - - - - - - - rhizome variability of color - true - - - - - - - - - - - - - - - - - - - - - - - - apical hook spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina conspicuous - - - - - - - - - - - - - - - - - - - - - - - - microspore rough - - - - - - - - - - - - - - - - - - - - - - - - bark patchy - - - - - - - - - - - - - - - - - - - - - - - - staminode truncated - - - - - - - - - - - - - - - - - - - - - - - - infructescence alternate placement - - - - - - - - prickle up - true - - - - - - - - - - - - - - - - - - - - - - - - prickle direction - - - - - - - - - - - - - - - - - - - - - - - - periderm dark brown - - - - - - - - - - - - - - - - - - - - - - - - pericarp light brown - - - - - - - - - - - - - - - - - - - - - - - - sheath cell angular - - - - - - - - - - - - - - - - - - - - - - - - leaf dead - - - - - - - - - - - - - - - - - - - - - - - - leaf viability - - - - - - - - - - - - - - - - - - - - - - - - calyx hispidulous - - - - - - - - plant callus hermaphrodite - true - - - - - - - - plant callus phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - upper glume whorled - - - - - - - - - - - - - - - - - - - - - - - - upper glume spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell triangular - - - - - - - - - - - - - - - - - - - - - - - - costa ovate - - - - - - - - - - - - - - - - - - - - - - - - costa convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - central zone convex - - - - - - - - - - - - - - - - - - - - - - - - inflorescence yellow brown - - - - - - - - - - - - - - - - - - - - - - - - corolla present - - - - - - - - - - - - - - - - - - - - - - - - upper glume basal to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence herbaceous - - - - - - - - - - - - - - - - - - - - - - - - inflorescence shedability - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal branched - - - - - - - - - - - - - - - - - - - - - - - - androecium bent - - - - - - - - - - - - - - - - - - - - - - - - aril spherical - - - - - - - - - - - - - - - - - - - - - - - - stem immature - - - - - - - - - - - - - - - - - - - - - - - - endocarp raised - - - - - - - - - - - - - - - - - - - - - - - - corolla scaly - - - - - - - - - - - - - - - - - - - - - - - - endocarp laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - periderm subcircular - - - - - - - - - - - - - - - - - - - - - - - - periderm 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pericarp spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - central zone arched - - - - - - - - - - - - - - - - - - - - - - - - seed trichome exserted - - - - - - - - - - - - - - - - - - - - - - - - bracteole pointed - - - - - - - - - - - - - - - - - - - - - - - - keel black - - - - - - - - - - - - - - - - - - - - - - - - carpel exserted - - - - - - - - - - - - - - - - - - - - - - - - testa oblique to - - - - - - - - - - - - - - - - - - - - - - - - aril adaxial to - - - - - - - - - - - - - - - - - - - - - - - - pappus obovate - - - - - - - - - - - - - - - - - - - - - - - - anther theca decreased amount - - - - - - - - - - - - - - - - - - - - - - - - anther theca amount - - - - - - - - - - - - - - - - - - - - - - - - style laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal grooved - - - - - - - - - - - - - - - - - - - - - - - - carpel axial to - - - - - - - - - - - - - - - - - - - - - - - - stamen bent - - - - - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf phenotype - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf lanceolate - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf sharpness - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus ovate - - - - - - - - - - - - - - - - - - - - - - - - bud convolute - - - - - - - - - - - - - - - - - - - - - - - - stigma glandular - - - - - - - - - - - - - - - - - - - - - - - - stigma morphology - - - - - - - - - - - - - - - - - - - - - - - - stipule congested - - - - - - - - - - - - - - - - - - - - - - - - locule dark brown - - - - - - - - - - - - - - - - - - - - - - - - stigma subterminal - - - - - - - - - - - - - - - - - - - - - - - - calyx pedunculate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem decurrent - - - - - - - - - - - - - - - - - - - - - - - - leaf transparent - - - - - - - - - - - - - - - - - - - - - - - - leaf opacity - - - - - - - - - - - - - - - - - - - - - - - - central zone notched - - - - - - - - - - - - - - - - - - - - - - - - bark crowded - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence drooping - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex elliptic - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - ligule revolute - - - - - - - - - - - - - - - - - - - - - - - - caruncle pointed - - - - - - - - - - - - - - - - - - - - - - - - caruncle sharpness - - - - - - - - - - - - - - - - - - - - - - - - shoot system decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - staminode yellow - - - - - - - - - - - - - - - - - - - - - - - - whole plant granular - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member whorled - - - - - - - - - - - - - - - - - - - - - - - - gynoecium attenuate - - - - - - - - - - - - - - - - - - - - - - - - axil flattened - - - - - - - - - - - - - - - - - - - - - - - - axil curvature - - - - - - - - - - - - - - - - - - - - - - - - aril glandular - - - - - - - - - - - - - - - - - - - - - - - - aril morphology - - - - - - - - - - - - - - - - - - - - - - - - sorus revolute - - - - - - - - - - - - - - - - - - - - - - - - sorus shape - - - - - - - - - - - - - - - - - - - - - - - - seed adjacent to - - - - - - - - - - - - - - - - - - - - - - - - involucre indurated - - - - - - - - - - - - - - - - - - - - - - - - locule distal to - - - - - - - - - - - - - - - - - - - - - - - - calyx attached to - - - - - - - - - - - - - - - - - - - - - - - - keel undulate - - - - - - - - - - - - - - - - - - - - - - - - involucre angular - - - - - - - - - - - - - - - - - - - - - - - - leaf light green - - - - - - - - - - - - - - - - - - - - - - - - gynophore inserted into - - - - - - - - leaf apex up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf apex direction - - - - - - - - - - - - - - - - - - - - - - - - seed spotted - - - - - - - - - - - - - - - - - - - - - - - - corolla quadrangular - - - - - - - - - - - - - - - - - - - - - - - - fruit angle - - - - - - - - - - - - - - - - - - - - - - - - oil gland split - - - - - - - - - - - - - - - - - - - - - - - - awn lobed - - - - - - - - - - - - - - - - - - - - - - - - stamen young - - - - - - - - - - - - - - - - - - - - - - - - stamen age - - - - - - - - - - - - - - - - - - - - - - - - style whole - - - - - - - - - - - - - - - - - - - - - - - - style wholeness - - - - - - - - - - - - - - - - - - - - - - - - funicle white - - - - - - - - - - - - - - - - - - - - - - - - heartwood ovate - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma sterile - - - - - - - - - - - - - - - - - - - - - - - - glume caudate - - - - - - - - - - - - - - - - - - - - - - - - apical hook coiled - - - - - - - - - - - - - - - - - - - - - - - - apical hook coiling - - - - - - - - - - - - - - - - - - - - - - - - lenticel spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx hollow - - - - - - - - - - - - - - - - - - - - - - - - perianth angular - - - - - - - - - - - - - - - - - - - - - - - - tubercle brown - - - - - - - - - - - - - - - - - - - - - - - - anther theca oblong - - - - - - - - - - - - - - - - - - - - - - - - corolla hispid - - - - - - - - - - - - - - - - - - - - - - - - hilum present - - - - - - - - - - - - - - - - - - - - - - - - hilum amount - - - - - - - - - - - - - - - - - - - - - - - - leaf firm - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis lateral to - - - - - - - - - - - - - - - - - - - - - - - - root attenuate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal transparent - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal opacity - - - - - - - - - - - - - - - - - - - - - - - - involucre fused with - - - - - - - - - - - - - - - - - - - - - - - - leaf base glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf base pilosity - - - - - - - - - - - - - - - - - - - - - - - - fruit inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - stem scalloped - - - - - - - - - - - - - - - - - - - - - - - - caruncle oblong - - - - - - - - - - - - - - - - - - - - - - - - seed trichome alternate placement - - - - - - - - - - - - - - - - - - - - - - - - fruit retuse - - - - - - - - - - - - - - - - - - - - - - - - bud convex - - - - - - - - - - - - - - - - - - - - - - - - endocarp blue - - - - - - - - - - - - - - - - - - - - - - - - axil reniform - - - - - - - - - - - - - - - - - - - - - - - - short shoot condensed - - - - - - - - - - - - - - - - - - - - - - - - short shoot structure - - - - - - - - - - - - - - - - - - - - - - - - seed asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - seed symmetry - - - - - - - - - - - - - - - - - - - - - - - - seta slender - - - - - - - - - - - - - - - - - - - - - - - - stipule transparent - - - - - - - - - - - - - - - - - - - - - - - - stipule opacity - - - - - - - - - - - - - - - - - - - - - - - - bud glandular - - - - - - - - - - - - - - - - - - - - - - - - bud morphology - - - - - - - - - - - - - - - - - - - - - - - - bud inserted into - - - - - - - - - - - - - - - - - - - - - - - - seed trichome orbicular - - - - - - - - - - - - - - - - - - - - - - - - root vertical - - - - - - - - - - - - - - - - - - - - - - - - root spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - carpel trapezoid - - - - - - - - - - - - - - - - - - - - - - - - bract pointed - - - - - - - - - - - - - - - - - - - - - - - - calyx subcircular - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure dentated - - - - - - - - - - - - - - - - - - - - - - - - parenchyma white - - - - - - - - - - - - - - - - - - - - - - - - parenchyma color - - - - - - - - - - - - - - - - - - - - - - - - pedicel scalloped - - - - - - - - - - - - - - - - - - - - - - - - stereome oblong - - - - - - - - - - - - - - - - - - - - - - - - crown root inserted into - - - - - - - - - - - - - - - - - - - - - - - - lemma slender - - - - - - - - - - - - - - - - - - - - - - - - pedicel diameter - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma ovate - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - keel mature - - - - - - - - - - - - - - - - - - - - - - - - lamina cuspidate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis fused with - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis structure - - - - - - - - - - - - - - - - - - - - - - - - carpel bilobed - - - - - - - - - - - - - - - - - - - - - - - - pericarp opposite - - - - - - - - - - - - - - - - - - - - - - - - androecium whorled - - - - - - - - - - - - - - - - - - - - - - - - androecium spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - stamen subtriangular - - - - - - - - - - - - - - - - - - - - - - - - raphe orange - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue inserted into - - - - - - - - - - - - - - - - - - - - - - - - receptacle protruding into - - - - - - - - - - - - - - - - - - - - - - - - locule reniform - - - - - - - - - - - - - - - - - - - - - - - - locule concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - androecium subulate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall orbicular - - - - - - - - - - - - - - - - - - - - - - - - stele pointed - - - - - - - - - - - - - - - - - - - - - - - - bract furrowed - - - - - - - - - - - - - - - - - - - - - - - - plant cell increased thickness - - - - - - - - - - - - - - - - - - - - - - - - corolla asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - flower dark purple - - - - - - - - - - - - - - - - - - - - - - - - involucre obconical - - - - - - - - - - - - - - - - - - - - - - - - stamen strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril opposite - - - - - - - - - - - - - - - - - - - - - - - - pedicel separating - - - - - - - - - - - - - - - - - - - - - - - - androecium blunt - - - - - - - - - - - - - - - - - - - - - - - - bud absent - - - - - - - - - - - - - - - - - - - - - - - - scutellar node broken - - - - - - - - - - - - - - - - - - - - - - - - scutellar node wholeness - - - - - - - - - - - - - - - - - - - - - - - - calyx mass - - - - - - - - - - - - - - - - - - - - - - - - testa ovate - - - - - - - - - - - - - - - - - - - - - - - - flower straight - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge convex - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge concavity - - - - - - - - - - - - - - - - - - - - - - - - stalk cuspidate - - - - - - - - - - - - - - - - - - - - - - - - root tip pointed - - - - - - - - - - - - - - - - - - - - - - - - seed trichome inflexible - - - - - - - - - - - - - - - - - - - - - - - - seed trichome flexibility - - - - - - - - - - - - - - - - - - - - - - - - shoot internode curled - - - - - - - - - - - - - - - - - - - - - - - - inflorescence complex - - - - - - - - - - - - - - - - - - - - - - - - fruit trapezoid - - - - - - - - - - - - - - - - - - - - - - - - peduncle evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - peduncle shedability - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina basal to - - - - - - - - - - - - - - - - - - - - - - - - pedicel dispersed - - - - - - - - leaf margin absent - true - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member fleshy - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member composition - - - - - - - - - - - - - - - - - - - - - - - - papilla cell basal to - - - - - - - - - - - - - - - - - - - - - - - - lamina serrated - - - - - - - - - - - - - - - - - - - - - - - - epidermis abaxial to - - - - - - - - - - - - - - - - - - - - - - - - parenchyma cuneate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member dorsal to - - - - - - - - - - - - - - - - - - - - - - - - pedicel edible - - - - - - - - - - - - - - - - - - - - - - - - pedicel edibility - - - - - - - - - - - - - - - - - - - - - - - - filament decreased amount - - - - - - - - - - - - - - - - - - - - - - - - filament amount - - - - - - - - - - - - - - - - - - - - - - - - inflorescence revolute - - - - - - - - - - - - - - - - - - - - - - - - radicle inverted - - - - - - - - - - - - - - - - - - - - - - - - radicle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - petiole cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - tuberous root robust - - - - - - - - - - - - - - - - - - - - - - - - tuberous root shape - - - - - - - - - - - - - - - - - - - - - - - - leaf juvenile - - - - - - - - - - - - - - - - - - - - - - - - trichome spotted - - - - - - - - - - - - - - - - - - - - - - - - trichome color pattern - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma flattened - - - - - - - - - - - - - - - - - - - - - - - - staminode erect - - - - - - - - - - - - - - - - - - - - - - - - fruit displaced to - - - - - - - - - - - - - - - - - - - - - - - - fruit orientation - - - - - - - - - - - - - - - - - - - - - - - - leaflet dry - - - - - - - - - - - - - - - - - - - - - - - - leaflet wetness - - - - - - - - - - - - - - - - - - - - - - - - bud immature - - - - - - - - - - - - - - - - - - - - - - - - oil gland pubescent - - - - - - - - - - - - - - - - - - - - - - - - oil gland maturity - - - - - - - - petiole margin acute - true - - - - - - - - petiole margin duration - true - - - - - - - - - - - - - - - - - - - - - - - - fruit closed - - - - - - - - - - - - - - - - - - - - - - - - vascular system increased thickness - - - - - - - - - - - - - - - - - - - - - - - - vascular system thickness - - - - - - - - - - - - - - - - - - - - - - - - connective reclinate - - - - - - - - - - - - - - - - - - - - - - - - stalk oblique to - - - - - - - - - - - - - - - - - - - - - - - - whole plant dorsal to - - - - - - - - infructescence female - true - - - - - - - - - - - - - - - - - - - - - - - - calyx divergent from - - - - - - - - - - - - - - - - - - - - - - - - carpel spongy - - - - - - - - - - - - - - - - - - - - - - - - spikelet brittle - - - - - - - - - - - - - - - - - - - - - - - - bract involute - - - - - - - - - - - - - - - - - - - - - - - - flower dorsal to - - - - - - - - - - - - - - - - - - - - - - - - root tip prominent - - - - - - - - - - - - - - - - - - - - - - - - canal inflexible - - - - - - - - - - - - - - - - - - - - - - - - canal flexibility - - - - - - - - - - - - - - - - - - - - - - - - root tip spotted - - - - - - - - - - - - - - - - - - - - - - - - root tip color pattern - - - - - - - - - - - - - - - - - - - - - - - - upper glume furrowed - - - - - - - - - - - - - - - - - - - - - - - - chalaza heart shaped - - - - - - - - - - - - - - - - - - - - - - - - chalaza concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stamen prominent - - - - - - - - - - - - - - - - - - - - - - - - apical hook prominent - - - - - - - - flower subacute - true - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf elliptic - - - - - - - - - - - - - - - - - - - - - - - - sorus basal to - - - - - - - - - - - - - - - - - - - - - - - - hypanthium articulated with - - - - - - - - - - - - - - - - - - - - - - - - nectary elliptic - - - - - - - - - - - - - - - - - - - - - - - - receptacle purple - - - - - - - - fruit premature - true - - - - - - - - fruit onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell axial to - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell position - - - - - - - - - - - - - - - - - - - - - - - - thorn ovate - - - - - - - - - - - - - - - - - - - - - - - - fruit yellow brown - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma V-shaped - - - - - - - - - - - - - - - - - - - - - - - - filament flat - - - - - - - - - - - - - - - - - - - - - - - - pith fleshy - - - - - - - - - - - - - - - - - - - - - - - - pith composition - - - - - - - - - - - - - - - - - - - - - - - - valve orbicular - - - - - - - - - - - - - - - - - - - - - - - - pistillode sharpness - - - - - - - - - - - - - - - - - - - - - - - - bud damage - - - - - - - - - - - - - - - - - - - - - - - - calyx transparent - - - - - - - - - - - - - - - - - - - - - - - - calyx opacity - - - - - - - - vascular bundle female - true - - - - - - - - - - - - - - - - - - - - - - - - corolla divergent from - - - - - - - - - - - - - - - - - - - - - - - - bracteole decreased amount - - - - - - - - - - - - - - - - - - - - - - - - leaf subterminal - - - - - - - - - - - - - - - - - - - - - - - - stem mixed - - - - - - - - - - - - - - - - - - - - - - - - awn coiled - - - - - - - - - - - - - - - - - - - - - - - - awn coiling - - - - - - - - - - - - - - - - - - - - - - - - - - - - petiole epidermis phenotype - - - - - - - - - - - - - - - - - - - - - - - - petiole epidermis adaxial to - - - - - - - - - - - - - - - - - - - - - - - - petiole epidermis position - - - - - - - - - - - - - - - - - - - - - - - - lamina peripheral - - - - - - - - - - - - - - - - - - - - - - - - pistillode purple - - - - - - - - - - - - - - - - - - - - - - - - hilum young - - - - - - - - - - - - - - - - - - - - - - - - hilum age - - - - - - - - - - - - - - - - - - - - - - - - canal curved - - - - - - - - - - - - - - - - - - - - - - - - canal curvature - - - - - - - - - - - - - - - - - - - - - - - - ovary wall adaxial to - - - - - - - - - - - - - - - - - - - - - - - - oil gland hairy - - - - - - - - - - - - - - - - - - - - - - - - lamina subulate - - - - - - - - - - - - - - - - - - - - - - - - keel yellow green - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis hairy - - - - - - - - - - - - - - - - - - - - - - - - axil whorled - - - - - - - - - - - - - - - - - - - - - - - - axil spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - trichome decussate - - - - - - - - - - - - - - - - - - - - - - - - fruit distance - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal notched - - - - - - - - - - - - - - - - - - - - - - - - spikelet absent - - - - - - - - - - - - - - - - - - - - - - - - petiole margin yellow brown - - - - - - - - - - - - - - - - - - - - - - - - petiole margin color - - - - - - - - - - - - - - - - - - - - - - - - antiraphe hard - - - - - - - - - - - - - - - - - - - - - - - - antiraphe hardness - - - - - - - - - - - - - - - - - - - - - - - - bract undivided - - - - - - - - - - - - - - - - - - - - - - - - petiolule abaxial to - - - - - - - - - - - - - - - - - - - - - - - - filament leaf-like - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein fleshy - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein composition - - - - - - - - - - - - - - - - - - - - - - - - fruit subrectangular - - - - - - - - - - - - - - - - - - - - - - - - - - - - nucellus phenotype - - - - - - - - - - - - - - - - - - - - - - - - nucellus split - - - - - - - - - - - - - - - - - - - - - - - - nucellus shape - - - - - - - - - - - - - - - - - - - - - - - - petiole black - - - - - - - - - - - - - - - - - - - - - - - - canal opposite - - - - - - - - - - - - - - - - - - - - - - - - stalk white - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf hairy - - - - - - - - - - - - - - - - - - - - - - - - aril circumference - - - - - - - - - - - - - - - - - - - - - - - - - - - - rhizoid phenotype - - - - - - - - - - - - - - - - - - - - - - - - rhizoid spherical - - - - - - - - - - - - - - - - - - - - - - - - rhizoid convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bud spiny - - - - - - - - - - - - - - - - - - - - - - - - pappus acuminate - - - - - - - - - - - - - - - - - - - - - - - - stolon bifurcated - - - - - - - - - - - - - - - - - - - - - - - - aril glistening - - - - - - - - - - - - - - - - - - - - - - - - aril reflectivity - - - - - - - - - - - - - - - - - - - - - - - - involucre spiny - - - - - - - - - - - - - - - - - - - - - - - - involucre surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus kinked - - - - - - - - - - - - - - - - - - - - - - - - heartwood slit-like - - - - - - - - - - - - - - - - - - - - - - - - leaf axil grey - - - - - - - - - - - - - - - - - - - - - - - - receptacle immature - - - - - - - - - - - - - - - - - - - - - - - - whole plant decussate - - - - - - - - - - - - - - - - - - - - - - - - leaf tendency - - - - - - - - - - - - - - - - - - - - - - - - bracteole brown - - - - - - - - - - - - - - - - - - - - - - - - seed trichome offset - - - - - - - - - - - - - - - - - - - - - - - - pedicel convolute - - - - - - - - - - - - - - - - - - - - - - - - style undulate - - - - - - - - - - - - - - - - - - - - - - - - petiole multifid - - - - - - - - - - - - - - - - - - - - - - - - septum Y-shaped - - - - - - - - - - - - - - - - - - - - - - - - septum concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle young - - - - - - - - - - - - - - - - - - - - - - - - axil truncated - - - - - - - - - - - - - - - - - - - - - - - - lamina tubular - - - - - - - - - - - - - - - - - - - - - - - - awn cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - awn composition - - - - - - - - - - - - - - - - - - - - - - - - rhizome prominent - - - - - - - - - - - - - - - - - - - - - - - - canal simple - - - - - - - - - - - - - - - - - - - - - - - - canal complexity - - - - - - - - - - - - - - - - - - - - - - - - infructescence increased thickness - - - - - - - - - - - - - - - - - - - - - - - - infructescence thickness - - - - - - - - corolla premature - true - - - - - - - - corolla onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - tuber smooth - - - - - - - - - - - - - - - - - - - - - - - - petal left - - - - - - - - - - - - - - - - - - - - - - - - - epidermis whole - - - - - - - - - - - - - - - - - - - - - - - - epidermis wholeness - - - - - - - - - - - - - - - - - - - - - - - - calyx parallel to - - - - - - - - - - - - - - - - - - - - - - - - lenticel convex - - - - - - - - - - - - - - - - - - - - - - - - lenticel concavity - - - - - - - - - - - - - - - - - - - - - - - - parenchyma tomentose - - - - - - - - - - - - - - - - - - - - - - - - fruit cuboid - - - - - - - - - - - - - - - - - - - - - - - - receptacle pedunculate - - - - - - - - - - - - - - - - - - - - - - - - tuberous root increased thickness - - - - - - - - - - - - - - - - - - - - - - - - tuberous root thickness - - - - - - - - - - - - - - - - - - - - - - - - glume black - - - - - - - - - - - - - - - - - - - - - - - - raphe ovate - - - - - - - - - - - - - - - - - - - - - - - - raphe convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lenticel granular - - - - - - - - - - - - - - - - - - - - - - - - lenticel composition - - - - - - - - - - - - - - - - - - - - - - - - endosperm angle - - - - - - - - - - - - - - - - - - - - - - - - sheath cell decurrent - - - - - - - - - - - - - - - - - - - - - - - - lower glume drooping - - - - - - - - - - - - - - - - - - - - - - - - pedicel fused with - - - - - - - - - - - - - - - - - - - - - - - - involucre ochre - - - - - - - - - - - - - - - - - - - - - - - - receptacle strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - stamen surrounding - - - - - - - - - - - - - - - - - - - - - - - - stamen broad - - - - - - - - - - - - - - - - - - - - - - - - stem bent - - - - - - - - - - - - - - - - - - - - - - - - flower black - - - - - - - - - - - - - - - - - - - - - - - - micropyle autogenous - - - - - - - - - - - - - - - - - - - - - - - - micropyle structure - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein caudate - - - - - - - - - - - - - - - - - - - - - - - - lemma grooved - - - - - - - - - - - - - - - - - - - - - - - - corolla leaf-like - - - - - - - - - - - - - - - - - - - - - - - - bark hard - - - - - - - - - - - - - - - - - - - - - - - - sepal inflexible - - - - - - - - - - - - - - - - - - - - - - - - sepal flexibility - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus purple - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus color - - - - - - - - - - - - - - - - - - - - - - - - root tip conical - - - - - - - - - - - - - - - - - - - - - - - - petiole margin hairy - - - - - - - - - - - - - - - - - - - - - - - - stipule old - - - - - - - - - - - - - - - - - - - - - - - - stipule age - - - - - - - - - - - - - - - - - - - - - - - - leaf obconical - - - - - - - - - - - - - - - - - - - - - - - - androecium size - - - - - - - - - - - - - - - - - - - - - - - - peristome acuminate - - - - - - - - - - - - - - - - - - - - - - - - shoot apex offset - - - - - - - - - - - - - - - - - - - - - - - - tuberous root slender - - - - - - - - - - - - - - - - - - - - - - - - hydathode prominent - - - - - - - - - - - - - - - - - - - - - - - - gynoecium oblong - - - - - - - - - - - - - - - - - - - - - - - - glume grey - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - axil grey - - - - - - - - - - - - - - - - - - - - - - - - seed trichome undulate - - - - - - - - - - - - - - - - - - - - - - - - palea attached to - - - - - - - - - - - - - - - - - - - - - - - - palea attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf axil oblong - - - - - - - - - - - - - - - - - - - - - - - - ray system curved - - - - - - - - - - - - - - - - - - - - - - - - ray system curvature - - - - - - - - - - - - - - - - - - - - - - - - axil cuneate - - - - - - - - - - - - - - - - - - - - - - - - petiole translucent - - - - - - - - - - - - - - - - - - - - - - - - petiole opacity - - - - - - - - - - - - - - - - - - - - - - - - root tip striated - - - - - - - - - - - - - - - - - - - - - - - - juice sac obovate - - - - - - - - - - - - - - - - - - - - - - - - juice sac convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf axil branched - - - - - - - - - - - - - - - - - - - - - - - - micropyle punctiform - - - - - - - - - - - - - - - - - - - - - - - - micropyle shape - - - - - - - - - - - - - - - - - - - - - - - - keel violet - - - - - - - - - - - - - - - - - - - - - - - - tuber size - - - - - - - - - - - - - - - - - - - - - - - - epidermis coating - - - - - - - - - - - - - - - - - - - - - - - - whole plant sunken - - - - - - - - - - - - - - - - - - - - - - - - whole plant elevation - - - - - - - - - - - - - - - - - - - - - - - - lemma herbaceous - - - - - - - - - - - - - - - - - - - - - - - - lemma shedability - - - - - - - - - - - - - - - - - - - - - - - - style glistening - - - - - - - - - - - - - - - - - - - - - - - - style reflectivity - - - - - - - - - - - - - - - - - - - - - - - - aril opposite - - - - - - - - - - - - - - - - - - - - - - - - calyx dendritic - - - - - - - - - - - - - - - - - - - - - - - - lenticel pointed - - - - - - - - - - - - - - - - - - - - - - - - lenticel sharpness - - - - - - - - leaf sheath hermaphrodite - true - - - - - - - - leaf sheath phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - aril red brown - - - - - - - - - - - - - - - - - - - - - - - - rhizome depth - - - - - - - - - - - - - - - - - - - - - - - - rhizome normal - - - - - - - - - - - - - - - - - - - - - - - - rhizome deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - whole plant terminal - - - - - - - - - - - - - - - - - - - - - - - - sporangium black - - - - - - - - - - - - - - - - - - - - - - - - sporangium color - - - - - - - - - - - - - - - - - - - - - - - - stalk decurrent - - - - - - - - - - - - - - - - - - - - - - - - style inflated - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril terminal - - - - - - - - - - - - - - - - - - - - - - - - costa firm - - - - - - - - - - - - - - - - - - - - - - - - costa hardness - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem clavate - - - - - - - - - - - - - - - - - - - - - - - - stamen hispid - - - - - - - - - - - - - - - - - - - - - - - - filament prominent - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal bilobed - - - - - - - - - - - - - - - - - - - - - - - - nectary diameter - - - - - - - - - - - - - - - - - - - - - - - - strobilus yellow - - - - - - - - - - - - - - - - - - - - - - - - strobilus color - - - - - - - - - - - - - - - - - - - - - - - - corolla protruding into - - - - - - - - - - - - - - - - - - - - - - - - style vertical to - - - - - - - - - - - - - - - - - - - - - - - - bark yellow orange - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence spherical - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal coiled - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal coiling - - - - - - - - - - - - - - - - - - - - - - - - glume adhesive - - - - - - - - - - - - - - - - - - - - - - - - glume adhesivity - - - - - - - - - - - - - - - - - - - - - - - - petiole condensed - - - - - - - - leaflet margin absent - true - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin amount - - - - - - - - - - - - - - - - - - - - - - - - petiole prostrate - - - - - - - - - - - - - - - - - - - - - - - - trichome glistening - - - - - - - - - - - - - - - - - - - - - - - - trichome reflectivity - - - - - - - - - - - - - - - - - - - - - - - - stipule arched - - - - - - - - - - - - - - - - - - - - - - - - bud funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis straight - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - petal fused - - - - - - - - - - - - - - - - - - - - - - - - bud yellow brown - - - - - - - - - - - - - - - - - - - - - - - - fruit pale pink - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet coiled - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet coiling - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell fleshy - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell composition - - - - - - - - - - - - - - - - - - - - - - - - tepal adaxial to - - - - - - - - - - - - - - - - - - - - - - - - corolla closed - - - - - - - - - - - - - - - - - - - - - - - - fruit tapered - - - - - - - - - - - - - - - - - - - - - - - - peduncle dark brown - - - - - - - - - - - - - - - - - - - - - - - - perianth protruding - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma erect - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore inserted into - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore position - - - - - - - - - - - - - - - - - - - - - - - - connective rhomboid - - - - - - - - - - - - - - - - - - - - - - - - pericarp increased length - - - - - - - - - - - - - - - - - - - - - - - - pericarp length - - - - - - - - - - - - - - - - - - - - - - - - disk flower star shaped - - - - - - - - - - - - - - - - - - - - - - - - epidermis rough - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf decurrent - - - - - - - - - - - - - - - - - - - - - - - - tepal lobed - - - - - - - - - - - - - - - - - - - - - - - - stamen inflated - - - - - - - - - - - - - - - - - - - - - - - - stamen structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member emarginate - - - - - - - - - - - - - - - - - - - - - - - - stigma rhomboid - - - - - - - - - - - - - - - - - - - - - - - - petiole spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - ovary wall fused with - - - - - - - - - - - - - - - - - - - - - - - - pistillode lanceolate - - - - - - - - - - - - - - - - - - - - - - - - glume concealed by - - - - - - - - - - - - - - - - - - - - - - - - branch ventral to - - - - - - - - - - - - - - - - - - - - - - - - bud notched - - - - - - - - - - - - - - - - - - - - - - - - glume bifurcated - - - - - - - - - - - - - - - - - - - - - - - - glume branchiness - - - - - - - - stalk subacute - true - - - - - - - - - - - - - - - - - - - - - - - - lamina articulated with - - - - - - - - - - - - - - - - - - - - - - - - cortex glabrous - - - - - - - - - - - - - - - - - - - - - - - - pollen prolate - - - - - - - - - - - - - - - - - - - - - - - - pollen convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - whole plant recurved - - - - - - - - - - - - - - - - - - - - - - - - spikelet angular - - - - - - - - - - - - - - - - - - - - - - - - style adhesive - - - - - - - - - - - - - - - - - - - - - - - - style adhesivity - - - - - - - - - - - - - - - - - - - - - - - - pericarp differentiated - - - - - - - - - - - - - - - - - - - - - - - - pericarp cellular potency - - - - - - - - - - - - - - - - - - - - - - - - epidermis distributed - - - - - - - - - - - - - - - - - - - - - - - - flower crowded - - - - - - - - - - - - - - - - - - - - - - - - sheath cell simple - - - - - - - - - - - - - - - - - - - - - - - - sheath cell complexity - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member simple - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member complexity - - - - - - - - - - - - - - - - - - - - - - - - keel opaque - - - - - - - - - - - - - - - - - - - - - - - - heartwood brittle - - - - - - - - - - - - - - - - - - - - - - - - heartwood structure - - - - - - - - - - - - - - - - - - - - - - - - plant callus decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaflet pedunculate - - - - - - - - - - - - - - - - - - - - - - - - stem domed - - - - - - - - - - - - - - - - - - - - - - - - tubercle sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - plant cell inflexible - - - - - - - - - - - - - - - - - - - - - - - - plant cell flexibility - - - - - - - - - - - - - - - - - - - - - - - - prickle absent - - - - - - - - - - - - - - - - - - - - - - - - prickle amount - - - - - - - - - - - - - - - - - - - - - - - - branch inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon tubular - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet subulate - - - - - - - - - - - - - - - - - - - - - - - - bud sharp - - - - - - - - - - - - - - - - - - - - - - - - stalk loose - - - - - - - - - - - - - - - - - - - - - - - - calyx size - - - - - - - - tepal acute - true - - - - - - - - tepal duration - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium attached to - - - - - - - - - - - - - - - - - - - - - - - - upper glume obovate - - - - - - - - - - - - - - - - - - - - - - - - bract absent - - - - - - - - - - - - - - - - - - - - - - - - pedicel auriculate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue water composition - - - - - - - - - - - - - - - - - - - - - - - - pericarp flattened - - - - - - - - - - - - - - - - - - - - - - - - thorn ridged - - - - - - - - - - - - - - - - - - - - - - - - involucre abaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina caudate - - - - - - - - - - - - - - - - - - - - - - - - style soft - - - - - - - - - - - - - - - - - - - - - - - - lenticel pedicellate - - - - - - - - - - - - - - - - - - - - - - - - lenticel attachment quality - - - - - - - - - - - - - - - - - - - - - - - - style grey - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell slit-like - - - - - - - - - - - - - - - - - - - - - - - - peristome spotted - - - - - - - - - - - - - - - - - - - - - - - - tuber lobed - - - - - - - - - - - - - - - - - - - - - - - - style back - - - - - - - - - - - - - - - - - - - - - - - - endosperm red - - - - - - - - - - - - - - - - - - - - - - - - hilum basal to - - - - - - - - - - - - - - - - - - - - - - - - aril transparent - - - - - - - - - - - - - - - - - - - - - - - - scutellar node offset - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system oblong - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet inflexible - - - - - - - - - - - - - - - - - - - - - - - - leaflet flexibility - - - - - - - - - - - - - - - - - - - - - - - - pedicel spatulate - - - - - - - - - - - - - - - - - - - - - - - - radicle flat - - - - - - - - - - - - - - - - - - - - - - - - raphe anterior to - - - - - - - - - - - - - - - - - - - - - - - - receptacle laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - flower mixed - - - - - - - - - - - - - - - - - - - - - - - - endocarp indurated - - - - - - - - - - - - - - - - - - - - - - - - caruncle angular - - - - - - - - involucre down - true - - - - - - - - pith up - true - - - - - - - - - - - - - - - - - - - - - - - - pith direction - - - - - - - - - - - - - - - - - - - - - - - - calyx unbranched - - - - - - - - - - - - - - - - - - - - - - - - tuber pubescent - - - - - - - - - - - - - - - - - - - - - - - - tuber maturity - - - - - - - - - - - - - - - - - - - - - - - - receptacle peripheral - - - - - - - - - - - - - - - - - - - - - - - - bud decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - bud water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system glistening - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system reflectivity - - - - - - - - - - - - - - - - - - - - - - - - banner petal swollen - - - - - - - - - - - - - - - - - - - - - - - - pseudostem distichous - - - - - - - - - - - - - - - - - - - - - - - - terminal bud pinnate - - - - - - - - - - - - - - - - - - - - - - - - tepal dilated - - - - - - - - - - - - - - - - - - - - - - - - tepal size - - - - - - - - - - - - - - - - - - - - - - - - leaf apex curved - - - - - - - - - - - - - - - - - - - - - - - - leaf apex curvature - - - - - - - - - - - - - - - - - - - - - - - - pedicel sigmoid - - - - - - - - - - - - - - - - - - - - - - - - keel auriculate - - - - - - - - - - - - - - - - - - - - - - - - valve dentated - - - - - - - - - - - - - - - - - - - - - - - - stipule aggregated - - - - - - - - - - - - - - - - - - - - - - - - style black - - - - - - - - - - - - - - - - - - - - - - - - leaf base fleshy - - - - - - - - - - - - - - - - - - - - - - - - leaf base composition - - - - - - - - - - - - - - - - - - - - - - - - leaf pyramidal - - - - - - - - - - - - - - - - - - - - - - - - stalk purple - - - - - - - - - - - - - - - - - - - - - - - - prickle foveate - - - - - - - - - - - - - - - - - - - - - - - - petal prominent - - - - - - - - - - - - - - - - - - - - - - - - pericarp diameter - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath elongated - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath shape - - - - - - - - - - - - - - - - - - - - - - - - bud violet - - - - - - - - - - - - - - - - - - - - - - - - pericarp concave - - - - - - - - - - - - - - - - - - - - - - - - epicalyx present - - - - - - - - - - - - - - - - - - - - - - - - raphe red - - - - - - - - - - - - - - - - - - - - - - - - ligule bilobed - - - - - - - - - - - - - - - - - - - - - - - - pappus kinked - - - - - - - - - - - - - - - - - - - - - - - - papilla cell dispersed - - - - - - - - - - - - - - - - - - - - - - - - pericarp hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - pericarp volume - - - - - - - - - - - - - - - - - - - - - - - - stigma subcircular - - - - - - - - - - - - - - - - - - - - - - - - peristome straight - - - - - - - - - - - - - - - - - - - - - - - - flower constricted - - - - - - - - - - - - - - - - - - - - - - - - thorn acuminate - - - - - - - - - - - - - - - - - - - - - - - - bract attached to - - - - - - - - - - - - - - - - - - - - - - - - sepal extends to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall increased size - - - - - - - - - - - - - - - - - - - - - - - - ovary wall size - - - - - - - - - - - - - - - - - - - - - - - - radicle absent - - - - - - - - - - - - - - - - - - - - - - - - radicle exserted - - - - - - - - - - - - - - - - - - - - - - - - axil multi-colored - - - - - - - - - - - - - - - - - - - - - - - - axil color pattern - - - - - - - - - - - - - - - - - - - - - - - - prickle grooved - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence scalloped - - - - - - - - - - - - - - - - - - - - - - - - anther theca purple - - - - - - - - - - - - - - - - - - - - - - - - anther theca color - - - - - - - - - - - - - - - - - - - - - - - - leaf base protruding into - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma emarginate - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma concavity - - - - - - - - - - - - - - - - - - - - - - - - rhizome herbaceous - - - - - - - - - - - - - - - - - - - - - - - - rhizome shedability - - - - - - - - - - - - - - - - - - - - - - - - palea prominent - - - - - - - - - - - - - - - - - - - - - - - - stolon concave - - - - - - - - - - - - - - - - - - - - - - - - stolon concavity - - - - - - - - - - - - - - - - - - - - - - - - antiraphe branched - - - - - - - - - - - - - - - - - - - - - - - - antiraphe branchiness - - - - - - - - - - - - - - - - - - - - - - - - sheath cell pointed - - - - - - - - - - - - - - - - - - - - - - - - keel parallel to - - - - - - - - - - - - - - - - - - - - - - - - connective reniform - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure obtuse - - - - - - - - - - - - - - - - - - - - - - - - epidermis prostrate - - - - - - - - - - - - - - - - - - - - - - - - costa pubescent - - - - - - - - - - - - - - - - - - - - - - - - costa maturity - - - - - - - - - - - - - - - - - - - - - - - - seed separating - - - - - - - - - - - - - - - - - - - - - - - - filament spatulate - - - - - - - - - - - - - - - - - - - - - - - - androecium convex - - - - - - - - - - - - - - - - - - - - - - - - peduncle notched - - - - - - - - - - - - - - - - - - - - - - - - pollen obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina attenuate - - - - - - - - - - - - - - - - - - - - - - - - sorus maturity - - - - - - - - - - - - - - - - - - - - - - - - stipel elliptic - - - - - - - - - - - - - - - - - - - - - - - - gynophore filamentous - - - - - - - - - - - - - - - - - - - - - - - - bulb lanceolate - - - - - - - - - - - - - - - - - - - - - - - - bulb sharpness - - - - - - - - - - - - - - - - - - - - - - - - lower glume increased length - - - - - - - - - - - - - - - - - - - - - - - - locule cylindrical - - - - - - - - - - - - - - - - - - - - - - - - banner petal cylindrical - - - - - - - - - - - - - - - - - - - - - - - - axil grooved - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle glistening - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle reflectivity - - - - - - - - - - - - - - - - - - - - - - - - axil glistening - - - - - - - - - - - - - - - - - - - - - - - - axil reflectivity - - - - - - - - - - - - - - - - - - - - - - - - plant callus dentated - - - - - - - - - - - - - - - - - - - - - - - - fruit moderate intensity - - - - - - - - - - - - - - - - - - - - - - - - fruit intensity - - - - - - - - - - - - - - - - - - - - - - - - upper glume attenuate - - - - - - - - - - - - - - - - - - - - - - - - endocarp adhesive - - - - - - - - - - - - - - - - - - - - - - - - endocarp adhesivity - - - - - - - - - - - - - - - - - - - - - - - - pedicel distal to - - - - - - - - - - - - - - - - - - - - - - - - stigma sigmoid - - - - - - - - - - - - - - - - - - - - - - - - lamina adjacent to - - - - - - - - - - - - - - - - - - - - - - - - perianth strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - sheath cell terminal - - - - - - - - - - - - - - - - - - - - - - - - awn conical - - - - - - - - - - - - - - - - - - - - - - - - raphe elliptic - - - - - - - - - - - - - - - - - - - - - - - - oil gland cylindrical - - - - - - - - - - - - - - - - - - - - - - - - ligule conspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril smooth - - - - - - - - - - - - - - - - - - - - - - - - stem hispidulous - - - - - - - - - - - - - - - - - - - - - - - - style obclavate - - - - - - - - - - - - - - - - - - - - - - - - apical hook striated - - - - - - - - - - - - - - - - - - - - - - - - stem pedunculate - - - - - - - - - - - - - - - - - - - - - - - - calyx aggregated - - - - - - - - - - - - - - - - - - - - - - - - pedicel broad - - - - - - - - - - - - - - - - - - - - - - - - scutellar node decreased amount - - - - - - - - - - - - - - - - - - - - - - - - scutellar node amount - - - - - - - - - - - - - - - - - - - - - - - - bract falciform - - - - - - - - - - - - - - - - - - - - - - - - seed perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - anther offset - - - - - - - - - - - - - - - - - - - - - - - - trichome dorsal to - - - - - - - - - - - - - - - - - - - - - - - - stipel acuminate - - - - - - - - - - - - - - - - - - - - - - - - awn herbaceous - - - - - - - - - - - - - - - - - - - - - - - - awn shedability - - - - - - - - - - - - - - - - - - - - - - - - bud ochre - - - - - - - - - - - - - - - - - - - - - - - - tubercle broad - - - - - - - - - - - - - - - - - - - - - - - - pappus truncated - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet ochre - - - - - - - - - - - - - - - - - - - - - - - - pappus retrorse - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue furrowed - - - - - - - - - - - - - - - - - - - - - - - - pappus ovate - - - - - - - - - - - - - - - - - - - - - - - - fruit revolute - - - - - - - - - - - - - - - - - - - - - - - - shoot internode divergent from - - - - - - - - - - - - - - - - - - - - - - - - chalaza dorsal to - - - - - - - - - - - - - - - - - - - - - - - - chalaza position - - - - - - - - - - - - - - - - - - - - - - - - awn smooth - - - - - - - - - - - - - - - - - - - - - - - - awn texture - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath sterile - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath fertility - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant sap phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant sap decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - - plant sap thickness - - - - - - - - - - - - - - - - - - - - - - - - - calyx spongy - - - - - - - - - - - - - - - - - - - - - - - - seta texture - - - - - - - - - - - - - - - - - - - - - - - - nectary prominent - - - - - - - - - - - - - - - - - - - - - - - - root dense - - - - - - - - - - - - - - - - - - - - - - - - root mass density - - - - - - - - - - - - - - - - - - - - - - - - disk flower kinked - - - - - - - - - - - - - - - - - - - - - - - - gynoecium trilobed - - - - - - - - - - - - - - - - - - - - - - - - aril branched - - - - - - - - - - - - - - - - - - - - - - - - petiole constricted - - - - - - - - - - - - - - - - - - - - - - - - stigma red - - - - - - - - - - - - - - - - - - - - - - - - scutellar node sunken - - - - - - - - - - - - - - - - - - - - - - - - scutellar node elevation - - - - - - - - - - - - - - - - - - - - - - - - epidermis oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - exocarp old - - - - - - - - - - - - - - - - - - - - - - - - exocarp age - - - - - - - - - - - - - - - - - - - - - - - - leaf bulbous - - - - - - - - - - - - - - - - - - - - - - - - seed immature - - - - - - - - - - - - - - - - - - - - - - - - microspore adaxial to - - - - - - - - - - - - - - - - - - - - - - - - microspore position - - - - - - - - glume premature - true - - - - - - - - glume onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue distichous - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf wrinkled - - - - - - - - - - - - - - - - - - - - - - - - pulvinus present - - - - - - - - - - - - - - - - - - - - - - - - pulvinus amount - - - - - - - - - - - - - - - - - - - - - - - - leaflet cylindrical - - - - - - - - - - - - - - - - - - - - - - - - whole plant trilobed - - - - - - - - - - - - - - - - - - - - - - - - cambium brown - - - - - - - - - - - - - - - - - - - - - - - - caruncle dark grey - - - - - - - - - - - - - - - - - - - - - - - - mesocarp present - - - - - - - - - - - - - - - - - - - - - - - - pericarp pink - - - - - - - - - - - - - - - - - - - - - - - - peristome dark red - - - - - - - - - - - - - - - - - - - - - - - - style leaf-like - - - - - - - - - - - - - - - - - - - - - - - - epidermis glandular - - - - - - - - - - - - - - - - - - - - - - - - epidermis morphology - - - - - - - - - - - - - - - - - - - - - - - - shoot system acuminate - - - - - - - - - - - - - - - - - - - - - - - - shoot system sharpness - - - - - - - - - - - - - - - - - - - - - - - - corm vertical - - - - - - - - - - - - - - - - - - - - - - - - corm spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - columella separating - - - - - - - - - - - - - - - - - - - - - - - - columella structure - - - - - - - - corm up - true - - - - - - - - - - - - - - - - - - - - - - - - corm direction - - - - - - - - - - - - - - - - - - - - - - - - petal tubular - - - - - - - - - - - - - - - - - - - - - - - - whole plant constricted - - - - - - - - - - - - - - - - - - - - - - - - plant callus acuminate - - - - - - - - - - - - - - - - - - - - - - - - root cap conspicuous - - - - - - - - - - - - - - - - - - - - - - - - locule brown - - - - - - - - - - - - - - - - - - - - - - - - corolla angle - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal kinked - - - - - - - - - - - - - - - - - - - - - - - - pericarp emarginate - - - - - - - - - - - - - - - - - - - - - - - - leaflet oblate - - - - - - - - - - - - - - - - - - - - - - - - heartwood grooved - - - - - - - - - - - - - - - - - - - - - - - - fruit alive - - - - - - - - - - - - - - - - - - - - - - - - fruit viability - - - - - - - - - - - - - - - - - - - - - - - - petiolule basal to - - - - - - - - - - - - - - - - - - - - - - - - heartwood red brown - - - - - - - - - - - - - - - - - - - - - - - - perianth opposite - - - - - - - - - - - - - - - - - - - - - - - - corolla light purple - - - - - - - - - - - - - - - - - - - - - - - - micropyle elliptic - - - - - - - - - - - - - - - - - - - - - - - - micropyle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - palea broad - - - - - - - - scutellar node premature - true - - - - - - - - scutellar node onset quality - true - - - - - - - - seed down - true - - - - - - - - - - - - - - - - - - - - - - - - pappus present - - - - - - - - - - - - - - - - - - - - - - - - style mature - - - - - - - - - - - - - - - - - - - - - - - - papilla cell autogenous - - - - - - - - - - - - - - - - - - - - - - - - rhizome rectangular - - - - - - - - - - - - - - - - - - - - - - - - stem sharp - - - - - - - - - - - - - - - - - - - - - - - - calyx concealed - - - - - - - - - - - - - - - - - - - - - - - - keel convolute - - - - - - - - - - - - - - - - - - - - - - - - infructescence orange - - - - - - - - - - - - - - - - - - - - - - - - bark slit-like - - - - - - - - - - - - - - - - - - - - - - - - ovary wall pointed - - - - - - - - - - - - - - - - - - - - - - - - petiole oblique to - - - - - - - - - - - - - - - - - - - - - - - - ligule erect - - - - - - - - - - - - - - - - - - - - - - - - perianth horizontal - - - - - - - - - - - - - - - - - - - - - - - - petiole hollow - - - - - - - - - - - - - - - - - - - - - - - - petiole structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet open - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet closure - - - - - - - - - - - - - - - - - - - - - - - - bulb dry - - - - - - - - - - - - - - - - - - - - - - - - bulb wetness - - - - - - - - - - - - - - - - - - - - - - - - root oblong - - - - - - - - - - - - - - - - - - - - - - - - sepal slender - - - - - - - - - - - - - - - - - - - - - - - - rhizome condensed - - - - - - - - - - - - - - - - - - - - - - - - exocarp grooved - - - - - - - - - - - - - - - - - - - - - - - - petal adhesive - - - - - - - - - - - - - - - - - - - - - - - - petal adhesivity - - - - - - - - - - - - - - - - - - - - - - - - areole bud simple - - - - - - - - - - - - - - - - - - - - - - - - areole bud complexity - - - - - - - - - - - - - - - - - - - - - - - - sepal open - - - - - - - - - - - - - - - - - - - - - - - - sepal closure - - - - - - - - - - - - - - - - - - - - - - - - fruit perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - upper glume white - - - - - - - - - - - - - - - - - - - - - - - - costa decurrent - - - - - - - - - - - - - - - - - - - - - - - - thorn cut - - - - - - - - - - - - - - - - - - - - - - - - endotesta fleshy - - - - - - - - - - - - - - - - - - - - - - - - endotesta composition - - - - - - - - - - - - - - - - - - - - - - - - filament inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - costa medial to - - - - - - - - - - - - - - - - - - - - - - - - central zone decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - central zone water composition - - - - - - - - - - - - - - - - - - - - - - - - central zone auriculate - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root sterile - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root fertility - - - - - - - - - - - - - - - - - - - - - - - - tubercle scalloped - - - - - - - - - - - - - - - - - - - - - - - - seed trichome spherical - - - - - - - - - - - - - - - - - - - - - - - - thallus size - - - - - - - - - - - - - - - - - - - - - - - - hydathode hispid - - - - - - - - - - - - - - - - - - - - - - - - apical hook kinked - - - - - - - - - - - - - - - - - - - - - - - - bark curved - - - - - - - - - - - - - - - - - - - - - - - - plant embryo raised - - - - - - - - - - - - - - - - - - - - - - - - valve furrowed - - - - - - - - - - - - - - - - - - - - - - - - thorn autogenous - - - - - - - - - - - - - - - - - - - - - - - - thorn structure - - - - - - - - - - - - - - - - - - - - - - - - growth ring bifurcated - - - - - - - - - - - - - - - - - - - - - - - - seed inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - ligule kinked - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member decurrent - - - - - - - - - - - - - - - - - - - - - - - - endocarp confluent with - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf distributed - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - testa overlapping - - - - - - - - - - - - - - - - - - - - - - - - heartwood increased length - - - - - - - - - - - - - - - - - - - - - - - - heartwood length - - - - - - - - - - - - - - - - - - - - - - - - pedicel right - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system decussate - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf flattened - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf curvature - - - - - - - - - - - - - - - - - - - - - - - - scutellar node purple - - - - - - - - - - - - - - - - - - - - - - - - scutellar node color - - - - - - - - - - - - - - - - - - - - - - - - lenticel brown - - - - - - - - - - - - - - - - - - - - - - - - plant callus decreased amount - - - - - - - - - - - - - - - - - - - - - - - - plant callus amount - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member revolute - - - - - - - - - - - - - - - - - - - - - - - - disk flower whorled - - - - - - - - - - - - - - - - - - - - - - - - stele conical - - - - - - - - - - - - - - - - - - - - - - - - lamina angle - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud sterile - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud fertility - - - - - - - - - - - - - - - - - - - - - - - - hydathode increased length - - - - - - - - - - - - - - - - - - - - - - - - hydathode length - - - - - - - - - - - - - - - - - - - - - - - - simple leaf lobed - - - - - - - - - - - - - - - - - - - - - - - - simple leaf shape - - - - - - - - - - - - - - - - - - - - - - - - thallus ovate - - - - - - - - - - - - - - - - - - - - - - - - thallus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence normal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - seta basal to - - - - - - - - - - - - - - - - - - - - - - - - seta position - - - - - - - - - - - - - - - - - - - - - - - - aril vermilion - - - - - - - - - - - - - - - - - - - - - - - - leaflet curved - - - - - - - - - - - - - - - - - - - - - - - - flower bud inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - lemma square - - - - - - - - - - - - - - - - - - - - - - - - tuber robust - - - - - - - - - - - - - - - - - - - - - - - - stigma serrated - - - - - - - - axillary bud up - true - - - - - - - - - - - - - - - - - - - - - - - - axillary bud direction - - - - - - - - - - - - - - - - - - - - - - - - stigma posterior to - - - - - - - - - - - - - - - - - - - - - - - - corm mass - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal cut - - - - - - - - - - - - - - - - - - - - - - - - receptacle star shaped - - - - - - - - - - - - - - - - - - - - - - - - oil gland translucent - - - - - - - - - - - - - - - - - - - - - - - - oil gland opacity - - - - - - - - - - - - - - - - - - - - - - - - shoot system basal to - - - - - - - - - - - - - - - - - - - - - - - - petiolule red - - - - - - - - - - - - - - - - - - - - - - - - testa light brown - - - - - - - - - - - - - - - - - - - - - - - - columella concave - - - - - - - - - - - - - - - - - - - - - - - - columella concavity - - - - - - - - - - - - - - - - - - - - - - - - sepal whorled - - - - - - - - - - - - - - - - - - - - - - - - seed trichome curled - - - - - - - - - - - - - - - - - - - - - - - - anther theca furrowed - - - - - - - - - - - - - - - - - - - - - - - - anther theca texture - - - - - - - - - - - - - - - - - - - - - - - - trichome multiple - - - - - - - - - - - - - - - - - - - - - - - - pericarp broad - - - - - - - - - - - - - - - - - - - - - - - - petiole yellow green - - - - - - - - - - - - - - - - - - - - - - - - style flexible - - - - - - - - - - - - - - - - - - - - - - - - style flexibility - - - - - - - - - - - - - - - - - - - - - - - - awn concentrated - - - - - - - - - - - - - - - - - - - - - - - - awn concentration of - - - - - - - - - - - - - - - - - - - - - - - - lamina pointed - - - - - - - - - - - - - - - - - - - - - - - - caruncle wrinkled - - - - - - - - - - - - - - - - - - - - - - - - tuber slender - - - - - - - - - - - - - - - - - - - - - - - - prickle acuminate - - - - - - - - - - - - - - - - - - - - - - - - prickle sharpness - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber robust - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber shape - - - - - - - - - - - - - - - - - - - - - - - - pericarp pressure - - - - - - - - - - - - - - - - - - - - - - - - leaflet decussate - - - - - - - - - - - - - - - - - - - - - - - - hilum broken - - - - - - - - - - - - - - - - - - - - - - - - hilum wholeness - - - - - - - - - - - - - - - - - - - - - - - - hilum prominent - - - - - - - - - - - - - - - - - - - - - - - - rhizome straight - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system striated - - - - - - - - - - - - - - - - - - - - - - - - bud split - - - - - - - - - - - - - - - - - - - - - - - - tepal slit-like - - - - - - - - - - - - - - - - - - - - - - - - stalk triangular - - - - - - - - - - - - - - - - - - - - - - - - perianth glandular - - - - - - - - - - - - - - - - - - - - - - - - perianth morphology - - - - - - - - - - - - - - - - - - - - - - - - stigma immature - - - - - - - - - - - - - - - - - - - - - - - - pseudostem columnar - - - - - - - - - - - - - - - - - - - - - - - - pseudostem shape - - - - - - - - - - - - - - - - - - - - - - - - spikelet circular - - - - - - - - - - - - - - - - - - - - - - - - anther theca open - - - - - - - - - - - - - - - - - - - - - - - - anther theca closure - - - - - - - - - - - - - - - - - - - - - - - - seed trichome opposite - - - - - - - - - - - - - - - - - - - - - - - - tepal punctate - - - - - - - - - - - - - - - - - - - - - - - - bark immature - - - - - - - - - - - - - - - - - - - - - - - - anther theca dorsal to - - - - - - - - - - - - - - - - - - - - - - - - bulb spherical - - - - - - - - - - - - - - - - - - - - - - - - leaf base oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - whole plant increased size - - - - - - - - - - - - - - - - - - - - - - - - whole plant size - - - - - - - - - - - - - - - - - - - - - - - - style decurrent - - - - - - - - - - - - - - - - - - - - - - - - glume distichous - - - - - - - - - - - - - - - - - - - - - - - - plant cell punctate - - - - - - - - - - - - - - - - - - - - - - - - plant cell spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - plant cell pinnate - - - - - - - - - - - - - - - - - - - - - - - - receptacle young - - - - - - - - - - - - - - - - - - - - - - - - tubercle setose - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus simple - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus complexity - - - - - - - - - - - - - - - - - - - - - - - - canal adaxial to - - - - - - - - - - - - - - - - - - - - - - - - petiole saddle-shaped - - - - - - - - - - - - - - - - - - - - - - - - oil gland heart shaped - - - - - - - - - - - - - - - - - - - - - - - - oil gland concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf cuneate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal brittle - - - - - - - - - - - - - - - - - - - - - - - - pulvinus glabrous - - - - - - - - - - - - - - - - - - - - - - - - pulvinus pilosity - - - - - - - - - - - - - - - - - - - - - - - - flower sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - leaf proximal to - - - - - - - - - - - - - - - - - - - - - - - - upper glume prominent - - - - - - - - - - - - - - - - - - - - - - - - seed arched - - - - - - - - - - - - - - - - - - - - - - - - bud fusiform - - - - - - - - - - - - - - - - - - - - - - - - exocarp separating - - - - - - - - - - - - - - - - - - - - - - - - papilla cell decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stipule pedicellate - - - - - - - - - - - - - - - - - - - - - - - - stipule attachment quality - - - - - - - - - - - - - - - - - - - - - - - - involucre hispid - - - - - - - - - - - - - - - - - - - - - - - - staminode flat - - - - - - - - lodicule male - true - - - - - - - - lodicule phenotypic sex - true - - - - - - - - staminode male - true - - - - - - - - - - - - - - - - - - - - - - - - aril crescent-shaped - - - - - - - - carpel acute - true - - - - - - - - carpel duration - true - - - - - - - - - - - - - - - - - - - - - - - - seed decumbent - - - - - - - - - - - - - - - - - - - - - - - - bark area - true - - - - - - - - stamen arrested - true - - - - - - - - stamen offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dispersed - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal pointed - - - - - - - - - - - - - - - - - - - - - - - - pericarp vertical to - - - - - - - - - - - - - - - - - - - - - - - - carpel cupulate - - - - - - - - - - - - - - - - - - - - - - - - leaf translucent - - - - - - - - - - - - - - - - - - - - - - - - stele ovate - - - - - - - - - - - - - - - - - - - - - - - - bract slit-like - - - - - - - - - - - - - - - - - - - - - - - - involucre condensed - - - - - - - - - - - - - - - - - - - - - - - - stigma tripartite - - - - - - - - - - - - - - - - - - - - - - - - prickle prominent - - - - - - - - - - - - - - - - - - - - - - - - awn subterminal - - - - - - - - - - - - - - - - - - - - - - - - seed trichome distichous - - - - - - - - - - - - - - - - - - - - - - - - epidermis semicircular - - - - - - - - - - - - - - - - - - - - - - - - leaflet condensed - - - - - - - - - - - - - - - - - - - - - - - - mesocarp firm - - - - - - - - - - - - - - - - - - - - - - - - apical hook glandular - - - - - - - - - - - - - - - - - - - - - - - - apical hook morphology - - - - - - - - - - - - - - - - - - - - - - - - whole plant oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - - - - - velamen phenotype - - - - - - - - - - - - - - - - - - - - - - - - velamen slender - - - - - - - - - - - - - - - - - - - - - - - - velamen shape - - - - - - - - upper glume subacute - true - - - - - - - - - - - - - - - - - - - - - - - - prophyll branched - - - - - - - - - - - - - - - - - - - - - - - - leaf base bilobed - - - - - - - - - - - - - - - - - - - - - - - - locule pointed - - - - - - - - - - - - - - - - - - - - - - - - locule sharpness - - - - - - - - - - - - - - - - - - - - - - - - prophyll truncated - - - - - - - - - - - - - - - - - - - - - - - - bract actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - bract radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - ray system pedicellate - - - - - - - - - - - - - - - - - - - - - - - - ray system attachment quality - - - - - - - - - - - - - - - - - - - - - - - - whole plant coating - - - - - - - - - - - - - - - - - - - - - - - - connective acuminate - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle glistening - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle reflectivity - - - - - - - - - - - - - - - - - - - - - - - - shoot system hairy - - - - - - - - - - - - - - - - - - - - - - - - sorus fertile - - - - - - - - - - - - - - - - - - - - - - - - sorus fertility - - - - - - - - - - - - - - - - - - - - - - - - lamina unilateral - - - - - - - - - - - - - - - - - - - - - - - - gynophore obtuse - - - - - - - - - - - - - - - - - - - - - - - - filament fused with - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge linear - - - - - - - - - - - - - - - - - - - - - - - - branch sharp - - - - - - - - - - - - - - - - - - - - - - - - coma flattened - - - - - - - - - - - - - - - - - - - - - - - - coma curvature - - - - - - - - - - - - - - - - - - - - - - - - apical hook fleshy - - - - - - - - - - - - - - - - - - - - - - - - apical hook composition - - - - - - - - - - - - - - - - - - - - - - - - leaf dendritic - - - - - - - - - - - - - - - - - - - - - - - - calyx firm - - - - - - - - - - - - - - - - - - - - - - - - calyx hardness - - - - - - - - gynophore continuous - true - - - - - - - - gynophore occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - calyx crowded - - - - - - - - - - - - - - - - - - - - - - - - periderm white - - - - - - - - - - - - - - - - - - - - - - - - peduncle attached to - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue simple - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue complexity - - - - - - - - - - - - - - - - - - - - - - - - leaf dispersed - - - - - - - - - - - - - - - - - - - - - - - - lower glume slender - - - - - - - - - - - - - - - - - - - - - - - - scutellar node whorled - - - - - - - - - - - - - - - - - - - - - - - - stigma leaf-like - - - - - - - - - - - - - - - - - - - - - - - - valve obtuse - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure obovate - - - - - - - - - - - - - - - - - - - - - - - - leaflet coiled - - - - - - - - - - - - - - - - - - - - - - - - leaflet coiling - - - - - - - - - - - - - - - - - - - - - - - - trichome spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot system circular - - - - - - - - - - - - - - - - - - - - - - - - pericarp glistening - - - - - - - - - - - - - - - - - - - - - - - - pericarp reflectivity - - - - - - - - - - - - - - - - - - - - - - - - sepal dispersed - - - - - - - - - - - - - - - - - - - - - - - - receptacle increased length - - - - - - - - - - - - - - - - - - - - - - - - petiole yellow brown - - - - - - - - - - - - - - - - - - - - - - - - fruit hollow - - - - - - - - - - - - - - - - - - - - - - - - papilla cell funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - style adaxial to - - - - - - - - - - - - - - - - - - - - - - - - receptacle oblong - - - - - - - - - - - - - - - - - - - - - - - - involucre swollen - - - - - - - - - - - - - - - - - - - - - - - - sepal funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - corm dry - - - - - - - - - - - - - - - - - - - - - - - - corm wetness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall whorled - - - - - - - - - - - - - - - - - - - - - - - - thorn slit-like - - - - - - - - - - - - - - - - - - - - - - - - stem spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - staminode whole - - - - - - - - - - - - - - - - - - - - - - - - staminode wholeness - - - - - - - - - - - - - - - - - - - - - - - - pappus cylindrical - - - - - - - - - - - - - - - - - - - - - - - - stipel striated - - - - - - - - - - - - - - - - - - - - - - - - peduncle decurrent - - - - - - - - - - - - - - - - - - - - - - - - stereome area - - - - - - - - pedicel subacute - true - - - - - - - - - - - - - - - - - - - - - - - - leaflet grooved - - - - - - - - - - - - - - - - - - - - - - - - bud overlapped by - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract abaxial to - - - - - - - - - - - - - - - - - - - - - - - - ray system symmetrical - - - - - - - - - - - - - - - - - - - - - - - - ray system symmetry - - - - - - - - - - - - - - - - - - - - - - - - fruit aromatic - - - - - - - - - - - - - - - - - - - - - - - - fruit aromaticity - - - - - - - - - - - - - - - - - - - - - - - - bark dead - - - - - - - - - - - - - - - - - - - - - - - - bark viability - - - - - - - - - - - - - - - - - - - - - - - - lower glume crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - thorn hispid - - - - - - - - - - - - - - - - - - - - - - - - pedicel fertile - - - - - - - - - - - - - - - - - - - - - - - - bract tubular - - - - - - - - - - - - - - - - - - - - - - - - whole plant heart shaped - - - - - - - - - - - - - - - - - - - - - - - - epidermis undulate - - - - - - - - - - - - - - - - - - - - - - - - peristome whole - - - - - - - - - - - - - - - - - - - - - - - - peristome wholeness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium swollen - - - - - - - - - - - - - - - - - - - - - - - - corolla vertical - - - - - - - - - - - - - - - - - - - - - - - - thorn flattened - - - - - - - - - - - - - - - - - - - - - - - - epicalyx cuspidate - - - - - - - - - - - - - - - - - - - - - - - - glume V-shaped - - - - - - - - - - - - - - - - - - - - - - - - plant callus bifurcated - - - - - - - - - - - - - - - - - - - - - - - - plant callus branchiness - - - - - - - - - - - - - - - - - - - - - - - - testa branched - - - - - - - - - - - - - - - - - - - - - - - - testa branchiness - - - - - - - - - - - - - - - - - - - - - - - - hilum areolate - - - - - - - - - - - - - - - - - - - - - - - - costa glandular - - - - - - - - - - - - - - - - - - - - - - - - costa morphology - - - - - - - - - - - - - - - - - - - - - - - - bud sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath inflated - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - gynophore basal to - - - - - - - - - - - - - - - - - - - - - - - - sheath cell open - - - - - - - - - - - - - - - - - - - - - - - - sheath cell closure - - - - - - - - - - - - - - - - - - - - - - - - septum erect - - - - - - - - - - - - - - - - - - - - - - - - infructescence blunt - - - - - - - - - - - - - - - - - - - - - - - - ray system striated - - - - - - - - - - - - - - - - - - - - - - - - radicle prominent - - - - - - - - - - - - - - - - - - - - - - - - canal flattened - - - - - - - - - - - - - - - - - - - - - - - - sporangium area - - - - - - - - - - - - - - - - - - - - - - - - pappus brittle - - - - - - - - - - - - - - - - - - - - - - - - central zone split - - - - - - - - - - - - - - - - - - - - - - - - fruit adjacent to - - - - - - - - - - - - - - - - - - - - - - - - canal glandular - - - - - - - - - - - - - - - - - - - - - - - - canal morphology - - - - - - - - tubercle subacute - true - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure decussate - - - - - - - - - - - - - - - - - - - - - - - - root yellow orange - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl grooved - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl texture - - - - - - - - - - - - - - - - - - - - - - - - calyx coiled - - - - - - - - - - - - - - - - - - - - - - - - calyx coiling - - - - - - - - - - - - - - - - - - - - - - - - filament alternate placement - - - - - - - - - - - - - - - - - - - - - - - - receptacle cuspidate - - - - - - - - - - - - - - - - - - - - - - - - trichome rough - - - - - - - - - - - - - - - - - - - - - - - - leaf base split - - - - - - - - - - - - - - - - - - - - - - - - bark protruding into - - - - - - - - - - - - - - - - - - - - - - - - perianth dark brown - - - - - - - - - - - - - - - - - - - - - - - - lenticel ovate - - - - - - - - - - - - - - - - - - - - - - - - - - - - obturator phenotype - - - - - - - - - - - - - - - - - - - - - - - - obturator ventral to - - - - - - - - - - - - - - - - - - - - - - - - obturator position - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein ochre - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein color - - - - - - - - - - - - - - - - - - - - - - - - hilum pointed - - - - - - - - - - - - - - - - - - - - - - - - trichome flattened - - - - - - - - pappus up - true - - - - - - - - - - - - - - - - - - - - - - - - epidermis dark red - - - - - - - - - - - - - - - - - - - - - - - - fruit pinnate - - - - - - - - - - - - - - - - - - - - - - - - axil brown - - - - - - - - - - - - - - - - - - - - - - - - stalk congested - - - - - - - - axillary bud meristem female - true - - - - - - - - - - - - - - - - - - - - - - - - pulvinus conspicuous - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - glume scalloped - - - - - - - - - - - - - - - - - - - - - - - - nectary attached to - - - - - - - - - - - - - - - - - - - - - - - - root tubular - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system rough - - - - - - - - - - - - - - - - - - - - - - - - testa attached to - - - - - - - - - - - - - - - - - - - - - - - - testa attachment quality - - - - - - - - - - - - - - - - - - - - - - - - pappus glabrous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium striated - - - - - - - - - - - - - - - - - - - - - - - - calyx oblate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem subulate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence matted - - - - - - - - - - - - - - - - - - - - - - - - sheath cell bifurcated - - - - - - - - - - - - - - - - - - - - - - - - sheath cell branchiness - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma broad - - - - - - - - - - - - - - - - - - - - - - - - leaf base retuse - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence distributed - - - - - - - - - - - - - - - - - - - - - - - - trichome spongy - - - - - - - - - - - - - - - - - - - - - - - - caruncle waxy - - - - - - - - - - - - - - - - - - - - - - - - caruncle waxiness - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina sparse - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - bract discoid - - - - - - - - - - - - - - - - - - - - - - - - awn lateral to - - - - - - - - - - - - - - - - - - - - - - - - pseudostem mottled - - - - - - - - - - - - - - - - - - - - - - - - pseudostem color pattern - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium punctiform - - - - - - - - - - - - - - - - - - - - - - - - corolla banded - - - - - - - - - - - - - - - - - - - - - - - - exocarp differentiated - - - - - - - - - - - - - - - - - - - - - - - - exocarp cellular potency - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem leaf-like - - - - - - - - apical hook hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - seed coat yellow - - - - - - - - - - - - - - - - - - - - - - - - root increased size - - - - - - - - - - - - - - - - - - - - - - - - root size - - - - - - - - - - - - - - - - - - - - - - - - seed trichome concave - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dark brown - - - - - - - - - - - - - - - - - - - - - - - - testa lateral to - - - - - - - - - - - - - - - - - - - - - - - - tuberous root viscous - - - - - - - - - - - - - - - - - - - - - - - - tuberous root viscosity - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein spherical - - - - - - - - - - - - - - - - - - - - - - - - root black - - - - - - - - - - - - - - - - - - - - - - - - funicle slender - - - - - - - - - - - - - - - - - - - - - - - - radicle aligned with - - - - - - - - - - - - - - - - - - - - - - - - radicle alignment - - - - - - - - - - - - - - - - - - - - - - - - tuberous root drooping - - - - - - - - - - - - - - - - - - - - - - - - stalk broad - - - - - - - - - - - - - - - - - - - - - - - - leaf spongy - - - - - - - - - - - - - - - - - - - - - - - - pistillode linear - - - - - - - - - - - - - - - - - - - - - - - - anther mass - - - - - - - - - - - - - - - - - - - - - - - - prophyll ivory - - - - - - - - - - - - - - - - - - - - - - - - prophyll mass density - - - - - - - - - - - - - - - - - - - - - - - - leaf tapered - - - - - - - - - - - - - - - - - - - - - - - - shoot internode punctiform - - - - - - - - pericarp premature - true - - - - - - - - pericarp onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member falciform - - - - - - - - - - - - - - - - - - - - - - - - growth ring decreased amount - - - - - - - - - - - - - - - - - - - - - - - - growth ring amount - - - - - - - - - - - - - - - - - - - - - - - - whole plant bilobed - - - - - - - - - - - - - - - - - - - - - - - - bud tapered - - - - - - - - - - - - - - - - - - - - - - - - stem hard - - - - - - - - - - - - - - - - - - - - - - - - stele star shaped - - - - - - - - - - - - - - - - - - - - - - - - spikelet red - - - - - - - - - - - - - - - - - - - - - - - - tepal conical - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma confluent with - - - - - - - - - - - - - - - - - - - - - - - - filament separated from - - - - - - - - - - - - - - - - - - - - - - - - anther theca decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member orbicular - - - - - - - - - - - - - - - - - - - - - - - - calyx soft - - - - - - - - - - - - - - - - - - - - - - - - anther scalloped - - - - - - - - - - - - - - - - - - - - - - - - aril inserted into - - - - - - - - - - - - - - - - - - - - - - - - glume involute - - - - - - - - - - - - - - - - - - - - - - - - axil emarginate - - - - - - - - - - - - - - - - - - - - - - - - axil concavity - - - - - - - - - - - - - - - - - - - - - - - - anther diameter - - - - - - - - petiole male - true - - - - - - - - petiole phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - papilla cell ovate - - - - - - - - - - - - - - - - - - - - - - - - corolla folded - - - - - - - - - - - - - - - - - - - - - - - - bracteole obconical - - - - - - - - - - - - - - - - - - - - - - - - shoot apex areolate - - - - - - - - - - - - - - - - - - - - - - - - epicotyl increased thickness - - - - - - - - - - - - - - - - - - - - - - - - epicotyl thickness - - - - - - - - - - - - - - - - - - - - - - - - tepal matted - - - - - - - - - - - - - - - - - - - - - - - - raphe pubescent - - - - - - - - - - - - - - - - - - - - - - - - raphe maturity - - - - - - - - - - - - - - - - - - - - - - - - seed axial to - - - - - - - - - - - - - - - - - - - - - - - - axil pinnate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem coiled - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem coiling - - - - - - - - - - - - - - - - - - - - - - - - lower glume hispidulous - - - - - - - - - - - - - - - - - - - - - - - - valve pedicellate - - - - - - - - - - - - - - - - - - - - - - - - valve attachment quality - - - - - - - - - - - - - - - - - - - - - - - - leaf dilated - - - - - - - - - - - - - - - - - - - - - - - - upper glume herbaceous - - - - - - - - - - - - - - - - - - - - - - - - upper glume shedability - - - - - - - - - - - - - - - - - - - - - - - - peduncle spotted - - - - - - - - - - - - - - - - - - - - - - - - corolla front - - - - - - - - - - - - - - - - - - - - - - - - branch scalloped - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf oblong - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle edible - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle edibility - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein falciform - - - - - - - - - - - - - - - - - - - - - - - - micropyle areolate - - - - - - - - - - - - - - - - - - - - - - - - micropyle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member inserted into - - - - - - - - - - - - - - - - - - - - - - - - radicle opposite - - - - - - - - - - - - - - - - - - - - - - - - stem undivided - - - - - - - - - - - - - - - - - - - - - - - - bark dense - - - - - - - - - - - - - - - - - - - - - - - - bark mass density - - - - - - - - - - - - - - - - - - - - - - - - juice sac basal to - - - - - - - - - - - - - - - - - - - - - - - - juice sac position - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf dorsal to - - - - - - - - - - - - - - - - - - - - - - - - testa orbicular - - - - - - - - - - - - - - - - - - - - - - - - corolla erose - - - - - - - - - - - - - - - - - - - - - - - - pedicel notched - - - - - - - - - - - - - - - - - - - - - - - - receptacle rhomboid - - - - - - - - - - - - - - - - - - - - - - - - apical hook heart shaped - - - - - - - - - - - - - - - - - - - - - - - - bark concave - - - - - - - - - - - - - - - - - - - - - - - - bark concavity - - - - - - - - - - - - - - - - - - - - - - - - branch sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - petiolule spatulate - - - - - - - - - - - - - - - - - - - - - - - - prickle inflexible - - - - - - - - - - - - - - - - - - - - - - - - prickle flexibility - - - - - - - - - - - - - - - - - - - - - - - - valve trilobed - - - - - - - - - - - - - - - - - - - - - - - - hypanthium red - - - - - - - - - - - - - - - - - - - - - - - - branch multiple - - - - - - - - - - - - - - - - - - - - - - - - peduncle warty - - - - - - - - - - - - - - - - - - - - - - - - branch upturned - - - - - - - - - - - - - - - - - - - - - - - - epidermis present - - - - - - - - - - - - - - - - - - - - - - - - epidermis amount - - - - - - - - - - - - - - - - - - - - - - - - seed dark yellow - - - - - - - - - - - - - - - - - - - - - - - - endocarp horizontal - - - - - - - - - - - - - - - - - - - - - - - - root tip spatulate - - - - - - - - - - - - - - - - - - - - - - - - stamen revolute - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle decussate - - - - - - - - - - - - - - - - - - - - - - - - tuber absent - - - - - - - - - - - - - - - - - - - - - - - - tuber amount - - - - - - - - - - - - - - - - - - - - - - - - - - - - arillode phenotype - - - - - - - - - - - - - - - - - - - - - - - - arillode lobed - - - - - - - - - - - - - - - - - - - - - - - - arillode shape - - - - - - - - - - - - - - - - - - - - - - - - leaflet adaxial to - - - - - - - - - - - - - - - - - - - - - - - - root brown - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis dark brown - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system auriculate - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root water composition - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system triangular - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - corm vertical to - - - - - - - - - - - - - - - - - - - - - - - - stem area - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein lanceolate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf punctate - - - - - - - - - - - - - - - - - - - - - - - - stem exserted - - - - - - - - - - - - - - - - - - - - - - - - branch discoid - - - - - - - - - - - - - - - - - - - - - - - - pericarp bitter - - - - - - - - - - - - - - - - - - - - - - - - pericarp flavor - - - - - - - - - - - - - - - - - - - - - - - - glume sharp - - - - - - - - - - - - - - - - - - - - - - - - corm basal to - - - - - - - - - - - - - - - - - - - - - - - - perianth straight - - - - - - - - - - - - - - - - - - - - - - - - branch spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - bud yellow orange - - - - - - - - - - - - - - - - - - - - - - - - lamina cut - - - - - - - - - - - - - - - - - - - - - - - - pulvinus auriculate - - - - - - - - - - - - - - - - - - - - - - - - pulvinus shape - - - - - - - - stipel premature - true - - - - - - - - stipel onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - bract conspicuous - - - - - - - - - - - - - - - - - - - - - - - - thorn glistening - - - - - - - - - - - - - - - - - - - - - - - - thorn reflectivity - - - - - - - - - - - - - - - - - - - - - - - - calyx wrinkled - - - - - - - - - - - - - - - - - - - - - - - - fruit inflexible - - - - - - - - - - - - - - - - - - - - - - - - sepal right - - - - - - - - - - - - - - - - - - - - - - - - awn laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - calyx actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - calyx radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - valve falciform - - - - - - - - - - - - - - - - - - - - - - - - anther involute - - - - - - - - - - - - - - - - - - - - - - - - tubercle spongy - - - - - - - - - - - - - - - - - - - - - - - - valve opposite - - - - - - - - - - - - - - - - - - - - - - - - tepal dark blue - - - - - - - - - - - - - - - - - - - - - - - - lamina perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem viscous - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem viscosity - - - - - - - - - - - - - - - - - - - - - - - - crown root undulate - - - - - - - - - - - - - - - - - - - - - - - - leaf apex proximal to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein star shaped - - - - - - - - - - - - - - - - - - - - - - - - whole plant falciform - - - - - - - - - - - - - - - - - - - - - - - - plant embryo orbicular - - - - - - - - - - - - - - - - - - - - - - - - fruit sharp - - - - - - - - perianth down - true - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - gynophore autogenous - - - - - - - - - - - - - - - - - - - - - - - - peduncle dispersed - - - - - - - - - - - - - - - - - - - - - - - - upper glume decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - upper glume thickness - - - - - - - - - - - - - - - - - - - - - - - - leaflet bulbous - - - - - - - - - - - - - - - - - - - - - - - - lower glume whole - - - - - - - - - - - - - - - - - - - - - - - - lower glume wholeness - - - - - - - - - - - - - - - - - - - - - - - - lenticel kinked - - - - - - - - - - - - - - - - - - - - - - - - stigma undivided - - - - - - - - - - - - - - - - - - - - - - - - connective conspicuous - - - - - - - - - - - - - - - - - - - - - - - - pericarp basal to - - - - - - - - - - - - - - - - - - - - - - - - heartwood bifurcated - - - - - - - - - - - - - - - - - - - - - - - - endocarp folded - - - - - - - - - - - - - - - - - - - - - - - - seta brown - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal cuneate - - - - - - - - - - - - - - - - - - - - - - - - axil crowded - - - - - - - - - - - - - - - - - - - - - - - - valve open - - - - - - - - - - - - - - - - - - - - - - - - valve closure - - - - - - - - - - - - - - - - - - - - - - - - epicalyx divergent from - - - - - - - - receptacle hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - aril ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf apex oblique to - - - - - - - - - - - - - - - - - - - - - - - - mesocarp oblong - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein autogenous - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein structure - - - - - - - - - - - - - - - - - - - - - - - - leaflet subcircular - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore sharpness - - - - - - - - - - - - - - - - - - - - - - - - disk flower drooping - - - - - - - - - - - - - - - - - - - - - - - - gynoecium tomentose - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence clavate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina angular - - - - - - - - - - - - - - - - - - - - - - - - pedicel firm - - - - - - - - - - - - - - - - - - - - - - - - canal star shaped - - - - - - - - - - - - - - - - - - - - - - - - flower blue - - - - - - - - - - - - - - - - - - - - - - - - thallus level with - - - - - - - - - - - - - - - - - - - - - - - - thallus position - - - - - - - - - - - - - - - - - - - - - - - - stem spiny - - - - - - - - - - - - - - - - - - - - - - - - mesocarp dense - - - - - - - - - - - - - - - - - - - - - - - - mesocarp mass density - - - - - - - - - - - - - - - - - - - - - - - - glume indurated - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue subulate - - - - - - - - - - - - - - - - - - - - - - - - raphe translucent - - - - - - - - - - - - - - - - - - - - - - - - raphe opacity - - - - - - - - - - - - - - - - - - - - - - - - seed pink - - - - - - - - - - - - - - - - - - - - - - - - valve discoid - - - - - - - - - - - - - - - - - - - - - - - - infructescence flush - - - - - - - - - - - - - - - - - - - - - - - - central zone adaxial to - - - - - - - - - - - - - - - - - - - - - - - - petiolule kinked - - - - - - - - - - - - - - - - - - - - - - - - hypanthium triangular - - - - - - - - - - - - - - - - - - - - - - - - columella present - - - - - - - - - - - - - - - - - - - - - - - - columella amount - - - - - - - - - - - - - - - - - - - - - - - - bract overlapping - - - - - - - - - - - - - - - - - - - - - - - - periderm red - - - - - - - - - - - - - - - - - - - - - - - - - - - - root system phenotype - - - - - - - - - - - - - - - - - - - - - - - - root system herbaceous - - - - - - - - - - - - - - - - - - - - - - - - root system shedability - - - - - - - - - - - - - - - - - - - - - - - - seed elongated - - - - - - - - - - - - - - - - - - - - - - - - style dense - - - - - - - - - - - - - - - - - - - - - - - - style mass density - - - - - - - - - - - - - - - - - - - - - - - - terminal bud oblong - - - - - - - - - - - - - - - - - - - - - - - - terminal bud 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - cotyledon external to - - - - - - - - - - - - - - - - - - - - - - - - leaf overlap with - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath slender - - - - - - - - - - - - - - - - - - - - - - - - calyx sterile - - - - - - - - - - - - - - - - - - - - - - - - calyx angle - - - - - - - - - - - - - - - - - - - - - - - - perianth spongy - - - - - - - - - - - - - - - - - - - - - - - - pappus purple - - - - - - - - - - - - - - - - - - - - - - - - plant callus bilobed - - - - - - - - - - - - - - - - - - - - - - - - involucre discoid - - - - - - - - - - - - - - - - - - - - - - - - oil gland fleshy - - - - - - - - - - - - - - - - - - - - - - - - oil gland composition - - - - - - - - - - - - - - - - - - - - - - - - aril concave - - - - - - - - - - - - - - - - - - - - - - - - root tip bifurcated - - - - - - - - - - - - - - - - - - - - - - - - pappus hairy - - - - - - - - - - - - - - - - - - - - - - - - staminode adaxial to - - - - - - - - - - - - - - - - - - - - - - - - hilum right - - - - - - - - - - - - - - - - - - - - - - - - hypodermis present - - - - - - - - - - - - - - - - - - - - - - - - rhizome translucent - - - - - - - - - - - - - - - - - - - - - - - - radicle bent - - - - - - - - - - - - - - - - - - - - - - - - stipule purple - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal truncated - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal cuspidate - - - - - - - - - - - - - - - - - - - - - - - - apical hook drooping - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member tomentose - - - - - - - - - - - - - - - - - - - - - - - - hydathode present - - - - - - - - - - - - - - - - - - - - - - - - hydathode amount - - - - - - - - epicalyx acute - true - - - - - - - - epicalyx duration - true - - - - - - - - - - - - - - - - - - - - - - - - bud decussate - - - - - - - - - - - - - - - - - - - - - - - - testa straight - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle elliptic - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle 2-D shape - - - - - - - - central spike of tassel inflorescence male - true - - - - - - - - central spike of tassel inflorescence phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member angular - - - - - - - - - - - - - - - - - - - - - - - - rhizome sparse - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf symmetrical - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf symmetry - - - - - - - - - - - - - - - - - - - - - - - - locule light brown - - - - - - - - - - - - - - - - - - - - - - - - pistillode sterile - - - - - - - - - - - - - - - - - - - - - - - - pistillode fertility - - - - - - - - - - - - - - - - - - - - - - - - carpel diameter - - - - - - - - - - - - - - - - - - - - - - - - strophiole vertical - - - - - - - - - - - - - - - - - - - - - - - - strophiole spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - seed dark red - - - - - - - - - - - - - - - - - - - - - - - - gynoecium cupulate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - radicle subcircular - - - - - - - - - - - - - - - - - - - - - - - - radicle 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - peristome hairy - - - - - - - - - - - - - - - - - - - - - - - - peristome pilosity - - - - - - - - - - - - - - - - - - - - - - - - fruit ochre - - - - - - - - - - - - - - - - - - - - - - - - involucre obovate - - - - - - - - - - - - - - - - - - - - - - - - locule split - - - - - - - - - - - - - - - - - - - - - - - - disk flower warty - - - - - - - - - - - - - - - - - - - - - - - - mesocarp aromatic - - - - - - - - - - - - - - - - - - - - - - - - mesocarp aromaticity - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein decreased amount - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein amount - - - - - - - - - - - - - - - - - - - - - - - - perianth right - - - - - - - - - - - - - - - - - - - - - - - - petal adaxial to - - - - - - - - - - - - - - - - - - - - - - - - stipule angular - - - - - - - - - - - - - - - - - - - - - - - - glume prominent - - - - - - - - - - - - - - - - - - - - - - - - tepal broad - - - - - - - - - - - - - - - - - - - - - - - - axil dentated - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle water composition - - - - - - - - - - - - - - - - - - - - - - - - fruit dark red brown - - - - - - - - - - - - - - - - - - - - - - - - leaf base broad - - - - - - - - - - - - - - - - - - - - - - - - calyx multicellular - - - - - - - - - - - - - - - - - - - - - - - - calyx cellularity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet striated - - - - - - - - - - - - - - - - - - - - - - - - axil congested - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin dry - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin wetness - - - - - - - - - - - - - - - - - - - - - - - - petiole broken - - - - - - - - - - - - - - - - - - - - - - - - petiole wholeness - - - - - - - - - - - - - - - - - - - - - - - - staminode basal to - - - - - - - - - - - - - - - - - - - - - - - - epidermis granular - - - - - - - - - - - - - - - - - - - - - - - - epidermis composition - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue adaxial to - - - - - - - - - - - - - - - - - - - - - - - - stalk punctate - - - - - - - - - - - - - - - - - - - - - - - - bark firm - - - - - - - - - - - - - - - - - - - - - - - - flower dark red - - - - - - - - - - - - - - - - - - - - - - - - crown root emarginate - - - - - - - - - - - - - - - - - - - - - - - - stigma adaxial to - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem serrated - - - - - - - - - - - - - - - - - - - - - - - - root tip cauline to - - - - - - - - - - - - - - - - - - - - - - - - stamen white - - - - - - - - - - - - - - - - - - - - - - - - peduncle hispidulous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue reniform - - - - - - - - - - - - - - - - - - - - - - - - stele dentated - - - - - - - - - - - - - - - - - - - - - - - - leaf margin hairy - - - - - - - - - - - - - - - - - - - - - - - - seed spheroid - - - - - - - - axil premature - true - - - - - - - - axil onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - axil scalloped - - - - - - - - - - - - - - - - - - - - - - - - endosperm aligned with - - - - - - - - - - - - - - - - - - - - - - - - endosperm alignment - - - - - - - - - - - - - - - - - - - - - - - - filament reniform - - - - - - - - - - - - - - - - - - - - - - - - calyx erose - - - - - - - - - - - - - - - - - - - - - - - - awn tangled - - - - - - - - - - - - - - - - - - - - - - - - placenta slender - - - - - - - - - - - - - - - - - - - - - - - - stele basal to - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure cauline to - - - - - - - - - - - - - - - - - - - - - - - - fruit bent - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein autogenous - - - - - - - - - - - - - - - - - - - - - - - - ligule distichous - - - - - - - - - - - - - - - - - - - - - - - - perianth deep pink - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma glabrous - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma pilosity - - - - - - - - - - - - - - - - - - - - - - - - fruit upturned - - - - - - - - - - - - - - - - - - - - - - - - calyx loose - - - - - - - - - - - - - - - - - - - - - - - - shoot system condensed - - - - - - - - - - - - - - - - - - - - - - - - shoot system structure - - - - - - - - - - - - - - - - - - - - - - - - nectary star shaped - - - - - - - - - - - - - - - - - - - - - - - - hilum length - - - - - - - - - - - - - - - - - - - - - - - - hilum obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf margin linear - - - - - - - - - - - - - - - - - - - - - - - - leaf margin shape - - - - - - - - - - - - - - - - - - - - - - - - seed oblique to - - - - - - - - tassel sessile spikelet female - true - - - - - - - - - - - - - - - - - - - - - - - - hilum laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - peduncle fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - involucre broad - - - - - - - - - - - - - - - - - - - - - - - - hilum open - - - - - - - - - - - - - - - - - - - - - - - - hilum closure - - - - - - - - - - - - - - - - - - - - - - - - sorus adjacent to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence vestigial - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein arched - - - - - - - - - - - - - - - - - - - - - - - - peristome maroon - - - - - - - - - - - - - - - - - - - - - - - - testa adhesive - - - - - - - - - - - - - - - - - - - - - - - - testa adhesivity - - - - - - - - - - - - - - - - - - - - - - - - canal slender - - - - - - - - - - - - - - - - - - - - - - - - stem firm - - - - - - - - - - - - - - - - - - - - - - - - fruit red brown - - - - - - - - - - - - - - - - - - - - - - - - shoot system branched - - - - - - - - - - - - - - - - - - - - - - - - involucre subulate - - - - - - - - - - - - - - - - - - - - - - - - staminode straight - - - - - - - - - - - - - - - - - - - - - - - - calyx nodular - - - - - - - - corolla down - true - - - - - - - - - - - - - - - - - - - - - - - - mesocarp split - - - - - - - - - - - - - - - - - - - - - - - - mesocarp shape - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure tomentose - - - - - - - - - - - - - - - - - - - - - - - - mesocarp black - - - - - - - - - - - - - - - - - - - - - - - - petiolule divergent from - - - - - - - - - - - - - - - - - - - - - - - - endocarp viscous - - - - - - - - - - - - - - - - - - - - - - - - endocarp viscosity - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium coating - - - - - - - - - - - - - - - - - - - - - - - - fruit level with - - - - - - - - - - - - - - - - - - - - - - - - shoot internode purple - - - - - - - - - - - - - - - - - - - - - - - - shoot internode color - - - - - - - - - - - - - - - - - - - - - - - - lamina strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx peripheral - - - - - - - - - - - - - - - - - - - - - - - - whole plant slit-like - - - - - - - - - - - - - - - - - - - - - - - - perianth vestigial - - - - - - - - - - - - - - - - - - - - - - - - pedicel quadrangular - - - - - - - - - - - - - - - - - - - - - - - - keel conspicuous - - - - - - - - - - - - - - - - - - - - - - - - testa light grey - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein terminal - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein glandular - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein morphology - - - - - - - - - - - - - - - - - - - - - - - - tuberous root erect - - - - - - - - - - - - - - - - - - - - - - - - tuberous root position - - - - - - - - - - - - - - - - - - - - - - - - shoot system pubescent - - - - - - - - - - - - - - - - - - - - - - - - shoot system maturity - - - - - - - - - - - - - - - - - - - - - - - - filament heart shaped - - - - - - - - - - - - - - - - - - - - - - - - perianth slit-like - - - - - - - - - - - - - - - - - - - - - - - - ligule slender - - - - - - - - - - - - - - - - - - - - - - - - corolla furrowed - - - - - - - - - - - - - - - - - - - - - - - - ligule fleshy - - - - - - - - - - - - - - - - - - - - - - - - raphe flattened - - - - - - - - - - - - - - - - - - - - - - - - apical hook falciform - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath maturity - - - - - - - - - - - - - - - - - - - - - - - - peduncle decussate - - - - - - - - - - - - - - - - - - - - - - - - thallus oblong - - - - - - - - - - - - - - - - - - - - - - - - thallus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - endosperm oblique to - - - - - - - - - - - - - - - - - - - - - - - - petiole punctiform - - - - - - - - - - - - - - - - - - - - - - - - shoot internode attenuate - - - - - - - - - - - - - - - - - - - - - - - - shoot internode sharpness - - - - - - - - - - - - - - - - - - - - - - - - aril overlapping - - - - - - - - - - - - - - - - - - - - - - - - valve circular - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal recurved - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell arched - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath ivory - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath mass density - - - - - - - - - - - - - - - - - - - - - - - - mesocarp yellow - - - - - - - - - - - - - - - - - - - - - - - - branch trilobed - - - - - - - - - - - - - - - - - - - - - - - - costa cuneate - - - - - - - - - - - - - - - - - - - - - - - - perianth spherical - - - - - - - - - - - - - - - - - - - - - - - - filament extends to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system subulate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence magenta - - - - - - - - - - - - - - - - - - - - - - - - phloem viscous - - - - - - - - - - - - - - - - - - - - - - - - phloem viscosity - - - - - - - - tepal female - true - - - - - - - - - - - - - - - - - - - - - - - - central zone simple - - - - - - - - - - - - - - - - - - - - - - - - central zone complexity - - - - - - - - - - - - - - - - - - - - - - - - sporangium oblique to - - - - - - - - - - - - - - - - - - - - - - - - infructescence slender - - - - - - - - - - - - - - - - - - - - - - - - tepal pointed - - - - - - - - - - - - - - - - - - - - - - - - fruit spotted - - - - - - - - - - - - - - - - - - - - - - - - petiole horizontal - - - - - - - - - - - - - - - - - - - - - - - - whole plant spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx striated - - - - - - - - - - - - - - - - - - - - - - - - apical hook recurved - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma conspicuous - - - - - - - - - - - - - - - - - - - - - - - - raphe asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - raphe symmetry - - - - - - - - - - - - - - - - - - - - - - - - pistillode bifurcated - - - - - - - - - - - - - - - - - - - - - - - - stem mottled - - - - - - - - - - - - - - - - - - - - - - - - leaf decayed - - - - - - - - - - - - - - - - - - - - - - - - stigma level with - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis congested - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina obtuse - - - - - - - - - - - - - - - - - - - - - - - - prickle brittle - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus inflexible - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus flexibility - - - - - - - - - - - - - - - - - - - - - - - - stigma domed - - - - - - - - - - - - - - - - - - - - - - - - perianth concave - - - - - - - - - - - - - - - - - - - - - - - - hydathode emarginate - - - - - - - - - - - - - - - - - - - - - - - - hydathode concavity - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem star shaped - - - - - - - - - - - - - - - - - - - - - - - - petal waxy - - - - - - - - - - - - - - - - - - - - - - - - petal waxiness - - - - - - - - - - - - - - - - - - - - - - - - carpel concave - - - - - - - - - - - - - - - - - - - - - - - - seed mass - - - - - - - - - - - - - - - - - - - - - - - - calyx decurrent - - - - - - - - - - - - - - - - - - - - - - - - flower attached to - - - - - - - - - - - - - - - - - - - - - - - - carpel open - - - - - - - - - - - - - - - - - - - - - - - - carpel closure - - - - - - - - - - - - - - - - - - - - - - - - leaflet black - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal caudate - - - - - - - - carpel female - true - - - - - - - - - - - - - - - - - - - - - - - - calyx lateral to - - - - - - - - - - - - - - - - - - - - - - - - lenticel arched - - - - - - - - - - - - - - - - - - - - - - - - stem weight - - - - - - - - - - - - - - - - - - - - - - - - parenchyma elliptic - - - - - - - - - - - - - - - - - - - - - - - - heartwood yellow - - - - - - - - - - - - - - - - - - - - - - - - terminal bud dry - - - - - - - - - - - - - - - - - - - - - - - - terminal bud wetness - - - - - - - - - - - - - - - - - - - - - - - - receptacle closed - - - - - - - - - - - - - - - - - - - - - - - - receptacle closure - - - - - - - - - - - - - - - - - - - - - - - - lemma obovate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence female sterile - - - - - - - - - - - - - - - - - - - - - - - - fruit broken - - - - - - - - - - - - - - - - - - - - - - - - parenchyma raised - - - - - - - - - - - - - - - - - - - - - - - - caruncle prominent - - - - - - - - - - - - - - - - - - - - - - - - flower dark yellow - - - - - - - - - - - - - - - - - - - - - - - - valve black - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium water composition - - - - - - - - - - - - - - - - - - - - - - - - lenticel offset - - - - - - - - - - - - - - - - - - - - - - - - flower distributed - - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf areolate - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - pericarp asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - pericarp symmetry - - - - - - - - - - - - - - - - - - - - - - - - ligule branched - - - - - - - - - - - - - - - - - - - - - - - - plant cell spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - whole plant pointed - - - - - - - - - - - - - - - - - - - - - - - - lamina dark purple - - - - - - - - - - - - - - - - - - - - - - - - placenta black - - - - - - - - - - - - - - - - - - - - - - - - parenchyma flexibility - - - - - - - - - - - - - - - - - - - - - - - - epidermis inflexible - - - - - - - - - - - - - - - - - - - - - - - - epidermis flexibility - - - - - - - - hypanthium male - true - - - - - - - - hypanthium phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - crown root purple - - - - - - - - - - - - - - - - - - - - - - - - crown root color - - - - - - - - - - - - - - - - - - - - - - - - peduncle closed - - - - - - - - - - - - - - - - - - - - - - - - peduncle closure - - - - - - - - - - - - - - - - - - - - - - - - glume broad - - - - - - - - - - - - - - - - - - - - - - - - axillary bud lanceolate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud sharpness - - - - - - - - - - - - - - - - - - - - - - - - filament spotted - - - - - - - - - - - - - - - - - - - - - - - - canal raised - - - - - - - - - - - - - - - - - - - - - - - - tubercle spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - valve purple - - - - - - - - - - - - - - - - - - - - - - - - testa marbled - - - - - - - - - - - - - - - - - - - - - - - - style oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - tepal truncated - - - - - - - - - - - - - - - - - - - - - - - - valve kinked - - - - - - - - - - - - - - - - - - - - - - - - costa slender - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf oblong - - - - - - - - - - - - - - - - - - - - - - - - lower glume V-shaped - - - - - - - - - - - - - - - - - - - - - - - - valve lobed - - - - - - - - - - - - - - - - - - - - - - - - leaf base lateral to - - - - - - - - - - - - - - - - - - - - - - - - shoot system flattened - - - - - - - - - - - - - - - - - - - - - - - - shoot system curvature - - - - - - - - - - - - - - - - - - - - - - - - central zone undulate - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf leaf-like - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma peripheral - - - - - - - - - - - - - - - - - - - - - - - - terminal bud inserted into - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium ventral to - - - - - - - - - - - - - - - - - - - - - - - - heartwood kinked - - - - - - - - - - - - - - - - - - - - - - - - bracteole arched - - - - - - - - - - - - - - - - - - - - - - - - pedicel axial to - - - - - - - - - - - - - - - - - - - - - - - - stigma laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - shoot internode viscous - - - - - - - - - - - - - - - - - - - - - - - - shoot internode viscosity - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue inflexible - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue flexibility - - - - - - - - - - - - - - - - - - - - - - - - pedicel spotted - - - - - - - - - - - - - - - - - - - - - - - - pedicel color pattern - - - - - - - - - - - - - - - - - - - - - - - - pappus green - - - - - - - - - - - - - - - - - - - - - - - - tubercle retuse - - - - - - - - - - - - - - - - - - - - - - - - hilum increased length - - - - - - - - - - - - - - - - - - - - - - - - stem tubular - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein dorsal to - - - - - - - - - - - - - - - - - - - - - - - - shoot axis oblique to - - - - - - - - - - - - - - - - - - - - - - - - shoot axis position - - - - - - - - - - - - - - - - - - - - - - - - petiole separated from - - - - - - - - - - - - - - - - - - - - - - - - petiole retrorse - - - - - - - - - - - - - - - - - - - - - - - - androecium yellow - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis flattened - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis curvature - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal age - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root linear - - - - - - - - - - - - - - - - - - - - - - - - apical hook bilobed - - - - - - - - - - - - - - - - - - - - - - - - androecium striated - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril hairy - - - - - - - - - - - - - - - - - - - - - - - - bulb conical - - - - - - - - - - - - - - - - - - - - - - - - raphe attached to - - - - - - - - - - - - - - - - - - - - - - - - raphe attachment quality - - - - - - - - - - - - - - - - - - - - - - - - petiole height - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - cotyledon exserted - - - - - - - - - - - - - - - - - - - - - - - - columella slender - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath exserted - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath position - - - - - - - - pappus acute - true - - - - - - - - pappus duration - true - - - - - - - - - - - - - - - - - - - - - - - - androecium acuminate - - - - - - - - - - - - - - - - - - - - - - - - upper glume fleshy - - - - - - - - - - - - - - - - - - - - - - - - upper glume composition - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium smooth - - - - - - - - - - - - - - - - - - - - - - - - trichome opposite - - - - - - - - - - - - - - - - - - - - - - - - stipel smooth - - - - - - - - - - - - - - - - - - - - - - - - stipel texture - - - - - - - - - - - - - - - - - - - - - - - - bud protruding into - - - - - - - - - - - - - - - - - - - - - - - - rhizome fragile - - - - - - - - - - - - - - - - - - - - - - - - rhizome fragility - - - - - - - - - - - - - - - - - - - - - - - - tepal triangular - - - - - - - - - - - - - - - - - - - - - - - - connective lobate - - - - - - - - - - - - - - - - - - - - - - - - connective surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - endosperm oblong - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - periderm decussate - - - - - - - - - - - - - - - - - - - - - - - - periderm spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaflet funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - pedicel decurrent - - - - - - - - - - - - - - - - - - - - - - - - tubercle fleshy - - - - - - - - persistent sepal hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal trilobed - - - - - - - - - - - - - - - - - - - - - - - - bark present - - - - - - - - - - - - - - - - - - - - - - - - nectary purple - - - - - - - - - - - - - - - - - - - - - - - - stolon cylindrical - - - - - - - - - - - - - - - - - - - - - - - - flower translucent - - - - - - - - - - - - - - - - - - - - - - - - axil fertile - - - - - - - - - - - - - - - - - - - - - - - - tuberous root age - - - - - - - - - - - - - - - - - - - - - - - - lower glume white - - - - - - - - - - - - - - - - - - - - - - - - petiole funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - spikelet clavate - - - - - - - - - - - - - - - - - - - - - - - - spikelet concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf abaxial to - - - - - - - - - - - - - - - - - - - - - - - - hypanthium dark red - - - - - - - - - - - - - - - - - - - - - - - - tubercle black - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dark grey - - - - - - - - - - - - - - - - - - - - - - - - inflorescence attached to - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system elliptic - - - - - - - - - - - - - - - - - - - - - - - - lemma glistening - - - - - - - - - - - - - - - - - - - - - - - - lemma reflectivity - - - - - - - - - - - - - - - - - - - - - - - - ligule axial to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex sunken - - - - - - - - - - - - - - - - - - - - - - - - shoot apex elevation - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence distichous - - - - - - - - - - - - - - - - - - - - - - - - gynophore flat - - - - - - - - - - - - - - - - - - - - - - - - connective confluent with - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle orange - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue broken - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue wholeness - - - - - - - - - - - - - - - - - - - - - - - - flower vertical - - - - - - - - - - - - - - - - - - - - - - - - apical hook ventral to - - - - - - - - - - - - - - - - - - - - - - - - infructescence diameter - - - - - - - - - - - - - - - - - - - - - - - - spikelet distichous - - - - - - - - - - - - - - - - - - - - - - - - sepal vestigial - - - - - - - - - - - - - - - - - - - - - - - - stigma protruding - - - - - - - - - - - - - - - - - - - - - - - - palea width - - - - - - - - leaf apex acute - true - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system whorled - - - - - - - - - - - - - - - - - - - - - - - - style area - - - - - - - - - - - - - - - - - - - - - - - - thallus elliptic - - - - - - - - - - - - - - - - - - - - - - - - pedicel left - - - - - - - - - - - - - - - - - - - - - - - - hypanthium discoid - - - - - - - - - - - - - - - - - - - - - - - - aril viscid - - - - - - - - - - - - - - - - - - - - - - - - connective superficial - - - - - - - - - - - - - - - - - - - - - - - - petiole congested - - - - - - - - lemma female - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence spiny - - - - - - - - - - - - - - - - - - - - - - - - inflorescence surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - stalk circular - - - - - - - - - - - - - - - - - - - - - - - - peduncle yellow - - - - - - - - - - - - - - - - - - - - - - - - petal funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - tubercle star shaped - - - - - - - - - - - - - - - - - - - - - - - - androecium raised - - - - - - - - - - - - - - - - - - - - - - - - trichome sigmoid - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle curled - - - - - - - - - - - - - - - - - - - - - - - - locule discoid - - - - - - - - - - - - - - - - - - - - - - - - pericarp undulate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell leaf-like - - - - - - - - - - - - - - - - - - - - - - - - sheath cell undulate - - - - - - - - - - - - - - - - - - - - - - - - testa domed - - - - - - - - - - - - - - - - - - - - - - - - bracteole rough - - - - - - - - strobilus up - true - - - - - - - - - - - - - - - - - - - - - - - - strobilus direction - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal hispid - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure serrated - - - - - - - - - - - - - - - - - - - - - - - - endocarp dry - - - - - - - - - - - - - - - - - - - - - - - - endocarp wetness - - - - - - - - - - - - - - - - - - - - - - - - pedicel black - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal spatulate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge truncated - - - - - - - - - - - - - - - - - - - - - - - - root system branched - - - - - - - - - - - - - - - - - - - - - - - - root system branchiness - - - - - - - - - - - - - - - - - - - - - - - - stereome green - - - - - - - - - - - - - - - - - - - - - - - - receptacle grey - - - - - - - - - - - - - - - - - - - - - - - - branch red - - - - - - - - - - - - - - - - - - - - - - - - style scaly - - - - - - - - - - - - - - - - - - - - - - - - prickle branched - - - - - - - - - - - - - - - - - - - - - - - - lemma inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - perisperm decreased amount - - - - - - - - - - - - - - - - - - - - - - - - connective curled - - - - - - - - - - - - - - - - - - - - - - - - androecium smooth - - - - - - - - - - - - - - - - - - - - - - - - cotyledon auriculate - - - - - - - - - - - - - - - - - - - - - - - - exocarp light brown - - - - - - - - - - - - - - - - - - - - - - - - tubercle purple - - - - - - - - - - - - - - - - - - - - - - - - endosperm vertical - - - - - - - - - - - - - - - - - - - - - - - - aril dark red - - - - - - - - short shoot up - true - - - - - - - - - - - - - - - - - - - - - - - - short shoot direction - - - - - - - - - - - - - - - - - - - - - - - - root tip coating - - - - - - - - - - - - - - - - - - - - - - - - perianth translucent - - - - - - - - - - - - - - - - - - - - - - - - leaflet parallel to - - - - - - - - - - - - - - - - - - - - - - - - cortex ridged - - - - - - - - - - - - - - - - - - - - - - - - cortex shape - - - - - - - - - - - - - - - - - - - - - - - - columella flattened - - - - - - - - - - - - - - - - - - - - - - - - columella curvature - - - - - - - - - - - - - - - - - - - - - - - - raphe broad - - - - - - - - - - - - - - - - - - - - - - - - stipule folded - - - - - - - - - - - - - - - - - - - - - - - - stipule surface feature shape - - - - - - - - lower glume male - true - - - - - - - - lower glume phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - bract axil phenotype - - - - - - - - - - - - - - - - - - - - - - - - bract axil actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - bract axil radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - branch whole - - - - - - - - - - - - - - - - - - - - - - - - seed coiled - - - - - - - - - - - - - - - - - - - - - - - - seed coiling - - - - - - - - - - - - - - - - - - - - - - - - nectary green - - - - - - - - - - - - - - - - - - - - - - - - stalk hollow - - - - - - - - - - - - - - - - - - - - - - - - perianth fusiform - - - - - - - - - - - - - - - - - - - - - - - - corolla branched - - - - - - - - - - - - - - - - - - - - - - - - pedicel concealed - - - - - - - - - - - - - - - - - - - - - - - - canal oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - arilloid black - - - - - - - - - - - - - - - - - - - - - - - - arilloid color - - - - - - - - - - - - - - - - - - - - - - - - petiole mineralized - - - - - - - - - - - - - - - - - - - - - - - - bark curled - - - - - - - - - - - - - - - - - - - - - - - - bud upturned - - - - - - - - - - - - - - - - - - - - - - - - seed light green - - - - - - - - - - - - - - - - - - - - - - - - calyx furrowed - - - - - - - - - - - - - - - - - - - - - - - - stamen crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - endocarp swollen - - - - - - - - - - - - - - - - - - - - - - - - corolla flat - - - - - - - - - - - - - - - - - - - - - - - - coma acuminate - - - - - - - - - - - - - - - - - - - - - - - - coma sharpness - - - - - - - - seed female - true - - - - - - - - seed phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - stigma condensed - - - - - - - - - - - - - - - - - - - - - - - - androecium recurved - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pinnate - - - - - - - - - - - - - - - - - - - - - - - - carpel conical - - - - - - - - - - - - - - - - - - - - - - - - papilla cell divergent from - - - - - - - - - - - - - - - - - - - - - - - - fruit light red - - - - - - - - - - - - - - - - - - - - - - - - flower proximal to - - - - - - - - - - - - - - - - - - - - - - - - pericarp flat - - - - - - - - - - - - - - - - - - - - - - - - keel U-shaped - - - - - - - - - - - - - - - - - - - - - - - - keel concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf axil diameter - - - - - - - - - - - - - - - - - - - - - - - - leaf netted - - - - - - - - - - - - - - - - - - - - - - - - leaf violet - - - - - - - - - - - - - - - - - - - - - - - - bract normal - - - - - - - - - - - - - - - - - - - - - - - - bract deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - pulvinus basal to - - - - - - - - lower glume female - true - - - - - - - - - - - - - - - - - - - - - - - - lemma folded - - - - - - - - - - - - - - - - - - - - - - - - stalk absent - - - - - - - - - - - - - - - - - - - - - - - - stalk amount - - - - - - - - - - - - - - - - - - - - - - - - petiole viscid - - - - - - - - - - - - - - - - - - - - - - - - petal open - - - - - - - - - - - - - - - - - - - - - - - - petal closure - - - - - - - - - - - - - - - - - - - - - - - - awn matted - - - - - - - - - - - - - - - - - - - - - - - - calyx bent - - - - - - - - - - - - - - - - - - - - - - - - connective circular - - - - - - - - - - - - - - - - - - - - - - - - seed trichome pinnate - - - - - - - - - - - - - - - - - - - - - - - - hilum diameter - - - - - - - - - - - - - - - - - - - - - - - - petiole antrorse - - - - - - - - - - - - - - - - - - - - - - - - pith hollow - - - - - - - - - - - - - - - - - - - - - - - - pith structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - testa old - - - - - - - - - - - - - - - - - - - - - - - - testa age - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath texture - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium opposite - - - - - - - - - - - - - - - - - - - - - - - - apical hook cupulate - - - - - - - - - - - - - - - - - - - - - - - - heartwood cuneate - - - - - - - - - - - - - - - - - - - - - - - - heartwood 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium prominent - - - - - - - - - - - - - - - - - - - - - - - - petiole fragile - - - - - - - - - - - - - - - - - - - - - - - - petiole fragility - - - - - - - - - - - - - - - - - - - - - - - - stigma whole - - - - - - - - - - - - - - - - - - - - - - - - connective sterile - - - - - - - - - - - - - - - - - - - - - - - - connective fertility - - - - - - - - - - - - - - - - - - - - - - - - androecium violet - - - - - - - - - - - - - - - - - - - - - - - - ligule dark brown - - - - - - - - - - - - - - - - - - - - - - - - androecium absent - - - - - - - - ligule subacute - true - - - - - - - - - - - - - - - - - - - - - - - - stipel increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stipel thickness - - - - - - - - - - - - - - - - - - - - - - - - fruit dark grey - - - - - - - - - - - - - - - - - - - - - - - - stipel alternate placement - - - - - - - - - - - - - - - - - - - - - - - - stipel spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal condensed - - - - - - - - - - - - - - - - - - - - - - - - caruncle dark brown - - - - - - - - - - - - - - - - - - - - - - - - anther theca slit-like - - - - - - - - - - - - - - - - - - - - - - - - calyx area - - - - - - - - - - - - - - - - - - - - - - - - leaf slit-like - - - - - - - - - - - - - - - - - - - - - - - - thorn swollen - - - - - - - - - - - - - - - - - - - - - - - - peristome prominent - - - - - - - - - - - - - - - - - - - - - - - - stigma circinate - - - - - - - - - - - - - - - - - - - - - - - - areole bud glistening - - - - - - - - - - - - - - - - - - - - - - - - areole bud reflectivity - - - - - - - - receptacle female - true - - - - - - - - - - - - - - - - - - - - - - - - leaf axil mixed - - - - - - - - - - - - - - - - - - - - - - - - leaf axil composition - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl U-shaped - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system convex - - - - - - - - - - - - - - - - - - - - - - - - perianth broken - - - - - - - - - - - - - - - - - - - - - - - - rhizome obtuse - - - - - - - - - - - - - - - - - - - - - - - - petiole open - - - - - - - - - - - - - - - - - - - - - - - - petiole closure - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus circular - - - - - - - - - - - - - - - - - - - - - - - - petiolule undulate - - - - - - - - - - - - - - - - - - - - - - - - cortex dark grey - - - - - - - - - - - - - - - - - - - - - - - - heartwood pink - - - - - - - - - - - - - - - - - - - - - - - - spikelet obovate - - - - - - - - - - - - - - - - - - - - - - - - petal inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue distributed - - - - - - - - - - - - - - - - - - - - - - - - peduncle inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - lamina protruding - - - - - - - - - - - - - - - - - - - - - - - - pappus antrorse - - - - - - - - - - - - - - - - - - - - - - - - gynophore abaxial to - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system flattened - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system curvature - - - - - - - - - - - - - - - - - - - - - - - - oil gland warty - - - - - - - - - - - - - - - - - - - - - - - - bract diameter - - - - - - - - - - - - - - - - - - - - - - - - flower slit-like - - - - - - - - - - - - - - - - - - - - - - - - aril rectangular - - - - - - - - - - - - - - - - - - - - - - - - seed operculum condensed - - - - - - - - - - - - - - - - - - - - - - - - seed operculum structure - - - - - - - - - - - - - - - - - - - - - - - - style angular - - - - - - - - - - - - - - - - - - - - - - - - stipule dense - - - - - - - - - - - - - - - - - - - - - - - - stipule mass density - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle decumbent - - - - - - - - - - - - - - - - - - - - - - - - crown root increased length - - - - - - - - - - - - - - - - - - - - - - - - crown root length - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl increased length - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl length - - - - - - - - - - - - - - - - - - - - - - - - spikelet diameter - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue conspicuous - - - - - - - - - - - - - - - - - - - - - - - - lamina matted - - - - - - - - - - - - - - - - - - - - - - - - tuber branched - - - - - - - - - - - - - - - - - - - - - - - - flower surrounding - - - - - - - - - - - - - - - - - - - - - - - - upper glume concealed - - - - - - - - - - - - - - - - - - - - - - - - anther open - - - - - - - - - - - - - - - - - - - - - - - - anther closure - - - - - - - - - - - - - - - - - - - - - - - - androecium brown - - - - - - - - - - - - - - - - - - - - - - - - keel angular - - - - - - - - - - - - - - - - - - - - - - - - mesophyll oblong - - - - - - - - - - - - - - - - - - - - - - - - mesophyll 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem tripartite - - - - - - - - - - - - - - - - - - - - - - - - awn articulated with - - - - - - - - - - - - - - - - - - - - - - - - petiole abaxial to - - - - - - - - - - - - - - - - - - - - - - - - upper glume erect - - - - - - - - - - - - - - - - - - - - - - - - corolla light green - - - - - - - - - - - - - - - - - - - - - - - - locule vestigial - - - - - - - - - - - - - - - - - - - - - - - - locule structure - - - - - - - - - - - - - - - - - - - - - - - - seed trichome glistening - - - - - - - - - - - - - - - - - - - - - - - - seed trichome reflectivity - - - - - - - - - - - - - - - - - - - - - - - - tubercle domed - - - - - - - - - - - - - - - - - - - - - - - - disk flower condensed - - - - - - - - - - - - - - - - - - - - - - - - cotyledon glistening - - - - - - - - - - - - - - - - - - - - - - - - cotyledon reflectivity - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root lanceolate - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root sharpness - - - - - - - - - - - - - - - - - - - - - - - - bud procumbent - - - - - - - - - - - - - - - - - - - - - - - - sheath cell fleshy - - - - - - - - - - - - - - - - - - - - - - - - sheath cell composition - - - - - - - - - - - - - - - - - - - - - - - - testa distributed - - - - - - - - - - - - - - - - - - - - - - - - mesocarp condensed - - - - - - - - - - - - - - - - - - - - - - - - endocarp dispersed - - - - - - - - - - - - - - - - - - - - - - - - gynophore pubescent - - - - - - - - - - - - - - - - - - - - - - - - gynophore maturity - - - - - - - - - - - - - - - - - - - - - - - - receptacle dentated - - - - - - - - - - - - - - - - - - - - - - - - epicalyx decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - epicalyx water composition - - - - - - - - - - - - - - - - - - - - - - - - awn hispidulous - - - - - - - - - - - - - - - - - - - - - - - - lamina oblique to - - - - - - - - - - - - - - - - - - - - - - - - lower glume prominent - - - - - - - - - - - - - - - - - - - - - - - - connective lobed - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina prominent - - - - - - - - - - - - - - - - - - - - - - - - whole plant dry - - - - - - - - - - - - - - - - - - - - - - - - whole plant wetness - - - - - - - - - - - - - - - - - - - - - - - - calyx involute - - - - - - - - - - - - - - - - - - - - - - - - thorn basal to - - - - - - - - - - - - - - - - - - - - - - - - fruit width - - - - - - - - - - - - - - - - - - - - - - - - sepal edible - - - - - - - - - - - - - - - - - - - - - - - - sepal edibility - - - - - - - - - - - - - - - - - - - - - - - - leaf base angular - - - - - - - - - - - - - - - - - - - - - - - - periderm condensed - - - - - - - - - - - - - - - - - - - - - - - - periderm structure - - - - - - - - - - - - - - - - - - - - - - - - leaf apex triangular - - - - - - - - - - - - - - - - - - - - - - - - leaf apex 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - root tip serrated - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus broken - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus wholeness - - - - - - - - - - - - - - - - - - - - - - - - seed blue - - - - - - - - - - - - - - - - - - - - - - - - locule rugose - - - - - - - - - - - - - - - - - - - - - - - - locule surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - stem dendritic - - - - - - - - - - - - - - - - - - - - - - - - lamina light brown - - - - - - - - - - - - - - - - - - - - - - - - staminode scalloped - - - - - - - - - - - - - - - - - - - - - - - - branch increased size - - - - - - - - - - - - - - - - - - - - - - - - epidermis punctiform - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein purple - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein color - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet fused with - - - - - - - - - - - - - - - - - - - - - - - - infructescence yellow - - - - - - - - - - - - - - - - - - - - - - - - papilla cell coiled - - - - - - - - - - - - - - - - - - - - - - - - papilla cell coiling - - - - - - - - terminal bud female - true - - - - - - - - terminal bud phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - root broken - - - - - - - - - - - - - - - - - - - - - - - - receptacle complex - - - - - - - - - - - - - - - - - - - - - - - - receptacle complexity - - - - - - - - - - - - - - - - - - - - - - - - resin canal spotted - - - - - - - - - - - - - - - - - - - - - - - - resin canal color pattern - - - - - - - - - - - - - - - - - - - - - - - - endocarp attached to - - - - - - - - - - - - - - - - - - - - - - - - endocarp attachment quality - - - - - - - - - - - - - - - - - - - - - - - - staminode heart shaped - - - - - - - - - - - - - - - - - - - - - - - - mesocarp pointed - - - - - - - - - - - - - - - - - - - - - - - - mesocarp sharpness - - - - - - - - - - - - - - - - - - - - - - - - peduncle axial to - - - - - - - - - - - - - - - - - - - - - - - - endocarp attenuate - - - - - - - - - - - - - - - - - - - - - - - - pericarp spotted - - - - - - - - - - - - - - - - - - - - - - - - pericarp color pattern - - - - - - - - - - - - - - - - - - - - - - - - gynoecium crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot internode sunken - - - - - - - - - - - - - - - - - - - - - - - - shoot internode elevation - - - - - - - - - - - - - - - - - - - - - - - - style immature - - - - - - - - - - - - - - - - - - - - - - - - gynoecium auriculate - - - - - - - - - - - - - - - - - - - - - - - - petiole notched - - - - - - - - - - - - - - - - - - - - - - - - bud light brown - - - - - - - - - - - - - - - - - - - - - - - - receptacle raised - - - - - - - - - - - - - - - - - - - - - - - - sepal size - - - - - - - - - - - - - - - - - - - - - - - - plant callus pedicellate - - - - - - - - - - - - - - - - - - - - - - - - plant callus attachment quality - - - - - - - - - - - - - - - - - - - - - - - - epidermis waxy - - - - - - - - - - - - - - - - - - - - - - - - epidermis waxiness - - - - - - - - - - - - - - - - - - - - - - - - carpel lanceolate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall broken - - - - - - - - - - - - - - - - - - - - - - - - ovary wall wholeness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence retrorse - - - - - - - - - - - - - - - - - - - - - - - - stem functional - - - - - - - - - - - - - - - - - - - - - - - - stem functionality - - - - - - - - - - - - - - - - - - - - - - - - gynoecium attached to - - - - - - - - - - - - - - - - - - - - - - - - fruit protruding into - - - - - - - - - - - - - - - - - - - - - - - - leaflet folded - - - - - - - - - - - - - - - - - - - - - - - - endocarp superficial - - - - - - - - - - - - - - - - - - - - - - - - lemma present - - - - - - - - - - - - - - - - - - - - - - - - - - - - cladode phenotype - - - - - - - - - - - - - - - - - - - - - - - - cladode straight - - - - - - - - - - - - - - - - - - - - - - - - cladode shape - - - - - - - - - - - - - - - - - - - - - - - - perianth lilac - - - - - - - - - - - - - - - - - - - - - - - - stamen dense - - - - - - - - - - - - - - - - - - - - - - - - stamen mass density - - - - - - - - - - - - - - - - - - - - - - - - bract serrated - - - - - - - - - - - - - - - - - - - - - - - - stamen prism shaped - - - - - - - - - - - - - - - - - - - - - - - - bud multicellular - - - - - - - - - - - - - - - - - - - - - - - - bud cellularity - - - - - - - - - - - - - - - - - - - - - - - - pith present - - - - - - - - - - - - - - - - - - - - - - - - pith amount - - - - - - - - - - - - - - - - - - - - - - - - scutellar node heart shaped - - - - - - - - - - - - - - - - - - - - - - - - scutellar node concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - thorn orbicular - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath auriculate - - - - - - - - - - - - - - - - - - - - - - - - endocarp waxy - - - - - - - - - - - - - - - - - - - - - - - - endocarp waxiness - - - - - - - - - - - - - - - - - - - - - - - - valve conical - - - - - - - - - - - - - - - - - - - - - - - - locule age - - - - - - - - - - - - - - - - - - - - - - - - staminode broad - - - - - - - - - - - - - - - - - - - - - - - - growth ring curved - - - - - - - - - - - - - - - - - - - - - - - - growth ring curvature - - - - - - - - - - - - - - - - - - - - - - - - stem autogenous - - - - - - - - - - - - - - - - - - - - - - - - hilum separated from - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus tubular - - - - - - - - - - - - - - - - - - - - - - - - central zone broken - - - - - - - - - - - - - - - - - - - - - - - - central zone wholeness - - - - - - - - - - - - - - - - - - - - - - - - sorus whole - - - - - - - - - - - - - - - - - - - - - - - - sorus wholeness - - - - - - - - - - - - - - - - - - - - - - - - heartwood orbicular - - - - - - - - - - - - - - - - - - - - - - - - aril wrinkled - - - - - - - - - - - - - - - - - - - - - - - - leaf spotted - - - - - - - - - - - - - - - - - - - - - - - - crown root scalloped - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system ventral to - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root alternate placement - - - - - - - - - - - - - - - - - - - - - - - - pulvinus articulated with - - - - - - - - - - - - - - - - - - - - - - - - pulvinus structure - - - - - - - - - - - - - - - - - - - - - - - - central zone angular - - - - - - - - - - - - - - - - - - - - - - - - exocarp rough - - - - - - - - - - - - - - - - - - - - - - - - receptacle domed - - - - - - - - - - - - - - - - - - - - - - - - petiolule auriculate - - - - - - - - - - - - - - - - - - - - - - - - bracteole clavate - - - - - - - - - - - - - - - - - - - - - - - - plant embryo linear - - - - - - - - - - - - - - - - - - - - - - - - sepal diameter - - - - - - - - - - - - - - - - - - - - - - - - exocarp rugose - - - - - - - - - - - - - - - - - - - - - - - - caruncle horizontal - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl increased size - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl size - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril multifid - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem raised - - - - - - - - - - - - - - - - - - - - - - - - lemma condensed - - - - - - - - - - - - - - - - - - - - - - - - petal dispersed - - - - - - - - - - - - - - - - - - - - - - - - style broken - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein tomentose - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet viscous - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet viscosity - - - - - - - - - - - - - - - - - - - - - - - - shoot system kinked - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein inserted into - - - - - - - - - - - - - - - - - - - - - - - - receptacle parallel to - - - - - - - - - - - - - - - - - - - - - - - - gynoecium green - - - - - - - - - - - - - - - - - - - - - - - - gynoecium color - - - - - - - - - - - - - - - - - - - - - - - - stele raised - - - - - - - - - - - - - - - - - - - - - - - - perianth soft - - - - - - - - - - - - - - - - - - - - - - - - plant cell oblong - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle tomentose - - - - - - - - - - - - - - - - - - - - - - - - stamen coiled - - - - - - - - - - - - - - - - - - - - - - - - stamen coiling - - - - - - - - - - - - - - - - - - - - - - - - ovary wall revolute - - - - - - - - - - - - - - - - - - - - - - - - flower conspicuous - - - - - - - - - - - - - - - - - - - - - - - - calyx herbaceous - - - - - - - - - - - - - - - - - - - - - - - - calyx shedability - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore striated - - - - - - - - - - - - - - - - - - - - - - - - ray system swollen - - - - - - - - - - - - - - - - - - - - - - - - ray system structure - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract adaxial to - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus notched - - - - - - - - - - - - - - - - - - - - - - - - lodicule pubescent - - - - - - - - - - - - - - - - - - - - - - - - lodicule maturity - - - - - - - - - - - - - - - - - - - - - - - - upper glume clavate - - - - - - - - - - - - - - - - - - - - - - - - upper glume concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - prickle angular - - - - - - - - - - - - - - - - - - - - - - - - tepal condensed - - - - - - - - - - - - - - - - - - - - - - - - juice sac oblong - - - - - - - - - - - - - - - - - - - - - - - - juice sac 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - valve inflated - - - - - - - - - - - - - - - - - - - - - - - - valve structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - upper glume indurated - - - - - - - - - - - - - - - - - - - - - - - - leaf protruding - - - - - - - - - - - - - - - - - - - - - - - - involucre mass - - - - - - - - - - - - - - - - - - - - - - - - spikelet lateral to - - - - - - - - - - - - - - - - - - - - - - - - lamina dark red - - - - - - - - - - - - - - - - - - - - - - - - cambium white - - - - - - - - - - - - - - - - - - - - - - - - awn tomentose - - - - - - - - - - - - - - - - - - - - - - - - epidermis prominent - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell branched - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell branchiness - - - - - - - - - - - - - - - - - - - - - - - - pistillode lobed - - - - - - - - - - - - - - - - - - - - - - - - filament surrounding - - - - - - - - - - - - - - - - - - - - - - - - papilla cell linear - - - - - - - - involucre premature - true - - - - - - - - involucre onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - cotyledon lobed - - - - - - - - - - - - - - - - - - - - - - - - hilum semicircular - - - - - - - - - - - - - - - - - - - - - - - - seed dark red brown - - - - - - - - - - - - - - - - - - - - - - - - involucre separated from - - - - - - - - - - - - - - - - - - - - - - - - sepal ornamentation - - - - - - - - leaf arrested - true - - - - - - - - leaf offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - filament notched - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina grey - - - - - - - - - - - - - - - - - - - - - - - - leaflet reniform - - - - - - - - - - - - - - - - - - - - - - - - stamen oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - stamen decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - stamen water composition - - - - - - - - - - - - - - - - - - - - - - - - arilloid purple - - - - - - - - - - - - - - - - - - - - - - - - leaf left - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem distichous - - - - - - - - - - - - - - - - - - - - - - - - endosperm angular - - - - - - - - - - - - - - - - - - - - - - - - axil angle - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril striated - - - - - - - - - - - - - - - - - - - - - - - - seed trichome multi-colored - - - - - - - - - - - - - - - - - - - - - - - - seed trichome color pattern - - - - - - - - - - - - - - - - - - - - - - - - areole bud lanceolate - - - - - - - - - - - - - - - - - - - - - - - - areole bud sharpness - - - - - - - - - - - - - - - - - - - - - - - - branch crowded - - - - - - - - - - - - - - - - - - - - - - - - upper glume straight - - - - - - - - - - - - - - - - - - - - - - - - calyx exposed - - - - - - - - - - - - - - - - - - - - - - - - style functional - - - - - - - - - - - - - - - - - - - - - - - - style functionality - - - - - - - - - - - - - - - - - - - - - - - - peristome parallel to - - - - - - - - - - - - - - - - - - - - - - - - seed involute - - - - - - - - - - - - - - - - - - - - - - - - papilla cell undulate - - - - - - - - - - - - - - - - - - - - - - - - fruit light grey - - - - - - - - - - - - - - - - - - - - - - - - plant embryo ovate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member distributed - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue viscous - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue viscosity - - - - - - - - - - - - - - - - - - - - - - - - hilum yellow brown - - - - - - - - - - - - - - - - - - - - - - - - seta elliptic - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - heartwood angular - - - - - - - - - - - - - - - - - - - - - - - - branch cuspidate - - - - - - - - - - - - - - - - - - - - - - - - tuber attached to - - - - - - - - - - - - - - - - - - - - - - - - tuber attachment quality - - - - - - - - - - - - - - - - - - - - - - - - rhizome flaky - - - - - - - - calyx hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - calyx ornamentation - - - - - - - - - - - - - - - - - - - - - - - - bud width - - - - - - - - - - - - - - - - - - - - - - - - pollen orange - - - - - - - - - - - - - - - - - - - - - - - - aril oblong - - - - - - - - - - - - - - - - - - - - - - - - shoot internode punctate - - - - - - - - - - - - - - - - - - - - - - - - shoot internode spatial pattern - - - - - - - - primary parietal cell arrested - true - - - - - - - - primary parietal cell offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - hilum translucent - - - - - - - - - - - - - - - - - - - - - - - - hilum opacity - - - - - - - - - - - - - - - - - - - - - - - - pericarp mottled - - - - - - - - - - - - - - - - - - - - - - - - ovary wall hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - ovary wall volume - - - - - - - - - - - - - - - - - - - - - - - - fruit circinate - - - - - - - - - - - - - - - - - - - - - - - - stigma cleft - - - - - - - - - - - - - - - - - - - - - - - - perianth trumpet-shaped - - - - - - - - - - - - - - - - - - - - - - - - petiole brochidodromous - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure attenuate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem cylindrical - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge bilobed - - - - - - - - - - - - - - - - - - - - - - - - peristome protruding - - - - - - - - - - - - - - - - - - - - - - - - plant callus raised - - - - - - - - - - - - - - - - - - - - - - - - disk flower curved - - - - - - - - - - - - - - - - - - - - - - - - costa subulate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence subulate - - - - - - - - - - - - - - - - - - - - - - - - stipule undulate - - - - - - - - - - - - - - - - - - - - - - - - leaf margin raised - - - - - - - - - - - - - - - - - - - - - - - - testa spotted - - - - - - - - - - - - - - - - - - - - - - - - stalk subulate - - - - - - - - - - - - - - - - - - - - - - - - stele terminal - - - - - - - - leaf vascular system hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - bracteole furrowed - - - - - - - - - - - - - - - - - - - - - - - - plant cell star shaped - - - - - - - - - - - - - - - - - - - - - - - - prophyll young - - - - - - - - - - - - - - - - - - - - - - - - prophyll age - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal split - - - - - - - - - - - - - - - - - - - - - - - - stigma subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - flower arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - - - - - primary root phenotype - - - - - - - - - - - - - - - - - - - - - - - - primary root cylindrical - - - - - - - - - - - - - - - - - - - - - - - - primary root convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petal involute - - - - - - - - - - - - - - - - - - - - - - - - endocarp orange - - - - - - - - - - - - - - - - - - - - - - - - root tip wrinkled - - - - - - - - - - - - - - - - - - - - - - - - endosperm prominent - - - - - - - - - - - - - - - - - - - - - - - - branch grey - - - - - - - - - - - - - - - - - - - - - - - - petal apex length - - - - - - - - - - - - - - - - - - - - - - - - disk flower purple - - - - - - - - - - - - - - - - - - - - - - - - disk flower color - - - - - - - - - - - - - - - - - - - - - - - - cotyledon terminal - - - - - - - - - - - - - - - - - - - - - - - - pericarp rugose - - - - - - - - - - - - - - - - - - - - - - - - exocarp firm - - - - - - - - - - - - - - - - - - - - - - - - hilum hairy - - - - - - - - - - - - - - - - - - - - - - - - carpel divergent from - - - - - - - - - - - - - - - - - - - - - - - - pericarp constricted - - - - - - - - - - - - - - - - - - - - - - - - stipule oblong - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex attenuate - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex sharpness - - - - - - - - - - - - - - - - - - - - - - - - leaf antrorse - - - - - - - - - - - - - - - - - - - - - - - - heartwood white - - - - - - - - - - - - - - - - - - - - - - - - locule angle - - - - - - - - - - - - - - - - - - - - - - - - fruit overlapping - - - - - - - - - - - - - - - - - - - - - - - - involucre cuspidate - - - - - - - - - - - - - - - - - - - - - - - - leaf base simple - - - - - - - - - - - - - - - - - - - - - - - - leaf base complexity - - - - - - - - - - - - - - - - - - - - - - - - sepal clavate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence maroon - - - - - - - - - - - - - - - - - - - - - - - - rhizome rhizoidal - - - - - - - - - - - - - - - - - - - - - - - - androecium basal to - - - - - - - - - - - - - - - - - - - - - - - - plant cell striated - - - - - - - - - - - - - - - - - - - - - - - - perianth wrinkled - - - - - - - - - - - - - - - - - - - - - - - - rhizome terminal - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system decreased amount - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system amount - - - - - - - - - - - - - - - - - - - - - - - - leaf base dense - - - - - - - - - - - - - - - - - - - - - - - - leaf base mass density - - - - - - - - - - - - - - - - - - - - - - - - tubercle auriculate - - - - - - - - - - - - - - - - - - - - - - - - tubercle distal to - - - - - - - - - - - - - - - - - - - - - - - - rhizome caudate - - - - - - - - - - - - - - - - - - - - - - - - nectary hairy - - - - - - - - - - - - - - - - - - - - - - - - nectary pilosity - - - - - - - - - - - - - - - - - - - - - - - - endosperm displaced - - - - - - - - - - - - - - - - - - - - - - - - stamen front - - - - - - - - - - - - - - - - - - - - - - - - bark T-shaped - - - - - - - - - - - - - - - - - - - - - - - - bark concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - papilla cell notched - - - - - - - - - - - - - - - - - - - - - - - - root tip tomentose - - - - - - - - - - - - - - - - - - - - - - - - filament trilobed - - - - - - - - - - - - - - - - - - - - - - - - involucre cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - involucre concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - keel exposed - - - - - - - - - - - - - - - - - - - - - - - - upper glume inserted into - - - - - - - - - - - - - - - - - - - - - - - - stalk lateral to - - - - - - - - - - - - - - - - - - - - - - - - heartwood lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tuber oblong - - - - - - - - - - - - - - - - - - - - - - - - tuber 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed distributed - - - - - - - - - - - - - - - - - - - - - - - - bark dispersed - - - - - - - - - - - - - - - - - - - - - - - - chalaza rectangular - - - - - - - - - - - - - - - - - - - - - - - - chalaza 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - peduncle articulated with - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf distichous - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein foveate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - aril acidic - - - - - - - - - - - - - - - - - - - - - - - - aril medium acidity - - - - - - - - - - - - - - - - - - - - - - - - septum lobed - - - - - - - - - - - - - - - - - - - - - - - - involucre orbicular - - - - - - - - - - - - - - - - - - - - - - - - involucre brown - - - - - - - - - - - - - - - - - - - - - - - - testa decreased amount - - - - - - - - - - - - - - - - - - - - - - - - pappus red brown - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf margin elongated - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal coating - - - - - - - - - - - - - - - - - - - - - - - - branch digitate - - - - - - - - - - - - - - - - - - - - - - - - axil abaxial to - - - - - - - - - - - - - - - - - - - - - - - - stalk pointed - - - - - - - - - - - - - - - - - - - - - - - - seed rugose - - - - - - - - - - - - - - - - - - - - - - - - leaflet rhomboid - - - - - - - - - - - - - - - - - - - - - - - - aril dark brown - - - - - - - - - - - - - - - - - - - - - - - - ligule glistening - - - - - - - - - - - - - - - - - - - - - - - - ligule reflectivity - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence tomentose - - - - - - - - - - - - - - - - - - - - - - - - filament blue - - - - - - - - - - - - - - - - - - - - - - - - petiolule inserted into - - - - - - - - - - - - - - - - - - - - - - - - stem proximal to - - - - - - - - - - - - - - - - - - - - - - - - stalk clavate - - - - - - - - - - - - - - - - - - - - - - - - chalaza oblong - - - - - - - - - - - - - - - - - - - - - - - - infructescence size - - - - - - - - - - - - - - - - - - - - - - - - keel differentiated - - - - - - - - - - - - - - - - - - - - - - - - keel cellular potency - - - - - - - - - - - - - - - - - - - - - - - - receptacle warty - - - - - - - - - - - - - - - - - - - - - - - - inflorescence concealed by - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein punctiform - - - - - - - - - - - - - - - - - - - - - - - - nectary curved - - - - - - - - - - - - - - - - - - - - - - - - epidermis ovate - - - - - - - - - - - - - - - - - - - - - - - - stalk multicellular - - - - - - - - - - - - - - - - - - - - - - - - stalk cellularity - - - - - - - - - - - - - - - - - - - - - - - - hilum front - - - - - - - - - - - - - - - - - - - - - - - - placenta parallel to - - - - - - - - - - - - - - - - - - - - - - - - pedicel right angle to - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore smooth - - - - - - - - - - - - - - - - - - - - - - - - septum ventral to - - - - - - - - - - - - - - - - - - - - - - - - lamina convex - - - - - - - - - - - - - - - - - - - - - - - - bracteole prominent - - - - - - - - - - - - - - - - - - - - - - - - lower glume raised - - - - - - - - - - - - - - - - - - - - - - - - inflorescence circinate - - - - - - - - - - - - - - - - - - - - - - - - rhizoid glandular - - - - - - - - - - - - - - - - - - - - - - - - rhizoid morphology - - - - - - - - sapwood up - true - - - - - - - - - - - - - - - - - - - - - - - - sapwood direction - - - - - - - - - - - - - - - - - - - - - - - - petiolule caudate - - - - - - - - - - - - - - - - - - - - - - - - keel pointed - - - - - - - - - - - - - - - - - - - - - - - - stele broken - - - - - - - - - - - - - - - - - - - - - - - - stele wholeness - - - - - - - - - - - - - - - - - - - - - - - - stipule divergent from - - - - - - - - - - - - - - - - - - - - - - - - palea size - - - - - - - - - - - - - - - - - - - - - - - - pericarp yellow orange - - - - - - - - - - - - - - - - - - - - - - - - spikelet spongy - - - - - - - - - - - - - - - - - - - - - - - - petal bent - - - - - - - - - - - - - - - - - - - - - - - - leaf base absent - - - - - - - - - - - - - - - - - - - - - - - - petal articulated with - - - - - - - - leaf base up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf base direction - - - - - - - - - - - - - - - - - - - - - - - - corm firm - - - - - - - - - - - - - - - - - - - - - - - - branch punctiform - - - - - - - - pollen male - true - - - - - - - - pollen phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - plumule glistening - - - - - - - - - - - - - - - - - - - - - - - - plumule reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis oblong - - - - - - - - - - - - - - - - - - - - - - - - flower elongated - - - - - - - - - - - - - - - - - - - - - - - - bracteole notched - - - - - - - - - - - - - - - - - - - - - - - - plant cell decurrent - - - - - - - - - - - - - - - - - - - - - - - - pith elliptic - - - - - - - - - - - - - - - - - - - - - - - - parenchyma kinked - - - - - - - - - - - - - - - - - - - - - - - - lamina unicellular - - - - - - - - - - - - - - - - - - - - - - - - sepal cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - receptacle slender - - - - - - - - - - - - - - - - - - - - - - - - peduncle undivided - - - - - - - - - - - - - - - - - - - - - - - - lenticel distributed - - - - - - - - - - - - - - - - - - - - - - - - pollen swollen - - - - - - - - - - - - - - - - - - - - - - - - pollen structure - - - - - - - - - - - - - - - - - - - - - - - - axil striated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence punctate - - - - - - - - - - - - - - - - - - - - - - - - hilum discoid - - - - - - - - - - - - - - - - - - - - - - - - bract scaly - - - - - - - - - - - - - - - - - - - - - - - - central zone oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - bulb decreased amount - - - - - - - - - - - - - - - - - - - - - - - - bulb amount - - - - - - - - - - - - - - - - - - - - - - - - axil wrinkled - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence concave - - - - - - - - - - - - - - - - - - - - - - - - tuberous root decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf deep pink - - - - - - - - - - - - - - - - - - - - - - - - petiole arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - funicle obovate - - - - - - - - - - - - - - - - - - - - - - - - funicle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - glume decurrent - - - - - - - - - - - - - - - - - - - - - - - - leaf axil hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf axil pilosity - - - - - - - - - - - - - - - - - - - - - - - - carpel pedicellate - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus sterile - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus fertility - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle axial to - - - - - - - - - - - - - - - - - - - - - - - - pseudostem red - - - - - - - - - - - - - - - - - - - - - - - - pseudostem color - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet bilobed - - - - - - - - - - - - - - - - - - - - - - - - leaflet trilobed - - - - - - - - - - - - - - - - - - - - - - - - peduncle translucent - - - - - - - - - - - - - - - - - - - - - - - - peduncle opacity - - - - - - - - - - - - - - - - - - - - - - - - bud leaf-like - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf orbicular - - - - - - - - - - - - - - - - - - - - - - - - sheath cell glistening - - - - - - - - - - - - - - - - - - - - - - - - sheath cell reflectivity - - - - - - - - - - - - - - - - - - - - - - - - pericarp furrowed - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - costa dense - - - - - - - - - - - - - - - - - - - - - - - - costa mass density - - - - - - - - - - - - - - - - - - - - - - - - columella inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - axil caudate - - - - - - - - - - - - - - - - - - - - - - - - tuber conspicuous - - - - - - - - - - - - - - - - - - - - - - - - perianth bifurcated - - - - - - - - - - - - - - - - - - - - - - - - perianth branchiness - - - - - - - - - - - - - - - - - - - - - - - - petiole rhomboid - - - - - - - - - - - - - - - - - - - - - - - - leaf concentrated - - - - - - - - - - - - - - - - - - - - - - - - leaf concentration of - - - - - - - - - - - - - - - - - - - - - - - - seed trichome basal to - - - - - - - - - - - - - - - - - - - - - - - - endocarp pedicellate - - - - - - - - - - - - - - - - - - - - - - - - pedicel concealed by - - - - - - - - - - - - - - - - - - - - - - - - pericarp exserted - - - - - - - - - - - - - - - - - - - - - - - - trichome auriculate - - - - - - - - - - - - - - - - - - - - - - - - connective simple - - - - - - - - - - - - - - - - - - - - - - - - connective complexity - - - - - - - - - - - - - - - - - - - - - - - - whole plant ridged - - - - - - - - - - - - - - - - - - - - - - - - leaflet viscid - - - - - - - - - - - - - - - - - - - - - - - - disk flower decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - disk flower water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf axil lobed - - - - - - - - - - - - - - - - - - - - - - - - bract angular - - - - - - - - - - - - - - - - - - - - - - - - axil elongated - - - - - - - - - - - - - - - - - - - - - - - - leaf ivory - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - parenchyma oblong - - - - - - - - - - - - - - - - - - - - - - - - exocarp linear - - - - - - - - - - - - - - - - - - - - - - - - crown root star shaped - - - - - - - - - - - - - - - - - - - - - - - - bud auriculate - - - - - - - - - - - - - - - - - - - - - - - - perianth V-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaflet evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - leaflet shedability - - - - - - - - - - - - - - - - - - - - - - - - petiole margin back - - - - - - - - - - - - - - - - - - - - - - - - petiole margin direction - - - - - - - - - - - - - - - - - - - - - - - - leaf base tomentose - - - - - - - - - - - - - - - - - - - - - - - - petiolule orange - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus smooth - - - - - - - - - - - - - - - - - - - - - - - - aril parallel to - - - - - - - - - - - - - - - - - - - - - - - - gynoecium flattened - - - - - - - - - - - - - - - - - - - - - - - - stigma conspicuous - - - - - - - - - - - - - - - - - - - - - - - - sepal margin overlapping - - - - - - - - - - - - - - - - - - - - - - - - sepal margin structure - - - - - - - - - - - - - - - - - - - - - - - - receptacle perforate - - - - - - - - - - - - - - - - - - - - - - - - receptacle structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - seed trichome sterile - - - - - - - - - - - - - - - - - - - - - - - - seed trichome fertility - - - - - - - - - - - - - - - - - - - - - - - - calyx concealed by - - - - - - - - - - - - - - - - - - - - - - - - canal terminal - - - - - - - - - - - - - - - - - - - - - - - - endotesta brown - - - - - - - - - - - - - - - - - - - - - - - - keel abaxial to - - - - - - - - - - - - - - - - - - - - - - - - lamina dead - - - - - - - - - - - - - - - - - - - - - - - - lamina viability - - - - - - - - - - - - - - - - - - - - - - - - branch brown - - - - - - - - - - - - - - - - - - - - - - - - petal blue - - - - - - - - - - - - - - - - - - - - - - - - oil gland swollen - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system cauline to - - - - - - - - - - - - - - - - - - - - - - - - pistillode orange - - - - - - - - - - - - - - - - - - - - - - - - gynophore fleshy - - - - - - - - - - - - - - - - - - - - - - - - gynophore composition - - - - - - - - - - - - - - - - - - - - - - - - petal foveate - - - - - - - - - - - - - - - - - - - - - - - - scutellar node spherical - - - - - - - - - - - - - - - - - - - - - - - - - - - - abscission zone phenotype - - - - - - - - - - - - - - - - - - - - - - - - abscission zone hairy - - - - - - - - - - - - - - - - - - - - - - - - abscission zone pilosity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle granular - - - - - - - - - - - - - - - - - - - - - - - - valve bilobed - - - - - - - - - - - - - - - - - - - - - - - - testa warty - - - - - - - - - - - - - - - - - - - - - - - - endocarp autogenous - - - - - - - - - - - - - - - - - - - - - - - - pedicel vertical to - - - - - - - - - - - - - - - - - - - - - - - - ovary wall ornamentation - - - - - - - - - - - - - - - - - - - - - - - - ovary wall surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - crown root convex - - - - - - - - - - - - - - - - - - - - - - - - flower waxy - - - - - - - - - - - - - - - - - - - - - - - - flower waxiness - - - - - - - - - - - - - - - - - - - - - - - - upper glume cartilaginous - - - - - - - - pericarp subacute - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome alternate placement - - - - - - - - - - - - - - - - - - - - - - - - resin canal transparent - - - - - - - - - - - - - - - - - - - - - - - - resin canal opacity - - - - - - - - - - - - - - - - - - - - - - - - valve involute - - - - - - - - - - - - - - - - - - - - - - - - central zone inflexible - - - - - - - - - - - - - - - - - - - - - - - - central zone flexibility - - - - - - - - - - - - - - - - - - - - - - - - axil zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - axil symmetry - - - - - - - - - - - - - - - - - - - - - - - - plumule coiled - - - - - - - - - - - - - - - - - - - - - - - - plumule coiling - - - - - - - - - - - - - - - - - - - - - - - - endosperm V-shaped - - - - - - - - - - - - - - - - - - - - - - - - carpel clavate - - - - - - - - - - - - - - - - - - - - - - - - awn prominent - - - - - - - - - - - - - - - - - - - - - - - - plant callus punctate - - - - - - - - - - - - - - - - - - - - - - - - petiole laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - corolla flush - - - - - - - - - - - - - - - - - - - - - - - - petiole margin tomentose - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf spherical - - - - - - - - - - - - - - - - - - - - - - - - testa mass - - - - - - - - - - - - - - - - - - - - - - - - ligule open - - - - - - - - - - - - - - - - - - - - - - - - ligule closure - - - - - - - - - - - - - - - - - - - - - - - - parenchyma hairy - - - - - - - - - - - - - - - - - - - - - - - - thorn subulate - - - - - - - - - - - - - - - - - - - - - - - - columella proximal to - - - - - - - - - - - - - - - - - - - - - - - - stigma unilateral - - - - - - - - - - - - - - - - - - - - - - - - root horizontal - - - - - - - - - - - - - - - - - - - - - - - - pith soft - - - - - - - - - - - - - - - - - - - - - - - - pith hardness - - - - - - - - - - - - - - - - - - - - - - - - perianth normal - - - - - - - - - - - - - - - - - - - - - - - - perianth deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - flower back - - - - - - - - - - - - - - - - - - - - - - - - whole plant multi-colored - - - - - - - - - - - - - - - - - - - - - - - - raphe white - - - - - - - - - - - - - - - - - - - - - - - - aril circular - - - - - - - - - - - - - - - - - - - - - - - - corolla hispidulous - - - - - - - - - - - - - - - - - - - - - - - - seed coat flattened - - - - - - - - - - - - - - - - - - - - - - - - seed coat curvature - - - - - - - - - - - - - - - - - - - - - - - - oil gland lanceolate - - - - - - - - - - - - - - - - - - - - - - - - oil gland sharpness - - - - - - - - - - - - - - - - - - - - - - - - stolon flattened - - - - - - - - - - - - - - - - - - - - - - - - stolon curvature - - - - - - - - - - - - - - - - - - - - - - - - lenticel swollen - - - - - - - - - - - - - - - - - - - - - - - - bark blunt - - - - - - - - - - - - - - - - - - - - - - - - ovary wall rough - - - - - - - - - - - - - - - - - - - - - - - - peristome flat - - - - - - - - - - - - - - - - - - - - - - - - perianth simple - - - - - - - - - - - - - - - - - - - - - - - - perianth complexity - - - - - - - - - - - - - - - - - - - - - - - - receptacle oblique to - - - - - - - - - - - - - - - - - - - - - - - - heartwood split - - - - - - - - - - - - - - - - - - - - - - - - keel overlapping - - - - - - - - - - - - - - - - - - - - - - - - mesocarp green - - - - - - - - - - - - - - - - - - - - - - - - petiole rugose - - - - - - - - - - - - - - - - - - - - - - - - calyx distal to - - - - - - - - - - - - - - - - - - - - - - - - bark right - true - - - - - - - - - - - - - - - - - - - - - - - - central zone furrowed - - - - - - - - - - - - - - - - - - - - - - - - banner petal flattened - - - - - - - - - - - - - - - - - - - - - - - - lemma black - - - - - - - - - - - - - - - - - - - - - - - - perianth orbicular - - - - - - - - - - - - - - - - - - - - - - - - bud strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - androecium lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf apex terminal - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus falciform - - - - - - - - - - - - - - - - - - - - - - - - lamina asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - lamina symmetry - - - - - - - - - - - - - - - - - - - - - - - - hilum broad - - - - - - - - - - - - - - - - - - - - - - - - ligule striated - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle cupulate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue retuse - - - - - - - - - - - - - - - - - - - - - - - - fruit multiple - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus basal to - - - - - - - - - - - - - - - - - - - - - - - - endocarp fertile - - - - - - - - whole plant arrested - true - - - - - - - - whole plant offset quality - true - - - - - - - - pulvinus up - true - - - - - - - - - - - - - - - - - - - - - - - - pulvinus direction - - - - - - - - - - - - - - - - - - - - - - - - stolon slender - - - - - - - - - - - - - - - - - - - - - - - - lower glume increased thickness - - - - - - - - - - - - - - - - - - - - - - - - lower glume thickness - - - - - - - - - - - - - - - - - - - - - - - - plant embryo decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus water composition - - - - - - - - - - - - - - - - - - - - - - - - staminode concave - - - - - - - - - - - - - - - - - - - - - - - - mesophyll slit-like - - - - - - - - - - - - - - - - - - - - - - - - mesophyll shape - - - - - - - - - - - - - - - - - - - - - - - - prophyll absent - - - - - - - - - - - - - - - - - - - - - - - - prophyll amount - - - - - - - - - - - - - - - - - - - - - - - - epidermis adhesive - - - - - - - - - - - - - - - - - - - - - - - - epidermis adhesivity - - - - - - - - - - - - - - - - - - - - - - - - cotyledon attenuate - - - - - - - - - - - - - - - - - - - - - - - - branch mixed - - - - - - - - - - - - - - - - - - - - - - - - disk flower sunken - - - - - - - - - - - - - - - - - - - - - - - - disk flower elevation - - - - - - - - - - - - - - - - - - - - - - - - corolla grooved - - - - - - - - - - - - - - - - - - - - - - - - ligule slit-like - - - - - - - - - - - - - - - - - - - - - - - - involucre dark green - - - - - - - - - - - - - - - - - - - - - - - - bracteole immature - - - - - - - - - - - - - - - - - - - - - - - - - - - - epiblast phenotype - - - - - - - - - - - - - - - - - - - - - - - - epiblast absent - - - - - - - - - - - - - - - - - - - - - - - - epiblast amount - - - - - - - - - - - - - - - - - - - - - - - - glume conspicuous - - - - - - - - - - - - - - - - - - - - - - - - fruit old - - - - - - - - - - - - - - - - - - - - - - - - bracteole cupulate - - - - - - - - - - - - - - - - - - - - - - - - banner petal erect - - - - - - - - - - - - - - - - - - - - - - - - anther recurved - - - - - - - - - - - - - - - - - - - - - - - - hydathode terminal - - - - - - - - - - - - - - - - - - - - - - - - hypanthium flat - - - - - - - - - - - - - - - - - - - - - - - - plant embryo glandular - - - - - - - - - - - - - - - - - - - - - - - - plant embryo morphology - - - - - - - - - - - - - - - - - - - - - - - - sepal decurrent - - - - - - - - - - - - - - - - - - - - - - - - style obconical - - - - - - - - - - - - - - - - - - - - - - - - palea protruding into - - - - - - - - - - - - - - - - - - - - - - - - fruit convolute - - - - - - - - - - - - - - - - - - - - - - - - oil gland distributed - - - - - - - - - - - - - - - - - - - - - - - - oil gland spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - branch scaly - - - - - - - - - - - - - - - - - - - - - - - - connective dark brown - - - - - - - - - - - - - - - - - - - - - - - - style trumpet-shaped - - - - - - - - - - - - - - - - - - - - - - - - lemma light green - - - - - - - - - - - - - - - - - - - - - - - - fruit osseous - - - - - - - - - - - - - - - - - - - - - - - - plant cell obtuse - - - - - - - - - - - - - - - - - - - - - - - - filament ventral to - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root cylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ovary wall striated - - - - - - - - - - - - - - - - - - - - - - - - androecium conical - - - - - - - - - - - - - - - - - - - - - - - - peduncle open - - - - - - - - - - - - - - - - - - - - - - - - stigma cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - corolla cleft - - - - - - - - - - - - - - - - - - - - - - - - thallus slender - - - - - - - - - - - - - - - - - - - - - - - - thallus shape - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system trilobed - - - - - - - - - - - - - - - - - - - - - - - - plumule glabrous - - - - - - - - - - - - - - - - - - - - - - - - aril flat - - - - - - - - - - - - - - - - - - - - - - - - palea basal to - - - - - - - - - - - - - - - - - - - - - - - - awn absent - - - - - - - - - - - - - - - - - - - - - - - - awn amount - - - - - - - - - - - - - - - - - - - - - - - - branch auriculate - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma separating - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma structure - - - - - - - - - - - - - - - - - - - - - - - - glume concealed - - - - - - - - - - - - - - - - - - - - - - - - locule terminal - - - - - - - - - - - - - - - - - - - - - - - - septum fleshy - - - - - - - - - - - - - - - - - - - - - - - - septum composition - - - - - - - - - - - - - - - - - - - - - - - - micropyle discoid - - - - - - - - - - - - - - - - - - - - - - - - micropyle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bulb old - - - - - - - - - - - - - - - - - - - - - - - - bulb age - - - - - - - - - - - - - - - - - - - - - - - - shoot internode oblong - - - - - - - - - - - - - - - - - - - - - - - - stigma sterile - - - - - - - - - - - - - - - - - - - - - - - - epidermis scaly - - - - - - - - - - - - - - - - - - - - - - - - upper glume multi-colored - - - - - - - - - - - - - - - - - - - - - - - - upper glume color pattern - - - - - - - - - - - - - - - - - - - - - - - - valve leaf-like - - - - - - - - - - - - - - - - - - - - - - - - papilla cell cuneate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - prophyll cylindrical - - - - - - - - - - - - - - - - - - - - - - - - seed peripheral - - - - - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell phenotype - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell glistening - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell reflectivity - - - - - - - - - - - - - - - - - - - - - - - - mesocarp hard - - - - - - - - - - - - - - - - - - - - - - - - stele distributed - - - - - - - - - - - - - - - - - - - - - - - - stele spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - endocarp closed - - - - - - - - - - - - - - - - - - - - - - - - endocarp closure - - - - - - - - - - - - - - - - - - - - - - - - stigma obconical - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal distichous - - - - - - - - - - - - - - - - - - - - - - - - cotyledon flat - - - - - - - - - - - - - - - - - - - - - - - - sepal whole - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus conical - - - - - - - - - - - - - - - - - - - - - - - - bark cut - - - - - - - - - - - - - - - - - - - - - - - - bud distichous - - - - - - - - - - - - - - - - - - - - - - - - peristome tapered - - - - - - - - - - - - - - - - - - - - - - - - root tip ventral to - - - - - - - - - - - - - - - - - - - - - - - - hypanthium posterior to - - - - - - - - - - - - - - - - - - - - - - - - gynophore surrounding - - - - - - - - - - - - - - - - - - - - - - - - petal sparse - - - - - - - - - - - - - - - - - - - - - - - - mesocarp diameter - - - - - - - - - - - - - - - - - - - - - - - - anther tight - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium arched - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium concavity - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud normal - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - branch yellow - - - - - - - - - - - - - - - - - - - - - - - - keel zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - keel symmetry - - - - - - - - - - - - - - - - - - - - - - - - axil heart shaped - - - - - - - - - - - - - - - - - - - - - - - - disk flower prominent - - - - - - - - - - - - - - - - - - - - - - - - growth ring smooth - - - - - - - - - - - - - - - - - - - - - - - - growth ring texture - - - - - - - - - - - - - - - - - - - - - - - - chalaza decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - chalaza thickness - - - - - - - - - - - - - - - - - - - - - - - - glume present - - - - - - - - - - - - - - - - - - - - - - - - strobilus cylindrical - - - - - - - - - - - - - - - - - - - - - - - - strobilus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipel decreased amount - - - - - - - - - - - - - - - - - - - - - - - - stipel amount - - - - - - - - - - - - - - - - - - - - - - - - anther grooved - - - - - - - - - - - - - - - - - - - - - - - - peduncle mixed - - - - - - - - - - - - - - - - - - - - - - - - calyx time - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus autogenous - - - - - - - - - - - - - - - - - - - - - - - - pappus conspicuous - - - - - - - - - - - - - - - - - - - - - - - - infructescence discoid - - - - - - - - - - - - - - - - - - - - - - - - shoot apex fused with - - - - - - - - - - - - - - - - - - - - - - - - bracteole aggregated - - - - - - - - - - - - - - - - - - - - - - - - pulvinus proximal to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system conspicuous - - - - - - - - sorus continuous - true - - - - - - - - sorus occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis prominent - - - - - - - - - - - - - - - - - - - - - - - - locule curved - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium fused with - - - - - - - - - - - - - - - - - - - - - - - - papilla cell ventral to - - - - - - - - - - - - - - - - - - - - - - - - heartwood orange - - - - - - - - - - - - - - - - - - - - - - - - scutellar node lanceolate - - - - - - - - - - - - - - - - - - - - - - - - receptacle asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - receptacle sunken - - - - - - - - - - - - - - - - - - - - - - - - receptacle elevation - - - - - - - - - - - - - - - - - - - - - - - - bract conical - - - - - - - - - - - - - - - - - - - - - - - - ovary wall retuse - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence decussate - - - - - - - - - - - - - - - - - - - - - - - - whole plant inflated - - - - - - - - - - - - - - - - - - - - - - - - whole plant structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - sporangium indurated - - - - - - - - - - - - - - - - - - - - - - - - sporangium structure - - - - - - - - - - - - - - - - - - - - - - - - anther posterior to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein scalloped - - - - - - - - - - - - - - - - - - - - - - - - prophyll striated - - - - - - - - - - - - - - - - - - - - - - - - lamina concealed by - - - - - - - - - - - - - - - - - - - - - - - - mesocarp dorsal to - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber glabrous - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber pilosity - - - - - - - - - - - - - - - - - - - - - - - - involucre decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - involucre thickness - - - - - - - - costa recurrent - true - - - - - - - - costa occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - spikelet adhesive - - - - - - - - - - - - - - - - - - - - - - - - spikelet adhesivity - - - - - - - - - - - - - - - - - - - - - - - - carpel immature - - - - - - - - - - - - - - - - - - - - - - - - seed trichome funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - filament white - - - - - - - - - - - - - - - - - - - - - - - - anther theca simple - - - - - - - - - - - - - - - - - - - - - - - - anther theca complexity - - - - - - - - - - - - - - - - - - - - - - - - root tip arched - - - - - - - - - - - - - - - - - - - - - - - - receptacle zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - root tip swollen - - - - - - - - - - - - - - - - - - - - - - - - branch pedunculate - - - - - - - - - - - - - - - - - - - - - - - - petiolule bifurcated - - - - - - - - - - - - - - - - - - - - - - - - petiolule branchiness - - - - - - - - - - - - - - - - - - - - - - - - petal asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - petal symmetry - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein alternate placement - - - - - - - - - - - - - - - - - - - - - - - - petiole magenta - - - - - - - - - - - - - - - - - - - - - - - - hilum pubescent - - - - - - - - - - - - - - - - - - - - - - - - hilum maturity - - - - - - - - tuberous root up - true - - - - - - - - - - - - - - - - - - - - - - - - tuberous root direction - - - - - - - - - - - - - - - - - - - - - - - - stalk scrobiculate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein triangular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence differentiated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence cellular potency - - - - - - - - - - - - - - - - - - - - - - - - microspore conical - - - - - - - - - - - - - - - - - - - - - - - - microspore convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pistillode increased thickness - - - - - - - - - - - - - - - - - - - - - - - - lemma protruding - - - - - - - - - - - - - - - - - - - - - - - - involucre yellow - - - - - - - - - - - - - - - - - - - - - - - - perianth mature - - - - - - - - - - - - - - - - - - - - - - - - hypanthium furrowed - - - - - - - - - - - - - - - - - - - - - - - - keel semicircular - - - - - - - - - - - - - - - - - - - - - - - - testa dry - - - - - - - - - - - - - - - - - - - - - - - - testa wetness - - - - - - - - - - - - - - - - - - - - - - - - branch folded - - - - - - - - - - - - - - - - - - - - - - - - branch surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle smooth - - - - - - - - - - - - - - - - - - - - - - - - pedicel abaxial to - - - - - - - - - - - - - - - - - - - - - - - - testa broad - - - - - - - - - - - - - - - - - - - - - - - - locule elliptic - - - - - - - - - - - - - - - - - - - - - - - - canal concave - - - - - - - - - - - - - - - - - - - - - - - - papilla cell pubescent - - - - - - - - - - - - - - - - - - - - - - - - papilla cell maturity - - - - - - - - - - - - - - - - - - - - - - - - pericarp pointed - - - - - - - - - - - - - - - - - - - - - - - - crown root triangular - - - - - - - - - - - - - - - - - - - - - - - - connective brown - - - - - - - - - - - - - - - - - - - - - - - - seed parallel to - - - - - - - - - - - - - - - - - - - - - - - - perianth erose - - - - - - - - - - - - - - - - - - - - - - - - radicle simple - - - - - - - - - - - - - - - - - - - - - - - - radicle complexity - - - - - - - - - - - - - - - - - - - - - - - - tepal cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - lamina oblate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem attenuate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell acuminate - - - - - - - - - - - - - - - - - - - - - - - - carpel arched - - - - - - - - - - - - - - - - - - - - - - - - stolon smooth - - - - - - - - - - - - - - - - - - - - - - - - stolon texture - - - - - - - - - - - - - - - - - - - - - - - - plant callus curved - - - - - - - - - - - - - - - - - - - - - - - - plant callus curvature - - - - - - - - - - - - - - - - - - - - - - - - bud scaly - - - - - - - - - - - - - - - - - - - - - - - - valve distributed - - - - - - - - - - - - - - - - - - - - - - - - valve spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal scalloped - - - - - - - - - - - - - - - - - - - - - - - - nectary brown - - - - - - - - - - - - - - - - - - - - - - - - lamina wrinkled - - - - - - - - - - - - - - - - - - - - - - - - spikelet dorsal to - - - - - - - - - - - - - - - - - - - - - - - - testa dark grey - - - - - - - - - - - - - - - - - - - - - - - - shoot internode raised - - - - - - - - - - - - - - - - - - - - - - - - bracteole circular - - - - - - - - - - - - - - - - - - - - - - - - corolla auriculate - - - - - - - - - - - - - - - - - - - - - - - - hilum angle - - - - - - - - - - - - - - - - - - - - - - - - caruncle ridged - - - - - - - - - - - - - - - - - - - - - - - - pappus inserted into - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member cut - - - - - - - - - - - - - - - - - - - - - - - - stipule translucent - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue foveate - - - - - - - - - - - - - - - - - - - - - - - - style viscous - - - - - - - - - - - - - - - - - - - - - - - - style viscosity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system sexually dimorphic - - - - - - - - leaflet variability - true - - - - - - - - - - - - - - - - - - - - - - - - corm elliptic - - - - - - - - - - - - - - - - - - - - - - - - corolla juvenile - - - - - - - - - - - - - - - - - - - - - - - - glume blunt - - - - - - - - - - - - - - - - - - - - - - - - petiole whole - - - - - - - - - - - - - - - - - - - - - - - - septum diameter - - - - - - - - - - - - - - - - - - - - - - - - pollen horizontal - - - - - - - - - - - - - - - - - - - - - - - - peduncle obovate - - - - - - - - - - - - - - - - - - - - - - - - pappus dark brown - - - - - - - - - - - - - - - - - - - - - - - - epidermis setose - - - - - - - - - - - - - - - - - - - - - - - - aril unilateral - - - - - - - - pappus female - true - - - - - - - - - - - - - - - - - - - - - - - - stereome flush - - - - - - - - - - - - - - - - - - - - - - - - stereome position - - - - - - - - - - - - - - - - - - - - - - - - calyx vertical to - - - - - - - - - - - - - - - - - - - - - - - - receptacle vertical to - - - - - - - - - - - - - - - - - - - - - - - - exocarp ligneous - - - - - - - - - - - - - - - - - - - - - - - - root young - - - - - - - - - - - - - - - - - - - - - - - - lamina dispersed - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus inflexible - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus flexibility - - - - - - - - - - - - - - - - - - - - - - - - involucre spatulate - - - - - - - - - - - - - - - - - - - - - - - - cortex dark purple - - - - - - - - - - - - - - - - - - - - - - - - testa pink - - - - - - - - - - - - - - - - - - - - - - - - gynophore simple - - - - - - - - - - - - - - - - - - - - - - - - gynophore complexity - - - - - - - - - - - - - - - - - - - - - - - - pedicel pointed - - - - - - - - - - - - - - - - - - - - - - - - corolla antrorse - - - - - - - - - - - - - - - - - - - - - - - - involucre recurved - - - - - - - - - - - - - - - - - - - - - - - - central zone brittle - - - - - - - - - - - - - - - - - - - - - - - - leaflet whole - - - - - - - - - - - - - - - - - - - - - - - - leaflet wholeness - - - - - - - - fruit continuous - true - - - - - - - - fruit occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - testa bilobed - - - - - - - - - - - - - - - - - - - - - - - - pith white - - - - - - - - - - - - - - - - - - - - - - - - pith color - - - - - - - - - - - - - - - - - - - - - - - - rhizome concealed - - - - - - - - - - - - - - - - - - - - - - - - epicalyx spatulate - - - - - - - - - - - - - - - - - - - - - - - - stem mineralized - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - filament inflexible - - - - - - - - - - - - - - - - - - - - - - - - filament flexibility - - - - - - - - - - - - - - - - - - - - - - - - ray system increased length - - - - - - - - - - - - - - - - - - - - - - - - ray system length - - - - - - - - - - - - - - - - - - - - - - - - plant callus purple - - - - - - - - - - - - - - - - - - - - - - - - plant callus color - - - - - - - - - - - - - - - - - - - - - - - - endocarp detached from - - - - - - - - - - - - - - - - - - - - - - - - - - - - free sepal phenotype - - - - - - - - - - - - - - - - - - - - - - - - free sepal obtuse - - - - - - - - - - - - - - - - - - - - - - - - free sepal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx revolute - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure grooved - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure texture - - - - - - - - - - - - - - - - - - - - - - - - corolla heart shaped - - - - - - - - - - - - - - - - - - - - - - - - perianth pointed - - - - - - - - - - - - - - - - - - - - - - - - valve simple - - - - - - - - - - - - - - - - - - - - - - - - valve complexity - - - - - - - - - - - - - - - - - - - - - - - - columella ridged - - - - - - - - - - - - - - - - - - - - - - - - pappus grey - - - - - - - - - - - - - - - - - - - - - - - - carpel broken - - - - - - - - - - - - - - - - - - - - - - - - carpel wholeness - - - - - - - - flower synchronous - true - - - - - - - - flower occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl hairy - - - - - - - - - - - - - - - - - - - - - - - - costa undulate - - - - - - - - - - - - - - - - - - - - - - - - stolon sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - hilum dilated - - - - - - - - - - - - - - - - - - - - - - - - hilum size - - - - - - - - - - - - - - - - - - - - - - - - peristome sinuous - - - - - - - - - - - - - - - - - - - - - - - - ligule lobed - - - - - - - - - - - - - - - - - - - - - - - - anther theca exserted - - - - - - - - - - - - - - - - - - - - - - - - fruit back - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina circular - - - - - - - - seta up - true - - - - - - - - - - - - - - - - - - - - - - - - seta direction - - - - - - - - - - - - - - - - - - - - - - - - valve heart shaped - - - - - - - - - - - - - - - - - - - - - - - - valve concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - cotyledon hispid - - - - - - - - - - - - - - - - - - - - - - - - bud spotted - - - - - - - - - - - - - - - - - - - - - - - - flower evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - flower shedability - - - - - - - - - - - - - - - - - - - - - - - - peduncle slit-like - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system fused with - - - - - - - - - - - - - - - - - - - - - - - - nectary dentated - - - - - - - - - - - - - - - - - - - - - - - - resin canal rough - - - - - - - - - - - - - - - - - - - - - - - - resin canal texture - - - - - - - - - - - - - - - - - - - - - - - - receptacle bulbous - - - - - - - - - - - - - - - - - - - - - - - - stipule sterile - - - - - - - - - - - - - - - - - - - - - - - - stipule fertility - - - - - - - - - - - - - - - - - - - - - - - - pistillode rugose - - - - - - - - - - - - - - - - - - - - - - - - pistillode surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - petiole vestigial - - - - - - - - - - - - - - - - - - - - - - - - plant spore reniform - - - - - - - - - - - - - - - - - - - - - - - - plant spore concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - costa broad - - - - - - - - - - - - - - - - - - - - - - - - ligule spatulate - - - - - - - - - - - - - - - - - - - - - - - - bract exserted - - - - - - - - - - - - - - - - - - - - - - - - rhizome hispid - - - - - - - - - - - - - - - - - - - - - - - - lodicule truncated - - - - - - - - - - - - - - - - - - - - - - - - lodicule shape - - - - - - - - - - - - - - - - - - - - - - - - seed multicellular - - - - - - - - - - - - - - - - - - - - - - - - seed cellularity - - - - - - - - - - - - - - - - - - - - - - - - awn inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - hilum truncated - - - - - - - - - - - - - - - - - - - - - - - - endocarp glandular - - - - - - - - - - - - - - - - - - - - - - - - endocarp morphology - - - - - - - - - - - - - - - - - - - - - - - - scutellar node oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - bract inflexible - - - - - - - - - - - - - - - - - - - - - - - - bract flexibility - - - - - - - - - - - - - - - - - - - - - - - - aril area - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure spatulate - - - - - - - - - - - - - - - - - - - - - - - - prophyll elongated - - - - - - - - - - - - - - - - - - - - - - - - petiole falciform - - - - - - - - - - - - - - - - - - - - - - - - branch adaxial to - - - - - - - - - - - - - - - - - - - - - - - - sepal dry - - - - - - - - - - - - - - - - - - - - - - - - sepal wetness - - - - - - - - - - - - - - - - - - - - - - - - exocarp transparent - - - - - - - - - - - - - - - - - - - - - - - - leaf constricted - - - - - - - - - - - - - - - - - - - - - - - - stigma scalloped - - - - - - - - costa continuous - true - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein attenuate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member arched - - - - - - - - - - - - - - - - - - - - - - - - trichome condensed - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma abaxial to - - - - - - - - - - - - - - - - - - - - - - - - calyx back - - - - - - - - - - - - - - - - - - - - - - - - axil decurrent - - - - - - - - - - - - - - - - - - - - - - - - spikelet dark green - - - - - - - - - - - - - - - - - - - - - - - - stipule condensed - - - - - - - - - - - - - - - - - - - - - - - - plant callus linear - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus furrowed - - - - - - - - - - - - - - - - - - - - - - - - leaflet mature - - - - - - - - - - - - - - - - - - - - - - - - leaflet cuspidate - - - - - - - - - - - - - - - - - - - - - - - - leaf apex straight - - - - - - - - - - - - - - - - - - - - - - - - leaf apex shape - - - - - - - - - - - - - - - - - - - - - - - - parenchyma lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet notched - - - - - - - - - - - - - - - - - - - - - - - - calyx granular - - - - - - - - - - - - - - - - - - - - - - - - flower curled - - - - - - - - - - - - - - - - - - - - - - - - connective opposite - - - - - - - - - - - - - - - - - - - - - - - - lamina posterior to - - - - - - - - - - - - - - - - - - - - - - - - spikelet coiled - - - - - - - - - - - - - - - - - - - - - - - - spikelet coiling - - - - - - - - - - - - - - - - - - - - - - - - awn violet - - - - - - - - - - - - - - - - - - - - - - - - lemma hispidulous - - - - - - - - - - - - - - - - - - - - - - - - hilum violet - - - - - - - - placenta down - true - - - - - - - - - - - - - - - - - - - - - - - - placenta direction - - - - - - - - - - - - - - - - - - - - - - - - branch horizontal - - - - - - - - - - - - - - - - - - - - - - - - bracteole rugose - - - - - - - - - - - - - - - - - - - - - - - - bracteole surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - palea rugose - - - - - - - - - - - - - - - - - - - - - - - - palea surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - petal convex - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member spherical - - - - - - - - root tip premature - true - - - - - - - - root tip onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence T-shaped - - - - - - - - - - - - - - - - - - - - - - - - disk flower granular - - - - - - - - - - - - - - - - - - - - - - - - peduncle cuneate - - - - - - - - - - - - - - - - - - - - - - - - arilloid spongy - - - - - - - - - - - - - - - - - - - - - - - - arilloid structure - - - - - - - - - - - - - - - - - - - - - - - - staminode multifid - - - - - - - - - - - - - - - - - - - - - - - - stalk indurated - - - - - - - - - - - - - - - - - - - - - - - - pappus cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - pappus concave 3-D shape - - - - - - - - caruncle acute - true - - - - - - - - caruncle duration - true - - - - - - - - - - - - - - - - - - - - - - - - endocarp simple - - - - - - - - - - - - - - - - - - - - - - - - endocarp complexity - - - - - - - - - - - - - - - - - - - - - - - - tepal abaxial to - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell glabrous - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell pilosity - - - - - - - - - - - - - - - - - - - - - - - - flower wrinkled - - - - - - - - - - - - - - - - - - - - - - - - pistillode domed - - - - - - - - - - - - - - - - - - - - - - - - stele dorsal to - - - - - - - - - - - - - - - - - - - - - - - - lamina cauline to - - - - - - - - - - - - - - - - - - - - - - - - placenta simple - - - - - - - - - - - - - - - - - - - - - - - - placenta complexity - - - - - - - - - - - - - - - - - - - - - - - - axil orbicular - - - - - - - - - - - - - - - - - - - - - - - - calyx viscous - - - - - - - - - - - - - - - - - - - - - - - - calyx viscosity - - - - - - - - - - - - - - - - - - - - - - - - fruit ligneous - - - - - - - - - - - - - - - - - - - - - - - - petiole margin retuse - - - - - - - - - - - - - - - - - - - - - - - - endocarp angular - - - - - - - - - - - - - - - - - - - - - - - - root yellow - - - - - - - - - - - - - - - - - - - - - - - - axillary bud terminal - - - - - - - - - - - - - - - - - - - - - - - - pollen ornamented - - - - - - - - - - - - - - - - - - - - - - - - stigma violet - - - - - - - - - - - - - - - - - - - - - - - - leaf axil absent - - - - - - - - - - - - - - - - - - - - - - - - leaf axil amount - - - - - - - - - - - - - - - - - - - - - - - - stigma areolate - - - - - - - - - - - - - - - - - - - - - - - - seed operculum basal to - - - - - - - - - - - - - - - - - - - - - - - - seed operculum position - - - - - - - - - - - - - - - - - - - - - - - - keel ridged - - - - - - - - - - - - - - - - - - - - - - - - axil straight - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus star shaped - - - - - - - - - - - - - - - - - - - - - - - - bracteole green - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member inflexible - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member flexibility - - - - - - - - - - - - - - - - - - - - - - - - stalk tubular - - - - - - - - - - - - - - - - - - - - - - - - root tip cut - - - - - - - - - - - - - - - - - - - - - - - - plant callus cupulate - - - - - - - - - - - - - - - - - - - - - - - - plant callus concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower spongy - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle wrinkled - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle texture - - - - - - - - - - - - - - - - - - - - - - - - lenticel conspicuous - - - - - - - - lamina hermaphrodite - true - - - - - - - - lamina phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - peduncle convex - - - - - - - - - - - - - - - - - - - - - - - - spikelet ventral to - - - - - - - - - - - - - - - - - - - - - - - - bud lobate - - - - - - - - - - - - - - - - - - - - - - - - disk flower attenuate - - - - - - - - - - - - - - - - - - - - - - - - connective adjacent to - - - - - - - - - - - - - - - - - - - - - - - - plant spore striated - - - - - - - - - - - - - - - - - - - - - - - - staminode broken - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure bilobed - - - - - - - - - - - - - - - - - - - - - - - - valve adjacent to - - - - - - - - - - - - - - - - - - - - - - - - leaf base brown - - - - - - - - - - - - - - - - - - - - - - - - valve green - - - - - - - - - - - - - - - - - - - - - - - - root tip spherical - - - - - - - - - - - - - - - - - - - - - - - - petiole aromatic - - - - - - - - - - - - - - - - - - - - - - - - petiole aromaticity - - - - - - - - - - - - - - - - - - - - - - - - leaf base attenuate - - - - - - - - - - - - - - - - - - - - - - - - tubercle branched - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue cauline to - - - - - - - - - - - - - - - - - - - - - - - - leaf apex basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system spotted - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system color pattern - - - - - - - - - - - - - - - - - - - - - - - - stem concealed - - - - - - - - - - - - - - - - - - - - - - - - endocarp surrounding - - - - - - - - - - - - - - - - - - - - - - - - plant callus emarginate - - - - - - - - - - - - - - - - - - - - - - - - plant callus concavity - - - - - - - - - - - - - - - - - - - - - - - - pedicel back - - - - - - - - - - - - - - - - - - - - - - - - axillary bud structure - - - - - - - - - - - - - - - - - - - - - - - - bark flush - - - - - - - - - - - - - - - - - - - - - - - - sorus surrounding - - - - - - - - inflorescence axis hermaphrodite - true - - - - - - - - inflorescence axis phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - funicle curved - - - - - - - - - - - - - - - - - - - - - - - - pollen conspicuous - - - - - - - - - - - - - - - - - - - - - - - - endocarp star shaped - - - - - - - - - - - - - - - - - - - - - - - - central zone spotted - - - - - - - - - - - - - - - - - - - - - - - - central zone color pattern - - - - - - - - - - - - - - - - - - - - - - - - plant callus condensed - - - - - - - - - - - - - - - - - - - - - - - - plant callus structure - - - - - - - - - - - - - - - - - - - - - - - - pappus curved - - - - - - - - - - - - - - - - - - - - - - - - lamina notched - - - - - - - - - - - - - - - - - - - - - - - - exocarp protruding - - - - - - - - - - - - - - - - - - - - - - - - stamen adhesive - - - - - - - - - - - - - - - - - - - - - - - - stamen adhesivity - - - - - - - - - - - - - - - - - - - - - - - - costa caudate - - - - - - - - - - - - - - - - - - - - - - - - septum black - - - - - - - - - - - - - - - - - - - - - - - - septum color - - - - - - - - - - - - - - - - - - - - - - - - petiole margin yellow - - - - - - - - - - - - - - - - - - - - - - - - pollen filamentous - - - - - - - - - - - - - - - - - - - - - - - - petiole margin subcircular - - - - - - - - - - - - - - - - - - - - - - - - pedicel dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina curved - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina curvature - - - - - - - - - - - - - - - - - - - - - - - - disk flower folded - - - - - - - - - - - - - - - - - - - - - - - - disk flower surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - stigma height - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue abaxial to - - - - - - - - - - - - - - - - - - - - - - - - tubercle decumbent - - - - - - - - - - - - - - - - - - - - - - - - petiole margin broad - - - - - - - - - - - - - - - - - - - - - - - - lemma dark green - - - - - - - - - - - - - - - - - - - - - - - - pulvinus swollen - - - - - - - - - - - - - - - - - - - - - - - - petiole decumbent - - - - - - - - - - - - - - - - - - - - - - - - thallus asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - thallus symmetry - - - - - - - - - - - - - - - - - - - - - - - - glume cuspidate - - - - - - - - - - - - - - - - - - - - - - - - spikelet green - - - - - - - - - - - - - - - - - - - - - - - - rhizome emarginate - - - - - - - - - - - - - - - - - - - - - - - - gynophore foveate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome bilobed - - - - - - - - - - - - - - - - - - - - - - - - shoot system glandular - - - - - - - - - - - - - - - - - - - - - - - - shoot system morphology - - - - - - - - - - - - - - - - - - - - - - - - pollen broad - - - - - - - - - - - - - - - - - - - - - - - - plant callus hispid - - - - - - - - - - - - - - - - - - - - - - - - glume hollow - - - - - - - - - - - - - - - - - - - - - - - - glume structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem circinate - - - - - - - - - - - - - - - - - - - - - - - - peristome ventral to - - - - - - - - - - - - - - - - - - - - - - - - glume adaxial to - - - - - - - - - - - - - - - - - - - - - - - - nectary glabrous - - - - - - - - - - - - - - - - - - - - - - - - receptacle orbicular - - - - - - - - - - - - - - - - - - - - - - - - costa pinnate - - - - - - - - - - - - - - - - - - - - - - - - perianth grey - - - - - - - - - - - - - - - - - - - - - - - - thorn emarginate - - - - - - - - - - - - - - - - - - - - - - - - thorn concavity - - - - - - - - - - - - - - - - - - - - - - - - parenchyma punctate - - - - - - - - - - - - - - - - - - - - - - - - parenchyma spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet clavate - - - - - - - - - - - - - - - - - - - - - - - - prickle curved - - - - - - - - - - - - - - - - - - - - - - - - shoot internode increased size - - - - - - - - - - - - - - - - - - - - - - - - shoot internode size - - - - - - - - - - - - - - - - - - - - - - - - rhizome erose - - - - - - - - - - - - - - - - - - - - - - - - pollen smooth - - - - - - - - - - - - - - - - - - - - - - - - pollen texture - - - - - - - - - - - - - - - - - - - - - - - - androecium decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - androecium water composition - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle decumbent - - - - - - - - - - - - - - - - - - - - - - - - perianth tomentose - - - - - - - - - - - - - - - - - - - - - - - - involucre decreased amount - - - - - - - - - - - - - - - - - - - - - - - - bark odorous - - - - - - - - - - - - - - - - - - - - - - - - bark odor - - - - - - - - - - - - - - - - - - - - - - - - perianth violet - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell furrowed - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell texture - - - - - - - - - - - - - - - - - - - - - - - - flower light green - - - - - - - - - - - - - - - - - - - - - - - - upper glume cylindrical - - - - - - - - - - - - - - - - - - - - - - - - free sepal black - - - - - - - - - - - - - - - - - - - - - - - - free sepal color - - - - - - - - - - - - - - - - - - - - - - - - bud transparent - - - - - - - - - - - - - - - - - - - - - - - - bud opacity - - - - - - - - - - - - - - - - - - - - - - - - funicle firm - - - - - - - - - - - - - - - - - - - - - - - - funicle hardness - - - - - - - - - - - - - - - - - - - - - - - - aril purple - - - - - - - - - - - - - - - - - - - - - - - - cortex differentiated - - - - - - - - - - - - - - - - - - - - - - - - cortex cellular potency - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root opposite - - - - - - - - - - - - - - - - - - - - - - - - locule surrounding - - - - - - - - - - - - - - - - - - - - - - - - petiolule blunt - - - - - - - - - - - - - - - - - - - - - - - - staminode spherical - - - - - - - - - - - - - - - - - - - - - - - - petiole mature - - - - - - - - - - - - - - - - - - - - - - - - shoot system striated - - - - - - - - - - - - - - - - - - - - - - - - thallus attached to - - - - - - - - - - - - - - - - - - - - - - - - thallus attachment quality - - - - - - - - - - - - - - - - - - - - - - - - receptacle fertile - - - - - - - - - - - - - - - - - - - - - - - - receptacle fertility - - - - - - - - stigma subacute - true - - - - - - - - - - - - - - - - - - - - - - - - perianth inflexible - - - - - - - - - - - - - - - - - - - - - - - - perianth flexibility - - - - - - - - - - - - - - - - - - - - - - - - perianth prominent - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex erect - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex position - - - - - - - - - - - - - - - - - - - - - - - - bulb elongated - - - - - - - - - - - - - - - - - - - - - - - - bulb shape - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus trilobed - - - - - - - - - - - - - - - - - - - - - - - - corolla oblique to - - - - - - - - - - - - - - - - - - - - - - - - keel ventral to - - - - - - - - - - - - - - - - - - - - - - - - thorn foveate - - - - - - - - - - - - - - - - - - - - - - - - columella distal to - - - - - - - - - - - - - - - - - - - - - - - - root purple - - - - - - - - - - - - - - - - - - - - - - - - shoot internode elliptic - - - - - - - - - - - - - - - - - - - - - - - - valve yellow - - - - - - - - - - - - - - - - - - - - - - - - anther caudate - - - - - - - - - - - - - - - - - - - - - - - - stem subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member folded - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - heartwood dark red - - - - - - - - - - - - - - - - - - - - - - - - carpel involute - - - - - - - - - - - - - - - - - - - - - - - - rhizome lobed - - - - - - - - - - - - - - - - - - - - - - - - receptacle confluent with - - - - - - - - - - - - - - - - - - - - - - - - columella convex - - - - - - - - - - - - - - - - - - - - - - - - tuber brown - - - - - - - - - - - - - - - - - - - - - - - - crown root warty - - - - - - - - - - - - - - - - - - - - - - - - bracteole flattened - - - - - - - - - - - - - - - - - - - - - - - - infructescence vestigial - - - - - - - - - - - - - - - - - - - - - - - - infructescence structure - - - - - - - - - - - - - - - - - - - - - - - - carpel glandular - - - - - - - - - - - - - - - - - - - - - - - - carpel morphology - - - - - - - - - - - - - - - - - - - - - - - - parenchyma transparent - - - - - - - - - - - - - - - - - - - - - - - - parenchyma opacity - - - - - - - - palea subacute - true - - - - - - - - - - - - - - - - - - - - - - - - cotyledon foveate - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus open - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus closure - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence adaxial to - - - - - - - - - - - - - - - - - - - - - - - - upper glume hispid - - - - - - - - - - - - - - - - - - - - - - - - growth ring lanceolate - - - - - - - - - - - - - - - - - - - - - - - - growth ring sharpness - - - - - - - - - - - - - - - - - - - - - - - - exocarp glistening - - - - - - - - - - - - - - - - - - - - - - - - exocarp reflectivity - - - - - - - - - - - - - - - - - - - - - - - - anther dense - - - - - - - - - - - - - - - - - - - - - - - - anther mass density - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal inflexible - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal flexibility - - - - - - - - - - - - - - - - - - - - - - - - papilla cell kinked - - - - - - - - - - - - - - - - - - - - - - - - endosperm displaced to - - - - - - - - - - - - - - - - - - - - - - - - endosperm orientation - - - - - - - - - - - - - - - - - - - - - - - - petal cut - - - - - - - - - - - - - - - - - - - - - - - - lemma separated from - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system hairy - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member furrowed - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member texture - - - - - - - - - - - - - - - - - - - - - - - - pericarp grooved - - - - - - - - - - - - - - - - - - - - - - - - valve punctate - - - - - - - - - - - - - - - - - - - - - - - - petiolule young - - - - - - - - - - - - - - - - - - - - - - - - petiolule age - - - - - - - - - - - - - - - - - - - - - - - - spikelet size - - - - - - - - - - - - - - - - - - - - - - - - epidermis raised - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore obtuse - - - - - - - - - - - - - - - - - - - - - - - - parenchyma decreased amount - - - - - - - - - - - - - - - - - - - - - - - - parenchyma amount - - - - - - - - - - - - - - - - - - - - - - - - coma red - - - - - - - - - - - - - - - - - - - - - - - - coma color - - - - - - - - - - - - - - - - - - - - - - - - crown root involute - - - - - - - - - - - - - - - - - - - - - - - - seed recurved - - - - - - - - - - - - - - - - - - - - - - - - bark orbicular - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl coiled - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl coiling - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge conical - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - valve emarginate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell spongy - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf cylindrical - - - - - - - - - - - - - - - - - - - - - - - - spikelet alternate placement - - - - - - - - - - - - - - - - - - - - - - - - rhizome decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - rhizome water composition - - - - - - - - - - - - - - - - - - - - - - - - canal arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - infructescence dry - - - - - - - - - - - - - - - - - - - - - - - - infructescence wetness - - - - - - - - - - - - - - - - - - - - - - - - hilum spherical - - - - - - - - - - - - - - - - - - - - - - - - peduncle prostrate - - - - - - - - - - - - - - - - - - - - - - - - hilum straight - - - - - - - - - - - - - - - - - - - - - - - - upper glume split - - - - - - - - - - - - - - - - - - - - - - - - banner petal folded - - - - - - - - - - - - - - - - - - - - - - - - banner petal surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - glume confluent with - - - - - - - - - - - - - - - - - - - - - - - - endosperm reniform - - - - - - - - - - - - - - - - - - - - - - - - endosperm concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - root vertical to - - - - - - - - - - - - - - - - - - - - - - - - leaf margin attached to - - - - - - - - - - - - - - - - - - - - - - - - leaf margin attachment quality - - - - - - - - - - - - - - - - - - - - - - - - style crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - pistillode increased length - - - - - - - - - - - - - - - - - - - - - - - - pistillode length - - - - - - - - - - - - - - - - - - - - - - - - tubercle convex - - - - - - - - - - - - - - - - - - - - - - - - epicalyx actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - epicalyx radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - flower bud oblong - - - - - - - - - - - - - - - - - - - - - - - - flower bud 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - tubercle flattened - - - - - - - - - - - - - - - - - - - - - - - - mesophyll opposite - - - - - - - - - - - - - - - - - - - - - - - - mesophyll position - - - - - - - - - - - - - - - - - - - - - - - - stigma elongated - - - - - - - - - - - - - - - - - - - - - - - - central zone dorsal to - - - - - - - - - - - - - - - - - - - - - - - - ligule orbicular - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell smooth - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell texture - - - - - - - - - - - - - - - - - - - - - - - - stolon elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - caruncle perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - petiole convolute - - - - - - - - - - - - - - - - - - - - - - - - aril undulate - - - - - - - - - - - - - - - - - - - - - - - - petiole area - - - - - - - - - - - - - - - - - - - - - - - - involucre leaf-like - - - - - - - - - - - - - - - - - - - - - - - - cambium smooth - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal retuse - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf basal to - - - - - - - - - - - - - - - - - - - - - - - - connective auriculate - - - - - - - - - - - - - - - - - - - - - - - - androecium fleshy - - - - - - - - - - - - - - - - - - - - - - - - androecium composition - - - - - - - - - - - - - - - - - - - - - - - - upper glume flat - - - - - - - - - - - - - - - - - - - - - - - - seed vertical - - - - - - - - - - - - - - - - - - - - - - - - connective closed - - - - - - - - - - - - - - - - - - - - - - - - connective closure - - - - - - - - - - - - - - - - - - - - - - - - hypanthium conical - - - - - - - - - - - - - - - - - - - - - - - - crown root exserted - - - - - - - - - - - - - - - - - - - - - - - - leaf segmented - - - - - - - - - - - - - - - - - - - - - - - - involucre bilobed - - - - - - - - - - - - - - - - - - - - - - - - stele warty - - - - - - - - - - - - - - - - - - - - - - - - stele texture - - - - - - - - - - - - - - - - - - - - - - - - stigma ligneous - - - - - - - - - - - - - - - - - - - - - - - - sepal brown - - - - - - - - - - - - - - - - - - - - - - - - scutellar node basal to - - - - - - - - - - - - - - - - - - - - - - - - fruit light red brown - - - - - - - - - - - - - - - - - - - - - - - - testa ridged - - - - - - - - - - - - - - - - - - - - - - - - leaf base procumbent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle constricted - - - - - - - - - - - - - - - - - - - - - - - - tepal diameter - - - - - - - - - - - - - - - - - - - - - - - - placenta whole - - - - - - - - - - - - - - - - - - - - - - - - placenta wholeness - - - - - - - - - - - - - - - - - - - - - - - - leaf apex area - - - - - - - - - - - - - - - - - - - - - - - - central zone dispersed - - - - - - - - - - - - - - - - - - - - - - - - pollen hairy - - - - - - - - - - - - - - - - - - - - - - - - sheath cell dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - stamen brown - - - - - - - - - - - - - - - - - - - - - - - - leaf adhesive - - - - - - - - - - - - - - - - - - - - - - - - leaf adhesivity - - - - - - - - - - - - - - - - - - - - - - - - involucre dorsal to - - - - - - - - - - - - - - - - - - - - - - - - megaspore fused with - - - - - - - - - - - - - - - - - - - - - - - - megaspore structure - - - - - - - - - - - - - - - - - - - - - - - - testa lanceolate - - - - - - - - - - - - - - - - - - - - - - - - branch matted - - - - - - - - - - - - - - - - - - - - - - - - petiole matted - - - - - - - - - - - - - - - - - - - - - - - - locule crowded - - - - - - - - - - - - - - - - - - - - - - - - stigma orange - - - - - - - - - - - - - - - - - - - - - - - - papilla cell symmetrical - - - - - - - - - - - - - - - - - - - - - - - - papilla cell symmetry - - - - - - - - - - - - - - - - - - - - - - - - endocarp mature - - - - - - - - - - - - - - - - - - - - - - - - connective oblique to - - - - - - - - - - - - - - - - - - - - - - - - infructescence bifurcated - - - - - - - - - - - - - - - - - - - - - - - - infructescence branchiness - - - - - - - - - - - - - - - - - - - - - - - - lenticel undulate - - - - - - - - - - - - - - - - - - - - - - - - ligule closed - - - - - - - - - - - - - - - - - - - - - - - - aril overlap with - - - - - - - - - - - - - - - - - - - - - - - - staminode recurved - - - - - - - - - - - - - - - - - - - - - - - - perianth peripheral - - - - - - - - - - - - - - - - - - - - - - - - exocarp crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - root smooth - - - - - - - - - - - - - - - - - - - - - - - - peristome simple - - - - - - - - - - - - - - - - - - - - - - - - peristome complexity - - - - - - - - - - - - - - - - - - - - - - - - shoot internode wrinkled - - - - - - - - - - - - - - - - - - - - - - - - pith brown - - - - - - - - - - - - - - - - - - - - - - - - stalk crowded - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex slit-like - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex shape - - - - - - - - - - - - - - - - - - - - - - - - epidermis warty - - - - - - - - - - - - - - - - - - - - - - - - funicle terminal - - - - - - - - - - - - - - - - - - - - - - - - stem adhesive - - - - - - - - - - - - - - - - - - - - - - - - stem adhesivity - - - - - - - - - - - - - - - - - - - - - - - - fruit contractile - - - - - - - - - - - - - - - - - - - - - - - - fruit contractility - - - - - - - - - - - - - - - - - - - - - - - - spikelet dense - - - - - - - - - - - - - - - - - - - - - - - - spikelet mass density - - - - - - - - - - - - - - - - - - - - - - - - stem brown green - - - - - - - - - - - - - - - - - - - - - - - - thorn dispersed - - - - - - - - - - - - - - - - - - - - - - - - bark height - true - - - - - - - - - - - - - - - - - - - - - - - - testa viscid - - - - - - - - - - - - - - - - - - - - - - - - aril punctiform - - - - - - - - - - - - - - - - - - - - - - - - nucellus decreased amount - - - - - - - - - - - - - - - - - - - - - - - - nucellus amount - - - - - - - - - - - - - - - - - - - - - - - - septum convex - - - - - - - - - - - - - - - - - - - - - - - - pistillode open - - - - - - - - - - - - - - - - - - - - - - - - pistillode closure - - - - - - - - central zone arrested - true - - - - - - - - central zone offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - plant cell slit-like - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell cylindrical - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - juice sac purple - - - - - - - - - - - - - - - - - - - - - - - - juice sac color - - - - - - - - - - - - - - - - - - - - - - - - plant embryo cylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot internode opposite - - - - - - - - - - - - - - - - - - - - - - - - petiole margin brown - - - - - - - - - - - - - - - - - - - - - - - - root tip drooping - - - - - - - - - - - - - - - - - - - - - - - - phloem cylindrical - - - - - - - - - - - - - - - - - - - - - - - - phloem convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - hilum strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - corolla abaxial to - - - - - - - - - - - - - - - - - - - - - - - - pericarp obovate - - - - - - - - - - - - - - - - - - - - - - - - bud abaxial to - - - - - - - - - - - - - - - - - - - - - - - - spikelet overlapping - - - - - - - - - - - - - - - - - - - - - - - - style orientation - - - - - - - - - - - - - - - - - - - - - - - - gynophore dry - - - - - - - - - - - - - - - - - - - - - - - - gynophore wetness - - - - - - - - - - - - - - - - - - - - - - - - pedicel viscous - - - - - - - - - - - - - - - - - - - - - - - - pedicel viscosity - - - - - - - - - - - - - - - - - - - - - - - - calyx confluent with - - - - - - - - - - - - - - - - - - - - - - - - stipule opaque - - - - - - - - - - - - - - - - - - - - - - - - root fusiform - - - - - - - - - - - - - - - - - - - - - - - - tepal oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf inserted into - - - - - - - - - - - - - - - - - - - - - - - - fruit granular - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - hypanthium white - - - - - - - - - - - - - - - - - - - - - - - - leaf pulvinate - - - - - - - - - - - - - - - - - - - - - - - - stolon glabrous - - - - - - - - - - - - - - - - - - - - - - - - stolon pilosity - - - - - - - - - - - - - - - - - - - - - - - - style subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal granular - - - - - - - - - - - - - - - - - - - - - - - - fruit external to - - - - - - - - - - - - - - - - - - - - - - - - exocarp oblong - - - - - - - - - - - - - - - - - - - - - - - - sporangium vertical - - - - - - - - - - - - - - - - - - - - - - - - sporangium spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - shoot apex viscous - - - - - - - - - - - - - - - - - - - - - - - - shoot apex viscosity - - - - - - - - - - - - - - - - - - - - - - - - epicalyx star shaped - - - - - - - - - - - - - - - - - - - - - - - - stem actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - stem radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - stamen spheroid - - - - - - - - - - - - - - - - - - - - - - - - awn green - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore elliptic - - - - - - - - - - - - - - - - - - - - - - - - flower dark red brown - - - - - - - - - - - - - - - - - - - - - - - - petiole involute - - - - - - - - - - - - - - - - - - - - - - - - rhizome dispersed - - - - - - - - - - - - - - - - - - - - - - - - style lilac - - - - - - - - - - - - - - - - - - - - - - - - tubercle clavate - - - - - - - - - - - - - - - - - - - - - - - - tubercle concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus rough - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - heartwood granular - - - - - - - - - - - - - - - - - - - - - - - - receptacle folded - - - - - - - - - - - - - - - - - - - - - - - - terminal bud young - - - - - - - - - - - - - - - - - - - - - - - - terminal bud age - - - - - - - - - - - - - - - - - - - - - - - - leaf apex pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf apex maturity - - - - - - - - - - - - - - - - - - - - - - - - pollen elliptic - - - - - - - - - - - - - - - - - - - - - - - - bulb purple - - - - - - - - - - - - - - - - - - - - - - - - infructescence oblique to - - - - - - - - - - - - - - - - - - - - - - - - lamina ridged - - - - - - - - - - - - - - - - - - - - - - - - leaf axil white - - - - - - - - - - - - - - - - - - - - - - - - gynoecium symmetrical - - - - - - - - - - - - - - - - - - - - - - - - valve whorled - - - - - - - - - - - - - - - - - - - - - - - - petiole margin lobed - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system purple - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system color - - - - - - - - - - - - - - - - - - - - - - - - stem fused with - - - - - - - - bud hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - petiole mottled - - - - - - - - - - - - - - - - - - - - - - - - stipule viscous - - - - - - - - - - - - - - - - - - - - - - - - stipule viscosity - - - - - - - - anther theca premature - true - - - - - - - - anther theca onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - petal inflated - - - - - - - - - - - - - - - - - - - - - - - - petal structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - sheath cell transparent - - - - - - - - - - - - - - - - - - - - - - - - sheath cell opacity - - - - - - - - - - - - - - - - - - - - - - - - androecium inflated - - - - - - - - - - - - - - - - - - - - - - - - pappus dilated - - - - - - - - - - - - - - - - - - - - - - - - pappus size - - - - - - - - epicalyx hermaphrodite - true - - - - - - - - epicalyx phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - trichome tubular - - - - - - - - - - - - - - - - - - - - - - - - prophyll basal to - - - - - - - - - - - - - - - - - - - - - - - - glume discoid - - - - - - - - - - - - - - - - - - - - - - - - locule abaxial to - - - - - - - - - - - - - - - - - - - - - - - - sepal present - - - - - - - - - - - - - - - - - - - - - - - - whole plant prostrate - - - - - - - - - - - - - - - - - - - - - - - - petiole semicircular - - - - - - - - - - - - - - - - - - - - - - - - connective emarginate - - - - - - - - - - - - - - - - - - - - - - - - peristome dense - - - - - - - - - - - - - - - - - - - - - - - - peristome mass density - - - - - - - - - - - - - - - - - - - - - - - - funicle diameter - - - - - - - - - - - - - - - - - - - - - - - - gynophore constricted - - - - - - - - - - - - - - - - - - - - - - - - exocarp white - - - - - - - - - - - - - - - - - - - - - - - - parenchyma striated - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein decurrent - - - - - - - - - - - - - - - - - - - - - - - - upper glume lateral to - - - - - - - - - - - - - - - - - - - - - - - - peristome orbicular - - - - - - - - - - - - - - - - - - - - - - - - leaf apex acuminate - - - - - - - - - - - - - - - - - - - - - - - - petiolule heart shaped - - - - - - - - - - - - - - - - - - - - - - - - seed loose - - - - - - - - - - - - - - - - - - - - - - - - filament concave - - - - - - - - - - - - - - - - - - - - - - - - caruncle fleshy - - - - - - - - - - - - - - - - - - - - - - - - caruncle composition - - - - - - - - - - - - - - - - - - - - - - - - epidermis cylindrical - - - - - - - - - - - - - - - - - - - - - - - - ligule terminal - - - - - - - - - - - - - - - - - - - - - - - - bud slit-like - - - - - - - - - - - - - - - - - - - - - - - - endosperm undulate - - - - - - - - - - - - - - - - - - - - - - - - tuber rough - - - - - - - - - - - - - - - - - - - - - - - - seta obtuse - - - - - - - - - - - - - - - - - - - - - - - - columella broad - - - - - - - - - - - - - - - - - - - - - - - - corm translucent - - - - - - - - - - - - - - - - - - - - - - - - corm opacity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence sharp - - - - - - - - - - - - - - - - - - - - - - - - calyx spotted - - - - - - - - - - - - - - - - - - - - - - - - calyx color pattern - - - - - - - - - - - - - - - - - - - - - - - - trichome multifid - - - - - - - - - - - - - - - - - - - - - - - - bud parallel to - - - - - - - - - - - - - - - - - - - - - - - - funicle mature - - - - - - - - - - - - - - - - - - - - - - - - funicle maturity - - - - - - - - - - - - - - - - - - - - - - - - stigma unbranched - - - - - - - - - - - - - - - - - - - - - - - - tubercle furrowed - - - - - - - - - - - - - - - - - - - - - - - - leaf base glandular - - - - - - - - - - - - - - - - - - - - - - - - leaf base morphology - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf emarginate - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence punctate - - - - - - - - - - - - - - - - - - - - - - - - petiole violet - - - - - - - - - - - - - - - - - - - - - - - - leaf Y-shaped - - - - - - - - - - - - - - - - - - - - - - - - lemma translucent - - - - - - - - - - - - - - - - - - - - - - - - lemma opacity - - - - - - - - - - - - - - - - - - - - - - - - radicle oblique to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence violet - - - - - - - - - - - - - - - - - - - - - - - - glume setose - - - - - - - - - - - - - - - - - - - - - - - - stigma retuse - - - - - - - - - - - - - - - - - - - - - - - - calyx sharp - - - - - - - - - - - - - - - - - - - - - - - - trichome fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - papilla cell hairy - - - - - - - - - - - - - - - - - - - - - - - - androecium ovate - - - - - - - - - - - - - - - - - - - - - - - - oil gland auriculate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member branched - - - - - - - - - - - - - - - - - - - - - - - - primary root lateral to - - - - - - - - - - - - - - - - - - - - - - - - primary root position - - - - - - - - - - - - - - - - - - - - - - - - involucre curved - - - - - - - - - - - - - - - - - - - - - - - - filament orange - - - - - - - - - - - - - - - - - - - - - - - - funicle bent - - - - - - - - - - - - - - - - - - - - - - - - leaf yellow brown - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath tubular - - - - - - - - - - - - - - - - - - - - - - - - petiolule scalloped - - - - - - - - - - - - - - - - - - - - - - - - bud erose - - - - - - - - - - - - - - - - - - - - - - - - gynoecium simple - - - - - - - - - - - - - - - - - - - - - - - - gynoecium complexity - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein rough - - - - - - - - - - - - - - - - - - - - - - - - plant callus swollen - - - - - - - - - - - - - - - - - - - - - - - - locule white - - - - - - - - - - - - - - - - - - - - - - - - exotesta smooth - - - - - - - - - - - - - - - - - - - - - - - - exotesta texture - - - - - - - - - - - - - - - - - - - - - - - - spikelet glistening - - - - - - - - - - - - - - - - - - - - - - - - spikelet reflectivity - - - - - - - - - - - - - - - - - - - - - - - - disk flower actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - disk flower radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - rhizome pink - - - - - - - - - - - - - - - - - - - - - - - - flower subterminal - - - - - - - - - - - - - - - - - - - - - - - - infructescence rugose - - - - - - - - - - - - - - - - - - - - - - - - infructescence surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - locule edible - - - - - - - - - - - - - - - - - - - - - - - - locule edibility - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell oblong - - - - - - - - - - - - - - - - - - - - - - - - bulb branched - - - - - - - - - - - - - - - - - - - - - - - - bulb branchiness - - - - - - - - - - - - - - - - - - - - - - - - periderm conspicuous - - - - - - - - - - - - - - - - - - - - - - - - placenta adaxial to - - - - - - - - - - - - - - - - - - - - - - - - bark spiny - - - - - - - - - - - - - - - - - - - - - - - - plant cell cylindrical - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein spatulate - - - - - - - - peduncle subacute - true - - - - - - - - - - - - - - - - - - - - - - - - hilum notched - - - - - - - - - - - - - - - - - - - - - - - - nectary inflexible - - - - - - - - - - - - - - - - - - - - - - - - nectary flexibility - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf curved - - - - - - - - - - - - - - - - - - - - - - - - keel right angle to - - - - - - - - - - - - - - - - - - - - - - - - areole bud oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - corolla dendritic - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure punctiform - - - - - - - - - - - - - - - - - - - - - - - - lemma orbicular - - - - - - - - - - - - - - - - - - - - - - - - endosperm spatulate - - - - - - - - - - - - - - - - - - - - - - - - branch fused with - - - - - - - - - - - - - - - - - - - - - - - - infructescence red brown - - - - - - - - axil arrested - true - - - - - - - - axil offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - sapwood oblong - - - - - - - - - - - - - - - - - - - - - - - - sapwood 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - sorus firm - - - - - - - - - - - - - - - - - - - - - - - - sorus hardness - - - - - - - - - - - - - - - - - - - - - - - - leaflet dispersed - - - - - - - - - - - - - - - - - - - - - - - - calyx flaky - - - - - - - - - - - - - - - - - - - - - - - - - - - - long shoot phenotype - - - - - - - - - - - - - - - - - - - - - - - - long shoot present - - - - - - - - - - - - - - - - - - - - - - - - long shoot amount - - - - - - - - - - - - - - - - - - - - - - - - resin canal broken - - - - - - - - - - - - - - - - - - - - - - - - resin canal wholeness - - - - - - - - - - - - - - - - - - - - - - - - gynophore swollen - - - - - - - - - - - - - - - - - - - - - - - - prickle subulate - - - - - - - - - - - - - - - - - - - - - - - - stem ochre - - - - - - - - - - - - - - - - - - - - - - - - tepal attached to - - - - - - - - - - - - - - - - - - - - - - - - lenticel vestigial - - - - - - - - - - - - - - - - - - - - - - - - papilla cell erect - - - - - - - - - - - - - - - - - - - - - - - - raphe lateral to - - - - - - - - - - - - - - - - - - - - - - - - petal external to - - - - - - - - - - - - - - - - - - - - - - - - canal linear - - - - - - - - - - - - - - - - - - - - - - - - keel maroon - - - - - - - - - - - - - - - - - - - - - - - - perianth subterminal - - - - - - - - - - - - - - - - - - - - - - - - antiraphe orange - - - - - - - - - - - - - - - - - - - - - - - - awn terminal - - - - - - - - - - - - - - - - - - - - - - - - stigma rough - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract bifurcated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract branchiness - - - - - - - - - - - - - - - - - - - - - - - - keel vermilion - - - - - - - - - - - - - - - - - - - - - - - - fruit pyramidal - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem curved - - - - - - - - - - - - - - - - - - - - - - - - corolla ventral to - - - - - - - - - - - - - - - - - - - - - - - - lower glume size - - - - - - - - - - - - - - - - - - - - - - - - stipule present - - - - - - - - - - - - - - - - - - - - - - - - bud arched - - - - - - - - - - - - - - - - - - - - - - - - inflorescence trilobed - - - - - - - - - - - - - - - - - - - - - - - - ovary wall concave - - - - - - - - - - - - - - - - - - - - - - - - stalk attached to - - - - - - - - hypanthium acute - true - - - - - - - - hypanthium duration - true - - - - - - - - - - - - - - - - - - - - - - - - spikelet opposite - - - - - - - - - - - - - - - - - - - - - - - - aril dentated - - - - - - - - - - - - - - - - - - - - - - - - stalk yellow - - - - - - - - - - - - - - - - - - - - - - - - sorus elliptic - - - - - - - - - - - - - - - - - - - - - - - - root in contact with - - - - - - - - - - - - - - - - - - - - - - - - costa yellow - - - - - - - - - - - - - - - - - - - - - - - - hilum striated - - - - - - - - - - - - - - - - - - - - - - - - anther auriculate - - - - - - - - - - - - - - - - - - - - - - - - locule obconical - - - - - - - - - - - - - - - - - - - - - - - - corolla distance - - - - - - - - - - - - - - - - - - - - - - - - lenticel lanceolate - - - - - - - - - - - - - - - - - - - - - - - - pistillode split - - - - - - - - - - - - - - - - - - - - - - - - leaf margin brown - - - - - - - - - - - - - - - - - - - - - - - - leaf margin color - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma firm - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma hardness - - - - - - - - - - - - - - - - - - - - - - - - endosperm old - - - - - - - - - - - - - - - - - - - - - - - - endosperm age - - - - - - - - - - - - - - - - - - - - - - - - epidermis obovate - - - - - - - - - - - - - - - - - - - - - - - - prophyll grooved - - - - - - - - - - - - - - - - - - - - - - - - prophyll texture - - - - - - - - - - - - - - - - - - - - - - - - axil circumference - - - - - - - - - - - - - - - - - - - - - - - - scutellar node kinked - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex coiled - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex coiling - - - - - - - - - - - - - - - - - - - - - - - - corolla T-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence wrinkled - - - - - - - - - - - - - - - - - - - - - - - - mesocarp slit-like - - - - - - - - - - - - - - - - - - - - - - - - thorn terminal - - - - - - - - connective recurrent - true - - - - - - - - - - - - - - - - - - - - - - - - seed coating - - - - - - - - - - - - - - - - - - - - - - - - cotyledon spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - gynophore conical - - - - - - - - - - - - - - - - - - - - - - - - banner petal offset - - - - - - - - - - - - - - - - - - - - - - - - corolla square - - - - - - - - - - - - - - - - - - - - - - - - apical hook convex - - - - - - - - - - - - - - - - - - - - - - - - seed trichome reniform - - - - - - - - - - - - - - - - - - - - - - - - stem adjacent to - - - - - - - - - - - - - - - - - - - - - - - - stipel opposite - - - - - - - - - - - - - - - - - - - - - - - - areole bud decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - areole bud water composition - - - - - - - - - - - - - - - - - - - - - - - - epidermis orange - - - - - - - - - - - - - - - - - - - - - - - - valve rough - - - - - - - - - - - - - - - - - - - - - - - - stolon terminal - - - - - - - - - - - - - - - - - - - - - - - - sepal rhomboid - - - - - - - - - - - - - - - - - - - - - - - - root conspicuous - - - - - - - - - - - - - - - - - - - - - - - - glume divergent from - - - - - - - - - - - - - - - - - - - - - - - - endosperm involute - - - - - - - - - - - - - - - - - - - - - - - - keel adaxial to - - - - - - - - - - - - - - - - - - - - - - - - stipule cupulate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet wrinkled - - - - - - - - - - - - - - - - - - - - - - - - bark dry - - - - - - - - - - - - - - - - - - - - - - - - bark wetness - - - - - - - - - - - - - - - - - - - - - - - - prickle dorsal to - - - - - - - - - - - - - - - - - - - - - - - - receptacle adjacent to - - - - - - - - - - - - - - - - - - - - - - - - banner petal purple - - - - - - - - - - - - - - - - - - - - - - - - banner petal color - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell reniform - - - - - - - - - - - - - - - - - - - - - - - - pseudostem horizontal - - - - - - - - - - - - - - - - - - - - - - - - flower symmetrical - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system smooth - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system texture - - - - - - - - - - - - - - - - - - - - - - - - bark bronze - - - - - - - - - - - - - - - - - - - - - - - - involucre clavate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp fragile - - - - - - - - - - - - - - - - - - - - - - - - mesocarp fragility - - - - - - - - - - - - - - - - - - - - - - - - disk flower angular - - - - - - - - - - - - - - - - - - - - - - - - stolon reniform - - - - - - - - - - - - - - - - - - - - - - - - stolon concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - root elliptic - - - - - - - - - - - - - - - - - - - - - - - - seed sinuous - - - - - - - - - - - - - - - - - - - - - - - - central zone warty - - - - - - - - - - - - - - - - - - - - - - - - peduncle light green - - - - - - - - - - - - - - - - - - - - - - - - stolon striated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence opaque - - - - - - - - - - - - - - - - - - - - - - - - androecium depth - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus obtuse - - - - - - - - - - - - - - - - - - - - - - - - plant cell viscous - - - - - - - - - - - - - - - - - - - - - - - - plant cell viscosity - - - - - - - - - - - - - - - - - - - - - - - - exocarp diameter - - - - - - - - - - - - - - - - - - - - - - - - canal striated - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf water composition - - - - - - - - - - - - - - - - - - - - - - - - raphe conspicuous - - - - - - - - - - - - - - - - - - - - - - - - tepal zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - tepal symmetry - - - - - - - - - - - - - - - - - - - - - - - - ligule adaxial to - - - - - - - - - - - - - - - - - - - - - - - - - - - - endodermis phenotype - - - - - - - - - - - - - - - - - - - - - - - - endodermis black - - - - - - - - - - - - - - - - - - - - - - - - endodermis color - - - - - - - - - - - - - - - - - - - - - - - - ovary wall spongy - - - - - - - - - - - - - - - - - - - - - - - - stipel basal to - - - - - - - - - - - - - - - - - - - - - - - - upper glume decreased amount - - - - - - - - - - - - - - - - - - - - - - - - whole plant red - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf rough - - - - - - - - - - - - - - - - - - - - - - - - gynoecium time - - - - - - - - - - - - - - - - - - - - - - - - sporangium oblong - - - - - - - - - - - - - - - - - - - - - - - - sporangium 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed herbaceous - - - - - - - - - - - - - - - - - - - - - - - - seed shedability - - - - - - - - - - - - - - - - - - - - - - - - endosperm glabrous - - - - - - - - - - - - - - - - - - - - - - - - endosperm pilosity - - - - - - - - - - - - - - - - - - - - - - - - heartwood dentated - - - - - - - - - - - - - - - - - - - - - - - - calyx semicircular - - - - - - - - - - - - - - - - - - - - - - - - spikelet curved - - - - - - - - - - - - - - - - - - - - - - - - heartwood simple - - - - - - - - - - - - - - - - - - - - - - - - heartwood complexity - - - - - - - - - - - - - - - - - - - - - - - - bud fused with - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus oblong - - - - - - - - - - - - - - - - - - - - - - - - tubercle kinked - - - - - - - - - - - - - - - - - - - - - - - - stem cuspidate - - - - - - - - central spike of tassel inflorescence hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - simple leaf dorsal to - - - - - - - - - - - - - - - - - - - - - - - - androecium fertile - - - - - - - - - - - - - - - - - - - - - - - - bract sunken - - - - - - - - - - - - - - - - - - - - - - - - bract elevation - - - - - - - - - - - - - - - - - - - - - - - - pappus yellow green - - - - - - - - - - - - - - - - - - - - - - - - bud area - - - - - - - - - - - - - - - - - - - - - - - - hypanthium lanceolate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium sharpness - - - - - - - - - - - - - - - - - - - - - - - - columella hard - - - - - - - - - - - - - - - - - - - - - - - - columella hardness - - - - - - - - - - - - - - - - - - - - - - - - hydathode spherical - - - - - - - - - - - - - - - - - - - - - - - - hydathode convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem separated from - - - - - - - - - - - - - - - - - - - - - - - - involucre inserted into - - - - - - - - - - - - - - - - - - - - - - - - rhizome distichous - - - - - - - - - - - - - - - - - - - - - - - - pedicel inflated - - - - - - - - - - - - - - - - - - - - - - - - pedicel structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - ligule emarginate - - - - - - - - - - - - - - - - - - - - - - - - ligule yellow green - - - - - - - - - - - - - - - - - - - - - - - - prickle star shaped - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus kinked - - - - - - - - - - - - - - - - - - - - - - - - crown root bilobed - - - - - - - - - - - - - - - - - - - - - - - - bark lateral to - - - - - - - - - - - - - - - - - - - - - - - - perianth leaf-like - - - - - - - - - - - - - - - - - - - - - - - - extrafloral nectary inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - endosperm punctate - - - - - - - - - - - - - - - - - - - - - - - - root prostrate - - - - - - - - - - - - - - - - - - - - - - - - root tip adhesive - - - - - - - - - - - - - - - - - - - - - - - - root tip adhesivity - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath oblong - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril inserted into - - - - - - - - - - - - - - - - - - - - - - - - thorn spatulate - - - - - - - - peristome acute - true - - - - - - - - peristome duration - true - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus adaxial to - - - - - - - - - - - - - - - - - - - - - - - - carpel cauline to - - - - - - - - - - - - - - - - - - - - - - - - axil right - - - - - - - - - - - - - - - - - - - - - - - - trichome cuspidate - - - - - - - - - - - - - - - - - - - - - - - - banner petal decreased amount - - - - - - - - - - - - - - - - - - - - - - - - banner petal amount - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member decussate - - - - - - - - - - - - - - - - - - - - - - - - crown root inflexible - - - - - - - - - - - - - - - - - - - - - - - - crown root flexibility - - - - - - - - endocarp arrested - true - - - - - - - - endocarp offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - caruncle conspicuous - - - - - - - - - - - - - - - - - - - - - - - - tubercle inserted into - - - - - - - - - - - - - - - - - - - - - - - - petal angle - - - - - - - - - - - - - - - - - - - - - - - - locule yellow brown - - - - - - - - - - - - - - - - - - - - - - - - axillary bud auriculate - - - - - - - - - - - - - - - - - - - - - - - - pistillode oblong - - - - - - - - - - - - - - - - - - - - - - - - coma brown - - - - - - - - - - - - - - - - - - - - - - - - sepal tubular - - - - - - - - - - - - - - - - - - - - - - - - coma linear - - - - - - - - - - - - - - - - - - - - - - - - coma shape - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath ovate - - - - - - - - - - - - - - - - - - - - - - - - lower glume violet - - - - - - - - - - - - - - - - - - - - - - - - root tip retuse - - - - - - - - - - - - - - - - - - - - - - - - gynophore decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - gynophore water composition - - - - - - - - - - - - - - - - - - - - - - - - bracteole open - - - - - - - - - - - - - - - - - - - - - - - - bracteole closure - - - - - - - - - - - - - - - - - - - - - - - - upper glume broad - - - - - - - - - - - - - - - - - - - - - - - - axil violet - - - - - - - - - - - - - - - - - - - - - - - - stalk mature - - - - - - - - - - - - - - - - - - - - - - - - mesocarp rough - - - - - - - - - - - - - - - - - - - - - - - - lamina ventral to - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue discoid - - - - - - - - - - - - - - - - - - - - - - - - hypanthium clavate - - - - - - - - - - - - - - - - - - - - - - - - spikelet trilobed - - - - - - - - - - - - - - - - - - - - - - - - keel retuse - - - - - - - - - - - - - - - - - - - - - - - - androecium zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - androecium symmetry - - - - - - - - - - - - - - - - - - - - - - - - root waxy - - - - - - - - - - - - - - - - - - - - - - - - root waxiness - - - - - - - - - - - - - - - - - - - - - - - - pistillode triradiate - - - - - - - - - - - - - - - - - - - - - - - - juice sac increased length - - - - - - - - - - - - - - - - - - - - - - - - juice sac length - - - - - - - - - - - - - - - - - - - - - - - - leaf brittle - - - - - - - - - - - - - - - - - - - - - - - - anther theca elliptic - - - - - - - - - - - - - - - - - - - - - - - - petiolule constricted - - - - - - - - - - - - - - - - - - - - - - - - calyx light brown - - - - - - - - - - - - - - - - - - - - - - - - connective branched - - - - - - - - - - - - - - - - - - - - - - - - connective branchiness - - - - - - - - - - - - - - - - - - - - - - - - bract bilobed - - - - - - - - - - - - - - - - - - - - - - - - petiolule cuspidate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus hispid - - - - - - - - - - - - - - - - - - - - - - - - costa attached to - - - - - - - - - - - - - - - - - - - - - - - - costa attachment quality - - - - - - - - - - - - - - - - - - - - - - - - staminode undulate - - - - - - - - - - - - - - - - - - - - - - - - locule soft - - - - - - - - - - - - - - - - - - - - - - - - lamina tripartite - - - - - - - - sorus up - true - - - - - - - - - - - - - - - - - - - - - - - - sorus direction - - - - - - - - - - - - - - - - - - - - - - - - leaf permanent - - - - - - - - - - - - - - - - - - - - - - - - testa linear - - - - - - - - - - - - - - - - - - - - - - - - plant cell decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - plant cell water composition - - - - - - - - - - - - - - - - - - - - - - - - glume elongated - - - - - - - - - - - - - - - - - - - - - - - - bud distributed - - - - - - - - - - - - - - - - - - - - - - - - parenchyma triangular - - - - - - - - - - - - - - - - - - - - - - - - pedicel multicellular - - - - - - - - - - - - - - - - - - - - - - - - pedicel cellularity - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member convex - - - - - - - - - - - - - - - - - - - - - - - - placenta horizontal - - - - - - - - - - - - - - - - - - - - - - - - bracteole lobed - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein cuneate - - - - - - - - - - - - - - - - - - - - - - - - stipule slender - - - - - - - - - - - - - - - - - - - - - - - - awn exserted - - - - - - - - - - - - - - - - - - - - - - - - glume pointed - - - - - - - - - - - - - - - - - - - - - - - - infructescence smooth - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue ventral to - - - - - - - - - - - - - - - - - - - - - - - - calyx convolute - - - - - - - - - - - - - - - - - - - - - - - - sorus mature - - - - - - - - - - - - - - - - - - - - - - - - carpel separated from - - - - - - - - - - - - - - - - - - - - - - - - receptacle semicircular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract truncated - - - - - - - - - - - - - - - - - - - - - - - - stolon whorled - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell acuminate - - - - - - - - - - - - - - - - - - - - - - - - trichome curved - - - - - - - - - - - - - - - - - - - - - - - - glume dispersed - - - - - - - - - - - - - - - - - - - - - - - - rhizome broken - - - - - - - - - - - - - - - - - - - - - - - - rhizome wholeness - - - - - - - - - - - - - - - - - - - - - - - - testa power - - - - - - - - - - - - - - - - - - - - - - - - cortex smooth - - - - - - - - - - - - - - - - - - - - - - - - cortex texture - - - - - - - - - - - - - - - - - - - - - - - - petiole time - - - - - - - - - - - - - - - - - - - - - - - - staminode funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - thorn kinked - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fragile - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fragility - - - - - - - - - - - - - - - - - - - - - - - - root concave - - - - - - - - - - - - - - - - - - - - - - - - mesocarp spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - mesocarp convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract folded - - - - - - - - - - - - - - - - - - - - - - - - bract surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - flower peripheral - - - - - - - - - - - - - - - - - - - - - - - - inflorescence surrounding - - - - - - - - - - - - - - - - - - - - - - - - pollen crowded - - - - - - - - - - - - - - - - - - - - - - - - bark light orange - - - - - - - - - - - - - - - - - - - - - - - - nectary obtuse - - - - - - - - - - - - - - - - - - - - - - - - periderm distichous - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system angular - - - - - - - - exocarp up - true - - - - - - - - - - - - - - - - - - - - - - - - exocarp direction - - - - - - - - - - - - - - - - - - - - - - - - apical hook leaf-like - - - - - - - - - - - - - - - - - - - - - - - - endocarp rugose - - - - - - - - - - - - - - - - - - - - - - - - lower glume split - - - - - - - - - - - - - - - - - - - - - - - - fruit distributed - - - - - - - - - - - - - - - - - - - - - - - - stipule grey - - - - - - - - - - - - - - - - - - - - - - - - stele acuminate - - - - - - - - - - - - - - - - - - - - - - - - aril folded - - - - - - - - - - - - - - - - - - - - - - - - connective ventral to - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle undulate - - - - - - - - - - - - - - - - - - - - - - - - phloem grooved - - - - - - - - - - - - - - - - - - - - - - - - phloem texture - - - - - - - - - - - - - - - - - - - - - - - - seed moderate intensity - - - - - - - - - - - - - - - - - - - - - - - - seed intensity - - - - - - - - - - - - - - - - - - - - - - - - prickle attenuate - - - - - - - - - - - - - - - - - - - - - - - - costa distal to - - - - - - - - - - - - - - - - - - - - - - - - plant embryo edible - - - - - - - - - - - - - - - - - - - - - - - - plant embryo edibility - - - - - - - - - - - - - - - - - - - - - - - - ray system prominent - - - - - - - - - - - - - - - - - - - - - - - - endosperm undifferentiated - - - - - - - - - - - - - - - - - - - - - - - - endosperm cellular potency - - - - - - - - - - - - - - - - - - - - - - - - septum ovate - - - - - - - - - - - - - - - - - - - - - - - - plant embryo axial to - - - - - - - - - - - - - - - - - - - - - - - - pistillode light yellow - - - - - - - - - - - - - - - - - - - - - - - - palea convex - - - - - - - - - - - - - - - - - - - - - - - - endosperm vertical to - - - - - - - - - - - - - - - - - - - - - - - - style horizontal - - - - - - - - androecium male - true - - - - - - - - - - - - - - - - - - - - - - - - raphe brown - - - - - - - - - - - - - - - - - - - - - - - - central zone flattened - - - - - - - - - - - - - - - - - - - - - - - - antiraphe edible - - - - - - - - - - - - - - - - - - - - - - - - antiraphe edibility - - - - - - - - - - - - - - - - - - - - - - - - fruit transparent - - - - - - - - - - - - - - - - - - - - - - - - connective contractile - - - - - - - - - - - - - - - - - - - - - - - - connective contractility - - - - - - - - - - - - - - - - - - - - - - - - nectary leaf-like - - - - - - - - - - - - - - - - - - - - - - - - anther black - - - - - - - - - - - - - - - - - - - - - - - - inflorescence viscous - - - - - - - - - - - - - - - - - - - - - - - - inflorescence viscosity - - - - - - - - - - - - - - - - - - - - - - - - bud separating - - - - - - - - - - - - - - - - - - - - - - - - plant cell warty - - - - - - - - - - - - - - - - - - - - - - - - shoot system vertical to - - - - - - - - - - - - - - - - - - - - - - - - cladode flattened - - - - - - - - - - - - - - - - - - - - - - - - cladode curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina orbicular - - - - - - - - - - - - - - - - - - - - - - - - locule ligneous - - - - - - - - - - - - - - - - - - - - - - - - leaflet undivided - - - - - - - - - - - - - - - - - - - - - - - - petiole inflated - - - - - - - - - - - - - - - - - - - - - - - - bud spatulate - - - - - - - - - - - - - - - - - - - - - - - - spikelet ornamentation - - - - - - - - - - - - - - - - - - - - - - - - spikelet surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system cylindrical - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root shedability - - - - - - - - - - - - - - - - - - - - - - - - micropyle curved - - - - - - - - - - - - - - - - - - - - - - - - micropyle curvature - - - - - - - - - - - - - - - - - - - - - - - - locule present - - - - - - - - - - - - - - - - - - - - - - - - leaf base cylindrical - - - - - - - - - - - - - - - - - - - - - - - - corolla horizontal - - - - - - - - - - - - - - - - - - - - - - - - petiolule pedicellate - - - - - - - - - - - - - - - - - - - - - - - - petiolule attachment quality - - - - - - - - - - - - - - - - - - - - - - - - testa transparent - - - - - - - - - - - - - - - - - - - - - - - - seed trichome coiled - - - - - - - - - - - - - - - - - - - - - - - - seed trichome coiling - - - - - - - - - - - - - - - - - - - - - - - - root filamentous - - - - - - - - - - - - - - - - - - - - - - - - ovary wall axial to - - - - - - - - - - - - - - - - - - - - - - - - axil coiled - - - - - - - - - - - - - - - - - - - - - - - - axil coiling - - - - - - - - - - - - - - - - - - - - - - - - petiole depth - - - - - - - - - - - - - - - - - - - - - - - - stigma black - - - - - - - - - - - - - - - - - - - - - - - - carpel pointed - - - - - - - - - - - - - - - - - - - - - - - - axil warty - - - - - - - - - - - - - - - - - - - - - - - - exocarp pointed - - - - - - - - - - - - - - - - - - - - - - - - exocarp sharpness - - - - - - - - - - - - - - - - - - - - - - - - stereome dark brown - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal osseous - - - - - - - - - - - - - - - - - - - - - - - - ovary wall dispersed - - - - - - - - - - - - - - - - - - - - - - - - style indurated - - - - - - - - - - - - - - - - - - - - - - - - sepal horizontal - - - - - - - - - - - - - - - - - - - - - - - - endocarp cylindrical - - - - - - - - - - - - - - - - - - - - - - - - staminode reniform - - - - - - - - - - - - - - - - - - - - - - - - filament black - - - - - - - - - - - - - - - - - - - - - - - - papilla cell auriculate - - - - - - - - - - - - - - - - - - - - - - - - seed dark blue - - - - - - - - - - - - - - - - - - - - - - - - bracteole distance - - - - - - - - - - - - - - - - - - - - - - - - anther theca ventral to - - - - - - - - - - - - - - - - - - - - - - - - fruit pressure - - - - - - - - - - - - - - - - - - - - - - - - stem axial to - - - - - - - - - - - - - - - - - - - - - - - - upper glume triangular - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant anatomical space phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant anatomical space quality - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein revolute - - - - - - - - - - - - - - - - - - - - - - - - ray system triangular - - - - - - - - - - - - - - - - - - - - - - - - ray system 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle superficial - - - - - - - - - - - - - - - - - - - - - - - - pistillode pyramidal - - - - - - - - - - - - - - - - - - - - - - - - papilla cell punctiform - - - - - - - - - - - - - - - - - - - - - - - - pith cylindrical - - - - - - - - - - - - - - - - - - - - - - - - pith convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - branch dry - - - - - - - - - - - - - - - - - - - - - - - - branch wetness - - - - - - - - - - - - - - - - - - - - - - - - carpel trilobed - - - - - - - - - - - - - - - - - - - - - - - - lower glume confluent with - - - - - - - - - - - - - - - - - - - - - - - - costa sparse - - - - - - - - - - - - - - - - - - - - - - - - costa spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - seed slit-like - - - - - - - - - - - - - - - - - - - - - - - - oil gland raised - - - - - - - - - - - - - - - - - - - - - - - - pappus spatulate - - - - - - - - - - - - - - - - - - - - - - - - plant cell ornamentation - - - - - - - - - - - - - - - - - - - - - - - - plant cell surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - flower area - - - - - - - - - - - - - - - - - - - - - - - - branch caudate - - - - - - - - - - - - - - - - - - - - - - - - micropyle red - - - - - - - - - - - - - - - - - - - - - - - - micropyle color - - - - - - - - - - - - - - - - - - - - - - - - fruit sparse - - - - - - - - - - - - - - - - - - - - - - - - pedicel transparent - - - - - - - - - - - - - - - - - - - - - - - - pedicel opacity - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus smooth - - - - - - - - - - - - - - - - - - - - - - - - stem dead - - - - - - - - - - - - - - - - - - - - - - - - stem viability - - - - - - - - - - - - - - - - - - - - - - - - leaf apex concave - - - - - - - - - - - - - - - - - - - - - - - - leaf apex concavity - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member split - - - - - - - - - - - - - - - - - - - - - - - - corm dense - - - - - - - - - - - - - - - - - - - - - - - - corm mass density - - - - - - - - - - - - - - - - - - - - - - - - petiolule furrowed - - - - - - - - - - - - - - - - - - - - - - - - stipule broad - - - - - - - - - - - - - - - - - - - - - - - - hilum obovate - - - - - - - - - - - - - - - - - - - - - - - - receptacle hispid - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis parallel to - - - - - - - - - - - - - - - - - - - - - - - - tuber spiny - - - - - - - - - - - - - - - - - - - - - - - - tuber surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein striated - - - - - - - - - - - - - - - - - - - - - - - - pericarp separating - - - - - - - - - - - - - - - - - - - - - - - - growth ring coating - - - - - - - - keel down - true - - - - - - - - - - - - - - - - - - - - - - - - petiolule cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - petiolule composition - - - - - - - - - - - - - - - - - - - - - - - - seed trichome retuse - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore adaxial to - - - - - - - - - - - - - - - - - - - - - - - - stamen cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - whole plant diameter - - - - - - - - - - - - - - - - - - - - - - - - carpel terminal - - - - - - - - - - - - - - - - - - - - - - - - root grooved - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl furrowed - - - - - - - - - - - - - - - - - - - - - - - - aril drooping - - - - - - - - - - - - - - - - - - - - - - - - keel oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - peristome pigmented - - - - - - - - - - - - - - - - - - - - - - - - peristome degree of pigmentation - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure decreased amount - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure amount - - - - - - - - - - - - - - - - - - - - - - - - androecium cupulate - - - - - - - - - - - - - - - - - - - - - - - - banner petal decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - aril decreased amount - - - - - - - - - - - - - - - - - - - - - - - - keel dark grey - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma composition - - - - - - - - - - - - - - - - - - - - - - - - bud height - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - lower glume abaxial to - - - - - - - - - - - - - - - - - - - - - - - - scutellar node discoid - - - - - - - - - - - - - - - - - - - - - - - - aril ridged - - - - - - - - hypanthium continuous - true - - - - - - - - hypanthium occurrence - true - - - - - - - - crown root male - true - - - - - - - - - - - - - - - - - - - - - - - - abscission zone cylindrical - - - - - - - - - - - - - - - - - - - - - - - - abscission zone convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pointed - - - - - - - - - - - - - - - - - - - - - - - - short shoot simple - - - - - - - - - - - - - - - - - - - - - - - - short shoot complexity - - - - - - - - - - - - - - - - - - - - - - - - keel immature - - - - - - - - - - - - - - - - - - - - - - - - tepal inflexible - - - - - - - - - - - - - - - - - - - - - - - - tepal flexibility - - - - - - - - - - - - - - - - - - - - - - - - radicle lateral to - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle decussate - - - - - - - - glume hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - peduncle multicellular - - - - - - - - - - - - - - - - - - - - - - - - peduncle cellularity - - - - - - - - - - - - - - - - - - - - - - - - plant embryo oblong - - - - - - - - - - - - - - - - - - - - - - - - antiraphe brown - - - - - - - - - - - - - - - - - - - - - - - - seta lateral to - - - - - - - - - - - - - - - - - - - - - - - - plant embryo osseous - - - - - - - - - - - - - - - - - - - - - - - - anther theca lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stem cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - bud dark brown - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system dorsal to - - - - - - - - - - - - - - - - - - - - - - - - staminode terminal - - - - - - - - - - - - - - - - - - - - - - - - aril punctate - - - - - - - - - - - - - - - - - - - - - - - - stem fusiform - - - - - - - - - - - - - - - - - - - - - - - - seed dark brown - - - - - - - - - - - - - - - - - - - - - - - - coma white - - - - - - - - - - - - - - - - - - - - - - - - epidermis kinked - - - - - - - - - - - - - - - - - - - - - - - - upper glume condensed - - - - - - - - - - - - - - - - - - - - - - - - nectary clavate - - - - - - - - - - - - - - - - - - - - - - - - nectary concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - peristome triangular - - - - - - - - - - - - - - - - - - - - - - - - lamina protruding into - - - - - - - - - - - - - - - - - - - - - - - - calyx proximal to - - - - - - - - - - - - - - - - - - - - - - - - fruit ornamented - - - - - - - - - - - - - - - - - - - - - - - - peduncle horizontal - - - - - - - - - - - - - - - - - - - - - - - - petiolule orbicular - - - - - - - - - - - - - - - - - - - - - - - - petiole trilobed - - - - - - - - - - - - - - - - - - - - - - - - stolon spherical - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium dorsal to - - - - - - - - - - - - - - - - - - - - - - - - hydathode structure - - - - - - - - epidermis female - true - - - - - - - - epidermis phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - corolla simple - - - - - - - - - - - - - - - - - - - - - - - - corolla complexity - - - - - - - - - - - - - - - - - - - - - - - - bark recurved - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell circular - - - - - - - - - - - - - - - - - - - - - - - - pedicel mass - - - - - - - - - - - - - - - - - - - - - - - - anther abaxial to - - - - - - - - - - - - - - - - - - - - - - - - corolla arched - - - - - - - - - - - - - - - - - - - - - - - - axillary bud medial to - - - - - - - - bract subacute - true - - - - - - - - - - - - - - - - - - - - - - - - nectary recurved - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - short shoot lateral to - - - - - - - - - - - - - - - - - - - - - - - - sepal flat - - - - - - - - - - - - - - - - - - - - - - - - stigma convolute - - - - - - - - - - - - - - - - - - - - - - - - stipule kinked - - - - - - - - - - - - - - - - - - - - - - - - axil inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf margin oblique to - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal discoid - - - - - - - - - - - - - - - - - - - - - - - - shoot apex multifid - - - - - - - - - - - - - - - - - - - - - - - - stalk angular - - - - - - - - - - - - - - - - - - - - - - - - plant sap increased thickness - - - - - - - - - - - - - - - - - - - - - - - - - oil gland attenuate - - - - - - - - - - - - - - - - - - - - - - - - stalk dry - - - - - - - - - - - - - - - - - - - - - - - - stalk wetness - - - - - - - - - - - - - - - - - - - - - - - - stigma tomentose - - - - - - - - - - - - - - - - - - - - - - - - petiole inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - petal rectangular - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member areolate - - - - - - - - - - - - - - - - - - - - - - - - bark blotchy - - - - - - - - - - - - - - - - - - - - - - - - connective subtriangular - - - - - - - - - - - - - - - - - - - - - - - - valve spherical - - - - - - - - - - - - - - - - - - - - - - - - fruit cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - testa area - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium star shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx viscid - - - - - - - - - - - - - - - - - - - - - - - - septum simple - - - - - - - - - - - - - - - - - - - - - - - - septum complexity - - - - - - - - - - - - - - - - - - - - - - - - bracteole bilobed - - - - - - - - - - - - - - - - - - - - - - - - seed divergent from - - - - - - - - - - - - - - - - - - - - - - - - fruit violet - - - - - - - - - - - - - - - - - - - - - - - - lamina furrowed - - - - - - - - - - - - - - - - - - - - - - - - shoot apex ornamentation - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system divergent from - - - - - - - - - - - - - - - - - - - - - - - - canal inserted into - - - - - - - - - - - - - - - - - - - - - - - - inflorescence protruding into - - - - - - - - - - - - - - - - - - - - - - - - epidermis furrowed - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein bifurcated - - - - - - - - - - - - - - - - - - - - - - - - pistillode slender - - - - - - - - - - - - - - - - - - - - - - - - root tip folded - - - - - - - - - - - - - - - - - - - - - - - - root tip surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - staminode open - - - - - - - - - - - - - - - - - - - - - - - - staminode closure - - - - - - - - - - - - - - - - - - - - - - - - coma triangular - - - - - - - - - - - - - - - - - - - - - - - - seta pubescent - - - - - - - - - - - - - - - - - - - - - - - - seta maturity - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle purple - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle color - - - - - - - - - - - - - - - - - - - - - - - - peristome funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - root spiny - - - - - - - - - - - - - - - - - - - - - - - - root surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - stipule multifid - - - - - - - - - - - - - - - - - - - - - - - - anther notched - - - - - - - - - - - - - - - - - - - - - - - - epidermis nodular - - - - - - - - - - - - - - - - - - - - - - - - epidermis structure - - - - - - - - - - - - - - - - - - - - - - - - pericarp adhesive - - - - - - - - - - - - - - - - - - - - - - - - pericarp adhesivity - - - - - - - - - - - - - - - - - - - - - - - - root cap obtuse - - - - - - - - - - - - - - - - - - - - - - - - root cap 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - papilla cell reniform - - - - - - - - - - - - - - - - - - - - - - - - aril striate-angular - - - - - - - - - - - - - - - - - - - - - - - - exocarp protruding into - - - - - - - - - - - - - - - - - - - - - - - - anther theca spherical - - - - - - - - - - - - - - - - - - - - - - - - stigma oriented - - - - - - - - - - - - - - - - - - - - - - - - lamina open - - - - - - - - - - - - - - - - - - - - - - - - lamina closure - - - - - - - - - - - - - - - - - - - - - - - - root tip reniform - - - - - - - - - - - - - - - - - - - - - - - - valve autogenous - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium cylindrical - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure caudate - - - - - - - - - - - - - - - - - - - - - - - - axil raised - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle truncated - - - - - - - - - - - - - - - - - - - - - - - - pedicel divergent from - - - - - - - - canal male - true - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence heart shaped - - - - - - - - - - - - - - - - - - - - - - - - flower osseous - - - - - - - - - - - - - - - - - - - - - - - - shoot system oblong - - - - - - - - - - - - - - - - - - - - - - - - pedicel zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - pedicel symmetry - - - - - - - - - - - - - - - - - - - - - - - - raphe furrowed - - - - - - - - - - - - - - - - - - - - - - - - raphe texture - - - - - - - - - - - - - - - - - - - - - - - - leaflet erose - - - - - - - - - - - - - - - - - - - - - - - - perianth subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - shoot system obtuse - - - - - - - - - - - - - - - - - - - - - - - - perianth undulate - - - - - - - - - - - - - - - - - - - - - - - - thallus curved - - - - - - - - - - - - - - - - - - - - - - - - pappus glandular - - - - - - - - - - - - - - - - - - - - - - - - pappus morphology - - - - - - - - - - - - - - - - - - - - - - - - columella warty - - - - - - - - - - - - - - - - - - - - - - - - corolla decussate - - - - - - - - - - - - - - - - - - - - - - - - stipule cut - - - - - - - - - - - - - - - - - - - - - - - - lemma setose - - - - - - - - - - - - - - - - - - - - - - - - central zone folded - - - - - - - - - - - - - - - - - - - - - - - - leaflet sharp - - - - - - - - - - - - - - - - - - - - - - - - pericarp maroon - - - - - - - - - - - - - - - - - - - - - - - - stalk elongated - - - - - - - - - - - - - - - - - - - - - - - - raphe angular - - - - - - - - - - - - - - - - - - - - - - - - petiolule asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - oil gland erect - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril linear - - - - - - - - - - - - - - - - - - - - - - - - upper glume glandular - - - - - - - - - - - - - - - - - - - - - - - - upper glume morphology - - - - - - - - - - - - - - - - - - - - - - - - bark maroon - - - - - - - - - - - - - - - - - - - - - - - - anther blunt - - - - - - - - - - - - - - - - - - - - - - - - staminode divergent from - - - - - - - - - - - - - - - - - - - - - - - - sapwood green - - - - - - - - - - - - - - - - - - - - - - - - root tip auriculate - - - - - - - - - - - - - - - - - - - - - - - - prophyll triangular - - - - - - - - - - - - - - - - - - - - - - - - prophyll 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - perianth grooved - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell lanceolate - - - - - - - - - - - - - - - - - - - - - - - - receptacle multicellular - - - - - - - - - - - - - - - - - - - - - - - - receptacle cellularity - - - - - - - - - - - - - - - - - - - - - - - - branch sunken - - - - - - - - - - - - - - - - - - - - - - - - branch elevation - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure discoid - - - - - - - - - - - - - - - - - - - - - - - - stalk concave - - - - - - - - - - - - - - - - - - - - - - - - perianth striated - - - - - - - - - - - - - - - - - - - - - - - - style spiny - - - - - - - - - - - - - - - - - - - - - - - - gynoecium decreased amount - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein hispid - - - - - - - - - - - - - - - - - - - - - - - - infructescence decreased amount - - - - - - - - - - - - - - - - - - - - - - - - infructescence amount - - - - - - - - - - - - - - - - - - - - - - - - septum vertical to - - - - - - - - - - - - - - - - - - - - - - - - tubercle conical - - - - - - - - - - - - - - - - - - - - - - - - stele obtuse - - - - - - - - - - - - - - - - - - - - - - - - receptacle cupulate - - - - - - - - - - - - - - - - - - - - - - - - axil increased thickness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel erect - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel position - - - - - - - - - - - - - - - - - - - - - - - - seed operculum osseous - - - - - - - - - - - - - - - - - - - - - - - - seed operculum composition - - - - - - - - - - - - - - - - - - - - - - - - pedicel prominent - - - - - - - - - - - - - - - - - - - - - - - - aril dark violet - - - - - - - - - - - - - - - - - - - - - - - - exocarp increased length - - - - - - - - - - - - - - - - - - - - - - - - exocarp length - - - - - - - - - - - - - - - - - - - - - - - - calyx multiple - - - - - - - - - - - - - - - - - - - - - - - - pedicel caudate - - - - - - - - - - - - - - - - - - - - - - - - radicle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - radicle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark loose - - - - - - - - - - - - - - - - - - - - - - - - thallus flattened - - - - - - - - - - - - - - - - - - - - - - - - gynophore oblong - - - - - - - - - - - - - - - - - - - - - - - - septum white - - - - - - - - - - - - - - - - - - - - - - - - style revolute - - - - - - - - - - - - - - - - - - - - - - - - epicalyx cylindrical - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet multifid - - - - - - - - - - - - - - - - - - - - - - - - central zone coiled - - - - - - - - - - - - - - - - - - - - - - - - central zone coiling - - - - - - - - - - - - - - - - - - - - - - - - apical hook decumbent - - - - - - - - - - - - - - - - - - - - - - - - shoot system horizontal - - - - - - - - - - - - - - - - - - - - - - - - stem glistening - - - - - - - - - - - - - - - - - - - - - - - - stem reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina blunt - - - - - - - - - - - - - - - - - - - - - - - - carpel oblique to - - - - - - - - - - - - - - - - - - - - - - - - apical hook spatulate - - - - - - - - - - - - - - - - - - - - - - - - crown root opposite - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - nectary subrectangular - - - - - - - - - - - - - - - - - - - - - - - - lamina grooved - - - - - - - - - - - - - - - - - - - - - - - - bud cupulate - - - - - - - - - - - - - - - - - - - - - - - - bark columnar - - - - - - - - - - - - - - - - - - - - - - - - nectary decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - nectary water composition - - - - - - - - - - - - - - - - - - - - - - - - infructescence acuminate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence external to - - - - - - - - - - - - - - - - - - - - - - - - papilla cell swollen - - - - - - - - - - - - - - - - - - - - - - - - nectary lobed - - - - - - - - - - - - - - - - - - - - - - - - leaflet adjacent to - - - - - - - - - - - - - - - - - - - - - - - - epidermis decumbent - - - - - - - - - - - - - - - - - - - - - - - - leaf base old - - - - - - - - - - - - - - - - - - - - - - - - leaf base age - - - - - - - - - - - - - - - - - - - - - - - - involucre cuneate - - - - - - - - - - - - - - - - - - - - - - - - gynophore obovate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal cupulate - - - - - - - - - - - - - - - - - - - - - - - - exocarp broken - - - - - - - - - - - - - - - - - - - - - - - - exocarp wholeness - - - - - - - - - - - - - - - - - - - - - - - - leaf base hairy - - - - - - - - - - - - - - - - - - - - - - - - whole plant foveate - - - - - - - - - - - - - - - - - - - - - - - - glume inflexible - - - - - - - - - - - - - - - - - - - - - - - - glume flexibility - - - - - - - - inflorescence synchronous - - true - - - - - - - - inflorescence occurrence - - true - - - - - - - - - - - - - - - - - - - - - - - - palea raised - - - - - - - - - - - - - - - - - - - - - - - - seed operculum curved - - - - - - - - - - - - - - - - - - - - - - - - seed operculum curvature - - - - - - - - - - - - - - - - - - - - - - - - awn separating - - - - - - - - - - - - - - - - - - - - - - - - raphe punctiform - - - - - - - - - - - - - - - - - - - - - - - - ovary wall coating - - - - - - - - - - - - - - - - - - - - - - - - androecium linear - - - - - - - - - - - - - - - - - - - - - - - - perianth decurrent - - - - - - - - - - - - - - - - - - - - - - - - papilla cell ochre - - - - - - - - - - - - - - - - - - - - - - - - leaf base closed - - - - - - - - - - - - - - - - - - - - - - - - leaf base closure - - - - - - - - - - - - - - - - - - - - - - - - filament angular - - - - - - - - - - - - - - - - - - - - - - - - seed trichome ornamentation - - - - - - - - - - - - - - - - - - - - - - - - seed trichome surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - strophiole prominent - - - - - - - - - - - - - - - - - - - - - - - - strophiole position - - - - - - - - - - - - - - - - - - - - - - - - peduncle area - - - - - - - - - - - - - - - - - - - - - - - - leaf axil present - - - - - - - - - - - - - - - - - - - - - - - - gynophore glandular - - - - - - - - - - - - - - - - - - - - - - - - gynophore morphology - - - - - - - - - - - - - - - - - - - - - - - - rhizome aromatic - - - - - - - - - - - - - - - - - - - - - - - - rhizome aromaticity - - - - - - - - - - - - - - - - - - - - - - - - sorus circular - - - - - - - - - - - - - - - - - - - - - - - - root tip pedicellate - - - - - - - - - - - - - - - - - - - - - - - - root tip attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stigma V-shaped - - - - - - - - - - - - - - - - - - - - - - - - pericarp immature - - - - - - - - - - - - - - - - - - - - - - - - ovary wall convolute - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath parallel to - - - - - - - - - - - - - - - - - - - - - - - - gynoecium decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - gynoecium water composition - - - - - - - - - - - - - - - - - - - - - - - - root pink - - - - - - - - - - - - - - - - - - - - - - - - pollen dispersed - - - - - - - - - - - - - - - - - - - - - - - - petiole arachnose - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet brittle - - - - - - - - - - - - - - - - - - - - - - - - bracteole zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - bracteole symmetry - - - - - - - - - - - - - - - - - - - - - - - - hilum adaxial to - - - - - - - - - - - - - - - - - - - - - - - - bracteole symmetrical - - - - - - - - - - - - - - - - - - - - - - - - fruit unilateral - - - - - - - - - - - - - - - - - - - - - - - - pollen exserted - - - - - - - - - - - - - - - - - - - - - - - - thorn opposite - - - - - - - - - - - - - - - - - - - - - - - - plant callus branched - - - - - - - - - - - - - - - - - - - - - - - - lemma branched - - - - - - - - - - - - - - - - - - - - - - - - lemma branchiness - - - - - - - - - - - - - - - - - - - - - - - - corolla separated from - - - - - - - - - - - - - - - - - - - - - - - - tuber discoid - - - - - - - - - - - - - - - - - - - - - - - - pedicel posterior to - - - - - - - - - - - - - - - - - - - - - - - - peduncle vertical to - - - - - - - - - - - - - - - - - - - - - - - - endocarp yellow orange - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell thickness - - - - - - - - - - - - - - - - - - - - - - - - shoot internode grooved - - - - - - - - - - - - - - - - - - - - - - - - receptacle hispidulous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge fleshy - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge composition - - - - - - - - - - - - - - - - - - - - - - - - aril cylindrical - - - - - - - - - - - - - - - - - - - - - - - - awn attached to - - - - - - - - - - - - - - - - - - - - - - - - awn attachment quality - - - - - - - - - - - - - - - - - - - - - - - - whole plant caudate - - - - - - - - - - - - - - - - - - - - - - - - receptacle emarginate - - - - - - - - - - - - - - - - - - - - - - - - receptacle mixed - - - - - - - - - - - - - - - - - - - - - - - - bract trilobed - - - - - - - - - - - - - - - - - - - - - - - - spikelet curled - - - - - - - - - - - - - - - - - - - - - - - - epicotyl leaf-like - - - - - - - - - - - - - - - - - - - - - - - - calyx subterminal - - - - - - - - - - - - - - - - - - - - - - - - upper glume orbicular - - - - - - - - - - - - - - - - - - - - - - - - pollen absent - - - - - - - - - - - - - - - - - - - - - - - - inflorescence acute angle to - - - - - - - - - - - - - - - - - - - - - - - - stamen striated - - - - - - - - - - - - - - - - - - - - - - - - stamen punctate - - - - - - - - - - - - - - - - - - - - - - - - receptacle rugose - - - - - - - - - - - - - - - - - - - - - - - - epidermis swollen - - - - - - - - - - - - - - - - - - - - - - - - pith dry - - - - - - - - - - - - - - - - - - - - - - - - pith wetness - - - - - - - - - - - - - - - - - - - - - - - - leaf base convolute - - - - - - - - - - - - - - - - - - - - - - - - style heart shaped - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell fused with - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell structure - - - - - - - - - - - - - - - - - - - - - - - - corolla elongated - - - - - - - - - - - - - - - - - - - - - - - - leaflet dark green - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium coiled - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium coiling - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium curved - - - - - - - - - - - - - - - - - - - - - - - - apical hook rough - - - - - - - - - - - - - - - - - - - - - - - - anther fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - canal triangular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis concealed by - - - - - - - - - - - - - - - - - - - - - - - - shoot apex adhesive - - - - - - - - - - - - - - - - - - - - - - - - shoot apex adhesivity - - - - - - - - - - - - - - - - - - - - - - - - leaf square - - - - - - - - - - - - - - - - - - - - - - - - hilum grooved - - - - - - - - - - - - - - - - - - - - - - - - placenta obovate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - style yellow brown - - - - - - - - - - - - - - - - - - - - - - - - involucre flat - - - - - - - - - - - - - - - - - - - - - - - - exocarp pedicellate - - - - - - - - - - - - - - - - - - - - - - - - exocarp attachment quality - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf drooping - - - - - - - - - - - - - - - - - - - - - - - - anther red - - - - - - - - - - - - - - - - - - - - - - - - petiole foveate - - - - - - - - - - - - - - - - - - - - - - - - tepal dark red - - - - - - - - - - - - - - - - - - - - - - - - plant embryo glabrous - - - - - - - - - - - - - - - - - - - - - - - - plant embryo pilosity - - - - - - - - - - - - - - - - - - - - - - - - valve obovate - - - - - - - - persistent sepal male - true - - - - - - - - - - - - - - - - - - - - - - - - leaf base size - - - - - - - - - - - - - - - - - - - - - - - - corolla bronze - - - - - - - - - - - - - - - - - - - - - - - - stem granular - - - - - - - - - - - - - - - - - - - - - - - - aril spongy - - - - - - - - - - - - - - - - - - - - - - - - seed quadrangular - - - - - - - - - - - - - - - - - - - - - - - - rhizome smooth - - - - - - - - - - - - - - - - - - - - - - - - seed trichome cauline to - - - - - - - - - - - - - - - - - - - - - - - - cotyledon condensed - - - - - - - - - - - - - - - - - - - - - - - - bract recurved - - - - - - - - - - - - - - - - - - - - - - - - trichome reniform - - - - - - - - - - - - - - - - - - - - - - - - bark triangular - - - - - - - - - - - - - - - - - - - - - - - - stem fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal alternate placement - - - - - - - - - - - - - - - - - - - - - - - - hilum dark violet - - - - - - - - - - - - - - - - - - - - - - - - stamen fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - spikelet cuspidate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence reniform - - - - - - - - - - - - - - - - - - - - - - - - terminal bud reniform - - - - - - - - - - - - - - - - - - - - - - - - terminal bud concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence attenuate - - - - - - - - - - - - - - - - - - - - - - - - calyx maroon - - - - - - - - - - - - - - - - - - - - - - - - - - - - leaf tip phenotype - - - - - - - - leaf tip up - true - - - - - - - - - - - - - - - - - - - - - - - - leaf tip direction - - - - - - - - - - - - - - - - - - - - - - - - receptacle distal to - - - - - - - - - - - - - - - - - - - - - - - - stem base simple - - - - - - - - - - - - - - - - - - - - - - - - stem base complexity - - - - - - - - - - - - - - - - - - - - - - - - stipule foveate - - - - - - - - - - - - - - - - - - - - - - - - sorus linear - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath branched - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaflet tapered - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein bilobed - - - - - - - - - - - - - - - - - - - - - - - - lemma exposed - - - - - - - - - - - - - - - - - - - - - - - - disk flower axial to - - - - - - - - - - - - - - - - - - - - - - - - pericarp loose - - - - - - - - - - - - - - - - - - - - - - - - inflorescence distributed - - - - - - - - - - - - - - - - - - - - - - - - aril furrowed - - - - - - - - - - - - - - - - - - - - - - - - receptacle dense - - - - - - - - - - - - - - - - - - - - - - - - receptacle mass density - - - - - - - - - - - - - - - - - - - - - - - - endosperm black - - - - - - - - - - - - - - - - - - - - - - - - epidermis upturned - - - - - - - - - - - - - - - - - - - - - - - - receptacle ridged - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis inserted into - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina emarginate - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina concavity - - - - - - - - - - - - - - - - - - - - - - - - androecium drooping - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure heart shaped - - - - - - - - - - - - - - - - - - - - - - - - corolla trilobed - - - - - - - - - - - - - - - - - - - - - - - - axil conspicuous - - - - - - - - - - - - - - - - - - - - - - - - stem convolute - - - - - - - - inflorescence continuous - - true - - - - - - - - - - - - - - - - - - - - - - - - pseudostem dry - - - - - - - - - - - - - - - - - - - - - - - - pseudostem wetness - - - - - - - - - - - - - - - - - - - - - - - - receptacle fusiform - - - - - - - - - - - - - - - - - - - - - - - - endocarp whole - - - - - - - - - - - - - - - - - - - - - - - - endocarp wholeness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence domed - - - - - - - - - - - - - - - - - - - - - - - - central zone opposite - - - - - - - - - - - - - - - - - - - - - - - - calyx alternate placement - - - - - - - - - - - - - - - - - - - - - - - - stem dorsal to - - - - - - - - - - - - - - - - - - - - - - - - sorus lobed - - - - - - - - - - - - - - - - - - - - - - - - septum inserted into - - - - - - - - - - - - - - - - - - - - - - - - keel adjacent to - - - - - - - - - - - - - - - - - - - - - - - - axil proximal to - - - - - - - - - - - - - - - - - - - - - - - - hypodermis abaxial to - - - - - - - - - - - - - - - - - - - - - - - - hypodermis position - - - - - - - - - - - - - - - - - - - - - - - - oil gland truncated - - - - - - - - - - - - - - - - - - - - - - - - testa cut - - - - - - - - - - - - - - - - - - - - - - - - apical hook purple - - - - - - - - - - - - - - - - - - - - - - - - apical hook color - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure scalloped - - - - - - - - - - - - - - - - - - - - - - - - involucre grey - - - - - - - - - - - - - - - - - - - - - - - - bract coating - - - - - - - - - - - - - - - - - - - - - - - - lenticel alternate placement - - - - - - - - - - - - - - - - - - - - - - - - petiole adjacent to - - - - - - - - - - - - - - - - - - - - - - - - axil sparse - - - - - - - - - - - - - - - - - - - - - - - - leaf base inserted into - - - - - - - - - - - - - - - - - - - - - - - - tubercle herbaceous - - - - - - - - - - - - - - - - - - - - - - - - tubercle shedability - - - - - - - - - - - - - - - - - - - - - - - - micropyle decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium furrowed - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf alternate placement - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - sporangium superficial - - - - - - - - - - - - - - - - - - - - - - - - seed acidic - - - - - - - - - - - - - - - - - - - - - - - - seed medium acidity - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell autogenous - - - - - - - - - - - - - - - - - - - - - - - - epicalyx tubular - - - - - - - - - - - - - - - - - - - - - - - - tepal bifurcated - - - - - - - - - - - - - - - - - - - - - - - - tepal branchiness - - - - - - - - - - - - - - - - - - - - - - - - pulvinus yellow - - - - - - - - - - - - - - - - - - - - - - - - pulvinus color - - - - - - - - - - - - - - - - - - - - - - - - petal decurrent - - - - - - - - - - - - - - - - - - - - - - - - keel decurrent - - - - - - - - - - - - - - - - - - - - - - - - androecium erect - - - - - - - - - - - - - - - - - - - - - - - - anther ventral to - - - - - - - - - - - - - - - - - - - - - - - - petiole margin sunken - - - - - - - - - - - - - - - - - - - - - - - - petiole margin elevation - - - - - - - - - - - - - - - - - - - - - - - - testa vestigial - - - - - - - - - - - - - - - - - - - - - - - - plant callus warty - - - - - - - - - - - - - - - - - - - - - - - - leaflet clavate - - - - - - - - - - - - - - - - - - - - - - - - endocarp prominent - - - - - - - - - - - - - - - - - - - - - - - - seed retrorse - - - - - - - - - - - - - - - - - - - - - - - - seed fertile - - - - - - - - - - - - - - - - - - - - - - - - plant embryo divergent from - - - - - - - - - - - - - - - - - - - - - - - - root decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - root water composition - - - - - - - - - - - - - - - - - - - - - - - - style hispidulous - - - - - - - - - - - - - - - - - - - - - - - - carpel whole - - - - - - - - - - - - - - - - - - - - - - - - connective surrounding - - - - - - - - - - - - - - - - - - - - - - - - funicle present - - - - - - - - - - - - - - - - - - - - - - - - funicle amount - - - - - - - - - - - - - - - - - - - - - - - - calyx waxy - - - - - - - - - - - - - - - - - - - - - - - - calyx waxiness - - - - - - - - - - - - - - - - - - - - - - - - spikelet light brown - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle concave - - - - - - - - - - - - - - - - - - - - - - - - staminode pointed - - - - - - - - - - - - - - - - - - - - - - - - seed coat branched - - - - - - - - - - - - - - - - - - - - - - - - seed coat branchiness - - - - - - - - - - - - - - - - - - - - - - - - stem opaque - - - - - - - - - - - - - - - - - - - - - - - - seed notched - - - - - - - - - - - - - - - - - - - - - - - - inflorescence adhesive - - - - - - - - - - - - - - - - - - - - - - - - inflorescence adhesivity - - - - - - - - simple leaf up - true - - - - - - - - - - - - - - - - - - - - - - - - simple leaf direction - - - - - - - - - - - - - - - - - - - - - - - - stipule decurrent - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract convolute - - - - - - - - - - - - - - - - - - - - - - - - ligule scalloped - - - - - - - - - - - - - - - - - - - - - - - - hydathode conspicuous - - - - - - - - - - - - - - - - - - - - - - - - lenticel orbicular - - - - - - - - - - - - - - - - - - - - - - - - pappus notched - - - - - - - - - - - - - - - - - - - - - - - - pappus concavity - - - - - - - - - - - - - - - - - - - - - - - - costa mature - - - - - - - - - - - - - - - - - - - - - - - - bud glistening - - - - - - - - - - - - - - - - - - - - - - - - bud reflectivity - - - - - - - - - - - - - - - - - - - - - - - - stipule lobed - - - - - - - - - - - - - - - - - - - - - - - - seed trichome decurrent - - - - - - - - - - - - - - - - - - - - - - - - aril ornamentation - - - - - - - - - - - - - - - - - - - - - - - - inflorescence fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - palea pink - - - - - - - - - - - - - - - - - - - - - - - - corolla cupulate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence light brown - - - - - - - - - - - - - - - - - - - - - - - - gynoecium immature - - - - - - - - androecium arrested - - true - - - - - - - - androecium offset quality - - true - - - - - - - - - - - - - - - - - - - - - - - - corolla spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - peduncle scalloped - - - - - - - - - - - - - - - - - - - - - - - - filament convex - - - - - - - - - - - - - - - - - - - - - - - - lenticel tapered - - - - - - - - - - - - - - - - - - - - - - - - stem base glabrous - - - - - - - - - - - - - - - - - - - - - - - - stem base pilosity - - - - - - - - - - - - - - - - - - - - - - - - raphe glabrous - - - - - - - - - - - - - - - - - - - - - - - - raphe pilosity - - - - - - - - inflorescence variability - true - - - - - - - - - - - - - - - - - - - - - - - - pericarp crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - bract inflated - - - - - - - - - - - - - - - - - - - - - - - - bract structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - canal obtuse - - - - - - - - - - - - - - - - - - - - - - - - stalk blunt - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member sterile - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member fertility - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root simple - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root complexity - - - - - - - - - - - - - - - - - - - - - - - - root tip exserted - - - - - - - - - - - - - - - - - - - - - - - - involucre pedicellate - - - - - - - - - - - - - - - - - - - - - - - - crown root flattened - - - - - - - - - - - - - - - - - - - - - - - - crown root curvature - - - - - - - - - - - - - - - - - - - - - - - - nectary inserted into - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge exserted - - - - - - - - - - - - - - - - - - - - - - - - filament star shaped - - - - - - - - - - - - - - - - - - - - - - - - funicle yellow - - - - - - - - - - - - - - - - - - - - - - - - inflorescence cuspidate - - - - - - - - - - - - - - - - - - - - - - - - plant cell falciform - - - - - - - - - - - - - - - - - - - - - - - - ovary wall constricted - - - - - - - - - - - - - - - - - - - - - - - - keel lobed - - - - - - - - - - - - - - - - - - - - - - - - stem base present - - - - - - - - - - - - - - - - - - - - - - - - stem base amount - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex heart shaped - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - sepal evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - sepal shedability - - - - - - - - - - - - - - - - - - - - - - - - hilum increased thickness - - - - - - - - - - - - - - - - - - - - - - - - glume ventral to - - - - - - - - vegetative bud male - true - - - - - - - - vegetative bud phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - perisperm cylindrical - - - - - - - - - - - - - - - - - - - - - - - - perisperm convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell raised - - - - - - - - - - - - - - - - - - - - - - - - staminode acuminate - - - - - - - - shoot internode premature - true - - - - - - - - shoot internode onset quality - true - - - - - - - - receptacle down - true - - - - - - - - - - - - - - - - - - - - - - - - leaf scaly - - - - - - - - - - - - - - - - - - - - - - - - cotyledon cuneate - - - - - - - - - - - - - - - - - - - - - - - - anther theca fused with - - - - - - - - - - - - - - - - - - - - - - - - awn notched - - - - - - - - - - - - - - - - - - - - - - - - radicle lobed - - - - - - - - - - - - - - - - - - - - - - - - periderm obovate - - - - - - - - - - - - - - - - - - - - - - - - style inflexible - - - - - - - - - - - - - - - - - - - - - - - - androecium quadrangular - - - - - - - - - - - - - - - - - - - - - - - - valve area - - - - - - - - - - - - - - - - - - - - - - - - oil gland punctate - - - - - - - - - - - - - - - - - - - - - - - - testa undifferentiated - - - - - - - - - - - - - - - - - - - - - - - - testa cellular potency - - - - - - - - - - - - - - - - - - - - - - - - thorn spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem tomentose - - - - - - - - - - - - - - - - - - - - - - - - leaf base obtuse - - - - - - - - - - - - - - - - - - - - - - - - connective abaxial to - - - - - - - - - - - - - - - - - - - - - - - - receptacle mass - - - - - - - - - - - - - - - - - - - - - - - - prickle pedicellate - - - - - - - - - - - - - - - - - - - - - - - - prickle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - seed coat bitter - - - - - - - - - - - - - - - - - - - - - - - - seed coat flavor - - - - - - - - - - - - - - - - - - - - - - - - caruncle multifid - - - - - - - - - - - - - - - - - - - - - - - - glume size - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle divergent from - - - - - - - - - - - - - - - - - - - - - - - - thallus yellow - - - - - - - - - - - - - - - - - - - - - - - - style in contact with - - - - - - - - - - - - - - - - - - - - - - - - areole bud decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - areole bud thickness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence separated from - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein sterile - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein fertility - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence emarginate - - - - - - - - - - - - - - - - - - - - - - - - canal smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf digitate - - - - - - - - - - - - - - - - - - - - - - - - - awn flat - - - - - - - - - - - - - - - - - - - - - - - - inflorescence right - - - - - - - - - - - - - - - - - - - - - - - - - inflorescence rough - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein smooth - - - - - - - - - - - - - - - - - - - - - - - - upper glume tangled - - - - - - - - - - - - - - - - - - - - - - - - pulvinus elliptic - - - - - - - - - - - - - - - - - - - - - - - - pulvinus 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - epidermis translucent - - - - - - - - - - - - - - - - - - - - - - - - epidermis opacity - - - - - - - - - - - - - - - - - - - - - - - - spikelet caudate - - - - - - - - - - - - - - - - - - - - - - - - spikelet transparent - - - - - - - - - - - - - - - - - - - - - - - - spikelet opacity - - - - - - - - - - - - - - - - - - - - - - - - parenchyma obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf axil rhomboid - - - - - - - - - - - - - - - - - - - - - - - - seed trichome abaxial to - - - - - - - - nectary subacute - true - - - - - - - - nectary duration - true - - - - - - - - - - - - - - - - - - - - - - - - pollen spherical - - - - - - - - - - - - - - - - - - - - - - - - stalk opposite - - - - - - - - - - - - - - - - - - - - - - - - stem inflated - - - - - - - - - - - - - - - - - - - - - - - - keel area - - - - - - - - - - - - - - - - - - - - - - - - seed firm - - - - - - - - - - - - - - - - - - - - - - - - petiole light brown - - - - - - - - - - - - - - - - - - - - - - - - shoot internode oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower orange - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle ovate - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - style cupulate - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore split - - - - - - - - - - - - - - - - - - - - - - - - stem normal - - - - - - - - - - - - - - - - - - - - - - - - stem deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - inflorescence multiple - - - - - - - - - - - - - - - - - - - - - - - - heartwood decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - heartwood water composition - - - - - - - - - - - - - - - - - - - - - - - - pith basal to - - - - - - - - - - - - - - - - - - - - - - - - pith position - - - - - - - - inflorescence arrested - - true - - - - - - - - inflorescence offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - growth ring hairy - - - - - - - - - - - - - - - - - - - - - - - - stem back - - - - - - - - sheath cell premature - true - - - - - - - - sheath cell onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - stamen elongated - - - - - - - - - - - - - - - - - - - - - - - - bud flat - - - - - - - - - - - - - - - - - - - - - - - - seed open - - - - - - - - - - - - - - - - - - - - - - - - radicle direction - - - - - - - - - - - - - - - - - - - - - - - - locule adaxial to - - - - - - - - - - - - - - - - - - - - - - - - petiole level with - - - - - - - - - - - - - - - - - - - - - - - - branch ridged - - - - - - - - - - - - - - - - - - - - - - - - shoot internode flattened - - - - - - - - - - - - - - - - - - - - - - - - shoot internode curvature - - - - - - - - - - - - - - - - - - - - - - - - plant embryo autogenous - - - - - - - - - - - - - - - - - - - - - - - - plant embryo structure - - - - - - - - - - - - - - - - - - - - - - - - seed ridged - - - - - - - - - - - - - - - - - - - - - - - - petal condensed - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium axial to - - - - - - - - - - - - - - - - - - - - - - - - calyx yellow orange - - - - - - - - - - - - - - - - - - - - - - - - disk flower waxy - - - - - - - - - - - - - - - - - - - - - - - - disk flower waxiness - - - - - - - - - - - - - - - - - - - - - - - - ovary wall heart shaped - - - - - - - - - - - - - - - - - - - - - - - - whole plant spatulate - - - - - - - - - - - - - - - - - - - - - - - - sepal multifid - - - - - - - - - - - - - - - - - - - - - - - - calyx zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - keel protruding - - - - - - - - - - - - - - - - - - - - - - - - connective prominent - - - - - - - - - - - - - - - - - - - - - - - - plant cell glandular - - - - - - - - - - - - - - - - - - - - - - - - plant cell morphology - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - lemma adaxial to - - - - - - - - - - - - - - - - - - - - - - - - root tip broken - - - - - - - - - - - - - - - - - - - - - - - - root tip wholeness - - - - - - - - stamen down - true - - - - - - - - - - - - - - - - - - - - - - - - leaf apex size - - - - - - - - - - - - - - - - - - - - - - - - gynophore drooping - - - - - - - - - - - - - - - - - - - - - - - - stem base spatulate - - - - - - - - - - - - - - - - - - - - - - - - stem base 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pericarp present - - - - - - - - - - - - - - - - - - - - - - - - bud whorled - - - - - - - - - - - - - - - - - - - - - - - - - - - - plant structure phenotype - - - - - - - - - - - - - - - - - - - - - - - - plant structure quality - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome ivory - - - - - - - - - - - - - - - - - - - - - - - - terminal bud glabrous - - - - - - - - - - - - - - - - - - - - - - - - terminal bud pilosity - - - - - - - - - - - - - - - - - - - - - - - - hilum rough - - - - - - - - - - - - - - - - - - - - - - - - petal wrinkled - - - - - - - - - - - - - - - - - - - - - - - - apical hook furrowed - - - - - - - - - - - - - - - - - - - - - - - - staminode spatulate - - - - - - - - - - - - - - - - - - - - - - - - receptacle sigmoid - - - - - - - - - - - - - - - - - - - - - - - - seed trichome trilobed - - - - - - - - - - - - - - - - - - - - - - - - gynophore present - - - - - - - - - - - - - - - - - - - - - - - - thorn circular - - - - - - - - - - - - - - - - - - - - - - - - lamina normal - - - - - - - - - - - - - - - - - - - - - - - - lamina deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - growth ring spongy - - - - - - - - - - - - - - - - - - - - - - - - root raised - - - - - - - - - - - - - - - - - - - - - - - - flower grooved - - - - - - - - - - - - - - - - - - - - - - - - filament auriculate - - - - - - - - - - - - - - - - - - - - - - - - whole plant present - - - - - - - - - - - - - - - - - - - - - - - - petiole dispersed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence pale pink - - - - - - - - - - - - - - - - - - - - - - - - hilum proximal to - - - - - - - - - - - - - - - - - - - - - - - - anther yellow orange - - - - - - - - - - - - - - - - - - - - - - - - ligule present - - - - - - - - - - - - - - - - - - - - - - - - endocarp fused with - - - - - - - - - - - - - - - - - - - - - - - - short shoot pubescent - - - - - - - - - - - - - - - - - - - - - - - - short shoot maturity - - - - - - - - - - - - - - - - - - - - - - - - - - - - fused tepal phenotype - - - - - - - - - - - - - - - - - - - - - - - - fused tepal fused with - - - - - - - - - - - - - - - - - - - - - - - - fused tepal structure - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus purple - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus color - - - - - - - - - - - - - - - - - - - - - - - - infructescence congested - - - - - - - - - - - - - - - - - - - - - - - - pulvinus pedunculate - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath sparse - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - mesocarp maturity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis condensed - - - - - - - - - - - - - - - - - - - - - - - - sorus white - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium simple - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium complexity - - - - - - - - - - - - - - - - - - - - - - - - upper glume hispidulous - - - - - - - - - - - - - - - - - - - - - - - - tubercle young - - - - - - - - - - - - - - - - - - - - - - - - trichome actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - trichome radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - aril hard - - - - - - - - - - - - - - - - - - - - - - - - hilum furrowed - - - - - - - - - - - - - - - - - - - - - - - - seed trichome emarginate - - - - - - - - - - - - - - - - - - - - - - - - fruit semicircular - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril ovate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium drooping - - - - - - - - - - - - - - - - - - - - - - - - root tip fused with - - - - - - - - - - - - - - - - - - - - - - - - peristome lobed - - - - - - - - - - - - - - - - - - - - - - - - tuber warty - - - - - - - - gynoecium male - true - - - - - - - - - - - - - - - - - - - - - - - - stamen notched - - - - - - - - - - - - - - - - - - - - - - - - epicalyx purple - - - - - - - - - - - - - - - - - - - - - - - - palea laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - leaf ochre - - - - - - - - - - - - - - - - - - - - - - - - testa erect - - - - - - - - - - - - - - - - - - - - - - - - tuberous root fusiform - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein coiled - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein coiling - - - - - - - - - - - - - - - - - - - - - - - - pollen discoid - - - - - - - - - - - - - - - - - - - - - - - - trichome pointed - - - - - - - - - - - - - - - - - - - - - - - - fruit differentiated - - - - - - - - - - - - - - - - - - - - - - - - fruit cellular potency - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein fleshy - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein composition - - - - - - - - - - - - - - - - - - - - - - - - seed symmetrical - - - - - - - - - - - - - - - - - - - - - - - - shoot system inflexible - - - - - - - - - - - - - - - - - - - - - - - - shoot system flexibility - - - - - - - - - - - - - - - - - - - - - - - - epidermis increased thickness - - - - - - - - - - - - - - - - - - - - - - - - epidermis thickness - - - - - - - - seed acute - true - - - - - - - - seed duration - true - - - - - - - - - - - - - - - - - - - - - - - - endocarp adjacent to - - - - - - - - - - - - - - - - - - - - - - - - leaf fusiform - - - - - - - - - - - - - - - - - - - - - - - - seed horizontal - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis conical - - - - - - - - - - - - - - - - - - - - - - - - filament emarginate - - - - - - - - - - - - - - - - - - - - - - - - mesophyll linear - - - - - - - - - - - - - - - - - - - - - - - - petiole divergent from - - - - - - - - - - - - - - - - - - - - - - - - leaf margin adjacent to - - - - - - - - - - - - - - - - - - - - - - - - cotyledon wrinkled - - - - - - - - - - - - - - - - - - - - - - - - pistillode terminal - - - - - - - - - - - - - - - - - - - - - - - - disk flower tomentose - - - - - - - - - - - - - - - - - - - - - - - - branch aromatic - - - - - - - - - - - - - - - - - - - - - - - - branch aromaticity - - - - - - - - - - - - - - - - - - - - - - - - ligule opposite - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore swollen - - - - - - - - - - - - - - - - - - - - - - - - pistillode discoid - - - - - - - - - - - - - - - - - - - - - - - - stele involute - - - - - - - - - - - - - - - - - - - - - - - - simple leaf lateral to - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet distichous - - - - - - - - - - - - - - - - - - - - - - - - receptacle differentiated - - - - - - - - - - - - - - - - - - - - - - - - receptacle cellular potency - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence coiled - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence coiling - - - - - - - - - - - - - - - - - - - - - - - - stem square - - - - - - - - - - - - - - - - - - - - - - - - pedicel convex - - - - - - - - - - - - - - - - - - - - - - - - plumule inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - scutellar node grooved - - - - - - - - - - - - - - - - - - - - - - - - leaf axil glabrous - - - - - - - - - - - - - - - - - - - - - - - - tepal extends to - - - - - - - - - - - - - - - - - - - - - - - - upper glume convolute - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member smooth - - - - - - - - - - - - - - - - - - - - - - - - lamina fragile - - - - - - - - - - - - - - - - - - - - - - - - lamina fragility - - - - - - - - - - - - - - - - - - - - - - - - chalaza elliptic - - - - - - - - - - - - - - - - - - - - - - - - disk flower dorsal to - - - - - - - - - - - - - - - - - - - - - - - - infructescence tapered - - - - - - - - - - - - - - - - - - - - - - - - scutellar node arched - - - - - - - - - - - - - - - - - - - - - - - - crown root circular - - - - - - - - - - - - - - - - - - - - - - - - leaf base level with - - - - - - - - - - - - - - - - - - - - - - - - petiolule decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - petiolule water composition - - - - - - - - - - - - - - - - - - - - - - - - nectary attenuate - - - - - - - - - - - - - - - - - - - - - - - - tubercle dark brown - - - - - - - - - - - - - - - - - - - - - - - - whole plant whorled - - - - - - - - - - - - - - - - - - - - - - - - canal purple - - - - - - - - - - - - - - - - - - - - - - - - canal color - - - - - - - - - - - - - - - - - - - - - - - - apical hook star shaped - - - - - - - - - - - - - - - - - - - - - - - - seed trichome conical - - - - - - - - - - - - - - - - - - - - - - - - peduncle maroon - - - - - - - - - - - - - - - - - - - - - - - - bract symmetrical - - - - - - - - - - - - - - - - - - - - - - - - bract symmetry - - - - - - - - - - - - - - - - - - - - - - - - raphe red brown - - - - - - - - - - - - - - - - - - - - - - - - crown root split - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet constricted - - - - - - - - - - - - - - - - - - - - - - - - stalk grooved - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem falciform - - - - - - - - - - - - - - - - - - - - - - - - sorus confluent with - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member cauline to - - - - - - - - - - - - - - - - - - - - - - - - aril hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - aril volume - - - - - - - - - - - - - - - - - - - - - - - - mesocarp separating - - - - - - - - - - - - - - - - - - - - - - - - involucre crowded - - - - - - - - - - - - - - - - - - - - - - - - perianth hollow - - - - - - - - - - - - - - - - - - - - - - - - costa dorsal to - - - - - - - - - - - - - - - - - - - - - - - - scutellar node sterile - - - - - - - - - - - - - - - - - - - - - - - - scutellar node fertility - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus opposite - - - - - - - - - - - - - - - - - - - - - - - - trichome pinnate - - - - - - - - - - - - - - - - - - - - - - - - petiole bronze - - - - - - - - - - - - - - - - - - - - - - - - seed trichome ochre - - - - - - - - - - - - - - - - - - - - - - - - exocarp bilobed - - - - - - - - - - - - - - - - - - - - - - - - pappus elongated - - - - - - - - - - - - - - - - - - - - - - - - epicotyl branched - - - - - - - - - - - - - - - - - - - - - - - - epicotyl branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaf height - - - - - - - - - - - - - - - - - - - - - - - - testa areolate - - - - - - - - - - - - - - - - - - - - - - - - calyx adhesive - - - - - - - - - - - - - - - - - - - - - - - - calyx adhesivity - - - - - - - - - - - - - - - - - - - - - - - - crown root grooved - - - - - - - - - - - - - - - - - - - - - - - - petiole margin dark green - - - - - - - - - - - - - - - - - - - - - - - - sepal yellow - - - - - - - - - - - - - - - - - - - - - - - - valve basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein curved - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein curvature - - - - - - - - - - - - - - - - - - - - - - - - stalk fused with - - - - - - - - - - - - - - - - - - - - - - - - style spongy - - - - - - - - - - - - - - - - - - - - - - - - pericarp dark red - - - - - - - - - - - - - - - - - - - - - - - - sepal symmetrical - - - - - - - - - - - - - - - - - - - - - - - - sepal symmetry - - - - - - - - - - - - - - - - - - - - - - - - tubercle arched - - - - - - - - - - - - - - - - - - - - - - - - anther theca clavate - - - - - - - - - - - - - - - - - - - - - - - - anther theca concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence scaly - - - - - - - - - - - - - - - - - - - - - - - - inflorescence area - - - - - - - - - - - - - - - - - - - - - - - - - stamen heart shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf apex texture - - - - - - - - - - - - - - - - - - - - - - - - pedicel warty - - - - - - - - - - - - - - - - - - - - - - - - stele autogenous - - - - - - - - - - - - - - - - - - - - - - - - stele structure - - - - - - - - - - - - - - - - - - - - - - - - leaf base linear - - - - - - - - - - - - - - - - - - - - - - - - filament grey - - - - - - - - - - - - - - - - - - - - - - - - flower convolute - - - - - - - - - - - - - - - - - - - - - - - - stigma obovate - - - - - - - - - - - - - - - - - - - - - - - - nectary dark brown - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina reniform - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina concave 3-D shape - - - - - - - - tepal hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - leaf lobate - - - - - - - - - - - - - - - - - - - - - - - - stalk furrowed - - - - - - - - - - - - - - - - - - - - - - - - ligule alternate placement - - - - - - - - - - - - - - - - - - - - - - - - ligule spatial pattern - - - - - - - - megaspore up - true - - - - - - - - - - - - - - - - - - - - - - - - megaspore direction - - - - - - - - - - - - - - - - - - - - - - - - bracteole pedunculate - - - - - - - - - - - - - - - - - - - - - - - - bark opaque - - - - - - - - - - - - - - - - - - - - - - - - stolon simple - - - - - - - - - - - - - - - - - - - - - - - - stolon complexity - - - - - - - - - - - - - - - - - - - - - - - - banner petal conical - - - - - - - - - - - - - - - - - - - - - - - - shoot internode condensed - - - - - - - - - - - - - - - - - - - - - - - - banner petal spatulate - - - - - - - - - - - - - - - - - - - - - - - - branch indurated - - - - - - - - - - - - - - - - - - - - - - - - growth ring divergent from - - - - - - - - - - - - - - - - - - - - - - - - crown root tomentose - - - - - - - - - - - - - - - - - - - - - - - - root absent - - - - - - - - - - - - - - - - - - - - - - - - stalk brown - - - - - - - - - - - - - - - - - - - - - - - - shoot apex spongy - - - - - - - - - - - - - - - - - - - - - - - - corolla distributed - - - - - - - - - - - - - - - - - - - - - - - - coma simple - - - - - - - - - - - - - - - - - - - - - - - - coma complexity - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet slit-like - - - - - - - - - - - - - - - - - - - - - - - - periderm red brown - - - - - - - - - - - - - - - - - - - - - - - - epidermis ventral to - - - - - - - - - - - - - - - - - - - - - - - - pericarp punctiform - - - - - - - - - - - - - - - - - - - - - - - - sepal decussate - - - - - - - - - - - - - - - - - - - - - - - - peristome light green - - - - - - - - - - - - - - - - - - - - - - - - mesocarp inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - androecium cleft - - - - - - - - - - - - - - - - - - - - - - - - seed oriented - - - - - - - - - - - - - - - - - - - - - - - - upper glume circular - - - - - - - - - - - - - - - - - - - - - - - - funicle erect - - - - - - - - - - - - - - - - - - - - - - - - leaf tip involute - - - - - - - - - - - - - - - - - - - - - - - - leaf tip shape - - - - - - - - - - - - - - - - - - - - - - - - valve pointed - - - - - - - - - - - - - - - - - - - - - - - - pericarp size - - - - - - - - - - - - - - - - - - - - - - - - spikelet mature - - - - - - - - - - - - - - - - - - - - - - - - stigma acuminate - - - - - - - - - - - - - - - - - - - - - - - - parenchyma obovate - - - - - - - - - - - - - - - - - - - - - - - - parenchyma convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - bract retuse - - - - - - - - - - - - - - - - - - - - - - - - endocarp firm - - - - - - - - - - - - - - - - - - - - - - - - coma hairy - - - - - - - - - - - - - - - - - - - - - - - - tubercle distance - - - - - - - - - - - - - - - - - - - - - - - - fruit glutinous - - - - - - - - - - - - - - - - - - - - - - - - fruit amylose composition - - - - - - - - - - - - - - - - - - - - - - - - awn present - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge concave - - - - - - - - - - - - - - - - - - - - - - - - tepal subulate - - - - - - - - - - - - - - - - - - - - - - - - epidermis diameter - - - - - - - - - - - - - - - - - - - - - - - - valve ornamented - - - - - - - - - - - - - - - - - - - - - - - - valve surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge smooth - - - - - - - - - - - - - - - - - - - - - - - - filament constricted - - - - - - - - - - - - - - - - - - - - - - - - involucre funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - coma dark brown - - - - - - - - - - - - - - - - - - - - - - - - stigma viscous - - - - - - - - - - - - - - - - - - - - - - - - stigma viscosity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence neoplastic, spontaneous - - - - - - - - - - - - - - - - - - - - - - - - prickle ovate - - - - - - - - - - - - - - - - - - - - - - - - style setose - - - - - - - - - - - - - - - - - - - - - - - - pollen brown - - - - - - - - - - - - - - - - - - - - - - - - exocarp soft - - - - - - - - - - - - - - - - - - - - - - - - involucre inflated - - - - - - - - - - - - - - - - - - - - - - - - involucre structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - connective blunt - - - - - - - - - - - - - - - - - - - - - - - - epicotyl decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium whorled - - - - - - - - - - - - - - - - - - - - - - - - tuber horizontal - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet convolute - - - - - - - - - - - - - - - - - - - - - - - - aril horizontal - - - - - - - - - - - - - - - - - - - - - - - - style offset - - - - - - - - - - - - - - - - - - - - - - - - plant embryo spherical - - - - - - - - - - - - - - - - - - - - - - - - cotyledon undulate - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore linear - - - - - - - - - - - - - - - - - - - - - - - - costa dark green - - - - - - - - - - - - - - - - - - - - - - - - bracteole surrounding - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence whorled - - - - - - - - - - - - - - - - - - - - - - - - fruit axial to - - - - - - - - - - - - - - - - - - - - - - - - androecium curved - - - - - - - - - - - - - - - - - - - - - - - - peduncle firm - - - - - - - - - - - - - - - - - - - - - - - - fruit prolate - - - - - - - - - - - - - - - - - - - - - - - - mesophyll subulate - - - - - - - - - - - - - - - - - - - - - - - - pseudostem glabrous - - - - - - - - - - - - - - - - - - - - - - - - pseudostem pilosity - - - - - - - - - - - - - - - - - - - - - - - - branch evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - branch shedability - - - - - - - - - - - - - - - - - - - - - - - - tuber black - - - - - - - - - - - - - - - - - - - - - - - - staminode fused with - - - - - - - - - - - - - - - - - - - - - - - - sepal anterior to - - - - - - - - - - - - - - - - - - - - - - - - heartwood glabrous - - - - - - - - - - - - - - - - - - - - - - - - heartwood pilosity - - - - - - - - - - - - - - - - - - - - - - - - stem asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - petiole multicellular - - - - - - - - - - - - - - - - - - - - - - - - petiole cellularity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system revolute - - - - - - - - - - - - - - - - - - - - - - - - petiolule distal to - - - - - - - - - - - - - - - - - - - - - - - - anther distance - - - - - - - - - - - - - - - - - - - - - - - - aril linear - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue fused with - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus linear - - - - - - - - - - - - - - - - - - - - - - - - androecium pubescent - - - - - - - - - - - - - - - - - - - - - - - - androecium maturity - - - - - - - - - - - - - - - - - - - - - - - - pedicel aggregated - - - - - - - - - - - - - - - - - - - - - - - - thorn dentated - - - - - - - - - - - - - - - - - - - - - - - - pericarp prostrate - - - - - - - - - - - - - - - - - - - - - - - - bud maroon - - - - - - - - - - - - - - - - - - - - - - - - stipule increased size - - - - - - - - - - - - - - - - - - - - - - - - stipule size - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure arched - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet punctiform - - - - - - - - - - - - - - - - - - - - - - - - branch spongy - - - - - - - - - - - - - - - - - - - - - - - - leaf parallel-sided - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf spherical - - - - - - - - - - - - - - - - - - - - - - - - seed scalloped - - - - - - - - - - - - - - - - - - - - - - - - stem base dense - - - - - - - - - - - - - - - - - - - - - - - - stem base mass density - - - - - - - - - - - - - - - - - - - - - - - - petal extends to - - - - - - - - - - - - - - - - - - - - - - - - anther kinked - - - - - - - - - - - - - - - - - - - - - - - - cladode terminal - - - - - - - - - - - - - - - - - - - - - - - - cladode position - - - - - - - - - - - - - - - - - - - - - - - - trichome foveate - - - - - - - - - - - - - - - - - - - - - - - - seed circumference - - - - - - - - - - - - - - - - - - - - - - - - lamina crowded - - - - - - - - - - - - - - - - - - - - - - - - gynoecium curved - - - - - - - - - - - - - - - - - - - - - - - - awn simple - - - - - - - - - - - - - - - - - - - - - - - - awn complexity - - - - - - - - - - - - - - - - - - - - - - - - petiole sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus obovate - - - - - - - - leaf tip acute - true - - - - - - - - leaf tip duration - true - - - - - - - - - - - - - - - - - - - - - - - - receptacle hollow - - - - - - - - - - - - - - - - - - - - - - - - involucre curled - - - - - - - - - - - - - - - - - - - - - - - - leaf apex cuneate - - - - - - - - - - - - - - - - - - - - - - - - epidermis dark purple - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - corolla arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - arillode smooth - - - - - - - - - - - - - - - - - - - - - - - - arillode texture - - - - - - - - - - - - - - - - - - - - - - - - seed tapered - - - - - - - - - - - - - - - - - - - - - - - - lemma lobed - - - - - - - - - - - - - - - - - - - - - - - - prophyll simple - - - - - - - - - - - - - - - - - - - - - - - - prophyll complexity - - - - - - - - - - - - - - - - - - - - - - - - shoot system concave - - - - - - - - - - - - - - - - - - - - - - - - anther warty - - - - - - - - - - - - - - - - - - - - - - - - costa distance - - - - - - - - - - - - - - - - - - - - - - - - leaf base white - - - - - - - - - - - - - - - - - - - - - - - - inflorescence left - - - - - - - - - - - - - - - - - - - - - - - - - septum dense - - - - - - - - - - - - - - - - - - - - - - - - septum mass density - - - - - - - - - - - - - - - - - - - - - - - - infructescence decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - stigma asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - central zone heart shaped - - - - - - - - - - - - - - - - - - - - - - - - central zone concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - peristome red brown - - - - - - - - - - - - - - - - - - - - - - - - stolon edible - - - - - - - - - - - - - - - - - - - - - - - - stolon edibility - - - - - - - - - - - - - - - - - - - - - - - - tubercle warty - - - - - - - - - - - - - - - - - - - - - - - - mesocarp red brown - - - - - - - - - - - - - - - - - - - - - - - - seed operculum increased length - - - - - - - - - - - - - - - - - - - - - - - - seed operculum length - - - - - - - - - - - - - - - - - - - - - - - - costa flattened - - - - - - - - - - - - - - - - - - - - - - - - corolla normal - - - - - - - - - - - - - - - - - - - - - - - - corolla deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - receptacle subulate - - - - - - - - - - - - - - - - - - - - - - - - petiole margin prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf split - - - - - - - - - - - - - - - - - - - - - - - - stele kinked - - - - - - - - - - - - - - - - - - - - - - - - apical hook osseous - - - - - - - - - - - - - - - - - - - - - - - - aril truncated - - - - - - - - leaf continuous - true - - - - - - - - leaf occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf ovate - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle spatulate - - - - - - - - - - - - - - - - - - - - - - - - perianth raised - - - - - - - - - - - - - - - - - - - - - - - - coma attached to - - - - - - - - - - - - - - - - - - - - - - - - coma attachment quality - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal adaxial to - - - - - - - - - - - - - - - - - - - - - - - - pedicel indurated - - - - - - - - - - - - - - - - - - - - - - - - arilloid circular - - - - - - - - - - - - - - - - - - - - - - - - arilloid 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx width - - - - - - - - - - - - - - - - - - - - - - - - corolla cuneate - - - - - - - - - - - - - - - - - - - - - - - - receptacle rough - - - - - - - - - - - - - - - - - - - - - - - - carpel tomentose - - - - - - - - - - - - - - - - - - - - - - - - leaf complex - - - - - - - - - - - - - - - - - - - - - - - - connective dark blue - - - - - - - - - - - - - - - - - - - - - - - - spikelet present - - - - - - - - - - - - - - - - - - - - - - - - resin canal coating - - - - - - - - - - - - - - - - - - - - - - - - leaf hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - leaf volume - - - - - - - - - - - - - - - - - - - - - - - - corolla glistening - - - - - - - - - - - - - - - - - - - - - - - - corolla reflectivity - - - - - - - - - - - - - - - - - - - - - - - - connective vertical - - - - - - - - - - - - - - - - - - - - - - - - tubercle constricted - - - - - - - - - - - - - - - - - - - - - - - - prickle soft - - - - - - - - - - - - - - - - - - - - - - - - prickle hardness - - - - - - - - - - - - - - - - - - - - - - - - lamina flush - - - - - - - - - - - - - - - - - - - - - - - - growth ring fleshy - - - - - - - - - - - - - - - - - - - - - - - - growth ring composition - - - - - - - - - - - - - - - - - - - - - - - - stipule cuneate - - - - - - - - - - - - - - - - - - - - - - - - perisperm curved - - - - - - - - - - - - - - - - - - - - - - - - perisperm curvature - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl terminal - - - - - - - - - - - - - - - - - - - - - - - - spikelet confluent with - - - - - - - - - - - - - - - - - - - - - - - - style spatulate - - - - - - - - - - - - - - - - - - - - - - - - bracteole robust - - - - - - - - - - - - - - - - - - - - - - - - epidermis spherical - - - - - - - - - - - - - - - - - - - - - - - - bulb ovate - - - - - - - - mesocarp up - true - - - - - - - - - - - - - - - - - - - - - - - - mesocarp direction - - - - - - - - - - - - - - - - - - - - - - - - exotesta red - - - - - - - - - - - - - - - - - - - - - - - - stigma red brown - - - - - - - - - - - - - - - - - - - - - - - - testa opposite - - - - - - - - - - - - - - - - - - - - - - - - ligule broken - - - - - - - - - - - - - - - - - - - - - - - - papilla cell foveate - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber smooth - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber texture - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract swollen - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract structure - - - - - - - - - - - - - - - - - - - - - - - - axil punctate - - - - - - - - - - - - - - - - - - - - - - - - spikelet pointed - - - - - - - - - - - - - - - - - - - - - - - - carpel lobed - - - - - - - - - - - - - - - - - - - - - - - - micropyle orange - - - - - - - - - - - - - - - - - - - - - - - - corolla distal to - - - - - - - - - - - - - - - - - - - - - - - - mesophyll differentiated - - - - - - - - - - - - - - - - - - - - - - - - mesophyll cellular potency - - - - - - - - - - - - - - - - - - - - - - - - valve erect - - - - - - - - - - - - - - - - - - - - - - - - funicle fleshy - - - - - - - - sepal margin female - true - - - - - - - - sepal margin phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - locule aromatic - - - - - - - - - - - - - - - - - - - - - - - - locule aromaticity - - - - - - - - stem premature - true - - - - - - - - stem onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - heartwood dark brown - - - - - - - - - - - - - - - - - - - - - - - - endosperm ridged - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet divergent from - - - - - - - - - - - - - - - - - - - - - - - - petiole granular - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system conical - - - - - - - - - - - - - - - - - - - - - - - - leaf adjacent to - - - - - - - - - - - - - - - - - - - - - - - - placenta clavate - - - - - - - - - - - - - - - - - - - - - - - - awn cylindrical - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus condensed - - - - - - - - - - - - - - - - - - - - - - - - resin canal increased length - - - - - - - - - - - - - - - - - - - - - - - - resin canal length - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure coiled - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure coiling - - - - - - - - rhizome rate - true - - - - - - - - - - - - - - - - - - - - - - - - stalk spongy - - - - - - - - - - - - - - - - - - - - - - - - anther V-shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot system increased length - - - - - - - - - - - - - - - - - - - - - - - - shoot system length - - - - - - - - - - - - - - - - - - - - - - - - carpel cleft - - - - - - - - - - - - - - - - - - - - - - - - prickle orbicular - - - - - - - - - - - - - - - - - - - - - - - - sapwood pale pink - - - - - - - - - - - - - - - - - - - - - - - - crown root bifurcated - - - - - - - - petiole phase - true - - - - - - - - sepal hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle increased size - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle size - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle obtuse - - - - - - - - - - - - - - - - - - - - - - - - crown root glandular - - - - - - - - - - - - - - - - - - - - - - - - crown root morphology - - - - - - - - - - - - - - - - - - - - - - - - stele ventral to - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein undulate - - - - - - - - - - - - - - - - - - - - - - - - stalk black - - - - - - - - - - - - - - - - - - - - - - - - micropyle circular - - - - - - - - - - - - - - - - - - - - - - - - leaf punctiform - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium rough - - - - - - - - - - - - - - - - - - - - - - - - sheath cell exserted - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell sterile - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell fertility - - - - - - - - - - - - - - - - - - - - - - - - oil gland circular - - - - - - - - - - - - - - - - - - - - - - - - carpel laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - bark obovate - - - - - - - - - - - - - - - - - - - - - - - - funicle separated from - - - - - - - - - - - - - - - - - - - - - - - - glume fused with - - - - - - - - - - - - - - - - - - - - - - - - petal protruding - - - - - - - - - - - - - - - - - - - - - - - - filament anterior to - - - - - - - - - - - - - - - - - - - - - - - - stigma upturned - - - - - - - - - - - - - - - - - - - - - - - - bract whole - - - - - - - - - - - - - - - - - - - - - - - - gynoecium level with - - - - - - - - - - - - - - - - - - - - - - - - endosperm abaxial to - - - - - - - - - - - - - - - - - - - - - - - - tubercle pedicellate - - - - - - - - - - - - - - - - - - - - - - - - tubercle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - thallus undulate - - - - - - - - - - - - - - - - - - - - - - - - involucre truncated - - - - - - - - - - - - - - - - - - - - - - - - banner petal arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - leaf base fused with - - - - - - - - - - - - - - - - - - - - - - - - axil concave - - - - - - - - - - - - - - - - - - - - - - - - carpel inflated - - - - - - - - - - - - - - - - - - - - - - - - carpel structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - glume overlapping - - - - - - - - - - - - - - - - - - - - - - - - radicle oriented - - - - - - - - - - - - - - - - - - - - - - - - spikelet inflexible - - - - - - - - - - - - - - - - - - - - - - - - spikelet flexibility - - - - - - - - - - - - - - - - - - - - - - - - bracteole abaxial to - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf basal to - - - - - - - - - - - - - - - - - - - - - - - - receptacle bilateral - - - - - - - - - - - - - - - - - - - - - - - - style sutured to - - - - - - - - - - - - - - - - - - - - - - - - stem barred - - - - - - - - - - - - - - - - - - - - - - - - stele branched - - - - - - - - - - - - - - - - - - - - - - - - stele branchiness - - - - - - - - - - - - - - - - - - - - - - - - pappus inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - locule asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - locule symmetry - - - - - - - - - - - - - - - - - - - - - - - - axil serrated - - - - - - - - - - - - - - - - - - - - - - - - receptacle umbonate - - - - - - - - - - - - - - - - - - - - - - - - pistillode triangular - - - - - - - - - - - - - - - - - - - - - - - - short shoot present - - - - - - - - - - - - - - - - - - - - - - - - short shoot amount - - - - - - - - - - - - - - - - - - - - - - - - sheath cell furrowed - - - - - - - - - - - - - - - - - - - - - - - - gynophore hispid - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma smooth - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma texture - - - - - - - - - - - - - - - - - - - - - - - - epicalyx red - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet cut - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract leaf-like - - - - - - - - - - - - - - - - - - - - - - - - connective sinuous - - - - - - - - - - - - - - - - - - - - - - - - aril opaque - - - - - - - - - - - - - - - - - - - - - - - - hilum warty - - - - - - - - - - - - - - - - - - - - - - - - oil gland obovate - - - - - - - - - - - - - - - - - - - - - - - - branch offset - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf obovate - - - - - - - - - - - - - - - - - - - - - - - - petal red - - - - - - - - - - - - - - - - - - - - - - - - seed T-shaped - - - - - - - - - - - - - - - - - - - - - - - - ligule sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - leaflet crowded - - - - - - - - - - - - - - - - - - - - - - - - rhizome oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaflet grey - - - - - - - - - - - - - - - - - - - - - - - - tubercle pinnate - - - - - - - - - - - - - - - - - - - - - - - - seed coat attached to - - - - - - - - - - - - - - - - - - - - - - - - seed coat attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stipule wrinkled - - - - - - - - - - - - - - - - - - - - - - - - inflorescence viscid - - - - - - - - - - - - - - - - - - - - - - - - bud sinuous - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel simple - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel complexity - - - - - - - - - - - - - - - - - - - - - - - - nectary brittle - - - - - - - - - - - - - - - - - - - - - - - - valve attenuate - - - - - - - - - - - - - - - - - - - - - - - - papilla cell striated - - - - - - - - - - - - - - - - - - - - - - - - anther theca conical - - - - - - - - - - - - - - - - - - - - - - - - stem scaly - - - - - - - - - - - - - - - - - - - - - - - - axillary bud acuminate - - - - - - - - - - - - - - - - - - - - - - - - flower scaly - - - - - - - - - - - - - - - - - - - - - - - - valve whole - - - - - - - - - - - - - - - - - - - - - - - - valve wholeness - - - - - - - - - - - - - - - - - - - - - - - - peduncle broken - - - - - - - - - - - - - - - - - - - - - - - - peduncle wholeness - - - - - - - - - - - - - - - - - - - - - - - - endocarp size - - - - - - - - - - - - - - - - - - - - - - - - seed mottled - - - - - - - - - - - - - - - - - - - - - - - - antiraphe yellow - - - - - - - - - - - - - - - - - - - - - - - - flower unbranched - - - - - - - - - - - - - - - - - - - - - - - - mesophyll revolute - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell autogenous - - - - - - - - - - - - - - - - - - - - - - - - carpel size - - - - - - - - - - - - - - - - - - - - - - - - root tip dispersed - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - tepal orange - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell thickness - - - - - - - - - - - - - - - - - - - - - - - - juice sac circular - - - - - - - - - - - - - - - - - - - - - - - - scutellar node edible - - - - - - - - - - - - - - - - - - - - - - - - scutellar node edibility - - - - - - - - - - - - - - - - - - - - - - - - seed oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - pedicel dark red - - - - - - - - - - - - - - - - - - - - - - - - mesocarp pubescent - - - - - - - - - - - - - - - - - - - - - - - - pulvinus simple - - - - - - - - - - - - - - - - - - - - - - - - pulvinus complexity - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - axil bent - - - - - - - - - - - - - - - - - - - - - - - - lower glume flattened - - - - - - - - - - - - - - - - - - - - - - - - stigma notched - - - - - - - - - - - - - - - - - - - - - - - - flower laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - stamen orbicular - - - - - - - - - - - - - - - - - - - - - - - - plant cell oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - seed exposed - - - - - - - - - - - - - - - - - - - - - - - - keel yellow brown - - - - - - - - - - - - - - - - - - - - - - - - radicle involute - - - - - - - - - - - - - - - - - - - - - - - - fruit sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - carpel straight - - - - - - - - - - - - - - - - - - - - - - - - heartwood erect - - - - - - - - - - - - - - - - - - - - - - - - ray system erect - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina setose - - - - - - - - - - - - - - - - - - - - - - - - prophyll sterile - - - - - - - - - - - - - - - - - - - - - - - - prophyll fertility - - - - - - - - - - - - - - - - - - - - - - - - pistillode inflexible - - - - - - - - - - - - - - - - - - - - - - - - pistillode flexibility - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root broken - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root wholeness - - - - - - - - - - - - - - - - - - - - - - - - keel rough - - - - - - - - - - - - - - - - - - - - - - - - columella osseous - - - - - - - - - - - - - - - - - - - - - - - - flower dry - - - - - - - - - - - - - - - - - - - - - - - - flower wetness - - - - - - - - - - - - - - - - - - - - - - - - trichome decumbent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle ornamentation - - - - - - - - - - - - - - - - - - - - - - - - sepal hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - sepal volume - - - - - - - - root premature - true - - - - - - - - root onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - seed trichome notched - - - - - - - - - - - - - - - - - - - - - - - - testa attenuate - - - - - - - - - - - - - - - - - - - - - - - - pollen linear - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf unilateral - - - - - - - - - - - - - - - - - - - - - - - - calyx symmetrical - - - - - - - - - - - - - - - - - - - - - - - - placenta hard - - - - - - - - - - - - - - - - - - - - - - - - placenta hardness - - - - - - - - - - - - - - - - - - - - - - - - sorus oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell viscous - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell viscosity - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell pubescent - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell maturity - - - - - - - - - - - - - - - - - - - - - - - - apical hook offset - - - - - - - - - - - - - - - - - - - - - - - - stalk area - - - - - - - - - - - - - - - - - - - - - - - - parenchyma ventral to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system kinked - - - - - - - - - - - - - - - - - - - - - - - - testa whole - - - - - - - - - - - - - - - - - - - - - - - - testa wholeness - - - - - - - - - - - - - - - - - - - - - - - - tubercle decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - tubercle water composition - - - - - - - - - - - - - - - - - - - - - - - - leaflet absent - - - - - - - - - - - - - - - - - - - - - - - - axil robust - - - - - - - - - - - - - - - - - - - - - - - - branch slit-like - - - - - - - - - - - - - - - - - - - - - - - - leaf axil pink - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system inflexible - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system flexibility - - - - - - - - - - - - - - - - - - - - - - - - pericarp mature - - - - - - - - - - - - - - - - - - - - - - - - micropyle increased length - - - - - - - - - - - - - - - - - - - - - - - - micropyle length - - - - - - - - - - - - - - - - - - - - - - - - aril viscous - - - - - - - - - - - - - - - - - - - - - - - - aril viscosity - - - - - - - - - - - - - - - - - - - - - - - - valve parallel to - - - - - - - - - - - - - - - - - - - - - - - - stalk star shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma dark brown - - - - - - - - - - - - - - - - - - - - - - - - stem abaxial to - - - - - - - - - - - - - - - - - - - - - - - - shoot apex multi-colored - - - - - - - - - - - - - - - - - - - - - - - - infructescence absent - - - - - - - - - - - - - - - - - - - - - - - - stamen offset - - - - - - - - - - - - - - - - - - - - - - - - mesocarp ovate - - - - - - - - - - - - - - - - - - - - - - - - hilum branched - - - - - - - - - - - - - - - - - - - - - - - - hilum branchiness - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal conspicuous - - - - - - - - - - - - - - - - - - - - - - - - stalk separating - - - - - - - - - - - - - - - - - - - - - - - - peristome area - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium reniform - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - petiole erose - - - - - - - - - - - - - - - - - - - - - - - - hypanthium erect - - - - - - - - - - - - - - - - - - - - - - - - upper glume warty - - - - - - - - - - - - - - - - - - - - - - - - pericarp vertical - - - - - - - - - - - - - - - - - - - - - - - - carpel smooth - - - - - - - - - - - - - - - - - - - - - - - - peristome absent - - - - - - - - - - - - - - - - - - - - - - - - peristome amount - - - - - - - - - - - - - - - - - - - - - - - - leaflet distance - - - - - - - - - - - - - - - - - - - - - - - - ovary wall upturned - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl spherical - - - - - - - - - - - - - - - - - - - - - - - - extrafloral nectary basal to - - - - - - - - - - - - - - - - - - - - - - - - extrafloral nectary position - - - - - - - - - - - - - - - - - - - - - - - - axil scaly - - - - - - - - - - - - - - - - - - - - - - - - arilloid elliptic - - - - - - - - - - - - - - - - - - - - - - - - banner petal concave - - - - - - - - - - - - - - - - - - - - - - - - stereome transparent - - - - - - - - - - - - - - - - - - - - - - - - pericarp attenuate - - - - - - - - - - - - - - - - - - - - - - - - pedicel flexible - - - - - - - - - - - - - - - - - - - - - - - - leaf hispidulous - - - - - - - - - - - - - - - - - - - - - - - - aril aromatic - - - - - - - - - - - - - - - - - - - - - - - - aril aromaticity - - - - - - - - - - - - - - - - - - - - - - - - gynophore elongated - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus raised - - - - - - - - - - - - - - - - - - - - - - - - testa unicellular - - - - - - - - - - - - - - - - - - - - - - - - testa cellularity - - - - - - - - - - - - - - - - - - - - - - - - axil orange - - - - - - - - - - - - - - - - - - - - - - - - androecium auriculate - - - - - - - - - - - - - - - - - - - - - - - - stipule herbaceous - - - - - - - - - - - - - - - - - - - - - - - - stipule shedability - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle V-shaped - - - - - - - - - - - - - - - - - - - - - - - - upper glume flattened - - - - - - - - - - - - - - - - - - - - - - - - pericarp triangular - - - - - - - - - - - - - - - - - - - - - - - - vascular system slit-like - - - - - - - - - - - - - - - - - - - - - - - - vascular system shape - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle ochre - - - - - - - - - - - - - - - - - - - - - - - - gynophore purple - - - - - - - - - - - - - - - - - - - - - - - - sepal width - - - - - - - - prickle acute - true - - - - - - - - prickle duration - true - - - - - - - - - - - - - - - - - - - - - - - - awn involute - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore ventral to - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus basal to - - - - - - - - leaf lamina subacute - true - - - - - - - - - - - - - - - - - - - - - - - - lamina differentiated - - - - - - - - - - - - - - - - - - - - - - - - lamina cellular potency - - - - - - - - - - - - - - - - - - - - - - - - perianth falciform - - - - - - - - - - - - - - - - - - - - - - - - petiolule purple - - - - - - - - - - - - - - - - - - - - - - - - upper glume granular - - - - - - - - - - - - - - - - - - - - - - - - gynophore glistening - - - - - - - - - - - - - - - - - - - - - - - - gynophore reflectivity - - - - - - - - - - - - - - - - - - - - - - - - valve glistening - - - - - - - - - - - - - - - - - - - - - - - - valve reflectivity - - - - - - - - - - - - - - - - - - - - - - - - mesophyll elliptic - - - - - - - - - - - - - - - - - - - - - - - - lower glume bulbous - - - - - - - - - - - - - - - - - - - - - - - - central zone subulate - - - - - - - - - - - - - - - - - - - - - - - - aril undivided - - - - - - - - leaf base acute - true - - - - - - - - leaf base duration - true - - - - - - - - - - - - - - - - - - - - - - - - sepal banded - - - - - - - - - - - - - - - - - - - - - - - - exocarp dark brown - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell basal to - - - - - - - - terminal bud up - true - - - - - - - - - - - - - - - - - - - - - - - - terminal bud direction - - - - - - - - - - - - - - - - - - - - - - - - flower distance - - - - - - - - - - - - - - - - - - - - - - - - ovary wall terminal - - - - - - - - - - - - - - - - - - - - - - - - bract convolute - - - - - - - - - - - - - - - - - - - - - - - - petiolule inflated - - - - - - - - - - - - - - - - - - - - - - - - petiolule structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - root tip arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - peduncle height - - - - - - - - - - - - - - - - - - - - - - - - placenta area - - - - - - - - - - - - - - - - - - - - - - - - bract axil normal - - - - - - - - - - - - - - - - - - - - - - - - bract axil deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - tepal spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - endosperm horizontal - - - - - - - - - - - - - - - - - - - - - - - - leaf elastic - - - - - - - - - - - - - - - - - - - - - - - - leaf elasticity - - - - - - - - - - - - - - - - - - - - - - - - simple leaf green - - - - - - - - - - - - - - - - - - - - - - - - integument punctate - - - - - - - - - - - - - - - - - - - - - - - - integument spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma elliptic - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stem light brown - - - - - - - - - - - - - - - - - - - - - - - - central zone inflated - - - - - - - - - - - - - - - - - - - - - - - - central zone structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - plant sap pubescent - - - - - - - - - - - - - - - - - - - - - - - - - plant sap maturity - - - - - - - - - - - - - - - - - - - - - - - - - connective distal to - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus cut - - - - - - - - - - - - - - - - - - - - - - - - rhizome ventral to - - - - - - - - - - - - - - - - - - - - - - - - nectary pubescent - - - - - - - - - - - - - - - - - - - - - - - - nectary maturity - - - - - - - - - - - - - - - - - - - - - - - - pedicel bent - - - - - - - - - - - - - - - - - - - - - - - - plant spore heart shaped - - - - - - - - - - - - - - - - - - - - - - - - banner petal spotted - - - - - - - - - - - - - - - - - - - - - - - - banner petal color pattern - - - - - - - - stalk hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - flower bud lanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower bud sharpness - - - - - - - - lemma continuous - true - - - - - - - - lemma occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - lemma split - - - - - - - - - - - - - - - - - - - - - - - - columella glabrous - - - - - - - - - - - - - - - - - - - - - - - - columella pilosity - - - - - - - - - - - - - - - - - - - - - - - - perianth maroon - - - - - - - - - - - - - - - - - - - - - - - - shoot internode subulate - - - - - - - - - - - - - - - - - - - - - - - - trichome tomentose - - - - - - - - peduncle premature - true - - - - - - - - peduncle onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium cupulate - - - - - - - - - - - - - - - - - - - - - - - - vascular system symmetrical - - - - - - - - - - - - - - - - - - - - - - - - vascular system symmetry - - - - - - - - - - - - - - - - - - - - - - - - hilum absent - - - - - - - - - - - - - - - - - - - - - - - - anther semicircular - - - - - - - - - - - - - - - - - - - - - - - - pedicel yellow brown - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem undulate - - - - - - - - - - - - - - - - - - - - - - - - rhizoid white - - - - - - - - - - - - - - - - - - - - - - - - rhizoid color - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril grooved - - - - - - - - - - - - - - - - - - - - - - - - calyx upturned - - - - - - - - - - - - - - - - - - - - - - - - pappus violet - - - - - - - - - - - - - - - - - - - - - - - - nectary swollen - - - - - - - - - - - - - - - - - - - - - - - - inflorescence mass - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue convex - - - - - - - - - - - - - - - - - - - - - - - - perianth non-functional - - - - - - - - - - - - - - - - - - - - - - - - axil undulate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract symmetrical - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract symmetry - - - - - - - - - - - - - - - - - - - - - - - - upper glume rugose - - - - - - - - - - - - - - - - - - - - - - - - upper glume surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - locule inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf tomentose - - - - - - - - - - - - - - - - - - - - - - - - root system glabrous - - - - - - - - - - - - - - - - - - - - - - - - root system pilosity - - - - - - - - - - - - - - - - - - - - - - - - anther folded - - - - - - - - - - - - - - - - - - - - - - - - prickle glistening - - - - - - - - - - - - - - - - - - - - - - - - prickle reflectivity - - - - - - - - - - - - - - - - - - - - - - - - phloem autogenous - - - - - - - - - - - - - - - - - - - - - - - - phloem structure - - - - - - - - - - - - - - - - - - - - - - - - endocarp open - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle distributed - - - - - - - - - - - - - - - - - - - - - - - - plant cell attenuate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium condensed - - - - - - - - - - - - - - - - - - - - - - - - septum fused with - - - - - - - - - - - - - - - - - - - - - - - - palea light green - - - - - - - - - - - - - - - - - - - - - - - - peduncle tight - - - - - - - - - - - - - - - - - - - - - - - - exocarp triangular - - - - - - - - - - - - - - - - - - - - - - - - fruit obtuse angle to - - - - - - - - - - - - - - - - - - - - - - - - anther theca basal to - - - - - - - - - - - - - - - - - - - - - - - - axil alternate placement - - - - - - - - - - - - - - - - - - - - - - - - seta lanceolate - - - - - - - - - - - - - - - - - - - - - - - - aril young - - - - - - - - - - - - - - - - - - - - - - - - aril age - - - - - - - - - - - - - - - - - - - - - - - - aril separated from - - - - - - - - - - - - - - - - - - - - - - - - seed height - - - - - - - - - - - - - - - - - - - - - - - - placenta brown - - - - - - - - - - - - - - - - - - - - - - - - petiole folded - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle multi-colored - - - - - - - - - - - - - - - - - - - - - - - - costa green - - - - - - - - - - - - - - - - - - - - - - - - filament mature - - - - - - - - - - - - - - - - - - - - - - - - lower glume triangular - - - - - - - - - - - - - - - - - - - - - - - - leaf base basal to - - - - - - - - - - - - - - - - - - - - - - - - hypanthium ridged - - - - - - - - - - - - - - - - - - - - - - - - plant callus flattened - - - - - - - - calyx arrested - true - - - - - - - - calyx offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - bract dry - - - - - - - - - - - - - - - - - - - - - - - - bract wetness - - - - - - - - - - - - - - - - - - - - - - - - filament brown - - - - - - - - - - - - - - - - - - - - - - - - valve cylindrical - - - - - - - - - - - - - - - - - - - - - - - - locule mature - - - - - - - - - - - - - - - - - - - - - - - - pericarp scrobiculate - - - - - - - - - - - - - - - - - - - - - - - - leaf margin ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf margin convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lemma prominent - - - - - - - - - - - - - - - - - - - - - - - - ligule orange - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel alternate placement - - - - - - - - - - - - - - - - - - - - - - - - prickle warty - - - - - - - - - - - - - - - - - - - - - - - - parenchyma old - - - - - - - - - - - - - - - - - - - - - - - - parenchyma age - - - - - - - - locule male - true - - - - - - - - - - - - - - - - - - - - - - - - branch surrounding - - - - - - - - - - - - - - - - - - - - - - - - endosperm spherical - - - - - - - - - - - - - - - - - - - - - - - - epidermis decreased thickness - - - - - - - - nectary up - true - - - - - - - - - - - - - - - - - - - - - - - - nectary direction - - - - - - - - - - - - - - - - - - - - - - - - bud yellow green - - - - - - - - - - - - - - - - - - - - - - - - mesocarp drooping - - - - - - - - - - - - - - - - - - - - - - - - prophyll opposite - - - - - - - - - - - - - - - - - - - - - - - - bract straight - - - - - - - - - - - - - - - - - - - - - - - - antiraphe acidic - - - - - - - - - - - - - - - - - - - - - - - - antiraphe medium acidity - - - - - - - - - - - - - - - - - - - - - - - - prickle split - - - - - - - - - - - - - - - - - - - - - - - - axil open - - - - - - - - - - - - - - - - - - - - - - - - axil closure - - - - - - - - - - - - - - - - - - - - - - - - periderm elliptic - - - - - - - - - - - - - - - - - - - - - - - - pulvinus vertical to - - - - - - - - - - - - - - - - - - - - - - - - corolla vermilion - - - - - - - - - - - - - - - - - - - - - - - - tubercle decreased amount - - - - - - - - - - - - - - - - - - - - - - - - nectary rectangular - - - - - - - - - - - - - - - - - - - - - - - - mesophyll increased length - - - - - - - - - - - - - - - - - - - - - - - - mesophyll length - - - - - - - - - - - - - - - - - - - - - - - - bud bifurcated - - - - - - - - - - - - - - - - - - - - - - - - seed vertical to - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member cuspidate - - - - - - - - - - - - - - - - - - - - - - - - plant cell spherical - - - - - - - - - - - - - - - - - - - - - - - - petiolule folded - - - - - - - - - - - - - - - - - - - - - - - - petiolule surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - parenchyma glandular - - - - - - - - - - - - - - - - - - - - - - - - parenchyma morphology - - - - - - - - - - - - - - - - - - - - - - - - pedicel normal - - - - - - - - - - - - - - - - - - - - - - - - pedicel deviation(from_normal) - - - - - - - - caruncle up - true - - - - - - - - - - - - - - - - - - - - - - - - caruncle direction - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system furrowed - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system texture - - - - - - - - petal continuous - true - - - - - - - - petal occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - carpel symmetrical - - - - - - - - - - - - - - - - - - - - - - - - carpel symmetry - - - - - - - - - - - - - - - - - - - - - - - - whole plant edible - - - - - - - - - - - - - - - - - - - - - - - - whole plant edibility - - - - - - - - - - - - - - - - - - - - - - - - epidermis complex - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus prominent - - - - - - - - root male - true - - - - - - - - root phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - locule volume - - - - - - - - testa subacute - true - - - - - - - - - - - - - - - - - - - - - - - - valve blue - - - - - - - - - - - - - - - - - - - - - - - - heartwood cauline to - - - - - - - - - - - - - - - - - - - - - - - - endosperm hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf sharp - - - - - - - - - - - - - - - - - - - - - - - - hypanthium flattened - - - - - - - - - - - - - - - - - - - - - - - - corolla involute - - - - - - - - - - - - - - - - - - - - - - - - pith weight - - - - - - - - - - - - - - - - - - - - - - - - long shoot lateral to - - - - - - - - - - - - - - - - - - - - - - - - long shoot position - - - - - - - - - - - - - - - - - - - - - - - - epidermis dispersed - - - - - - - - - - - - - - - - - - - - - - - - papilla cell punctate - - - - - - - - - - - - - - - - - - - - - - - - papilla cell spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - periderm diameter - - - - - - - - - - - - - - - - - - - - - - - - upper glume asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - upper glume symmetry - - - - - - - - - - - - - - - - - - - - - - - - perianth retuse - - - - - - - - - - - - - - - - - - - - - - - - lamina symmetrical - - - - - - - - - - - - - - - - - - - - - - - - locule laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - carpel pyramidal - - - - - - - - - - - - - - - - - - - - - - - - testa flattened - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril truncated - - - - - - - - - - - - - - - - - - - - - - - - nectary mature - - - - - - - - - - - - - - - - - - - - - - - - caruncle elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina radius - - - - - - - - - - - - - - - - - - - - - - - - receptacle condensed - - - - - - - - - - - - - - - - - - - - - - - - flower setose - - - - - - - - - - - - - - - - - - - - - - - - lenticel decumbent - - - - - - - - - - - - - - - - - - - - - - - - rhizome back - - - - - - - - - - - - - - - - - - - - - - - - resin canal decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - resin canal water composition - - - - - - - - - - - - - - - - - - - - - - - - leaf axil elongated - - - - - - - - - - - - - - - - - - - - - - - - pulvinus absent - - - - - - - - - - - - - - - - - - - - - - - - root tip furrowed - - - - - - - - - - - - - - - - - - - - - - - - endosperm dispersed - - - - - - - - - - - - - - - - - - - - - - - - involucre lilac - - - - - - - - - - - - - - - - - - - - - - - - sheath cell oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - petal hollow - - - - - - - - - - - - - - - - - - - - - - - - cotyledon furrowed - - - - - - - - - - - - - - - - - - - - - - - - stamen lobate - - - - - - - - - - - - - - - - - - - - - - - - stamen surface feature shape - - - - - - - - tassel sessile spikelet premature - true - - - - - - - - tassel sessile spikelet onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - glume star shaped - - - - - - - - rhizome hermaphrodite - true - - - - - - - - rhizome phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf slit-like - - - - - - - - - - - - - - - - - - - - - - - - style yellow green - - - - - - - - - - - - - - - - - - - - - - - - bracteole dark brown - - - - - - - - - - - - - - - - - - - - - - - - flower immature - - - - - - - - - - - - - - - - - - - - - - - - leaflet translucent - - - - - - - - - - - - - - - - - - - - - - - - leaflet opacity - - - - - - - - - - - - - - - - - - - - - - - - epidermis caudate - - - - - - - - - - - - - - - - - - - - - - - - keel square - - - - - - - - - - - - - - - - - - - - - - - - epicalyx decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx thickness - - - - - - - - - - - - - - - - - - - - - - - - ligule firm - - - - - - - - - - - - - - - - - - - - - - - - ligule hardness - - - - - - - - - - - - - - - - - - - - - - - - branch broad - - - - - - - - - - - - - - - - - - - - - - - - androecium spatulate - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium truncated - - - - - - - - - - - - - - - - - - - - - - - - bract lanceolate-triangular - - - - - - - - - - - - - - - - - - - - - - - - seed vermilion - - - - - - - - calyx rate - true - - - - - - - - - - - - - - - - - - - - - - - - stolon decumbent - - - - - - - - - - - - - - - - - - - - - - - - petiole square - - - - - - - - - - - - - - - - - - - - - - - - pistillode cleft - - - - - - - - - - - - - - - - - - - - - - - - pistillode concavity - - - - - - - - - - - - - - - - - - - - - - - - bud dark red - - - - - - - - - - - - - - - - - - - - - - - - anther cleft - - - - - - - - - - - - - - - - - - - - - - - - canal punctate - - - - - - - - - - - - - - - - - - - - - - - - canal spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - placenta oblique to - - - - - - - - - - - - - - - - - - - - - - - - tepal convex - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath dense - - - - - - - - - - - - - - - - - - - - - - - - corolla aromatic - - - - - - - - - - - - - - - - - - - - - - - - corolla aromaticity - - - - - - - - - - - - - - - - - - - - - - - - stamen yellow - - - - - - - - - - - - - - - - - - - - - - - - tubercle lateral to - - - - - - - - - - - - - - - - - - - - - - - - crown root glistening - - - - - - - - - - - - - - - - - - - - - - - - crown root reflectivity - - - - - - - - - - - - - - - - - - - - - - - - lower glume emarginate - - - - - - - - - - - - - - - - - - - - - - - - heartwood caudate - - - - - - - - - - - - - - - - - - - - - - - - spikelet violet - - - - - - - - - - - - - - - - - - - - - - - - prophyll terminal - - - - - - - - - - - - - - - - - - - - - - - - sepal violet - - - - - - - - - - - - - - - - - - - - - - - - shoot apex ochre - - - - - - - - - - - - - - - - - - - - - - - - androecium open - - - - - - - - - - - - - - - - - - - - - - - - androecium closure - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure pedicellate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure attachment quality - - - - - - - - - - - - - - - - - - - - - - - - hydathode inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - cortex brittle - - - - - - - - - - - - - - - - - - - - - - - - cortex structure - - - - - - - - - - - - - - - - - - - - - - - - style sunken - - - - - - - - - - - - - - - - - - - - - - - - style elevation - - - - - - - - - - - - - - - - - - - - - - - - stele sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - hydathode white - - - - - - - - - - - - - - - - - - - - - - - - hydathode color - - - - - - - - - - - - - - - - - - - - - - - - thallus basal to - - - - - - - - - - - - - - - - - - - - - - - - pollen bilobed - - - - - - - - - - - - - - - - - - - - - - - - seta filamentous - - - - - - - - - - - - - - - - - - - - - - - - awn oblique to - - - - - - - - - - - - - - - - - - - - - - - - pericarp ridged - - - - - - - - - - - - - - - - - - - - - - - - leaf exposed - - - - - - - - - - - - - - - - - - - - - - - - testa cuneate - - - - - - - - - - - - - - - - - - - - - - - - petiole evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - petiole shedability - - - - - - - - - - - - - - - - - - - - - - - - juice sac decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - juice sac thickness - - - - - - - - - - - - - - - - - - - - - - - - style asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - style symmetry - - - - - - - - seta down - true - - - - - - - - - - - - - - - - - - - - - - - - valve swollen - - - - - - - - - - - - - - - - - - - - - - - - locule recurved - - - - - - - - stipule arrested - true - - - - - - - - stipule offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - terminal bud lateral to - - - - - - - - - - - - - - - - - - - - - - - - shoot system raised - - - - - - - - - - - - - - - - - - - - - - - - gynophore lobed - - - - - - - - - - - - - - - - - - - - - - - - androecium protruding into - - - - - - - - - - - - - - - - - - - - - - - - pollen cylindrical - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell concave - - - - - - - - - - - - - - - - - - - - - - - - pollen open - - - - - - - - - - - - - - - - - - - - - - - - pollen closure - - - - - - - - - - - - - - - - - - - - - - - - androecium pointed - - - - - - - - - - - - - - - - - - - - - - - - peristome differentiated - - - - - - - - - - - - - - - - - - - - - - - - peristome cellular potency - - - - - - - - - - - - - - - - - - - - - - - - leaf axil robust - - - - - - - - - - - - - - - - - - - - - - - - pulvinus increased thickness - - - - - - - - - - - - - - - - - - - - - - - - pulvinus thickness - - - - - - - - - - - - - - - - - - - - - - - - exocarp trilobed - - - - - - - - - - - - - - - - - - - - - - - - mesophyll absent - - - - - - - - - - - - - - - - - - - - - - - - mesophyll amount - - - - - - - - - - - - - - - - - - - - - - - - bract convex - - - - - - - - - - - - - - - - - - - - - - - - involucre arachnose - - - - - - - - - - - - - - - - - - - - - - - - stamen adjacent to - - - - - - - - - - - - - - - - - - - - - - - - sepal orange - - - - - - - - - - - - - - - - - - - - - - - - leaf V-shaped - - - - - - - - - - - - - - - - - - - - - - - - tuberous root elongated - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber green - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber color - - - - - - - - - - - - - - - - - - - - - - - - arillode red - - - - - - - - - - - - - - - - - - - - - - - - arillode color - - - - - - - - - - - - - - - - - - - - - - - - root inflexible - - - - - - - - - - - - - - - - - - - - - - - - root flexibility - - - - - - - - - - - - - - - - - - - - - - - - leaf base opposite - - - - - - - - - - - - - - - - - - - - - - - - stigma present - - - - - - - - - - - - - - - - - - - - - - - - stem base cuneate - - - - - - - - - - - - - - - - - - - - - - - - rhizoid cylindrical - - - - - - - - - - - - - - - - - - - - - - - - anther umbonate - - - - - - - - - - - - - - - - - - - - - - - - coma smooth - - - - - - - - - - - - - - - - - - - - - - - - coma texture - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf dorsal to - - - - - - - - - - - - - - - - - - - - - - - - mesocarp erect - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system cylindrical - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - axil aggregated - - - - - - - - - - - - - - - - - - - - - - - - areole bud drooping - - - - - - - - - - - - - - - - - - - - - - - - ovary wall slit-like - - - - - - - - - - - - - - - - - - - - - - - - hilum concave - - - - - - - - - - - - - - - - - - - - - - - - epidermis flattened - - - - - - - - - - - - - - - - - - - - - - - - valve crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dark green - - - - - - - - - - - - - - - - - - - - - - - - lamina diamond shaped - - - - - - - - - - - - - - - - - - - - - - - - pappus drooping - - - - - - - - - - - - - - - - - - - - - - - - pollen inserted into - - - - - - - - - - - - - - - - - - - - - - - - stigma cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - receptacle reniform - - - - - - - - - - - - - - - - - - - - - - - - peduncle heart shaped - - - - - - - - - - - - - - - - - - - - - - - - sepal area - - - - - - - - - - - - - - - - - - - - - - - - pericarp prominent - - - - - - - - - - - - - - - - - - - - - - - - seed operculum elliptic - - - - - - - - - - - - - - - - - - - - - - - - seed operculum 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem distributed - - - - - - - - - - - - - - - - - - - - - - - - mesocarp autogenous - - - - - - - - - - - - - - - - - - - - - - - - stalk hispid - - - - - - - - - - - - - - - - - - - - - - - - scutellar node prominent - - - - - - - - - - - - - - - - - - - - - - - - fruit subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - calyx vestigial - - - - - - - - - - - - - - - - - - - - - - - - valve curved - - - - - - - - - - - - - - - - - - - - - - - - involucre setose - - - - - - - - - - - - - - - - - - - - - - - - stigma sunken - - - - - - - - - - - - - - - - - - - - - - - - stigma elevation - - - - - - - - - - - - - - - - - - - - - - - - juice sac elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf apex green - - - - - - - - - - - - - - - - - - - - - - - - leaf apex color - - - - - - - - - - - - - - - - - - - - - - - - glume spatulate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet multiple - - - - - - - - - - - - - - - - - - - - - - - - anther theca condensed - - - - - - - - - - - - - - - - - - - - - - - - stele concave - - - - - - - - - - - - - - - - - - - - - - - - stele concavity - - - - - - - - - - - - - - - - - - - - - - - - calyx magenta - - - - - - - - - - - - - - - - - - - - - - - - bud reniform - - - - - - - - - - - - - - - - - - - - - - - - petal spongy - - - - - - - - - - - - - - - - - - - - - - - - lower glume laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - seed young - - - - - - - - - - - - - - - - - - - - - - - - thorn glandular - - - - - - - - - - - - - - - - - - - - - - - - thorn morphology - - - - - - - - - - - - - - - - - - - - - - - - lower glume spherical - - - - - - - - - - - - - - - - - - - - - - - - fruit horizontal - - - - - - - - - - - - - - - - - - - - - - - - stigma dark green - - - - - - - - - - - - - - - - - - - - - - - - testa separating - - - - - - - - - - - - - - - - - - - - - - - - raphe pale pink - - - - - - - - tuber arrested - true - - - - - - - - tuber offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf pointed - - - - - - - - - - - - - - - - - - - - - - - - bark fleshy - - - - - - - - - - - - - - - - - - - - - - - - plant spore transparent - - - - - - - - - - - - - - - - - - - - - - - - plant spore opacity - - - - - - - - - - - - - - - - - - - - - - - - oil gland convex - - - - - - - - - - - - - - - - - - - - - - - - flower posterior to - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence leaf-like - - - - - - - - - - - - - - - - - - - - - - - - sporangium tangled - - - - - - - - - - - - - - - - - - - - - - - - fruit scaly - - - - - - - - - - - - - - - - - - - - - - - - areole bud prominent - - - - - - - - - - - - - - - - - - - - - - - - areole bud position - - - - - - - - - - - - - - - - - - - - - - - - endocarp curved - - - - - - - - - - - - - - - - - - - - - - - - lodicule ovate - - - - - - - - - - - - - - - - - - - - - - - - lodicule convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ligule flattened - - - - - - - - - - - - - - - - - - - - - - - - ligule curvature - - - - - - - - - - - - - - - - - - - - - - - - stipel decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - ligule abaxial to - - - - - - - - - - - - - - - - - - - - - - - - anther branched - - - - - - - - - - - - - - - - - - - - - - - - bark arched - - - - - - - - - - - - - - - - - - - - - - - - locule ornamented - - - - - - - - - - - - - - - - - - - - - - - - stem parallel-sided - - - - - - - - - - - - - - - - - - - - - - - - stamen warty - - - - - - - - - - - - - - - - - - - - - - - - stamen axial to - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem cuspidate - - - - - - - - - - - - - - - - - - - - - - - - glume dark brown - - - - - - - - - - - - - - - - - - - - - - - - pericarp autogenous - - - - - - - - - - - - - - - - - - - - - - - - stem base brown - - - - - - - - - - - - - - - - - - - - - - - - stem base color - - - - - - - - - - - - - - - - - - - - - - - - tubercle obconical - - - - - - - - - - - - - - - - - - - - - - - - style left - - - - - - - - - - - - - - - - - - - - - - - - stigma dentated - - - - - - - - - - - - - - - - - - - - - - - - tuber edible - - - - - - - - - - - - - - - - - - - - - - - - tuber edibility - - - - - - - - - - - - - - - - - - - - - - - - placenta size - - - - - - - - - - - - - - - - - - - - - - - - root striated - - - - - - - - - - - - - - - - - - - - - - - - pistillode surrounding - - - - - - - - - - - - - - - - - - - - - - - - gynophore sterile - - - - - - - - - - - - - - - - - - - - - - - - gynophore fertility - - - - - - - - - - - - - - - - - - - - - - - - lower glume decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - lower glume water composition - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf pedicellate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf attachment quality - - - - - - - - - - - - - - - - - - - - - - - - testa dentated - - - - - - - - - - - - - - - - - - - - - - - - heartwood sterile - - - - - - - - - - - - - - - - - - - - - - - - heartwood fertility - - - - - - - - - - - - - - - - - - - - - - - - plant cell obovate - - - - - - - - - - - - - - - - - - - - - - - - tubercle present - - - - - - - - - - - - - - - - - - - - - - - - pistillode articulated with - - - - - - - - - - - - - - - - - - - - - - - - corm acuminate - - - - - - - - - - - - - - - - - - - - - - - - prickle terminal - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem ornamentation - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - trichome drooping - - - - - - - - - - - - - - - - - - - - - - - - root discoid - - - - - - - - - - - - - - - - - - - - - - - - fruit light yellow - - - - - - - - - - - - - - - - - - - - - - - - stigma dark purple - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf whorled - - - - - - - - - - - - - - - - - - - - - - - - pedicel proximal to - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma recurved - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma curvature - - - - - - - - - - - - - - - - - - - - - - - - plumule decreased thickness - - - - - - - - staminode premature - true - - - - - - - - staminode onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - septum distal to - - - - - - - - - - - - - - - - - - - - - - - - peduncle vertical - - - - - - - - - - - - - - - - - - - - - - - - oil gland bilobed - - - - - - - - - - - - - - - - - - - - - - - - aril green - - - - - - - - - - - - - - - - - - - - - - - - stipel abaxial to - - - - - - - - - - - - - - - - - - - - - - - - funicle black - - - - - - - - - - - - - - - - - - - - - - - - shoot internode basal to - - - - - - - - - - - - - - - - - - - - - - - - peduncle pale pink - - - - - - - - - - - - - - - - - - - - - - - - growth ring broken - - - - - - - - - - - - - - - - - - - - - - - - growth ring wholeness - - - - - - - - - - - - - - - - - - - - - - - - short shoot size - - - - - - - - - - - - - - - - - - - - - - - - central zone erose - - - - - - - - - - - - - - - - - - - - - - - - rhizome dark red - - - - - - - - - - - - - - - - - - - - - - - - prophyll decreased amount - - - - - - - - - - - - - - - - - - - - - - - - calyx columnar - - - - - - - - - - - - - - - - - - - - - - - - corolla cuspidate - - - - - - - - - - - - - - - - - - - - - - - - pseudostem green - - - - - - - - - - - - - - - - - - - - - - - - gynoecium subulate - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal upturned - - - - - - - - - - - - - - - - - - - - - - - - endodermis present - - - - - - - - - - - - - - - - - - - - - - - - endodermis amount - - - - - - - - - - - - - - - - - - - - - - - - peristome elliptic - - - - - - - - - - - - - - - - - - - - - - - - mesocarp hispid - - - - - - - - - - - - - - - - - - - - - - - - parenchyma ovate - - - - - - - - - - - - - - - - - - - - - - - - rhizome quadrangular - - - - - - - - - - - - - - - - - - - - - - - - ray system smooth - - - - - - - - - - - - - - - - - - - - - - - - ray system texture - - - - - - - - - - - - - - - - - - - - - - - - tuberous root decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - tuberous root water composition - - - - - - - - - - - - - - - - - - - - - - - - simple leaf sterile - - - - - - - - - - - - - - - - - - - - - - - - simple leaf fertility - - - - - - - - - - - - - - - - - - - - - - - - disk flower basal to - - - - - - - - - - - - - - - - - - - - - - - - disk flower glistening - - - - - - - - - - - - - - - - - - - - - - - - disk flower reflectivity - - - - - - - - - - - - - - - - - - - - - - - - bracteole pinnate - - - - - - - - rhizome down - true - - - - - - - - - - - - - - - - - - - - - - - - filament actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - filament radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - ligule arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath overlap with - - - - - - - - - - - - - - - - - - - - - - - - stamen decurrent - - - - - - - - - - - - - - - - - - - - - - - - shoot apex circinate - - - - - - - - - - - - - - - - - - - - - - - - rhizome glistening - - - - - - - - - - - - - - - - - - - - - - - - rhizome reflectivity - - - - - - - - - - - - - - - - - - - - - - - - fruit light orange - - - - - - - - - - - - - - - - - - - - - - - - pericarp tomentose - - - - - - - - - - - - - - - - - - - - - - - - plant callus funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - anther undivided - - - - - - - - - - - - - - - - - - - - - - - - canal tubular - - - - - - - - - - - - - - - - - - - - - - - - caruncle purple - - - - - - - - - - - - - - - - - - - - - - - - strobilus black - - - - - - - - - - - - - - - - - - - - - - - - lemma conspicuous - - - - - - - - - - - - - - - - - - - - - - - - valve decreased amount - - - - - - - - - - - - - - - - - - - - - - - - valve amount - - - - - - - - - - - - - - - - - - - - - - - - prickle broken - - - - - - - - - - - - - - - - - - - - - - - - prickle wholeness - - - - - - - - - - - - - - - - - - - - - - - - tepal width - - - - - - - - - - - - - - - - - - - - - - - - shoot internode lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath red - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf fleshy - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf composition - - - - - - - - - - - - - - - - - - - - - - - - palea bilobed - - - - - - - - - - - - - - - - - - - - - - - - locule vertical to - - - - - - - - - - - - - - - - - - - - - - - - prophyll purple - - - - - - - - - - - - - - - - - - - - - - - - prophyll color - - - - - - - - - - - - - - - - - - - - - - - - rhizome mottled - - - - - - - - - - - - - - - - - - - - - - - - rhizome color pattern - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem auriculate - - - - - - - - - - - - - - - - - - - - - - - - carpel coiled - - - - - - - - - - - - - - - - - - - - - - - - carpel coiling - - - - - - - - - - - - - - - - - - - - - - - - corolla ivory - - - - - - - - - - - - - - - - - - - - - - - - stem base oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - petal axial to - - - - - - - - - - - - - - - - - - - - - - - - stipel cuneate - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root furrowed - - - - - - - - - - - - - - - - - - - - - - - - awn rough - - - - - - - - - - - - - - - - - - - - - - - - ligule heart shaped - - - - - - - - - - - - - - - - - - - - - - - - tubercle opposite - - - - - - - - - - - - - - - - - - - - - - - - receptacle opposite - - - - - - - - - - - - - - - - - - - - - - - - growth ring distributed - - - - - - - - - - - - - - - - - - - - - - - - rhizome unicellular - - - - - - - - - - - - - - - - - - - - - - - - shoot system pedicellate - - - - - - - - - - - - - - - - - - - - - - - - shoot system attachment quality - - - - - - - - - - - - - - - - - - - - - - - - ligule blue - - - - - - - - - - - - - - - - - - - - - - - - rhizome green - - - - - - - - - - - - - - - - - - - - - - - - tubercle opaque - - - - - - - - - - - - - - - - - - - - - - - - tubercle opacity - - - - - - - - - - - - - - - - - - - - - - - - canal inflated - - - - - - - - - - - - - - - - - - - - - - - - canal structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - anther trilobed - - - - - - - - - - - - - - - - - - - - - - - - bract zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - flower bud aggregated - - - - - - - - - - - - - - - - - - - - - - - - flower bud spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - resin canal elliptic - - - - - - - - - - - - - - - - - - - - - - - - resin canal 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - pollen split - - - - - - - - - - - - - - - - - - - - - - - - tubercle areolate - - - - - - - - - - - - - - - - - - - - - - - - fruit rhomboid - - - - - - - - - - - - - - - - - - - - - - - - perianth pedunculate - - - - - - - - - - - - - - - - - - - - - - - - stigma displaced to - - - - - - - - - - - - - - - - - - - - - - - - stigma orientation - - - - - - - - - - - - - - - - - - - - - - - - pith spongy - - - - - - - - - - - - - - - - - - - - - - - - pith structure - - - - - - - - valve down - true - - - - - - - - - - - - - - - - - - - - - - - - anther adhesive - - - - - - - - - - - - - - - - - - - - - - - - anther adhesivity - - - - - - - - - - - - - - - - - - - - - - - - palea pubescent - - - - - - - - - - - - - - - - - - - - - - - - palea maturity - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus bifurcated - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein increased thickness - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber grey - - - - - - - - - - - - - - - - - - - - - - - - style tripartite - - - - - - - - - - - - - - - - - - - - - - - - keel vestigial - - - - - - - - - - - - - - - - - - - - - - - - exocarp striated - - - - - - - - - - - - - - - - - - - - - - - - septum right - - - - - - - - - - - - - - - - - - - - - - - - keel robust - - - - - - - - - - - - - - - - - - - - - - - - glume curled - - - - - - - - - - - - - - - - - - - - - - - - leaf margin undulate - - - - - - - - - - - - - - - - - - - - - - - - seta sterile - - - - - - - - - - - - - - - - - - - - - - - - seta fertility - - - - - - - - - - - - - - - - - - - - - - - - palea present - - - - - - - - - - - - - - - - - - - - - - - - shoot system fleshy - - - - - - - - - - - - - - - - - - - - - - - - shoot system composition - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium broken - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium wholeness - - - - - - - - - - - - - - - - - - - - - - - - stigma separated from - - - - - - - - - - - - - - - - - - - - - - - - flower asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - anther theca decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - anther theca water composition - - - - - - - - - - - - - - - - - - - - - - - - calyx right - - - - - - - - - - - - - - - - - - - - - - - - shoot internode sterile - - - - - - - - - - - - - - - - - - - - - - - - shoot internode fertility - - - - - - - - - - - - - - - - - - - - - - - - filament adjacent to - - - - - - - - - - - - - - - - - - - - - - - - crown root distributed - - - - - - - - - - - - - - - - - - - - - - - - pith green - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem concave - - - - - - - - - - - - - - - - - - - - - - - - androecium closed - - - - - - - - - - - - - - - - - - - - - - - - bark inflexible - - - - - - - - - - - - - - - - - - - - - - - - bark flexibility - - - - - - - - - - - - - - - - - - - - - - - - axil loose - - - - - - - - - - - - - - - - - - - - - - - - epidermis mature - - - - - - - - - - - - - - - - - - - - - - - - periderm lanceolate - - - - - - - - - - - - - - - - - - - - - - - - funicle cylindrical - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell elliptic - - - - - - - - sclerenchyma acute - true - - - - - - - - sclerenchyma duration - true - - - - - - - - - - - - - - - - - - - - - - - - anther theca heart shaped - - - - - - - - - - - - - - - - - - - - - - - - petiole back - - - - - - - - - - - - - - - - - - - - - - - - bracteole funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore conical - - - - - - - - - - - - - - - - - - - - - - - - petiolule oblate - - - - - - - - androecium female - true - - - - - - - - - - - - - - - - - - - - - - - - oil gland pointed - - - - - - - - - - - - - - - - - - - - - - - - gynoecium closed - - - - - - - - - - - - - - - - - - - - - - - - gynoecium closure - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue cupulate - - - - - - - - - - - - - - - - - - - - - - - - keel closed - - - - - - - - - - - - - - - - - - - - - - - - keel closure - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal curved - - - - - - - - - - - - - - - - - - - - - - - - locule grey - - - - - - - - - - - - - - - - - - - - - - - - apical hook inflated - - - - - - - - - - - - - - - - - - - - - - - - apical hook structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - sepal pale pink - - - - - - - - - - - - - - - - - - - - - - - - pollen oblong - - - - - - - - - - - - - - - - - - - - - - - - locule separating - - - - - - - - - - - - - - - - - - - - - - - - sorus elongated - - - - - - - - - - - - - - - - - - - - - - - - seed trichome cupulate - - - - - - - - - - - - - - - - - - - - - - - - bud cuspidate - - - - - - - - - - - - - - - - - - - - - - - - infructescence elongated - - - - - - - - - - - - - - - - - - - - - - - - vascular system split - - - - - - - - - - - - - - - - - - - - - - - - petiole undivided - - - - - - - - - - - - - - - - - - - - - - - - petal pointed - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium undulate - - - - - - - - - - - - - - - - - - - - - - - - plumule condensed - - - - - - - - - - - - - - - - - - - - - - - - plumule structure - - - - - - - - - - - - - - - - - - - - - - - - peduncle aggregated - - - - - - - - - - - - - - - - - - - - - - - - exocarp split - - - - - - - - - - - - - - - - - - - - - - - - raphe grooved - - - - - - - - - - - - - - - - - - - - - - - - calyx protruding - - - - - - - - - - - - - - - - - - - - - - - - scutellar node curved - - - - - - - - - - - - - - - - - - - - - - - - cladode curved - - - - - - - - - - - - - - - - - - - - - - - - rhizome raised - - - - - - - - - - - - - - - - - - - - - - - - lamina light green - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle flattened - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle curvature - - - - - - - - - - - - - - - - - - - - - - - - thorn condensed - - - - - - - - - - - - - - - - - - - - - - - - bark coating - - - - - - - - - - - - - - - - - - - - - - - - periderm dark red - - - - - - - - - - - - - - - - - - - - - - - - leaflet sunken - - - - - - - - - - - - - - - - - - - - - - - - leaflet elevation - - - - - - - - - - - - - - - - - - - - - - - - parenchyma truncated - - - - - - - - - - - - - - - - - - - - - - - - anther ochre - - - - - - - - - - - - - - - - - - - - - - - - branch bilobed - - - - - - - - - - - - - - - - - - - - - - - - staminode ovate - - - - - - - - - - - - - - - - - - - - - - - - radicle clavate - - - - - - - - - - - - - - - - - - - - - - - - radicle concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - tuber curved - - - - - - - - - - - - - - - - - - - - - - - - involucre increased size - - - - - - - - - - - - - - - - - - - - - - - - involucre size - - - - - - - - - - - - - - - - - - - - - - - - petiole margin green - - - - - - - - - - - - - - - - - - - - - - - - trichome granular - - - - - - - - - - - - - - - - - - - - - - - - seta glandular - - - - - - - - - - - - - - - - - - - - - - - - seta morphology - - - - - - - - - - - - - - - - - - - - - - - - glume granular - - - - - - - - - - - - - - - - - - - - - - - - petiolule foveate - - - - - - - - - - - - - - - - - - - - - - - - lower glume caudate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system multifid - - - - - - - - - - - - - - - - - - - - - - - - resin canal condensed - - - - - - - - - - - - - - - - - - - - - - - - resin canal structure - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore increased thickness - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore thickness - - - - - - - - - - - - - - - - - - - - - - - - axil slender - - - - - - - - - - - - - - - - - - - - - - - - columella conspicuous - - - - - - - - - - - - - - - - - - - - - - - - filament glistening - - - - - - - - - - - - - - - - - - - - - - - - filament reflectivity - - - - - - - - - - - - - - - - - - - - - - - - palea punctate - - - - - - - - - - - - - - - - - - - - - - - - palea spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf glandular - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf morphology - - - - - - - - - - - - - - - - - - - - - - - - stigma back - - - - - - - - - - - - - - - - - - - - - - - - stem yellow green - - - - - - - - - - - - - - - - - - - - - - - - lower glume decreased amount - - - - - - - - - - - - - - - - - - - - - - - - petal actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - petal radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - - gynoecium swollen - - - - - - - - - - - - - - - - - - - - - - - - upper glume punctiform - - - - - - - - - - - - - - - - - - - - - - - - epicalyx branched - - - - - - - - pistillode acute - true - - - - - - - - pistillode duration - true - - - - - - - - - - - - - - - - - - - - - - - - aril elongated - - - - - - - - - - - - - - - - - - - - - - - - leaf axil elliptic - - - - - - - - - - - - - - - - - - - - - - - - placenta lateral to - - - - - - - - - - - - - - - - - - - - - - - - costa emarginate - - - - - - - - - - - - - - - - - - - - - - - - costa concavity - - - - - - - - - - - - - - - - - - - - - - - - flower mineralized - - - - - - - - cambium up - true - - - - - - - - - - - - - - - - - - - - - - - - cambium direction - - - - - - - - - - - - - - - - - - - - - - - - root circumference - - - - - - - - - - - - - - - - - - - - - - - - tepal revolute - - - - - - - - - - - - - - - - - - - - - - - - epidermis spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - ligule obconical - - - - - - - - anther female - true - - - - - - - - - - - - - - - - - - - - - - - - seed emarginate - - - - - - - - - - - - - - - - - - - - - - - - pappus folded - - - - - - - - - - - - - - - - - - - - - - - - pappus surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - root cauline to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence tight - - - - - - - - - - - - - - - - - - - - - - - - carpel absent - - - - - - - - lamina continuous - true - - - - - - - - lamina occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma brown - - - - - - - - - - - - - - - - - - - - - - - - pith hard - - - - - - - - - - - - - - - - - - - - - - - - apical hook involute - - - - - - - - - - - - - - - - - - - - - - - - anther trumpet-shaped - - - - - - - - - - - - - - - - - - - - - - - - involucre heart shaped - - - - - - - - - - - - - - - - - - - - - - - - coma red brown - - - - - - - - - - - - - - - - - - - - - - - - pericarp displaced to - - - - - - - - - - - - - - - - - - - - - - - - pericarp orientation - - - - - - - - - - - - - - - - - - - - - - - - lamina cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - free petal clavate - - - - - - - - - - - - - - - - - - - - - - - - free petal concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - seed detached from - - - - - - - - - - - - - - - - - - - - - - - - glume glandular - - - - - - - - - - - - - - - - - - - - - - - - glume morphology - - - - - - - - - - - - - - - - - - - - - - - - endocarp cuneate - - - - - - - - - - - - - - - - - - - - - - - - raphe surrounding - - - - - - - - - - - - - - - - - - - - - - - - axil ventral to - - - - - - - - - - - - - - - - - - - - - - - - perianth branched - - - - - - - - - - - - - - - - - - - - - - - - flower cuspidate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp raised - - - - - - - - - - - - - - - - - - - - - - - - ray system subulate - - - - - - - - - - - - - - - - - - - - - - - - scutellar node lobed - - - - - - - - - - - - - - - - - - - - - - - - costa trilobed - - - - - - - - - - - - - - - - - - - - - - - - shoot system inserted into - - - - - - - - - - - - - - - - - - - - - - - - stipule conical - - - - - - - - - - - - - - - - - - - - - - - - peduncle black - - - - - - - - - - - - - - - - - - - - - - - - involucre raised - - - - - - - - - - - - - - - - - - - - - - - - stereome flat - - - - - - - - - - - - - - - - - - - - - - - - stereome curvature - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem dorsal to - - - - - - - - pistillode down - true - - - - - - - - - - - - - - - - - - - - - - - - lemma protruding into - - - - - - - - - - - - - - - - - - - - - - - - prophyll complex - - - - - - - - - - - - - - - - - - - - - - - - staminode attenuate - - - - - - - - - - - - - - - - - - - - - - - - keel simple - - - - - - - - - - - - - - - - - - - - - - - - keel complexity - - - - - - - - - - - - - - - - - - - - - - - - prophyll subulate - - - - - - - - epicalyx up - true - - - - - - - - - - - - - - - - - - - - - - - - epicalyx direction - - - - - - - - - - - - - - - - - - - - - - - - shoot internode bifurcated - - - - - - - - - - - - - - - - - - - - - - - - lamina distended - - - - - - - - - - - - - - - - - - - - - - - - palea flattened - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril inflexible - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril flexibility - - - - - - - - - - - - - - - - - - - - - - - - tuberous root aromatic - - - - - - - - - - - - - - - - - - - - - - - - tuberous root aromaticity - - - - - - - - - - - - - - - - - - - - - - - - thallus orbicular - - - - - - - - - - - - - - - - - - - - - - - - oil gland lobed - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril constricted - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril structure - - - - - - - - - - - - - - - - - - - - - - - - pseudostem basal to - - - - - - - - - - - - - - - - - - - - - - - - pericarp simple - - - - - - - - - - - - - - - - - - - - - - - - pericarp complexity - - - - - - - - - - - - - - - - - - - - - - - - connective spherical - - - - - - - - - - - - - - - - - - - - - - - - calyx dilated - - - - - - - - - - - - - - - - - - - - - - - - pistillode ovate - - - - - - - - - - - - - - - - - - - - - - - - root tip star shaped - - - - - - - - - - - - - - - - - - - - - - - - whole plant convex - - - - - - - - - - - - - - - - - - - - - - - - seed aligned with - - - - - - - - - - - - - - - - - - - - - - - - seed alignment - - - - - - - - - - - - - - - - - - - - - - - - pedicel attached to - - - - - - - - - - - - - - - - - - - - - - - - pedicel distributed - - - - - - - - - - - - - - - - - - - - - - - - spikelet arched - - - - - - - - - - - - - - - - - - - - - - - - trichome arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - petal rough - - - - - - - - - - - - - - - - - - - - - - - - pseudostem decumbent - - - - - - - - - - - - - - - - - - - - - - - - caruncle conical - - - - - - - - - - - - - - - - - - - - - - - - caruncle convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - epidermis lobed - - - - - - - - - - - - - - - - - - - - - - - - seed area - - - - - - - - - - - - - - - - - - - - - - - - branch dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petal age - - - - - - - - - - - - - - - - - - - - - - - - endosperm fatty - - - - - - - - - - - - - - - - - - - - - - - - velamen dead - - - - - - - - - - - - - - - - - - - - - - - - velamen viability - - - - - - - - - - - - - - - - - - - - - - - - resin canal erect - - - - - - - - - - - - - - - - - - - - - - - - resin canal position - - - - - - - - petiole continuous - true - - - - - - - - petiole occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - endocarp bifurcated - - - - - - - - - - - - - - - - - - - - - - - - endocarp branchiness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence ornamentation - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein leaf-like - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue revolute - - - - - - - - - - - - - - - - - - - - - - - - caruncle present - - - - - - - - - - - - - - - - - - - - - - - - perianth bent - - - - - - - - - - - - - - - - - - - - - - - - oil gland purple - - - - - - - - - - - - - - - - - - - - - - - - oil gland color - - - - - - - - - - - - - - - - - - - - - - - - lemma curled - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell spherical - - - - - - - - - - - - - - - - - - - - - - - - shoot system vertical - - - - - - - - - - - - - - - - - - - - - - - - style sparse - - - - - - - - - - - - - - - - - - - - - - - - petal back - - - - - - - - - - - - - - - - - - - - - - - - crown root oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue exserted - - - - - - - - - - - - - - - - - - - - - - - - micropyle orbicular - - - - - - - - - - - - - - - - - - - - - - - - elaiosome glandular - - - - - - - - - - - - - - - - - - - - - - - - elaiosome morphology - - - - - - - - - - - - - - - - - - - - - - - - connective absent - - - - - - - - - - - - - - - - - - - - - - - - connective amount - - - - - - - - - - - - - - - - - - - - - - - - ligule external to - - - - - - - - - - - - - - - - - - - - - - - - anther theca spatulate - - - - - - - - - - - - - - - - - - - - - - - - leaf axil translucent - - - - - - - - - - - - - - - - - - - - - - - - leaf axil opacity - - - - - - - - - - - - - - - - - - - - - - - - bracteole rhomboid - - - - - - - - - - - - - - - - - - - - - - - - exocarp circular - - - - - - - - - - - - - - - - - - - - - - - - carpel caudate - - - - - - - - - - - - - - - - - - - - - - - - petiole tubular - - - - - - - - - - - - - - - - - - - - - - - - prickle slender - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal constricted - - - - - - - - - - - - - - - - - - - - - - - - corolla parallel to - - - - - - - - - - - - - - - - - - - - - - - - peristome violet - - - - - - - - - - - - - - - - - - - - - - - - seta dense - - - - - - - - - - - - - - - - - - - - - - - - seta mass density - - - - - - - - - - - - - - - - - - - - - - - - tuber in contact with - - - - - - - - - - - - - - - - - - - - - - - - caruncle reniform - - - - - - - - - - - - - - - - - - - - - - - - caruncle concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - involucre unbranched - - - - - - - - - - - - - - - - - - - - - - - - involucre branchiness - - - - - - - - - - - - - - - - - - - - - - - - anther inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - filament folded - - - - - - - - - - - - - - - - - - - - - - - - filament surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - testa arched - - - - - - - - - - - - - - - - - - - - - - - - perianth red brown - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein branched - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein branchiness - - - - - - - - - - - - - - - - - - - - - - - - filament width - - - - - - - - - - - - - - - - - - - - - - - - stalk dentated - - - - - - - - - - - - - - - - - - - - - - - - keel juvenile - - - - - - - - - - - - - - - - - - - - - - - - lenticel clavate - - - - - - - - - - - - - - - - - - - - - - - - ligule pointed - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril angular - - - - - - - - - - - - - - - - - - - - - - - - epidermis dark green - - - - - - - - - - - - - - - - - - - - - - - - plant cell condensed - - - - - - - - - - - - - - - - - - - - - - - - spikelet erose - - - - - - - - - - - - - - - - - - - - - - - - palea black - - - - - - - - - - - - - - - - - - - - - - - - seta proximal to - - - - - - - - prophyll up - true - - - - - - - - - - - - - - - - - - - - - - - - prophyll direction - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma glabrous - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma pilosity - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle slit-like - - - - - - - - - - - - - - - - - - - - - - - - root tip orbicular - - - - - - - - - - - - - - - - - - - - - - - - oil gland subulate - - - - - - - - - - - - - - - - - - - - - - - - spikelet drooping - - - - - - - - - - - - - - - - - - - - - - - - fruit exposed - - - - - - - - - - - - - - - - - - - - - - - - pericarp recurved - - - - - - - - - - - - - - - - - - - - - - - - funicle elliptic - - - - - - - - - - - - - - - - - - - - - - - - stipule multi-colored - - - - - - - - - - - - - - - - - - - - - - - - stipule color pattern - - - - - - - - - - - - - - - - - - - - - - - - stem capacitance - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex sunken - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex elevation - - - - - - - - - - - - - - - - - - - - - - - - bract ridged - - - - - - - - - - - - - - - - - - - - - - - - testa acuminate - - - - - - - - - - - - - - - - - - - - - - - - stalk prominent - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet multi-colored - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet color pattern - - - - - - - - - - - - - - - - - - - - - - - - lemma soft - - - - - - - - - - - - - - - - - - - - - - - - lemma hardness - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein linear - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore broken - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore wholeness - - - - - - - - - - - - - - - - - - - - - - - - seed operculum cylindrical - - - - - - - - - - - - - - - - - - - - - - - - seed operculum convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell viscous - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell viscosity - - - - - - - - - - - - - - - - - - - - - - - - seed right - - - - - - - - - - - - - - - - - - - - - - - - pollen blunt - - - - - - - - - - - - - - - - - - - - - - - - pollen sharpness - - - - - - - - - - - - - - - - - - - - - - - - exocarp adhesive - - - - - - - - - - - - - - - - - - - - - - - - exocarp adhesivity - - - - - - - - - - - - - - - - - - - - - - - - pneumatophore present - - - - - - - - - - - - - - - - - - - - - - - - pneumatophore amount - - - - - - - - - - - - - - - - - - - - - - - - oil gland acuminate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf grooved - - - - - - - - - - - - - - - - - - - - - - - - plant cell pedicellate - - - - - - - - - - - - - - - - - - - - - - - - plant cell attachment quality - - - - - - - - - - - - - - - - - - - - - - - - testa terminal - - - - - - - - - - - - - - - - - - - - - - - - lower glume leaf-like - - - - - - - - - - - - - - - - - - - - - - - - receptacle area - - - - - - - - - - - - - - - - - - - - - - - - pedicel tangled - - - - - - - - - - - - - - - - - - - - - - - - petal level with - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf transparent - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf opacity - - - - - - - - - - - - - - - - - - - - - - - - sorus size - - - - - - - - periderm subacute - true - - - - - - - - - - - - - - - - - - - - - - - - aril inflated - - - - - - - - - - - - - - - - - - - - - - - - aril structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - petiole overlapping - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal angular - - - - - - - - - - - - - - - - - - - - - - - - papilla cell pedicellate - - - - - - - - - - - - - - - - - - - - - - - - papilla cell attachment quality - - - - - - - - - - - - - - - - - - - - - - - - locule mottled - - - - - - - - - - - - - - - - - - - - - - - - locule color pattern - - - - - - - - - - - - - - - - - - - - - - - - inflorescence orange - - - - - - - - - - - - - - - - - - - - - - - - radicle increased length - - - - - - - - - - - - - - - - - - - - - - - - coma terminal - - - - - - - - - - - - - - - - - - - - - - - - glume inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - petal vestigial - - - - - - - - - - - - - - - - - - - - - - - - branch orange - - - - - - - - - - - - - - - - - - - - - - - - raphe ridged - - - - - - - - - - - - - - - - - - - - - - - - bud obconical - - - - - - - - - - - - - - - - - - - - - - - - carpel undulate - - - - - - - - - - - - - - - - - - - - - - - - stem base slender - - - - - - - - - - - - - - - - - - - - - - - - root red - - - - - - - - - - - - - - - - - - - - - - - - whole plant distributed - - - - - - - - - - - - - - - - - - - - - - - - costa scaly - - - - - - - - - - - - - - - - - - - - - - - - costa texture - - - - - - - - - - - - - - - - - - - - - - - - plant callus reniform - - - - - - - - - - - - - - - - - - - - - - - - pappus immature - - - - - - - - - - - - - - - - - - - - - - - - stigma symmetrical - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell glabrous - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell pilosity - - - - - - - - - - - - - - - - - - - - - - - - calyx axial to - - - - - - - - - - - - - - - - - - - - - - - - sepal inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - locule area - - - - - - - - - - - - - - - - - - - - - - - - lamina concealed - - - - - - - - - - - - - - - - - - - - - - - - style collapsed - - - - - - - - - - - - - - - - - - - - - - - - style emarginate - - - - - - - - - - - - - - - - - - - - - - - - sepal alternate placement - - - - - - - - - - - - - - - - - - - - - - - - raphe basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath glandular - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath morphology - - - - - - - - - - - - - - - - - - - - - - - - glume slit-like - - - - - - - - - - - - - - - - - - - - - - - - involucre blunt - - - - - - - - - - - - - - - - - - - - - - - - lenticel truncated - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence pointed - - - - - - - - - - - - - - - - - - - - - - - - epidermis leaf-like - - - - - - - - - - - - - - - - - - - - - - - - pseudostem cylindrical - - - - - - - - - - - - - - - - - - - - - - - - pseudostem convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant cell funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - lemma grey - - - - - - - - - - - - - - - - - - - - - - - - leaflet recurved - - - - - - - - - - - - - - - - - - - - - - - - perianth external to - - - - - - - - - - - - - - - - - - - - - - - - seed operculum split - - - - - - - - - - - - - - - - - - - - - - - - gynoecium basal to - - - - - - - - - - - - - - - - - - - - - - - - mesocarp hairy - - - - - - - - - - - - - - - - - - - - - - - - shoot system multi-colored - - - - - - - - - - - - - - - - - - - - - - - - shoot system color pattern - - - - - - - - - - - - - - - - - - - - - - - - axil transparent - - - - - - - - - - - - - - - - - - - - - - - - mesocarp edible - - - - - - - - - - - - - - - - - - - - - - - - mesocarp edibility - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue columnar - - - - - - - - - - - - - - - - - - - - - - - - bracteole caudate - - - - - - - - - - - - - - - - - - - - - - - - canal spatulate - - - - - - - - - - - - - - - - - - - - - - - - spikelet adaxial to - - - - - - - - - - - - - - - - - - - - - - - - stalk hard - - - - - - - - - - - - - - - - - - - - - - - - stalk hardness - - - - - - - - - - - - - - - - - - - - - - - - tubercle undulate - - - - - - - - - - - - - - - - - - - - - - - - lamina hard - - - - - - - - - - - - - - - - - - - - - - - - calyx hard - - - - - - - - - - - - - - - - - - - - - - - - branch clavate - - - - - - - - - - - - - - - - - - - - - - - - fruit stacked - - - - - - - - - - - - - - - - - - - - - - - - stem orange - - - - - - - - - - - - - - - - - - - - - - - - bud level with - - - - - - - - - - - - - - - - - - - - - - - - corolla whorled - - - - - - - - - - - - - - - - - - - - - - - - antiraphe soft - - - - - - - - - - - - - - - - - - - - - - - - testa horizontal - - - - - - - - - - - - - - - - - - - - - - - - prickle heart shaped - - - - - - - - - - - - - - - - - - - - - - - - prickle concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lamina immature - - - - - - - - - - - - - - - - - - - - - - - - tubercle foveate - - - - - - - - - - - - - - - - - - - - - - - - keel involute - - - - - - - - - - - - - - - - - - - - - - - - epicotyl cylindrical - - - - - - - - - - - - - - - - - - - - - - - - epicotyl convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - fruit mineralized - - - - - - - - - - - - - - - - - - - - - - - - septum present - - - - - - - - - - - - - - - - - - - - - - - - septum amount - - - - - - - - - - - - - - - - - - - - - - - - crown root slit-like - - - - - - - - - - - - - - - - - - - - - - - - caruncle dry - - - - - - - - - - - - - - - - - - - - - - - - caruncle wetness - - - - - - - - - - - - - - - - - - - - - - - - antiraphe translucent - - - - - - - - - - - - - - - - - - - - - - - - antiraphe opacity - - - - - - - - - - - - - - - - - - - - - - - - style sharp - - - - - - - - - - - - - - - - - - - - - - - - leaflet far from - - - - - - - - - - - - - - - - - - - - - - - - stem columnar - - - - - - - - - - - - - - - - - - - - - - - - stamen tomentose - - - - - - - - - - - - - - - - - - - - - - - - stem erose - - - - - - - - - - - - - - - - - - - - - - - - keel terminal - - - - - - - - - - - - - - - - - - - - - - - - awn broken - - - - - - - - - - - - - - - - - - - - - - - - awn wholeness - - - - - - - - - - - - - - - - - - - - - - - - lenticel attenuate - - - - - - - - - - - - - - - - - - - - - - - - epidermis black - - - - - - - - - - - - - - - - - - - - - - - - stalk oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - plant callus conical - - - - - - - - - - - - - - - - - - - - - - - - anther spatulate - - - - - - - - - - - - - - - - - - - - - - - - axil star shaped - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure angular - - - - - - - - - - - - - - - - - - - - - - - - calyx reniform - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel increased thickness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel thickness - - - - - - - - - - - - - - - - - - - - - - - - petal trilobed - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf glistening - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf reflectivity - - - - - - - - - - - - - - - - - - - - - - - - pith angular - - - - - - - - - - - - - - - - - - - - - - - - prickle opposite - - - - - - - - - - - - - - - - - - - - - - - - papilla cell decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - papilla cell water composition - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member cupulate - - - - - - - - - - - - - - - - - - - - - - - - bud time - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member purple - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member color - - - - - - - - - - - - - - - - - - - - - - - - rhizome inflexible - - - - - - - - - - - - - - - - - - - - - - - - rhizome flexibility - - - - - - - - - - - - - - - - - - - - - - - - costa opaque - - - - - - - - - - - - - - - - - - - - - - - - costa opacity - - - - - - - - - - - - - - - - - - - - - - - - papilla cell spatulate - - - - - - - - - - - - - - - - - - - - - - - - stem tendency - - - - - - - - - - - - - - - - - - - - - - - - carpel adhesive - - - - - - - - - - - - - - - - - - - - - - - - carpel adhesivity - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina retuse - - - - - - - - - - - - - - - - - - - - - - - - anther sunken - - - - - - - - - - - - - - - - - - - - - - - - anther elevation - - - - - - - - - - - - - - - - - - - - - - - - parenchyma structure - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin pilosity - - - - - - - - - - - - - - - - - - - - - - - - root linear - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure acuminate - - - - - - - - - - - - - - - - - - - - - - - - peduncle fused with - - - - - - - - - - - - - - - - - - - - - - - - raphe bilobed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence foveate - - - - - - - - - - - - - - - - - - - - - - - - whole plant curled - - - - - - - - - - - - - - - - - - - - - - - - gynophore convex - - - - - - - - - - - - - - - - - - - - - - - - gynophore concavity - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf brittle - - - - - - - - - - - - - - - - - - - - - - - - connective pink - - - - - - - - - - - - - - - - - - - - - - - - scutellar node conical - - - - - - - - - - - - - - - - - - - - - - - - pistillode lobate - - - - - - - - - - - - - - - - - - - - - - - - pedicel confluent with - - - - - - - - - - - - - - - - - - - - - - - - valve star shaped - - - - - - - - - - - - - - - - - - - - - - - - pappus serrated - - - - - - - - - - - - - - - - - - - - - - - - pollen diameter - - - - - - - - - - - - - - - - - - - - - - - - hilum oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - seed U-shaped - - - - - - - - - - - - - - - - - - - - - - - - bracteole actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - bracteole radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - endosperm peripheral - - - - - - - - - - - - - - - - - - - - - - - - stamen red - - - - - - - - - - - - - - - - - - - - - - - - micropyle yellow - - - - - - - - - - - - - - - - - - - - - - - - bract subterminal - - - - - - - - - - - - - - - - - - - - - - - - glume whole - - - - - - - - - - - - - - - - - - - - - - - - glume wholeness - - - - - - - - - - - - - - - - - - - - - - - - bud symmetrical - - - - - - - - - - - - - - - - - - - - - - - - bud symmetry - - - - - - - - - - - - - - - - - - - - - - - - corolla time - - - - - - - - - - - - - - - - - - - - - - - - tuber fusiform - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member broken - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member wholeness - - - - - - - - - - - - - - - - - - - - - - - - corolla decurrent - - - - - - - - - - - - - - - - - - - - - - - - canal sunken - - - - - - - - - - - - - - - - - - - - - - - - canal elevation - - - - - - - - - - - - - - - - - - - - - - - - petal retracted - - - - - - - - - - - - - - - - - - - - - - - - valve drooping - - - - - - - - sclerenchyma continuous - true - - - - - - - - sclerenchyma occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex glabrous - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex pilosity - - - - - - - - - - - - - - - - - - - - - - - - resin canal viscous - - - - - - - - - - - - - - - - - - - - - - - - resin canal viscosity - - - - - - - - - - - - - - - - - - - - - - - - peristome swollen - - - - - - - - - - - - - - - - - - - - - - - - stem vestigial - - - - - - - - - - - - - - - - - - - - - - - - petiole protruding - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf undulate - - - - - - - - - - - - - - - - - - - - - - - - androecium symmetrical - - - - - - - - - - - - - - - - - - - - - - - - petiole margin lobate - - - - - - - - - - - - - - - - - - - - - - - - fruit displaced - - - - - - - - - - - - - - - - - - - - - - - - pith decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaflet prostrate - - - - - - - - - - - - - - - - - - - - - - - - bract apex convex - - - - - - - - - - - - - - - - - - - - - - - - bract apex concavity - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue slit-like - - - - - - - - - - - - - - - - - - - - - - - - ray system distichous - - - - - - - - - - - - - - - - - - - - - - - - pedicel dendritic - - - - - - - - - - - - - - - - - - - - - - - - tubercle hard - - - - - - - - - - - - - - - - - - - - - - - - tubercle hardness - - - - - - - - - - - - - - - - - - - - - - - - axil dorsal to - - - - - - - - - - - - - - - - - - - - - - - - tubercle terminal - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system transparent - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system opacity - - - - - - - - - - - - - - - - - - - - - - - - flower bud fused with - - - - - - - - - - - - - - - - - - - - - - - - flower bud structure - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure dispersed - - - - - - - - - - - - - - - - - - - - - - - - bract violet - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath mature - - - - - - - - - - - - - - - - - - - - - - - - leaf base diameter - - - - - - - - - - - - - - - - - - - - - - - - chalaza smooth - - - - - - - - - - - - - - - - - - - - - - - - chalaza texture - - - - - - - - - - - - - - - - - - - - - - - - petal dilated - - - - - - - - - - - - - - - - - - - - - - - - heartwood spongy - - - - - - - - - - - - - - - - - - - - - - - - awn obtuse - - - - - - - - - - - - - - - - - - - - - - - - chalaza triangular - - - - - - - - sporangium up - true - - - - - - - - - - - - - - - - - - - - - - - - sporangium direction - - - - - - - - - - - - - - - - - - - - - - - - valve detached from - - - - - - - - petal arrested - true - - - - - - - - petal offset quality - true - - - - - - - - anther down - true - - - - - - - - - - - - - - - - - - - - - - - - keel elongated - - - - - - - - - - - - - - - - - - - - - - - - areole bud ovate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member condensed - - - - - - - - - - - - - - - - - - - - - - - - tubercle prominent - - - - - - - - - - - - - - - - - - - - - - - - lamina medial to - - - - - - - - - - - - - - - - - - - - - - - - pulvinus inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - involucre orange - - - - - - - - - - - - - - - - - - - - - - - - tuberous root spherical - - - - - - - - - - - - - - - - - - - - - - - - valve distal to - - - - - - - - - - - - - - - - - - - - - - - - pistillode conspicuous - - - - - - - - - - - - - - - - - - - - - - - - involucre blue - - - - - - - - - - - - - - - - - - - - - - - - peduncle flexible - - - - - - - - - - - - - - - - - - - - - - - - cladode hard - - - - - - - - - - - - - - - - - - - - - - - - cladode hardness - - - - - - - - - - - - - - - - - - - - - - - - central zone distichous - - - - - - - - - - - - - - - - - - - - - - - - scutellar node inflexible - - - - - - - - - - - - - - - - - - - - - - - - scutellar node flexibility - - - - - - - - - - - - - - - - - - - - - - - - leaf viscid - - - - - - - - - - - - - - - - - - - - - - - - tuber scaly - - - - - - - - - - - - - - - - - - - - - - - - glume adjacent to - - - - - - - - - - - - - - - - - - - - - - - - seed sharp - - - - - - - - - - - - - - - - - - - - - - - - upper glume inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - aril maroon - - - - - - - - - - - - - - - - - - - - - - - - style rectangular - - - - - - - - - - - - - - - - - - - - - - - - whole plant grey - - - - - - - - - - - - - - - - - - - - - - - - disk flower spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - petiole discoid - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin cuneate - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system cylindrical - - - - - - - - - - - - - - - - - - - - - - - - anther mature - - - - - - - - - - - - - - - - - - - - - - - - stalk lobate - - - - - - - - - - - - - - - - - - - - - - - - stalk surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - heartwood condensed - - - - - - - - - - - - - - - - - - - - - - - - sepal distichous - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - thallus circular - - - - - - - - - - - - - - - - - - - - - - - - ovary wall punctiform - - - - - - - - - - - - - - - - - - - - - - - - stigma striated - - - - - - - - - - - - - - - - - - - - - - - - nectary heart shaped - - - - - - - - - - - - - - - - - - - - - - - - locule spherical - - - - - - - - - - - - - - - - - - - - - - - - corolla warty - - - - - - - - - - - - - - - - - - - - - - - - upper glume coiled - - - - - - - - - - - - - - - - - - - - - - - - upper glume coiling - - - - - - - - - - - - - - - - - - - - - - - - heartwood wrinkled - - - - - - - - - - - - - - - - - - - - - - - - involucre distance - - - - - - - - - - - - - - - - - - - - - - - - endosperm transparent - - - - - - - - - - - - - - - - - - - - - - - - endosperm opacity - - - - - - - - - - - - - - - - - - - - - - - - palea exserted - - - - - - - - - - - - - - - - - - - - - - - - locule elongated - - - - - - - - - - - - - - - - - - - - - - - - testa pointed - - - - - - - - - - - - - - - - - - - - - - - - whole plant subulate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - peduncle setose - - - - - - - - - - - - - - - - - - - - - - - - parenchyma acuminate - - - - - - - - - - - - - - - - - - - - - - - - bracteole dense - - - - - - - - - - - - - - - - - - - - - - - - bracteole mass density - - - - - - - - - - - - - - - - - - - - - - - - stamen distributed - - - - - - - - - - - - - - - - - - - - - - - - sepal surrounding - - - - - - - - - - - - - - - - - - - - - - - - bracteole decussate - - - - - - - - - - - - - - - - - - - - - - - - pseudostem attenuate - - - - - - - - - - - - - - - - - - - - - - - - pseudostem sharpness - - - - - - - - - - - - - - - - - - - - - - - - style magenta - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract ovate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril alternate placement - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - fruit whorled - - - - - - - - - - - - - - - - - - - - - - - - spikelet exposed - - - - - - - - - - - - - - - - - - - - - - - - branch time - - - - - - - - - - - - - - - - - - - - - - - - receptacle curved lateral - - - - - - - - - - - - - - - - - - - - - - - - branch funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - awn level with - - - - - - - - - - - - - - - - - - - - - - - - valve orange - - - - - - - - - - - - - - - - - - - - - - - - septum differentiated - - - - - - - - - - - - - - - - - - - - - - - - septum cellular potency - - - - - - - - - - - - - - - - - - - - - - - - radicle oblong - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin sharpness - - - - - - - - - - - - - - - - - - - - - - - - perianth discoid - - - - - - - - - - - - - - - - - - - - - - - - keel branched - - - - - - - - - - - - - - - - - - - - - - - - keel branchiness - - - - - - - - - - - - - - - - - - - - - - - - infructescence branched - - - - - - - - - - - - - - - - - - - - - - - - banner petal cut - - - - - - - - - - - - - - - - - - - - - - - - nectary punctate - - - - - - - - - - - - - - - - - - - - - - - - leaf overlapped by - - - - - - - - - - - - - - - - - - - - - - - - peduncle soft - - - - - - - - apical hook male - true - - - - - - - - - - - - - - - - - - - - - - - - pistillode white - - - - - - - - - - - - - - - - - - - - - - - - plant callus rough - - - - - - - - - - - - - - - - - - - - - - - - perianth adjacent to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence recurved - - - - - - - - - - - - - - - - - - - - - - - - stigma slit-like - - - - - - - - - - - - - - - - - - - - - - - - testa discoid - - - - - - - - - - - - - - - - - - - - - - - - keel setose - - - - - - - - - - - - - - - - - - - - - - - - stem trilobed - - - - - - - - - - - - - - - - - - - - - - - - pedicel hollow - - - - - - - - - - - - - - - - - - - - - - - - leaf axil congested - - - - - - - - - - - - - - - - - - - - - - - - trichome serrated - - - - - - - - - - - - - - - - - - - - - - - - leaf margin conspicuous - - - - - - - - thallus up - true - - - - - - - - - - - - - - - - - - - - - - - - thallus direction - - - - - - - - - - - - - - - - - - - - - - - - shoot system attenuate - - - - - - - - - - - - - - - - - - - - - - - - tepal decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - calyx vermilion - - - - - - - - - - - - - - - - - - - - - - - - areole bud hairy - - - - - - - - - - - - - - - - - - - - - - - - involucre dark red - - - - - - - - - - - - - - - - - - - - - - - - costa fused with - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium glistening - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium reflectivity - - - - - - - - - - - - - - - - - - - - - - - - endocarp separated from - - - - - - - - - - - - - - - - - - - - - - - - stem evergreen (plant) - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril dense - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril mass density - - - - - - - - - - - - - - - - - - - - - - - - corolla light blue - - - - - - - - - - - - - - - - - - - - - - - - tuberous root hispid - - - - - - - - - - - - - - - - - - - - - - - - petiolule leaf-like - - - - - - - - spore capsule annulus male - true - - - - - - - - - - - - - - - - - - - - - - - - bract peripheral - - - - - - - - - - - - - - - - - - - - - - - - peristome waxy - - - - - - - - - - - - - - - - - - - - - - - - peristome waxiness - - - - - - - - - - - - - - - - - - - - - - - - peduncle retuse - - - - - - - - - - - - - - - - - - - - - - - - pedicel discoid - - - - - - - - - - - - - - - - - - - - - - - - anther theca broken - - - - - - - - - - - - - - - - - - - - - - - - anther theca wholeness - - - - - - - - - - - - - - - - - - - - - - - - shoot internode glistening - - - - - - - - - - - - - - - - - - - - - - - - shoot internode reflectivity - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf furrowed - - - - - - - - - - - - - - - - - - - - - - - - testa aligned with - - - - - - - - - - - - - - - - - - - - - - - - testa alignment - - - - - - - - - - - - - - - - - - - - - - - - stalk spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - root tip fleshy - - - - - - - - - - - - - - - - - - - - - - - - root tip composition - - - - - - - - - - - - - - - - - - - - - - - - peristome black - - - - - - - - - - - - - - - - - - - - - - - - seed dark grey - - - - - - - - - - - - - - - - - - - - - - - - axil area - - - - - - - - pericarp arrested - true - - - - - - - - pericarp offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - heartwood light red - - - - - - - - - - - - - - - - - - - - - - - - petiole reniform - - - - - - - - - - - - - - - - - - - - - - - - bract differentiated - - - - - - - - - - - - - - - - - - - - - - - - bract cellular potency - - - - - - - - - - - - - - - - - - - - - - - - testa distal to - - - - - - - - - - - - - - - - - - - - - - - - stem differentiated - - - - - - - - - - - - - - - - - - - - - - - - tuberous root oblong - - - - - - - - - - - - - - - - - - - - - - - - tuberous root 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - anther granular - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle exserted - - - - - - - - - - - - - - - - - - - - - - - - corolla level with - - - - - - - - - - - - - - - - - - - - - - - - petiole margin ovate - - - - - - - - - - - - - - - - - - - - - - - - seed violet - - - - - - - - - - - - - - - - - - - - - - - - radicle conical - - - - - - - - - - - - - - - - - - - - - - - - androecium cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot internode decreased amount - - - - - - - - - - - - - - - - - - - - - - - - shoot internode amount - - - - - - - - - - - - - - - - - - - - - - - - strophiole vertical to - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis elliptic - - - - - - - - - - - - - - - - - - - - - - - - keel distal to - - - - - - - - - - - - - - - - - - - - - - - - testa concave - - - - - - - - hypocotyl up - true - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl direction - - - - - - - - - - - - - - - - - - - - - - - - ligule dilated - - - - - - - - - - - - - - - - - - - - - - - - ligule size - - - - - - - - - - - - - - - - - - - - - - - - plant cell truncated - - - - - - - - - - - - - - - - - - - - - - - - anther vertical to - - - - - - - - - - - - - - - - - - - - - - - - endosperm lanceolate - - - - - - - - - - - - - - - - - - - - - - - - endosperm sharpness - - - - - - - - - - - - - - - - - - - - - - - - canal bilobed - - - - - - - - - - - - - - - - - - - - - - - - leaf axil sparse - - - - - - - - - - - - - - - - - - - - - - - - leaf axil spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - lamina spatulate - - - - - - - - - - - - - - - - - - - - - - - - petiolule branched - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus dorsal to - - - - - - - - - - - - - - - - - - - - - - - - endocarp drooping - - - - - - - - - - - - - - - - - - - - - - - - stem adaxial to - - - - - - - - - - - - - - - - - - - - - - - - keel sparse - - - - - - - - - - - - - - - - - - - - - - - - keel spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - flower scalloped - - - - - - - - - - - - - - - - - - - - - - - - prophyll increased length - - - - - - - - - - - - - - - - - - - - - - - - prophyll length - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf inflexible - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf flexibility - - - - - - - - - - - - - - - - - - - - - - - - pappus broad - - - - - - - - - - - - - - - - - - - - - - - - awn unbranched - - - - - - - - - - - - - - - - - - - - - - - - connective sparse - - - - - - - - - - - - - - - - - - - - - - - - filament wrinkled - - - - - - - - - - - - - - - - - - - - - - - - disk flower reniform - - - - - - - - - - - - - - - - - - - - - - - - receptacle notched - - - - - - - - - - - - - - - - - - - - - - - - apical hook warty - - - - - - - - - - - - - - - - - - - - - - - - epidermis flat - - - - - - - - - - - - - - - - - - - - - - - - shoot system smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina symmetry - - - - - - - - - - - - - - - - - - - - - - - - plant cell wrinkled - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus condensed - - - - - - - - - - - - - - - - - - - - - - - - bract spiny - - - - - - - - - - - - - - - - - - - - - - - - hypanthium retrorse - - - - - - - - - - - - - - - - - - - - - - - - sepal grey - - - - - - - - - - - - - - - - - - - - - - - - stigma ornamentation - - - - - - - - - - - - - - - - - - - - - - - - bract decurrent - - - - - - - - - - - - - - - - - - - - - - - - corm yellow - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle translucent - - - - - - - - - - - - - - - - - - - - - - - - nectary conical - - - - - - - - - - - - - - - - - - - - - - - - perianth yellow brown - - - - - - - - - - - - - - - - - - - - - - - - axil distance - - - - - - - - - - - - - - - - - - - - - - - - oil gland decussate - - - - - - - - - - - - - - - - - - - - - - - - free petal swollen - - - - - - - - - - - - - - - - - - - - - - - - free petal structure - - - - - - - - - - - - - - - - - - - - - - - - hypanthium cylindrical - - - - - - - - - - - - - - - - - - - - - - - - corm absent - - - - - - - - - - - - - - - - - - - - - - - - corm amount - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet inflexible - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet flexibility - - - - - - - - - - - - - - - - - - - - - - - - awn clavate - - - - - - - - - - - - - - - - - - - - - - - - awn concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - micropyle basal to - - - - - - - - - - - - - - - - - - - - - - - - micropyle position - - - - - - - - - - - - - - - - - - - - - - - - chalaza striated - - - - - - - - - - - - - - - - - - - - - - - - chalaza shape - - - - - - - - - - - - - - - - - - - - - - - - epidermis pathological - - - - - - - - - - - - - - - - - - - - - - - - epidermis deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - bud adjacent to - - - - - - - - - - - - - - - - - - - - - - - - epidermis fleshy - - - - - - - - - - - - - - - - - - - - - - - - pericarp dorso-ventrally flattened - - - - - - - - - - - - - - - - - - - - - - - - rhizome maroon - - - - - - - - - - - - - - - - - - - - - - - - mesocarp basal to - - - - - - - - seed coat up - true - - - - - - - - - - - - - - - - - - - - - - - - seed coat direction - - - - - - - - - - - - - - - - - - - - - - - - sepal elongated - - - - - - - - - - - - - - - - - - - - - - - - ligule setose - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore abaxial to - - - - - - - - - - - - - - - - - - - - - - - - infructescence light brown - - - - - - - - - - - - - - - - - - - - - - - - locule raised - - - - - - - - - - - - - - - - - - - - - - - - style associated with - - - - - - - - flower down - true - - - - - - - - - - - - - - - - - - - - - - - - stalk yellow orange - - - - - - - - - - - - - - - - - - - - - - - - epicalyx pedicellate - - - - - - - - - - - - - - - - - - - - - - - - epicalyx attachment quality - - - - - - - - - - - - - - - - - - - - - - - - pericarp protruding into - - - - - - - - - - - - - - - - - - - - - - - - sheath cell branched - - - - - - - - - - - - - - - - - - - - - - - - endosperm conspicuous - - - - - - - - - - - - - - - - - - - - - - - - - - - - sterile lemma phenotype - - - - - - - - - - - - - - - - - - - - - - - - sterile lemma sterile - - - - - - - - - - - - - - - - - - - - - - - - sterile lemma fertility - - - - - - - - - - - - - - - - - - - - - - - - corolla mixed - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell whorled - - - - - - - - - - - - - - - - - - - - - - - - cortex light brown - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus simple - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus complexity - - - - - - - - - - - - - - - - - - - - - - - - hilum parallel to - - - - - - - - - - - - - - - - - - - - - - - - locule ventral to - - - - - - - - - - - - - - - - - - - - - - - - flower closed - - - - - - - - - - - - - - - - - - - - - - - - gynophore truncated - - - - - - - - - - - - - - - - - - - - - - - - infructescence inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system brittle - - - - - - - - - - - - - - - - - - - - - - - - prophyll inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - carpel offset - - - - - - - - - - - - - - - - - - - - - - - - anther ornamentation - - - - - - - - free tepal female - true - - - - - - - - free tepal phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - septum vermilion - - - - - - - - - - - - - - - - - - - - - - - - infructescence pink - - - - - - - - - - - - - - - - - - - - - - - - exocarp fusiform - - - - - - - - - - - - - - - - - - - - - - - - thorn transparent - - - - - - - - - - - - - - - - - - - - - - - - thorn opacity - - - - - - - - - - - - - - - - - - - - - - - - sapwood rough - - - - - - - - - - - - - - - - - - - - - - - - bud protruding - - - - - - - - - - - - - - - - - - - - - - - - testa spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - infructescence swollen - - - - - - - - - - - - - - - - - - - - - - - - carpel sterile - - - - - - - - - - - - - - - - - - - - - - - - carpel fertility - - - - - - - - - - - - - - - - - - - - - - - - parenchyma inserted into - - - - - - - - - - - - - - - - - - - - - - - - bulb distichous - - - - - - - - - - - - - - - - - - - - - - - - flower sunken - - - - - - - - - - - - - - - - - - - - - - - - flower elevation - - - - - - - - - - - - - - - - - - - - - - - - canal circular - - - - - - - - - - - - - - - - - - - - - - - - heartwood scalloped - - - - - - - - - - - - - - - - - - - - - - - - leaf margin black - - - - - - - - - - - - - - - - - - - - - - - - shoot axis dense - - - - - - - - - - - - - - - - - - - - - - - - shoot axis mass density - - - - - - - - - - - - - - - - - - - - - - - - epidermis dark red brown - - - - - - - - leaf rachis acute - true - - - - - - - - leaf rachis duration - true - - - - - - - - - - - - - - - - - - - - - - - - sheath cell curved - - - - - - - - - - - - - - - - - - - - - - - - sheath cell curvature - - - - - - - - bark premature - true - - - - - - - - bark onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - plant cell alternate placement - - - - - - - - - - - - - - - - - - - - - - - - whole plant pedunculate - - - - - - - - - - - - - - - - - - - - - - - - septum vertical - - - - - - - - - - - - - - - - - - - - - - - - septum spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis dense - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis mass density - - - - - - - - - - - - - - - - - - - - - - - - arilloid orange - - - - - - - - - - - - - - - - - - - - - - - - plant cell rough - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril swollen - - - - - - - - - - - - - - - - - - - - - - - - tubercle height - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium hispid - - - - - - - - - - - - - - - - - - - - - - - - involucre pointed - - - - - - - - - - - - - - - - - - - - - - - - mesocarp brittle - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue falciform - - - - - - - - - - - - - - - - - - - - - - - - thorn decreased amount - - - - - - - - - - - - - - - - - - - - - - - - thorn amount - - - - - - - - - - - - - - - - - - - - - - - - pedicel broken - - - - - - - - - - - - - - - - - - - - - - - - pedicel wholeness - - - - - - - - - - - - - - - - - - - - - - - - canal swollen - - - - - - - - - - - - - - - - - - - - - - - - lenticel grey - - - - - - - - - - - - - - - - - - - - - - - - rhizome dark red brown - - - - - - - - - - - - - - - - - - - - - - - - banner petal furrowed - - - - - - - - - - - - - - - - - - - - - - - - banner petal texture - - - - - - - - - - - - - - - - - - - - - - - - anther theca terminal - - - - - - - - - - - - - - - - - - - - - - - - tepal increased size - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell axial to - - - - - - - - - - - - - - - - - - - - - - - - spikelet closed - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein subulate - - - - - - - - - - - - - - - - - - - - - - - - corolla alternate placement - - - - - - - - - - - - - - - - - - - - - - - - - - - - basal root phenotype - - - - - - - - - - - - - - - - - - - - - - - - basal root basal to - - - - - - - - - - - - - - - - - - - - - - - - basal root position - - - - - - - - - - - - - - - - - - - - - - - - perianth quadrangular - - - - - - - - - - - - - - - - - - - - - - - - connective purple - - - - - - - - - - - - - - - - - - - - - - - - staminode fertile - - - - - - - - - - - - - - - - - - - - - - - - epicalyx convex - - - - - - - - - - - - - - - - - - - - - - - - epicalyx concavity - - - - - - - - - - - - - - - - - - - - - - - - pericarp cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - stalk falciform - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath aggregated - - - - - - - - - - - - - - - - - - - - - - - - bract apex yellow - - - - - - - - - - - - - - - - - - - - - - - - valve dark purple - - - - - - - - - - - - - - - - - - - - - - - - trichome areolate - - - - - - - - - - - - - - - - - - - - - - - - upper glume increased thickness - - - - - - - - - - - - - - - - - - - - - - - - funicle oblong - - - - - - - - - - - - - - - - - - - - - - - - mesocarp striated - - - - - - - - - - - - - - - - - - - - - - - - root tip spongy - - - - - - - - - - - - - - - - - - - - - - - - stipule arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein inflexible - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein flexibility - - - - - - - - - - - - - - - - - - - - - - - - bud old - - - - - - - - - - - - - - - - - - - - - - - - bud hispid - - - - - - - - - - - - - - - - - - - - - - - - long shoot terminal - - - - - - - - - - - - - - - - - - - - - - - - bark time - - - - - - - - - - - - - - - - - - - - - - - - seed extends to - - - - - - - - - - - - - - - - - - - - - - - - bark robust - - - - - - - - - - - - - - - - - - - - - - - - seed trichome spatulate - - - - - - - - - - - - - - - - - - - - - - - - filament kinked - - - - - - - - - - - - - - - - - - - - - - - - ligule crowded - - - - - - - - - - - - - - - - - - - - - - - - gynoecium spongy - - - - - - - - - - - - - - - - - - - - - - - - upper glume slender - - - - - - - - - - - - - - - - - - - - - - - - infructescence ovate - - - - - - - - - - - - - - - - - - - - - - - - anther striated - - - - - - - - - - - - - - - - - - - - - - - - seta white - - - - - - - - - - - - - - - - - - - - - - - - stele bifurcated - - - - - - - - - - - - - - - - - - - - - - - - stalk yellow green - - - - - - - - - - - - - - - - - - - - - - - - leaflet slender - - - - - - - - - - - - - - - - - - - - - - - - involucre kinked - - - - - - - - - - - - - - - - - - - - - - - - gynoecium red - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath crowded - - - - - - - - - - - - - - - - - - - - - - - - epicalyx attenuate - - - - - - - - - - - - - - - - - - - - - - - - bud rugose - - - - - - - - - - - - - - - - - - - - - - - - tuber light orange - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore terminal - - - - - - - - - - - - - - - - - - - - - - - - axillary bud open - - - - - - - - - - - - - - - - - - - - - - - - axillary bud closure - - - - - - - - - - - - - - - - - - - - - - - - aril detached from - - - - - - - - - - - - - - - - - - - - - - - - shoot apex dark brown - - - - - - - - - - - - - - - - - - - - - - - - stipule young - - - - - - - - - - - - - - - - - - - - - - - - aril yellow brown - - - - - - - - - - - - - - - - - - - - - - - - flower bud opposite - - - - - - - - - - - - - - - - - - - - - - - - androecium present - - - - - - - - - - - - - - - - - - - - - - - - testa sharp - - - - - - - - - - - - - - - - - - - - - - - - arilloid brown - - - - - - - - - - - - - - - - - - - - - - - - keel symmetrical - - - - - - - - - - - - - - - - - - - - - - - - connective present - - - - - - - - - - - - - - - - - - - - - - - - peduncle blunt - - - - - - - - - - - - - - - - - - - - - - - - papilla cell spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - connective recurved - - - - - - - - - - - - - - - - - - - - - - - - leaf ornamentation - - - - - - - - - - - - - - - - - - - - - - - - peristome attached to - - - - - - - - - - - - - - - - - - - - - - - - peristome attachment quality - - - - - - - - - - - - - - - - - - - - - - - - root broad - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member pointed - - - - - - - - - - - - - - - - - - - - - - - - pappus elliptic - - - - - - - - - - - - - - - - - - - - - - - - rhizome spongy - - - - - - - - - - - - - - - - - - - - - - - - mesocarp lobed - - - - - - - - - - - - - - - - - - - - - - - - involucre loose - - - - - - - - - - - - - - - - - - - - - - - - prickle hairy - - - - - - - - - - - - - - - - - - - - - - - - resin canal foveate - - - - - - - - - - - - - - - - - - - - - - - - - - - - megagametophyte phenotype - - - - - - - - - - - - - - - - - - - - - - - - megagametophyte open - - - - - - - - - - - - - - - - - - - - - - - - megagametophyte closure - - - - - - - - - - - - - - - - - - - - - - - - lemma granular - - - - - - - - - - - - - - - - - - - - - - - - heartwood alternate placement - - - - - - - - - - - - - - - - - - - - - - - - heartwood spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - branch inflated - - - - - - - - - - - - - - - - - - - - - - - - branch structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - cotyledon pinnate - - - - - - - - - - - - - - - - - - - - - - - - peduncle dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf edible - - - - - - - - - - - - - - - - - - - - - - - - leaf edibility - - - - - - - - - - - - - - - - - - - - - - - - gynophore grey - - - - - - - - - - - - - - - - - - - - - - - - staminode actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - staminode radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - juice sac attenuate - - - - - - - - - - - - - - - - - - - - - - - - juice sac sharpness - - - - - - - - - - - - - - - - - - - - - - - - sepal subcircular - - - - - - - - - - - - - - - - - - - - - - - - spikelet attenuate - - - - - - - - - - - - - - - - - - - - - - - - endocarp viscid - - - - - - - - - - - - - - - - - - - - - - - - testa circular - - - - - - - - - - - - - - - - - - - - - - - - hypanthium oblong - - - - - - - - - - - - - - - - - - - - - - - - testa inflexible - - - - - - - - - - - - - - - - - - - - - - - - testa flexibility - - - - - - - - - - - - - - - - - - - - - - - - pedicel lanceolate-triangular - - - - - - - - - - - - - - - - - - - - - - - - mesocarp undulate - - - - - - - - - - - - - - - - - - - - - - - - anther dilated - - - - - - - - - - - - - - - - - - - - - - - - anther size - - - - - - - - - - - - - - - - - - - - - - - - sorus concealed - - - - - - - - - - - - - - - - - - - - - - - - prophyll dorsal to - - - - - - - - - - - - - - - - - - - - - - - - androecium red brown - - - - - - - - - - - - - - - - - - - - - - - - ray system glabrous - - - - - - - - - - - - - - - - - - - - - - - - ray system pilosity - - - - - - - - - - - - - - - - - - - - - - - - stamen grooved - - - - - - - - - - - - - - - - - - - - - - - - upper glume external to - - - - - - - - - - - - - - - - - - - - - - - - endocarp cuboid - - - - - - - - - - - - - - - - - - - - - - - - septum rugose - - - - - - - - - - - - - - - - - - - - - - - - septum surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - palea overlapping - - - - - - - - - - - - - - - - - - - - - - - - bract right - - - - - - - - - - - - - - - - - - - - - - - - leaf axil inflated - - - - - - - - - - - - - - - - - - - - - - - - leaf axil structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - rhizome whole - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - thallus dark green - - - - - - - - - - - - - - - - - - - - - - - - staminode oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - bract constricted - - - - - - - - - - - - - - - - - - - - - - - - endocarp soft - - - - - - - - - - - - - - - - - - - - - - - - stipule scalloped - - - - - - - - - - - - - - - - - - - - - - - - gynoecium mature - - - - - - - - coma down - true - - - - - - - - - - - - - - - - - - - - - - - - branch waxy - - - - - - - - - - - - - - - - - - - - - - - - branch waxiness - - - - - - - - - - - - - - - - - - - - - - - - bracteole lateral to - - - - - - - - seed male - true - - - - - - - - - - - - - - - - - - - - - - - - pollen attached to - - - - - - - - - - - - - - - - - - - - - - - - pollen attachment quality - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf caudate - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem increased size - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem size - - - - - - - - - - - - - - - - - - - - - - - - style separated from - - - - - - - - - - - - - - - - - - - - - - - - endosperm invaginated - - - - - - - - - - - - - - - - - - - - - - - - tepal attenuate - - - - - - - - - - - - - - - - - - - - - - - - sepal deep pink - - - - - - - - - - - - - - - - - - - - - - - - carpel slender - - - - - - - - - - - - - - - - - - - - - - - - stem width - - - - - - - - - - - - - - - - - - - - - - - - bulb elliptic - - - - - - - - - - - - - - - - - - - - - - - - bulb 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant cell hispid - - - - - - - - - - - - - - - - - - - - - - - - placenta broad - - - - - - - - - - - - - - - - - - - - - - - - stigma distal to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein coating - - - - - - - - - - - - - - - - - - - - - - - - root tangled - - - - - - - - - - - - - - - - - - - - - - - - nectary red - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein simple - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein complexity - - - - - - - - - - - - - - - - - - - - - - - - anther separated from - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel opposite - - - - - - - - - - - - - - - - - - - - - - - - hypanthium young - - - - - - - - - - - - - - - - - - - - - - - - hypanthium age - - - - - - - - - - - - - - - - - - - - - - - - aril coiled - - - - - - - - - - - - - - - - - - - - - - - - aril coiling - - - - - - - - - - - - - - - - - - - - - - - - cotyledon purple - - - - - - - - - - - - - - - - - - - - - - - - cotyledon color - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf tubular - - - - - - - - - - - - - - - - - - - - - - - - sheath cell oblong - - - - - - - - - - - - - - - - - - - - - - - - funicle elongated - - - - - - - - - - - - - - - - - - - - - - - - leaflet angle - - - - - - - - - - - - - - - - - - - - - - - - shoot system lanceolate - - - - - - - - - - - - - - - - - - - - - - - - palea granular - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue cuspidate - - - - - - - - - - - - - - - - - - - - - - - - bracteole dispersed - - - - - - - - - - - - - - - - - - - - - - - - pedicel old - - - - - - - - - - - - - - - - - - - - - - - - stigma rugose - - - - - - - - - - - - - - - - - - - - - - - - micropyle attached to - - - - - - - - - - - - - - - - - - - - - - - - micropyle attachment quality - - - - - - - - - - - - - - - - - - - - - - - - keel cylindrical - - - - - - - - - - - - - - - - - - - - - - - - lower glume cylindrical - - - - - - - - - - - - - - - - - - - - - - - - style axial to - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system grooved - - - - - - - - stolon up - true - - - - - - - - - - - - - - - - - - - - - - - - stolon direction - - - - - - - - - - - - - - - - - - - - - - - - stem base crowded - - - - - - - - - - - - - - - - - - - - - - - - stem base position - - - - - - - - - - - - - - - - - - - - - - - - short shoot obtuse - - - - - - - - - - - - - - - - - - - - - - - - short shoot 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - - - - - multicellular trichome phenotype - - - - - - - - - - - - - - - - - - - - - - - - multicellular trichome multicellular - - - - - - - - - - - - - - - - - - - - - - - - multicellular trichome cellularity - - - - - - - - - - - - - - - - - - - - - - - - stalk autogenous - - - - - - - - - - - - - - - - - - - - - - - - staminode tubular - - - - - - - - - - - - - - - - - - - - - - - - seed level with - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle discoid - - - - - - - - - - - - - - - - - - - - - - - - connective orbicular - - - - - - - - - - - - - - - - - - - - - - - - androecium opposite - - - - - - - - - - - - - - - - - - - - - - - - terminal bud folded - - - - - - - - - - - - - - - - - - - - - - - - terminal bud surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - petiolule arched - - - - - - - - - - - - - - - - - - - - - - - - bark notched - - - - - - - - - - - - - - - - - - - - - - - - leaf axil green - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein basal to - - - - - - - - - - - - - - - - - - - - - - - - free sepal white - - - - - - - - - - - - - - - - - - - - - - - - spikelet hispidulous - - - - - - - - - - - - - - - - - - - - - - - - root flattened - - - - - - - - - - - - - - - - - - - - - - - - root curvature - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium branched - - - - - - - - - - - - - - - - - - - - - - - - sapwood flush - - - - - - - - - - - - - - - - - - - - - - - - sapwood position - - - - - - - - - - - - - - - - - - - - - - - - rhizome procumbent - - - - - - - - - - - - - - - - - - - - - - - - palea closed - - - - - - - - - - - - - - - - - - - - - - - - palea closure - - - - - - - - - - - - - - - - - - - - - - - - petiole cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle multiple - - - - - - - - - - - - - - - - - - - - - - - - spikelet tangled - - - - - - - - - - - - - - - - - - - - - - - - inflorescence orbicular - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina mature - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem symmetrical - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem symmetry - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium sterile - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium fertility - - - - - - - - - - - - - - - - - - - - - - - - stele caudate - - - - - - - - - - - - - - - - - - - - - - - - pulvinus cylindrical - - - - - - - - - - - - - - - - - - - - - - - - pulvinus convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - petiolule adjacent to - - - - - - - - - - - - - - - - - - - - - - - - root tip sterile - - - - - - - - - - - - - - - - - - - - - - - - root tip fertility - - - - - - - - - - - - - - - - - - - - - - - - microspore warty - - - - - - - - - - - - - - - - - - - - - - - - bud congested - - - - - - - - - - - - - - - - - - - - - - - - coma black - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus spatulate - - - - - - - - - - - - - - - - - - - - - - - - central zone pink - - - - - - - - - - - - - - - - - - - - - - - - columella laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - petal hispid - - - - - - - - - - - - - - - - - - - - - - - - endosperm maturity - - - - - - - - - - - - - - - - - - - - - - - - whole plant fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - epicotyl flattened - - - - - - - - - - - - - - - - - - - - - - - - epicotyl curvature - - - - - - - - - - - - - - - - - - - - - - - - nectary present - - - - - - - - - - - - - - - - - - - - - - - - disk flower grooved - - - - - - - - branch down - true - - - - - - - - - - - - - - - - - - - - - - - - pericarp lateral to - - - - - - - - - - - - - - - - - - - - - - - - stigma ridged - - - - - - - - - - - - - - - - - - - - - - - - receptacle dilated - - - - - - - - - - - - - - - - - - - - - - - - androecium truncated - - - - - - - - - - - - - - - - - - - - - - - - ovary wall angle - - - - - - - - - - - - - - - - - - - - - - - - testa osseous - - - - - - - - - - - - - - - - - - - - - - - - spikelet obconical - - - - - - - - - - - - - - - - - - - - - - - - growth ring opposite - - - - - - - - - - - - - - - - - - - - - - - - lenticel simple - - - - - - - - - - - - - - - - - - - - - - - - lenticel complexity - - - - - - - - - - - - - - - - - - - - - - - - stolon star shaped - - - - - - - - - - - - - - - - - - - - - - - - calyx domed - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - inflorescence volume - - - - - - - - - - - - - - - - - - - - - - - - bud emarginate - - - - - - - - - - - - - - - - - - - - - - - - hilum emarginate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall recurved - - - - - - - - - - - - - - - - - - - - - - - - prickle furrowed - - - - - - - - axillary bud meristem arrested - true - - - - - - - - axillary bud meristem offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - placenta transparent - - - - - - - - - - - - - - - - - - - - - - - - placenta opacity - - - - - - - - - - - - - - - - - - - - - - - - involucre alternate placement - - - - - - - - - - - - - - - - - - - - - - - - perianth collapsed - - - - - - - - - - - - - - - - - - - - - - - - thallus conical - - - - - - - - - - - - - - - - - - - - - - - - bracteole size - - - - - - - - - - - - - - - - - - - - - - - - stalk semicircular - - - - - - - - - - - - - - - - - - - - - - - - petal sunken - - - - - - - - - - - - - - - - - - - - - - - - petal elevation - - - - - - - - - - - - - - - - - - - - - - - - sepal subtriangular - - - - - - - - - - - - - - - - - - - - - - - - filament rugose - - - - - - - - - - - - - - - - - - - - - - - - infructescence hispid - - - - - - - - - - - - - - - - - - - - - - - - petiole lobate - - - - - - - - - - - - - - - - - - - - - - - - bark juvenile - - - - - - - - - - - - - - - - - - - - - - - - connective fleshy - - - - - - - - - - - - - - - - - - - - - - - - connective composition - - - - - - - - - - - - - - - - - - - - - - - - anther dark green - - - - - - - - - - - - - - - - - - - - - - - - plant embryo decreased amount - - - - - - - - - - - - - - - - - - - - - - - - plant embryo amount - - - - - - - - - - - - - - - - - - - - - - - - banner petal constricted - - - - - - - - - - - - - - - - - - - - - - - - keel reniform - - - - - - - - - - - - - - - - - - - - - - - - receptacle increased thickness - - - - - - - - - - - - - - - - - - - - - - - - receptacle thickness - - - - - - - - - - - - - - - - - - - - - - - - seed abaxial to - - - - - - - - - - - - - - - - - - - - - - - - hilum grey - - - - - - - - - - - - - - - - - - - - - - - - radicle broad - - - - - - - - - - - - - - - - - - - - - - - - septum glabrous - - - - - - - - - - - - - - - - - - - - - - - - septum pilosity - - - - - - - - - - - - - - - - - - - - - - - - petal ochre - - - - - - - - - - - - - - - - - - - - - - - - rhizome viscous - - - - - - - - - - - - - - - - - - - - - - - - rhizome viscosity - - - - - - - - - - - - - - - - - - - - - - - - parenchyma warty - - - - - - - - - - - - - - - - - - - - - - - - anther theca dentated - - - - - - - - - - - - - - - - - - - - - - - - bracteole young - - - - - - - - - - - - - - - - - - - - - - - - locule purple - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle bitter - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle flavor - - - - - - - - - - - - - - - - - - - - - - - - branch decayed - - - - - - - - - - - - - - - - - - - - - - - - branch viability - - - - - - - - - - - - - - - - - - - - - - - - seed subulate - - - - - - - - - - - - - - - - - - - - - - - - locule normal - - - - - - - - - - - - - - - - - - - - - - - - locule deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - aril lobate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium adaxial to - - - - - - - - - - - - - - - - - - - - - - - - bark inserted into - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath cylindrical - - - - - - - - - - - - - - - - - - - - - - - - leaflet warty - - - - - - - - - - - - - - - - - - - - - - - - bud pulvinate - - - - - - - - - - - - - - - - - - - - - - - - valve reniform - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence rough - - - - - - - - - - - - - - - - - - - - - - - - spikelet grooved - - - - - - - - - - - - - - - - - - - - - - - - whole plant slender - - - - - - - - - - - - - - - - - - - - - - - - canal fleshy - - - - - - - - - - - - - - - - - - - - - - - - canal composition - - - - - - - - - - - - - - - - - - - - - - - - banner petal arched - - - - - - - - - - - - - - - - - - - - - - - - bud subterminal - - - - - - - - - - - - - - - - - - - - - - - - axil rhomboid - - - - - - - - - - - - - - - - - - - - - - - - cotyledon bifurcated - - - - - - - - - - - - - - - - - - - - - - - - cotyledon branchiness - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member curved - - - - - - - - - - - - - - - - - - - - - - - - stamen falciform - - - - - - - - - - - - - - - - - - - - - - - - seed trichome ventral to - - - - - - - - - - - - - - - - - - - - - - - - leaflet cauline to - - - - - - - - - - - - - - - - - - - - - - - - lemma distance - - - - - - - - - - - - - - - - - - - - - - - - - - - - megasporangium phenotype - - - - - - - - - - - - - - - - - - - - - - - - megasporangium attached to - - - - - - - - - - - - - - - - - - - - - - - - megasporangium attachment quality - - - - - - - - - - - - - - - - - - - - - - - - anther waxy - - - - - - - - - - - - - - - - - - - - - - - - anther waxiness - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root brittle - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf kinked - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem cuneate - - - - - - - - - - - - - - - - - - - - - - - - lamina right - - - - - - - - - - - - - - - - - - - - - - - - style hard - - - - - - - - - - - - - - - - - - - - - - - - banner petal rough - - - - - - - - - - - - - - - - - - - - - - - - strophiole oblong - - - - - - - - - - - - - - - - - - - - - - - - strophiole 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - calyx separating - - - - - - - - - - - - - - - - - - - - - - - - bark drooping - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath old - - - - - - - - - - - - - - - - - - - - - - - - stigma attached to - - - - - - - - - - - - - - - - - - - - - - - - lemma hard - - - - - - - - calyx variant - true - - - - - - - - calyx variability - true - - - - - - - - - - - - - - - - - - - - - - - - connective adaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein folded - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure revolute - - - - - - - - - - - - - - - - - - - - - - - - leaf axil opposite - - - - - - - - - - - - - - - - - - - - - - - - pericarp blue - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell coiled - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell coiling - - - - - - - - - - - - - - - - - - - - - - - - petiolule angular - - - - - - - - - - - - - - - - - - - - - - - - ovary wall glistening - - - - - - - - - - - - - - - - - - - - - - - - ovary wall reflectivity - - - - - - - - - - - - - - - - - - - - - - - - perisperm straight - - - - - - - - - - - - - - - - - - - - - - - - perisperm shape - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal inflated - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - lenticel spotted - - - - - - - - - - - - - - - - - - - - - - - - lenticel color pattern - - - - - - - - - - - - - - - - - - - - - - - - bud punctate - - - - - - - - - - - - - - - - - - - - - - - - bud aggregated - - - - - - - - - - - - - - - - - - - - - - - - oil gland elliptic - - - - - - - - - - - - - - - - - - - - - - - - placenta flattened - - - - - - - - - - - - - - - - - - - - - - - - placenta curvature - - - - - - - - - - - - - - - - - - - - - - - - sapwood light yellow - - - - - - - - - - - - - - - - - - - - - - - - gynoecium flat - - - - - - - - - - - - - - - - - - - - - - - - thorn pedicellate - - - - - - - - - - - - - - - - - - - - - - - - thorn attachment quality - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member caudate - - - - - - - - - - - - - - - - - - - - - - - - involucre serrated - - - - - - - - - - - - - - - - - - - - - - - - involucre back - - - - - - - - - - - - - - - - - - - - - - - - bud adhesive - - - - - - - - - - - - - - - - - - - - - - - - bud adhesivity - - - - - - - - - - - - - - - - - - - - - - - - peduncle proximal to - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell exserted - - - - - - - - - - - - - - - - - - - - - - - - bark scalloped - - - - - - - - - - - - - - - - - - - - - - - - awn broad - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence spatulate - - - - - - - - - - - - - - - - - - - - - - - - aril orbicular - - - - - - - - - - - - - - - - - - - - - - - - receptacle recurved - - - - - - - - - - - - - - - - - - - - - - - - funicle hard - - - - - - - - - - - - - - - - - - - - - - - - stipule emarginate - - - - - - - - - - - - - - - - - - - - - - - - leaf base lobed - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus heart shaped - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - anther cut - - - - - - - - - - - - - - - - - - - - - - - - leaf base branched - - - - - - - - - - - - - - - - - - - - - - - - endosperm sterile - - - - - - - - - - - - - - - - - - - - - - - - endosperm fertility - - - - - - - - - - - - - - - - - - - - - - - - leaflet parallel-sided - - - - - - - - - - - - - - - - - - - - - - - - ligule arachnose - - - - - - - - - - - - - - - - - - - - - - - - bud oblique to - - - - - - - - - - - - - - - - - - - - - - - - carpel opposite - - - - - - - - - - - - - - - - - - - - - - - - root tip tubular - - - - - - - - - - - - - - - - - - - - - - - - sheath cell pedicellate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell attachment quality - - - - - - - - - - - - - - - - - - - - - - - - trichome revolute - - - - - - - - - - - - - - - - - - - - - - - - androecium sharp - - - - - - - - - - - - - - - - - - - - - - - - upper glume purple - - - - - - - - - - - - - - - - - - - - - - - - leaf base emarginate - - - - - - - - - - - - - - - - - - - - - - - - coma fusiform - - - - - - - - - - - - - - - - - - - - - - - - lodicule cuneate - - - - - - - - - - - - - - - - - - - - - - - - lodicule 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - sorus U-shaped - - - - - - - - - - - - - - - - - - - - - - - - sorus concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - whole plant unbranched - - - - - - - - - - - - - - - - - - - - - - - - mesocarp swollen - - - - - - - - - - - - - - - - - - - - - - - - root revolute - - - - - - - - - - - - - - - - - - - - - - - - ovary wall actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - ovary wall radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore flattened - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore curvature - - - - - - - - - - - - - - - - - - - - - - - - sepal reniform - - - - - - - - - - - - - - - - - - - - - - - - stipel punctate - - - - - - - - - - - - - - - - - - - - - - - - epicalyx smooth - - - - - - - - - - - - - - - - - - - - - - - - sepal curled - - - - - - - - - - - - - - - - - - - - - - - - stolon triangular - - - - - - - - - - - - - - - - - - - - - - - - shoot system cylindrical - - - - - - - - - - - - - - - - - - - - - - - - oil gland back - - - - - - - - - - - - - - - - - - - - - - - - oil gland direction - - - - - - - - - - - - - - - - - - - - - - - - pistillode parallel to - - - - - - - - - - - - - - - - - - - - - - - - stereome orange - - - - - - - - - - - - - - - - - - - - - - - - axil tomentose - - - - - - - - - - - - - - - - - - - - - - - - cortex red - - - - - - - - - - - - - - - - - - - - - - - - tubercle undivided - - - - - - - - - - - - - - - - - - - - - - - - mesophyll structure - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member warty - - - - - - - - - - - - - - - - - - - - - - - - axil decumbent - - - - - - - - - - - - - - - - - - - - - - - - axil adaxial to - - - - - - - - - - - - - - - - - - - - - - - - sheath cell raised - - - - - - - - - - - - - - - - - - - - - - - - bract axil terminal - - - - - - - - - - - - - - - - - - - - - - - - bract axil position - - - - - - - - - - - - - - - - - - - - - - - - perianth kinked - - - - - - - - - - - - - - - - - - - - - - - - perianth heart shaped - - - - - - - - - - - - - - - - - - - - - - - - raphe smooth - - - - - - - - - - - - - - - - - - - - - - - - corolla exposed - - - - - - - - - - - - - - - - - - - - - - - - androecium broken - - - - - - - - - - - - - - - - - - - - - - - - androecium wholeness - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle lobed - - - - - - - - - - - - - - - - - - - - - - - - seed operculum ovate - - - - - - - - - - - - - - - - - - - - - - - - bracteole cuspidate - - - - - - - - - - - - - - - - - - - - - - - - style confluent with - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf slit-like - - - - - - - - - - - - - - - - - - - - - - - - perianth young - - - - - - - - - - - - - - - - - - - - - - - - branch height - - - - - - - - - - - - - - - - - - - - - - - - petiole slit-like - - - - - - - - - - - - - - - - - - - - - - - - keel caudate - - - - - - - - - - - - - - - - - - - - - - - - pedicel curled - - - - - - - - - - - - - - - - - - - - - - - - bulb glabrous - - - - - - - - - - - - - - - - - - - - - - - - bulb pilosity - - - - - - - - - - - - - - - - - - - - - - - - pseudostem obovate - - - - - - - - - - - - - - - - - - - - - - - - placenta curved - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl hispid - - - - - - - - - - - - - - - - - - - - - - - - petal pinnate - - - - - - - - - - - - - - - - - - - - - - - - tepal curved - - - - - - - - - - - - - - - - - - - - - - - - stereome obtuse - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf cylindrical - - - - - - - - - - - - - - - - - - - - - - - - thorn oblong - - - - - - - - - - - - - - - - - - - - - - - - areole bud triangular - - - - - - - - - - - - - - - - - - - - - - - - thorn cauline to - - - - - - - - - - - - - - - - - - - - - - - - leaflet hispid - - - - - - - - - - - - - - - - - - - - - - - - seed folded - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence caudate - - - - - - - - - - - - - - - - - - - - - - - - androecium increased thickness - - - - - - - - - - - - - - - - - - - - - - - - androecium thickness - - - - - - - - - - - - - - - - - - - - - - - - scutellar node bifurcated - - - - - - - - - - - - - - - - - - - - - - - - central zone spherical - - - - - - - - - - - - - - - - - - - - - - - - branch multifid - - - - - - - - - - - - - - - - - - - - - - - - branch medial to - - - - - - - - - - - - - - - - - - - - - - - - rhizome subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex acuminate - - - - - - - - - - - - - - - - - - - - - - - - pappus cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - endocarp subulate - - - - - - - - - - - - - - - - - - - - - - - - tubercle unbranched - - - - - - - - - - - - - - - - - - - - - - - - tepal area - - - - - - - - - - - - - - - - - - - - - - - - perianth parallel-sided - - - - - - - - - - - - - - - - - - - - - - - - calyx retuse - - - - - - - - - - - - - - - - - - - - - - - - petiolule dorsal to - - - - - - - - - - - - - - - - - - - - - - - - involucre dilated - - - - - - - - - - - - - - - - - - - - - - - - prickle pointed - - - - - - - - - - - - - - - - - - - - - - - - stem base size - - - - - - - - - - - - - - - - - - - - - - - - gynoecium bilobed - - - - - - - - - - - - - - - - - - - - - - - - involucre actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - involucre radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - ray system furrowed - - - - - - - - - - - - - - - - - - - - - - - - pith simple - - - - - - - - - - - - - - - - - - - - - - - - pith complexity - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell conical - - - - - - - - - - - - - - - - - - - - - - - - style U-shaped - - - - - - - - - - - - - - - - - - - - - - - - style falciform - - - - - - - - - - - - - - - - - - - - - - - - petiole sharp - - - - - - - - - - - - - - - - - - - - - - - - lemma concave - - - - - - - - - - - - - - - - - - - - - - - - root grey - - - - - - - - - - - - - - - - - - - - - - - - petal sexually dimorphic - - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus pedicellate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus attachment quality - - - - - - - - - - - - - - - - - - - - - - - - petal sigmoid - - - - - - - - - - - - - - - - - - - - - - - - corolla setose - - - - - - - - - - - - - - - - - - - - - - - - lamina concentrated - - - - - - - - - - - - - - - - - - - - - - - - lamina concentration of - - - - - - - - - - - - - - - - - - - - - - - - short shoot loose - - - - - - - - - - - - - - - - - - - - - - - - short shoot spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf base attached to - - - - - - - - - - - - - - - - - - - - - - - - leaf base attachment quality - - - - - - - - - - - - - - - - - - - - - - - - axil curled - - - - - - - - - - - - - - - - - - - - - - - - aril angle - - - - - - - - - - - - - - - - - - - - - - - - stigma yellow green - - - - - - - - - - - - - - - - - - - - - - - - apical hook punctate - - - - - - - - - - - - - - - - - - - - - - - - locule right - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein retuse - - - - - - - - - - - - - - - - - - - - - - - - bud actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - bud radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - staminode filamentous - - - - - - - - - - - - - - - - - - - - - - - - leaflet dorsal to - - - - - - - - - - - - - - - - - - - - - - - - infructescence dispersed - - - - - - - - - - - - - - - - - - - - - - - - pappus hispid - - - - - - - - - - - - - - - - - - - - - - - - petiolule coiled - - - - - - - - - - - - - - - - - - - - - - - - petiolule coiling - - - - - - - - - - - - - - - - - - - - - - - - stipule smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system axial to - - - - - - - - - - - - - - - - - - - - - - - - tepal blue - - - - - - - - - - - - - - - - - - - - - - - - style rough - - - - - - - - - - - - - - - - - - - - - - - - bract subcircular - - - - - - - - - - - - - - - - - - - - - - - - filament striated - - - - - - - - - - - - - - - - - - - - - - - - bud cut - - - - - - - - - - - - - - - - - - - - - - - - connective tight - - - - - - - - - - - - - - - - - - - - - - - - bracteole fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - gynoecium smooth - - - - - - - - - - - - - - - - - - - - - - - - gynoecium texture - - - - - - - - - - - - - - - - - - - - - - - - branch opaque - - - - - - - - - - - - - - - - - - - - - - - - branch opacity - - - - - - - - - - - - - - - - - - - - - - - - glume notched - - - - - - - - - - - - - - - - - - - - - - - - spikelet width - - - - - - - - - - - - - - - - - - - - - - - - juice sac scalloped - - - - - - - - - - - - - - - - - - - - - - - - axil furrowed - - - - - - - - - - - - - - - - - - - - - - - - pulvinus whole - - - - - - - - - - - - - - - - - - - - - - - - pulvinus wholeness - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein cylindrical - - - - - - - - - - - - - - - - - - - - - - - - axil distichous - - - - - - - - - - - - - - - - - - - - - - - - aril dark grey - - - - - - - - - - - - - - - - - - - - - - - - bud front - - - - - - - - - - - - - - - - - - - - - - - - infructescence aggregated - - - - - - - - pollen hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - bud elongated - - - - - - - - - - - - - - - - - - - - - - - - prickle red brown - - - - - - - - - - - - - - - - - - - - - - - - stigma mature - - - - - - - - - - - - - - - - - - - - - - - - lower glume light green - - - - - - - - - - - - - - - - - - - - - - - - stem light green - - - - - - - - - - - - - - - - - - - - - - - - gynoecium exserted - - - - - - - - - - - - - - - - - - - - - - - - pith slender - - - - - - - - - - - - - - - - - - - - - - - - rhizome semi erect - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue condensed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis young - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis age - - - - - - - - - - - - - - - - - - - - - - - - stipule decumbent - - - - - - - - - - - - - - - - - - - - - - - - pseudostem elongated - - - - - - - - - - - - - - - - - - - - - - - - pollen dark brown - - - - - - - - - - - - - - - - - - - - - - - - flower old - - - - - - - - - - - - - - - - - - - - - - - - bract multi-colored - - - - - - - - - - - - - - - - - - - - - - - - bract color pattern - - - - - - - - hypanthium subacute - true - - - - - - - - - - - - - - - - - - - - - - - - palea indurated - - - - - - - - - - - - - - - - - - - - - - - - locule bent - - - - - - - - - - - - - - - - - - - - - - - - anther funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - bark brown green - - - - - - - - - - - - - - - - - - - - - - - - peristome dark green - - - - - - - - - - - - - - - - - - - - - - - - nucellus curved - - - - - - - - - - - - - - - - - - - - - - - - nucellus curvature - - - - - - - - - - - - - - - - - - - - - - - - infructescence level with - - - - - - - - - - - - - - - - - - - - - - - - crown root swollen - - - - - - - - - - - - - - - - - - - - - - - - seed broken - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus curved - - - - - - - - - - - - - - - - - - - - - - - - stipule furrowed - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet rough - - - - - - - - - - - - - - - - - - - - - - - - inflorescence height - - - - - - - - - - - - - - - - - - - - - - - - perianth back - - - - - - - - - - - - - - - - - - - - - - - - leaf axil lanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf axil sharpness - - - - - - - - - - - - - - - - - - - - - - - - inflorescence confluent with - - - - - - - - - - - - - - - - - - - - - - - - plant cell areolate - - - - - - - - - - - - - - - - - - - - - - - - infructescence broad - - - - - - - - - - - - - - - - - - - - - - - - valve branched - - - - - - - - - - - - - - - - - - - - - - - - valve branchiness - - - - - - - - - - - - - - - - - - - - - - - - central zone bilobed - - - - - - - - - - - - - - - - - - - - - - - - sorus dilated - - - - - - - - - - - - - - - - - - - - - - - - plant callus concave - - - - - - - - - - - - - - - - - - - - - - - - banner petal trilobed - - - - - - - - - - - - - - - - - - - - - - - - peduncle spatulate - - - - - - - - - - - - - - - - - - - - - - - - valve hard - - - - - - - - - - - - - - - - - - - - - - - - valve hardness - - - - - - - - - - - - - - - - - - - - - - - - exocarp orange - - - - - - - - - - - - - - - - - - - - - - - - pericarp absent - - - - - - - - - - - - - - - - - - - - - - - - receptacle articulated with - - - - - - - - - - - - - - - - - - - - - - - - scutellar node obtuse - - - - - - - - - - - - - - - - - - - - - - - - flower tapered - - - - - - - - - - - - - - - - - - - - - - - - banner petal basal to - - - - - - - - - - - - - - - - - - - - - - - - bracteole yellow - - - - - - - - - - - - - - - - - - - - - - - - periderm oblong - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein cuspidate - - - - - - - - - - - - - - - - - - - - - - - - bud differentiated - - - - - - - - - - - - - - - - - - - - - - - - bud cellular potency - - - - - - - - - - - - - - - - - - - - - - - - pistillode translucent - - - - - - - - - - - - - - - - - - - - - - - - pistillode opacity - - - - - - - - - - - - - - - - - - - - - - - - placenta smooth - - - - - - - - - - - - - - - - - - - - - - - - placenta texture - - - - - - - - - - - - - - - - - - - - - - - - thallus discoid - - - - - - - - - - - - - - - - - - - - - - - - root viscous - - - - - - - - - - - - - - - - - - - - - - - - root viscosity - - - - - - - - - - - - - - - - - - - - - - - - columella spherical - - - - - - - - - - - - - - - - - - - - - - - - columella convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - glume warty - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf conical - - - - - - - - - - - - - - - - - - - - - - - - lemma articulated with - - - - - - - - - - - - - - - - - - - - - - - - ray system flattened - - - - - - - - - - - - - - - - - - - - - - - - corm blunt - - - - - - - - - - - - - - - - - - - - - - - - bud asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - seta dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petiolule inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - filament blunt - - - - - - - - - - - - - - - - - - - - - - - - whole plant emarginate - - - - - - - - - - - - - - - - - - - - - - - - bract distance - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein convex - - - - - - - - - - - - - - - - - - - - - - - - micropyle whorled - - - - - - - - - - - - - - - - - - - - - - - - micropyle spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - seed sunken - - - - - - - - - - - - - - - - - - - - - - - - seed elevation - - - - - - - - - - - - - - - - - - - - - - - - nectary tubular - - - - - - - - - - - - - - - - - - - - - - - - prickle rough - - - - - - - - - - - - - - - - - - - - - - - - valve sterile - - - - - - - - - - - - - - - - - - - - - - - - valve fertility - - - - - - - - - - - - - - - - - - - - - - - - sheath cell convolute - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein slit-like - - - - - - - - - - - - - - - - - - - - - - - - anther concave - - - - - - - - - - - - - - - - - - - - - - - - pericarp cuneate - - - - - - - - - - - - - - - - - - - - - - - - plant embryo flattened - - - - - - - - - - - - - - - - - - - - - - - - anther rough - - - - - - - - - - - - - - - - - - - - - - - - stele bilateral - - - - - - - - - - - - - - - - - - - - - - - - stalk asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - stalk symmetry - - - - - - - - - - - - - - - - - - - - - - - - costa yellow brown - - - - - - - - - - - - - - - - - - - - - - - - axil inflated - - - - - - - - - - - - - - - - - - - - - - - - axil structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - plant sap viscous - - - - - - - - - - - - - - - - - - - - - - - - plant sap viscosity - - - - - - - - - - - - - - - - - - - - - - - - style yellow orange - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus lanceolate - - - - - - - - - - - - - - - - - - - - - - - - pulvinus oblong - - - - - - - - - - - - - - - - - - - - - - - - pedicel spongy - - - - - - - - - - - - - - - - - - - - - - - - gynoecium clavate - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet abaxial to - - - - - - - - - - - - - - - - - - - - - - - - endosperm erect - - - - - - - - lenticel acute - true - - - - - - - - lenticel duration - true - - - - - - - - - - - - - - - - - - - - - - - - filament warty - - - - - - - - - - - - - - - - - - - - - - - - ligule pink - - - - - - - - - - - - - - - - - - - - - - - - gynoecium associated with - - - - - - - - - - - - - - - - - - - - - - - - raphe fleshy - - - - - - - - - - - - - - - - - - - - - - - - raphe composition - - - - - - - - - - - - - - - - - - - - - - - - radicle branched - - - - - - - - - - - - - - - - - - - - - - - - radicle branchiness - - - - - - - - - - - - - - - - - - - - - - - - exotesta triangular - - - - - - - - - - - - - - - - - - - - - - - - exotesta 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - canal oblong - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - radicle fused with - - - - - - - - - - - - - - - - - - - - - - - - radicle structure - - - - - - - - - - - - - - - - - - - - - - - - flower angle - - - - - - - - - - - - - - - - - - - - - - - - fruit serrated - - - - - - - - - - - - - - - - - - - - - - - - petiole margin angular - - - - - - - - - - - - - - - - - - - - - - - - sepal fused with - - - - - - - - - - - - - - - - - - - - - - - - hilum elongated - - - - - - - - - - - - - - - - - - - - - - - - arilloid fleshy - - - - - - - - - - - - - - - - - - - - - - - - arilloid composition - - - - - - - - - - - - - - - - - - - - - - - - pedicel split - - - - - - - - - - - - - - - - - - - - - - - - locule dry - - - - - - - - - - - - - - - - - - - - - - - - locule wetness - - - - - - - - - - - - - - - - - - - - - - - - columella subulate - - - - - - - - - - - - - - - - - - - - - - - - infructescence broken - - - - - - - - - - - - - - - - - - - - - - - - infructescence wholeness - - - - - - - - - - - - - - - - - - - - - - - - seed trichome spotted - - - - - - - - - - - - - - - - - - - - - - - - scutellar node concave - - - - - - - - - - - - - - - - - - - - - - - - crown root subulate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall branched - - - - - - - - - - - - - - - - - - - - - - - - plant cell bifurcated - - - - - - - - - - - - - - - - - - - - - - - - plant cell branchiness - - - - - - - - - - - - - - - - - - - - - - - - costa auriculate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf open - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf closure - - - - - - - - - - - - - - - - - - - - - - - - stigma vertical - - - - - - - - - - - - - - - - - - - - - - - - vascular system ventral to - - - - - - - - - - - - - - - - - - - - - - - - vascular system position - - - - - - - - - - - - - - - - - - - - - - - - endocarp bilobed - - - - - - - - - - - - - - - - - - - - - - - - endocarp punctate - - - - - - - - - - - - - - - - - - - - - - - - endocarp spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf apex convex - - - - - - - - - - - - - - - - - - - - - - - - bud ventral to - - - - - - - - - - - - - - - - - - - - - - - - bract pyramidal - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus constricted - - - - - - - - - - - - - - - - - - - - - - - - stipule black - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore basal to - - - - - - - - - - - - - - - - - - - - - - - - flower abnormal - - - - - - - - - - - - - - - - - - - - - - - - stolon subulate - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus tubular - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal decumbent - - - - - - - - - - - - - - - - - - - - - - - - ray system drooping - - - - - - - - - - - - - - - - - - - - - - - - ligule surrounding - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal whorled - - - - - - - - - - - - - - - - - - - - - - - - peristome branched - - - - - - - - - - - - - - - - - - - - - - - - peristome branchiness - - - - - - - - - - - - - - - - - - - - - - - - leaf tip cuneate - - - - - - - - - - - - - - - - - - - - - - - - leaf tip 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant callus scalloped - - - - - - - - - - - - - - - - - - - - - - - - lemma tangled - - - - - - - - - - - - - - - - - - - - - - - - corm linear - - - - - - - - - - - - - - - - - - - - - - - - - - - - gamete phenotype - - - - - - - - gamete male - true - - - - - - - - gamete phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - leaflet revolute - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root circular - - - - - - - - - - - - - - - - - - - - - - - - shoot system orbicular - - - - - - - - - - - - - - - - - - - - - - - - anther maroon - - - - - - - - - - - - - - - - - - - - - - - - spikelet translucent - - - - - - - - - - - - - - - - - - - - - - - - parenchyma arched - - - - - - - - - - - - - - - - - - - - - - - - parenchyma concavity - - - - - - - - - - - - - - - - - - - - - - - - lemma violet - - - - - - - - - - - - - - - - - - - - - - - - shoot apex columnar - - - - - - - - - - - - - - - - - - - - - - - - inflorescence inflorescence-like - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril young - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril age - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus open - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus closure - - - - - - - - - - - - - - - - - - - - - - - - plant callus heart shaped - - - - - - - - - - - - - - - - - - - - - - - - hilum subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - fruit cauline to - - - - - - - - - - - - - - - - - - - - - - - - style pale pink - - - - - - - - - - - - - - - - - - - - - - - - endocarp triangular - - - - - - - - - - - - - - - - - - - - - - - - peristome slender - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus brittle - - - - - - - - - - - - - - - - - - - - - - - - rhizome curled - - - - - - - - - - - - - - - - - - - - - - - - connective diameter - - - - - - - - - - - - - - - - - - - - - - - - endosperm firm - - - - - - - - - - - - - - - - - - - - - - - - seed displaced - - - - - - - - - - - - - - - - - - - - - - - - perianth robust - - - - - - - - - - - - - - - - - - - - - - - - endocarp inflated - - - - - - - - - - - - - - - - - - - - - - - - endocarp structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - infructescence peripheral - - - - - - - - - - - - - - - - - - - - - - - - connective hispid - - - - - - - - - - - - - - - - - - - - - - - - bract spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - testa U-shaped - - - - - - - - - - - - - - - - - - - - - - - - endocarp protruding - - - - - - - - - - - - - - - - - - - - - - - - nectary flat - - - - - - - - - - - - - - - - - - - - - - - - shoot internode brittle - - - - - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma phenotype - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma translucent - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma opacity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence undifferentiated - - - - - - - - - - - - - - - - - - - - - - - - funicle ovate - - - - - - - - - - - - - - - - - - - - - - - - peristome dark violet - - - - - - - - - - - - - - - - - - - - - - - - stipule recurved - - - - - - - - terminal bud male - true - - - - - - - - - - - - - - - - - - - - - - - - corolla discoid - - - - - - - - persistent sepal arrested - true - - - - - - - - persistent sepal offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - rhizome in contact with - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina absent - - - - - - - - - - - - - - - - - - - - - - - - stigma curled - - - - - - - - - - - - - - - - - - - - - - - - lemma fleshy - - - - - - - - - - - - - - - - - - - - - - - - seed present - - - - - - - - - - - - - - - - - - - - - - - - root furrowed - - - - - - - - - - - - - - - - - - - - - - - - leaf fragile - - - - - - - - - - - - - - - - - - - - - - - - leaf fragility - - - - - - - - - - - - - - - - - - - - - - - - whole plant ochre - - - - - - - - - - - - - - - - - - - - - - - - sapwood magenta - - - - - - - - - - - - - - - - - - - - - - - - canal split - - - - - - - - branch hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - infructescence convex - - - - - - - - - - - - - - - - - - - - - - - - infructescence concavity - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis shape - - - - - - - - - - - - - - - - - - - - - - - - receptacle separated from - - - - - - - - - - - - - - - - - - - - - - - - pappus recurved - - - - - - - - - - - - - - - - - - - - - - - - petiole margin pubescent - - - - - - - - - - - - - - - - - - - - - - - - petiole margin maturity - - - - - - - - - - - - - - - - - - - - - - - - anther in contact with - - - - - - - - - - - - - - - - - - - - - - - - keel magenta - - - - - - - - - - - - - - - - - - - - - - - - keel protruding into - - - - - - - - - - - - - - - - - - - - - - - - leaflet blue - - - - - - - - - - - - - - - - - - - - - - - - phloem white - - - - - - - - - - - - - - - - - - - - - - - - androecium attached to - - - - - - - - - - - - - - - - - - - - - - - - androecium attachment quality - - - - - - - - - - - - - - - - - - - - - - - - inflorescence flush - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis unbranched - - - - - - - - - - - - - - - - - - - - - - - - bud adaxial to - - - - - - - - - - - - - - - - - - - - - - - - stem lilac - - - - - - - - - - - - - - - - - - - - - - - - calyx yellow brown - - - - - - - - - - - - - - - - - - - - - - - - stolon orbicular - - - - - - - - - - - - - - - - - - - - - - - - stamen emarginate - - - - - - - - - - - - - - - - - - - - - - - - receptacle distance - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium orbicular - - - - - - - - - - - - - - - - - - - - - - - - glume alternate placement - - - - - - - - - - - - - - - - - - - - - - - - axil falciform - - - - - - - - - - - - - - - - - - - - - - - - radicle parallel to - - - - - - - - - - - - - - - - - - - - - - - - petiole oblate - - - - - - - - - - - - - - - - - - - - - - - - disk flower areolate - - - - - - - - - - - - - - - - - - - - - - - - rhizome drooping - - - - - - - - - - - - - - - - - - - - - - - - root unicellular - - - - - - - - - - - - - - - - - - - - - - - - root cellularity - - - - - - - - - - - - - - - - - - - - - - - - nectary smooth - - - - - - - - - - - - - - - - - - - - - - - - testa proximal to - - - - - - - - - - - - - - - - - - - - - - - - lower glume fleshy - - - - - - - - - - - - - - - - - - - - - - - - lamina swollen - - - - - - - - - - - - - - - - - - - - - - - - bud medial to - - - - - - - - - - - - - - - - - - - - - - - - leaf lilac - - - - - - - - - - - - - - - - - - - - - - - - exocarp cylindrical - - - - - - - - - - - - - - - - - - - - - - - - apical hook spotted - - - - - - - - - - - - - - - - - - - - - - - - apical hook color pattern - - - - - - - - - - - - - - - - - - - - - - - - stigma overlapped by - - - - - - - - - - - - - - - - - - - - - - - - thorn split - - - - - - - - - - - - - - - - - - - - - - - - placenta lobed - - - - - - - - - - - - - - - - - - - - - - - - corm decayed - - - - - - - - - - - - - - - - - - - - - - - - corm viability - - - - - - - - - - - - - - - - - - - - - - - - shoot apex inflated - - - - - - - - - - - - - - - - - - - - - - - - shoot apex structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - keel sterile - - - - - - - - shoot apex up - true - - - - - - - - - - - - - - - - - - - - - - - - shoot apex direction - - - - - - - - - - - - - - - - - - - - - - - - testa fusiform - - - - - - - - - - - - - - - - - - - - - - - - bud light green - - - - - - - - - - - - - - - - - - - - - - - - epidermis curled - - - - - - - - - - - - - - - - - - - - - - - - leaflet area - - - - - - - - - - - - - - - - - - - - - - - - endosperm orbicular - - - - - - - - - - - - - - - - - - - - - - - - lemma concentrated - - - - - - - - - - - - - - - - - - - - - - - - lemma concentration of - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath pink - - - - - - - - - - - - - - - - - - - - - - - - corolla pedunculate - - - - - - - - - - - - - - - - - - - - - - - - heartwood linear - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore pubescent - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore maturity - - - - - - - - - - - - - - - - - - - - - - - - calyx protruding into - - - - - - - - - - - - - - - - - - - - - - - - axil whole - - - - - - - - - - - - - - - - - - - - - - - - axil wholeness - - - - - - - - - - - - - - - - - - - - - - - - perianth light red - - - - - - - - - - - - - - - - - - - - - - - - connective inflated - - - - - - - - - - - - - - - - - - - - - - - - stem unicellular - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem inflexible - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem flexibility - - - - - - - - - - - - - - - - - - - - - - - - bud normal - - - - - - - - - - - - - - - - - - - - - - - - bud deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - flower granular - - - - - - - - - - - - - - - - - - - - - - - - stem viscid - - - - - - - - - - - - - - - - - - - - - - - - stem bronze - - - - - - - - - - - - - - - - - - - - - - - - pericarp ornamented - - - - - - - - - - - - - - - - - - - - - - - - short shoot attenuate - - - - - - - - - - - - - - - - - - - - - - - - short shoot sharpness - - - - - - - - - - - - - - - - - - - - - - - - epidermis adaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf axil erect - - - - - - - - - - - - - - - - - - - - - - - - stem radius - - - - - - - - - - - - - - - - - - - - - - - - nectary glandular - - - - - - - - - - - - - - - - - - - - - - - - nectary morphology - - - - - - - - - - - - - - - - - - - - - - - - aril spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - epidermis dentated - - - - - - - - - - - - - - - - - - - - - - - - axil mass - - - - - - - - - - - - - - - - - - - - - - - - petiole subrectangular - - - - - - - - - - - - - - - - - - - - - - - - funicle sigmoid - - - - - - - - - - - - - - - - - - - - - - - - pappus sparse - - - - - - - - - - - - - - - - - - - - - - - - endosperm hollow - - - - - - - - - - - - - - - - - - - - - - - - endosperm structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - chalaza ventral to - - - - - - - - - - - - - - - - - - - - - - - - filament fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis square - - - - - - - - - - - - - - - - - - - - - - - - stigma displaced - - - - - - - - - - - - - - - - - - - - - - - - seed medial to - - - - - - - - - - - - - - - - - - - - - - - - corolla fusiform - - - - - - - - - - - - - - - - - - - - - - - - epicalyx raised - - - - - - - - subterranean tuber up - true - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber direction - - - - - - - - - - - - - - - - - - - - - - - - heartwood conspicuous - - - - - - - - - - - - - - - - - - - - - - - - ovary wall sunken - - - - - - - - - - - - - - - - - - - - - - - - ovary wall elevation - - - - - - - - - - - - - - - - - - - - - - - - pappus pink - - - - - - - - - - - - - - - - - - - - - - - - whole plant segmented - - - - - - - - - - - - - - - - - - - - - - - - sapwood firm - - - - - - - - - - - - - - - - - - - - - - - - plant sap flattened - - - - - - - - - - - - - - - - - - - - - - - - - plant sap curvature - - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina punctate - - - - - - - - - - - - - - - - - - - - - - - - septum prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf clavate - - - - - - - - - - - - - - - - - - - - - - - - rhizome distal to - - - - - - - - - - - - - - - - - - - - - - - - stalk columnar - - - - - - - - - - - - - - - - - - - - - - - - plant cell pubescent - - - - - - - - - - - - - - - - - - - - - - - - plant cell maturity - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus branched - - - - - - - - - - - - - - - - - - - - - - - - style biconvex - - - - - - - - - - - - - - - - - - - - - - - - gynoecium conspicuous - - - - - - - - - - - - - - - - - - - - - - - - peduncle exserted - - - - - - - - - - - - - - - - - - - - - - - - infructescence dark purple - - - - - - - - - - - - - - - - - - - - - - - - axil quadrangular - - - - - - - - xylem vessel member male - true - - - - - - - - - - - - - - - - - - - - - - - - branch width - - - - - - - - - - - - - - - - - - - - - - - - anther whole - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf subulate - - - - - - - - - - - - - - - - - - - - - - - - pericarp adaxial to - - - - - - - - - - - - - - - - - - - - - - - - lamina overlapping - - - - - - - - - - - - - - - - - - - - - - - - petiole red brown - - - - - - - - - - - - - - - - - - - - - - - - endosperm blunt - - - - - - - - - - - - - - - - - - - - - - - - rhizome open - - - - - - - - - - - - - - - - - - - - - - - - rhizome closure - - - - - - - - - - - - - - - - - - - - - - - - petiole margin flat - - - - - - - - - - - - - - - - - - - - - - - - petiole margin curvature - - - - - - - - - - - - - - - - - - - - - - - - endocarp dark brown - - - - - - - - - - - - - - - - - - - - - - - - pappus red - - - - - - - - - - - - - - - - - - - - - - - - calyx watery - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal lobed - - - - - - - - - - - - - - - - - - - - - - - - bud spoon-shaped - - - - - - - - - - - - - - - - - - - - - - - - root tip trilobed - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system bilobed - - - - - - - - - - - - - - - - - - - - - - - - stem tricuspidate - - - - - - - - - - - - - - - - - - - - - - - - peduncle parallel to - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge lobed - - - - - - - - - - - - - - - - - - - - - - - - pedicel differentiated - - - - - - - - - - - - - - - - - - - - - - - - pedicel cellular potency - - - - - - - - - - - - - - - - - - - - - - - - periderm pedicellate - - - - - - - - - - - - - - - - - - - - - - - - periderm attachment quality - - - - - - - - - - - - - - - - - - - - - - - - staminode auriculate - - - - - - - - - - - - - - - - - - - - - - - - cambium red - - - - - - - - - - - - - - - - - - - - - - - - seed caudate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon divergent from - - - - - - - - - - - - - - - - - - - - - - - - central zone serrated - - - - - - - - - - - - - - - - - - - - - - - - bark watery - - - - - - - - - - - - - - - - - - - - - - - - inflorescence subcircular - - - - - - - - - - - - - - - - - - - - - - - - calyx tricuspidate - - - - - - - - - - - - - - - - - - - - - - - - locule undivided - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril dentated - - - - - - - - - - - - - - - - - - - - - - - - shoot axis brown - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem obtuse - - - - - - - - - - - - - - - - - - - - - - - - prophyll lanceolate - - - - - - - - - - - - - - - - - - - - - - - - prophyll sharpness - - - - - - - - - - - - - - - - - - - - - - - - tubercle semicircular - - - - - - - - - - - - - - - - - - - - - - - - pappus dry - - - - - - - - - - - - - - - - - - - - - - - - pappus wetness - - - - - - - - - - - - - - - - - - - - - - - - canal ventral to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dark red brown - - - - - - - - - - - - - - - - - - - - - - - - calyx square - - - - - - - - - - - - - - - - - - - - - - - - stele decurrent - - - - - - - - - - - - - - - - - - - - - - - - stem perfoliate - - - - - - - - - - - - - - - - - - - - - - - - scutellar node glistening - - - - - - - - - - - - - - - - - - - - - - - - scutellar node reflectivity - - - - - - - - - - - - - - - - - - - - - - - - plant cell dispersed - - - - - - - - bark variant - true - - - - - - - - bark variability - true - - - - - - - - - - - - - - - - - - - - - - - - prophyll distal to - - - - - - - - flower bud female - true - - - - - - - - flower bud phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium opposite - - - - - - - - - - - - - - - - - - - - - - - - keel dense - - - - - - - - - - - - - - - - - - - - - - - - keel mass density - - - - - - - - - - - - - - - - - - - - - - - - plant cell dorsal to - - - - - - - - - - - - - - - - - - - - - - - - axil drooping - - - - - - - - - - - - - - - - - - - - - - - - branch retuse - - - - - - - - - - - - - - - - - - - - - - - - tuberous root pink - - - - - - - - - - - - - - - - - - - - - - - - stipule spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - whole plant brown - - - - - - - - - - - - - - - - - - - - - - - - growth ring furrowed - - - - - - - - - - - - - - - - - - - - - - - - phloem glabrous - - - - - - - - - - - - - - - - - - - - - - - - phloem pilosity - - - - - - - - - - - - - - - - - - - - - - - - exocarp reniform - - - - - - - - - - - - - - - - - - - - - - - - exocarp concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence cut - - - - - - - - - - - - - - - - - - - - - - - - androecium light brown - - - - - - - - - - - - - - - - - - - - - - - - lamina erose - - - - - - - - - - - - - - - - - - - - - - - - bulb lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina congested - - - - - - - - - - - - - - - - - - - - - - - - shoot axis convex - - - - - - - - - - - - - - - - - - - - - - - - shoot axis concavity - - - - - - - - - - - - - - - - - - - - - - - - funicle absent - - - - - - - - - - - - - - - - - - - - - - - - gynophore circular - - - - - - - - - - - - - - - - - - - - - - - - branch straight - - - - - - - - disk flower premature - true - - - - - - - - disk flower onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system warty - - - - - - - - - - - - - - - - - - - - - - - - bud sunken - - - - - - - - - - - - - - - - - - - - - - - - bud elevation - - - - - - - - - - - - - - - - - - - - - - - - sheath cell rough - - - - - - - - - - - - - - - - - - - - - - - - shoot system arched - - - - - - - - - - - - - - - - - - - - - - - - periderm prominent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle attached to - - - - - - - - - - - - - - - - - - - - - - - - areole bud flattened - - - - - - - - - - - - - - - - - - - - - - - - areole bud curvature - - - - - - - - - - - - - - - - - - - - - - - - rhizome cauline to - - - - - - - - - - - - - - - - - - - - - - - - tubercle wrinkled - - - - - - - - - - - - - - - - - - - - - - - - infructescence leaf-like - - - - - - - - - - - - - - - - - - - - - - - - stipel bilobed - - - - - - - - - - - - - - - - - - - - - - - - carpel spoon-shaped - - - - - - - - - - - - - - - - - - - - - - - - caruncle separating - - - - - - - - - - - - - - - - - - - - - - - - caruncle structure - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle age - - - - - - - - - - - - - - - - - - - - - - - - shoot system drooping - - - - - - - - - - - - - - - - - - - - - - - - central zone pointed - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue grooved - - - - - - - - - - - - - - - - - - - - - - - - plant cell hairy - - - - - - - - - - - - - - - - - - - - - - - - prickle triangular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis tubular - - - - - - - - - - - - - - - - - - - - - - - - axillary bud symmetrical - - - - - - - - - - - - - - - - - - - - - - - - axillary bud symmetry - - - - - - - - - - - - - - - - - - - - - - - - peduncle abaxial to - - - - - - - - - - - - - - - - - - - - - - - - stereome distal to - - - - - - - - - - - - - - - - - - - - - - - - petal conspicuous - - - - - - - - - - - - - - - - - - - - - - - - papilla cell broken - - - - - - - - - - - - - - - - - - - - - - - - papilla cell wholeness - - - - - - - - - - - - - - - - - - - - - - - - stem corymb-like - - - - - - - - - - - - - - - - - - - - - - - - short shoot lanceolate - - - - - - - - - - - - - - - - - - - - - - - - pulvinus white - - - - - - - - - - - - - - - - - - - - - - - - epicotyl hairy - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell swollen - - - - - - - - - - - - - - - - - - - - - - - - crown root leaf-like - - - - - - - - - - - - - - - - - - - - - - - - anther theca raised - - - - - - - - - - - - - - - - - - - - - - - - tubercle condensed - - - - - - - - - - - - - - - - - - - - - - - - thorn spherical - - - - - - - - - - - - - - - - - - - - - - - - axillary bud congested - - - - - - - - - - - - - - - - - - - - - - - - pappus confluent with - - - - - - - - - - - - - - - - - - - - - - - - seed semicircular - - - - - - - - - - - - - - - - - - - - - - - - mesocarp concave - - - - - - - - - - - - - - - - - - - - - - - - mesocarp concavity - - - - - - - - - - - - - - - - - - - - - - - - locule glandular - - - - - - - - - - - - - - - - - - - - - - - - locule morphology - - - - - - - - - - - - - - - - - - - - - - - - pistillode straight - - - - - - - - - - - - - - - - - - - - - - - - obturator present - - - - - - - - - - - - - - - - - - - - - - - - obturator amount - - - - - - - - - - - - - - - - - - - - - - - - parenchyma grooved - - - - - - - - - - - - - - - - - - - - - - - - bark pedunculate - - - - - - - - - - - - - - - - - - - - - - - - connective yellow - - - - - - - - - - - - - - - - - - - - - - - - trichome decurrent - - - - - - - - - - - - - - - - - - - - - - - - leaf moderate intensity - - - - - - - - - - - - - - - - - - - - - - - - leaf intensity - - - - - - - - - - - - - - - - - - - - - - - - petiole epidermis length - - - - - - - - - - - - - - - - - - - - - - - - bud vermilion - - - - - - - - - - - - - - - - - - - - - - - - stele columnar - - - - - - - - - - - - - - - - - - - - - - - - cotyledon basal to - - - - - - - - - - - - - - - - - - - - - - - - gynophore young - - - - - - - - - - - - - - - - - - - - - - - - gynophore age - - - - - - - - - - - - - - - - - - - - - - - - micropyle truncated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence juvenile - - - - - - - - - - - - - - - - - - - - - - - - locule lateral to - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell inflexible - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell flexibility - - - - - - - - - - - - - - - - - - - - - - - - axil white - - - - - - - - - - - - - - - - - - - - - - - - testa yellow brown - - - - - - - - - - - - - - - - - - - - - - - - aril ornamented - - - - - - - - - - - - - - - - - - - - - - - - stamen caudate - - - - - - - - - - - - - - - - - - - - - - - - terminal bud branched - - - - - - - - - - - - - - - - - - - - - - - - terminal bud branchiness - - - - - - - - - - - - - - - - - - - - - - - - plant embryo angular - - - - - - - - central spike of tassel inflorescence female - true - - - - - - - - - - - - - - - - - - - - - - - - exocarp cuneate - - - - - - - - - - - - - - - - - - - - - - - - stipule dispersed - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus dorsal to - - - - - - - - - - - - - - - - - - - - - - - - phloem brown - - - - - - - - calyx premature - true - - - - - - - - calyx onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - lower glume hollow - - - - - - - - - - - - - - - - - - - - - - - - lower glume structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath terminal - - - - - - - - - - - - - - - - - - - - - - - - pistillode swollen - - - - - - - - - - - - - - - - - - - - - - - - whole plant wrinkled - - - - - - - - - - - - - - - - - - - - - - - - hilum bifurcated - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin present - - - - - - - - seed operculum premature - true - - - - - - - - seed operculum onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - placenta diameter - - - - - - - - - - - - - - - - - - - - - - - - inflorescence functional - - - - - - - - - - - - - - - - - - - - - - - - inflorescence functionality - - - - - - - - - - - - - - - - - - - - - - - - style dark green - - - - - - - - placenta female - true - - - - - - - - costa subacute - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis pedunculate - - - - - - - - - - - - - - - - - - - - - - - - pedicel decussate - - - - - - - - ovary wall up - true - - - - - - - - - - - - - - - - - - - - - - - - ovary wall direction - - - - - - - - - - - - - - - - - - - - - - - - connective columnar - - - - - - - - - - - - - - - - - - - - - - - - keel asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - whole plant upturned - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal ochre - - - - - - - - - - - - - - - - - - - - - - - - pericarp red brown - - - - - - - - - - - - - - - - - - - - - - - - oil gland curved - - - - - - - - - - - - - - - - - - - - - - - - oil gland curvature - - - - - - - - - - - - - - - - - - - - - - - - upper glume grooved - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue waxy - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue waxiness - - - - - - - - - - - - - - - - - - - - - - - - petiole coating - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma white - - - - - - - - - - - - - - - - - - - - - - - - anther theca orbicular - - - - - - - - - - - - - - - - - - - - - - - - involucre age - - - - - - - - - - - - - - - - - - - - - - - - filament axial to - - - - - - - - - - - - - - - - - - - - - - - - mesophyll auriculate - - - - - - - - - - - - - - - - - - - - - - - - pedicel oblique to - - - - - - - - - - - - - - - - - - - - - - - - septum oblong - - - - - - - - - - - - - - - - - - - - - - - - branch complex - - - - - - - - - - - - - - - - - - - - - - - - valve glandular - - - - - - - - - - - - - - - - - - - - - - - - valve morphology - - - - - - - - - - - - - - - - - - - - - - - - antiraphe bitter - - - - - - - - - - - - - - - - - - - - - - - - antiraphe flavor - - - - - - - - - - - - - - - - - - - - - - - - pedicel sharp - - - - - - - - - - - - - - - - - - - - - - - - anther orange - - - - - - - - - - - - - - - - - - - - - - - - stamen in contact with - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis pubescent - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis maturity - - - - - - - - - - - - - - - - - - - - - - - - stigma auriculate - - - - - - - - - - - - - - - - - - - - - - - - glume trilobed - - - - - - - - - - - - - - - - - - - - - - - - canal dentated - - - - - - - - - - - - - - - - - - - - - - - - hilum edible - - - - - - - - - - - - - - - - - - - - - - - - hilum edibility - - - - - - - - - - - - - - - - - - - - - - - - seed trichome fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - locule red - - - - - - - - axillary bud meristem premature - true - - - - - - - - axillary bud meristem onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - columella sinuous - - - - - - - - - - - - - - - - - - - - - - - - seed coat translucent - - - - - - - - - - - - - - - - - - - - - - - - seed coat opacity - - - - - - - - - - - - - - - - - - - - - - - - anther axial to - - - - - - - - - - - - - - - - - - - - - - - - stigma spongy - - - - - - - - - - - - - - - - - - - - - - - - placenta length - - - - - - - - - - - - - - - - - - - - - - - - bud trilobed - - - - - - - - - - - - - - - - - - - - - - - - plant embryo acuminate - - - - - - - - - - - - - - - - - - - - - - - - plant embryo sharpness - - - - - - - - - - - - - - - - - - - - - - - - rhizoid dense - - - - - - - - - - - - - - - - - - - - - - - - rhizoid mass density - - - - - - - - - - - - - - - - - - - - - - - - lodicule autogenous - - - - - - - - - - - - - - - - - - - - - - - - lodicule structure - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf conical - - - - - - - - - - - - - - - - - - - - - - - - hydathode complex - - - - - - - - - - - - - - - - - - - - - - - - aril extends to - - - - - - - - - - - - - - - - - - - - - - - - hilum wrinkled - - - - - - - - - - - - - - - - - - - - - - - - pith erect - - - - - - - - - - - - - - - - - - - - - - - - leaflet pink - - - - - - - - - - - - - - - - - - - - - - - - infructescence sharp - - - - - - - - - - - - - - - - - - - - - - - - axil divergent from - - - - - - - - - - - - - - - - - - - - - - - - plant sap inflated - - - - - - - - - - - - - - - - - - - - - - - - - plant sap structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - - epicotyl foveate - - - - - - - - - - - - - - - - - - - - - - - - perianth parallel to - - - - - - - - - - - - - - - - - - - - - - - - seed trichome transparent - - - - - - - - - - - - - - - - - - - - - - - - seed trichome opacity - - - - - - - - - - - - - - - - - - - - - - - - carpel T-shaped - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma absent - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma amount - - - - - - - - - - - - - - - - - - - - - - - - septum whole - - - - - - - - - - - - - - - - - - - - - - - - septum wholeness - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle adhesive - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle adhesivity - - - - - - - - - - - - - - - - - - - - - - - - resin canal hairy - - - - - - - - - - - - - - - - - - - - - - - - root obovate - - - - - - - - - - - - - - - - - - - - - - - - carpel slit-like - - - - - - - - - - - - - - - - - - - - - - - - bark fragile - - - - - - - - - - - - - - - - - - - - - - - - bark fragility - - - - - - - - - - - - - - - - - - - - - - - - thorn elongated - - - - - - - - - - - - - - - - - - - - - - - - resin canal glistening - - - - - - - - - - - - - - - - - - - - - - - - resin canal reflectivity - - - - - - - - - - - - - - - - - - - - - - - - root tip lobed - - - - - - - - - - - - - - - - - - - - - - - - septum straight - - - - - - - - sepal arrested - true - - - - - - - - sepal offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - vascular system erect - - - - - - - - hydathode acute - true - - - - - - - - hydathode duration - true - - - - - - - - - - - - - - - - - - - - - - - - corm dark brown - - - - - - - - - - - - - - - - - - - - - - - - fruit scrobiculate - - - - - - - - - - - - - - - - - - - - - - - - endocarp opposite - - - - - - - - - - - - - - - - - - - - - - - - anther reclinate - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber slender - - - - - - - - - - - - - - - - - - - - - - - - lenticel sparse - - - - - - - - - - - - - - - - - - - - - - - - fruit bulbous - - - - - - - - - - - - - - - - - - - - - - - - sepal divergent from - - - - - - - - - - - - - - - - - - - - - - - - petiole columnar - - - - - - - - - - - - - - - - - - - - - - - - placenta split - - - - - - - - - - - - - - - - - - - - - - - - petiolule absent - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl pointed - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl sharpness - - - - - - - - - - - - - - - - - - - - - - - - tepal warty - - - - - - - - - - - - - - - - - - - - - - - - tepal texture - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal fused with - - - - - - - - - - - - - - - - - - - - - - - - tuberous root dark green - - - - - - - - - - - - - - - - - - - - - - - - plant sap swollen - - - - - - - - - - - - - - - - - - - - - - - - - plant sap structure - - - - - - - - - - - - - - - - - - - - - - - - placenta ventral to - - - - - - - - - - - - - - - - - - - - - - - - lenticel young - - - - - - - - - - - - - - - - - - - - - - - - lenticel age - - - - - - - - - - - - - - - - - - - - - - - - prickle lanceolate - - - - - - - - - - - - - - - - - - - - - - - - lemma basal to - - - - - - - - - - - - - - - - - - - - - - - - leaf axil scaly - - - - - - - - - - - - - - - - - - - - - - - - leaf axil texture - - - - - - - - - - - - - - - - - - - - - - - - gynoecium raised - - - - - - - - - - - - - - - - - - - - - - - - upper glume bulbous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge autogenous - - - - - - - - - - - - - - - - - - - - - - - - gynoecium whole - - - - - - - - - - - - - - - - - - - - - - - - gynoecium wholeness - - - - - - - - - - - - - - - - - - - - - - - - involucre branched - - - - - - - - - - - - - - - - - - - - - - - - stigma U-shaped - - - - - - - - - - - - - - - - - - - - - - - - stamen glistening - - - - - - - - - - - - - - - - - - - - - - - - stamen reflectivity - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system reniform - - - - - - - - - - - - - - - - - - - - - - - - bulb white - - - - - - - - - - - - - - - - - - - - - - - - lamina aromatic - - - - - - - - - - - - - - - - - - - - - - - - lamina aromaticity - - - - - - - - - - - - - - - - - - - - - - - - awn black - - - - - - - - - - - - - - - - - - - - - - - - leaf axil orange - - - - - - - - - - - - - - - - - - - - - - - - leaf axil raised - - - - - - - - - - - - - - - - - - - - - - - - sepal sterile - - - - - - - - - - - - - - - - - - - - - - - - sepal fertility - - - - - - - - - - - - - - - - - - - - - - - - spikelet front - - - - - - - - - - - - - - - - - - - - - - - - funicle conspicuous - - - - - - - - - - - - - - - - - - - - - - - - root drooping - - - - - - - - - - - - - - - - - - - - - - - - gynophore split - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system pubescent - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system maturity - - - - - - - - - - - - - - - - - - - - - - - - cotyledon bilobed - - - - - - - - - - - - - - - - - - - - - - - - tubercle glistening - - - - - - - - - - - - - - - - - - - - - - - - tubercle reflectivity - - - - - - - - - - - - - - - - - - - - - - - - petal magenta - - - - - - - - - - - - - - - - - - - - - - - - corm cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - corm composition - - - - - - - - - - - - - - - - - - - - - - - - flower dark brown - - - - - - - - - - - - - - - - - - - - - - - - prickle purple - - - - - - - - - - - - - - - - - - - - - - - - juice sac exserted - - - - - - - - - - - - - - - - - - - - - - - - leaf dark purple - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl flattened - - - - - - - - - - - - - - - - - - - - - - - - seed cleft - - - - - - - - - - - - - - - - - - - - - - - - rhizome spotted - - - - - - - - - - - - - - - - - - - - - - - - corm terminal - - - - - - - - - - - - - - - - - - - - - - - - tepal vestigial - - - - - - - - - - - - - - - - - - - - - - - - bract apex prominent - - - - - - - - - - - - - - - - - - - - - - - - bract apex position - - - - - - - - - - - - - - - - - - - - - - - - fruit coating - - - - - - - - - - - - - - - - - - - - - - - - gynoecium star shaped - - - - - - - - - - - - - - - - - - - - - - - - pappus attenuate - - - - - - - - - - - - - - - - - - - - - - - - petal apex broad - - - - - - - - - - - - - - - - - - - - - - - - petal apex shape - - - - - - - - - - - - - - - - - - - - - - - - testa adaxial to - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus furrowed - - - - - - - - - - - - - - - - - - - - - - - - axil arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - hilum cuneate - - - - - - - - - - - - - - - - - - - - - - - - petiole surrounding - - - - - - - - - - - - - - - - - - - - - - - - sepal serrated - - - - - - - - - - - - - - - - - - - - - - - - thallus swollen - - - - - - - - - - - - - - - - - - - - - - - - carpel inflexible - - - - - - - - - - - - - - - - - - - - - - - - carpel flexibility - - - - - - - - - - - - - - - - - - - - - - - - epidermis punctate - - - - - - - - - - - - - - - - - - - - - - - - stem perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal abaxial to - - - - - - - - - - - - - - - - - - - - - - - - epicotyl whorled - - - - - - - - - - - - - - - - - - - - - - - - epicotyl spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - pericarp back - - - - - - - - - - - - - - - - - - - - - - - - epidermis obtuse - - - - - - - - - - - - - - - - - - - - - - - - thorn elliptic - - - - - - - - - - - - - - - - - - - - - - - - central zone spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - receptacle trumpet-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf margin tomentose - - - - - - - - - - - - - - - - - - - - - - - - spikelet bulbous - - - - - - - - - - - - - - - - - - - - - - - - seed trichome flattened - - - - - - - - - - - - - - - - - - - - - - - - leaf base smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf base texture - - - - - - - - - - - - - - - - - - - - - - - - endocarp foveate - - - - - - - - - - - - - - - - - - - - - - - - epidermis truncated - - - - - - - - - - - - - - - - - - - - - - - - cotyledon raised - - - - - - - - - - - - - - - - - - - - - - - - fruit sinuous - - - - - - - - - - - - - - - - - - - - - - - - septum opposite - - - - - - - - - - - - - - - - - - - - - - - - pericarp exposed - - - - - - - - - - - - - - - - - - - - - - - - infructescence bitter - - - - - - - - - - - - - - - - - - - - - - - - infructescence flavor - - - - - - - - - - - - - - - - - - - - - - - - petiole bulbous - - - - - - - - - - - - - - - - - - - - - - - - costa grooved - - - - - - - - - - - - - - - - - - - - - - - - sheath cell grooved - - - - - - - - - - - - - - - - - - - - - - - - pappus angular - - - - - - - - - - - - - - - - - - - - - - - - receptacle dark brown - - - - - - - - vascular bundle arrested - true - - - - - - - - vascular bundle offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - corolla cut - - - - - - - - - - - - - - - - - - - - - - - - shoot system open - - - - - - - - - - - - - - - - - - - - - - - - shoot system closure - - - - - - - - - - - - - - - - - - - - - - - - epicalyx lobed - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma simple - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma complexity - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis oblong - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - stipule green - - - - - - - - - - - - - - - - - - - - - - - - inflorescence tripartite - - - - - - - - - - - - - - - - - - - - - - - - pistillode autogenous - - - - - - - - - - - - - - - - - - - - - - - - seed trilobed - - - - - - - - - - - - - - - - - - - - - - - - juice sac conical - - - - - - - - - - - - - - - - - - - - - - - - caruncle ornamented - - - - - - - - - - - - - - - - - - - - - - - - caruncle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - inflorescence tapered - - - - - - - - - - - - - - - - - - - - - - - - spikelet involute - - - - - - - - - - - - - - - - - - - - - - - - mesophyll curved - - - - - - - - - - - - - - - - - - - - - - - - mesophyll curvature - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath fragile - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath fragility - - - - - - - - - - - - - - - - - - - - - - - - costa red - - - - - - - - - - - - - - - - - - - - - - - - filament discoid - - - - - - - - - - - - - - - - - - - - - - - - coma dry - - - - - - - - - - - - - - - - - - - - - - - - coma wetness - - - - - - - - - - - - - - - - - - - - - - - - prickle linear - - - - - - - - - - - - - - - - - - - - - - - - seta hairy - - - - - - - - - - - - - - - - - - - - - - - - hilum oblique to - - - - - - - - - - - - - - - - - - - - - - - - flower inverted - - - - - - - - - - - - - - - - - - - - - - - - petiole protruding into - - - - - - - - - - - - - - - - - - - - - - - - caruncle lobate - - - - - - - - - - - - - - - - - - - - - - - - leaf base obovate - - - - - - - - - - - - - - - - - - - - - - - - nectary lanceolate - - - - - - - - - - - - - - - - - - - - - - - - tubercle cauline to - - - - - - - - - - - - - - - - - - - - - - - - cotyledon alternate placement - - - - - - - - - - - - - - - - - - - - - - - - endocarp dentated - - - - - - - - - - - - - - - - - - - - - - - - rhizome differentiated - - - - - - - - - - - - - - - - - - - - - - - - gynoecium open - - - - - - - - - - - - - - - - - - - - - - - - petiolule adaxial to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence constricted - - - - - - - - - - - - - - - - - - - - - - - - leaf axil area - - - - - - - - - - - - - - - - - - - - - - - - heartwood hairy - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle sterile - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle fertility - - - - - - - - - - - - - - - - - - - - - - - - bark folded - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract opposite - - - - - - - - - - - - - - - - - - - - - - - - lower glume soft - - - - - - - - - - - - - - - - - - - - - - - - lower glume hardness - - - - - - - - - - - - - - - - - - - - - - - - sorus sterile - - - - - - - - - - - - - - - - - - - - - - - - receptacle subtriangular - - - - - - - - - - - - - - - - - - - - - - - - testa bitter - - - - - - - - - - - - - - - - - - - - - - - - testa flavor - - - - - - - - - - - - - - - - - - - - - - - - bracteole whorled - - - - - - - - - - - - - - - - - - - - - - - - fruit alternate placement - - - - - - - - - - - - - - - - - - - - - - - - exocarp attached to - - - - - - - - - - - - - - - - - - - - - - - - plant cell basal to - - - - - - - - - - - - - - - - - - - - - - - - pistillode raised - - - - - - - - - - - - - - - - - - - - - - - - spikelet undulate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - style unilateral - - - - - - - - - - - - - - - - - - - - - - - - keel cleft - - - - - - - - - - - - - - - - - - - - - - - - exocarp opaque - - - - - - - - - - - - - - - - - - - - - - - - raphe purple - - - - - - - - - - - - - - - - - - - - - - - - inflorescence split - - - - - - - - - - - - - - - - - - - - - - - - spikelet young - - - - - - - - - - - - - - - - - - - - - - - - spikelet age - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath digitate - - - - - - - - - - - - - - - - - - - - - - - - pedicel increased size - - - - - - - - - - - - - - - - - - - - - - - - central zone whorled - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus cauline to - - - - - - - - - - - - - - - - - - - - - - - - pappus scaly - - - - - - - - - - - - - - - - - - - - - - - - lemma whole - - - - - - - - - - - - - - - - - - - - - - - - lemma wholeness - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore opposite - - - - - - - - - - - - - - - - - - - - - - - - papilla cell cuspidate - - - - - - - - - - - - - - - - - - - - - - - - velamen basal to - - - - - - - - - - - - - - - - - - - - - - - - velamen position - - - - - - - - - - - - - - - - - - - - - - - - fruit triradiate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein swollen - - - - - - - - - - - - - - - - - - - - - - - - style dispersed - - - - - - - - leaflet premature - true - - - - - - - - leaflet onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - parenchyma sparse - - - - - - - - - - - - - - - - - - - - - - - - anther lilac - - - - - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf phenotype - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf oblong - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - bark broad - - - - - - - - - - - - - - - - - - - - - - - - bark bulbous - - - - - - - - - - - - - - - - - - - - - - - - trichome multicellular - - - - - - - - - - - - - - - - - - - - - - - - trichome cellularity - - - - - - - - - - - - - - - - - - - - - - - - stele absent - - - - - - - - - - - - - - - - - - - - - - - - free petal glandular - - - - - - - - - - - - - - - - - - - - - - - - free petal morphology - - - - - - - - - - - - - - - - - - - - - - - - carpel angle - - - - - - - - - - - - - - - - - - - - - - - - leaf base parallel to - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal dorsal to - - - - - - - - - - - - - - - - - - - - - - - - leaf tangled - - - - - - - - - - - - - - - - - - - - - - - - bark hollow - - - - - - - - - - - - - - - - - - - - - - - - bark structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein rough - - - - - - - - - - - - - - - - - - - - - - - - testa edible - - - - - - - - - - - - - - - - - - - - - - - - testa edibility - - - - - - - - - - - - - - - - - - - - - - - - anther sigmoid - - - - - - - - - - - - - - - - - - - - - - - - prophyll decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - prophyll thickness - - - - - - - - - - - - - - - - - - - - - - - - petiolule flat - - - - - - - - - - - - - - - - - - - - - - - - peristome orange - - - - - - - - - - - - - - - - - - - - - - - - infructescence old - - - - - - - - - - - - - - - - - - - - - - - - stigma pale pink - - - - - - - - - - - - - - - - - - - - - - - - stalk bilobed - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet waxy - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet waxiness - - - - - - - - central zone acute - true - - - - - - - - central zone duration - true - - - - - - - - - - - - - - - - - - - - - - - - cotyledon edible - - - - - - - - - - - - - - - - - - - - - - - - cotyledon edibility - - - - - - - - - - - - - - - - - - - - - - - - root hispid - - - - - - - - - - - - - - - - - - - - - - - - bud firm - - - - - - - - - - - - - - - - - - - - - - - - bud hardness - - - - - - - - spikelet continuous - true - - - - - - - - spikelet occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - tubercle drooping - - - - - - - - - - - - - - - - - - - - - - - - aril rough - - - - - - - - - - - - - - - - - - - - - - - - petiole dark grey - - - - - - - - - - - - - - - - - - - - - - - - corolla convolute - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl fleshy - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl composition - - - - - - - - - - - - - - - - - - - - - - - - axil pink - - - - - - - - - - - - - - - - - - - - - - - - style bulbous - - - - - - - - - - - - - - - - - - - - - - - - whole plant discoid - - - - - - - - - - - - - - - - - - - - - - - - endocarp linear - - - - - - - - - - - - - - - - - - - - - - - - radicle right - - - - - - - - - - - - - - - - - - - - - - - - apical hook caudate - - - - - - - - - - - - - - - - - - - - - - - - hilum inserted into - - - - - - - - - - - - - - - - - - - - - - - - epidermis left - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system raised - - - - - - - - - - - - - - - - - - - - - - - - carpel flat - - - - - - - - - - - - - - - - - - - - - - - - ovary wall open - - - - - - - - - - - - - - - - - - - - - - - - ovary wall closure - - - - - - - - - - - - - - - - - - - - - - - - crown root lanceolate - - - - - - - - - - - - - - - - - - - - - - - - stolon glandular - - - - - - - - - - - - - - - - - - - - - - - - stolon morphology - - - - - - - - - - - - - - - - - - - - - - - - petal evergreen - - - - - - - - - - - - - - - - - - - - - - - - - petal shedability - - - - - - - - - - - - - - - - - - - - - - - - stalk strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - columella T-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf tip smooth - - - - - - - - - - - - - - - - - - - - - - - - leaf tip texture - - - - - - - - - - - - - - - - - - - - - - - - hilum bitter - - - - - - - - - - - - - - - - - - - - - - - - hilum flavor - - - - - - - - - - - - - - - - - - - - - - - - free petal hollow - - - - - - - - - - - - - - - - - - - - - - - - free petal structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - nectary emarginate - - - - - - - - - - - - - - - - - - - - - - - - nectary concavity - - - - - - - - - - - - - - - - - - - - - - - - sepal magenta - - - - - - - - - - - - - - - - - - - - - - - - stipule lateral to - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus fleshy - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus composition - - - - - - - - - - - - - - - - - - - - - - - - pollen pubescent - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina broad - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal open - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal closure - - - - - - - - - - - - - - - - - - - - - - - - periderm pubescent - - - - - - - - - - - - - - - - - - - - - - - - periderm maturity - - - - - - - - - - - - - - - - - - - - - - - - tepal conspicuous - - - - - - - - - - - - - - - - - - - - - - - - central zone spatulate - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore simple - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore complexity - - - - - - - - - - - - - - - - - - - - - - - - anther theca kinked - - - - - - - - - - - - - - - - - - - - - - - - peduncle complex - - - - - - - - - - - - - - - - - - - - - - - - receptacle sterile - - - - - - - - - - - - - - - - - - - - - - - - stereome grey - - - - - - - - - - - - - - - - - - - - - - - - thorn pointed - - - - - - - - - - - - - - - - - - - - - - - - tubercle proximal to - - - - - - - - - - - - - - - - - - - - - - - - oil gland broken - - - - - - - - - - - - - - - - - - - - - - - - oil gland wholeness - - - - - - - - - - - - - - - - - - - - - - - - filament reclinate - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle revolute - - - - - - - - - - - - - - - - - - - - - - - - androecium spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - tuber present - - - - - - - - - - - - - - - - - - - - - - - - lower glume granular - - - - - - - - - - - - - - - - - - - - - - - - mesocarp ventral to - - - - - - - - - - - - - - - - - - - - - - - - hilum cylindrical - - - - - - - - - - - - - - - - - - - - - - - - bark separating - - - - - - - - - - - - - - - - - - - - - - - - gynoecium decreased thickness - - - - - - - - tubercle male - true - - - - - - - - - - - - - - - - - - - - - - - - palea notched - - - - - - - - - - - - - - - - - - - - - - - - stigma bulbous - - - - - - - - - - - - - - - - - - - - - - - - aril fatty - - - - - - - - - - - - - - - - - - - - - - - - seed trichome convolute - - - - - - - - - - - - - - - - - - - - - - - - stalk undulate - - - - - - - - - - - - - - - - - - - - - - - - - whole plant herbaceous - - - - - - - - - - - - - - - - - - - - - - - - valve dense - - - - - - - - - - - - - - - - - - - - - - - - valve mass density - - - - - - - - - - - - - - - - - - - - - - - - plumule brown - - - - - - - - - - - - - - - - - - - - - - - - plumule color - - - - - - - - - - - - - - - - - - - - - - - - leaf base flexible - - - - - - - - - - - - - - - - - - - - - - - - leaf base flexibility - - - - - - - - - - - - - - - - - - - - - - - - bud revolute - - - - - - - - - - - - - - - - - - - - - - - - pollen slender - - - - - - - - - - - - - - - - - - - - - - - - bark scarred - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf decreased amount - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf amount - - - - - - - - inflorescence axis male - true - - - - - - - - - - - - - - - - - - - - - - - - anther rectangular - - - - - - - - - - - - - - - - - - - - - - - - filament absent - - - - - - - - - - - - - - - - - - - - - - - - petiolule mixed - - - - - - - - - - - - - - - - - - - - - - - - connective vertical to - - - - - - - - - - - - - - - - - - - - - - - - stalk inflexible - - - - - - - - - - - - - - - - - - - - - - - - stalk flexibility - - - - - - - - - - - - - - - - - - - - - - - - fruit sigmoid - - - - - - - - - - - - - - - - - - - - - - - - perianth symmetrical - - - - - - - - - - - - - - - - - - - - - - - - prickle grey - - - - - - - - - - - - - - - - - - - - - - - - stipule blunt - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf lanceolate - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf sharpness - - - - - - - - - - - - - - - - - - - - - - - - infructescence dark red - - - - - - - - mesophyll acute - true - - - - - - - - mesophyll duration - true - - - - - - - - - - - - - - - - - - - - - - - - androecium decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath lobed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence setose - - - - - - - - - - - - - - - - - - - - - - - - fruit offset - - - - - - - - - - - - - - - - - - - - - - - - stipule overlapping - - - - - - - - - - - - - - - - - - - - - - - - thallus lateral to - - - - - - - - - - - - - - - - - - - - - - - - perianth left - - - - - - - - - - - - - - - - - - - - - - - - staminode fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf base permanent - - - - - - - - - - - - - - - - - - - - - - - - pollen friable - - - - - - - - - - - - - - - - - - - - - - - - stigma differentiated - - - - - - - - - - - - - - - - - - - - - - - - stigma cellular potency - - - - - - - - - - - - - - - - - - - - - - - - ray system pinnate - - - - - - - - - - - - - - - - - - - - - - - - awn hard - - - - - - - - - - - - - - - - - - - - - - - - awn hardness - - - - - - - - - - - - - - - - - - - - - - - - gynoecium areolate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - prickle caudate - - - - - - - - - - - - - - - - - - - - - - - - bud dispersed - - - - - - - - - - - - - - - - - - - - - - - - fruit sunken - - - - - - - - - - - - - - - - - - - - - - - - fruit elevation - - - - - - - - - - - - - - - - - - - - - - - - leaf margin caudate - - - - - - - - - - - - - - - - - - - - - - - - stalk drooping - - - - - - - - - - - - - - - - - - - - - - - - thallus yellow green - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root heart shaped - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - ligule erose - - - - - - - - - - - - - - - - - - - - - - - - plant sap spongy - - - - - - - - - - - - - - - - - - - - - - - - - peduncle yellow brown - - - - - - - - - - - - - - - - - - - - - - - - shoot apex brown - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system branched - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system branchiness - - - - - - - - - - - - - - - - - - - - - - - - receptacle sparse - - - - - - - - - - - - - - - - - - - - - - - - leaf base constricted - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence age - - - - - - - - - - - - - - - - - - - - - - - - leaf marbled - - - - - - - - - - - - - - - - - - - - - - - - petiole fertile - - - - - - - - - - - - - - - - - - - - - - - - root dark green - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein drooping - - - - - - - - - - - - - - - - - - - - - - - - bud whole - - - - - - - - - - - - - - - - - - - - - - - - glume convolute - - - - - - - - - - - - - - - - - - - - - - - - endocarp watery - - - - - - - - - - - - - - - - - - - - - - - - leaf base conspicuous - - - - - - - - - - - - - - - - - - - - - - - - nectary closed - - - - - - - - - - - - - - - - - - - - - - - - nectary closure - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell subulate - - - - - - - - - - - - - - - - - - - - - - - - leaflet purple - - - - - - - - - - - - - - - - - - - - - - - - root triangular - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell attenuate - - - - - - - - - - - - - - - - - - - - - - - - lemma yellow - - - - - - - - - - - - - - - - - - - - - - - - axil curved - - - - - - - - - - - - - - - - - - - - - - - - stalk articulated with - - - - - - - - - - - - - - - - - - - - - - - - banner petal prominent - - - - - - - - - - - - - - - - - - - - - - - - tuber parallel to - - - - - - - - - - - - - - - - - - - - - - - - septum cylindrical - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf warty - - - - - - - - - - - - - - - - - - - - - - - - bud stubby - - - - - - - - - - - - - - - - - - - - - - - - stalk spheroid - - - - - - - - - - - - - - - - - - - - - - - - flower decurrent - - - - - - - - - - - - - - - - - - - - - - - - filament slender - - - - - - - - - - - - - - - - - - - - - - - - glume falciform - - - - - - - - - - - - - - - - - - - - - - - - axil discoid - - - - - - - - - - - - - - - - - - - - - - - - gynophore brown - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf divergent from - - - - - - - - - - - - - - - - - - - - - - - - root ovate - - - - - - - - - - - - - - - - - - - - - - - - tuber spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium clavate - - - - - - - - - - - - - - - - - - - - - - - - bract spotted - - - - - - - - thorn female - true - - - - - - - - thorn phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - peristome young - - - - - - - - - - - - - - - - - - - - - - - - peristome age - - - - - - - - - - - - - - - - - - - - - - - - tubercle light brown - - - - - - - - - - - - - - - - - - - - - - - - seed operculum erect - - - - - - - - - - - - - - - - - - - - - - - - pollen circular - - - - - - - - - - - - - - - - - - - - - - - - leaf protruding into - - - - - - - - - - - - - - - - - - - - - - - - flower bud surrounding - - - - - - - - - - - - - - - - - - - - - - - - exocarp flattened - - - - - - - - - - - - - - - - - - - - - - - - endodermis rough - - - - - - - - - - - - - - - - - - - - - - - - endodermis texture - - - - - - - - - - - - - - - - - - - - - - - - calyx pulvinate - - - - - - - - - - - - - - - - - - - - - - - - ray system divergent from - - - - - - - - - - - - - - - - - - - - - - - - stipule brittle - - - - - - - - - - - - - - - - - - - - - - - - sepal coating - - - - - - - - - - - - - - - - - - - - - - - - testa pale pink - - - - - - - - - - - - - - - - - - - - - - - - palea split - - - - - - - - - - - - - - - - - - - - - - - - fruit curled - - - - - - - - - - - - - - - - - - - - - - - - petiolule autogenous - - - - - - - - - - - - - - - - - - - - - - - - leaf margin branched - - - - - - - - - - - - - - - - - - - - - - - - leaf margin branchiness - - - - - - - - - - - - - - - - - - - - - - - - stem height - - - - - - - - - - - - - - - - - - - - - - - - infructescence cuneate - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma increased thickness - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma thickness - - - - - - - - - - - - - - - - - - - - - - - - terminal bud pubescent - - - - - - - - - - - - - - - - - - - - - - - - terminal bud maturity - - - - - - - - - - - - - - - - - - - - - - - - leaflet viscous - - - - - - - - - - - - - - - - - - - - - - - - leaflet viscosity - - - - - - - - - - - - - - - - - - - - - - - - branch parallel to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract tubular - - - - - - - - - - - - - - - - - - - - - - - - calyx pyramidal - - - - - - - - - - - - - - - - - - - - - - - - pappus adaxial to - - - - - - - - gynoecium up - true - - - - - - - - - - - - - - - - - - - - - - - - gynoecium direction - - - - - - - - - - - - - - - - - - - - - - - - petiolule pointed - - - - - - - - - - - - - - - - - - - - - - - - flower violet - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium emarginate - - - - - - - - - - - - - - - - - - - - - - - - aril abaxial to - - - - - - - - - - - - - - - - - - - - - - - - glume exserted - - - - - - - - - - - - - - - - - - - - - - - - crown root drooping - - - - - - - - - - - - - - - - - - - - - - - - megaspore prominent - - - - - - - - - - - - - - - - - - - - - - - - megaspore position - - - - - - - - - - - - - - - - - - - - - - - - pistillode green - - - - - - - - - - - - - - - - - - - - - - - - nectary cuneate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis fleshy - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis composition - - - - - - - - - - - - - - - - - - - - - - - - sorus left - - - - - - - - - - - - - - - - - - - - - - - - spikelet ornamented - - - - - - - - - - - - - - - - - - - - - - - - hypanthium strap-shaped - - - - - - - - - - - - - - - - - - - - - - - - mesocarp fertile - - - - - - - - - - - - - - - - - - - - - - - - mesocarp fertility - - - - - - - - - - - - - - - - - - - - - - - - flower concealed - - - - - - - - - - - - - - - - - - - - - - - - hilum dark grey - - - - - - - - - - - - - - - - - - - - - - - - raphe erect - - - - - - - - - - - - - - - - - - - - - - - - root subulate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system spongy - - - - - - - - - - - - - - - - - - - - - - - - trichome funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - crown root edible - - - - - - - - - - - - - - - - - - - - - - - - crown root edibility - - - - - - - - - - - - - - - - - - - - - - - - glume violet - - - - - - - - - - - - - - - - - - - - - - - - juice sac autogenous - - - - - - - - - - - - - - - - - - - - - - - - - - - - fruit valve phenotype - - - - - - - - - - - - - - - - - - - - - - - - fruit valve simple - - - - - - - - - - - - - - - - - - - - - - - - fruit valve complexity - - - - - - - - flower bud up - true - - - - - - - - - - - - - - - - - - - - - - - - flower bud direction - - - - - - - - - - - - - - - - - - - - - - - - testa recurved - - - - - - - - plant embryo arrested - true - - - - - - - - plant embryo offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - branch distal to - - - - - - - - - - - - - - - - - - - - - - - - plant callus decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - plant callus water composition - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf involute - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge attenuate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge sharpness - - - - - - - - - - - - - - - - - - - - - - - - fruit circumference - - - - - - - - - - - - - - - - - - - - - - - - ray system arched - - - - - - - - - - - - - - - - - - - - - - - - ray system concavity - - - - - - - - - - - - - - - - - - - - - - - - staminode axial to - - - - - - - - - - - - - - - - - - - - - - - - whole plant old - - - - - - - - - - - - - - - - - - - - - - - - thorn undulate - - - - - - - - - - - - - - - - - - - - - - - - stolon basal to - - - - - - - - - - - - - - - - - - - - - - - - lower glume inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - columella sharp - - - - - - - - - - - - - - - - - - - - - - - - columella sharpness - - - - - - - - - - - - - - - - - - - - - - - - tuber attenuate - - - - - - - - - - - - - - - - - - - - - - - - tuber sharpness - - - - - - - - - - - - - - - - - - - - - - - - involucre decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - involucre water composition - - - - - - - - - - - - - - - - - - - - - - - - corolla lobate - - - - - - - - - - - - - - - - - - - - - - - - tuber flat - - - - - - - - - - - - - - - - - - - - - - - - caruncle leaf-like - - - - - - - - - - - - - - - - - - - - - - - - parenchyma dorsal to - - - - - - - - - - - - - - - - - - - - - - - - petiole margin simple - - - - - - - - - - - - - - - - - - - - - - - - petiole margin complexity - - - - - - - - - - - - - - - - - - - - - - - - testa invaginated - - - - - - - - - - - - - - - - - - - - - - - - prickle mature - - - - - - - - - - - - - - - - - - - - - - - - exocarp obovate - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure condensed - - - - - - - - - - - - - - - - - - - - - - - - peduncle adjacent to - - - - - - - - - - - - - - - - - - - - - - - - stalk viscous - - - - - - - - - - - - - - - - - - - - - - - - stalk viscosity - - - - - - - - - - - - - - - - - - - - - - - - leaf margin straight - - - - - - - - - - - - - - - - - - - - - - - - axil cauline to - - - - - - - - - - - - - - - - - - - - - - - - sepal axial to - - - - - - - - - - - - - - - - - - - - - - - - hypanthium pink - - - - - - - - - - - - - - - - - - - - - - - - endosperm adaxial to - - - - - - - - - - - - - - - - - - - - - - - - placenta oblong - - - - - - - - - - - - - - - - - - - - - - - - placenta 2-D shape - - - - - - - - peduncle arrested - true - - - - - - - - peduncle offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell linear - - - - - - - - - - - - - - - - - - - - - - - - apical hook divergent from - - - - - - - - - - - - - - - - - - - - - - - - staminode spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - cambium yellow - - - - - - - - - - - - - - - - - - - - - - - - prophyll autogenous - - - - - - - - - - - - - - - - - - - - - - - - prophyll structure - - - - - - - - - - - - - - - - - - - - - - - - keel dendritic - - - - - - - - - - - - - - - - - - - - - - - - placenta translucent - - - - - - - - - - - - - - - - - - - - - - - - nectary pinnate - - - - - - - - - - - - - - - - - - - - - - - - juice sac branched - - - - - - - - - - - - - - - - - - - - - - - - juice sac branchiness - - - - - - - - - - - - - - - - - - - - - - - - pedicel pyramidal - - - - - - - - - - - - - - - - - - - - - - - - awn caudate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein erect - - - - - - - - - - - - - - - - - - - - - - - - costa fragile - - - - - - - - - - - - - - - - - - - - - - - - costa fragility - - - - - - - - - - - - - - - - - - - - - - - - pericarp angular - - - - - - - - - - - - - - - - - - - - - - - - thorn whorled - - - - - - - - - - - - - - - - - - - - - - - - connective front - - - - - - - - - - - - - - - - - - - - - - - - valve attached to - - - - - - - - - - - - - - - - - - - - - - - - endotesta dark grey - - - - - - - - - - - - - - - - - - - - - - - - stele pinnate - - - - - - - - - - - - - - - - - - - - - - - - lemma notched - - - - - - - - - - - - - - - - - - - - - - - - fruit normal - - - - - - - - - - - - - - - - - - - - - - - - fruit deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - lamina spotted - - - - - - - - - - - - - - - - - - - - - - - - peristome height - - - - - - - - - - - - - - - - - - - - - - - - lemma triangular - - - - - - - - - - - - - - - - - - - - - - - - root tip bilobed - - - - - - - - - - - - - - - - - - - - - - - - apical hook abaxial to - - - - - - - - - - - - - - - - - - - - - - - - trichome curled - - - - - - - - - - - - - - - - - - - - - - - - thorn yellow green - - - - - - - - - - - - - - - - - - - - - - - - scutellar node subulate - - - - - - - - - - - - - - - - - - - - - - - - bract apex lateral to - - - - - - - - - - - - - - - - - - - - - - - - canal brittle - - - - - - - - - - - - - - - - - - - - - - - - bark pale pink - - - - - - - - - - - - - - - - - - - - - - - - terminal bud decussate - - - - - - - - - - - - - - - - - - - - - - - - terminal bud spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - endocarp undulate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence ochre - - - - - - - - - - - - - - - - - - - - - - - - juice sac condensed - - - - - - - - - - - - - - - - - - - - - - - - lenticel viscous - - - - - - - - - - - - - - - - - - - - - - - - lenticel viscosity - - - - - - - - - - - - - - - - - - - - - - - - microspore ornamentation - - - - - - - - - - - - - - - - - - - - - - - - microspore surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - tuber lanceolate - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus abaxial to - - - - - - - - - - - - - - - - - - - - - - - - flower pale pink - - - - - - - - - - - - - - - - - - - - - - - - epicalyx drooping - - - - - - - - - - - - - - - - - - - - - - - - infructescence conspicuous - - - - - - - - - - - - - - - - - - - - - - - - hypanthium conspicuous - - - - - - - - - - - - - - - - - - - - - - - - rhizome concealed by - - - - - - - - - - - - - - - - - - - - - - - - filament oblique to - - - - - - - - - - - - - - - - - - - - - - - - columella lateral to - - - - - - - - - - - - - - - - - - - - - - - - tubercle square - - - - - - - - cortex up - true - - - - - - - - - - - - - - - - - - - - - - - - cortex direction - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet transparent - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet opacity - - - - - - - - - - - - - - - - - - - - - - - - scutellar node punctiform - - - - - - - - - - - - - - - - - - - - - - - - stipel bent - - - - - - - - - - - - - - - - - - - - - - - - flower bud open - - - - - - - - - - - - - - - - - - - - - - - - flower bud closure - - - - - - - - - - - - - - - - - - - - - - - - awn purple - - - - - - - - - - - - - - - - - - - - - - - - flower bud split - - - - - - - - - - - - - - - - - - - - - - - - bulb edible - - - - - - - - - - - - - - - - - - - - - - - - bulb edibility - - - - - - - - - - - - - - - - - - - - - - - - stem involute - - - - - - - - - - - - - - - - - - - - - - - - caruncle bilobed - - - - - - - - - - - - - - - - - - - - - - - - chalaza curved - - - - - - - - - - - - - - - - - - - - - - - - chalaza curvature - - - - - - - - - - - - - - - - - - - - - - - - pericarp truncated - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath obconical - - - - - - - - - - - - - - - - - - - - - - - - scutellar node dispersed - - - - - - - - - - - - - - - - - - - - - - - - endocarp broken - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf coating - - - - - - - - - - - - - - - - - - - - - - - - lemma yellow green - - - - - - - - - - - - - - - - - - - - - - - - seta distal to - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein punctiform - - - - - - - - - - - - - - - - - - - - - - - - bud sigmoid - - - - - - - - - - - - - - - - - - - - - - - - exocarp orbicular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence falciform - - - - - - - - - - - - - - - - - - - - - - - - whole plant divergent from - - - - - - - - - - - - - - - - - - - - - - - - petiolule light green - - - - - - - - - - - - - - - - - - - - - - - - cambium magenta - - - - - - - - - - - - - - - - - - - - - - - - leaf apex obtuse - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril fleshy - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril composition - - - - - - - - - - - - - - - - - - - - - - - - lamina fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - bract waxy - - - - - - - - - - - - - - - - - - - - - - - - bract waxiness - - - - - - - - - - - - - - - - - - - - - - - - perianth protruding into - - - - - - - - - - - - - - - - - - - - - - - - stigma spotted - - - - - - - - - - - - - - - - - - - - - - - - stigma color pattern - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath broad - - - - - - - - vascular system acute - true - - - - - - - - vascular system duration - true - - - - - - - - - - - - - - - - - - - - - - - - leaf base juvenile - - - - - - - - - - - - - - - - - - - - - - - - sporangium ridged - - - - - - - - - - - - - - - - - - - - - - - - sporangium shape - - - - - - - - - - - - - - - - - - - - - - - - locule translucent - - - - - - - - - - - - - - - - - - - - - - - - locule opacity - - - - - - - - - - - - - - - - - - - - - - - - flower exposed - - - - - - - - leaf base continuous - true - - - - - - - - leaf base occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle spotted - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle color pattern - - - - - - - - - - - - - - - - - - - - - - - - pappus straight - - - - - - - - - - - - - - - - - - - - - - - - seed back - - - - - - - - seed premature - true - - - - - - - - seed onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - tubercle autogenous - - - - - - - - - - - - - - - - - - - - - - - - exocarp distal to - - - - - - - - branch arrested - true - - - - - - - - branch offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - epidermis opposite - - - - - - - - - - - - - - - - - - - - - - - - stem juvenile - - - - - - - - - - - - - - - - - - - - - - - - leaf yellow orange - - - - - - - - - - - - - - - - - - - - - - - - anther subrectangular - - - - - - - - - - - - - - - - - - - - - - - - flower areolate - - - - - - - - - - - - - - - - - - - - - - - - costa retuse - - - - - - - - - - - - - - - - - - - - - - - - androecium swollen - - - - - - - - - - - - - - - - - - - - - - - - fruit dark blue - - - - - - - - - - - - - - - - - - - - - - - - peristome present - - - - - - - - - - - - - - - - - - - - - - - - leaf actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - leaf radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - sheath cell spotted - - - - - - - - - - - - - - - - - - - - - - - - sheath cell color pattern - - - - - - - - - - - - - - - - - - - - - - - - sheath cell flattened - - - - - - - - - - - - - - - - - - - - - - - - tuber glandular - - - - - - - - - - - - - - - - - - - - - - - - tuber morphology - - - - - - - - - - - - - - - - - - - - - - - - tubercle lobed - - - - - - - - - - - - - - - - - - - - - - - - stipule glistening - - - - - - - - - - - - - - - - - - - - - - - - stipule reflectivity - - - - - - - - - - - - - - - - - - - - - - - - lemma adjacent to - - - - - - - - - - - - - - - - - - - - - - - - shoot system distichous - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure furrowed - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge obtuse - - - - - - - - - - - - - - - - - - - - - - - - receptacle whorled - - - - - - - - - - - - - - - - - - - - - - - - gynoecium linear - - - - - - - - - - - - - - - - - - - - - - - - chlorenchyma present - - - - - - - - - - - - - - - - - - - - - - - - epidermis attenuate - - - - - - - - - - - - - - - - - - - - - - - - pappus convex - - - - - - - - - - - - - - - - - - - - - - - - costa dry - - - - - - - - - - - - - - - - - - - - - - - - costa wetness - - - - - - - - - - - - - - - - - - - - - - - - stipel heart shaped - - - - - - - - - - - - - - - - - - - - - - - - stigma indurated - - - - - - - - - - - - - - - - - - - - - - - - keel parallel-sided - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge increased length - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge length - - - - - - - - - - - - - - - - - - - - - - - - pappus distal to - - - - - - - - sheath cell hermaphrodite - true - - - - - - - - sheath cell phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - lateral root phenotype - - - - - - - - - - - - - - - - - - - - - - - - lateral root lateral to - - - - - - - - - - - - - - - - - - - - - - - - lateral root position - - - - - - - - - - - - - - - - - - - - - - - - disk flower curled - - - - - - - - free tepal up - true - - - - - - - - - - - - - - - - - - - - - - - - free tepal direction - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus ventral to - - - - - - - - - - - - - - - - - - - - - - - - tepal tomentose - - - - - - - - - - - - - - - - - - - - - - - - endodermis brown - - - - - - - - - - - - - - - - - - - - - - - - locule open - - - - - - - - - - - - - - - - - - - - - - - - locule closure - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure circinate - - - - - - - - - - - - - - - - - - - - - - - - periderm dark red brown - - - - - - - - - - - - - - - - - - - - - - - - prickle brown - - - - - - - - - - - - - - - - - - - - - - - - arillode erect - - - - - - - - - - - - - - - - - - - - - - - - arillode position - - - - - - - - - - - - - - - - - - - - - - - - heartwood elliptic - - - - - - - - - - - - - - - - - - - - - - - - leaf tip elliptic - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root pinnate - - - - - - - - - - - - - - - - - - - - - - - - awn rugose - - - - - - - - - - - - - - - - - - - - - - - - awn surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - costa width - - - - - - - - - - - - - - - - - - - - - - - - valve absent - - - - - - - - - - - - - - - - - - - - - - - - hilum brittle - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell drooping - - - - - - - - - - - - - - - - - - - - - - - - seta opaque - - - - - - - - - - - - - - - - - - - - - - - - seta opacity - - - - - - - - - - - - - - - - - - - - - - - - nectary absent - - - - - - - - - - - - - - - - - - - - - - - - stem base opposite - - - - - - - - - - - - - - - - - - - - - - - - plumule hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath present - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath amount - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis green - - - - - - - - portion of secretory tissue male - true - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence immobile - - - - - - - - - - - - - - - - - - - - - - - - inflorescence mobility - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf viscous - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf viscosity - - - - - - - - - - - - - - - - - - - - - - - - stipule tubular - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus transparent - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus opacity - - - - - - - - - - - - - - - - - - - - - - - - hypanthium surrounding - - - - - - - - - - - - - - - - - - - - - - - - aril warty - - - - - - - - - - - - - - - - - - - - - - - - aril proximal to - - - - - - - - - - - - - - - - - - - - - - - - valve granular - - - - - - - - - - - - - - - - - - - - - - - - pollen immature - - - - - - - - - - - - - - - - - - - - - - - - antiraphe overlapping - - - - - - - - - - - - - - - - - - - - - - - - antiraphe structure - - - - - - - - - - - - - - - - - - - - - - - - pedicel perpendicular to - - - - - - - - - - - - - - - - - - - - - - - - endotesta light brown - - - - - - - - - - - - - - - - - - - - - - - - raphe decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - raphe water composition - - - - - - - - - - - - - - - - - - - - - - - - fruit bitter - - - - - - - - - - - - - - - - - - - - - - - - fruit flavor - - - - - - - - - - - - - - - - - - - - - - - - androecium filamentous - - - - - - - - - - - - - - - - - - - - - - - - valve scalloped - - - - - - - - - - - - - - - - - - - - - - - - micropyle bifurcated - - - - - - - - - - - - - - - - - - - - - - - - micropyle branchiness - - - - - - - - - - - - - - - - - - - - - - - - bracteole distributed - - - - - - - - - - - - - - - - - - - - - - - - leaf margin red - - - - - - - - - - - - - - - - - - - - - - - - papilla cell concave - - - - - - - - - - - - - - - - - - - - - - - - central zone foveate - - - - - - - - - - - - - - - - - - - - - - - - endosperm ovate - - - - - - - - - - - - - - - - - - - - - - - - petal protruding into - - - - - - - - - - - - - - - - - - - - - - - - petiole maroon - - - - - - - - - - - - - - - - - - - - - - - - testa bent - - - - - - - - - - - - - - - - - - - - - - - - growth ring coiled - - - - - - - - - - - - - - - - - - - - - - - - growth ring coiling - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein serrated - - - - - - - - - - - - - - - - - - - - - - - - central zone caudate - - - - - - - - - - - - - - - - - - - - - - - - placenta glabrous - - - - - - - - - - - - - - - - - - - - - - - - placenta pilosity - - - - - - - - - - - - - - - - - - - - - - - - androecium fusiform - - - - - - - - - - - - - - - - - - - - - - - - seta absent - - - - - - - - - - - - - - - - - - - - - - - - seta amount - - - - - - - - - - - - - - - - - - - - - - - - apical hook glistening - - - - - - - - - - - - - - - - - - - - - - - - apical hook reflectivity - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein star shaped - - - - - - - - - - - - - - - - - - - - - - - - parenchyma prominent - - - - - - - - - - - - - - - - - - - - - - - - corm fleshy - - - - - - - - - - - - - - - - - - - - - - - - pedicel ochre - - - - - - - - - - - - - - - - - - - - - - - - pericarp scaly - - - - - - - - - - - - - - - - - - - - - - - - petiole fused with - - - - - - - - - - - - - - - - - - - - - - - - stipel oblong - - - - - - - - - - - - - - - - - - - - - - - - androecium arched - - - - - - - - - - - - - - - - - - - - - - - - epidermis pedicellate - - - - - - - - - - - - - - - - - - - - - - - - epidermis attachment quality - - - - - - - - - - - - - - - - - - - - - - - - inflorescence antrorse - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein cuspidate - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein transparent - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein opacity - - - - - - - - - - - - - - - - - - - - - - - - sheath cell prominent - - - - - - - - - - - - - - - - - - - - - - - - perianth subcircular - - - - - - - - - - - - - - - - - - - - - - - - androecium tapered - - - - - - - - - - - - - - - - - - - - - - - - exocarp convex - - - - - - - - - - - - - - - - - - - - - - - - endosperm red brown - - - - - - - - - - - - - - - - - - - - - - - - flower unilateral - - - - - - - - - - - - - - - - - - - - - - - - androecium foveate - - - - - - - - - - - - - - - - - - - - - - - - hilum spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - stereome red - - - - - - - - - - - - - - - - - - - - - - - - crown root arched - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein convex - - - - - - - - - - - - - - - - - - - - - - - - tuberous root increased length - - - - - - - - - - - - - - - - - - - - - - - - tuberous root length - - - - - - - - - - - - - - - - - - - - - - - - tepal coiled - - - - - - - - - - - - - - - - - - - - - - - - tepal coiling - - - - - - - - - - - - - - - - - - - - - - - - epidermis height - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem swollen - - - - - - - - - - - - - - - - - - - - - - - - palea purple - - - - - - - - - - - - - - - - - - - - - - - - tuber normal - - - - - - - - - - - - - - - - - - - - - - - - tuber deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - - - - - aerenchyma phenotype - - - - - - - - - - - - - - - - - - - - - - - - aerenchyma present - - - - - - - - - - - - - - - - - - - - - - - - aerenchyma amount - - - - - - - - axil down - true - - - - - - - - - - - - - - - - - - - - - - - - bark light red - - - - - - - - - - - - - - - - - - - - - - - - testa fragile - - - - - - - - - - - - - - - - - - - - - - - - testa fragility - - - - - - - - - - - - - - - - - - - - - - - - perianth distal to - - - - - - - - - - - - - - - - - - - - - - - - leaf base symmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaf base symmetry - - - - - - - - - - - - - - - - - - - - - - - - lamina dark grey - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem adhesive - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem adhesivity - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus undulate - - - - - - - - - - - - - - - - - - - - - - - - disk flower ornamentation - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure open - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure closure - - - - - - - - - - - - - - - - - - - - - - - - papilla cell recurved - - - - - - - - seed trichome female - true - - - - - - - - seed trichome phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - lenticel triangular - - - - - - - - - - - - - - - - - - - - - - - - crown root curved - - - - - - - - - - - - - - - - - - - - - - - - axil angular - - - - - - - - - - - - - - - - - - - - - - - - simple leaf fertile - - - - - - - - - - - - - - - - - - - - - - - - plant embryo exserted - - - - - - - - - - - - - - - - - - - - - - - - keel convex - - - - - - - - - - - - - - - - - - - - - - - - petal parallel to - - - - - - - - - - - - - - - - - - - - - - - - inflorescence offset - - - - - - - - - - - - - - - - - - - - - - - - gynophore green - - - - - - - - - - - - - - - - - - - - - - - - bracteole semicircular - - - - - - - - - - - - - - - - - - - - - - - - hydathode auriculate - - - - - - - - - - - - - - - - - - - - - - - - stipule serrated - - - - - - - - - - - - - - - - - - - - - - - - testa parallel to - - - - - - - - - - - - - - - - - - - - - - - - seed coat hard - - - - - - - - - - - - - - - - - - - - - - - - seed coat hardness - - - - - - - - - - - - - - - - - - - - - - - - lamina rectangular - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle undulate - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle shape - - - - - - - - - - - - - - - - - - - - - - - - endocarp mass - - - - - - - - - - - - - - - - - - - - - - - - style cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - peduncle rugose - - - - - - - - - - - - - - - - - - - - - - - - peduncle surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - sapwood light brown - - - - - - - - - - - - - - - - - - - - - - - - calyx ornamented - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium terminal - - - - - - - - - - - - - - - - - - - - - - - - rhizome upturned - - - - - - - - - - - - - - - - - - - - - - - - apical hook inflexible - - - - - - - - - - - - - - - - - - - - - - - - apical hook flexibility - - - - - - - - - - - - - - - - - - - - - - - - parenchyma coiled - - - - - - - - - - - - - - - - - - - - - - - - parenchyma coiling - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma tomentose - - - - - - - - - - - - - - - - - - - - - - - - seed dark green - - - - - - - - - - - - - - - - - - - - - - - - gynoecium purple - - - - - - - - - - - - - - - - - - - - - - - - plumule smooth - - - - - - - - - - - - - - - - - - - - - - - - plumule texture - - - - - - - - - - - - - - - - - - - - - - - - leaf tip size - - - - - - - - - - - - - - - - - - - - - - - - stamen constricted - - - - - - - - - - - - - - - - - - - - - - - - shoot system distributed - - - - - - - - - - - - - - - - - - - - - - - - spikelet broken - - - - - - - - - - - - - - - - - - - - - - - - spikelet wholeness - - - - - - - - - - - - - - - - - - - - - - - - connective pigmented - - - - - - - - - - - - - - - - - - - - - - - - connective degree of pigmentation - - - - - - - - - - - - - - - - - - - - - - - - plant cell folded - - - - - - - - - - - - - - - - - - - - - - - - costa curved - - - - - - - - - - - - - - - - - - - - - - - - coma elongated - - - - - - - - - - - - - - - - - - - - - - - - stomatal pore fused with - - - - - - - - - - - - - - - - - - - - - - - - stem base branched - - - - - - - - - - - - - - - - - - - - - - - - stem base branchiness - - - - - - - - - - - - - - - - - - - - - - - - involucre young - - - - - - - - - - - - - - - - - - - - - - - - areole bud basal to - - - - - - - - - - - - - - - - - - - - - - - - hilum decreased water composition - - - - - - - - - - - - - - - - - - - - - - - - hilum water composition - - - - - - - - - - - - - - - - - - - - - - - - inflorescence width - - - - - - - - - - - - - - - - - - - - - - - - costa translucent - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - megaspore attached to - - - - - - - - - - - - - - - - - - - - - - - - megaspore attachment quality - - - - - - - - - - - - - - - - - - - - - - - - juice sac terminal - - - - - - - - - - - - - - - - - - - - - - - - axil funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - aril closed - - - - - - - - - - - - - - - - - - - - - - - - aril closure - - - - - - - - - - - - - - - - - - - - - - - - petiolule condensed - - - - - - - - - - - - - - - - - - - - - - - - calyx tangled - - - - - - - - - - - - - - - - - - - - - - - - carpel broad - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf star shaped - - - - - - - - - - - - - - - - - - - - - - - - seed soft - - - - - - - - - - - - - - - - - - - - - - - - gynoecium spotted - - - - - - - - - - - - - - - - - - - - - - - - gynoecium color pattern - - - - - - - - - - - - - - - - - - - - - - - - tepal involute - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure warty - - - - - - - - - - - - - - - - - - - - - - - - endosperm laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - bark moderate intensity - true - - - - - - - - - - - - - - - - - - - - - - - - bark intensity - true - - - - - - - - - - - - - - - - - - - - - - - - perianth scalloped - - - - - - - - - - - - - - - - - - - - - - - - perianth truncated - - - - - - - - - - - - - - - - - - - - - - - - style height - - - - - - - - - - - - - - - - - - - - - - - - pith herbaceous - - - - - - - - - - - - - - - - - - - - - - - - pith shedability - - - - - - - - - - - - - - - - - - - - - - - - fruit hispidulous - - - - - - - - - - - - - - - - - - - - - - - - bark prostrate - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl angular - - - - - - - - - - - - - - - - - - - - - - - - bulb obtuse - - - - - - - - - - - - - - - - - - - - - - - - pericarp vestigial - - - - - - - - - - - - - - - - - - - - - - - - root tip notched - - - - - - - - - - - - - - - - - - - - - - - - bract erose - - - - - - - - - - - - - - - - - - - - - - - - anther theca curved - - - - - - - - - - - - - - - - - - - - - - - - hypanthium acuminate - - - - - - - - - - - - - - - - - - - - - - - - leaf margin revolute - - - - - - - - - - - - - - - - - - - - - - - - tubercle offset - - - - - - - - - - - - - - - - - - - - - - - - plant cell flattened - - - - - - - - - - - - - - - - - - - - - - - - plant cell curvature - - - - - - - - tassel sessile spikelet synchronous - true - - - - - - - - tassel sessile spikelet occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - lemma adhesive - - - - - - - - - - - - - - - - - - - - - - - - lemma adhesivity - - - - - - - - - - - - - - - - - - - - - - - - style V-shaped - - - - - - - - - - - - - - - - - - - - - - - - petiole adhesive - - - - - - - - - - - - - - - - - - - - - - - - petiole adhesivity - - - - - - - - - - - - - - - - - - - - - - - - flower yellow brown - - - - - - - - - - - - - - - - - - - - - - - - branch mature - - - - - - - - - - - - - - - - - - - - - - - - shoot internode convex - - - - - - - - - - - - - - - - - - - - - - - - shoot internode concavity - - - - - - - - - - - - - - - - - - - - - - - - periderm obtuse - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf cupulate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system condensed - - - - - - - - - - - - - - - - - - - - - - - - sepal foveate - - - - - - - - - - - - - - - - - - - - - - - - integument curved - - - - - - - - - - - - - - - - - - - - - - - - integument curvature - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure notched - - - - - - - - - - - - - - - - - - - - - - - - keel erose - - - - - - - - - - - - - - - - - - - - - - - - locule dorsal to - - - - - - - - - - - - - - - - - - - - - - - - thorn sterile - - - - - - - - - - - - - - - - - - - - - - - - thorn fertility - - - - - - - - - - - - - - - - - - - - - - - - oil gland linear - - - - - - - - - - - - - - - - - - - - - - - - nectary simple - - - - - - - - - - - - - - - - - - - - - - - - nectary complexity - - - - - - - - - - - - - - - - - - - - - - - - prophyll distichous - - - - - - - - - - - - - - - - - - - - - - - - leaf axil ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf axil convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pseudostem absent - - - - - - - - - - - - - - - - - - - - - - - - pseudostem amount - - - - - - - - - - - - - - - - - - - - - - - - keel multicellular - - - - - - - - - - - - - - - - - - - - - - - - keel cellularity - - - - - - - - - - - - - - - - - - - - - - - - corolla crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - peristome light purple - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue areolate - - - - - - - - - - - - - - - - - - - - - - - - epicalyx asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - epicalyx symmetry - - - - - - - - - - - - - - - - - - - - - - - - bract yellow green - - - - - - - - - - - - - - - - - - - - - - - - lamina congested - - - - - - - - - - - - - - - - - - - - - - - - upper glume elongated - - - - - - - - - - - - - - - - - - - - - - - - keel mixed - - - - - - - - - - - - - - - - - - - - - - - - aril laterally compressed - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root ovate - - - - - - - - - - - - - - - - - - - - - - - - bark sparse - - - - - - - - - - - - - - - - - - - - - - - - epicotyl linear - - - - - - - - - - - - - - - - - - - - - - - - hypanthium sterile - - - - - - - - - - - - - - - - - - - - - - - - hypanthium fertility - - - - - - - - - - - - - - - - - - - - - - - - whole plant young - - - - - - - - - - - - - - - - - - - - - - - - seed coat shape - - - - - - - - - - - - - - - - - - - - - - - - radicle whole - - - - - - - - - - - - - - - - - - - - - - - - radicle wholeness - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell ovate - - - - - - - - - - - - - - - - - - - - - - - - bark split - - - - - - - - - - - - - - - - - - - - - - - - valve red brown - - - - - - - - - - - - - - - - - - - - - - - - valve undulate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp pyramidal - - - - - - - - - - - - - - - - - - - - - - - - epidermis yellow brown - - - - - - - - - - - - - - - - - - - - - - - - lower glume involute - - - - - - - - - - - - - - - - - - - - - - - - parenchyma autogenous - - - - - - - - - - - - - - - - - - - - - - - - pistillode horizontal - - - - - - - - - - - - - - - - - - - - - - - - rhizome obclavate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp spherical - - - - - - - - - - - - - - - - - - - - - - - - lemma firm - - - - - - - - - - - - - - - - - - - - - - - - lenticel scalloped - - - - - - - - - - - - - - - - - - - - - - - - plant callus spherical - - - - - - - - - - - - - - - - - - - - - - - - pollen acuminate - - - - - - - - - - - - - - - - - - - - - - - - tepal slender - - - - - - - - - - - - - - - - - - - - - - - - tubercle sterile - - - - - - - - - - - - - - - - - - - - - - - - tubercle fertility - - - - - - - - - - - - - - - - - - - - - - - - seta opposite - - - - - - - - - - - - - - - - - - - - - - - - ligule involute - - - - - - - - - - - - - - - - - - - - - - - - spikelet convolute - - - - - - - - - - - - - - - - - - - - - - - - androecium time - - - - - - - - - - - - - - - - - - - - - - - - placenta hairy - - - - - - - - - - - - - - - - - - - - - - - - sepal constricted - - - - - - - - - - - - - - - - - - - - - - - - petiole subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - stalk spotted - - - - - - - - - - - - - - - - - - - - - - - - seed operculum decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - seed operculum thickness - - - - - - - - - - - - - - - - - - - - - - - - androecium purple - - - - - - - - - - - - - - - - - - - - - - - - tepal opaque - - - - - - - - - - - - - - - - - - - - - - - - cotyledon reniform - - - - - - - - - - - - - - - - - - - - - - - - peristome dorsal to - - - - - - - - - - - - - - - - - - - - - - - - sheath cell obtuse - - - - - - - - - - - - - - - - - - - - - - - - apical hook fan-shaped - - - - - - - - pollen female - true - - - - - - - - - - - - - - - - - - - - - - - - short shoot elliptic - - - - - - - - - - - - - - - - - - - - - - - - cotyledon split - - - - - - - - - - - - - - - - - - - - - - - - involucre undulate - - - - - - - - - - - - - - - - - - - - - - - - exocarp mature - - - - - - - - - - - - - - - - - - - - - - - - hydathode truncated - - - - - - - - - - - - - - - - - - - - - - - - staminode transparent - - - - - - - - - - - - - - - - - - - - - - - - staminode opacity - - - - - - - - - - - - - - - - - - - - - - - - pistillode flattened - - - - - - - - - - - - - - - - - - - - - - - - hilum whorled - - - - - - - - - - - - - - - - - - - - - - - - keel subterminal - - - - - - - - - - - - - - - - - - - - - - - - septum flattened - - - - - - - - - - - - - - - - - - - - - - - - hypanthium concave - - - - - - - - - - - - - - - - - - - - - - - - gynophore opposite - - - - - - - - - - - - - - - - - - - - - - - - awn attenuate - - - - - - - - - - - - - - - - - - - - - - - - mesophyll caudate - - - - - - - - - - - - - - - - - - - - - - - - leaf margin parallel to - - - - - - - - - - - - - - - - - - - - - - - - testa obclavate - - - - - - - - - - - - - - - - - - - - - - - - valve adaxial to - - - - - - - - - - - - - - - - - - - - - - - - filament sunken - - - - - - - - - - - - - - - - - - - - - - - - filament elevation - - - - - - - - - - - - - - - - - - - - - - - - pericarp terminal - - - - - - - - - - - - - - - - - - - - - - - - anther theca glandular - - - - - - - - - - - - - - - - - - - - - - - - anther theca morphology - - - - - - - - - - - - - - - - - - - - - - - - leaf peripheral - - - - - - - - - - - - - - - - - - - - - - - - cotyledon increased size - - - - - - - - - - - - - - - - - - - - - - - - cotyledon size - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus pointed - - - - - - - - - - - - - - - - - - - - - - - - epicalyx obtuse - - - - - - - - - - - - - - - - - - - - - - - - ligule dense - - - - - - - - - - - - - - - - - - - - - - - - ligule mass density - - - - - - - - - - - - - - - - - - - - - - - - spikelet hispid - - - - - - - - - - - - - - - - - - - - - - - - - - - - xylem phenotype - - - - - - - - - - - - - - - - - - - - - - - - xylem grooved - - - - - - - - - - - - - - - - - - - - - - - - xylem texture - - - - - - - - free sepal male - true - - - - - - - - free sepal phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - integument white - - - - - - - - - - - - - - - - - - - - - - - - shoot apex waxy - - - - - - - - - - - - - - - - - - - - - - - - shoot apex waxiness - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein open - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein closure - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf fused with - - - - - - - - - - - - - - - - - - - - - - - - shoot system opposite - - - - - - - - - - - - - - - - - - - - - - - - lemma closed - - - - - - - - - - - - - - - - - - - - - - - - lemma closure - - - - - - - - - - - - - - - - - - - - - - - - short shoot decurrent - - - - - - - - - - - - - - - - - - - - - - - - short shoot shape - - - - - - - - - - - - - - - - - - - - - - - - heartwood circular - - - - - - - - - - - - - - - - - - - - - - - - - - - - tegmen phenotype - - - - - - - - - - - - - - - - - - - - - - - - tegmen convex - - - - - - - - - - - - - - - - - - - - - - - - tegmen concavity - - - - - - - - - - - - - - - - - - - - - - - - flower right - - - - - - - - - - - - - - - - - - - - - - - - thallus symmetrical - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet coating - - - - - - - - - - - - - - - - - - - - - - - - petal ornamentation - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma conspicuous - - - - - - - - - - - - - - - - - - - - - - - - spikelet dark brown - - - - - - - - - - - - - - - - - - - - - - - - perianth herbaceous - - - - - - - - - - - - - - - - - - - - - - - - perianth shedability - - - - - - - - - - - - - - - - - - - - - - - - peduncle ochre - - - - - - - - - - - - - - - - - - - - - - - - mesocarp square - - - - - - - - - - - - - - - - - - - - - - - - endosperm yellow - - - - - - - - - - - - - - - - - - - - - - - - tubercle viscid - - - - - - - - - - - - - - - - - - - - - - - - tubercle orbicular - - - - - - - - - - - - - - - - - - - - - - - - peduncle surrounding - - - - - - - - - - - - - - - - - - - - - - - - spikelet dark purple - - - - - - - - - - - - - - - - - - - - - - - - axil prominent - - - - - - - - - - - - - - - - - - - - - - - - nectary white - - - - - - - - - - - - - - - - - - - - - - - - pulvinus vertical - - - - - - - - - - - - - - - - - - - - - - - - pulvinus spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - tuberous root cylindrical - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath curved - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath curvature - - - - - - - - - - - - - - - - - - - - - - - - calyx decussate - - - - - - - - - - - - - - - - - - - - - - - - aril bitter - - - - - - - - - - - - - - - - - - - - - - - - aril flavor - - - - - - - - - - - - - - - - - - - - - - - - hilum time - - - - - - - - - - - - - - - - - - - - - - - - septum linear - - - - - - - - - - - - - - - - - - - - - - - - peduncle right angle to - - - - - - - - - - - - - - - - - - - - - - - - involucre maroon - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus decreased amount - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus amount - - - - - - - - - - - - - - - - - - - - - - - - seta inserted into - - - - - - - - - - - - - - - - - - - - - - - - fruit medial to - - - - - - - - - - - - - - - - - - - - - - - - root soft - - - - - - - - - - - - - - - - - - - - - - - - pericarp acuminate - - - - - - - - - - - - - - - - - - - - - - - - lamina abnormal - - - - - - - - - - - - - - - - - - - - - - - - tubercle soft - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein angular - - - - - - - - - - - - - - - - - - - - - - - - seed trichome falciform - - - - - - - - - - - - - - - - - - - - - - - - pollen work - - - - - - - - stem base up - true - - - - - - - - - - - - - - - - - - - - - - - - stem base direction - - - - - - - - - - - - - - - - - - - - - - - - glume arched - - - - - - - - - - - - - - - - - - - - - - - - trichome age - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue inflated - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - stele decreased thickness - - - - - - - - ovule primordium female - true - - - - - - - - - - - - - - - - - - - - - - - - short shoot oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - tuberous root pubescent - - - - - - - - - - - - - - - - - - - - - - - - tuberous root maturity - - - - - - - - - - - - - - - - - - - - - - - - stele distichous - - - - - - - - - - - - - - - - - - - - - - - - stolon hairy - - - - - - - - - - - - - - - - - - - - - - - - leaf apex distal to - - - - - - - - - - - - - - - - - - - - - - - - pedicel rectangular - - - - - - - - - - - - - - - - - - - - - - - - shoot apex green - - - - - - - - - - - - - - - - - - - - - - - - locule clavate - - - - - - - - - - - - - - - - - - - - - - - - palea slender - - - - - - - - - - - - - - - - - - - - - - - - valve flat - - - - - - - - - - - - - - - - - - - - - - - - ligule fused with - - - - - - - - - - - - - - - - - - - - - - - - thorn grooved - - - - - - - - - - - - - - - - - - - - - - - - peristome flush - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus acuminate - - - - - - - - - - - - - - - - - - - - - - - - root-borne shoot system decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - flower ornamentation - - - - - - - - - - - - - - - - - - - - - - - - axil actinomorphic - - - - - - - - - - - - - - - - - - - - - - - - axil radial symmetry - - - - - - - - - - - - - - - - - - - - - - - - canal drooping - - - - - - - - - - - - - - - - - - - - - - - - calyx flush - - - - - - - - - - - - - - - - - - - - - - - - hydathode oblong - - - - - - - - - - - - - - - - - - - - - - - - involucre surrounding - - - - - - - - - - - - - - - - - - - - - - - - plant embryo lanceolate - - - - - - - - - - - - - - - - - - - - - - - - testa swollen - - - - - - - - - - - - - - - - - - - - - - - - plant spore concave - - - - - - - - - - - - - - - - - - - - - - - - plant spore concavity - - - - - - - - - - - - - - - - - - - - - - - - perianth setose - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet grooved - - - - - - - - - - - - - - - - - - - - - - - - pith triangular - - - - - - - - - - - - - - - - - - - - - - - - bud ridged - - - - - - - - - - - - - - - - - - - - - - - - banner petal punctate - - - - - - - - - - - - - - - - - - - - - - - - banner petal spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - filament tomentose - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure striated - - - - - - - - - - - - - - - - - - - - - - - - filament columnar - - - - - - - - - - - - - - - - - - - - - - - - bracteole fertile - - - - - - - - - - - - - - - - - - - - - - - - peristome elongated - - - - - - - - - - - - - - - - - - - - - - - - inflorescence inverted - - - - - - - - - - - - - - - - - - - - - - - - hypodermis adaxial to - - - - - - - - - - - - - - - - - - - - - - - - epicalyx brittle - - - - - - - - - - - - - - - - - - - - - - - - pedicel upturned - - - - - - - - - - - - - - - - - - - - - - - - exocarp lanceolate - - - - - - - - - - - - - - - - - - - - - - - - flower adhesive - - - - - - - - - - - - - - - - - - - - - - - - flower adhesivity - - - - - - - - - - - - - - - - - - - - - - - - stamen rough - - - - - - - - - - - - - - - - - - - - - - - - cortex branched - - - - - - - - - - - - - - - - - - - - - - - - cortex branchiness - - - - - - - - - - - - - - - - - - - - - - - - root tip open - - - - - - - - - - - - - - - - - - - - - - - - root tip closure - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma indurated - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma structure - - - - - - - - - - - - - - - - - - - - - - - - flower bud adaxial to - - - - - - - - - - - - - - - - - - - - - - - - seed dilated - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet perfoliate - - - - - - - - - - - - - - - - - - - - - - - - mesocarp angle - - - - - - - - - - - - - - - - - - - - - - - - pollen binucleate - - - - - - - - - - - - - - - - - - - - - - - - pollen nucleate quality - - - - - - - - - - - - - - - - - - - - - - - - hypanthium width - - - - - - - - - - - - - - - - - - - - - - - - stem dark violet - - - - - - - - - - - - - - - - - - - - - - - - leaf axil violet - - - - - - - - - - - - - - - - - - - - - - - - sapwood slender - - - - - - - - - - - - - - - - - - - - - - - - sapwood shape - - - - - - - - - - - - - - - - - - - - - - - - ligule convolute - - - - - - - - - - - - - - - - - - - - - - - - anther time - - - - - - - - - - - - - - - - - - - - - - - - columella absent - - - - - - - - - - - - - - - - - - - - - - - - connective hexagonal - - - - - - - - - - - - - - - - - - - - - - - - anther theca adaxial to - - - - - - - - - - - - - - - - - - - - - - - - thorn brittle - - - - - - - - hypanthium hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - leaflet transparent - - - - - - - - - - - - - - - - - - - - - - - - root tip rough - - - - - - - - shoot axis up - true - - - - - - - - - - - - - - - - - - - - - - - - shoot axis direction - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - stamen multifid - - - - - - - - - - - - - - - - - - - - - - - - endodermis absent - - - - - - - - - - - - - - - - - - - - - - - - exocarp closed - - - - - - - - - - - - - - - - - - - - - - - - exocarp closure - - - - - - - - - - - - - - - - - - - - - - - - root tip constricted - - - - - - - - - - - - - - - - - - - - - - - - fruit V-shaped - - - - - - - - - - - - - - - - - - - - - - - - valve diameter - - - - - - - - - - - - - - - - - - - - - - - - anther theca emarginate - - - - - - - - - - - - - - - - - - - - - - - - columella ligneous - - - - - - - - - - - - - - - - - - - - - - - - petiole pink - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell circular - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel rough - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel texture - - - - - - - - - - - - - - - - - - - - - - - - hilum lobate - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - nectary surrounding - - - - - - - - - - - - - - - - - - - - - - - - sheath cell subulate - - - - - - - - - - - - - - - - - - - - - - - - exocarp ornamentation - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina concealed - - - - - - - - - - - - - - - - - - - - - - - - stipule ridged - - - - - - - - - - - - - - - - - - - - - - - - leaf apex ovate - - - - - - - - - - - - - - - - - - - - - - - - leaf apex convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant callus columnar - - - - - - - - - - - - - - - - - - - - - - - - apical hook areolate - - - - - - - - - - - - - - - - - - - - - - - - apical hook surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - gynophore fusiform - - - - - - - - - - - - - - - - - - - - - - - - stalk spatulate - - - - - - - - - - - - - - - - - - - - - - - - sheath cell caudate - - - - - - - - - - - - - - - - - - - - - - - - pollen glandular - - - - - - - - - - - - - - - - - - - - - - - - juice sac striated - - - - - - - - - - - - - - - - - - - - - - - - stele opposite - - - - - - - - - - - - - - - - - - - - - - - - scutellar node brittle - - - - - - - - - - - - - - - - - - - - - - - - stalk brittle - - - - - - - - - - - - - - - - - - - - - - - - tuber dense - - - - - - - - - - - - - - - - - - - - - - - - tuber mass density - - - - - - - - - - - - - - - - - - - - - - - - ovary wall adhesive - - - - - - - - - - - - - - - - - - - - - - - - ovary wall adhesivity - - - - - - - - - - - - - - - - - - - - - - - - petal dark purple - - - - - - - - - - - - - - - - - - - - - - - - bud increased size - - - - - - - - - - - - - - - - - - - - - - - - ray system purple - - - - - - - - - - - - - - - - - - - - - - - - ray system color - - - - - - - - - - - - - - - - - - - - - - - - petal whole - - - - - - - - - - - - - - - - - - - - - - - - root tip ornamentation - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf areolate - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - root split - - - - - - - - - - - - - - - - - - - - - - - - seta emarginate - - - - - - - - - - - - - - - - - - - - - - - - seta concavity - - - - - - - - - - - - - - - - - - - - - - - - short shoot branched - - - - - - - - - - - - - - - - - - - - - - - - short shoot branchiness - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium abaxial to - - - - - - - - - - - - - - - - - - - - - - - - rhizome indurated - - - - - - - - - - - - - - - - - - - - - - - - stigma inflexible - - - - - - - - - - - - - - - - - - - - - - - - stigma flexibility - - - - - - - - - - - - - - - - - - - - - - - - leaf granular - - - - - - - - - - - - - - - - - - - - - - - - fruit erose - - - - - - - - - - - - - - - - - - - - - - - - columella triangular - - - - - - - - - - - - - - - - - - - - - - - - columella 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina spiny - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - pericarp crowded - - - - - - - - - - - - - - - - - - - - - - - - thorn attenuate - - - - - - - - - - - - - - - - - - - - - - - - rhizome exposed - - - - - - - - - - - - - - - - - - - - - - - - lamina bent - - - - - - - - - - - - - - - - - - - - - - - - whole plant level with - - - - - - - - - - - - - - - - - - - - - - - - locule length - - - - - - - - - - - - - - - - - - - - - - - - mesocarp convex - - - - - - - - - - - - - - - - - - - - - - - - epidermis dark grey - - - - - - - - peduncle hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - style slit-like - - - - - - - - - - - - - - - - - - - - - - - - epidermis convex - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence transparent - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence opacity - - - - - - - - - - - - - - - - - - - - - - - - short shoot purple - - - - - - - - - - - - - - - - - - - - - - - - short shoot color - - - - - - - - - - - - - - - - - - - - - - - - aril mottled - - - - - - - - - - - - - - - - - - - - - - - - aril color pattern - - - - - - - - - - - - - - - - - - - - - - - - nectary subcylindrical - - - - - - - - - - - - - - - - - - - - - - - - septum conspicuous - - - - - - - - - - - - - - - - - - - - - - - - sapwood yellow brown - - - - - - - - - - - - - - - - - - - - - - - - pericarp ochre - - - - - - - - - - - - - - - - - - - - - - - - seed operculum oblong - - - - - - - - - - - - - - - - - - - - - - - - thallus diameter - - - - - - - - - - - - - - - - - - - - - - - - arillode reniform - - - - - - - - - - - - - - - - - - - - - - - - arillode concave 3-D shape - - - - - - - - placenta male - true - - - - - - - - - - - - - - - - - - - - - - - - oil gland opposite - - - - - - - - - - - - - - - - - - - - - - - - tubercle orange - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus arched - - - - - - - - - - - - - - - - - - - - - - - - petal cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - axil oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - pith setose - - - - - - - - - - - - - - - - - - - - - - - - mesocarp attenuate - - - - - - - - - - - - - - - - - - - - - - - - aril striated - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath mass - - - - - - - - - - - - - - - - - - - - - - - - thorn warty - - - - - - - - - - - - - - - - - - - - - - - - stereome fenestrated - - - - - - - - - - - - - - - - - - - - - - - - raphe dark brown - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus flattened - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus curvature - - - - - - - - - - - - - - - - - - - - - - - - plant embryo adhesive - - - - - - - - - - - - - - - - - - - - - - - - plant embryo adhesivity - - - - - - - - - - - - - - - - - - - - - - - - coma dark red brown - - - - - - - - - - - - - - - - - - - - - - - - arilloid undulate - - - - - - - - - - - - - - - - - - - - - - - - arilloid shape - - - - - - - - - - - - - - - - - - - - - - - - caruncle rugose - - - - - - - - - - - - - - - - - - - - - - - - parenchyma confluent with - - - - - - - - - - - - - - - - - - - - - - - - tuber weight - - - - - - - - - - - - - - - - - - - - - - - - tubercle reniform - - - - - - - - - - - - - - - - - - - - - - - - anther theca obtuse - - - - - - - - - - - - - - - - - - - - - - - - placenta deformed - - - - - - - - - - - - - - - - - - - - - - - - arilloid smooth - - - - - - - - - - - - - - - - - - - - - - - - arilloid texture - - - - - - - - - - - - - - - - - - - - - - - - chalaza orbicular - - - - - - - - - - - - - - - - - - - - - - - - pulvinus grooved - - - - - - - - - - - - - - - - - - - - - - - - pulvinus texture - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system involute - - - - - - - - - - - - - - - - - - - - - - - - pericarp fragile - - - - - - - - - - - - - - - - - - - - - - - - pericarp fragility - - - - - - - - - - - - - - - - - - - - - - - - seed differentiated - - - - - - - - - - - - - - - - - - - - - - - - seed cellular potency - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet pointed - - - - - - - - - - - - - - - - - - - - - - - - corolla prominent - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle yellow - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma basal to - - - - - - - - - - - - - - - - - - - - - - - - corolla beige - - - - - - - - - - - - - - - - - - - - - - - - seed damaged - - - - - - - - - - - - - - - - - - - - - - - - seed damage - - - - - - - - - - - - - - - - - - - - - - - - lamina bilateral - - - - - - - - - - - - - - - - - - - - - - - - pericarp protruding - - - - - - - - - - - - - - - - - - - - - - - - shoot system pointed - - - - - - - - - - - - - - - - - - - - - - - - banner petal dentated - - - - - - - - - - - - - - - - - - - - - - - - scutellar node age - - - - - - - - - - - - - - - - - - - - - - - - leaf quadrangular - - - - - - - - - - - - - - - - - - - - - - - - carpel wrinkled - - - - - - - - - - - - - - - - - - - - - - - - infructescence flat - - - - - - - - - - - - - - - - - - - - - - - - glume light green - - - - - - - - - - - - - - - - - - - - - - - - pedicel yellow green - - - - - - - - - - - - - - - - - - - - - - - - testa dark red - - - - - - - - - - - - - - - - - - - - - - - - gynoecium wrinkled - - - - - - - - - - - - - - - - - - - - - - - - lamina depth - - - - - - - - - - - - - - - - - - - - - - - - peristome revolute - - - - - - - - - - - - - - - - - - - - - - - - axil autogenous - - - - - - - - - - - - - - - - - - - - - - - - stalk conspicuous - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system caudate - - - - - - - - - - - - - - - - - - - - - - - - seed trichome overlapping - - - - - - - - - - - - - - - - - - - - - - - - aril differentiated - - - - - - - - - - - - - - - - - - - - - - - - aril cellular potency - - - - - - - - - - - - - - - - - - - - - - - - ligule right - - - - - - - - - - - - - - - - - - - - - - - - involucre circular - - - - - - - - - - - - - - - - - - - - - - - - plant spore increased thickness - - - - - - - - - - - - - - - - - - - - - - - - plant spore thickness - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus exserted - - - - - - - - - - - - - - - - - - - - - - - - locule opposite - - - - - - - - - - - - - - - - - - - - - - - - axil ridged - - - - - - - - - - - - - - - - - - - - - - - - receptacle loose - - - - - - - - - - - - - - - - - - - - - - - - pericarp inflated - - - - - - - - - - - - - - - - - - - - - - - - pericarp structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - flower hypertrophic - - - - - - - - - - - - - - - - - - - - - - - - flower volume - - - - - - - - - - - - - - - - - - - - - - - - cortex purple - - - - - - - - - - - - - - - - - - - - - - - - filament distributed - - - - - - - - - - - - - - - - - - - - - - - - sporangium unicellular - - - - - - - - - - - - - - - - - - - - - - - - sporangium cellularity - - - - - - - - - - - - - - - - - - - - - - - - stipule adaxial to - - - - - - - - - - - - - - - - - - - - - - - - perianth waxy - - - - - - - - - - - - - - - - - - - - - - - - perianth waxiness - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root sunken - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root elevation - - - - - - - - - - - - - - - - - - - - - - - - stigma retrorse - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf rhomboid - - - - - - - - - - - - - - - - - - - - - - - - cotyledon adhesive - - - - - - - - - - - - - - - - - - - - - - - - cotyledon adhesivity - - - - - - - - - - - - - - - - - - - - - - - - sporangium absent - - - - - - - - - - - - - - - - - - - - - - - - sporangium amount - - - - - - - - - - - - - - - - - - - - - - - - hypanthium orange - - - - - - - - - - - - - - - - - - - - - - - - epicotyl increased length - - - - - - - - - - - - - - - - - - - - - - - - epicotyl length - - - - - - - - - - - - - - - - - - - - - - - - costa black - - - - - - - - - - - - - - - - - - - - - - - - bracteole white - - - - - - - - - - - - - - - - - - - - - - - - crown root condensed - - - - - - - - - - - - - - - - - - - - - - - - seed bitter - - - - - - - - - - - - - - - - - - - - - - - - seed flavor - - - - - - - - - - - - - - - - - - - - - - - - ligule broad - - - - - - - - - - - - - - - - - - - - - - - - caruncle red - - - - - - - - - - - - - - - - - - - - - - - - root tip angular - - - - - - - - - - - - - - - - - - - - - - - - sapwood dark orange - - - - - - - - - - - - - - - - - - - - - - - - pericarp mass - - - - - - - - filament hermaphrodite - true - - - - - - - - - - - - - - - - - - - - - - - - prickle alternate placement - - - - - - - - - - - - - - - - - - - - - - - - perianth cuneate - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel grooved - - - - - - - - - - - - - - - - - - - - - - - - root tip distichous - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member trilobed - - - - - - - - - - - - - - - - - - - - - - - - awn concave - - - - - - - - - - - - - - - - - - - - - - - - branch subcircular - - - - - - - - - - - - - - - - - - - - - - - - bracteole brittle - - - - - - - - - - - - - - - - - - - - - - - - style symmetrical - - - - - - - - - - - - - - - - - - - - - - - - ray system alternate placement - - - - - - - - - - - - - - - - - - - - - - - - ray system spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - sapwood yellow orange - - - - - - - - - - - - - - - - - - - - - - - - anther theca autogenous - - - - - - - - - - - - - - - - - - - - - - - - bud mixed - - - - - - - - - - - - - - - - - - - - - - - - central zone tomentose - - - - - - - - - - - - - - - - - - - - - - - - fruit aggregated - - - - - - - - - - - - - - - - - - - - - - - - exotesta brown - - - - - - - - - - - - - - - - - - - - - - - - crown root dorsal to - - - - - - - - - - - - - - - - - - - - - - - - fruit parallel-sided - - - - - - - - - - - - - - - - - - - - - - - - awn condensed - - - - - - - - - - - - - - - - - - - - - - - - leaf dark red brown - - - - - - - - - - - - - - - - - - - - - - - - upper glume leaf-like - - - - - - - - - - - - - - - - - - - - - - - - bud bulbous - - - - - - - - fertile lemma acute - true - - - - - - - - fertile lemma duration - true - - - - - - - - stem base acute - true - - - - - - - - stem base duration - true - - - - - - - - - - - - - - - - - - - - - - - - lamina funnel-shaped - - - - - - - - - - - - - - - - - - - - - - - - apical hook decurrent - - - - - - - - - - - - - - - - - - - - - - - - endocarp broad - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril spatulate - - - - - - - - - - - - - - - - - - - - - - - - root kinked - - - - - - - - - - - - - - - - - - - - - - - - endotesta black - - - - - - - - - - - - - - - - - - - - - - - - calyx associated with - - - - - - - - - - - - - - - - - - - - - - - - tepal brown - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis cuneate - - - - - - - - - - - - - - - - - - - - - - - - plant cell autogenous - - - - - - - - - - - - - - - - - - - - - - - - stamen mature - - - - - - - - - - - - - - - - - - - - - - - - coma dark red - - - - - - - - - - - - - - - - - - - - - - - - pollen closed - - - - - - - - - - - - - - - - - - - - - - - - filament falciform - - - - - - - - - - - - - - - - - - - - - - - - shoot apex multiple - - - - - - - - - - - - - - - - - - - - - - - - root divergent from - - - - - - - - - - - - - - - - - - - - - - - - locule yellow green - - - - - - - - - - - - - - - - - - - - - - - - leaf work - - - - - - - - - - - - - - - - - - - - - - - - endodermis oblong - - - - - - - - - - - - - - - - - - - - - - - - endodermis 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - parenchyma absent - - - - - - - - - - - - - - - - - - - - - - - - stem D-shaped - - - - - - - - - - - - - - - - - - - - - - - - lower glume pedicellate - - - - - - - - - - - - - - - - - - - - - - - - lower glume attachment quality - - - - - - - - - - - - - - - - - - - - - - - - microspore abaxial to - - - - - - - - stipule female - true - - - - - - - - stipule phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis concealed - - - - - - - - awn hermaphrodite - true - - - - - - - - awn phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - lemma oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - peristome back - - - - - - - - - - - - - - - - - - - - - - - - shoot-borne root drooping - - - - - - - - - - - - - - - - - - - - - - - - exocarp yellow - - - - - - - - - - - - - - - - - - - - - - - - gynoecium violet - - - - - - - - stolon down - true - - - - - - - - - - - - - - - - - - - - - - - - corm cauline to - - - - - - - - - - - - - - - - - - - - - - - - perianth cauline to - - - - - - - - - - - - - - - - - - - - - - - - stipule distal to - - - - - - - - - - - - - - - - - - - - - - - - infructescence rough - - - - - - - - - - - - - - - - - - - - - - - - leaf axil purple - - - - - - - - - - - - - - - - - - - - - - - - fruit adhesive - - - - - - - - - - - - - - - - - - - - - - - - fruit adhesivity - - - - - - - - - - - - - - - - - - - - - - - - involucre straight - - - - - - - - - - - - - - - - - - - - - - - - peristome dark red brown - - - - - - - - - - - - - - - - - - - - - - - - inflorescence hard - - - - - - - - - - - - - - - - - - - - - - - - subterranean tuber hairy - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma fleshy - - - - - - - - - - - - - - - - - - - - - - - - epidermis auriculate - - - - - - - - - - - - - - - - - - - - - - - - pedicel semicircular - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus grooved - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract curved - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract curvature - - - - - - - - - - - - - - - - - - - - - - - - nectary undulate - - - - - - - - - - - - - - - - - - - - - - - - rhizome dark grey - - - - - - - - - - - - - - - - - - - - - - - - pollen coiling - - - - - - - - - - - - - - - - - - - - - - - - tubercle brittle - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell hairy - - - - - - - - - - - - - - - - - - - - - - - - whole plant straight - - - - - - - - - - - - - - - - - - - - - - - - leaflet cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - pollen perforate - - - - - - - - - - - - - - - - - - - - - - - - pollen structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - seed trichome distributed - - - - - - - - - - - - - - - - - - - - - - - - spikelet asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - spikelet symmetry - - - - - - - - - - - - - - - - - - - - - - - - testa dark red brown - - - - - - - - - - - - - - - - - - - - - - - - upper glume abaxial to - - - - - - - - peduncle frequency - true - - - - - - - - - - - - - - - - - - - - - - - - stem right angle to - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath obtuse - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf pinnate - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf shape - - - - - - - - - - - - - - - - - - - - - - - - androecium distal to - - - - - - - - - - - - - - - - - - - - - - - - pollen ornamentation - - - - - - - - - - - - - - - - - - - - - - - - peristome tomentose - - - - - - - - - - - - - - - - - - - - - - - - raphe dark red - - - - - - - - - - - - - - - - - - - - - - - - infructescence exposed - - - - - - - - - - - - - - - - - - - - - - - - placenta swollen - - - - - - - - awn down - true - - - - - - - - - - - - - - - - - - - - - - - - leaf axil straight - - - - - - - - - - - - - - - - - - - - - - - - tepal prominent - - - - - - - - - - - - - - - - - - - - - - - - leaf apex asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - leaf apex symmetry - - - - - - - - - - - - - - - - - - - - - - - - central zone abaxial to - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal convex - - - - - - - - - - - - - - - - - - - - - - - - disk flower lanceolate - - - - - - - - - - - - - - - - - - - - - - - - involucre distributed - - - - - - - - - - - - - - - - - - - - - - - - coma grooved - - - - - - - - - - - - - - - - - - - - - - - - pedicel adhesive - - - - - - - - - - - - - - - - - - - - - - - - pedicel adhesivity - - - - - - - - - - - - - - - - - - - - - - - - lamina retrorse - - - - - - - - - - - - - - - - - - - - - - - - stigma reclinate - - - - - - - - - - - - - - - - - - - - - - - - leaf cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - anther erose - - - - - - - - - - - - - - - - - - - - - - - - bract red brown - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril mature - - - - - - - - - - - - - - - - - - - - - - - - lower glume bilobed - - - - - - - - - - - - - - - - - - - - - - - - axillary bud meristem fused with - - - - - - - - - - - - - - - - - - - - - - - - lemma warty - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril elliptic - - - - - - - - - - - - - - - - - - - - - - - - stalk conical - - - - - - - - - - - - - - - - - - - - - - - - peduncle cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - pistillode opposite - - - - - - - - - - - - - - - - - - - - - - - - hilum heart shaped - - - - - - - - - - - - - - - - - - - - - - - - fruit mixed - - - - - - - - - - - - - - - - - - - - - - - - prickle cuneate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium swollen - - - - - - - - - - - - - - - - - - - - - - - - stipule discoid - - - - - - - - - - - - - - - - - - - - - - - - receptacle concentrated - - - - - - - - - - - - - - - - - - - - - - - - receptacle concentration of - - - - - - - - - - - - - - - - - - - - - - - - central zone open - - - - - - - - - - - - - - - - - - - - - - - - central zone closure - - - - - - - - - - - - - - - - - - - - - - - - funicle linear - - - - - - - - - - - - - - - - - - - - - - - - lamina wet - - - - - - - - - - - - - - - - - - - - - - - - nectary adjacent to - - - - - - - - - - - - - - - - - - - - - - - - aril left - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus cauline to - - - - - - - - - - - - - - - - - - - - - - - - costa differentiated - - - - - - - - - - - - - - - - - - - - - - - - costa cellular potency - - - - - - - - - - - - - - - - - - - - - - - - vascular system asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - infructescence tight - - - - - - - - - - - - - - - - - - - - - - - - stalk ornamented - - - - - - - - - - - - - - - - - - - - - - - - leaf base erect - - - - - - - - - - - - - - - - - - - - - - - - endodermis dark brown - - - - - - - - - - - - - - - - - - - - - - - - pollen flat - - - - - - - - - - - - - - - - - - - - - - - - root lanceolate - - - - - - - - - - - - - - - - - - - - - - - - bud axial to - - - - - - - - - - - - - - - - - - - - - - - - petiole margin white - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath absent - - - - - - - - - - - - - - - - - - - - - - - - thallus concave - - - - - - - - - - - - - - - - - - - - - - - - plant callus orbicular - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein increased size - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein size - - - - - - - - - - - - - - - - - - - - - - - - tepal violet - - - - - - - - pedicel down - true - - - - - - - - - - - - - - - - - - - - - - - - hypanthium parallel-sided - - - - - - - - - - - - - - - - - - - - - - - - peduncle flaky - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet adaxial to - - - - - - - - - - - - - - - - - - - - - - - - stamen anterior to - - - - - - - - - - - - - - - - - - - - - - - - receptacle V-shaped - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract open - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract closure - - - - - - - - - - - - - - - - - - - - - - - - calyx mineralized - - - - - - - - - - - - - - - - - - - - - - - - leaflet ventral to - - - - - - - - - - - - - - - - - - - - - - - - heartwood transparent - - - - - - - - - - - - - - - - - - - - - - - - heartwood opacity - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle distichous - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure offset - - - - - - - - - - - - - - - - - - - - - - - - leaflet bifurcated - - - - - - - - - - - - - - - - - - - - - - - - lamina violet - - - - - - - - - - - - - - - - - - - - - - - - hypanthium zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - hypanthium symmetry - - - - - - - - - - - - - - - - - - - - - - - - lemma cuspidate - - - - - - - - - - - - - - - - - - - - - - - - pericarp dentated - - - - - - - - - - - - - - - - - - - - - - - - banner petal scalloped - - - - - - - - - - - - - - - - - - - - - - - - juice sac increased thickness - - - - - - - - - - - - - - - - - - - - - - - - hypanthium closed - - - - - - - - - - - - - - - - - - - - - - - - hypanthium closure - - - - - - - - - - - - - - - - - - - - - - - - mesophyll spongy - - - - - - - - - - - - - - - - - - - - - - - - branch translucent - - - - - - - - - - - - - - - - - - - - - - - - pistillode simple - - - - - - - - - - - - - - - - - - - - - - - - pistillode complexity - - - - - - - - - - - - - - - - - - - - - - - - leaf fasciculated - - - - - - - - - - - - - - - - - - - - - - - - leaf fasciculation - - - - - - - - - - - - - - - - - - - - - - - - mesocarp sharp - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf elliptic - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf 2-D shape - - - - - - - - - - - - - - - - - - - - - - - - petal dry - - - - - - - - - - - - - - - - - - - - - - - - petal wetness - - - - - - - - trichome male - true - - - - - - - - - - - - - - - - - - - - - - - - connective rugose - - - - - - - - - - - - - - - - - - - - - - - - sapwood dark red - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma linear - - - - - - - - - - - - - - - - - - - - - - - - inflorescence dilated - - - - - - - - - - - - - - - - - - - - - - - - epidermis circular - - - - - - - - - - - - - - - - - - - - - - - - mesophyll increased thickness - - - - - - - - - - - - - - - - - - - - - - - - mesophyll thickness - - - - - - - - - - - - - - - - - - - - - - - - bract semicircular - - - - - - - - - - - - - - - - - - - - - - - - corolla dead - - - - - - - - - - - - - - - - - - - - - - - - corolla viability - - - - - - - - - - - - - - - - - - - - - - - - rhizoid branched - - - - - - - - - - - - - - - - - - - - - - - - rhizoid branchiness - - - - - - - - - - - - - - - - - - - - - - - - petiole margin rough - - - - - - - - - - - - - - - - - - - - - - - - petiole margin texture - - - - - - - - - - - - - - - - - - - - - - - - stem filamentous - - - - - - - - - - - - - - - - - - - - - - - - epicalyx distributed - - - - - - - - - - - - - - - - - - - - - - - - epicalyx spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - shoot system scalloped - - - - - - - - - - - - - - - - - - - - - - - - plant cell furrowed - - - - - - - - - - - - - - - - - - - - - - - - calyx curled - - - - - - - - - - - - - - - - - - - - - - - - valve straight - - - - - - - - - - - - - - - - - - - - - - - - growth ring spindle-shaped - - - - - - - - - - - - - - - - - - - - - - - - vascular system dorsal to - - - - - - - - - - - - - - - - - - - - - - - - stalk juvenile - - - - - - - - - - - - - - - - - - - - - - - - bract area - - - - - - - - - - - - - - - - - - - - - - - - thorn auriculate - - - - - - - - - - - - - - - - - - - - - - - - plant cuticle triangular - - - - - - - - - - - - - - - - - - - - - - - - root ventral to - - - - - - - - tubercle down - true - - - - - - - - - - - - - - - - - - - - - - - - anther pale pink - - - - - - - - - - - - - - - - - - - - - - - - bark light green - - - - - - - - - - - - - - - - - - - - - - - - ray system circular - - - - - - - - - - - - - - - - - - - - - - - - tuberous root simple - - - - - - - - - - - - - - - - - - - - - - - - tuberous root complexity - - - - - - - - - - - - - - - - - - - - - - - - connective separated from - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis ridged - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue open - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue closure - - - - - - - - - - - - - - - - - - - - - - - - sepal split - - - - - - - - - - - - - - - - - - - - - - - - branch dilated - - - - - - - - - - - - - - - - - - - - - - - - central zone lobed - - - - - - - - - - - - - - - - - - - - - - - - flower differentiated - - - - - - - - - - - - - - - - - - - - - - - - flower cellular potency - - - - - - - - - - - - - - - - - - - - - - - - flower soft - - - - - - - - - - - - - - - - - - - - - - - - obturator angle - - - - - - - - - - - - - - - - - - - - - - - - velamen pubescent - - - - - - - - - - - - - - - - - - - - - - - - velamen maturity - - - - - - - - - - - - - - - - - - - - - - - - calyx separated from - - - - - - - - - - - - - - - - - - - - - - - - peristome sunken - - - - - - - - - - - - - - - - - - - - - - - - peristome elevation - - - - - - - - - - - - - - - - - - - - - - - - thorn fleshy - - - - - - - - - - - - - - - - - - - - - - - - thorn composition - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell curved - - - - - - - - - - - - - - - - - - - - - - - - awn split - - - - - - - - - - - - - - - - - - - - - - - - bract split - - - - - - - - - - - - - - - - - - - - - - - - receptacle attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf margin inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - branch bent - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis tomentose - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis pilosity - - - - - - - - plumule up - true - - - - - - - - - - - - - - - - - - - - - - - - plumule direction - - - - - - - - - - - - - - - - - - - - - - - - endocarp prostrate - - - - - - - - - - - - - - - - - - - - - - - - endodermis surrounding - - - - - - - - - - - - - - - - - - - - - - - - endodermis position - - - - - - - - - - - - - - - - - - - - - - - - epidermis arched - - - - - - - - - - - - - - - - - - - - - - - - stipule lobate - - - - - - - - - - - - - - - - - - - - - - - - fruit weight - - - - - - - - - - - - - - - - - - - - - - - - bract setose - - - - - - - - - - - - - - - - - - - - - - - - tepal falciform - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system glabrous - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system pilosity - - - - - - - - - - - - - - - - - - - - - - - - petiole scaly - - - - - - - - - - - - - - - - - - - - - - - - androecium immature - - - - - - - - - - - - - - - - - - - - - - - - chalaza mottled - - - - - - - - - - - - - - - - - - - - - - - - chalaza color pattern - - - - - - - - - - - - - - - - - - - - - - - - hilum star shaped - - - - - - - - - - - - - - - - - - - - - - - - placenta maturity - - - - - - - - - - - - - - - - - - - - - - - - hypanthium grooved - - - - - - - - - - - - - - - - - - - - - - - - pericarp linear - - - - - - - - - - - - - - - - - - - - - - - - flower oblique to - - - - - - - - - - - - - - - - - - - - - - - - costa spongy - - - - - - - - - - - - - - - - - - - - - - - - rhizome pedicellate - - - - - - - - - - - - - - - - - - - - - - - - glume tangled - - - - - - - - - - - - - - - - - - - - - - - - leaf axil slender - - - - - - - - - - - - - - - - - - - - - - - - leaf axil smooth - - - - - - - - - - - - - - - - - - - - - - - - shoot system osseous - - - - - - - - - - - - - - - - - - - - - - - - pedicel time - - - - - - - - - - - - - - - - - - - - - - - - testa obovate - - - - - - - - - - - - - - - - - - - - - - - - septum elliptic - - - - - - - - - - - - - - - - - - - - - - - - plant cell ventral to - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus involute - - - - - - - - - - - - - - - - - - - - - - - - spikelet granular - - - - - - - - - - - - - - - - - - - - - - - - pericarp slender - - - - - - - - - - - - - - - - - - - - - - - - costa pointed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis present - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis amount - - - - - - - - - - - - - - - - - - - - - - - - sorus lanceolate - - - - - - - - - - - - - - - - - - - - - - - - sorus sharpness - - - - - - - - - - - - - - - - - - - - - - - - pseudostem ovate - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin lateral to - - - - - - - - - - - - - - - - - - - - - - - - leaflet margin position - - - - - - - - - - - - - - - - - - - - - - - - stamen semicircular - - - - - - - - - - - - - - - - - - - - - - - - lenticel ridged - - - - - - - - - - - - - - - - - - - - - - - - leaf margin cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - leaf margin concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - vascular system basal to - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell purple - - - - - - - - - - - - - - - - - - - - - - - - gelatinous fiber cell color - - - - - - - - - - - - - - - - - - - - - - - - receptacle spiny - - - - - - - - - - - - - - - - - - - - - - - - chalaza attenuate - - - - - - - - - - - - - - - - - - - - - - - - chalaza sharpness - - - - - - - - - - - - - - - - - - - - - - - - corolla spongy - - - - - - - - - - - - - - - - - - - - - - - - lamina indurated - - - - - - - - - - - - - - - - - - - - - - - - androecium sigmoid - - - - - - - - - - - - - - - - - - - - - - - - style female fertile - - - - - - - - - - - - - - - - - - - - - - - - style female fertility - - - - - - - - - - - - - - - - - - - - - - - - androecium lateral to - - - - - - - - - - - - - - - - - - - - - - - - micropyle present - - - - - - - - - - - - - - - - - - - - - - - - micropyle amount - - - - - - - - - - - - - - - - - - - - - - - - leaf midvein brittle - - - - - - - - - - - - - - - - - - - - - - - - petiole flush - - - - - - - - - - - - - - - - - - - - - - - - mesocarp ligneous - - - - - - - - long shoot up - true - - - - - - - - - - - - - - - - - - - - - - - - long shoot direction - - - - - - - - - - - - - - - - - - - - - - - - bark kinked - - - - - - - - - - - - - - - - - - - - - - - - upper glume ventral to - - - - - - - - - - - - - - - - - - - - - - - - leaflet digitate - - - - - - - - - - - - - - - - - - - - - - - - leaf axil old - - - - - - - - - - - - - - - - - - - - - - - - leaf axil age - - - - - - - - - - - - - - - - - - - - - - - - bracteole decurrent - - - - - - - - - - - - - - - - - - - - - - - - keel exserted - - - - - - - - - - - - - - - - - - - - - - - - petiolule firm - - - - - - - - - - - - - - - - - - - - - - - - petiolule hardness - - - - - - - - - - - - - - - - - - - - - - - - stamen asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - stamen symmetry - - - - - - - - - - - - - - - - - - - - - - - - leaf stubby - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud flattened - - - - - - - - - - - - - - - - - - - - - - - - vegetative bud curvature - - - - - - - - - - - - - - - - - - - - - - - - papilla cell sunken - - - - - - - - - - - - - - - - - - - - - - - - papilla cell elevation - - - - - - - - awn continuous - true - - - - - - - - awn occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - lenticel lobed - - - - - - - - - - - - - - - - - - - - - - - - pericarp attached to - - - - - - - - - - - - - - - - - - - - - - - - pappus herbaceous - - - - - - - - - - - - - - - - - - - - - - - - pappus shedability - - - - - - - - - - - - - - - - - - - - - - - - perianth closed - - - - - - - - - - - - - - - - - - - - - - - - infructescence unbranched - - - - - - - - - - - - - - - - - - - - - - - - heartwood curved - - - - - - - - - - - - - - - - - - - - - - - - heartwood curvature - - - - - - - - - - - - - - - - - - - - - - - - cambium soft - - - - - - - - - - - - - - - - - - - - - - - - cambium hardness - - - - - - - - - - - - - - - - - - - - - - - - leaf apex glabrous - - - - - - - - - - - - - - - - - - - - - - - - leaf apex pilosity - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath convolute - - - - - - - - mesophyll up - true - - - - - - - - - - - - - - - - - - - - - - - - mesophyll direction - - - - - - - - - - - - - - - - - - - - - - - - bark symmetrical - - - - - - - - - - - - - - - - - - - - - - - - bark symmetry - - - - - - - - - - - - - - - - - - - - - - - - shoot system sterile - - - - - - - - - - - - - - - - - - - - - - - - shoot system fertility - - - - - - - - - - - - - - - - - - - - - - - - stem digitate - - - - - - - - - - - - - - - - - - - - - - - - hypanthium parallel to - - - - - - - - - - - - - - - - - - - - - - - - disk flower pointed - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis absent - - - - - - - - - - - - - - - - - - - - - - - - petal convolute - - - - - - - - - - - - - - - - - - - - - - - - cambium green - - - - - - - - - - - - - - - - - - - - - - - - petal dark grey - - - - - - - - - - - - - - - - - - - - - - - - root level with - - - - - - - - - - - - - - - - - - - - - - - - carpel edible - - - - - - - - - - - - - - - - - - - - - - - - carpel edibility - - - - - - - - carpel arrested - true - - - - - - - - carpel offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - costa conspicuous - - - - - - - - hypanthium female - true - - - - - - - - - - - - - - - - - - - - - - - - septum curved - - - - - - - - - - - - - - - - - - - - - - - - gynophore cup-shaped - - - - - - - - - - - - - - - - - - - - - - - - gynophore concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - axillary bud abaxial to - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell convex - - - - - - - - - - - - - - - - - - - - - - - - seed separated from - - - - - - - - - - - - - - - - - - - - - - - - seta fragile - - - - - - - - - - - - - - - - - - - - - - - - seta fragility - - - - - - - - seed continuous - true - - - - - - - - seed occurrence - true - - - - - - - - - - - - - - - - - - - - - - - - perianth arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - petiole aggregated - - - - - - - - - - - - - - - - - - - - - - - - style circinate - - - - - - - - - - - - - - - - - - - - - - - - bud bronze - - - - - - - - - - - - - - - - - - - - - - - - pappus soft - - - - - - - - - - - - - - - - - - - - - - - - pappus hardness - - - - - - - - - - - - - - - - - - - - - - - - epicalyx opposite - - - - - - - - - - - - - - - - - - - - - - - - bark foveate - - - - - - - - - - - - - - - - - - - - - - - - branch soft - - - - - - - - - - - - - - - - - - - - - - - - branch hardness - - - - - - - - - - - - - - - - - - - - - - - - staminode simple - - - - - - - - - - - - - - - - - - - - - - - - staminode complexity - - - - - - - - - - - - - - - - - - - - - - - - fruit fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - trichome upturned - - - - - - - - - - - - - - - - - - - - - - - - pericarp grey - - - - - - - - - - - - - - - - - - - - - - - - sorus simple - - - - - - - - - - - - - - - - - - - - - - - - sorus complexity - - - - - - - - - - - - - - - - - - - - - - - - keel dry - - - - - - - - - - - - - - - - - - - - - - - - keel wetness - - - - - - - - - - - - - - - - - - - - - - - - hydathode conical - - - - - - - - - - - - - - - - - - - - - - - - thorn angular - - - - - - - - - - - - - - - - - - - - - - - - lamina well differentiated - - - - - - - - - - - - - - - - - - - - - - - - aril consistency - - - - - - - - - - - - - - - - - - - - - - - - endosperm spiny - - - - - - - - - - - - - - - - - - - - - - - - stem semi erect - - - - - - - - - - - - - - - - - - - - - - - - stamen conspicuous - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein concave - - - - - - - - - - - - - - - - - - - - - - - - costa tapered - - - - - - - - - - - - - - - - - - - - - - - - shoot apex black - - - - - - - - - - - - - - - - - - - - - - - - infructescence basal to - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein fan-shaped - - - - - - - - - - - - - - - - - - - - - - - - ligule simple - - - - - - - - - - - - - - - - - - - - - - - - ligule complexity - - - - - - - - - - - - - - - - - - - - - - - - whole plant semi erect - - - - - - - - - - - - - - - - - - - - - - - - root aromatic - - - - - - - - - - - - - - - - - - - - - - - - root aromaticity - - - - - - - - - - - - - - - - - - - - - - - - caruncle swollen - - - - - - - - - - - - - - - - - - - - - - - - oil gland axial to - - - - - - - - - - - - - - - - - - - - - - - - plant cell abaxial to - - - - - - - - - - - - - - - - - - - - - - - - plant cell terminal - - - - - - - - - - - - - - - - - - - - - - - - costa smooth - - - - - - - - - - - - - - - - - - - - - - - - filament branched - - - - - - - - - - - - - - - - - - - - - - - - shoot internode alternate placement - - - - - - - - - - - - - - - - - - - - - - - - bud curled - - - - - - - - - - - - - - - - - - - - - - - - corolla falciform - - - - - - - - - - - - - - - - - - - - - - - - tubercle back - - - - - - - - - - - - - - - - - - - - - - - - microspore spherical - - - - - - - - - - - - - - - - - - - - - - - - arillode orange - - - - - - - - - - - - - - - - - - - - - - - - pedicel violet - - - - - - - - - - - - - - - - - - - - - - - - leaf apex lobed - - - - - - - - - - - - - - - - - - - - - - - - upper glume cuspidate - - - - - - - - - - - - - - - - - - - - - - - - cotyledon blunt - - - - - - - - - - - - - - - - - - - - - - - - style convolute - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle amorphous - - - - - - - - - - - - - - - - - - - - - - - - corolla ridged - - - - - - - - - - - - - - - - - - - - - - - - stipule width - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle tubular - - - - - - - - - - - - - - - - - - - - - - - - plant embryo bilobed - - - - - - - - - - - - - - - - - - - - - - - - tuber acuminate - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system pinnate - - - - - - - - - - - - - - - - - - - - - - - - stalk distal to - - - - - - - - - - - - - - - - - - - - - - - - lower glume swollen - - - - - - - - - - - - - - - - - - - - - - - - tuberous root elliptic - - - - - - - - - - - - - - - - - - - - - - - - seed hispid - - - - - - - - - - - - - - - - - - - - - - - - lower glume axial to - - - - - - - - gynophore male - true - - - - - - - - gynophore phenotypic sex - true - - - - - - - - - - - - - - - - - - - - - - - - peristome obtuse angle to - - - - - - - - - - - - - - - - - - - - - - - - peristome angle - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal rough - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath cleft - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath concavity - - - - - - - - - - - - - - - - - - - - - - - - involucre yellow brown - - - - - - - - - - - - - - - - - - - - - - - - stalk firm - - - - - - - - - - - - - - - - - - - - - - - - lenticel pinnate - - - - - - - - - - - - - - - - - - - - - - - - raphe size - - - - - - - - - - - - - - - - - - - - - - - - staminode branched - - - - - - - - - - - - - - - - - - - - - - - - seed trichome cuspidate - - - - - - - - - - - - - - - - - - - - - - - - ligule divergent from - - - - - - - - - - - - - - - - - - - - - - - - leaf sheath lateral to - - - - - - - - - - - - - - - - - - - - - - - - petiole digitate - - - - - - - - - - - - - - - - - - - - - - - - pericarp damage - - - - - - - - - - - - - - - - - - - - - - - - hypanthium angle - - - - - - - - - - - - - - - - - - - - - - - - petal black - - - - - - - - - - - - - - - - - - - - - - - - inflorescence back - - - - - - - - - - - - - - - - - - - - - - - - - glume exposed - - - - - - - - - - - - - - - - - - - - - - - - stipel foveate - - - - - - - - - - - - - - - - - - - - - - - - peristome asymmetrical - - - - - - - - - - - - - - - - - - - - - - - - peristome symmetry - - - - - - - - - - - - - - - - - - - - - - - - prickle abaxial to - - - - - - - - - - - - - - - - - - - - - - - - petiole split - - - - - - - - - - - - - - - - - - - - - - - - style juvenile - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma length - - - - - - - - - - - - - - - - - - - - - - - - epidermis inflated - - - - - - - - - - - - - - - - - - - - - - - - epidermis structure, cavities - - - - - - - - - - - - - - - - - - - - - - - - stolon pubescent - - - - - - - - - - - - - - - - - - - - - - - - stolon maturity - - - - - - - - - - - - - - - - - - - - - - - - tubercle mixed - - - - - - - - - - - - - - - - - - - - - - - - flower bud exserted - - - - - - - - - - - - - - - - - - - - - - - - sepal red brown - - - - - - - - - - - - - - - - - - - - - - - - primary parietal cell angular - - - - - - - - - - - - - - - - - - - - - - - - peduncle pyramidal - - - - - - - - - - - - - - - - - - - - - - - - heartwood aromatic - - - - - - - - - - - - - - - - - - - - - - - - heartwood aromaticity - - - - - - - - - - - - - - - - - - - - - - - - leaf base sparse - - - - - - - - - - - - - - - - - - - - - - - - leaf base spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - leaflet unbranched - - - - - - - - - - - - - - - - - - - - - - - - stereome bronze - - - - - - - - inflorescence frequency - - true - - - - - - - - - - - - - - - - - - - - - - - - endotesta diameter - - - - - - - - - - - - - - - - - - - - - - - - mesocarp open - - - - - - - - - - - - - - - - - - - - - - - - mesocarp closure - - - - - - - - - - - - - - - - - - - - - - - - hypanthium open - - - - - - - - - - - - - - - - - - - - - - - - vascular system decreased thickness - - - - - - - - - - - - - - - - - - - - - - - - style auriculate - - - - - - - - - - - - - - - - - - - - - - - - epidermis dorsal to - - - - - - - - - - - - - - - - - - - - - - - - fruit separated from - - - - - - - - - - - - - - - - - - - - - - - - terminal bud level with - - - - - - - - - - - - - - - - - - - - - - - - carpel convolute - - - - - - - - - - - - - - - - - - - - - - - - aril scrobiculate - - - - - - - - - - - - - - - - - - - - - - - - pericarp straight - - - - - - - - - - - - - - - - - - - - - - - - tuberous root brittle - - - - - - - - - - - - - - - - - - - - - - - - stamen whole - - - - - - - - - - - - - - - - - - - - - - - - pericarp moderate intensity - - - - - - - - - - - - - - - - - - - - - - - - pericarp intensity - - - - - - - - - - - - - - - - - - - - - - - - ligule inserted into - - - - - - - - - - - - - - - - - - - - - - - - branch notched - - - - - - - - - - - - - - - - - - - - - - - - lenticel slit-like - - - - - - - - - - - - - - - - - - - - - - - - lenticel fleshy - - - - - - - - - - - - - - - - - - - - - - - - chalaza prominent - - - - - - - - - - - - - - - - - - - - - - - - bract rough - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein decurrent - - - - - - - - - - - - - - - - - - - - - - - - funicle robust - - - - - - - - - - - - - - - - - - - - - - - - stalk soft - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus subulate - - - - - - - - - - - - - - - - - - - - - - - - gynophore width - - - - - - - - - - - - - - - - - - - - - - - - exocarp ochre - - - - - - - - - - - - - - - - - - - - - - - - perianth multicellular - - - - - - - - - - - - - - - - - - - - - - - - perianth cellularity - - - - - - - - - - - - - - - - - - - - - - - - whole plant yellow green - - - - - - - - - - - - - - - - - - - - - - - - anther adaxial to - - - - - - - - - - - - - - - - - - - - - - - - shoot system falciform - - - - - - - - - - - - - - - - - - - - - - - - endocarp discoid - - - - - - - - - - - - - - - - - - - - - - - - infructescence tomentose - - - - - - - - - - - - - - - - - - - - - - - - shoot apex dense - - - - - - - - - - - - - - - - - - - - - - - - shoot apex mass density - - - - - - - - - - - - - - - - - - - - - - - - flower fascicle warty - - - - - - - - - - - - - - - - - - - - - - - - ray system reniform - - - - - - - - - - - - - - - - - - - - - - - - ray system concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - pappus dense - - - - - - - - - - - - - - - - - - - - - - - - pappus mass density - - - - - - - - - - - - - - - - - - - - - - - - resin canal obtuse - - - - - - - - - - - - - - - - - - - - - - - - exocarp ventral to - - - - - - - - - - - - - - - - - - - - - - - - anther vertical - - - - - - - - - - - - - - - - - - - - - - - - chalaza convex - - - - - - - - - - - - - - - - - - - - - - - - chalaza concavity - - - - - - - - - - - - - - - - - - - - - - - - tepal raised - - - - - - - - - - - - - - - - - - - - - - - - tepal undulate - - - - - - - - - - - - - - - - - - - - - - - - stalk arched - - - - - - - - - - - - - - - - - - - - - - - - epidermis bronze - - - - - - - - - - - - - - - - - - - - - - - - micropyle black - - - - - - - - - - - - - - - - - - - - - - - - stele attenuate - - - - - - - - - - - - - - - - - - - - - - - - crown root sterile - - - - - - - - - - - - - - - - - - - - - - - - crown root fertility - - - - - - - - - - - - - - - - - - - - - - - - bud brittle - - - - - - - - - - - - - - - - - - - - - - - - seed coat edible - - - - - - - - - - - - - - - - - - - - - - - - seed coat edibility - - - - - - - - - - - - - - - - - - - - - - - - glume whorled - - - - - - - - - - - - - - - - - - - - - - - - plumule orange - - - - - - - - - - - - - - - - - - - - - - - - leaf margin waxy - - - - - - - - - - - - - - - - - - - - - - - - leaf margin waxiness - - - - - - - - - - - - - - - - - - - - - - - - pericarp purple - - - - - - - - - - - - - - - - - - - - - - - - bud cartilaginous - - - - - - - - - - - - - - - - - - - - - - - - hypocotyl star shaped - - - - - - - - - - - - - - - - - - - - - - - - oil gland sterile - - - - - - - - - - - - - - - - - - - - - - - - oil gland fertility - - - - - - - - - - - - - - - - - - - - - - - - leaf mottled - - - - - - - - - - - - - - - - - - - - - - - - involucre confluent with - - - - - - - - - - - - - - - - - - - - - - - - corolla vestigial - - - - - - - - - - - - - - - - - - - - - - - - epicotyl convex - - - - - - - - - - - - - - - - - - - - - - - - epicotyl concavity - - - - - - - - - - - - - - - - - - - - - - - - tubercle sharp - - - - - - - - - - - - - - - - - - - - - - - - pollen fusiform - - - - - - - - - - - - - - - - - - - - - - - - spore capsule annulus attenuate - - - - - - - - - - - - - - - - - - - - - - - - stereome spatulate - - - - - - - - - - - - - - - - - - - - - - - - axil normal - - - - - - - - - - - - - - - - - - - - - - - - axil deviation(from_normal) - - - - - - - - - - - - - - - - - - - - - - - - portion of secretory tissue multifid - - - - - - - - - - - - - - - - - - - - - - - - carpel back - - - - - - - - - - - - - - - - - - - - - - - - chalaza raised - - - - - - - - - - - - - - - - - - - - - - - - petiolule lobed - - - - - - - - - - - - - - - - - - - - - - - - oil gland angular - - - - - - - - - - - - - - - - - - - - - - - - tuber broad - - - - - - - - - - - - - - - - - - - - - - - - keel size - - - - - - - - - - - - - - - - - - - - - - - - involucre congested - - - - - - - - - - - - - - - - - - - - - - - - central spike of tassel inflorescence orbicular - - - - - - - - - - - - - - - - - - - - - - - - trichome ventral to - - - - - - - - - - - - - - - - - - - - - - - - testa rectangular - - - - - - - - - - - - - - - - - - - - - - - - tuber sterile - - - - - - - - - - - - - - - - - - - - - - - - tuber fertility - - - - - - - - - - - - - - - - - - - - - - - - spikelet fragile - - - - - - - - - - - - - - - - - - - - - - - - spikelet fragility - - - - - - - - - - - - - - - - - - - - - - - - lower glume elongated - - - - - - - - - - - - - - - - - - - - - - - - leaf apex cauline to - - - - - - - - - - - - - - - - - - - - - - - - ray system condensed - - - - - - - - - - - - - - - - - - - - - - - - palea square - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet lobed - - - - - - - - - - - - - - - - - - - - - - - - pedicel square - - - - - - - - - - - - - - - - - - - - - - - - testa inserted into - - - - - - - - - - - - - - - - - - - - - - - - perianth spatulate - - - - - - - - - - - - - - - - - - - - - - - - valve separated from - - - - - - - - - - - - - - - - - - - - - - - - juice sac acuminate - - - - - - - - - - - - - - - - - - - - - - - - bracteole cuneate - - - - - - - - - - - - - - - - - - - - - - - - costa triangular - - - - - - - - - - - - - - - - - - - - - - - - tassel sessile spikelet decumbent - - - - - - - - - - - - - - - - - - - - - - - - awn triangular - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract basal to - - - - - - - - - - - - - - - - - - - - - - - - whole plant symmetrical - - - - - - - - - - - - - - - - - - - - - - - - whole plant symmetry - - - - - - - - - - - - - - - - - - - - - - - - stigma tricuspidate - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis whole - - - - - - - - - - - - - - - - - - - - - - - - inflorescence axis wholeness - - - - - - - - - - - - - - - - - - - - - - - - oil gland slit-like - - - - - - - - - - - - - - - - - - - - - - - - plant embryo pubescent - - - - - - - - - - - - - - - - - - - - - - - - plant embryo maturity - - - - - - - - - - - - - - - - - - - - - - - - sorus terminal - - - - - - - - - - - - - - - - - - - - - - - - spikelet lobed - - - - - - - - - - - - - - - - - - - - - - - - peduncle separated from - - - - - - - - - - - - - - - - - - - - - - - - inflorescence cupulate - - - - - - - - - - - - - - - - - - - - - - - - short shoot cuneate - - - - - - - - - - - - - - - - - - - - - - - - endosperm viscid - - - - - - - - - - - - - - - - - - - - - - - - leaf maroon - - - - - - - - - - - - - - - - - - - - - - - - prickle bent - - - - - - - - - - - - - - - - - - - - - - - - stamen associated with - - - - - - - - leaf midvein premature - true - - - - - - - - leaf midvein onset quality - true - - - - - - - - - - - - - - - - - - - - - - - - androecium attenuate - - - - - - - - - - - - - - - - - - - - - - - - antiraphe white - - - - - - - - - - - - - - - - - - - - - - - - connective level with - - - - - - - - - - - - - - - - - - - - - - - - leaf rachis obovate - - - - - - - - - - - - - - - - - - - - - - - - aril sunken - - - - - - - - - - - - - - - - - - - - - - - - aril elevation - - - - - - - - - - - - - - - - - - - - - - - - aril immature - - - - - - - - - - - - - - - - - - - - - - - - parenchyma increased length - - - - - - - - - - - - - - - - - - - - - - - - parenchyma length - - - - - - - - - - - - - - - - - - - - - - - - style inverted - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma lateral to - - - - - - - - - - - - - - - - - - - - - - - - root tomentose - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium decussate - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system acuminate - - - - - - - - - - - - - - - - - - - - - - - - basal axillary shoot system sharpness - - - - - - - - - - - - - - - - - - - - - - - - carpel constricted - - - - - - - - - - - - - - - - - - - - - - - - receptacle broken - - - - - - - - - - - - - - - - - - - - - - - - leaf oriented - - - - - - - - - - - - - - - - - - - - - - - - ovary wall hard - - - - - - - - - - - - - - - - - - - - - - - - ovary wall hardness - - - - - - - - - - - - - - - - - - - - - - - - fruit rosy - - - - - - - - - - - - - - - - - - - - - - - - shoot system purple - - - - - - - - - - - - - - - - - - - - - - - - shoot system color - - - - - - - - - - - - - - - - - - - - - - - - pericarp indurated - - - - - - - - - - - - - - - - - - - - - - - - thorn juvenile - - - - - - - - - - - - - - - - - - - - - - - - pedicel ornamentation - - - - - - - - - - - - - - - - - - - - - - - - seta length - - - - - - - - - - - - - - - - - - - - - - - - pappus undulate - - - - - - - - - - - - - - - - - - - - - - - - valve concave - - - - - - - - - - - - - - - - - - - - - - - - periderm dense - - - - - - - - - - - - - - - - - - - - - - - - periderm mass density - - - - - - - - - - - - - - - - - - - - - - - - hilum vestigial - - - - - - - - - - - - - - - - - - - - - - - - petal dense - - - - - - - - - - - - - - - - - - - - - - - - petal mass density - - - - - - - - leaf axil acute - true - - - - - - - - leaf axil duration - true - - - - - - - - - - - - - - - - - - - - - - - - funicle oblique to - - - - - - - - - - - - - - - - - - - - - - - - testa dispersed - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma waxy - - - - - - - - - - - - - - - - - - - - - - - - sclerenchyma waxiness - - - - - - - - - - - - - - - - - - - - - - - - aril bent - - - - - - - - - - - - - - - - - - - - - - - - tubercle coiled - - - - - - - - - - - - - - - - - - - - - - - - tubercle coiling - - - - - - - - - - - - - - - - - - - - - - - - ligule crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - juice sac decussate - - - - - - - - - - - - - - - - - - - - - - - - juice sac spatial pattern - - - - - - - - - - - - - - - - - - - - - - - - pericarp conspicuous - - - - - - - - - - - - - - - - - - - - - - - - radicle flattened - - - - - - - - - - - - - - - - - - - - - - - - awn glandular - - - - - - - - - - - - - - - - - - - - - - - - awn morphology - - - - - - - - - - - - - - - - - - - - - - - - stamen foveate - - - - - - - - - - - - - - - - - - - - - - - - disk flower arrow-shaped - - - - - - - - - - - - - - - - - - - - - - - - palea curved - - - - - - - - - - - - - - - - - - - - - - - - apical hook columnar - - - - - - - - - - - - - - - - - - - - - - - - apical hook cuspidate - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein symmetrical - - - - - - - - - - - - - - - - - - - - - - - - tertiary leaf vein symmetry - - - - - - - - pinnate leaf up - true - - - - - - - - - - - - - - - - - - - - - - - - pinnate leaf direction - - - - - - - - - - - - - - - - - - - - - - - - leaf transformed to - - - - - - - - - - - - - - - - - - - - - - - - radicle horizontal - - - - - - - - - - - - - - - - - - - - - - - - androecium mature - - - - - - - - - - - - - - - - - - - - - - - - petal mature - - - - - - - - - - - - - - - - - - - - - - - - tuber red - - - - - - - - - - - - - - - - - - - - - - - - filament convolute - - - - - - - - - - - - - - - - - - - - - - - - infructescence pedunculate - - - - - - - - - - - - - - - - - - - - - - - - fruit undivided - - - - - - - - - - - - - - - - - - - - - - - - tubercle heart shaped - - - - - - - - - - - - - - - - - - - - - - - - persistent sepal foveate - - - - - - - - - - - - - - - - - - - - - - - - locule mixed - - - - - - - - - - - - - - - - - - - - - - - - placenta elongated - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril broken - - - - - - - - - - - - - - - - - - - - - - - - leaf tendril wholeness - - - - - - - - - - - - - - - - - - - - - - - - calyx serrated - - - - - - - - - - - - - - - - - - - - - - - - anther immobile - - - - - - - - - - - - - - - - - - - - - - - - anther mobility - - - - - - - - - - - - - - - - - - - - - - - - endocarp oriented - - - - - - - - - - - - - - - - - - - - - - - - areole bud pubescent - - - - - - - - - - - - - - - - - - - - - - - - areole bud maturity - - - - - - - - - - - - - - - - - - - - - - - - seed convolute - - - - - - - - - - - - - - - - - - - - - - - - style coating - - - - - - - - - - - - - - - - - - - - - - - - testa yellow orange - - - - - - - - - - - - - - - - - - - - - - - - pericarp blunt - - - - - - - - - - - - - - - - - - - - - - - - phloem dark brown - - - - - - - - - - - - - - - - - - - - - - - - short shoot immature - - - - - - - - bracteole arrested - true - - - - - - - - bracteole offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - petal present - - - - - - - - - - - - - - - - - - - - - - - - bud zygomorphic - - - - - - - - - - - - - - - - - - - - - - - - leaf axil condensed - - - - - - - - - - - - - - - - - - - - - - - - phyllome sinus convex - - - - - - - - - - - - - - - - - - - - - - - - resin canal pubescent - - - - - - - - - - - - - - - - - - - - - - - - resin canal maturity - - - - - - - - - - - - - - - - - - - - - - - - papilla cell distributed - - - - - - - - - - - - - - - - - - - - - - - - pedicel separated from - - - - - - - - - - - - - - - - - - - - - - - - shoot apex mature - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure axial to - - - - - - - - - - - - - - - - - - - - - - - - plumule straight - - - - - - - - - - - - - - - - - - - - - - - - plumule shape - - - - - - - - - - - - - - - - - - - - - - - - placenta soft - - - - - - - - - - - - - - - - - - - - - - - - oil gland adhesive - - - - - - - - - - - - - - - - - - - - - - - - oil gland adhesivity - - - - - - - - shoot apex down - true - - - - - - - - - - - - - - - - - - - - - - - - mesocarp subulate - - - - - - - - - - - - - - - - - - - - - - - - pericarp U-shaped - - - - - - - - - - - - - - - - - - - - - - - - pericarp concave 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - lenticel curved - - - - - - - - - - - - - - - - - - - - - - - - raphe hard - - - - - - - - - - - - - - - - - - - - - - - - raphe hardness - - - - - - - - - - - - - - - - - - - - - - - - spikelet decurrent - - - - - - - - - - - - - - - - - - - - - - - - infructescence warty - - - - - - - - - - - - - - - - - - - - - - - - simple leaf ventral to - - - - - - - - - - - - - - - - - - - - - - - - ovule primordium wrinkled - - - - - - - - - - - - - - - - - - - - - - - - keel oblique to - - - - - - - - - - - - - - - - - - - - - - - - tepal firm - - - - - - - - - - - - - - - - - - - - - - - - tepal hardness - - - - - - - - - - - - - - - - - - - - - - - - seed ornamented - - - - - - - - - - - - - - - - - - - - - - - - pedicel scaly - - - - - - - - - - - - - - - - - - - - - - - - seed dense - - - - - - - - - - - - - - - - - - - - - - - - seed mass density - - - - - - - - - - - - - - - - - - - - - - - - locule sigmoid - - - - - - - - - - - - - - - - - - - - - - - - axillary bud conical - - - - - - - - - - - - - - - - - - - - - - - - axillary bud convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - banner petal broken - - - - - - - - - - - - - - - - - - - - - - - - banner petal wholeness - - - - - - - - - - - - - - - - - - - - - - - - leaf base lanceolate - - - - - - - - root female - true - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract glabrous - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract pilosity - - - - - - - - - - - - - - - - - - - - - - - - stamen leaf-like - - - - - - - - - - - - - - - - - - - - - - - - whole plant multiple - - - - - - - - - - - - - - - - - - - - - - - - sorus glandular - - - - - - - - - - - - - - - - - - - - - - - - sorus morphology - - - - - - - - - - - - - - - - - - - - - - - - stalk retuse - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf ventral to - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge pedicellate - - - - - - - - - - - - - - - - - - - - - - - - gynoecium ridge attachment quality - - - - - - - - - - - - - - - - - - - - - - - - stipule bulbous - - - - - - - - - - - - - - - - - - - - - - - - phyllode leaf attenuate - - - - - - - - - - - - - - - - - - - - - - - - leaf mineralized - - - - - - - - - - - - - - - - - - - - - - - - shoot internode cauline to - - - - - - - - - - - - - - - - - - - - - - - - columella swollen - - - - - - - - - - - - - - - - - - - - - - - - inflorescence protruding - - - - - - - - - - - - - - - - - - - - - - - - upper glume increased length - - - - - - - - - - - - - - - - - - - - - - - - prickle red - - - - - - - - - - - - - - - - - - - - - - - - style scalloped - - - - - - - - - - - - - - - - - - - - - - - - mesophyll decurrent - - - - - - - - - - - - - - - - - - - - - - - - leaf axil mass - - - - - - - - - - - - - - - - - - - - - - - - bracteole inconspicuous - - - - - - - - - - - - - - - - - - - - - - - - bracteole crowded - - - - - - - - - - - - - - - - - - - - - - - - hypanthium digitate - - - - - - - - - - - - - - - - - - - - - - - - bark level with - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member lobed - - - - - - - - - - - - - - - - - - - - - - - - peduncle spoon-shaped - - - - - - - - - - - - - - - - - - - - - - - - endocarp present - - - - - - - - - - - - - - - - - - - - - - - - stalk multi-colored - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma subulate - - - - - - - - - - - - - - - - - - - - - - - - fertile lemma shape - - - - - - - - - - - - - - - - - - - - - - - - stalk coiled - - - - - - - - - - - - - - - - - - - - - - - - stalk coiling - - - - - - - - - - - - - - - - - - - - - - - - pericarp abaxial to - - - - - - - - - - - - - - - - - - - - - - - - stomatal complex circular - - - - - - - - - - - - - - - - - - - - - - - - seed complex - - - - - - - - - - - - - - - - - - - - - - - - raphe dark red brown - - - - - - - - - - - - - - - - - - - - - - - - fruit crescent-shaped - - - - - - - - - - - - - - - - - - - - - - - - petal time - - - - - - - - - - - - - - - - - - - - - - - - prophyll ventral to - - - - - - - - - - - - - - - - - - - - - - - - exocarp tomentose - - - - - - - - - - - - - - - - - - - - - - - - bark distributed - - - - - - - - - - - - - - - - - - - - - - - - calyx falciform - - - - - - - - - - - - - - - - - - - - - - - - protonema sub-apical initial cell orbicular - - - - - - - - - - - - - - - - - - - - - - - - axil arched - - - - - - - - - - - - - - - - - - - - - - - - stipel pinnate - - - - - - - - - - - - - - - - - - - - - - - - ovary wall white - - - - - - - - - - - - - - - - - - - - - - - - hilum hard - - - - - - - - - - - - - - - - - - - - - - - - hilum hardness - - - - - - - - - - - - - - - - - - - - - - - - simple leaf oblanceolate - - - - - - - - - - - - - - - - - - - - - - - - raphe diameter - - - - - - - - - - - - - - - - - - - - - - - - bud ornamentation - - - - - - - - - - - - - - - - - - - - - - - - heartwood dense - - - - - - - - - - - - - - - - - - - - - - - - heartwood mass density - - - - - - - - - - - - - - - - - - - - - - - - root tip adaxial to - - - - - - - - - - - - - - - - - - - - - - - - shoot system prominent - - - - - - - - - - - - - - - - - - - - - - - - flower confluent with - - - - - - - - - - - - - - - - - - - - - - - - corolla light brown - - - - - - - - - - - - - - - - - - - - - - - - pollen fleshy - - - - - - - - - - - - - - - - - - - - - - - - pollen composition - - - - - - - - - - - - - - - - - - - - - - - - growth ring age - - - - - - - - - - - - - - - - - - - - - - - - flower concealed by - - - - - - - - - - - - - - - - - - - - - - - - sapwood ivory - - - - - - - - - - - - - - - - - - - - - - - - sapwood mass density - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina lobed - - - - - - - - - - - - - - - - - - - - - - - - sapwood mottled - - - - - - - - - - - - - - - - - - - - - - - - sapwood color pattern - - - - - - - - - - - - - - - - - - - - - - - - inflorescence unicellular - - - - - - - - - - - - - - - - - - - - - - - - - peristome folded - - - - - - - - - - - - - - - - - - - - - - - - peristome surface feature shape - - - - - - - - - - - - - - - - - - - - - - - - mesocarp ornamentation - - - - - - - - - - - - - - - - - - - - - - - - perianth adaxial to - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina concealed by - - - - - - - - - - - - - - - - - - - - - - - - bracteole fusiform - - - - - - - - - - - - - - - - - - - - - - - - vascular leaf furrowed - - - - - - - - - - - - - - - - - - - - - - - - pappus terminal - - - - - - - - - - - - - - - - - - - - - - - - mesocarp flattened - - - - - - - - - - - - - - - - - - - - - - - - mesocarp curvature - - - - - - - - - - - - - - - - - - - - - - - - integument ovate - - - - - - - - - - - - - - - - - - - - - - - - integument convex 3-D shape - - - - - - - - - - - - - - - - - - - - - - - - plant callus obovate - - - - - - - - - - - - - - - - - - - - - - - - areole bud open - - - - - - - - - - - - - - - - - - - - - - - - areole bud closure - - - - - - - - - - - - - - - - - - - - - - - - calyx rectangular - - - - - - - - - - - - - - - - - - - - - - - - bulb linear - - - - - - - - - - - - - - - - - - - - - - - - peristome pink - - - - - - - - - - - - - - - - - - - - - - - - periderm scaly - - - - - - - - - - - - - - - - - - - - - - - - periderm texture - - - - - - - - - - - - - - - - - - - - - - - - mesocarp fused with - - - - - - - - - - - - - - - - - - - - - - - - xylem vessel member abaxial to - - - - - - - - - - - - - - - - - - - - - - - - filament transparent - - - - - - - - - - - - - - - - - - - - - - - - filament opacity - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina length - - - - - - - - - - - - - - - - - - - - - - - - branch areolate - - - - - - - - - - - - - - - - - - - - - - - - stem waxy - - - - - - - - - - - - - - - - - - - - - - - - stem waxiness - - - - - - - - - - - - - - - - - - - - - - - - gynophore clavate - - - - - - - - - - - - - - - - - - - - - - - - leaf vascular system split - - - - - - - - - - - - - - - - - - - - - - - - cambium grey - - - - - - - - - - - - - - - - - - - - - - - - pedicel hard - - - - - - - - - - - - - - - - - - - - - - - - connective dry - - - - - - - - - - - - - - - - - - - - - - - - connective wetness - - - - - - - - - - - - - - - - - - - - - - - - infructescence distal to - - - - - - - - - - - - - - - - - - - - - - - - bract hispidulous - - - - - - - - - - - - - - - - - - - - - - - - pedicel multi-colored - - - - - - - - - - - - - - - - - - - - - - - - pappus lilac - - - - - - - - - - - - - - - - - - - - - - - - peduncle rectangular - - - - - - - - - - - - - - - - - - - - - - - - leaf margin concentrated - - - - - - - - - - - - - - - - - - - - - - - - leaf margin concentration of - - - - - - - - - - - - - - - - - - - - - - - - pericarp displaced - - - - - - - - - - - - - - - - - - - - - - - - valve transparent - - - - - - - - - - - - - - - - - - - - - - - - valve opacity - - - - - - - - - - - - - - - - - - - - - - - - upper glume star shaped - - - - - - - - - - - - - - - - - - - - - - - - cladode brown - - - - - - - - - - - - - - - - - - - - - - - - cladode color - - - - - - - - - - - - - - - - - - - - - - - - pericarp sunken - - - - - - - - - - - - - - - - - - - - - - - - pericarp elevation - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf glistening - - - - - - - - - - - - - - - - - - - - - - - - palmate leaf reflectivity - - - - - - - - - - - - - - - - - - - - - - - - stem punctiform - - - - - - - - - - - - - - - - - - - - - - - - pedicel dark green - - - - - - - - - - - - - - - - - - - - - - - - perianth reniform - - - - - - - - - - - - - - - - - - - - - - - - lemma vestigial - - - - - - - - - - - - - - - - - - - - - - - - stem notched - - - - - - - - - - - - - - - - - - - - - - - - disk flower foveate - - - - - - - - - - - - - - - - - - - - - - - - rhizome soft - - - - - - - - - - - - - - - - - - - - - - - - heartwood broken - - - - - - - - - - - - - - - - - - - - - - - - heartwood wholeness - - - - - - - - - - - - - - - - - - - - - - - - leaf external to - - - - - - - - - - - - - - - - - - - - - - - - anther orientation - - - - - - - - - - - - - - - - - - - - - - - - - - - - inner integument phenotype - - - - - - - - - - - - - - - - - - - - - - - - inner integument curved - - - - - - - - - - - - - - - - - - - - - - - - inner integument curvature - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract broken - - - - - - - - - - - - - - - - - - - - - - - - inflorescence bract wholeness - - - - - - - - - - - - - - - - - - - - - - - - terminal bud elliptic - - - - - - - - - - - - - - - - - - - - - - - - free petal protruding - - - - - - - - - - - - - - - - - - - - - - - - bract loose - - - - - - - - - - - - - - - - - - - - - - - - prophyll leaf-like - - - - - - - - - - - - - - - - - - - - - - - - vascular bundle wrinkled - - - - - - - - - - - - - - - - - - - - - - - - endosperm separating - - - - - - - - - - - - - - - - - - - - - - - - disk flower bifurcated - - - - - - - - - - - - - - - - - - - - - - - - disk flower branchiness - - - - - - - - leaf vascular system arrested - true - - - - - - - - leaf vascular system offset quality - true - - - - - - - - - - - - - - - - - - - - - - - - epicotyl erect - - - - - - - - - - - - - - - - - - - - - - - - coma slender - - - - - - - - - - - - - - - - - - - - - - - - whole plant auriculate - - - - - - - - - - - - - - - - - - - - - - - - style dark blue - - - - - - - - - - - - - - - - - - - - - - - - pericarp coating - - - - - - - - - - - - - - - - - - - - - - - - gynoecium furrowed - - - - - - - - - - - - - - - - - - - - - - - - hypanthium exserted - - - - - - - - - - - - - - - - - - - - - - - - collective phyllome structure multifid - - - - - - - - - - - - - - - - - - - - - - - - gynoecium rough - - - - - - - - - - - - - - - - - - - - - - - - style tricuspidate - - - - - - - - - inflorescence type - - - - - - - - - spike - inflorescence type spike - - - - - - - - - raceme - inflorescence type raceme - - - - - - - - - umbel - inflorescence type umbel - - - - - - - - - panicle - inflorescence type panicle - - - - - - - - - capitulum - head - inflorescence type head - - - - - - - - - cyme - inflorescence type cyme - - - - - - - - - single-flowered - inflorescence type solitary - - - - - - - - - petal free - - - - - - - - - tepal fused - - - - - - - - - tepal free - - - - - - - - - fruit type - - - - - - - - - capsule - fruit type capsule - - - - - - - - - legume - pod - fruit type legume - - - - - - - - - follicle - fruit type follice - - - - - - - - - berry - fruit type berry - - - - - - - - - drupe - fruit type drupe - - - - - - - - - nut - fruit type nut - - - - - - - - - fruit dehiscence - - - - - - - - - fruit dehiscent - - - - - - - - - fruit indehiscent - - - - - - - - - fruit winged - - - - - - - - - whole plant lifeform - - - - - - - - - therophyte - whole plant therophytic - - - - - - - - - geophyte - whole plant geophytic - - - - - - - - - helophyte - whole plant helophytic - - - - - - - - - hydrophyte - whole plant hydrophytic - - - - - - - - - hemicryptophyte - whole plant hemicryptophytic - - - - - - - - - chamaephyte - whole plant chamaephytic - - - - - - - - - phanerophyte - whole plant phanerophytic - - - - - - - - - epiphyte - whole plant epiphytic - - - - - - - - - cryptophyte - whole plant cryptophytic - - - - - - - - - whole plant growth form - - - - - - - - - tree - whole plant arborescent - - - - - - - - - bush - shrub - whole plant frutescent - - - - - - - - - climber - liana - whole plant lianescent - - - - - - - - - grass-like - whole plant graminoid - - - - - - - - - forb - whole plant forbacious - - - - - - - - - shoot axis woodiness - - - - - - - - - shoot axis woody - woody - shoot axis ligneous - - - - - - - - - - - - - - - - - - - - - - - - - - - portion of plant tissue phenotype - - - - - - - - - tissue succulence - - - - - - - - - tissue succulent - - - - - - - - - This tree should become a separate ontology, with clear links to ENVO. - whole plant ecology - - - - - - - - - whole plant aquatic - - - - - - - - - whole plant parasitic - - - - - - - - - - - - - - - - - - - - - - - - - - - - portion of plant substance phenotype - - - - - - - - - latex phenotype - - - - - - - - - latex presence - - - - - - - - - latex present - - - - - - - - - latex absent - - - - - - - - - whole plant with stingy hairs - - - - - - - - - - - - - - - - - - - - - - - - - - - secretory tissue phenotype - - - - - - - - - - - - - - - - - - - - - - - - - - - secretory tissue amount - - - - - - - - - - - - - - - - - - - - - - - - - - - secretory tissue present - - - - - - - - - - - - - - - - - - - - - - - - - - - secretory tissue absent - - - - - - - - stipel persistence - true - - - - - - - - - stipel persistent - true - - - - - - - - - - - - - - - - - - - - - - - - glandular trichome amount - - - - - - - - - - - - - - - - - - - - - - - - with glandular hairs - glandular trichome present - - - - - - - - - - - - - - - - - - - - - - - - - without glandular hairs - glandular trichome absent - - - - - - - - - whole plant flower position - - - - - - - - - whole plant cauliflorous - - - - - - - - - whole plant ramiflorous - - - - - - - - - leaf rosulate - - - - - - - - - leaf trifoliolate - - - - - - - - - leaf digitate - leaf palmately compound - - - - - - - - - leaf base cordate - - - - - - - - - leaf vascular system palmate - - - - - - - - - leaf vascular system triplinerve - - - - - - - - - leaf vascular system parallel - - - - - - - - - - - - - - - - - - - - - - - - leaf margin entire - - - - - - - - - - - - - - - - - - - - - - - - leaf margin serrate - - - - - - - - - leaf margin crenate - - - - - - - - - inflorescence type fascicle - - - - - - - - - - - - - - - - - - - - - - - - - - - fused corolla phenotype - - - - - - - - - flower sympetalous - fused corolla present - - - - - - - - - flower choripetalous - fused corolla absent - - - - - - - - - leaf pinnately compound - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - petal amount 1 - - - - - - - - - - - - - - - - - - - - - - - 2 - - - - - - - - - - - petal amount 2 - - - - - - - - - - - - - - - - - - - - - - - 3 - - - - - - - - - - - petal amount 3 - - - - - - - - - - - - - - - - - - - - - - - 4 - - - - - - - - - - - petal amount 4 - - - - - - - - - - - - - - - - - - - - - - - 5 - - - - - - - - - - - petal amount 5 - - - - - - - - - - - - - - - - - - - - - - - 6 - - - - - - - - - - - petal amount 6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 - - - - - - - - - - - - - - - - petal amount >6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10 - - - - - - - - - - - - - - - - stamen amount <=10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10 - - - - - - - - - - - - - - - - stamen amount >10 - - - - - - - - - - - - - - - - - - - - - - - - whole plant spiny - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina glistening - leaf lamina glossy - - - - - - - - leaf base rounded - leaf base round - true - - - - - - - - - - - - - - - - - - - - - - - - leaf lamina netted - leaf lamina reticulate - - - - - - - - - leaf margin subentire - - - - - - - - - - - - - - - - - - - - - - - - bract fimbriate - - - - - - - - - - - - - - - - - - - - - - - - sepal free - - - - - - - - - - - - - - - - - - - - - - - - sepal semicircular - - - - - - - - - - - - - - - - - - - - - - - - sepal rounded - sepal round - - - - - - - - - - - - - - - - - - - - - - - - sepal fimbriate - - - - - - - - - - - - - - - - - - - - - - - - petal round - petal rounded - - - - - - - - - - - - - - - - - - - - - - - - petal entire - - - - - - - - - - - - - - - - - - - - - - - - filament widened - - - - - - - - - - - - - - - - - - - - - - - - ovary lobed - plant ovary lobed - - - - - - - - - - - - - - - - - - - - - - - - fruit apiculate - - - - - - - - - leaf foliolate - - - - - - - - - flower style length - - - - - - - - - Flower with styles of uniform length - flower homostylous - - - - - - - - - Flower with styles of different lengths - flower heterostylous - - - - - - - - - - - - - - - - - - - - - - - - - - - - pedicel ciliatedness - - - - - - - - - pedical ciliate - - - - - - - - - whole plant lifestyle - - - - - - - - - whole plant annual - - - - - - - - - whole plant biennial - - - - - - - - - whole plant perennial - - - - - - - - - - - - - - - - - - - - - - - - stem striped - - - - - - - - - - - - - - - - - - - - - - - - - - - bract margin phenotype - - - - - - - - - - - - - - - - - - - - - - - - bract margin texture - - - - - - - - - bract margin membranous - - - - - - - - - whole plant architecture - - - - - - - - - Whole plant has a well-developed stem above ground. - whole plant caulescent - - - - - - - - - Whole plant has no stem or caulis. May have very short stem concealed in the ground. - acaulescent - acauline - acaulous - whole plant acaulescent - - - - - - - - - The whole plant grows from a bulb or produces bulbs. - whole plant bulbous - - - - - - - - - litophyte - whole plant litophytic - - - - - - - - - Shoot axis is woody at the base but shrubby higher up (yearly branches are herbaceous) - shoot axis suffruticose - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/components/klab.component.alignment/biodev/pto.owl b/components/klab.component.alignment/biodev/pto.owl deleted file mode 100644 index a27f24b23a..0000000000 --- a/components/klab.component.alignment/biodev/pto.owl +++ /dev/null @@ -1,35504 +0,0 @@ - - - - plant_trait_ontology - 1.2 - cooperl - - - - - - - - - - - - - - - - - - - - - - - - - definition - - - - - - - - - - - - - - - - - - - - - - - - - - Terms_used_for_leek - - - - - - - - - Terms_used_for_squash - - - - - - - - - Terms_used_for_soybean - - - - - - - - - Term_used_for_barley - - - - - - - - - Terms_used_for_sugarcane - - - - - - - - - Terms_used_for_the_Solanaceae - - - - - - - - - Terms_used_for_wheat - - - - - - - - - Terms_used_for_maize_or_corn - - - - - - - - - - - - - - - subset_property - - - - - - - - - - - - - - - - - - - - - - - - - - has_alternative_id - - - - - - - - has_broad_synonym - - - - - - - - database_cross_reference - - - - - - - - has_exact_synonym - - - - - - - - has_narrow_synonym - - - - - - - - has_obo_format_version - - - - - - - - has_obo_namespace - - - - - - - - has_related_synonym - - - - - - - - - - - - - - in_subset - - - - - - - - - - - - - - - - - - - - shorthand - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BFO:0000050 - plant_trait_ontology - part_of - part_of - part of - - - - - - - - - - - - - - - Sensitivity to the carbon content in the growth medium. It plays an important role in the synthesis of various inorganic and organic metabolites such as carbohydrates, lipids, amino acids and peptides and plays a role in various metabolic processes. - plant_trait_ontology - CBSN - carbon deficiency - TO:0000001 - carbon sensitivity - TO:0000001 - - - - - Sensitivity to the carbon content in the growth medium. It plays an important role in the synthesis of various inorganic and organic metabolites such as carbohydrates, lipids, amino acids and peptides and plays a role in various metabolic processes. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. An epigenetic trait is a distinguishable feature or a characteristic or a quality of character or a phenotypic feature of a developing or developed individual but have arisen as a result of mechanisms regulating the expression of the genes rather than differences in the gene sequence. - plant_trait_ontology - TO:0000002 - epigenetic trait - true - TO:0000002 - - - - - OBSOLETE. An epigenetic trait is a distinguishable feature or a characteristic or a quality of character or a phenotypic feature of a developing or developed individual but have arisen as a result of mechanisms regulating the expression of the genes rather than differences in the gene sequence. - Gramene:pankaj_jaiswal - ISBN:0198506732 - - - - - - - - - - Plant sensitivity to soils with alkali conditions (pH>7). - plant_trait_ontology - AlkS - alkali sensitivity - TO:0000003 - Observed by general growth conditions in relation to standard resistant and susceptible checks. Since some soil problems are very heterogeneous in the field, several replications may be needed to obtain precise reading. Leaf is counted as discolored or dead if more than half of its area is discolored or dead. - alkali soil sensitivity - TO:0000003 - - - - - Plant sensitivity to soils with alkali conditions (pH>7). - ICIS:1202 - IRRI:SES - TO:moorel - - - - - - - - - - Trait of a plant in which the action of the cytotoxic gene used to introduce male sterility is suppressed by the application of a chemical to the plant. Reversion of the sterility allows the RMS parent to be self-fertilized, a step that overcomes the need to remove fertile sib plants prior to making the hybrid cross. - plant_trait_ontology - RMS - TO:0000004 - reversible male sterility - TO:0000004 - - - - - Trait of a plant in which the action of the cytotoxic gene used to introduce male sterility is suppressed by the application of a chemical to the plant. Reversion of the sterility allows the RMS parent to be self-fertilized, a step that overcomes the need to remove fertile sib plants prior to making the hybrid cross. - PMID:10645437 - - - - - - - - - - true - TO:0000005 - - - - - - - - - - Sensitivity to the calcium content in the growth medium. Plays an important role in cell wall synthesis and enzyme activities. - plant_trait_ontology - CALSN - calcium deficiency - TO:0000006 - calcium sensitivity - TO:0000006 - - - - - Sensitivity to the calcium content in the growth medium. Plays an important role in cell wall synthesis and enzyme activities. - Gramene:pankaj_jaiswal - - - - - - - - - - Response by the plant in terms of sensitivity to sulfur content in the growth medium. It is important for synthesis of some amino acid residues. - plant_trait_ontology - SFSN - sulfur deficiency - TO:0000007 - sulfur sensitivity - TO:0000007 - - - - - Response by the plant in terms of sensitivity to sulfur content in the growth medium. It is important for synthesis of some amino acid residues. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the potassium ion content in the growth medium. It plays an important role in controlling water by osmosis and also in the metal ion homeostasis. - plant_trait_ontology - KSN - potassium deficiency - TO:0000008 - potassium sensitivity - TO:0000008 - - - - - Sensitivity to the potassium ion content in the growth medium. It plays an important role in controlling water by osmosis and also in the metal ion homeostasis. - Gramene:pankaj_jaiswal - - - - - - - - - - Male sterility affected by photoperiod. - plant_trait_ontology - PGMS - PPDSNGMS - photoperiod sensitive genic male sterility - TO:0000009 - genic male sterility-photoperiod sensitive - TO:0000009 - - - - - Male sterility affected by photoperiod. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Sensitivity to the magnesium content in the growth medium. It is important for chlorophyll biosynthesis and metal ion homeostasis. - plant_trait_ontology - MGSN - magnesium deficiency - TO:0000010 - magnesium sensitivity - TO:0000010 - - - - - Sensitivity to the magnesium content in the growth medium. It is important for chlorophyll biosynthesis and metal ion homeostasis. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the nitrogen content in the growth medium. It is important for protein synthesis, chlorophyll etc. - plant_trait_ontology - NISN - nitrogen deficiency - TO:0000011 - nitrogen sensitivity - TO:0000011 - - - - - Sensitivity to the nitrogen content in the growth medium. It is important for protein synthesis, chlorophyll etc. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the molecular hydrogen or hydrogen ion content in the growth medium. It plays an important role in the synthesis of various inorganic and organic metabolites such as carbohydrates, lipids, amino acids and peptides and plays a role in the energy metabolism, osmolarity, etc. - plant_trait_ontology - hydrogen ion sensitivity - molecular hydrogen sensitivity - TO:0000012 - hydrogen sensitivity - TO:0000012 - - - - - Sensitivity to the molecular hydrogen or hydrogen ion content in the growth medium. It plays an important role in the synthesis of various inorganic and organic metabolites such as carbohydrates, lipids, amino acids and peptides and plays a role in the energy metabolism, osmolarity, etc. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a mycoplasma-like pathogen infection as compared to the susceptible and/or the reference plants of the same species. - plant_trait_ontology - MLO - MLORS - TO:0000013 - The factors needed for successful test are the presence of sources and vectors, inoculation at the susceptible growth stage of the test plants and favorable environmental conditions. - resistance to disease by mycoplasma-like organism - TO:0000013 - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a mycoplasma-like pathogen infection as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Average weight of the panicle from the plants or tillers in a given study. - plant_trait_ontology - PNWT - TO:0000014 - panicle weight - TO:0000014 - - - - - Average weight of the panicle from the plants or tillers in a given study. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Sensitivity to the molecular oxygen or reactive oxygen ion content in the growth medium. It plays an important role in the synthesis of various inorganic and organic metabolites such as carbohydrates, lipids, aminoacids and peptides and plays a role in the energy metabolism. - plant_trait_ontology - oxygen deficiency - TO:0000015 - oxygen sensitivity - TO:0000015 - - - - - Sensitivity to the molecular oxygen or reactive oxygen ion content in the growth medium. It plays an important role in the synthesis of various inorganic and organic metabolites such as carbohydrates, lipids, aminoacids and peptides and plays a role in the energy metabolism. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the cobalt content in the growth medium. - plant_trait_ontology - COSN - TO:0000016 - cobalt sensitivity - TO:0000016 - - - - - Sensitivity to the cobalt content in the growth medium. - Gramene:pankaj_jaiswal - - - - - - - - - - A plant trait (TO:0000387) which is a morphological quality of a plant anatomical entity (PO:0025131) or a constituent cellular component (GO:0005575) contained therein. - TO_GIT:54 - plant_trait_ontology - plant architecture trait - plant structure trait - TO:0000017 - Includes traits of plant structures (PO:0009011) such as plant cell (PO:0009002), plant organ (PO:0009008), portion of plant tissue (PO:0009007), vascular system (PO:0000034), whole plant (PO:0000003) and seed (PO:0009010), as well as those of plant anatomical spaces (PO:0025117) and portions of plant substance (PO:0025161). - plant morphology trait - TO:0000017 - - - - - A plant trait (TO:0000387) which is a morphological quality of a plant anatomical entity (PO:0025131) or a constituent cellular component (GO:0005575) contained therein. - GO:0005575 - Gramene:pankaj_jaiswal - PO:0025131 - TO:cooperl - - - - - - - - - - Sensitivity to the boron content in the growth medium. It plays an important role in cell division. - plant_trait_ontology - BOSN - boron deficiency - TO:0000018 - boron sensitivity - TO:0000018 - - - - - Sensitivity to the boron content in the growth medium. It plays an important role in cell division. - Gramene:pankaj_jaiswal - - - - - - - - - - Average height measurements of 10 seedlings, in centimeters from the base of the shoot to the tip of the tallest leaf blade. - plant_trait_ontology - SH - TO:0000019 - seedling height - TO:0000019 - - - - - Average height measurements of 10 seedlings, in centimeters from the base of the shoot to the tip of the tallest leaf blade. - IRRI:SES - - - - - - - - - - plant_trait_ontology - BSDVRS - TO:0000020 - black streak dwarf virus resistance - TO:0000020 - - - - - - - - - - Sensitivity to the copper ion content in the growth medium. Plays a role as cofactor in synthesis of some enzymes important in photosynthesis. - plant_trait_ontology - CUSN - TO:0000021 - copper sensitivity - TO:0000021 - - - - - Sensitivity to the copper ion content in the growth medium. Plays a role as cofactor in synthesis of some enzymes important in photosynthesis. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Oebalus pugnax. - plant_trait_ontology - SBUGRS - TO:0000022 - stink bug resistance - TO:0000022 - - - - - Causal agent: Oebalus pugnax. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: species of Sarocladium, Bipolaris, Alternaria, Gerlachia, Fusarium, Phoma, Curvularia, Trichoconiella and Psaudomonas etc. Symptoms: darkening of glumes of spikelets, brown color to black including rotten glumes caused by one or more pathogens. Intensity ranges from sporadic discoloration to discoloration of the whole glume. Severity of grain discoloration can be estimated by counting of grains with more than 25% of glume surface affected. - plant_trait_ontology - Gd - grain discoloration - TO:0000023 - fungal infection related grain discoloration - TO:0000023 - - - - - Causal agent: species of Sarocladium, Bipolaris, Alternaria, Gerlachia, Fusarium, Phoma, Curvularia, Trichoconiella and Psaudomonas etc. Symptoms: darkening of glumes of spikelets, brown color to black including rotten glumes caused by one or more pathogens. Intensity ranges from sporadic discoloration to discoloration of the whole glume. Severity of grain discoloration can be estimated by counting of grains with more than 25% of glume surface affected. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - - - A ligule morphology trait (TO:0002748) which is a length of a ligule measured in millimeters from the base of the leaf collar to the tip of the ligule (PO:0020105). - PATO:0000122 - plant_trait_ontology - LIGLG - LgL - TO:0000024 - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - ligule length - TO:0000024 - - - - - A ligule morphology trait (TO:0002748) which is a length of a ligule measured in millimeters from the base of the leaf collar to the tip of the ligule (PO:0020105). - IRRI:SES - PO:0020105 - POC:cooperl - - - - - - - - - - Important for nitrate fixation. - plant_trait_ontology - TO:0000025 - molybdenum sensitivity - TO:0000025 - - - - - Important for nitrate fixation. - Gramene:pankaj_jaiswal - - - - - - - - - - Abortion at tri-nucleate stage of microspore development. - plant_trait_ontology - TNUABR - TO:0000026 - An example is CMS-boro in rice. - aborted tri-nucleate stage - TO:0000026 - - - - - Abortion at tri-nucleate stage of microspore development. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Actual count of the total number of tillers after full heading, Specify if per plant, hill or area. - plant_trait_ontology - CmN - TO:0000027 - culm number - TO:0000027 - - - - - Actual count of the total number of tillers after full heading, Specify if per plant, hill or area. - IRRI:SES - - - - - - - - - - Number of unfilled florets in a grass inflorescence. - plant_trait_ontology - UNFILGRNB - unfilled florets per panicle - unfilled grain - TO:0000028 - unfilled grain number - TO:0000028 - - - - - Number of unfilled florets in a grass inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the chlorine content in the growth medium. Chloride helps regulate the correct pH (acid/alkaline) balance. This is a major electrolyte in the living cell besides sodium and potassium. It is available to the cell mainly in the form of NaCl and KCl salts. - plant_trait_ontology - CHLORSN - TO:0000029 - chlorine sensitivity - TO:0000029 - - - - - Sensitivity to the chlorine content in the growth medium. Chloride helps regulate the correct pH (acid/alkaline) balance. This is a major electrolyte in the living cell besides sodium and potassium. It is available to the cell mainly in the form of NaCl and KCl salts. - Gramene:pankaj_jaiswal - - - - - - - - - - A common sedge weed Cyperus iria (rice flatsedge), Cyperus difformis (Small flower umbrella sedge), Rice field bulrush Scirpus mucronatus, River bulrush Scirpus fluviatilis. Grows as a weed in the rice field. Can be distinguished from grass plant by the leaf shape, venation, stem cross-section and plant shape leaf shape. - plant_trait_ontology - TO:0000030 - sedge weed - TO:0000030 - - - - - A common sedge weed Cyperus iria (rice flatsedge), Cyperus difformis (Small flower umbrella sedge), Rice field bulrush Scirpus mucronatus, River bulrush Scirpus fluviatilis. Grows as a weed in the rice field. Can be distinguished from grass plant by the leaf shape, venation, stem cross-section and plant shape leaf shape. - Gramene:pankaj_jaiswal - ISBN:9712200299 - web:http//www.ipm.ucdavis.edu/PMG/r682700999.html - - - - - - - - - - plant_trait_ontology - TO:0000031 - silicon sensitivity - TO:0000031 - - - - - - - - - - plant_trait_ontology - TO:0000032 - selenium sensitivity - TO:0000032 - - - - - - - - - - plant_trait_ontology - TO:0000033 - iodine sensitivity - TO:0000033 - - - - - - - - - - Sensitivity to the chromium content in the growth medium. - plant_trait_ontology - CHRSN - TO:0000034 - chromium sensitivity - TO:0000034 - - - - - Sensitivity to the chromium content in the growth medium. - Gramene:pankaj_jaiswal - - - - - - - - - - - - plant_trait_ontology - TO:0000035 - incompatibility trait - TO:0000035 - - - - - - - - - - - - plant_trait_ontology - HYBIC - TO:0000036 - hybrid incompatibility - TO:0000036 - - - - - - - - OBSOLETE. Determines the extent of male sterility of a male sterile line. Can be determined by either pollen sterility or spikelet fertility - plant_trait_ontology - degree of male sterility of male sterile lines - male sterility measure - TO:0000037 - male sterility extent - true - TO:0000037 - - - - - OBSOLETE. Determines the extent of male sterility of a male sterile line. Can be determined by either pollen sterility or spikelet fertility - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - plant_trait_ontology - TO:0000038 - fluorine sensitivity - TO:0000038 - - - - - - - - OBSOLETE. Defines the components that determine the over all yield from a plant - plant_trait_ontology - TO:0000039 - yield component - true - TO:0000039 - - - - - OBSOLETE. Defines the components that determine the over all yield from a plant - Gramene:pankaj_jaiswal - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the measurement in centimeters from panicle base to tip. - plant_trait_ontology - PNLG - PnL - TO:0000040 - Evaluated at growth stage:8 in rice. - panicle length - TO:0000040 - - - - - A panicle morphology trait (TO:0000847) which is the measurement in centimeters from panicle base to tip. - IRRI:SES - - - - - - - - - - A grain length (TO:0000734) monitored after dehulling but before polishing. The grain should contain pericarp (PO:0009084). - PATO:0000122 - plant_trait_ontology - BRWLG - Len - TO:0000041 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - brown rice length - TO:0000041 - - - - - A grain length (TO:0000734) monitored after dehulling but before polishing. The grain should contain pericarp (PO:0009084). - ICIS:1259 - IRRI:SES - PO:0009084 - TO:moorel - - - - - - - - - - plant_trait_ontology - F1HYBIC - TO:0000042 - f1-hybrid incompatibility - TO:0000042 - - - - - - - - - - A plant axis morphology trait (TO:0000738) which is a quality of a root (PO:0025025). - TO_GIT:58 - plant_trait_ontology - TO:0000043 - root morphology trait - TO:0000043 - - - - - A plant axis morphology trait (TO:0000738) which is a quality of a root (PO:0025025). - Gramene:pankaj_jaiswal - PO:0025025 - TO:cooperl - - - - - - - - - - Trait is monitored by counting number of flowers or florets that have completed anthesis on a given day and showing exserted stigma. Trait expressed as percent stigma exsertion. - plant_trait_ontology - STIEX - stigma exsertion of male sterile lines - TO:0000044 - Scale, (%), Stigma exsertion; 1- Above 70, Well exserted; 3- 41-70, Moderately well exserted; 5- 21-40, Just exserted; 7- 11-20, Partly exserted; 9- 0-10, Enclosed. Evaluated at growth stage:6 and 7 in rice. - stigma exsertion - TO:0000044 - - - - - Trait is monitored by counting number of flowers or florets that have completed anthesis on a given day and showing exserted stigma. Trait expressed as percent stigma exsertion. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Causal agent: Balanasia oryzae-sativae (Ephelis oryzae). Symptoms: a white mycelial mat ties the panicle branches together so that they emerge as single, small, cylindrical rods. - plant_trait_ontology - UDb - TO:0000045 - udbatta disease resistance - TO:0000045 - - - - - Causal agent: Balanasia oryzae-sativae (Ephelis oryzae). Symptoms: a white mycelial mat ties the panicle branches together so that they emerge as single, small, cylindrical rods. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - plant_trait_ontology - F2GST - TO:0000046 - f2-generation sterility - TO:0000046 - - - - - - - - - - plant_trait_ontology - TO:0000047 - sporophytic incompatibility - TO:0000047 - - - - - - - - - - Causal agent: Tilletia barclayana. Symptoms: infected grains show minute black pustules or streaks bursting through the glumes. In severe infection, the rupturing glumes produce short beak-like or spur-like outgrowths. - plant_trait_ontology - KSRS - KSm - TO:0000048 - kernel smut disease resistance - TO:0000048 - - - - - Causal agent: Tilletia barclayana. Symptoms: infected grains show minute black pustules or streaks bursting through the glumes. In severe infection, the rupturing glumes produce short beak-like or spur-like outgrowths. - Gramene:pankaj_jaiswal - ICIS:1109 - - - - - - - - - - plant_trait_ontology - GPHIC - TO:0000049 - gametophytic incompatibility - TO:0000049 - - - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the extent of branching. (PO:0009049). - TO:0000263 - TO_GIT:96 - plant_trait_ontology - panicle branching - TO:0000050 - Branching usually determines the shape and compactness of the inflorescence - inflorescence branching - TO:0000050 - - - - - An inflorescence morphology trait (TO:0000373) which is the extent of branching. (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - - - A stem morphology trait (TO:0000361) which is the strength of a stem (PO:0009047). - PATO:0001230 - plant_trait_ontology - CULMSTR - Cs - STEMSTR - culm strength - TO:0000051 - Refer to strength (PATO:0001230): A quality inhering in a bearer by virtue of the bearer's power or force. - stem strength - TO:0000051 - - - - - A stem morphology trait (TO:0000361) which is the strength of a stem (PO:0009047). - Gramene:pankaj_jaiswal - ICIS:1014 - IRRI:Rice_SES(1996) - PO:0009047 - TO:moorel - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the extent of primary branching that usually sets the tone for shape and compactness of the inflorescence (PO:0009049) (rice panicle). - plant_trait_ontology - PBR - primary branching of panicle - TO:0000052 - primary branching of inflorescence - TO:0000052 - - - - - An inflorescence morphology trait (TO:0000373) which is the extent of primary branching that usually sets the tone for shape and compactness of the inflorescence (PO:0009049) (rice panicle). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - Observed under a microscope at magnification 10x10 after staining with 1% iodine potassium iodide (IKI) solution. Samples for pollen are collected from anthers and fixed in 70% alcohol. Two to three anthers are extracted from each floret and pollen grains are squeezed out into the IKI solution drop. At least three fields are used to count the sterile pollen grains; unstained withered, unstained spherical and partially stained round and fertile, from stained round pollen grains. Percentage sterility is calculated as = (unstained withered+unstained spherical+partially stained) x 100/total number of pollen grains in the field including the fertile. - plant_trait_ontology - TO:0000053 - pollen sterility - TO:0000053 - - - - - Observed under a microscope at magnification 10x10 after staining with 1% iodine potassium iodide (IKI) solution. Samples for pollen are collected from anthers and fixed in 70% alcohol. Two to three anthers are extracted from each floret and pollen grains are squeezed out into the IKI solution drop. At least three fields are used to count the sterile pollen grains; unstained withered, unstained spherical and partially stained round and fertile, from stained round pollen grains. Percentage sterility is calculated as = (unstained withered+unstained spherical+partially stained) x 100/total number of pollen grains in the field including the fertile. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Response by the plant in terms of resistivity or sensitivity to the animals infesting them. - plant_trait_ontology - pest resistance - TO:0000054 - animal damage resistance - TO:0000054 - - - - - Response by the plant in terms of resistivity or sensitivity to the animals infesting them. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf lamina morphology trait (TO:0000829) which is the extent of pubescence (presence of hairs) on a leaf lamina (PO:0020039). - PATO:0001320 - plant_trait_ontology - LBP - LFLHR - LFLPUBES - leaf blade pubescence - TO:0000055 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. - leaf lamina pubescence - TO:0000055 - - - - - A leaf lamina morphology trait (TO:0000829) which is the extent of pubescence (presence of hairs) on a leaf lamina (PO:0020039). - IRRI:SES - - - - - - - - - - A stem morphology trait (TO:0000361) which is the color of a stem (PO:0009047). - PATO:0000014 - plant_trait_ontology - TO:0000056 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - stem color - TO:0000056 - - - - - A stem morphology trait (TO:0000361) which is the color of a stem (PO:0009047). - Gramene:pankaj_jaiswal - PO:0009047 - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0000057 - grain moisture - TO:0000057 - - - - - - - - - - A chemical stress sensitivity (TO:0000482) which is the tolerance exhibited by a plant towards the applied herbicide. - PECO:0007183 - plant_trait_ontology - herbicide tolerance - weedicide tolerance - TO:0000058 - It is expected that the herbicide application must not affect the agronomic yield, if any. - herbicide sensitivity - TO:0000058 - - - - - A chemical stress sensitivity (TO:0000482) which is the tolerance exhibited by a plant towards the applied herbicide. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - - - - - - - - - Color of the stem node. - plant_trait_ontology - NDCL - TO:0000059 - node color - TO:0000059 - - - - - - true - - - - - Color of the stem node. - Gramene:pankaj_jaiswal - - - - - - - - - - Abortion at uni-nucleate stage of microspore development. - plant_trait_ontology - UNUABR - TO:0000060 - An example is CMS-WA in rice. - aborted uni-nucleate stage - TO:0000060 - - - - - Abortion at uni-nucleate stage of microspore development. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - - - plant_trait_ontology - brittle node - TO:0000061 - node shattering - TO:0000061 - - - - - - - - - - plant_trait_ontology - TO:0000062 - phenol reaction - TO:0000062 - - - - - - - - - - plant_trait_ontology - MIRP - disease mimic response - lesion mimic - TO:0000063 - mimic response - TO:0000063 - - - - - - - - - - A whole plant morphology trait (TO:0000398) which is a quality of a plant embryo (PO:0009009). - TO_GIT:140 - plant_trait_ontology - TO:0000064 - plant embryo morphology trait - TO:0000064 - - - - - A whole plant morphology trait (TO:0000398) which is a quality of a plant embryo (PO:0009009). - PO:0009009 - TO:moorel - - - - - - - - - - The color of the root. - plant_trait_ontology - RTCL - TO:0000065 - root color - TO:0000065 - - - - - The color of the root. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000066 - spot disease - true - TO:0000066 - - - - - - - - - - Temperature sensitive male sterility, affected by environment. - plant_trait_ontology - TGMS - thermo sensitive genic male sterility - TO:0000067 - genic male sterility-thermo sensitive - TO:0000067 - - - - - Temperature sensitive male sterility, affected by environment. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Measure of percentage of plants that lodged. - plant_trait_ontology - LOI - Lg - TO:0000068 - lodging incidence - TO:0000068 - - - - - Measure of percentage of plants that lodged. - ICIS:1010 - IRRI:SES - - - - - - - - - - - - plant_trait_ontology - albino leaf striping - leaf stripes - TO:0000069 - variegated leaf - TO:0000069 - - - - - - - - - - - - Variegated leaf necrosis or scorching observed in response to stresses like drought, insecticides and cold temperature as evidenced by chlorotic and/or necrotic tissue. - plant_trait_ontology - VLFNEC - ragged leaf - TO:0000070 - In maize this trait is observed for chlorotic tissue between veins or older leaves, causing holes and torn appearance. - variegated leaf necrosis - TO:0000070 - - - - - Variegated leaf necrosis or scorching observed in response to stresses like drought, insecticides and cold temperature as evidenced by chlorotic and/or necrotic tissue. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - The anthocyanin content in a plant or plant part. - plant_trait_ontology - ANTHCN - TO:0000071 - Anthocyanin is the red to purple pigments composed of soluble glycosides of anthocyanidins, present in leaves and floral tissue. Usually the pigment is produced under stress conditions. Amounts of anthocyanin produced depend on stored sugar and sunlight. The more stored sugar in the leaf and brighter the autumn days, the more intense red. Anthocyanin production also increases as phosphates move out of the leaves; the lack of phosphates in young leaves can also lead to the production of anthocyanin. - anthocyanin content - TO:0000071 - - - - - The anthocyanin content in a plant or plant part. - ISBN:198506732 - - - - - - - - - - An awn morphology trait (TO:0002718) which is the length of awn (PO:0025349). - PATO:0000122 - plant_trait_ontology - AWNLG - An - awning - TO:0000072 - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - awn length - TO:0000072 - - - - - An awn morphology trait (TO:0002718) which is the length of awn (PO:0025349). - ICIS:1063 - IRRI:SES - PO:0025349 - TO:moorel - - - - - - - - - - Sensitivity to the manganese content in the growth medium. It is important for activation of some enzymes and role in metal ion homeostasis. - plant_trait_ontology - MNSN - TO:0000073 - manganese sensitivity - TO:0000073 - - - - - Sensitivity to the manganese content in the growth medium. It is important for activation of some enzymes and role in metal ion homeostasis. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Magnaporthe grisea. - TO_GIT:69 - blast disease resistance trait - blast disease susceptibility - plant_trait_ontology - TO:0000074 - blast disease resistance - TO:0000074 - - - - - Causal agent: Magnaporthe grisea. - Gramene:pankaj_jaiswal - - - - - - - - - - Response shown by the plant in terms of sensitivity to light stress (quality and quantity of light). - plant_trait_ontology - TO:0000075 - light sensitivity - TO:0000075 - - - - - Response shown by the plant in terms of sensitivity to light stress (quality and quantity of light). - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. The instances define various distinguishing trait features associated with inflorescence and its instances. - plant_trait_ontology - TO:0000076 - inflorescence feature - true - TO:0000076 - - - - - OBSOLETE. The instances define various distinguishing trait features associated with inflorescence and its instances. - Gramene:pankaj_jaiswal - - - - - - - - - - A collective plant organ structure morphology trait (TO:0000842) which is a quality of a shoot system (PO:0009006). - jaiswalp - TO_GIT:57 - plant_trait_ontology - TO:0000077 - Does not include traits of fruit, parts of fruit and adventitious roots which are borne on the shoot. - shoot system morphology trait - TO:0000077 - - - - - A collective plant organ structure morphology trait (TO:0000842) which is a quality of a shoot system (PO:0009006). - Gramene:pankaj_jaiswal - PO:0009006 - TO:cooperl - - - - - - - - - - - - - - - - - - The average dry weight of the root determined in a study. - plant_trait_ontology - RTDWT - rdw - rdw/t - root dry weight per tiller - total root dry weight - TO:0000078 - root dry weight - TO:0000078 - - - - - The average dry weight of the root determined in a study. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - - - A bract morphology trait (TO:0000815) which is a quality of a flower bract (PO:0009034). - cooperl - TO_GIT:390 - plant_trait_ontology - TO:0000079 - flower bract morphology trait - TO:0000079 - - - - - A bract morphology trait (TO:0000815) which is a quality of a flower bract (PO:0009034). - Gramene:pankaj_jaiswal - PO:0009034 - TO:cooperl - - - - - - - - - - Sensitivity response shown by the plant grown in either the excess or deficient amount of the micronutrient in the growth medium (soil). - plant_trait_ontology - micronutrient deficiency - TO:0000080 - micronutrient sensitivity - TO:0000080 - - - - - Sensitivity response shown by the plant grown in either the excess or deficient amount of the micronutrient in the growth medium (soil). - Gramene:pankaj_jaiswal - - - - - - - - - - The average dry weight of the root, (for the root part 30cm below the soil surface) determined per tiller in a green house study. - DRTDWT - deep root dry weight per tiller - deep root weight - drw - drw/t - plant_trait_ontology - TO:0000081 - deep root dry weight - TO:0000081 - - - - - The average dry weight of the root, (for the root part 30cm below the soil surface) determined per tiller in a green house study. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Recilia dorsalis (Motschulsky). - plant_trait_ontology - ZLFHRS - TO:0000082 - zigzag leafhopper resistance - TO:0000082 - - - - - Causal agent: Recilia dorsalis (Motschulsky). - Gramene:pankaj_jaiswal - - - - - - - - - - Its the total number of roots penetrating the hard pans of the soil or the number of roots penetrated through the wax-petrolatum layer measured at 50 days after sowing (DAS). - plant_trait_ontology - PENRTNB - npr - number of penetrating roots - TO:0000083 - penetrated root number - TO:0000083 - - - - - Its the total number of roots penetrating the hard pans of the soil or the number of roots penetrated through the wax-petrolatum layer measured at 50 days after sowing (DAS). - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - - - A root system morphology trait (TO:0000985) which is the number of roots (PO:0009005) in a root system (PO:0025025). - plant_trait_ontology - RTNB - tnr - TO:0000084 - root number - TO:0000084 - - - - - A root system morphology trait (TO:0000985) which is the number of roots (PO:0009005) in a root system (PO:0025025). - Gramene:jcl - Gramene:pankaj_jaiswal - PATO:0001555 - TO:cooperl - TO_GIT:357 - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the rolling of a leaf preceding the leaf drying stage. - plant_trait_ontology - LFRL - wilting - TO:0000085 - Leaf rolling is a feature observed in response to stresses like drought, water and temperature. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf rolling - TO:0000085 - - - - - A leaf morphology trait (TO:0000748) which is the rolling of a leaf preceding the leaf drying stage. - Gramene:jcl - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Causal agent: Sarocladium oryzae. Symptoms: oblong or irregular brown to grey lesions on the leaf sheath near panicle; sometimes coalescing to prevent emergence of panicle. - plant_trait_ontology - SHROTRS - ShR - TO:0000086 - sheath rot disease resistance - TO:0000086 - - - - - Causal agent: Sarocladium oryzae. Symptoms: oblong or irregular brown to grey lesions on the leaf sheath near panicle; sometimes coalescing to prevent emergence of panicle. - Gramene:pankaj_jaiswal - ICIS:1114 - IRRI:SES - - - - - - - - - - - - The aroma of the cooked/uncooked grains. - scent - plant_trait_ontology - AROMA - Sct - odour - TO:0000087 - It is often associated with the accumulation of the aromatic compound 2-acetyl-1-pyrroline. - aroma - TO:0000087 - - - - - The aroma of the cooked/uncooked grains. - Gramene:pankaj_jaiswal - ICIS:1252 - IRRI:SES - - - - - - - - - - Causal agent: rice yellow mottle virus (RYMV). Symptoms: stunting, reduced tillering, mottling and yellowish streaking of the leaves, delayed flowering or incomplete emergence of the panicle; in extreme cases, death of plants. - plant_trait_ontology - RYMV - RYMVRS - TO:0000088 - rice yellow mottle virus resistance - TO:0000088 - - - - - Causal agent: rice yellow mottle virus (RYMV). Symptoms: stunting, reduced tillering, mottling and yellowish streaking of the leaves, delayed flowering or incomplete emergence of the panicle; in extreme cases, death of plants. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the mode of branching, angle of primary branches, and spikelet density. - plant_trait_ontology - PNTYPE - Panicle attitude of branches - PnT - TO:0000089 - panicle type - TO:0000089 - - - - - A panicle morphology trait (TO:0000847) which is the mode of branching, angle of primary branches, and spikelet density. - ICIS:1066 - IRRI:SES - TO:moorel - - - - - - - - - - At 50 days after sowing (DAS), the thickness of roots penetrated through the wax-petrolatum layer is measured. Penetrated root thickness is measured on penetrated roots immediately below the wax layer. - plant_trait_ontology - PENRTTH - prt - TO:0000090 - penetrated root thickness - TO:0000090 - - - - - At 50 days after sowing (DAS), the thickness of roots penetrated through the wax-petrolatum layer is measured. Penetrated root thickness is measured on penetrated roots immediately below the wax layer. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000091 - leafhopper - true - TO:0000091 - - - - - - - - - - The ratio of deep root length (for the roots found 30cm below the soil surface) and the shoot length determined in a study. - plant_trait_ontology - DRTSHRO - deep root length to shoot length ratio - deep root ratio - deep root/shoot ratio - dr/s - TO:0000092 - deep root to shoot ratio - TO:0000092 - - - - - The ratio of deep root length (for the roots found 30cm below the soil surface) and the shoot length determined in a study. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - RTPF - rpf - TO:0000093 - root pulling force - TO:0000093 - - - - - - - - - - The thickness of the root present 2cm below the soil surface. - plant_trait_ontology - BARTTH - brt - TO:0000094 - basal root thickness - TO:0000094 - - - - - The thickness of the root present 2cm below the soil surface. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the osmoticum in the growth medium. - plant_trait_ontology - OSRPSN - oa - TO:0000095 - osmotic response sensitivity - TO:0000095 - - - - - Sensitivity to the osmoticum in the growth medium. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - Regeneration of the main stem and tillers after harvesting in a grass plant. - plant_trait_ontology - RAAB - TO:0000096 - ratooning ability - TO:0000096 - - - - - Regeneration of the main stem and tillers after harvesting in a grass plant. - Gramene:jn - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - Amount of amylopectin present in the plant or plant part. - plant_trait_ontology - AMYPCTCN - TO:0000097 - It is a polysaccharide present in starch. Amylopectin is a polymer of alpha(1,4)-linked glucose units, as is amylose (see amylose). Unlike amylose, amylopectin contains branches of 2430 glucose units connected to the main chain by an alpha(1,6) linkage. - amylopectin content - TO:0000097 - - - - - Amount of amylopectin present in the plant or plant part. - ISBN:198506732 - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is an opaque and hard endosperm (PO:0009089) with low or no amylose content (TO:0000196). - TO_GIT:133 - plant_trait_ontology - opaque endosperm - waxy endosperm - TO:0000098 - If the endosperm has high amount of amylose it is called as non-glutinous endosperm. This is also an endosperm quality trait (TO:0000587). - glutinous endosperm - TO:0000098 - - - - - An endosperm morphology trait (TO:0000575) which is an opaque and hard endosperm (PO:0009089) with low or no amylose content (TO:0000196). - Gramene:pankaj_jaiswal - PO:0009089 - TO:moorel - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is a wrinkled and glassy endosperm (PO:0009089) when dry. - TO_GIT:133 - plant_trait_ontology - sugary kernel - TO:0000099 - This is also an endosperm quality trait (TO:0000587). - sugary endosperm - TO:0000099 - - - - - An endosperm morphology trait (TO:0000575) which is a wrinkled and glassy endosperm (PO:0009089) when dry. - Gramene:pankaj_jaiswal - PO:0009089 - TO:moorel - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is a shrunken and opaque endosperm (PO:0009089). - PATO:0000585 - TO_GIT:133 - plant_trait_ontology - collapsed kernel - transluscent kernel - TO:0000100 - This is also an endosperm quality trait (TO:0000587). Refers to shrunken PATO:0000585 A decreased size quality inhering in a bearer by virtue of the bearer's exhibiting reduced size of a cell or constituent group of cells (for example, organ). - shrunken endosperm - TO:0000100 - - - - - An endosperm morphology trait (TO:0000575) which is a shrunken and opaque endosperm (PO:0009089). - Gramene:pankaj_jaiswal - PO:0009089 - TO:moorel - - - - - - - - - - A common sedge weed Monochoria vaginalis (monochoria), California arrowhead Sagittaria montevidensis, Gregg arrowhead Sagittaria longiloba, Ducksalad Heteranthera limosa, Echinodorus berteroi and E. cordifolius (Burhead), Ammannia spp (Redstems), Bacopa spp. (Water hyssops), Alisma plantago-aquatica (Common water plantain). Grows as a weed in the rice field. Can be distinguished from rice plant by the leaf shape, venation, stem cross-section and plant shape leaf shape. - plant_trait_ontology - TO:0000101 - broad-leaved weed - TO:0000101 - - - - - A common sedge weed Monochoria vaginalis (monochoria), California arrowhead Sagittaria montevidensis, Gregg arrowhead Sagittaria longiloba, Ducksalad Heteranthera limosa, Echinodorus berteroi and E. cordifolius (Burhead), Ammannia spp (Redstems), Bacopa spp. (Water hyssops), Alisma plantago-aquatica (Common water plantain). Grows as a weed in the rice field. Can be distinguished from rice plant by the leaf shape, venation, stem cross-section and plant shape leaf shape. - Gramene:pankaj_jaiswal - ISBN:9712200299 - web:http//www.ipm.ucdavis.edu/PMG/r682700999.html - - - - - - - - - - Sensitivity to the phosphorus content in the growth medium. It is important in various biochemical pathways and storage of energy. - plant_trait_ontology - PDef - PHOSN - phosphorus deficiency - TO:0000102 - phosphorus sensitivity - TO:0000102 - - - - - Sensitivity to the phosphorus content in the growth medium. It is important in various biochemical pathways and storage of energy. - ICIS:1213 - IRRI:SES - - - - - - - - - - The sensitivity response shown by the plant growing in a stagnant water for a long period of time (not unlike deepwater presence during flash flooding of the fields). - plant_trait_ontology - DWSTR - deep water stress - TO:0000103 - deepwater stress - TO:0000103 - - - - - The sensitivity response shown by the plant growing in a stagnant water for a long period of time (not unlike deepwater presence during flash flooding of the fields). - Gramene:pankaj_jaiswal - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is an opaque and soft endosperm (PO:0009089). - TO_GIT:133 - plant_trait_ontology - TO:0000104 - This is also an endosperm quality trait (TO:0000587). - floury endosperm - TO:0000104 - - - - - An endosperm morphology trait (TO:0000575) which is an opaque and soft endosperm (PO:0009089). - Gramene:pankaj_jaiswal - PO:0009089 - TO:moorel - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is a glassy and tarnished endosperm (PO:0009089) with low amylose content (TO:0000196). - TO_GIT:133 - plant_trait_ontology - glassy endosperm - TO:0000105 - This is also an endosperm quality trait (TO:0000587). - dull endosperm - TO:0000105 - - - - - An endosperm morphology trait (TO:0000575) which is a glassy and tarnished endosperm (PO:0009089) with low amylose content (TO:0000196). - Gramene:pankaj_jaiswal - PO:0009089 - TO:moorel - - - - - - - - - - Represents the different types of male sterility found in plants. - plant_trait_ontology - MS - TO:0000106 - male sterility type - TO:0000106 - - - - - Represents the different types of male sterility found in plants. - Gramene:pankaj_jaiswal - - - - - - - - - - Assay for the amount of 13kDa seed storage protein present in the endosperm. - plant_trait_ontology - TO:0000107 - endosperm storage protein-1 content - TO:0000107 - - - - - Assay for the amount of 13kDa seed storage protein present in the endosperm. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A leaf growth and development trait (TO:0000655) which is the extent of leaf shattering based on the development of a leaf abscission zone (PO:0006501). - GO:0060866 - plant_trait_ontology - LFSH - leaf abscission - TO:0000108 - The leaf shattering trait is the occurence of the biological process of leaf abscission (GO:0060866): the controlled shedding of a leaf. - leaf shattering - TO:0000108 - - - - - A leaf growth and development trait (TO:0000655) which is the extent of leaf shattering based on the development of a leaf abscission zone (PO:0006501). - Gramene:pankaj_jaiswal - PO:0006501 - POC:cooperl - - - - - leaf abscission - GO:0060866 - SOY:0001342 - - - - - - - - - - Assay for amount of 57kDa seed storage protein present in the endosperm. - plant_trait_ontology - TO:0000109 - endosperm storage protein-2 content - TO:0000109 - - - - - Assay for amount of 57kDa seed storage protein present in the endosperm. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Abortion of microspore development at uni-nucleate stage. - plant_trait_ontology - CMS-WA - WACMS - TO:0000110 - wild abortive CMS - TO:0000110 - - - - - Abortion of microspore development at uni-nucleate stage. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - The sterility induced by transgenes expressing cytotoxic component. - plant_trait_ontology - TO:0000111 - genetically engineered male sterility - TO:0000111 - - - - - The sterility induced by transgenes expressing cytotoxic component. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a pathogen infection as compared to the susceptible and/or the reference plants of the same species. - disease control - disease resistance trait - disease tolerance - disease susceptibility - plant_trait_ontology - TO:0000112 - It represents the damage done by the diease and/or the pathogen to the plant. The damage is a direct measure of resistance to the particular pathogen variety causing the disease. - disease resistance - TO:0000112 - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a pathogen infection as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An embryo shape trait (TO:0000193) that is a large sized plant embryo (PO:0009009). - plant_trait_ontology - TO:0000113 - giant embryo - TO:0000113 - - - - - - true - - - - - An embryo shape trait (TO:0000193) that is a large sized plant embryo (PO:0009009). - Gramene:pankaj_jaiswal - PO:0009009 - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0000114 - flooding related trait - TO:0000114 - - - - - - - - - - Determined as the dry mass of roots per unit soil volume at a given soil section. - plant_trait_ontology - RTMD - rmd - TO:0000115 - root mass density - TO:0000115 - - - - - Determined as the dry mass of roots per unit soil volume at a given soil section. - Gramene:pankaj_jaiswal - - - - - - - - - - Root mass density 0-15 cm was calculated as the dry mass of roots per unit soil volume at 0-15 cm soil section. - plant_trait_ontology - rmd 0-15 - TO:0000116 - root mass density 0-15 - TO:0000116 - - - - - Root mass density 0-15 cm was calculated as the dry mass of roots per unit soil volume at 0-15 cm soil section. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Since there is no genetic resistance to rats, the damage can be quantified as it does not represent resistance. - plant_trait_ontology - RD - TO:0000117 - rat damage resistance - TO:0000117 - - - - - Since there is no genetic resistance to rats, the damage can be quantified as it does not represent resistance. - Gramene:pankaj_jaiswal - ICIS:1170 - IRRI:SES - - - - - - - - - - Root mass density 15-30 cm was calculated as the dry mass of roots per unit soil volume at 15-30 cm soil section. - plant_trait_ontology - rmd 15-30 - TO:0000118 - root mass density 15-30 - TO:0000118 - - - - - Root mass density 15-30 cm was calculated as the dry mass of roots per unit soil volume at 15-30 cm soil section. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Root mass density 30-45 cm was calculated as the dry mass of roots per unit soil volume at 30-45 cm soil section. - plant_trait_ontology - rmd 30-45 - TO:0000119 - root mass density 30-45 - TO:0000119 - - - - - Root mass density 30-45 cm was calculated as the dry mass of roots per unit soil volume at 30-45 cm soil section. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Calculated as percent of root mass density over the total root mass density. Both parameters scored at the same depth. - plant_trait_ontology - PCENTRTMD - prmd - TO:0000120 - percent root mass density - TO:0000120 - - - - - Calculated as percent of root mass density over the total root mass density. Both parameters scored at the same depth. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: the stem nematode Dictylenchus angustus. Symptoms: leaf mottling or chlorotic discoloration in a splash pattern at base of young leaves in stem elongation or mid-tillering stage; brown stains may develop on leaves and sheaths which later intensify to a dark brown color. A characteristic distortion consisting of twisting and withering of young leaves. A distortion of panicle which either remains enclosed with in a swollen sheath, partially emerge but are twisted and with unfilled grains or emerge completely but with unfilled grains and resembling a whitehead. - plant_trait_ontology - U - TO:0000121 - Evaluated at growth stage:6-7 in rice. - ufra damage - TO:0000121 - - - - - Causal agent: the stem nematode Dictylenchus angustus. Symptoms: leaf mottling or chlorotic discoloration in a splash pattern at base of young leaves in stem elongation or mid-tillering stage; brown stains may develop on leaves and sheaths which later intensify to a dark brown color. A characteristic distortion consisting of twisting and withering of young leaves. A distortion of panicle which either remains enclosed with in a swollen sheath, partially emerge but are twisted and with unfilled grains or emerge completely but with unfilled grains and resembling a whitehead. - Gramene:pankaj_jaiswal - ICIS:1116 - IRRI:SES - - - - - - - - - - - - Calculated as percent of root mass density in this section over the total root mass density. Both scored at the 0-15cm depth. - plant_trait_ontology - prmd 0-15 - TO:0000122 - percent root mass density 0-15 - TO:0000122 - - - - - Calculated as percent of root mass density in this section over the total root mass density. Both scored at the 0-15cm depth. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - - - Calculated as percent of root mass density in this section over the total root mass density. Both scored at the 15-30cm depth. - plant_trait_ontology - prmd 15-30 - TO:0000123 - percent root mass density 15-30 - TO:0000123 - - - - - Calculated as percent of root mass density in this section over the total root mass density. Both scored at the 15-30cm depth. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - - - A flag leaf morphology trait (TO:0000832) which is an angle of the flag leaf (PO:0020103) measured near the collar, as the angle of attachment between the flag leaf blade and the main inflorescence axis in grass plants. - plant_trait_ontology - FLFAG - TO:0000124 - flag leaf angle - TO:0000124 - - - - - A flag leaf morphology trait (TO:0000832) which is an angle of the flag leaf (PO:0020103) measured near the collar, as the angle of attachment between the flag leaf blade and the main inflorescence axis in grass plants. - ICIS:1065 - IRRI:SES - PO:0020103 - TO:cooperl - TO:moorel - - - - - - - - - - - - Calculated as percent of root mass density in this section over the total root mass density. Both scored at the 30-45cm depth. - plant_trait_ontology - prmd 30-45 - TO:0000125 - percent root mass density 30-45 - TO:0000125 - - - - - Calculated as percent of root mass density in this section over the total root mass density. Both scored at the 30-45cm depth. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: rice grassy stunt virus 2 (RGSV2). Symptoms: RGSV2 causes severe stunting, excessive tillering, yellow to orange and narrow leaves with small rusty spots. - plant_trait_ontology - RGSV2 - RGSV2RS - TO:0000126 - rice grassy stunt virus-2 resistance - TO:0000126 - - - - - Causal agent: rice grassy stunt virus 2 (RGSV2). Symptoms: RGSV2 causes severe stunting, excessive tillering, yellow to orange and narrow leaves with small rusty spots. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: rice grassy stunt virus 1 (RGSV1). Symptoms: RGSV1 causes severe stunting, excessive tillering, pale green to yellow and narrow leaves with small rusty spots. - plant_trait_ontology - RGSV1 - RGSV1RS - TO:0000127 - rice grassy stunt virus-1 resistance - TO:0000127 - - - - - Causal agent: rice grassy stunt virus 1 (RGSV1). Symptoms: RGSV1 causes severe stunting, excessive tillering, pale green to yellow and narrow leaves with small rusty spots. - Gramene:pankaj_jaiswal - - - - - - - - - - Proportion of usable (economically significant) biomass over total (biological) biomass, expressed as a percentage. - plant_trait_ontology - HI - HVID - TO:0000128 - harvest index - TO:0000128 - - - - - Proportion of usable (economically significant) biomass over total (biological) biomass, expressed as a percentage. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Ustilaginoidea virens. Symptoms: infected grains are transformed into yellow-greenish or greenish-black velvety-looking spore balls. - plant_trait_ontology - FSRS - FSm - TO:0000129 - false smut disease resistance - TO:0000129 - - - - - Causal agent: Ustilaginoidea virens. Symptoms: infected grains are transformed into yellow-greenish or greenish-black velvety-looking spore balls. - Gramene:pankaj_jaiswal - ICIS:1106 - IRRI:SES - - - - - - - - - - Sensitivity to the far red light content in the growth environment. - plant_trait_ontology - FRLTSN - Pfr light sensitivity - TO:0000130 - far red light sensitivity - TO:0000130 - - - - - Sensitivity to the far red light content in the growth environment. - Gramene:pankaj_jaiswal - - - - - - - - - - Water potential of a leaf. - plant_trait_ontology - LFWP - lwp - TO:0000131 - leaf water potential - TO:0000131 - - - - - Water potential of a leaf. - Gramene:pankaj_jaiswal - - - - - - - - - - Actual measurements in millimeters from the outer diameter of the stem at the basal portion of the main stem. - plant_trait_ontology - BAINDIA - DBI - TO:0000132 - basal internode diameter - TO:0000132 - - - - - Actual measurements in millimeters from the outer diameter of the stem at the basal portion of the main stem. - IRRI:SES - - - - - - - - - - A subjective assessment of the plant in similar site and growing conditions (often unfavorable conditions) based upon a specific facet of growth. - jaiswalp - plant_trait_ontology - TO:0000133 - stature or vigor trait - TO:0000133 - - - - - A subjective assessment of the plant in similar site and growing conditions (often unfavorable conditions) based upon a specific facet of growth. - Gramene:pankaj_jaiswal - - - - - - - - - - Is an indirect measure of gelatinization temperature. Observed by placing six milled-rice kernels in 10ml 1.7% KOH in a shallow container and arrange them so that they do not touch. Let them stand for 23hrs at 30degC temperature and score for spreading. Measure for Alkali digestion is inversely proportional to the gelatinization temperature, e.g. if alkali digestion is low, the gelatinization temperature is high. - plant_trait_ontology - ALKDIG - AlkD - TO:0000134 - alkali digestion - TO:0000134 - - - - - Is an indirect measure of gelatinization temperature. Observed by placing six milled-rice kernels in 10ml 1.7% KOH in a shallow container and arrange them so that they do not touch. Let them stand for 23hrs at 30degC temperature and score for spreading. Measure for Alkali digestion is inversely proportional to the gelatinization temperature, e.g. if alkali digestion is low, the gelatinization temperature is high. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - A leaf size (TO:0002637) trait which is a length of a leaf (PO:0025034). - MaizeGDB_QTL:61715 - PATO:0000122 - TO_GIT:247 - plant_trait_ontology - LFLG - LL - lfln - TO:0000135 - Actual measurements, in centimeters of the leaf. Refers to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. In maize, this is measured in centimeters. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf length - TO:0000135 - - - - - A leaf size (TO:0002637) trait which is a length of a leaf (PO:0025034). - IRRI:SES - PO:0025034 - TO:cooperl - TO:moorel - - - - - lfln - MaizeGDB_QTL:61715 - - - - - - - - - - Leaf relative water content is determined at midday (12.00 noon). - plant_trait_ontology - RELWCN - leaf relative water content - rec - TO:0000136 - relative water content - TO:0000136 - - - - - Leaf relative water content is determined at midday (12.00 noon). - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Number of days required for the inflorescence (head/cob/panicle) to emerge from the flag leaf of a plant or a group of plants in a study. - plant_trait_ontology - DTHD - heading date - TO:0000137 - Often determined when the 50% length of the inflorescence has emerged as compared to its full length. Number of days is calculated from either the day of sowing of seeds or from the day of transplanting the seedlings (in case of rice) depending on type of study. - days to heading - TO:0000137 - - - - - Number of days required for the inflorescence (head/cob/panicle) to emerge from the flag leaf of a plant or a group of plants in a study. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - Total protein content of the brown rice. - plant_trait_ontology - BRWRPROT - BrP - Prt - brown rice protein content - TO:0000138 - brown rice protein - TO:0000138 - - - - - Total protein content of the brown rice. - ICIS:1260 - IRRI:SES - - - - - - - - - - true - TO:0000139 - - - - - - - - - - - - - - - - - - Color of the apiculus. - plant_trait_ontology - APICL - ApC - TO:0000140 - apiculus color - TO:0000140 - - - - - Color of the apiculus. - IRRI:SES - - - - - - - - - - - - - - - - - - An awn morphology trait (TO:0002718) which is a color of the awn (PO:0025349). - PATO:0000014 - plant_trait_ontology - AWNCL - TO:0000141 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - awn color - TO:0000141 - - - - - An awn morphology trait (TO:0002718) which is a color of the awn (PO:0025349). - IRRI:SES - PO:0025349 - TO:moorel - - - - - - - - - - An inflorescence branching (TO:0000050) trait which is the extent of secondary branching that usually determines the shape and compactness of the inflorescence (PO:0009049) (such as in rice panicle). - plant_trait_ontology - PnBr - SBR - panicle secondary branching - secondary branching of panicle - TO:0000142 - secondary branching of inflorescence - TO:0000142 - - - - - An inflorescence branching (TO:0000050) trait which is the extent of secondary branching that usually determines the shape and compactness of the inflorescence (PO:0009049) (such as in rice panicle). - Gramene:pankaj_jaiswal - IRRI:SES - PO:0009049 - TO:moorel - - - - - - - - - - Relative yield was calculated as the ratio of biomass in stress to that of control. - plant_trait_ontology - RB - RELBIOM - relative biomass yield - TO:0000143 - relative biomass - TO:0000143 - - - - - Relative yield was calculated as the ratio of biomass in stress to that of control. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - A grain yield trait (TO:0000396) which is the proportion of kernels remaining after milling to remove the bran. - plant_trait_ontology - MR - milled rice ratio - TO:0000144 - Milling is part of rice processing where the caryopsis hull (PO:0006000) and bran is removed. Milled rice consists of the broken kernels as well as the head rice (whole or 3/4 of original length or longer) milled kernels. - milled rice yield - TO:0000144 - - - - - A grain yield trait (TO:0000396) which is the proportion of kernels remaining after milling to remove the bran. - RiceCAP http://www.uark.edu/ua/ricecap/glossary_ricecaplist.htm#M - - - - - - - - - - - - - - - - - - Measurement of length of the internode. - plant_trait_ontology - INLG - TO:0000145 - internode length - TO:0000145 - - - - - Measurement of length of the internode. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - - A seed morphology trait (TO:0000184) which is the length of a seed (PO:0009010). - TO:0000395 - PATO:0000122 - TO_GIT:195 - plant_trait_ontology - SDLG - TO:0000146 - Seed length is a component of seed size (TO:0000391) and has a component of seed quality (TO:0000162). Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - seed length - TO:0000146 - - - - - A seed morphology trait (TO:0000184) which is the length of a seed (PO:0009010). - Gramene:pankaj_jaiswal - ICIS:1051 - IRRI:SES - PO:0009010 - TO:moorel - - - - - - - - - - Causal agent: rice hoja blanca virus (RHBV). Symptoms: cream colored to yellow spots, elongating and coalescing to form longitudinal yellowish green to pale green striations. Streaks may coalesce to cover the whole leaf. Brown and sterile glumes with typical "parrot beak" shape of deformation. - plant_trait_ontology - HBVRS - RHBV - TO:0000147 - rice hoja blanca disease resistance - TO:0000147 - - - - - Causal agent: rice hoja blanca virus (RHBV). Symptoms: cream colored to yellow spots, elongating and coalescing to form longitudinal yellowish green to pale green striations. Streaks may coalesce to cover the whole leaf. Brown and sterile glumes with typical "parrot beak" shape of deformation. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a viral pathogen infection as compared to the susceptible and/or the reference plants of the same species. - plant_trait_ontology - TO:0000148 - It represents the damage done by the diease and/or the viral pathogen to the plant. The damage is a direct measure of resistance to the particular viral strain causing the diease. - viral disease resistance - TO:0000148 - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a viral pathogen infection as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - - - - - - - - A seed morphology trait (TO:0000184) which is the width of a seed (PO:0009010). - PATO:0000921 - TO_GIT:194 - plant_trait_ontology - SDWD - plump seed - TO:0000149 - Seed width is measured in millimeters as the distance across the seed and is a component of the seed size (TO:0000391) and can be a component of seed quality (TO:0000162). Refers to (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - seed width - TO:0000149 - - - - - A seed morphology trait (TO:0000184) which is the width of a seed (PO:0009010). - Gramene:pankaj_jaiswal - ICIS:1052 - IRRI:SES - PO:0009010 - TO:moorel - - - - - - - - - - true - TO:0000150 - - - - - - - - - - Causal agent: Pelopidas mathias (Fabricius) and Parnara guttata. - plant_trait_ontology - SKIPRS - TO:0000151 - rice skipper resistance - TO:0000151 - - - - - Causal agent: Pelopidas mathias (Fabricius) and Parnara guttata. - Gramene:pankaj_jaiswal - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the average number of panicles per plant in a study. - plant_trait_ontology - NOP - NP - PN - PNNB - TP - number of effective tiller per plant - number of panicle - panicle number per plant - panicle number per tiller - seed setting tillers per plant - spike number - TO:0000152 - panicle number - TO:0000152 - - - - - A panicle morphology trait (TO:0000847) which is the average number of panicles per plant in a study. - Gramene:pankaj_jaiswal - ICIS:1057 - TO:moorel - - - - - - - - - - Relative yield is calculated as a ratio of yield in stress to that of control. - plant_trait_ontology - RELYLD - RY - TO:0000153 - relative yield - TO:0000153 - - - - - Relative yield is calculated as a ratio of yield in stress to that of control. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Stenchaetothrips biformis. monitored at growth stage 2-3. - plant_trait_ontology - THRIPSRS - TO:0000154 - thrips resistance - TO:0000154 - - - - - Causal agent: Stenchaetothrips biformis. monitored at growth stage 2-3. - Gramene:pankaj_jaiswal - ICIS:1166 - IRRI:SES - - - - - - - - - - The index is calculated as, DSI = (1-Yds/Yns), where Yds and Yns are mean yields of a given genotype in drought susceptible (DS) and non-susceptible (NS) environments respectively. - plant_trait_ontology - DRSID - DRSSID - DSI - drought score - drought sensitivity index - TO:0000155 - drought susceptibility index - TO:0000155 - - - - - The index is calculated as, DSI = (1-Yds/Yns), where Yds and Yns are mean yields of a given genotype in drought susceptible (DS) and non-susceptible (NS) environments respectively. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - At 50 days after sowing (DAS), the dry weight of roots penetrated through the wax-petrolatum layer is measured. - plant_trait_ontology - PENRTDWT - PRDW - TO:0000156 - penetrated root dry weight - TO:0000156 - - - - - At 50 days after sowing (DAS), the dry weight of roots penetrated through the wax-petrolatum layer is measured. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Assay determines temperature of the leaf canopy. - plant_trait_ontology - CANTMP - TO:0000157 - canopy temperature - TO:0000157 - - - - - Assay determines temperature of the leaf canopy. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the red light content in the growth environment. - plant_trait_ontology - Pr light sensitivity - RLTSN - TO:0000158 - red light sensitivity - TO:0000158 - - - - - Sensitivity to the red light content in the growth environment. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity response observed in an environment illuminated with blue light. - plant_trait_ontology - BLTSN - TO:0000159 - blue light sensitivity - TO:0000159 - - - - - Sensitivity response observed in an environment illuminated with blue light. - Gramene:pankaj_jaiswal - - - - - - - - - - Response shown by the plant in the presence of UV light stress. - plant_trait_ontology - UV resistance - UVRS - Ultraviolet light sensitivity - Ultraviolet resistance - TO:0000160 - UV light sensitivity - TO:0000160 - - - - - Response shown by the plant in the presence of UV light stress. - Gramene:pankaj_jaiswal - - - - - - - - - - Response shown by the plant in terms of sensitivity to one or more types of radiation stress (quality and quantity of light). - plant_trait_ontology - RADSN - radiation sensitivity - response to radiation - TO:0000161 - radiation response trait - TO:0000161 - - - - - Response shown by the plant in terms of sensitivity to one or more types of radiation stress (quality and quantity of light). - Gramene:pankaj_jaiswal - - - - - - - - - - A fruit quality trait (TO:0002728) that is the commercial and /or economical value of the grain (i.e. fruit (PO:0009001)), or its overall improvement. - TO:0000588 - TO_GIT:209 - plant_trait_ontology - TO:0000162 - grain quality trait - TO:0000162 - - - - - A fruit quality trait (TO:0002728) that is the commercial and /or economical value of the grain (i.e. fruit (PO:0009001)), or its overall improvement. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Response with respect to application of auxin. - plant_trait_ontology - AUXSN - IAA response - IAA sensitivity - indole-3-acetic acid response - indole-3-acetic acid sensitivity - TO:0000163 - The most important auxin produced by plants is indole-3-acetic acid (IAA). - auxin sensitivity - TO:0000163 - - - - - Response with respect to application of auxin. - Gramene:pankaj_jaiswal - - - - - - - - - - Response by the plant in terms of resistivity or sensitivity to either the biotic or the abiotic types of stress. - plant_trait_ontology - crop damage - stress resistance - stress susceptibility - stress tolerance - TO:0000164 - stress trait - TO:0000164 - - - - - Response by the plant in terms of resistivity or sensitivity to either the biotic or the abiotic types of stress. - Gramene:pankaj_jaiswal - - - - - - - - - - A panicle morphology (rice) trait (TO:0000847) monitored by observing the extent of coverage of panicle by the flag leaf sheath. - plant_trait_ontology - Exs - PNEX - TO:0000165 - panicle exsertion - TO:0000165 - - - - - A panicle morphology (rice) trait (TO:0000847) monitored by observing the extent of coverage of panicle by the flag leaf sheath. - Gramene:pankaj_jaiswal - ICIS:1004 - IRRI:SES - - - - - - - - - - Sensitivity to the gibberellic acid content in the growth medium or on external application. - plant_trait_ontology - GA3 response - GASN - GB response - Gibberellin response - gibberellic acid response - TO:0000166 - gibberellic acid sensitivity - TO:0000166 - - - - - Sensitivity to the gibberellic acid content in the growth medium or on external application. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to the cytokinin content in the growth medium or external application. - plant_trait_ontology - CKSN - TO:0000167 - cytokinin sensitivity - TO:0000167 - - - - - Sensitivity to the cytokinin content in the growth medium or external application. - Gramene:pankaj_jaiswal - - - - - - - - - - Response by the plant in terms of resistivity or sensitivity to abiotic stress. - plant_trait_ontology - abiotic stress tolerance - TO:0000168 - abiotic stress trait - TO:0000168 - - - - - Response by the plant in terms of resistivity or sensitivity to abiotic stress. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Abortion of microspore development at trinucleate stage. - plant_trait_ontology - BOROCMS - CMS-boro - TO:0000169 - chinsurah boro CMS - TO:0000169 - - - - - Abortion of microspore development at trinucleate stage. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Some plants can elongate and grow in areas annually flooded to varying depths. The scale is based on the performance of check varieties. Specify water depth under which the data was recorded. - plant_trait_ontology - Elon - TO:0000170 - elongation ability - TO:0000170 - - - - - Some plants can elongate and grow in areas annually flooded to varying depths. The scale is based on the performance of check varieties. Specify water depth under which the data was recorded. - ICIS:1209 - IRRI:SES - - - - - - - - OBSOLETE. A stature and vigor trait (TO:0000133) which is the height of a whole plant (PO:0000003) or another plant structure (PO:0009011). - TO_GIT:226 - plant_trait_ontology - TO:0000171 - Refers to: height (PATO_0000119): A 1-D extent quality inhering in a bearer by virtue of the bearer's vertical dimension of extension. - height trait - true - TO:0000171 - - - - - OBSOLETE. A stature and vigor trait (TO:0000133) which is the height of a whole plant (PO:0000003) or another plant structure (PO:0009011). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Sensitivity to the jasmonic acid content in the growth medium or on external application. - plant_trait_ontology - JASN - TO:0000172 - jasmonic acid sensitivity - TO:0000172 - - - - - Sensitivity to the jasmonic acid content in the growth medium or on external application. - Gramene:pankaj_jaiswal - - - - - - - - - - Sensitivity to ethylene (C2H2) content in the growth medium or the environment. - plant_trait_ontology - ETHSN - ethylene response - TO:0000173 - ethylene sensitivity - TO:0000173 - - - - - Sensitivity to ethylene (C2H2) content in the growth medium or the environment. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000174 - maturity trait - true - TO:0000174 - - - - - - - - - - Causal agent: Xanthomonas oryzae pv. oryzae. - plant_trait_ontology - BB - BBRS - leaf blight - TO:0000175 - Symptoms: lesions usually start near the leaf tips or leaf margins or both, and extend down the outer edge(s). Young lesions are pale to grayish green, later turning yellow to grey (dead) with time. In very susceptible varieties, lesions may extend to the entire leaf length into the leaf sheath. Young leaves should not be inoculated for assay. Old or leaves with symptoms of nutrient deficiency or other diseases should also be avoided for inoculation. - rice bacterial blight disease resistance - TO:0000175 - - - - - Causal agent: Xanthomonas oryzae pv. oryzae. - Gramene:pankaj_jaiswal - ICIS:1101 - IRRI:SES - - - - - - - - - - A nutrient sensitivity (TO:0000480) response shown by the plant grown in either an excess or deficient amount of the macronutrient in the growth medium. - plant_trait_ontology - macronutrient deficiency - TO:0000176 - macronutrient sensitivity - TO:0000176 - - - - - A nutrient sensitivity (TO:0000480) response shown by the plant grown in either an excess or deficient amount of the macronutrient in the growth medium. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the tolerance exhibited by a plant or a group of plants (population) towards the applied herbicide 2,4-dichlorophenoxyacetic acid (2,4 D). - PECO:0007180 - plant_trait_ontology - 2,4 D sensitivity - 24DSN - TO:0000177 - It is expected that the herbicide application must not affect the agronomic yield, if any. - 2,4-dichlorophenoxyacetic acid sensitivity - TO:0000177 - - - - - An assay to determine the tolerance exhibited by a plant or a group of plants (population) towards the applied herbicide 2,4-dichlorophenoxyacetic acid (2,4 D). - Gramene:pankaj_jaiswal - - - - - - - - - - Plant sensitivity to soils with acidic conditions (pH<7). - plant_trait_ontology - TO:0000178 - acid soil sensitivity - TO:0000178 - - - - - Plant sensitivity to soils with acidic conditions (pH<7). - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Response by the plant in terms of resistivity or sensitivity to biotic stress. - plant_trait_ontology - TO:0000179 - biotic stress trait - TO:0000179 - - - - - Response by the plant in terms of resistivity or sensitivity to biotic stress. - Gramene:pankaj_jaiswal - - - - - - - - - - A spikelet morphology trait (TO:0000657) which is the fertility to a spikelet (PO:0009051). - plant_trait_ontology - SPKFRT - SpFert - percent sterility - seed setting - TO:0000180 - Determined by percent of spikelets with grains identified by pressing the spikelets with the fingers and counting those that have no grains or the percent seed setting. -Refer to fertility (PATO:0000274): A reproductive quality inhering in a bearer by virtue of the bearer's initiating, sustaining, or supporting reproduction. - spikelet fertility - TO:0000180 - - - - - A spikelet morphology trait (TO:0000657) which is the fertility to a spikelet (PO:0009051). - Gramene:pankaj_jaiswal - ICIS:1001 - ICIS:1059 - ICIS:1062 - IRRI:SES - PO:0009051 - TO:moorel - - - - - - - - - - A seed morphology trait (TO:0000184) which is the weight of a seed (PO:0009010). - TO_GIT:196 - plant_trait_ontology - TO:0000181 - Seed weight is a component of seed yield (TO:0000905) and seed quality (TO:0000162). Refer to weight (PATO:0000128): A physical quality inhering in a bearer that has mass near a gravitational body. - seed weight - TO:0000181 - - - - - A seed morphology trait (TO:0000184) which is the weight of a seed (PO:0009010). - Gramene:pankaj_jaiswal - ICIS:1058 - PO:0009010 - TO:moorel - - - - - - - - - - The tolerance exhibited by a plant or a group of plants (population) towards the applied insecticide. - plant_trait_ontology - insecticide tolerance - TO:0000182 - insecticide sensitivity - TO:0000182 - - - - - The tolerance exhibited by a plant or a group of plants (population) towards the applied insecticide. - TO:moorel - - - - - - - - - - The trait instances, which either cannot be assigned any of the eight top level parent terms such as biochemical, anatomy, development quality, stature/vigor, sterility/fertility, stress and the yield or are yet to be assigned a parent. - plant_trait_ontology - TO:0000183 - other miscellaneous trait - TO:0000183 - - - - - The trait instances, which either cannot be assigned any of the eight top level parent terms such as biochemical, anatomy, development quality, stature/vigor, sterility/fertility, stress and the yield or are yet to be assigned a parent. - Gramene:pankaj_jaiswal - - - - - - - - - - A multi-tissue plant structure morphology trait (TO:0000836) which is a seed (PO:0009010). - plant_trait_ontology - TO:0000184 - seed morphology trait - TO:0000184 - - - - - A multi-tissue plant structure morphology trait (TO:0000836) which is a seed (PO:0009010). - Gramene:pankaj_jaiswal - PO:0009010 - TO:moorel - - - - - - - - - - - - Color of the stigma in a blossoming flower. - plant_trait_ontology - STICL - SgC - TO:0000185 - stigma color - TO:0000185 - - - - - Color of the stigma in a blossoming flower. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000186 - environmental stress related trait - true - TO:0000186 - - - - - - - - - - An anther morphology trait (TO:1000022) which is the color (PATO:0000014) of an anther (PO:0009066) - TO_GIT:385 - plant_trait_ontology - ANTCL - TO:0000187 - anther color - TO:0000187 - - - - - - true - - - - - An anther morphology trait (TO:1000022) which is the color (PATO:0000014) of an anther (PO:0009066) - TO:austin_meier - - - - - - - - - - Drought sensitivity is highly interactive with crop phenology, plant growth prior to stress, and timing, duration, and intensity of drought stress. For many soils, it takes at least 2 rainless weeks to cause marked differences in drought sensitivity during the vegetative stage and at least 7 rainless days during the reproductive stage to cause severe drought injury. Leaf rolling precedes leaf drying during drought. Repeated ratings are recommended through progress of the drought. - plant_trait_ontology - DRS - DRSN - drought susceptibility - TO:0000188 - drought sensitivity - TO:0000188 - - - - - Drought sensitivity is highly interactive with crop phenology, plant growth prior to stress, and timing, duration, and intensity of drought stress. For many soils, it takes at least 2 rainless weeks to cause marked differences in drought sensitivity during the vegetative stage and at least 7 rainless days during the reproductive stage to cause severe drought injury. Leaf rolling precedes leaf drying during drought. Repeated ratings are recommended through progress of the drought. - IRRI:SES - - - - - - - - - - - - An embryo morphology trait (TO:0000064) which is the absence of embryo in the developing seed. - plant_trait_ontology - germless - TO:0000189 - embryoless - TO:0000189 - - - - - An embryo morphology trait (TO:0000064) which is the absence of embryo in the developing seed. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - - - - - - - - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the color of the seed coat (PO:0009088). - PATO:0000014 - plant_trait_ontology - SCC - SDCCL - bran color - TO:0000190 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - seed coat color - TO:0000190 - - - - - A seed coat morphology trait (TO:0000838) which is the color of the seed coat (PO:0009088). - Gramene:pankaj_jaiswal - IRRI:SES - PO:0009088 - TO:moorel - - - - - - - - - - Causal agent: Dicladispa armigera. - plant_trait_ontology - HISPRS - TO:0000191 - rice hispa resistance - TO:0000191 - - - - - Causal agent: Dicladispa armigera. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Cnaphalocrocis medinalis. - plant_trait_ontology - LFRRS - TO:0000192 - leaf-roller resistance - TO:0000192 - - - - - Causal agent: Cnaphalocrocis medinalis. - Gramene:pankaj_jaiswal - - - - - - - - - - An embryo morphology trait (TO:0000064) which is the shape of a plant embryo (PO:0009009). - PATO:0000052 - plant_trait_ontology - TO:0000193 - Refer to shape PATO:0000052:A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - embryo shape - TO:0000193 - - - - - An embryo morphology trait (TO:0000064) which is the shape of a plant embryo (PO:0009009). - PO:0009009 - TO:moorel - - - - - - - - - - An embryo shape trait (TO:0000193) which is a globular plant embryo (PO:0009009). - PATO:0001499 - plant_trait_ontology - TO:0000194 - Refer to globular (PATO:0001499): A spheroid quality inhering in a bearer by virtue of the bearer's resembling a ball (a sphere whose equatorial diameter is equal to the polar diameter). - globular embryo - TO:0000194 - - - - - An embryo shape trait (TO:0000193) which is a globular plant embryo (PO:0009009). - PO:0009009 - TO:moorel - - - - - - - - - - - - - - - - A plant embryo morphology trait (TO:0000064) which is an embryo of the germinating seed not producing a shoot. - plant_trait_ontology - SHMIN - TO:0000195 - shootless embryo - TO:0000195 - - - - - A plant embryo morphology trait (TO:0000064) which is an embryo of the germinating seed not producing a shoot. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - - - - - - - - - - - - - - - - - A polysaccharide content trait (TO:0006007) which is the amount of amylose (CHEBI:28102) in a plant structure (PO:0009011). - CHEBI:28102 - plant_trait_ontology - AMYCN - Amy - TO:0000196 - Amylose is a helical polymer made of α-D-glucose units, bound to each other through α(1→4) glycosidic bonds. This polysaccharide is one of the two components of starch, making up approximately 20-30% of the structure. The other component is amylopectin, which makes up 70–80% of the structure. (REF: Wikipedia) - amylose content - TO:0000196 - - - - - A polysaccharide content trait (TO:0006007) which is the amount of amylose (CHEBI:28102) in a plant structure (PO:0009011). - ICIS:1251 - IRRI:SES - ISBN:198506732 - - - - - - - - - - - - A ligule morphology trait (TO:0002748) which is the color of a ligule (PO:0020105). - PATO:0000014 - plant_trait_ontology - LIGCL - LgC - TO:0000197 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - ligule color - TO:0000197 - - - - - A ligule morphology trait (TO:0002748) which is the color of a ligule (PO:0020105). - Gramene:pankaj_jaiswal - IRRI:SES - PO:0020105 - POC:cooperl - - - - - - - - - - - - Absence of roots in the seedling or plant. - plant_trait_ontology - RTMIN - TO:0000198 - rootless - TO:0000198 - - - - - Absence of roots in the seedling or plant. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - GMS - TO:0000199 - genic male sterility - TO:0000199 - - - - - - - - - - A measure of brittleness of the stem of a grass plant. - plant_trait_ontology - TO:0000200 - brittle culm - TO:0000200 - - - - - A measure of brittleness of the stem of a grass plant. - Gramene:pankaj_jaiswal - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the variation in color of the panicle inflorescence. - PATO:0000014 - plant_trait_ontology - PNCL - TO:0000201 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - panicle color - TO:0000201 - - - - - A panicle morphology trait (TO:0000847) which is the variation in color of the panicle inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Ratio of germinated to non-germinated seeds. - plant_trait_ontology - GERMRO - TO:0000202 - germination ratio - TO:0000202 - - - - - Ratio of germinated to non-germinated seeds. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Xanthomonas oryzae pv. oryzicola. - plant_trait_ontology - BLS - BLSRS - TO:0000203 - Symptoms: linear lesions with small bacterial exudates evident. This scale may also be used for leaf smut caused by Entyloma oryzae. - rice bacterial leaf streak disease resistance - TO:0000203 - - - - - Causal agent: Xanthomonas oryzae pv. oryzicola. - Gramene:pankaj_jaiswal - ICIS:1102 - IRRI:SES - - - - - - - - - - Causal agent: Xanthomonas oryzae pv. oryzae. - plant_trait_ontology - SDLBTRS - kresek - leaf blight - TO:0000204 - Symptoms: lesions usually start near the leaf tips or leaf margins or both, and extend down the outer edge(s). Young lesions are pale to grayish green, later turning yellow to grey (dead) with time. In very susceptible varieties, lesions may extend to the entire leaf length into the leaf sheath. Kresek or seedling blight causes wilting and death of plant. - rice seedling blight disease resistance - TO:0000204 - - - - - Causal agent: Xanthomonas oryzae pv. oryzae. - Gramene:pankaj_jaiswal - ICIS:1117 - IRRI:SES - - - - - - - - - - Causal agent: Sagotella furcifera. Symptoms: partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting and death of plants. Infested areas in the field may be patchy. (similar to the symptoms of whitebacked planthopper). - plant_trait_ontology - WBPH - WBPHRS - TO:0000205 - white-backed planthopper resistance - TO:0000205 - - - - - Causal agent: Sagotella furcifera. Symptoms: partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting and death of plants. Infested areas in the field may be patchy. (similar to the symptoms of whitebacked planthopper). - Gramene:pankaj_jaiswal - ICIS:1167 - IRRI:SES - - - - - - - - - - - - - - A leaf attitude (TO:0000206) which is the angle of a leaf (PO:0025034) measured against the stem. - jaiswalp - PATO:0000602 - plant_trait_ontology - LBP - LFAG - TO:0000206 - In rice, it is measured against the culm on the leaf below the flag leaf. Refer to angle value (PATO:0000602). - leaf angle - TO:0000206 - - - - - A leaf attitude (TO:0000206) which is the angle of a leaf (PO:0025034) measured against the stem. - IRRI:SES - POC:ccoperl - - - - - - - - - - A whole plant morphology trait (TO:0000398) which is the height of a whole plant (PO:0000003). - PATO:0000119 - TO_GIT:367 - TO_GIT:84 - plant_trait_ontology - Ht - PTHT - shoot height - TO:0000207 - Comment: Refers to: height (PATO_0000119): A 1-D extent quality inhering in a bearer by virtue of the bearer's vertical dimension of extension. - plant height - TO:0000207 - - - - - - true - - - - - A whole plant morphology trait (TO:0000398) which is the height of a whole plant (PO:0000003). - ICIS:1006 - IRRI:SES - PO:0000003 - TO:cooperl - - - - - - - - - - - - - - - - A spikelet floret morphology trait (TO:0000274) which is the number of lemma (PO:0009037) in a spikelet floret (PO:0009082). - plant_trait_ontology - TO:0000208 - lemma number - TO:0000208 - - - - - A spikelet floret morphology trait (TO:0000274) which is the number of lemma (PO:0009037) in a spikelet floret (PO:0009082). - Gramene:pankaj_jaiswal - PATO:0001555 - PO:0009037 - PO:0009082 - TO:cooperl - TO:moorel - - - - - - - - - - - - - - - - A spikelet floret morphology trait (TO:0000274) which is the number of palea (PO:0009038) in a spikelet floret (PO:0009082). - plant_trait_ontology - PALNB - TO:0000209 - palea number - TO:0000209 - - - - - A spikelet floret morphology trait (TO:0000274) which is the number of palea (PO:0009038) in a spikelet floret (PO:0009082). - Gramene:pankaj_jaiswal - PATO:0001555 - PO:0009038 - PO:0009082 - TO:cooperl - TO:moorel - - - - - - - - - - - - - - - - - - - A stamen morphology trait (TO:0000215) which is the number of anthers (PO:0009066) in a stamen (PO:0009029). - TO_GIT:387 - plant_trait_ontology - ANTNB - TO:0000210 - anther number - TO:0000210 - - - - - A stamen morphology trait (TO:0000215) which is the number of anthers (PO:0009066) in a stamen (PO:0009029). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - - - Scored by gel consistency type in mm. - plant_trait_ontology - GELCON - GelC - TO:0000211 - gel consistency - TO:0000211 - - - - - Scored by gel consistency type in mm. - ICIS:1255 - IRRI:SES - - - - - - - - - - Causal agent: Nephotettix spp. (Nephotettix virescens and Nephotettix cincticeps). It is the major vector for transmitting the tungro virus disease. Symptoms: Partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting to death of plants. Infected areas in the field may be patchy. - plant_trait_ontology - GLFHRS - GLH - TO:0000212 - green leafhopper resistance - TO:0000212 - - - - - Causal agent: Nephotettix spp. (Nephotettix virescens and Nephotettix cincticeps). It is the major vector for transmitting the tungro virus disease. Symptoms: Partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting to death of plants. Infected areas in the field may be patchy. - Gramene:pankaj_jaiswal - ICIS:1156 - IRRI:SES - - - - - - - - - - Causal agent: rice grassy stunt virus 1 (RGSV1) and rice grassy stunt virus 2 (RGSV2). Symptoms: RGSV1 causes severe stunting, excessive tillering, pale green to yellow and narrow leaves with small rusty spots. RGSV2 causes severe stunting, excessive tillering, yellow to orange and narrow leaves with small rusty spots. - plant_trait_ontology - RGSVRS - TO:0000213 - rice grassy stunt 1 and 2 virus resistance - TO:0000213 - - - - - Causal agent: rice grassy stunt virus 1 (RGSV1) and rice grassy stunt virus 2 (RGSV2). Symptoms: RGSV1 causes severe stunting, excessive tillering, pale green to yellow and narrow leaves with small rusty spots. RGSV2 causes severe stunting, excessive tillering, yellow to orange and narrow leaves with small rusty spots. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - An anther morphology trait (TO:1000022) which is the shape (PATO:0000052) of an anther (PO:0009066). - TO_GIT:385 - plant_trait_ontology - ANTSHP - TO:0000214 - Refers to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - anther shape - TO:0000214 - - - - - - true - - - - - An anther morphology trait (TO:1000022) which is the shape (PATO:0000052) of an anther (PO:0009066). - TO:ethan_johnson - - - - - - - - - - - - A microsporophyll morphology trait (TO:0000868) which is a quality of a stamen (PO:0009029). - plant_trait_ontology - stamen related trait - TO:0000215 - stamen morphology trait - TO:0000215 - - - - - A microsporophyll morphology trait (TO:0000868) which is a quality of a stamen (PO:0009029). - Gramene:pankaj_jaiswal - PO:0009029 - TO:moorel - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000216 - grassy stunt virus disease - true - TO:0000216 - - - - - - - - - - Male sterility affected by both temperature and photoperiod. - plant_trait_ontology - TPGMS - thermo-photoperiod sensitive genic male sterility - TO:0000217 - genic male sterility-thermo-photoperiod sensitive - TO:0000217 - - - - - Male sterility affected by both temperature and photoperiod. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Observations are made on staining behavior and number of nuclei in most of the pollen. - plant_trait_ontology - abortion pattern - abortion pattern of male sterile lines - TO:0000218 - pollen abortion type - TO:0000218 - - - - - Observations are made on staining behavior and number of nuclei in most of the pollen. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - OBSOLETE. - plant_trait_ontology - culm morphology - TO:0000219 - stem morphology - true - TO:0000219 - - - - - - - - - - Causal agent: Leptocorisa oratorius. Monitored at growth stage 7-9, resistance is a measure of damaged grains per panicle. - plant_trait_ontology - BUGRS - RB - TO:0000220 - rice bug resistance - TO:0000220 - - - - - Causal agent: Leptocorisa oratorius. Monitored at growth stage 7-9, resistance is a measure of damaged grains per panicle. - Gramene:pankaj_jaiswal - ICIS:1159 - IRRI:SES - - - - - - - - - - - - A glume morphology trait (TO:0000869) which is the color of a glume (PO:0009039). - PATO:0000014 - plant_trait_ontology - GLCL - glume discoloration - glume pigmentation - pigmentation of glume - TO:0000221 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - glume color - TO:0000221 - - - - - A glume morphology trait (TO:0000869) which is the color of a glume (PO:0009039). - Gramene:pankaj_jaiswal - PO:0009039 - TO:moorel - - - - - - - - - - - - - - - - - - A grain yield trait (TO:0000396) which is the amount of whole (3/4 of original length or longer) milled kernels separated from the total amount of milled rice. - TO_GIT:422 - plant_trait_ontology - HEADR - head milled rice - head rice ratio - TO:0000222 - Depending on the grain type, whole milled kernels are spearated using special sized screens. The weight of whole milled kernels or head rice is expressed as a percentage of the original rough rice sample. - head rice yield - TO:0000222 - - - - - A grain yield trait (TO:0000396) which is the amount of whole (3/4 of original length or longer) milled kernels separated from the total amount of milled rice. - TO:cooperl - http://www.uark.edu/ua/ricecap/glossary_ricecaplist.htm#H - - - - - - - - - - - - A carpel morphology trait (TO:0006012) which is a quality of a pistil. - plant_trait_ontology - pistil related trait - TO:0000223 - pistil morphology trait - TO:0000223 - - - - - A carpel morphology trait (TO:0006012) which is a quality of a pistil. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Sensitivity to the iron ion content in the growth medium. It is important for synthesis of chlorophyll and some enzyme activities. - plant_trait_ontology - FESN - FeTox - iron toxicity - TO:0000224 - iron sensitivity - TO:0000224 - - - - - Sensitivity to the iron ion content in the growth medium. It is important for synthesis of chlorophyll and some enzyme activities. - Gramene:pankaj_jaiswal - ICIS:1211 - IRRI:SES - - - - - - - - - - - - An androecium morphology trait (TO:0000215) which is the number of stamens (PO:0009029) present in an androecium (PO:0009061). - TO_GIT:386 - plant_trait_ontology - STANB - TO:0000225 - stamen number - TO:0000225 - - - - - An androecium morphology trait (TO:0000215) which is the number of stamens (PO:0009029) present in an androecium (PO:0009061). - Gramene:pankaj_jaiswal - PO:0009029 - PO:0009049 - TO:austin_meier - TO:moorel - - - - - - - - - - - - A measure of either the absence of auricle or the length of auricle being zero. - auricle absence - auricle absent - plant_trait_ontology - AUMIN - TO:0000226 - auricleless - TO:0000226 - - - - - A measure of either the absence of auricle or the length of auricle being zero. - Gramene:pankaj_jaiswal - - - - - - - - - - A root morphology trait (TO:0000043) which is the length of one or more roots (PO:0009005). - GIT_TO:365 - PATO:0000122 - plant_trait_ontology - MRD - MRL - RTLG - maximum root depth - maximum root length - TO:0000227 - refer to PATO:0000122- A 1-D extent quality which is equal to the distance between two points. - root length - TO:0000227 - - - - - A root morphology trait (TO:0000043) which is the length of one or more roots (PO:0009005). - Gramene:jcl -GR:pj - TO:austin_meier -TO:cooperl - - - - - - - - - - plant_trait_ontology - TO:0000228 - moisture content related trait - TO:0000228 - - - - - - - - - - Sensitivity response on the plant development and the related growth stages by the duration of light, to which the plant has been exposed. - plant_trait_ontology - PPDSN - TO:0000229 - photoperiod sensitivity trait - TO:0000229 - - - - - Sensitivity response on the plant development and the related growth stages by the duration of light, to which the plant has been exposed. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Absence of crown roots in the plant. - plant_trait_ontology - CWRTMIN - TO:0000230 - crown rootless - TO:0000230 - - - - - Absence of crown roots in the plant. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is the absence of endosperm (PO:0009089) in the seed (PO:0009010) or grain. - TO_GIT:133 - plant_trait_ontology - ENDMIN - TO:0000231 - This is also an endosperm quality trait (TO:0000587). - endospermless - TO:0000231 - - - - - An endosperm morphology trait (TO:0000575) which is the absence of endosperm (PO:0009089) in the seed (PO:0009010) or grain. - Gramene:pankaj_jaiswal - PO:0009010 - PO:0009089 - TO:moorel - - - - - - - - - - Caused by the interaction of cytoplasmic (mitochondrial) and nuclear genomes. The trait shows non-mendelian inheritance or maternal inheritance. - cytoplasmic male sterility (sensu Oryza) - plant_trait_ontology - <new synonym> - CMS - TO:0000232 - rice cytoplasmic male sterility - TO:0000232 - - - - - Caused by the interaction of cytoplasmic (mitochondrial) and nuclear genomes. The trait shows non-mendelian inheritance or maternal inheritance. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Is an indirect measure of root mass or density. Quantified in terms of cubic centimeters by water displacement method. - plant_trait_ontology - RTVOL - TO:0000233 - root volume - TO:0000233 - - - - - Is an indirect measure of root mass or density. Quantified in terms of cubic centimeters by water displacement method. - GR_REF:6917 - Gramene:pankaj_jaiswal - - - - - - - - - - The embryo of the germinating seed does not produce roots. - plant_trait_ontology - TO:0000234 - radicleless - TO:0000234 - - - - - The embryo of the germinating seed does not produce roots. - Gramene:pankaj_jaiswal - - - - - - - - - - A ligule morphology trait (TO:0002748) which is the absence of a ligule (PO:0020105). - PATO:0000462 - plant_trait_ontology - LIGMIN - TO:0000235 - Refer to absent (PATO:0000462): A quality denoting the lack of an entity. - liguleless - TO:0000235 - - - - - A ligule morphology trait (TO:0002748) which is the absence of a ligule (PO:0020105). - Gramene:pankaj_jaiswal - PO:0020105 - POC:cooperl - - - - - - - - - - crop damage resistance trait - plant_trait_ontology - TO:0000236 - crop damage resistance - TO:0000236 - - - - - - - - - - Response by the plant in terms of sensitivity to water stress (quality and quantity of water). - plant_trait_ontology - TO:0000237 - water stress trait - TO:0000237 - - - - - Response by the plant in terms of sensitivity to water stress (quality and quantity of water). - Gramene:pankaj_jaiswal - - - - - - - - - - A chemical stress sensitivity (TO:0000238) which is the response by the plant to a specific growth medium. - plant_trait_ontology - edaphic - TO:0000238 - growth media composition sensitivity - TO:0000238 - - - - - A chemical stress sensitivity (TO:0000238) which is the response by the plant to a specific growth medium. - TO:moorel - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000239 - plant genetic trait unknown - true - TO:0000239 - - - - - - - - - - A lemma morphology trait (TO:1000023) which is the length of a sterile lemma (PO:0009040). - TO_GIT:390 - plant_trait_ontology - SLmL - STLEMLG - TO:0000240 - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - sterile lemma length - TO:0000240 - - - - - A lemma morphology trait (TO:1000023) which is the length of a sterile lemma (PO:0009040). - IRRI:SES - PATO:0000122 - PO:0009040 - TO:cooperl - TO:moorel - - - - - - - - - - - - A shoot system morphology trait (TO:0000077) which is the number of leaves (PO:0025034) in a shoot system (PO:0009006) of a plant. - plant_trait_ontology - LFNB - TO:0000241 - leaf number - TO:0000241 - - - - - A shoot system morphology trait (TO:0000077) which is the number of leaves (PO:0025034) in a shoot system (PO:0009006) of a plant. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Response by the plant in terms of resistivity or sensitivity to microbes. - plant_trait_ontology - TO:0000242 - microbial damage resistance - TO:0000242 - - - - - Response by the plant in terms of resistivity or sensitivity to microbes. - Gramene:pankaj_jaiswal - - - - - - - - - - Measured as number of calli capable of differentiating into roots and(or) shoots under in vitro tissue culture condition. - plant_trait_ontology - INVRAB - TO:0000243 - in vitro regeneration ability - TO:0000243 - - - - - Measured as number of calli capable of differentiating into roots and(or) shoots under in vitro tissue culture condition. - Gramene:pankaj_jaiswal - - - - - - - - - - A coleoptile morphology trait (TO:0000753) which is the the color of a coleoptile (PO:0020033). - PATO:0000014 - TO_GIT:62 - plant_trait_ontology - COLCL - TO:0000244 - coleoptile color - TO:0000244 - - - - - A coleoptile morphology trait (TO:0000753) which is the the color of a coleoptile (PO:0020033). - Gramene:pankaj_jaiswal - PO:0020033 - TO:cooperl - - - - - - - - - - No pollen development. - plant_trait_ontology - TO:0000245 - An example is rice TGMS line Norin PL12. - pollen free - TO:0000245 - - - - - No pollen development. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Causal agent: Sogatodes oryzicola (Tagosodes orizicolus). Symptoms: partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting and death of plants. Infested areas in the field may be patchy. (similar to the symptoms of whitebacked planthopper). - plant_trait_ontology - DELRS - RDel - TO:0000246 - The evaluation scales are based on symptoms. Incidence of dead plants could be considered for final evaluation. - rice delphacid resistance - TO:0000246 - - - - - Causal agent: Sogatodes oryzicola (Tagosodes orizicolus). Symptoms: partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting and death of plants. Infested areas in the field may be patchy. (similar to the symptoms of whitebacked planthopper). - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - plant_trait_ontology - TO:0000247 - other nutrient sensitivity - TO:0000247 - - - - - - - - - - A macronutrient sensitivity (TO:0000176) response shown by the plant either grown in an excess or deficient amount of the primary macronutrient in the growth medium. - plant_trait_ontology - TO:0000248 - primary macronutrient sensitivity - TO:0000248 - - - - - A macronutrient sensitivity (TO:0000176) response shown by the plant either grown in an excess or deficient amount of the primary macronutrient in the growth medium. - TO:moorel - - - - - - - - - - - - A measure of aging of leaf. - plant_trait_ontology - Foilar senescence - LFSNS - Sen - TO:0000249 - Rapid senescence of leaves can be detrimental to yield. Can be measured by loss of normal leaf color. In triticeae it is often measured on the flag or the second from top leaf. - leaf senescence trait - TO:0000249 - - - - - A measure of aging of leaf. - ICIS:1015 - IRRI:SES - - - - - - - - - - plant_trait_ontology - TO:0000250 - vigor related trait - TO:0000250 - - - - - - - - - - A macronutrient sensitivity (TO:0000176) response shown by the plant either grown in an excess or deficient amount of the secondary macronutrient in the growth medium. - plant_trait_ontology - TO:0000251 - secondary macronutrient sensitivity - TO:0000251 - - - - - A macronutrient sensitivity (TO:0000176) response shown by the plant either grown in an excess or deficient amount of the secondary macronutrient in the growth medium. - TO:moorel - - - - - - - - - - Sensitivity response shown by the plant grown in either the excess or deficient amount of the non-mineral nutrients in the growth medium. These nutrients are found in the air and water. - plant_trait_ontology - TO:0000252 - non-mineral nutrient sensitivity - TO:0000252 - - - - - Sensitivity response shown by the plant grown in either the excess or deficient amount of the non-mineral nutrients in the growth medium. These nutrients are found in the air and water. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - plant_trait_ontology - SDDOR - TO:0000253 - seed dormancy - TO:0000253 - - - - - - - - - - A growth media composition sensitivity (TO:0000238) which is the response of the plant to the pH of the growth media (soil/culture media), whether it be acidic or alkaline. - plant_trait_ontology - soil pH stress - TO:0000254 - growth media pH sensitivity - TO:0000254 - - - - - A growth media composition sensitivity (TO:0000238) which is the response of the plant to the pH of the growth media (soil/culture media), whether it be acidic or alkaline. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Causal agent: Rhizoctonia solani. Symptom: Grayish-green lesions may enlarge and coalesce with other lesions, mostly on lower leaf sheaths, but occasionally on the leaves. - TO_GIT:67 - plant_trait_ontology - SHBTRS - ShB - TO:0000255 - sheath blight disease resistance - TO:0000255 - - - - - Causal agent: Rhizoctonia solani. Symptom: Grayish-green lesions may enlarge and coalesce with other lesions, mostly on lower leaf sheaths, but occasionally on the leaves. - IRRI:SES - - - - - - - - OBSOLETE. A genetic trait is a distinguishable feature or a characteristic or a quality of character or a phenotypic feature of a developing or developed individual that is linked to a physical or genetic marker - plant_trait_ontology - TO:0000256 - genetic trait - true - TO:0000256 - - - - - OBSOLETE. A genetic trait is a distinguishable feature or a characteristic or a quality of character or a phenotypic feature of a developing or developed individual that is linked to a physical or genetic marker - Gramene:pankaj_jaiswal - - - - - - - - - - The extent of the root branching as determined under variable treatments and environments. - plant_trait_ontology - RTBR - rbr - TO:0000257 - root branching - TO:0000257 - - - - - The extent of the root branching as determined under variable treatments and environments. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf size (TO:0002637) trait which is the thickness of a leaf (PO:0025034). - PATO:0000915 - plant_trait_ontology - TO:0000258 - Refers to thickness PATO:0000915 A 1-D extent quality which is equal to the dimension through an object as opposed to its length or width. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf thickness - TO:0000258 - - - - - A leaf size (TO:0002637) trait which is the thickness of a leaf (PO:0025034). - PO:0025034 - TO:moorel - - - - - - - - - - Tolerance to warm temperatures if plant is exposed to above than permissive temperature limits. Observe differences in vigor along with subtle changes in leaf color. The optimum time to make observations would be the seedling, tillering (sensu Poaceae), flowering and mature stages. Mainly scored in terms of spikelet fertility in grasses. - plant_trait_ontology - HTol - TO:0000259 - heat tolerance - TO:0000259 - - - - - Tolerance to warm temperatures if plant is exposed to above than permissive temperature limits. Observe differences in vigor along with subtle changes in leaf color. The optimum time to make observations would be the seedling, tillering (sensu Poaceae), flowering and mature stages. Mainly scored in terms of spikelet fertility in grasses. - Gramene:pankaj_jaiswal - ICIS:1210 - IRRI:SES - - - - - - - - - - Since there is no genetic resistance to birds, the damage can be quantified as it does represent resistance. Factors as flag leaf angle or panicle exsertion are important. - plant_trait_ontology - BD - TO:0000260 - bird damage resistance - TO:0000260 - - - - - Since there is no genetic resistance to birds, the damage can be quantified as it does represent resistance. Factors as flag leaf angle or panicle exsertion are important. - Gramene:pankaj_jaiswal - ICIS:1169 - IRRI:SES - - - - - - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to insect infestation as compared to the susceptible and/or the reference plants of the same species. - jaiswalp - insect resistance - plant_trait_ontology - TO:0000261 - It represents the damage done by the insects to the plant. The damage is a direct measure of resistance to the particular insect variety. The test evaluation is valid if insect population is uniformly distributed at a high level across the screening box or the field. - insect damage resistance - TO:0000261 - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to insect infestation as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the shape of the panicle inflorescence. - PATO:0000052 - plant_trait_ontology - TO:0000262 - Refer to shape PATO:0000052:A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - panicle shape - TO:0000262 - - - - - A panicle morphology trait (TO:0000847) which is the shape of the panicle inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000263 - - - - - - - - - - - - - - - - - - A lemma and palea morphology trait (TO:0000079) which is the color of the lemma (PO:0009037) and the palea (PO:0009038). - PATO:0000014 - plant_trait_ontology - LEMCL - LEMPALCL - Lemma color - LmPC - PALCL - palea color - TO:0000264 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - lemma and palea color - TO:0000264 - - - - - A lemma and palea morphology trait (TO:0000079) which is the color of the lemma (PO:0009037) and the palea (PO:0009038). - Gramene:pankaj_jaiswal - IRRI:SES - PO:0009037 - PO:0009038 - TO:moorel - - - - - - - - - - Response shown by the plant in the presence of a light quality stress. - plant_trait_ontology - response to light quality - TO:0000265 - Light quality is defined by the wavelength of the light type. - light quality sensitivity - TO:0000265 - - - - - Response shown by the plant in the presence of a light quality stress. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is the chalkiness of an endosperm (PO:0009089) on the scale of (a) white belly, (b) white center or (c) white back. - TO_GIT:133 - plant_trait_ontology - CHALK - Clk - chalkiness of endosperm - TO:0000266 - This is also an endosperm quality trait (TO:0000587). - chalky endosperm - TO:0000266 - - - - - An endosperm morphology trait (TO:0000575) which is the chalkiness of an endosperm (PO:0009089) on the scale of (a) white belly, (b) white center or (c) white back. - Gramene:pankaj_jaiswal - ICIS:1253 - IRRI:SES - TO:moorel - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the variation in the type of inflorescence, wither due to extent and number of branching, branch angles or modified form of the inflorescence (PO:0009049). - TO:0000500 - INFLOTYPE - plant_trait_ontology - inflorescence type - TO:0000267 - inflorescence type - TO:0000267 - - - - - An inflorescence morphology trait (TO:0000373) which is the variation in the type of inflorescence, wither due to extent and number of branching, branch angles or modified form of the inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the shape of an inflorescence (PO:0009049). - PATO:0000052 - TO_GIT:92 - TO_GIT:97 - head shape - plant_trait_ontology - TO:0000268 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - inflorescence shape - TO:0000268 - - - - - An inflorescence morphology trait (TO:0000373) which is the shape of an inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - POC:cooperl - - - - - - - - - - Measurements in grams of 100 well-developed whole grains (seeds with the hull), dried to 13% moisture content, weight on a precision balance. - TO:0000518 - plant_trait_ontology - 100-grain weight - HGRWT - HSDWT - hundred grain weight - hundred seed weight - TO:0000269 - 100-seed weight - TO:0000269 - - - - - Measurements in grams of 100 well-developed whole grains (seeds with the hull), dried to 13% moisture content, weight on a precision balance. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - An inflorescence morphology trait (TO:0000782) which is the angle of the inflorescence axis (PO:0020122). - PATO:0002326 - plant_trait_ontology - TO:0000270 - Refers to the angle ((PATO:0002326): An orientation inhering in a bearer by virtue of the bearer's placement at an angle) of an inflorescence axis (PO:0020122). - inflorescence axis angle - TO:0000270 - - - - - An inflorescence morphology trait (TO:0000782) which is the angle of the inflorescence axis (PO:0020122). - Gramene:pankaj_jaiswal - PO:0020122 - POC:cooperl - - - - - - - - - - plant_trait_ontology - TO:0000271 - inflorescence length - TO:0000271 - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000272 - plant survivability - true - TO:0000272 - - - - - - - - - - Causal agent: Pseudaletia unipuncta, Spodoptera mauritia and Spodoptera praefica. The swarming caterpillars cause severe damage to rice plants in nursery beds. - plant_trait_ontology - AWRRS - TO:0000273 - The worms appear suddenly in masses and move like an army from field to field so that seedbeds or the direct seeded fields look as if grazed by cattles. Generally, a transplanted crop is not severely affected. Damage by armyworms is most serious during periods of stem elongation and grain formation. Larvae defoliate plants, typically by chewing angular pieces off leaves. They may also feed on the panicle near the developing kernels causing these kernels to dry before filling. This feeding causes all or parts of the panicle to turn white. If the entire panicle is white, the damage may also be due to stem rot or feeding by rats. The seriousness of armyworm injury depends on the maturity of the plant and the amount of tissue consumed. Significant yield reduction can occur if defoliation is greater than 25% at 2 to 3 weeks before heading. They migrate from field to field and extensive losses are often caused within a week. Their migration is facilitated by the absence of standing water in the field. - armyworm resistance - TO:0000273 - - - - - Causal agent: Pseudaletia unipuncta, Spodoptera mauritia and Spodoptera praefica. The swarming caterpillars cause severe damage to rice plants in nursery beds. - Gramene:pankaj_jaiswal - web:http//pne.gsnu.ac.kr/riceipm/spodopte.htm - web:http//www.ipm.ucdavis.edu/PMG/r682300411.html - - - - - - - - - - A flower morphology trait (TO:0000499) which is a quality of a spikelet floret (PO:0009082). - TO_GIT:105 - plant_trait_ontology - floret related trait - TO:0000274 - spikelet floret morphology trait - TO:0000274 - - - - - A flower morphology trait (TO:0000499) which is a quality of a spikelet floret (PO:0009082). - Gramene:pankaj_jaiswal - TO:cooperl - TO:moorel - - - - - - - - - - A collective phyllome structure morphology trait (TO:0000845) which is a quality of a perianth (PO:0009058). - TO_GIT:105 - TO_GIT:306 - plant_trait_ontology - perianth related trait - TO:0000275 - perianth morphology trait - TO:0000275 - - - - - A collective phyllome structure morphology trait (TO:0000845) which is a quality of a perianth (PO:0009058). - Gramene:pankaj_jaiswal - PO:0009058 - TO:cooperl - TO:moorel - - - - - - - - - - Becoming tolerant to drought like conditions of minimal or no water content in the growth environment. - drought resistance - plant_trait_ontology - DRTL - TO:0000276 - Often the plants exhibiting high salt tolerance also exhibit drought tolerance. - drought tolerance - TO:0000276 - - - - - Becoming tolerant to drought like conditions of minimal or no water content in the growth environment. - Gramene:pankaj_jaiswal - - - - - - - - - - A plant trait (TO:0000387) which is a quality of a chemical entity (CHEBI:24431), a plant metabolite (CHEBI:76924), or a molecular function (GO:0003674), which occurs in a cellular component (GO:0005575), plant anatomical entity (PO:0025131) or during a plant structure development stage (PO:0009012). - plant_trait_ontology - TO:0000277 - biochemical trait - TO:0000277 - - - - - A plant trait (TO:0000387) which is a quality of a chemical entity (CHEBI:24431), a plant metabolite (CHEBI:76924), or a molecular function (GO:0003674), which occurs in a cellular component (GO:0005575), plant anatomical entity (PO:0025131) or during a plant structure development stage (PO:0009012). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - The ratio determined from the parameters evaluated for root length and the shoot length in a study. - RTSHRO - r/s - root length to shoot length ratio - root/shoot ratio - plant_trait_ontology - TO:0000278 - root to shoot ratio - TO:0000278 - - - - - The ratio determined from the parameters evaluated for root length and the shoot length in a study. - Gramene:pankaj_jaiswal - - - - - - - - - - The average dry or fresh weight of the root determined in a study. - plant_trait_ontology - RTWT - TRW - total root weight - TO:0000279 - root weight - TO:0000279 - - - - - The average dry or fresh weight of the root determined in a study. - Gramene:pankaj_jaiswal - - - - - - - - - - Represents the seedling growth of the plant. - plant_trait_ontology - SDLVIG - Sd - TO:0000280 - seedling vigor - TO:0000280 - - - - - Represents the seedling growth of the plant. - ICIS:1007 - IRRI:SES - - - - - - - - - - The trait associated with an assay to determine the affected metabolite's profile. - plant_trait_ontology - TO:0000281 - metabolite content trait - TO:0000281 - - - - - The trait associated with an assay to determine the affected metabolite's profile. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE: The trait associated with an assay to determine the effected enzymatic activity and protein content. - plant_trait_ontology - TO:0000282 - enzymatic activity and protein content related trait - true - TO:0000282 - - - - - OBSOLETE: The trait associated with an assay to determine the effected enzymatic activity and protein content. - Gramene:pankaj_jaiswal - - - - - - - - - - A plant trait (TO:0000387) which is a process quality (PATO:0001236) of a biological process (GO:0008150) which occurs in a plant anatomical entity (PO:0025131), a cellular component (GO:0005575), or during a plant structure development stage (PO:0009012). - TO:0000349 - TO_GIT:378 - physiological process trait - plant_trait_ontology - TO:0000283 - Refers to process quality (PATO:0001236): A quality which inheres in an process. - biological process trait - TO:0000283 - - - - - A plant trait (TO:0000387) which is a process quality (PATO:0001236) of a biological process (GO:0008150) which occurs in a plant anatomical entity (PO:0025131), a cellular component (GO:0005575), or during a plant structure development stage (PO:0009012). - GO:0008150 - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Catalysis of the reaction: ATP + alpha-D-glucose 1-phosphate = diphosphate + ADP-glucose. - plant_trait_ontology - ADP-glucose pyrophosphorylase - ADP-glucose synthase - ADP-glucose synthetase - ADPG pyrophosphorylase - AGPACT - adenosine diphosphate glucose pyrophosphorylase - adenosine diphosphoglucose pyrophosphorylase - glucose 1-phosphate adenylyltransferase - glucose-1-phosphate adenylyltransferase activity - TO:0000284 - ADP glucose pyrophosphorylase activity trait - TO:0000284 - - - - - Catalysis of the reaction: ATP + alpha-D-glucose 1-phosphate = diphosphate + ADP-glucose. - EC:2.7.7.27 - GO:0008878 - - - - - - - - - - plant_trait_ontology - TO:0000285 - nodal tillering - TO:0000285 - - - - - - - - - - Measure of sensitivity of a plant if placed under submergence condition. - plant_trait_ontology - SUBSN - Sub - submergence tolerance - TO:0000286 - submergence sensitivity - TO:0000286 - - - - - Measure of sensitivity of a plant if placed under submergence condition. - ICIS:1215 - IRRI:SES - - - - - - - - - - A grain shape (TO:0002730) of the brown rice. Measure after harvesting, cleaning, and dehulling. - PATO:0000052 - plant_trait_ontology - BRWSHP - BrS - TO:0000287 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - brown rice shape - TO:0000287 - - - - - A grain shape (TO:0002730) of the brown rice. Measure after harvesting, cleaning, and dehulling. - ICIS:1258 - IRRI:SES - TO:moorel - - - - - - - - - - - - - - - - - - An amylase activity trait (TO:0000703) which is the quality of the endohydrolysis of 1,4-a-D-glucosidic linkages in polysaccharides containing three or more 1,4-a-linked D-glucose units. - plant_trait_ontology - ALPHAAMYASEACT - Amy - alpha amylase - endoamylase - glycogenase - taka-amylase A - TO:0000288 - alpha-amylase activity trait - TO:0000288 - - - - - An amylase activity trait (TO:0000703) which is the quality of the endohydrolysis of 1,4-a-D-glucosidic linkages in polysaccharides containing three or more 1,4-a-linked D-glucose units. - EC:3.2.1.1 - GO:0004556 - - - - - - - - - - A carotenoid content trait (TO:0000496) which is the amount of carotene (CHEBI:23042) in a plant structure (PO:0009011). - CHEBI:23042 - TO_GIT:24 - plant_trait_ontology - TO:0000289 - Carotenes are a group of naturally occurring tetraterpenes (carotenoids) that are synthesized only in plants, and unlike the xanthophylls, do not contain any oxygen. - carotene content - TO:0000289 - - - - - A carotenoid content trait (TO:0000496) which is the amount of carotene (CHEBI:23042) in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - ISBN:198506732 - TO:Cooperl - - - - - - - - - - A phytochemical compound content trait (TO:0000674) which is the amount of flavonoid (CHEBI:47916) in a plant structure (PO:0009011). - CHEBI:47916 - plant_trait_ontology - TO:0000290 - Flavonoids are water soluble polyphenolic molecules containing 15 carbon atoms. Flavonoids belong to the polyphenol family and have antioxidant activity. - flavonoid content - TO:0000290 - - - - - A phytochemical compound content trait (TO:0000674) which is the amount of flavonoid (CHEBI:47916) in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - - - A metabolite content trait (TO:0000281) which is the amount of carbohydrate (CHEBI:16646) in a plant structure (PO:0009011). - CHEBI:16646 - plant_trait_ontology - CARBCN - TO:0000291 - carbohydrate content - TO:0000291 - - - - - A metabolite content trait (TO:0000281) which is the amount of carbohydrate (CHEBI:16646) in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Causal agent: Mycoplasma. Symptoms: pale yellow, droopy leaves, excessive tillering and stunting. - plant_trait_ontology - YD - YDRS - TO:0000292 - yellow dwarf disease resistance - TO:0000292 - - - - - Causal agent: Mycoplasma. Symptoms: pale yellow, droopy leaves, excessive tillering and stunting. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Measures the chlorophyll-a (Chl-a) content in a green tissue. It is a type of chlorophyll present as green pigment in plants. - plant_trait_ontology - chl-a - TO:0000293 - chlorophyll-a content - TO:0000293 - - - - - Measures the chlorophyll-a (Chl-a) content in a green tissue. It is a type of chlorophyll present as green pigment in plants. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf sheath auricle morphology trait (TO:0002717) which is the color of a leaf sheath auricle (PO:0020106). - PATO:0000014 - plant_trait_ontology - AC - AUCL - TO:0000294 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - leaf sheath auricle color - TO:0000294 - - - - - A leaf sheath auricle morphology trait (TO:0002717) which is the color of a leaf sheath auricle (PO:0020106). - IRRI:SES - PO:0020106 - POC:cooperl - - - - - - - - - - Measures the chlorophyll-b (Chl-b) content in a green tissue. It is a type of chlorophyll present as green pigment in plants. - plant_trait_ontology - TO:0000295 - chlorophyll-b content - TO:0000295 - - - - - Measures the chlorophyll-b (Chl-b) content in a green tissue. It is a type of chlorophyll present as green pigment in plants. - Gramene:pankaj_jaiswal - - - - - - - - - - Represents the growth of plant. Used to evaluate genetic material under stress and non-stress conditions, several factors may interact, influencing the seedling vigor (e.g. tillering ability, plant height, etc). - plant_trait_ontology - VGVIG - Vg - vegetative growth vigor - TO:0000296 - vegetative vigor - TO:0000296 - - - - - Represents the growth of plant. Used to evaluate genetic material under stress and non-stress conditions, several factors may interact, influencing the seedling vigor (e.g. tillering ability, plant height, etc). - Gramene:pankaj_jaiswal - - - - - - - - - - - - An oligosaccharide content (TO:0006003) which is the amount of glucosamine (CHEBI:5417) in a plant structure (PO:0009011). - CHEBI:5417 - Gramene:pankaj_jaiswal - ISBN:198506732 - plant_trait_ontology - 2-amino-2-deoxyglucopyranose content - GLUCNCN - TO:0000297 - It is one of the most abundant natural polysaccharide. - glucosamine content - TO:0000297 - - - - - - - - - - Measures the a-a to chlorophyll-b content ratio in a green tissue. Chlorophyll is the green pigment found in plants. - plant_trait_ontology - CHLRO - chl-a to chl-b ratio - chlorophyll content ratio - TO:0000298 - The average ratio of chl-a to chl-b is about 3:1. - chlorophyll ratio - TO:0000298 - - - - - Measures the a-a to chlorophyll-b content ratio in a green tissue. Chlorophyll is the green pigment found in plants. - ISBN:198506732 - - - - - - - - - - A leaf lamina morphology trait (TO:0000829) which is the color of the leaf lamina (PO:0020039). - PATO:0000014 - plant_trait_ontology - LBC - LFLCL - leaf blade color - leaf color - TO:0000299 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - leaf lamina color - TO:0000299 - - - - - A leaf lamina morphology trait (TO:0000829) which is the color of the leaf lamina (PO:0020039). - ICIS:1054 - IRRI:SES - PO:0020039 - TO:moorel - - - - - - - - - - Amount of glucose present in the plant or plant part. - plant_trait_ontology - D-glucose content - GLUCCN - dextrose content - TO:0000300 - It is a common monosaccharide that is a component of oligo/disaccharides (sucrose, lactose, and maltose) and various complex carbohydrates. - glucose content - TO:0000300 - - - - - Amount of glucose present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - The xanthophyll content in a plant or plant part. - plant_trait_ontology - XANCN - TO:0000301 - These are any group of naturally occurring tetraterpenes (carotenoids) that are synthesized only in plants and contain oxygen in various forms. - xanthophyll content - TO:0000301 - - - - - The xanthophyll content in a plant or plant part. - ISBN:198506732 - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000302 - smut disease - true - TO:0000302 - - - - - - - - - - Tolerance to cold temperatures if plant is exposed to below permissive temperature limits. Observe differences in vigor along with subtle changes in leaf color. The optimum time to make observations would be the seedling, tillering (sensu Poaceae), flowering and mature stages. - plant_trait_ontology - COLDTL - CTol - TO:0000303 - cold tolerance - TO:0000303 - - - - - Tolerance to cold temperatures if plant is exposed to below permissive temperature limits. Observe differences in vigor along with subtle changes in leaf color. The optimum time to make observations would be the seedling, tillering (sensu Poaceae), flowering and mature stages. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - - - - - - - - A seed morphology trait (TO:0000184) which is the thickness of a seed (PO:0009010). - PATO:0000915 - TO_GIT:197 - plant_trait_ontology - SDTH - TO:0000304 - Seed thickness is a component of seed size (TO:0000391) and has a component of seed quality (TO:0000162). Refer to (PATO:0000915): A 1-D extent quality which is equal to the dimension through an object as opposed to its length or width. - seed thickness - TO:0000304 - - - - - A seed morphology trait (TO:0000184) which is the thickness of a seed (PO:0009010). - Gramene:pankaj_jaiswal - PO:0009010 - TO:moorel - - - - - - - - - - Catalysis of the reaction: ATP + L-glutamate + ammonia = ADP + phosphate + L-glutamine. - plant_trait_ontology - GS1 - GS1CN - L-glutamine synthetase - glutamate-ammonia ligase - glutamylhydroxamic synthetase - TO:0000305 - glutamine synthetase content - TO:0000305 - - - - - Catalysis of the reaction: ATP + L-glutamate + ammonia = ADP + phosphate + L-glutamine. - EC:6.3.1.2 - GO:0004356 - - - - - - - - - - The average thickness of roots. - plant_trait_ontology - RTTH - TO:0000306 - root thickness - TO:0000306 - - - - - The average thickness of roots. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of hexose present in the plant or plant part. - plant_trait_ontology - HEXCN - TO:0000307 - Hexose is any aldose having a chain of six carbon atoms in a molecule. - hexose content - TO:0000307 - - - - - Amount of hexose present in the plant or plant part. - ISBN:198506732 - - - - - - - - - - - - Describes the extent of fertile pollen percentage. Also refers to male sterility-measure (extent of sterility). - plant_trait_ontology - MALERF - male fertility restoration in F1 hybrids - TO:0000308 - male fertility restoration trait - TO:0000308 - - - - - Describes the extent of fertile pollen percentage. Also refers to male sterility-measure (extent of sterility). - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - true - TO:0000309 - - - - - - - - - - Self-incompatibility allows plants to recognize and reject pollen from the same plant, thereby reducing inbreeding. - plant_trait_ontology - Genetic self-incompatibility - TO:0000310 - In most cases self-incompatibility is controlled by a single genetic locus, recent results show that complex signal transduction pathways and many players are involved in pollen recognition and rejection. - self-incompatibility - TO:0000310 - - - - - Self-incompatibility allows plants to recognize and reject pollen from the same plant, thereby reducing inbreeding. - PubMed:PMID_10066554 - - - - - - - - - - Catalysis of the hydrolysis of terminal non-reducing beta-D-fructofuranoside residues in beta-D-fructofuranosides. - plant_trait_ontology - INVACT - acid invertase - alkaline invertase - beta-D-fructofuranoside fructohydrolase - beta-fructofuranosidase activity - beta-fructosidase - beta-h-fructosidase - fructosylinvertase - glucosucrase - invertin - maxinvert L 1000 - saccharase - sucrase - TO:0000311 - invertase activity trait - TO:0000311 - - - - - Catalysis of the hydrolysis of terminal non-reducing beta-D-fructofuranoside residues in beta-D-fructofuranosides. - EC:3.2.1.26 - GO:0004564 - - - - - - - - - - Catalysis of the reaction: 2 L-glutamate + NAD+ = L-glutamine + 2-oxoglutarate + NADH + H+. - plant_trait_ontology - L-glutamate synthase (NADH) - L-glutamate synthetase - NADH-dependent glutamate synthase - NADH-glutamate synthase - NADHGOGATCN - glutamate (reduced nicotinamide adenine dinucleotide) synthase - glutamate synthase (NADH) activity - glutamate synthase (NADH2) - TO:0000312 - NADH glutamate synthase content - TO:0000312 - - - - - Catalysis of the reaction: 2 L-glutamate + NAD+ = L-glutamine + 2-oxoglutarate + NADH + H+. - EC:1.4.1.14 - GO:0016040 - - - - - - - - - - Catalysis of the reaction: donor + hydrogen peroxide = oxidized donor + 2 H2O. - plant_trait_ontology - P71CN - TO:0000313 - perodidase-71 content - TO:0000313 - - - - - Catalysis of the reaction: donor + hydrogen peroxide = oxidized donor + 2 H2O. - EC:1.11.1.7 - GO:0004601 - - - - - - - - - - Catalysis of the reaction: 2-phospho-D-glycerate = 3-phospho-D-glycerate. - plant_trait_ontology - PGAM - PGAMCN - TO:0000314 - phosphoglycerate mutase content - TO:0000314 - - - - - Catalysis of the reaction: 2-phospho-D-glycerate = 3-phospho-D-glycerate. - EC:5.4.2.1 - GO:0004619 - - - - - - - - - - - - The resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a bacterial pathogen infection as compared to the susceptible and/or the reference plants of the same species. - plant_trait_ontology - TO:0000315 - It represents the damage done by the diease and/or the pathogen to the plant. The damage is a direct measure of resistance to the particular bacterial strain causing the disease. - bacterial disease resistance - TO:0000315 - - - - - The resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a bacterial pathogen infection as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - - - - - - - - - - The photosynthesis ability determined on a plant or the plant part under stress. - plant_trait_ontology - PHOTOSYNAB - TO:0000316 - Methods may include actual measurements on photosynthesis, pigment content or the content and composition of enzymes associated with photosynthesis. - photosynthetic ability - TO:0000316 - - - - - The photosynthesis ability determined on a plant or the plant part under stress. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Spodoptera litura. - plant_trait_ontology - CUWRRS - TO:0000317 - cutworm resistance - TO:0000317 - - - - - Causal agent: Spodoptera litura. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of reducing sugar present in the plant or plant part. - plant_trait_ontology - REDSUGCN - TO:0000318 - A reducing sugar is any sugar which in basic solution forms contain aldehyde or ketone groups that are oxidised to carboxylic acids. - reducing sugar content - TO:0000318 - - - - - Amount of reducing sugar present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of Rubisco enzyme or protein present in a given plant or the plant part. - plant_trait_ontology - RUBISCOCN - TO:0000319 - rubisco content - TO:0000319 - - - - - Amount of Rubisco enzyme or protein present in a given plant or the plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A ratio of the amount of rubisco protein to that of the chlorophyll content in a plant or plant part. - plant_trait_ontology - RUBISCOCHLRO - TO:0000320 - rubisco to chlorophyll ratio - TO:0000320 - - - - - A ratio of the amount of rubisco protein to that of the chlorophyll content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - A ratio of the amount of rubisco protein to that of the total nitrogen content in a plant or plant part. - plant_trait_ontology - RUBISCONICNRO - TO:0000321 - rubisco to nitrogen content ratio - TO:0000321 - - - - - A ratio of the amount of rubisco protein to that of the total nitrogen content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Breeding objectives for each variety and trait varies. The evaluation should reflect the overall acceptability of the variety. - plant_trait_ontology - PAcp - overall liking - TO:0000322 - phenotypic acceptability - TO:0000322 - - - - - Breeding objectives for each variety and trait varies. The evaluation should reflect the overall acceptability of the variety. - ICIS:1005 - IRRI:SES - - - - - - - - - - Causal agent: Magnaporthe salvinii (Nakataea sigmoidea, Sclerotium oryzae), and Helminthosporium sigmoideum var. irregulare. Symptoms: dark lesions develop on the stems near the water line. Small, dark bodies (sclerotia) develop, weaken the stem and cause lodging. - plant_trait_ontology - CULMROTRS - SR - TO:0000323 - stem rot disease resistance - TO:0000323 - - - - - Causal agent: Magnaporthe salvinii (Nakataea sigmoidea, Sclerotium oryzae), and Helminthosporium sigmoideum var. irregulare. Symptoms: dark lesions develop on the stems near the water line. Small, dark bodies (sclerotia) develop, weaken the stem and cause lodging. - Gramene:pankaj_jaiswal - ICIS:1115 - IRRI:SES - - - - - - - - - - A ratio of the amount of rubisco protein to that of the soluble protein content in a plant or plant part. - plant_trait_ontology - RUBISCOSPROTRO - TO:0000324 - rubisco to soluble protein ratio - TO:0000324 - - - - - A ratio of the amount of rubisco protein to that of the soluble protein content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of the soluble protein present in the plant or the plant part. - plant_trait_ontology - SPROTCN - TO:0000325 - soluble protein content - TO:0000325 - - - - - Amount of the soluble protein present in the plant or the plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the color of a leaf (PO:0025034). - jaiswalp - PATO:0000014 - plant_trait_ontology - LFCL - TO:0000326 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf color - TO:0000326 - - - - - A leaf morphology trait (TO:0000748) which is the color of a leaf (PO:0025034). - Gramene:pankaj_jaiswal - PO:0025034 - TO:cooperl - - - - - - - - - - A yield trait (TO: 0000371) that is the amount of a plant structure (PO:0009011) or portion of plant substance (PO:0025161) produced by the shoot system (PO:0009006) which is harvested. - TO_GIT:289 - plant_trait_ontology - BIOMYLD - BY - TO:0000327 - shoot system yield trait - TO:0000327 - - - - - A yield trait (TO: 0000371) that is the amount of a plant structure (PO:0009011) or portion of plant substance (PO:0025161) produced by the shoot system (PO:0009006) which is harvested. - ICIS:1301 - ISBN:0198506732 - TO:cooperl - - - - - - - - - - - - The amount of sucrose present in the plant or the plant part. - plant_trait_ontology - SUCROSECN - saccharose content - TO:0000328 - sucrose content - TO:0000328 - - - - - The amount of sucrose present in the plant or the plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Degree of tillering is affected by variety, spacing of plants in the field, season of planting, and environmental conditions e.g. nitrogen levels. - plant_trait_ontology - TIAB - Ti - TO:0000329 - tillering ability - TO:0000329 - - - - - Degree of tillering is affected by variety, spacing of plants in the field, season of planting, and environmental conditions e.g. nitrogen levels. - Gramene:pankaj_jaiswal - ICIS:1009 - ISBN:9712200299 - - - - - - - - - - It is a measure of percent seed set on the out-pollinated primary panicle. - plant_trait_ontology - extent of outcrossing - extent of outcrossing on male sterile lines - TO:0000330 - . - outcrossing potential - TO:0000330 - - - - - It is a measure of percent seed set on the out-pollinated primary panicle. - Gramene:pankaj_jaiswal - ICIS:1061 - IRRI:SES - - - - - - - - - - Catalysis of the reaction: UDP-glucose + D-fructose 6-phosphate = UDP + sucrose 6-phosphate. - plant_trait_ontology - SPS - SPSACT - UDP-glucose-fructose-phosphate glucosyltransferase - sucrose 6-phosphate synthase - sucrose phosphate synthetase - sucrose phosphate-uridine diphosphate glucosyltransferase - sucrose-phosphate synthase activity - sucrosephosphate-UDP glucosyltransferase - uridine diphosphoglucose-fructose phosphate glucosyltransferase - TO:0000331 - sucrose phosphate synthase activity trait - TO:0000331 - - - - - Catalysis of the reaction: UDP-glucose + D-fructose 6-phosphate = UDP + sucrose 6-phosphate. - EC:2.4.1.14 - GO:0046524 - - - - - - - - - - Causal agent: Hydrellia philippina. Symptoms: Leaf margin feeding causes conspicuous damage and sometimes stunting of plants. - plant_trait_ontology - RWM - RWMRS - TO:0000332 - rice whorl maggot resistance - TO:0000332 - - - - - Causal agent: Hydrellia philippina. Symptoms: Leaf margin feeding causes conspicuous damage and sometimes stunting of plants. - Gramene:pankaj_jaiswal - ICIS:1162 - IRRI:SES - - - - - - - - - - Amount of sugar present in the plant or the plant part. - plant_trait_ontology - SUGARCN - TO:0000333 - sugar content - TO:0000333 - - - - - Amount of sugar present in the plant or the plant part. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. - plant_trait_ontology - parental line evaluation - TO:0000334 - hybrid evaluation - true - TO:0000334 - - - - - - - - - - - - A ligule morphology trait (TO:0002748) which is the actual shape of the ligule (PO:0020105). - PATO:0000052 - plant_trait_ontology - LIGSHP - LS - TO:0000335 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's -ratios of distances between its features (points, edges, surfaces and -also holes etc). - ligule shape - TO:0000335 - - - - - A ligule morphology trait (TO:0002748) which is the actual shape of the ligule (PO:0020105). - IRRI:SES - PO:0020105 - POC:cooperl - - - - - - - - - - - - - - - - - - A combined activity of both the alpha and beta amylase enzymes. - plant_trait_ontology - TAMYASEACT - amylase activity - TO:0000336 - total amylase activity trait - TO:0000336 - - - - - A combined activity of both the alpha and beta amylase enzymes. - EC:3.2.1.- - GO:0016160 - Gramene:pankaj_jaiswal - - - - - - - - - - Represents the angle of the tiller in the submerged water fields (flash flooding). - plant_trait_ontology - KNEAB - KnA - tiller angle - TO:0000337 - Less is the tiller angle compared to water surface the least is the chance of plant's survivability. - kneeing ability - TO:0000337 - - - - - Represents the angle of the tiller in the submerged water fields (flash flooding). - ICIS:1212 - IRRI:SES - - - - - - - - - - - - - - - - - - An amylase activity trait (TO:0000703) which is the quality of the hydrolysis of 1,4-alpha-glucosidic linkages in polysaccharides to remove successive maltose units from the non-reducing ends of the chains. - plant_trait_ontology - BETAAMYASEACT - TO:0000338 - beta-amylase activity trait - TO:0000338 - - - - - An amylase activity trait (TO:0000703) which is the quality of the hydrolysis of 1,4-alpha-glucosidic linkages in polysaccharides to remove successive maltose units from the non-reducing ends of the chains. - EC:3.2.1.2 - GO:0016161 - - - - - - - - - - - - Thickness of the stem. - TO:0000535 - plant_trait_ontology - CULMTH - STEMTH - culm thickness - culm thickness (sensu Poaceae) - TO:0000339 - stem thickness - TO:0000339 - - - - - Thickness of the stem. - Gramene:pankaj_jaiswal - - - - - - - - - - Total amount of soluble sugar present in the plant or plant part. - plant_trait_ontology - TSOLSUGARCN - TO:0000340 - total soluble sugar content - TO:0000340 - - - - - Total amount of soluble sugar present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. A plant genetic trait is a distinguishable feature or a characteristic or a quality of character or a phenotypic feature of a developing or developed plant species which is genetically linked to a physical or genetic marker - TO:0000005 - plant_trait_ontology - obsolete trait term - TO:0000341 - plant genetic trait - true - TO:0000341 - - - - - OBSOLETE. A plant genetic trait is a distinguishable feature or a characteristic or a quality of character or a phenotypic feature of a developing or developed plant species which is genetically linked to a physical or genetic marker - Gramene:pankaj_jaiswal - - - - - - - - - - Represents the angle of panicle axis. - plant_trait_ontology - PnAk - TO:0000342 - panicle axis angle - TO:0000342 - - - - - Represents the angle of panicle axis. - IRRI:SES - - - - - - - - - - A common grass weed Echinochloa glabbrescens or Echinochloa crus-galli (Barnyard grass), Typha spp. (Cattails), Leptochloa fascicularis (Bearded sprangletop) grows as a weed in the rice field. Can be distinguished from rice plant by the leaf shape, venation, stem cross-section and plant shape leaf shape. - plant_trait_ontology - TO:0000343 - grass weed - TO:0000343 - - - - - A common grass weed Echinochloa glabbrescens or Echinochloa crus-galli (Barnyard grass), Typha spp. (Cattails), Leptochloa fascicularis (Bearded sprangletop) grows as a weed in the rice field. Can be distinguished from rice plant by the leaf shape, venation, stem cross-section and plant shape leaf shape. - Gramene:pankaj_jaiswal - ISBN:9712200299 - www:http//www.ipm.ucdavis.edu/PMG/r682700999.html - - - - - - - - - - A flowering time trait (TO:0002616)which is the number of days required for an individual flower (PO:0009046), a whole plant (PO:0000003) or a plant population to reach flowering stage (PO:0007616) from a predetermined time point (e.g. the date of seed sowing, seedling transplant, or seedling emergence). - TO_GIT:269 - days to flowering - Delay in flowering time - plant_trait_ontology - DTFL - TO:0000344 - Often determinded by either pollen shedding, exsertion of the anthers or simply opening of the flower. - days to flowering trait - TO:0000344 - - - - - A flowering time trait (TO:0002616)which is the number of days required for an individual flower (PO:0009046), a whole plant (PO:0000003) or a plant population to reach flowering stage (PO:0007616) from a predetermined time point (e.g. the date of seed sowing, seedling transplant, or seedling emergence). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - - - plant_trait_ontology - SDVIA - TO:0000345 - seed viability - TO:0000345 - - - - - - - - - - - - - - - - - - Number of tillers per plant, should represent most plants within a study. - plant_trait_ontology - TINB - TO:0000346 - tiller number - TO:0000346 - - - - - Number of tillers per plant, should represent most plants within a study. - ICIS:1068 - IRRI:SES - - - - - - - - - - Weeds reduce the yield regardless of planting season. They compete for sunlight, nutrients and water. If any of these is lacking, the others cannot be used effectively, even if a lot are present. Thus, the competition results in poor plant growth and less yield. - plant_trait_ontology - TO:0000347 - weed damage - TO:0000347 - - - - - Weeds reduce the yield regardless of planting season. They compete for sunlight, nutrients and water. If any of these is lacking, the others cannot be used effectively, even if a lot are present. Thus, the competition results in poor plant growth and less yield. - Gramene:pankaj_jaiswal - ISBN:9712200299 - - - - - - - - - - Causal agent: Sogatodes orizicola (Muir), Sagotella furcifera and Sogatodes cubanus. Sogatodes orizicola is also a vector for the Rice black streaked dwarf fijivirus and rice hoja blanca virus (RHBV). - plant_trait_ontology - SAGRS - TO:0000348 - sogatodes resistance - TO:0000348 - - - - - Causal agent: Sogatodes orizicola (Muir), Sagotella furcifera and Sogatodes cubanus. Sogatodes orizicola is also a vector for the Rice black streaked dwarf fijivirus and rice hoja blanca virus (RHBV). - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000349 - - - - - - - - - - - - Abortion of microspore development at bi-nucleate stage. - plant_trait_ontology - CMS-HL - HLCMS - TO:0000350 - cms-hl type - TO:0000350 - - - - - Abortion of microspore development at bi-nucleate stage. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Sensitivity to the zinc content in the growth medium. It acts as cofactor for certain enzymes like Class II aldolases, metalloproteases, alkaline phosphatase, etc. - plant_trait_ontology - PDef - ZNSN - zinc deficiency - TO:0000351 - zinc sensitivity - TO:0000351 - - - - - Sensitivity to the zinc content in the growth medium. It acts as cofactor for certain enzymes like Class II aldolases, metalloproteases, alkaline phosphatase, etc. - Gramene:pankaj_jaiswal - ICIS:1217 - IRRI:SES - - - - - - - - - - The dry weight of the whole plant. - plant_trait_ontology - DMASS - PTDWT - RTWT - dry mass - total dry mass - TO:0000352 - plant dry weight - TO:0000352 - - - - - The dry weight of the whole plant. - Gramene:pankaj_jaiswal37 - - - - - - - - - - Abortion at later stage of microspore development, the pollen looks like fertile pollen. - plant_trait_ontology - PMTABR - TO:0000353 - aborted at pollen maturity stage - TO:0000353 - - - - - Abortion at later stage of microspore development, the pollen looks like fertile pollen. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Sensitivity to aluminum content in the growth media. - aluminium sensitivity (exact) - plant_trait_ontology - ALSN - aluminum toxicity - TO:0000354 - aluminum sensitivity - TO:0000354 - - - - - Sensitivity to aluminum content in the growth media. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Exceptional vigor of growth etc. in plants or in animal, resulting from cross breeding among inter or intra species. - plant_trait_ontology - HET - heterosis in f1 hybrid - hybrid vigor - TO:0000355 - heterosis - TO:0000355 - - - - - Exceptional vigor of growth etc. in plants or in animal, resulting from cross breeding among inter or intra species. - Gramene:pankaj_jaiswal - ICIS:1011 - - - - - - - - - - Causal agent: Cochliobolus miyabeanus (Bipolaris oryzae, Drechslera oryzae). Symptom: typical leaf spots are small, oval or circular and dark brown. Larger lesions usually have same color on the edges but have a pale (usually grayish) center. Most spots have a light yellow halo around the outer edge. - plant_trait_ontology - BS - TO:0000356 - brown spot disease resistance - TO:0000356 - - - - - Causal agent: Cochliobolus miyabeanus (Bipolaris oryzae, Drechslera oryzae). Symptom: typical leaf spots are small, oval or circular and dark brown. Larger lesions usually have same color on the edges but have a pale (usually grayish) center. Most spots have a light yellow halo around the outer edge. - Gramene:pankaj_jaiswal - ICIS:1105 - IRRI:SES - - - - - - - - - - A plant trait (TO:0000387) which is the growth (GO:0048590) and development (GO:0032502) of a plant anatomical entity (PO:0025131) or a constituent cellular component (GO:0005575). - jaiswalp - GO:0032502 - GO:0048590 - TO_GIT:248 - plant_trait_ontology - TO:0000357 - Growth and development traits are qualities of the development of the whole plant or plant parts. - plant growth and development trait - TO:0000357 - - - - - A plant trait (TO:0000387) which is the growth (GO:0048590) and development (GO:0032502) of a plant anatomical entity (PO:0025131) or a constituent cellular component (GO:0005575). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - plant_trait_ontology - FEMST - TO:0000358 - female sterility - TO:0000358 - - - - - - - - - - A flowering time trait which is the timing of the flowering (anthesis) of female flowers. - plant_trait_ontology - DTSLK - FEMFLW - FFLW - Female flower anthesis - Female flower flowering - days to silk - TO:0000359 - Ofetn influenced by the environemnt that includes, day light, temperature and geographic location. - female flowering - TO:0000359 - - - - - A flowering time trait which is the timing of the flowering (anthesis) of female flowers. - Gramene:pankaj_jaiswal - - - - - - - - - - Measure of growth or elongation rate of the leaf in a plant. - plant_trait_ontology - LFELRATE - leaf growth rate - TO:0000360 - leaf elongation rate - TO:0000360 - - - - - Measure of growth or elongation rate of the leaf in a plant. - Gramene:pankaj_jaiswal - - - - - - - - - - A shoot axis morphology trait (TO:0000739) which is the quality of a stem (PO:0009047). - TO_GIT:157 - core morphology trait - plant_trait_ontology - TO:0000361 - stem morphology trait - TO:0000361 - - - - - A shoot axis morphology trait (TO:0000739) which is the quality of a stem (PO:0009047). - Gramene:pankaj_jaiswal - PO:0009047 - TO:moorel - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000362 - rot disease - true - TO:0000362 - - - - - - - - - - true - TO:0000363 - - - - - - - - - - - - - - - - - - Changes monitored in leaf collar color. - plant_trait_ontology - CC - LFCCL - collar color - TO:0000364 - leaf collar color - TO:0000364 - - - - - Changes monitored in leaf collar color. - IRRI:SES - - - - - - - - - - A flowering time trait (TO:0002616) which is the timing of the flowering (anthesis) of male flowers. - plant_trait_ontology - MALEFLW - MFLW - male flower anthesis - male flower flowering - TO:0000365 - Often influenced by the environment that includes, daylight, temperature and geographic location. - male flowering - TO:0000365 - - - - - A flowering time trait (TO:0002616) which is the timing of the flowering (anthesis) of male flowers. - Gramene:pankaj_jaiswal - - - - - - - - - - Measure of time taken by the reproductive growth phase in a plant's life cycle. - plant_trait_ontology - RGTM - TO:0000366 - reproductive growth time - TO:0000366 - - - - - Measure of time taken by the reproductive growth phase in a plant's life cycle. - Gramene:pankaj_jaiswal - - - - - - - - - - The changes in the color of basal leaf sheath. - plant_trait_ontology - BALFSCL - BLSC - TO:0000367 - basal leaf sheath color - TO:0000367 - - - - - The changes in the color of basal leaf sheath. - ICIS:1306 - IRRI:SES - - - - - - - - - - plant_trait_ontology - SHELRATE - elongation of plant height - TO:0000368 - shoot elongation rate - TO:0000368 - - - - - - - - - - Measure of the vegetative growth phase time in a plant's life cycle. - plant_trait_ontology - VGTM - TO:0000369 - vegetative growth time - TO:0000369 - - - - - Measure of the vegetative growth phase time in a plant's life cycle. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf size (TO:0002637) trait which the width of a leaf (PO:0025034). - MaizeGDB_QTL:61714 - PATO:0000921 - TO_GIT:247 - plant_trait_ontology - LFWD - LW - lfwid - TO:0000370 - Actual measurements, in centimeters of the widest portion of the leaf. To be precise use the children terms leaf lamina width (TO:0002720) or 'leaf sheath width (TO:0002721). Refers to width (PATO:0000921) A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf width - TO:0000370 - - - - - A leaf size (TO:0002637) trait which the width of a leaf (PO:0025034). - ICIS:1308 - IRRI:SES - PO:0025034 - TO:cooperl - TO:moorel - - - - - lfwid - MaizeGDB_QTL:61714 - - - - - - - - - - A plant trait (TO:0000387) which is a harvestable product that is a plant anatomical entity (PO:0025131) or one or more constituent cellular components (GO:0005575) contained therein. - plant_trait_ontology - YLD - TO:0000371 - yield trait - TO:0000371 - - - - - A plant trait (TO:0000387) which is a harvestable product that is a plant anatomical entity (PO:0025131) or one or more constituent cellular components (GO:0005575) contained therein. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Ratio of amount of amylose to amylopectin content. - plant_trait_ontology - AMYAMYPCTRO - TO:0000372 - amylose to amylopectin ratio - TO:0000372 - - - - - Ratio of amount of amylose to amylopectin content. - Gramene:pankaj_jaiswal - - - - - - - - - - A reproductive shoot system morphology trait (TO:0000786) that is a quality of an inflorescence (PO:0009049). - TO:0000363 - TO:0000584 - TO:0000585 - TO_GIT:92 - TO_GIT:97 - Head morphology trait - plant_trait_ontology - inflorescence structure trait - TO:0000373 - inflorescence morphology trait - TO:0000373 - - - - - A reproductive shoot system morphology trait (TO:0000786) that is a quality of an inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - - - - - - - - - - plant_trait_ontology - BRKVIS - TO:0000374 - breakdown viscosity - TO:0000374 - - - - - - - - - - A grain length to width ratio (TO:0002731) which is determined from grain length and grain width on dehulled unpolished rice grain. - PATO:0000117 - PATO:0000122 - PATO:0000921 - plant_trait_ontology - BRWRRO - brown rice length to width ratio - TO:0000375 - Refer to width PATO:0000921: A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - brown rice length to width ratio - TO:0000375 - - - - - A grain length to width ratio (TO:0002731) which is determined from grain length and grain width on dehulled unpolished rice grain. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - plant_trait_ontology - CONVIS - TO:0000376 - consistency viscosity - TO:0000376 - - - - - - - - - - plant_trait_ontology - CKKEL - cooked kernel elongation - TO:0000377 - cooked grain elongation - TO:0000377 - - - - - - - - - - Causal agent: Monographella albescens (Microdochium oryzae). Symptoms: the lesions occurs mostly near leaf tips, but sometimes start at the margin of the blade and develops into large ellipsoid areas encircled by dark-brown, narrow bands accompanied by a light-brown halo. - plant_trait_ontology - LFSRS - LSc - TO:0000378 - leaf scald disease resistance - TO:0000378 - - - - - Causal agent: Monographella albescens (Microdochium oryzae). Symptoms: the lesions occurs mostly near leaf tips, but sometimes start at the margin of the blade and develops into large ellipsoid areas encircled by dark-brown, narrow bands accompanied by a light-brown halo. - Gramene:pankaj_jaiswal - ICIS:1110 - IRRI:SES - - - - - - - - - - plant_trait_ontology - CPVIS - TO:0000379 - cool paste viscosity - TO:0000379 - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000380 - planthopper - true - TO:0000380 - - - - - - - - - - The percentage of cracked dehulled grain with most of the size still intact. - plant_trait_ontology - CRKGRPCENT - fissured grain percentage - TO:0000381 - cracked grain percentage - TO:0000381 - - - - - The percentage of cracked dehulled grain with most of the size still intact. - Gramene:pankaj_jaiswal - - - - - - - - - - Measurements in grams of 1000 well-developed whole grains (seeds with the hull), dried to 13% moisture content, weight on a precision balance. - TO:0000533 - plant_trait_ontology - 1000-grain weight - TGRWT - TSDWT - thousand grain weight - thousand seed weight - TO:0000382 - 1000-seed weight - TO:0000382 - - - - - Measurements in grams of 1000 well-developed whole grains (seeds with the hull), dried to 13% moisture content, weight on a precision balance. - Gramene:pankaj_jaiswal - - - - - - - - - - Percentage opaque white area in the kernel belly. - plant_trait_ontology - GRBPCENTWHT - TO:0000383 - grain belly percent white - TO:0000383 - - - - - Percentage opaque white area in the kernel belly. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to nematode infestation as compared to the susceptible and/or the reference plants of the same species. - plant_trait_ontology - NDRS - TO:0000384 - nematode damage resistance - TO:0000384 - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to nematode infestation as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - - - - - - - - - - A fruit color (TO:0002617) trait which is the color of dehulled, milled grain, which does not have pericarp (PO:0009084). - PATO:0000014 - plant_trait_ontology - GRCL - MGRCL - TO:0000385 - For color of the dehulled grain, see pericarp color (TO:0000707). Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - milled grain color - TO:0000385 - - - - - A fruit color (TO:0002617) trait which is the color of dehulled, milled grain, which does not have pericarp (PO:0009084). - Gramene:pankaj_jaiswal - PO:0009084 - TO:moorel - - - - - - - - - - Causal agent: rice ragged stunt virus (RRSV). Symptoms: plants are stunted but remain dark green. Leaves are ragged and twisted. Vein swelling on leaf collar, leaf blades and leaf sheaths. - plant_trait_ontology - RSVRS - TO:0000386 - rice ragged stunt virus resistance - TO:0000386 - - - - - Causal agent: rice ragged stunt virus (RRSV). Symptoms: plants are stunted but remain dark green. Leaves are ragged and twisted. Vein swelling on leaf collar, leaf blades and leaf sheaths. - Gramene:pankaj_jaiswal - ICIS:1112 - IRRI:SES - - - - - - - - - - A measurable or observable characteristic of a cellular component (GO:0005575), biological process (GO:0008150) or molecular function (GO:0003674) that is part of, or has participant a plant anatomical entity (PO:0025131) and/or a plant structure development stage (PO:0009012). - jaiswalp - TO_GIT:52 - plant_trait_ontology - plant phenotype - plant quality - TO:0000387 - This includes physiological, molecular and biochemical traits as well. - plant trait - TO:0000387 - - - - - A measurable or observable characteristic of a cellular component (GO:0005575), biological process (GO:0008150) or molecular function (GO:0003674) that is part of, or has participant a plant anatomical entity (PO:0025131) and/or a plant structure development stage (PO:0009012). - GO:0003674 - GO:0005575 - GO:0008150 - Gramene:pankaj_jaiswal - PO:0009012 - PO:0025131 - TO:cooperl - - - - - - - - - - Yield of forage matter upon harvest. - plant_trait_ontology - FRGYLD - FY - straw yield - TO:0000388 - forage yield - TO:0000388 - - - - - Yield of forage matter upon harvest. - Gramene:pankaj_jaiswal - - - - - - - - - - Shows mendelian inheritance, caused by genetic modifications or mutations in the nuclear genome. - scale:6 - plant_trait_ontology - TO:0000389 - nuclear mediated male sterility - TO:0000389 - - - - - Shows mendelian inheritance, caused by genetic modifications or mutations in the nuclear genome. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Percentage opaque white area in the kernel core. - plant_trait_ontology - GRCPCENTWHT - TO:0000390 - grain core percent white - TO:0000390 - - - - - Percentage opaque white area in the kernel core. - Gramene:pankaj_jaiswal - - - - - - - - - - A seed morphology trait (TO:0000184) which is the size of a seed (PO:0009010). - PATO:0000117 - TO_GIT:183 - plant_trait_ontology - TO:0000391 - Seed size is determined by the ratio of the seed length to seed width and is a component of seed quality (TO:0000162). Seed size may be a qualitative measure or may be organized into categories ranging from small to medium to large. Refers to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - seed size - TO:0000391 - - - - - A seed morphology trait (TO:0000184) which is the size of a seed (PO:0009010). - Gramene:pankaj_jaiswal - ICIS:1302 - PO:0009010 - TO:cooperl - - - - - - - - - - A plant trait (TO:0000387) which is a measure of either the fertility or sterility, contributed by nonfunctional male and or female plant parts or their incompatible interaction. This also includes traits on seed setting behavior in the fruit (caryopsis) of a grass plant that can be assayed in terms of spikelet sterility or fertility. - plant_trait_ontology - TO:0000392 - sterility or fertility trait - TO:0000392 - - - - - A plant trait (TO:0000387) which is a measure of either the fertility or sterility, contributed by nonfunctional male and or female plant parts or their incompatible interaction. This also includes traits on seed setting behavior in the fruit (caryopsis) of a grass plant that can be assayed in terms of spikelet sterility or fertility. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000393 - yield and yield component - true - TO:0000393 - - - - - - - - - - Response by the plant in terms of sensitivity to sufficiently prolonged water deficit/scarcity or scanty water content in the soil or growth medium, that can cause damage to the plant. - plant_trait_ontology - dessication related trait - TO:0000394 - drought related trait - TO:0000394 - - - - - Response by the plant in terms of sensitivity to sufficiently prolonged water deficit/scarcity or scanty water content in the soil or growth medium, that can cause damage to the plant. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000395 - - - - - - - - - - A fruit yield trait (TO:0000871) that is the amount of grain. - TO_GIT:242 - plant_trait_ontology - GRYLD - Yld - TO:0000396 - In rice, the grain yield is often measured in kilograms per hectare at 14 percent moisture, if the experiment was done on a field trial. - grain yield trait - TO:0000396 - - - - - A fruit yield trait (TO:0000871) that is the amount of grain. - ICIS:1003 - IRRI:SES - TO:contributors - TO:cooperl - - - - - - - - - - A fruit size (TO:0002625) which is the size of a dehulled, milled grain without pericarp (PO:0009084). - plant_trait_ontology - GRSZ - TO:0000397 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - grain size - TO:0000397 - - - - - A fruit size (TO:0002625) which is the size of a dehulled, milled grain without pericarp (PO:0009084). - Gramene:pankaj_jaiswal - PO:0009084 - TO:moorel - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a whole plant (PO:0000003). - plant_trait_ontology - TO:0000398 - whole plant morphology trait - TO:0000398 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a whole plant (PO:0000003). - PO:0000003 - TO:cooperl - - - - - - - - - - - - - - - - - - A grain quality trait (TO:0000399) which is the thickness of a dehulled grain with a pericarp (PO:0009084). - TO_GIT:264 - plant_trait_ontology - GRTH - TO:0000399 - grain thickness - TO:0000399 - - - - - A grain quality trait (TO:0000399) which is the thickness of a dehulled grain with a pericarp (PO:0009084). - Gramene:pankaj_jaiswal - PO:0009084 - TO:moorel - - - - - - - - - - - - A lemma morphology trait (TO:1000023) which is the color of the sterile lemma (PO:0009040). - plant_trait_ontology - SLmC - STLEMCL - TO:0000400 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - sterile lemma color - TO:0000400 - - - - - - true - - - - - A lemma morphology trait (TO:1000023) which is the color of the sterile lemma (PO:0009040). - IRRI:SES - PATO:0000014 - PO:0009040 - TO:cooperl - TO:moorel - - - - - - - - - - A chemical stress sensitivity (TO:0000482) which is the tolerance exhibited by a plant or a group of plants (population) towards the plant growth hormone. - plant_trait_ontology - growth regulator sensitivity - plant hormone response - TO:0000401 - plant growth hormone sensitivity - TO:0000401 - - - - - A chemical stress sensitivity (TO:0000482) which is the tolerance exhibited by a plant or a group of plants (population) towards the plant growth hormone. - POC:Cooperl - - - - - - - - - - A grain width (TO:0000975) which is the width of the dehulled grain with pericarp (PO:0009084). - PATO:0000921 - TO_GIT:123 - plant_trait_ontology - DHULGRWD - GRWD - dehulled grain curved width - dehulled-grain width - width of grain without hull - TO:0000402 - Refer to width PATO:0000921: A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - dehulled grain width - TO:0000402 - - - - - A grain width (TO:0000975) which is the width of the dehulled grain with pericarp (PO:0009084). - Gramene:pankaj_jaiswal - PO:0009084 - TO:moorel - - - - - - - - - - Causal agent: Cnaphalocrosis medinalis, Marasmia patnalis. Symptoms: larvae consume the leaf tissue except the epidermis, causing typical white streaks. They create a leaf tube during later stages of feeding. Plant is susceptible and resistant check (if available) after every 10-test entries. Replicate the test three times, if seed is available. Determined by percentage of damaged and folded leaves. - plant_trait_ontology - LF - LFFRS - TO:0000403 - leaf-folder resistance - TO:0000403 - - - - - Causal agent: Cnaphalocrosis medinalis, Marasmia patnalis. Symptoms: larvae consume the leaf tissue except the epidermis, causing typical white streaks. They create a leaf tube during later stages of feeding. Plant is susceptible and resistant check (if available) after every 10-test entries. Replicate the test three times, if seed is available. Determined by percentage of damaged and folded leaves. - Gramene:pankaj_jaiswal - ICIS:1157 - IRRI:SES - - - - - - - - - - - - Extent of rooting from the nodes on a stem. - plant_trait_ontology - TO:0000404 - nodal rooting - TO:0000404 - - - - - Extent of rooting from the nodes on a stem. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Nymphula depunctalis. Symptoms: Larvae feed on leaf tissue, leaving only the papery upper epidermis. - plant_trait_ontology - CW - CWRS - float worm - hama putih (indonesian) - paddy caseworm - TO:0000405 - caseworm resistance - TO:0000405 - - - - - Causal agent: Nymphula depunctalis. Symptoms: Larvae feed on leaf tissue, leaving only the papery upper epidermis. - Gramene:pankaj_jaiswal - ICIS:1153 - IRRI:SES - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the percentage of shattered grains, determined by firmly grasping and pulling the hand over the panicle. - plant_trait_ontology - PNTH - Thr - TO:0000406 - panicle threshability - TO:0000406 - - - - - A panicle morphology trait (TO:0000847) which is the percentage of shattered grains, determined by firmly grasping and pulling the hand over the panicle. - ICIS:1008 - IRRI:SES - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000407 - hoppers - true - TO:0000407 - - - - - - - - - - plant_trait_ontology - HPVIS - TO:0000408 - hot paste viscosity - TO:0000408 - - - - - - - - - - plant_trait_ontology - PVIS - TO:0000409 - peak viscosity - TO:0000409 - - - - - - - - - - - - Total protein content of the polished rice. - plant_trait_ontology - POLRPROTCN - TO:0000410 - polished rice protein content - TO:0000410 - - - - - Total protein content of the polished rice. - Gramene:pankaj_jaiswal - - - - - - - - - - Ratio of length to width of the seed or fruit caryopsis with hull. - plant_trait_ontology - GRLGWDRO - SDLGWDRO - grain length to width ratio - TO:0000411 - seed length to width ratio - TO:0000411 - - - - - Ratio of length to width of the seed or fruit caryopsis with hull. - Gramene:pankaj_jaiswal - - - - - - - - - - Determined by deducting the peak viscosity from the cool paste viscosity. - plant_trait_ontology - SETBK - SETBKVIS - setback - TO:0000412 - setback viscosity - TO:0000412 - - - - - Determined by deducting the peak viscosity from the cool paste viscosity. - Gramene:pankaj_jaiswal37 - - - - - - - - - - Causal agent: Rice tungro bacilliform virus (RTBV) and rice tungro spherical virus (RTSV). The disease is transmitted by the green leafhopper Nephotettix spp. Symptoms: Yellow-to-yellow orange leaves, stunting and slightly reduced tillering. - plant_trait_ontology - RTD - RTVRS - TO:0000413 - rice tungro virus resistance - TO:0000413 - - - - - Causal agent: Rice tungro bacilliform virus (RTBV) and rice tungro spherical virus (RTSV). The disease is transmitted by the green leafhopper Nephotettix spp. Symptoms: Yellow-to-yellow orange leaves, stunting and slightly reduced tillering. - Gramene:pankaj_jaiswal - ICIS:1113 - IRRI:SES - web:http//www.fao.org/inpho/vlibrary/t0567e/T0567E03.htm - - - - - - - - - - - - plant_trait_ontology - WHTRPROTCN - polished rice protein - protein content for polished rice - TO:0000414 - white rice protein content - TO:0000414 - - - - - - - - - - Abortion at bi-nucleate stage of microspore development. - plant_trait_ontology - BNUABR - TO:0000415 - An example is CMS-HL in rice. - aborted bi-nucleate stage - TO:0000415 - - - - - Abortion at bi-nucleate stage of microspore development. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Abortion of the embryo sac leading to female sterility. - plant_trait_ontology - EBSABR - TO:0000416 - embryo sac abortion - TO:0000416 - - - - - Abortion of the embryo sac leading to female sterility. - Gramene:pankaj_jaiswal - - - - - - - - - - A lemma and palea morphology trait (TO:0000079) which is the extent of pubescence (hairs) on the lemma (PO:0009037) and palea (PO:0009038). - PATO:0001320 - plant_trait_ontology - LmPb - TO:0000417 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. - lemma and palea pubescence - TO:0000417 - - - - - A lemma and palea morphology trait (TO:0000079) which is the extent of pubescence (hairs) on the lemma (PO:0009037) and palea (PO:0009038). - IRRI:SES - PO:0009037 - PO:0009038 - TO:moorel - - - - - - - - - - Causal agent: Gibberella fujikuroi. Symptoms: the plant elongates abnormally, has few tillers and usually dies before producing grains. - plant_trait_ontology - BKRS - Bak - TO:0000418 - bakanae disease resistance - TO:0000418 - - - - - Causal agent: Gibberella fujikuroi. Symptoms: the plant elongates abnormally, has few tillers and usually dies before producing grains. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - A leaf morphology trait (TO:0000748) which is a quality of a vascular leaf (PO:0009025). - jaiswalp - TO_GIT:60 - plant_trait_ontology - TO:0000419 - vascular leaf morphology trait - TO:0000419 - - - - - A leaf morphology trait (TO:0000748) which is a quality of a vascular leaf (PO:0009025). - Gramene:pankaj_jaiswal - PO:0009025 - TO:cooperl - - - - - - - - - - - - plant_trait_ontology - TO:0000420 - fertility related trait - TO:0000420 - - - - - - - - - - plant_trait_ontology - POFRT - TO:0000421 - pollen fertility - TO:0000421 - - - - - - - - - - Causal agent: Sphaerulina oryzina (Cercospora janseana). - plant_trait_ontology - NBLFSPRS - NBLS - TO:0000422 - narrow brown leaf spot disease resistance - TO:0000422 - - - - - Causal agent: Sphaerulina oryzina (Cercospora janseana). - Gramene:pankaj_jaiswal - ICIS:1111 - IRRI:SES - - - - - - - - - - Causal agent: Orseolia oryzae. For the field test to be valid more than 60% of the plants should be affected with not less than 15% silver shoot in the susceptible check. Similarly, 60% of the plants in susceptible check should show silver shoots under green house tests. If any of the test entry in the field evaluation exhibits damage less than 10%, on plant basis, rate it on scale-0, since such a damage could be due to other reasons. Monitor at growth stage 2-5. - plant_trait_ontology - GM - GMRS - TO:0000423 - gall midge resistance - TO:0000423 - - - - - Causal agent: Orseolia oryzae. For the field test to be valid more than 60% of the plants should be affected with not less than 15% silver shoot in the susceptible check. Similarly, 60% of the plants in susceptible check should show silver shoots under green house tests. If any of the test entry in the field evaluation exhibits damage less than 10%, on plant basis, rate it on scale-0, since such a damage could be due to other reasons. Monitor at growth stage 2-5. - ICIS:1155 - IRRI:SES - - - - - - - - - - Causal agent: Nilparvata lugens (also Nilaparvata lugens). Symptoms: partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting to death of plants. Infested areas in the field may be patchy. - plant_trait_ontology - BPH - BPHRS - TO:0000424 - brown planthopper resistance - TO:0000424 - - - - - Causal agent: Nilparvata lugens (also Nilaparvata lugens). Symptoms: partial to pronounced yellowing and increasing severity of stunting. Extreme signs are wilting to death of plants. Infested areas in the field may be patchy. - Gramene:pankaj_jaiswal - ICIS:1152 - IRRI:SES - - - - - - - - - - plant_trait_ontology - ANTCAB - anther culture response - TO:0000425 - anther culturability - TO:0000425 - - - - - - - - - - - - - - - - - - A stem internode morphology trait (TO:0000756) which is the color of the stem internode (PO:0020142). - TO_GIT:317 - TO_GIT:64 - plant_trait_ontology - CmlC - INCL - culm internode color - TO:0000426 - stem internode color - TO:0000426 - - - - - A stem internode morphology trait (TO:0000756) which is the color of the stem internode (PO:0020142). - ICIS:1064 - IRRI:SES - TO:cooperl - - - - - - - - - - The angle of the culm with respect to the ground surface in a grass plant. - plant_trait_ontology - CULMAG - CmA - TO:0000427 - culm angle - TO:0000427 - - - - - The angle of the culm with respect to the ground surface in a grass plant. - IRRI:SES - - - - - - - - - - plant_trait_ontology - CAIND - TO:0000428 - callus induction - TO:0000428 - - - - - - - - - - Plant sensitivity observed in response to different concentrations of salt in the growth medium. - plant_trait_ontology - SALTSN - Sal - saline sensitivity - TO:0000429 - salt sensitivity - TO:0000429 - - - - - Plant sensitivity observed in response to different concentrations of salt in the growth medium. - ICIS:1214 - IRRI:SES - - - - - - - - - - Rate of germination of the seed. - plant_trait_ontology - GERMRATE - GERMSP - germination speed - TO:0000430 - germination rate - TO:0000430 - - - - - Rate of germination of the seed. - Gramene:pankaj_jaiswal - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) that is the length of an ear infructescence (PO:0025597) from base to tip. - MaizeGDB_QTL:78112 - PATO:0000122 - TO_GIT:132 - ear infructescence length - plant_trait_ontology - EARLG - earln - TO:0000431 - - Refers to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. In maize, this is measured in centimeters. - ear length - TO:0000431 - - - - - An ear infructescence morphology trait (TO:0000976) that is the length of an ear infructescence (PO:0025597) from base to tip. - TO:cooperl - - - - - earln - MaizeGDB_QTL:78112 - - - - - - - - - - Response by the plant in terms of sensitivity to temperature stress. - plant_trait_ontology - TO:0000432 - temperature response trait - TO:0000432 - - - - - Response by the plant in terms of sensitivity to temperature stress. - Gramene:pankaj_jaiswal - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) that is the diameter of an ear infructescence (PO:0025597). - MaizeGDB_QTL:78113 - PATO:0001334 - TO_GIT:132 - ear infructescence diameter - plant_trait_ontology - EARDIA - eard - TO:0000433 - - Refers to diameter (PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. In maize, this is measured in centimeters. - ear diameter - TO:0000433 - - - - - An ear infructescence morphology trait (TO:0000976) that is the diameter of an ear infructescence (PO:0025597). - Gramene:pankaj_jaiswal37 - TO:cooperl - - - - - eard - MaizeGDB_QTL:78113 - - - - - - - - - - plant_trait_ontology - RTACT - TO:0000434 - root activity - TO:0000434 - - - - - - - - - - plant_trait_ontology - SDLNG - TO:0000435 - seed longevity - TO:0000435 - - - - - - - - - - Determined by counting the filled and unfilled spikelets of the bagged grass inflorescence. - plant_trait_ontology - SPKST - TO:0000436 - spikelet sterility - TO:0000436 - - - - - Determined by counting the filled and unfilled spikelets of the bagged grass inflorescence. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - In plants, it represents the incompetence of the pollen to fertilize the ovum. Reasons could be non-viable pollen, incompatibility, pollen abortion, toxicity, genetic etc. Usually determined by either the pollen sterility or spikelet fertility (percent seed set). - plant_trait_ontology - MALEST - degree of male sterility of male sterile lines - male sterility measure - TO:0000437 - male sterility - TO:0000437 - - - - - In plants, it represents the incompetence of the pollen to fertilize the ovum. Reasons could be non-viable pollen, incompatibility, pollen abortion, toxicity, genetic etc. Usually determined by either the pollen sterility or spikelet fertility (percent seed set). - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000438 - - - - - - - - - - The resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a fungal pathogen infection as compared to the susceptible and/or the reference plants of the same species. - plant_trait_ontology - TO:0000439 - It represents the damage done by the diease and/or the pathogen to the plant. The damage is a direct measure of resistance to the particular fungal strain causing the disease. - fungal disease resistance - TO:0000439 - - - - - The resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a fungal pathogen infection as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of grains (full grain with hull) present in one plant. - plant_trait_ontology - GRNBPPT - TO:0000440 - grain number per plant - TO:0000440 - - - - - Number of grains (full grain with hull) present in one plant. - Gramene:pankaj_jaiswal37 - - - - - - - - - - plant_trait_ontology - TO:0000441 - humidity related trait - TO:0000441 - - - - - - - - - - Fresh weight of the plant. - plant_trait_ontology - PLFWT - TO:0000442 - plant fresh weight - TO:0000442 - - - - - Fresh weight of the plant. - Gramene:pankaj_jaiswal37 - - - - - - - - - - - - - - An infructescence yield trait (TO:0000936) that is the number of ears (ear infructescence; PO:0025597) on a plant or the average number present in population. - TO_GIT:244 - plant_trait_ontology - EARNB - ENO - ENP - ear number per plant - ears per 10 plants - ears per plant - TO:0000443 - To be used only for traits from maize. - ear infructescence number - TO:0000443 - - - - - An infructescence yield trait (TO:0000936) that is the number of ears (ear infructescence; PO:0025597) on a plant or the average number present in population. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - plant_trait_ontology - TO:0000444 - parasitic weed - TO:0000444 - - - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the number of seeds (PO:0009010) in a fruit (PO:0009001). - TO:0000139 - plant_trait_ontology - SDNB - TO:0000445 - fruit seed number - TO:0000445 - - - - - A fruit morphology trait (TO:0002629) which is the number of seeds (PO:0009010) in a fruit (PO:0009001). - Gramene:pankaj_jaiswal - PO:0009001 - PO:0009010 - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the drying of a leaf (PO:0025034). - plant_trait_ontology - LFDRY - TO:0000446 - May be a response to abiotic stress. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf drying - TO:0000446 - - - - - A leaf morphology trait (TO:0000748) which is the drying of a leaf (PO:0025034). - PO:0025034 - TO:cooperl - TO:moorel - - - - - - - - - - Determined by counting the number of spikelets filled with grain in one inflorescence (panicle). - TO:0000438 - FGRNB - filled grain number per panicle - number of grains per panicle - plant_trait_ontology - FILGRNB - GRNBPPN - filled fruit number - grain number per panicle (sensu Oryza) - TO:0000447 - Another trait seed number (TO:0000445) is directly associated with it. - filled grain number - TO:0000447 - - - - - Determined by counting the number of spikelets filled with grain in one inflorescence (panicle). - Gramene:pankaj_jaiswal - - - - - - - - - - Determined by counting the percent spikelets filled with grain in one grass inflorescence (panicle) or plant. - plant_trait_ontology - FGRPCENT - Filled grain percent per panicle - TO:0000448 - filled grain percentage - TO:0000448 - - - - - Determined by counting the percent spikelets filled with grain in one grass inflorescence (panicle) or plant. - Gramene:pankaj_jaiswal - - - - - - - - - - Average weight of dehulled grains per plant. - plant_trait_ontology - GRYLDPPL - TO:0000449 - grain yield per plant - TO:0000449 - - - - - Average weight of dehulled grains per plant. - Gramene:pankaj_jaiswal - - - - - - - - - - Average weight of dehulled grains per panicle. - GRYLDPPN - plant_trait_ontology - TO:0000450 - grain yield per panicle - TO:0000450 - - - - - Average weight of dehulled grains per panicle. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A ratio of number of large vascular bundles present in the spikelets to the number of spikelets in a grass inflorescence. - plant_trait_ontology - LVBNBSPKNBRO - TO:0000451 - large vascular bundle number to spikelet number ratio - TO:0000451 - - - - - A ratio of number of large vascular bundles present in the spikelets to the number of spikelets in a grass inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - A ratio of leaf area to the number of spikelets in a grass inflorescence. - plant_trait_ontology - LFARSPKNBRO - TO:0000452 - Often measured using the flag leaf. - leaf area to spikelet number ratio - TO:0000452 - - - - - A ratio of leaf area to the number of spikelets in a grass inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - A ratio of number of tiller bearing the panicles to the total number of tillers in rice. - plant_trait_ontology - PNTIRO - panicle tiller ratio - productive tiller percent - TO:0000453 - Not all the tillers bear panicle. - panicle to tiller ratio - TO:0000453 - - - - - A ratio of number of tiller bearing the panicles to the total number of tillers in rice. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agents: Chilo suppressalis (striped), C. polychrysus (dark headed), Rupela albinella (South American white), Scirpophaga incertulas (yellow), S innotata (white), Sesamia inferens (pink), Maliarpha separatella (african whiteheads), Diopsis macrophthalma (stalked-eyed fly), and several other species. - plant_trait_ontology - CULMBRRS - SB - TO:0000454 - stem borer resistance - TO:0000454 - - - - - Causal agents: Chilo suppressalis (striped), C. polychrysus (dark headed), Rupela albinella (South American white), Scirpophaga incertulas (yellow), S innotata (white), Sesamia inferens (pink), Maliarpha separatella (african whiteheads), Diopsis macrophthalma (stalked-eyed fly), and several other species. - Gramene:pankaj_jaiswal - ICIS:1164 - IRRI:SES - - - - - - - - - - An infructescence morphology trait (TO:0000920) which is the percent of seeds (PO:0009010) set in an infructescence (PO:0006342). - plant_trait_ontology - SDSPCENT - percent seed set - TO:0000455 - seed set percent - TO:0000455 - - - - - - - - - - - - A spikelet morphology trait (TO:0000657) which is the average number of spikelets (PO:0009051) in one or more inflorescence (PO:0009049) (e.g. rice panicle) found in a plant or on all plants of a study. - plant_trait_ontology - SPKNB - number of spikelets per panicle - spikelet number per panicle - TO:0000456 - spikelet number - TO:0000456 - - - - - A spikelet morphology trait (TO:0000657) which is the average number of spikelets (PO:0009051) in one or more inflorescence (PO:0009049) (e.g. rice panicle) found in a plant or on all plants of a study. - Gramene:pankaj_jaiswal - PO:0009049 - PO:0009051 - TO:moorel - - - - - - - - - - plant_trait_ontology - TBIOMYLD - dry matter yield - total dry weight - TO:0000457 - total biomass yield - TO:0000457 - - - - - - - - - - Scores are taken after 10 days following soaking rain or watering- Indicate the degree of stress before recovery. - plant_trait_ontology - DRR - TO:0000458 - drought recovery - TO:0000458 - - - - - Scores are taken after 10 days following soaking rain or watering- Indicate the degree of stress before recovery. - IRRI:SES - - - - - - - - - - - - Length of the root epidermal cell length. - plant_trait_ontology - RTEPCELLG - TO:0000459 - root epidermis cell length - TO:0000459 - - - - - Length of the root epidermal cell length. - Gramene:pankaj_jaiswal37 - - - - - - - - - - plant_trait_ontology - light intensity response - TO:0000460 - light intensity sensitivity - TO:0000460 - - - - - - - - - - plant_trait_ontology - BAVEGPH - TO:0000461 - basic vegetative phase - TO:0000461 - - - - - - - - - - - - Is an indication of gelatinization temperature. Observed by placing six milled-grains/kernels in 10ml 1.7% KOH in a shallow container and arrange them so that they do not touch. Let them stand for 23hrs at 30C temperature and score for spreading. Measure for Alkali digestion is inversely proportional to the gelatinization temperature, e.g. if alkali digestion is low, the gelatinization temperature is high. - plant_trait_ontology - GELTZTMP - TO:0000462 - gelatinization temperature - TO:0000462 - - - - - Is an indication of gelatinization temperature. Observed by placing six milled-grains/kernels in 10ml 1.7% KOH in a shallow container and arrange them so that they do not touch. Let them stand for 23hrs at 30C temperature and score for spreading. Measure for Alkali digestion is inversely proportional to the gelatinization temperature, e.g. if alkali digestion is low, the gelatinization temperature is high. - Gramene:pankaj_jaiswal - ICIS:1256 - IRRI:SES - - - - - - - - - - A difference of the average number of days between the maize tassel flowering and the first visible silk (stigma) on the maize ear. - MaizeGDB_QTL:62044 - plant_trait_ontology - ANTSKIT - ASI - FLWSLKINTER - TO:0000463 - anthesis silking interval - TO:0000463 - - - - - A difference of the average number of days between the maize tassel flowering and the first visible silk (stigma) on the maize ear. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - ALBPTLDFQ - TO:0000464 - albino plantlet differentiation frequency - TO:0000464 - - - - - - - - - - A biochemical trait (TO:0000277) that is the amount of a particular mineral or ion constituent occurring in a plant anatomical entity (PO:0025131). - jaiswalp - plant_trait_ontology - TO:0000465 - May be measured in a dry mass or in a fresh tissue. - mineral and ion content trait - TO:0000465 - - - - - A biochemical trait (TO:0000277) that is the amount of a particular mineral or ion constituent occurring in a plant anatomical entity (PO:0025131). - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of carbon present in the dry mass. - plant_trait_ontology - CBCN - TO:0000466 - carbon content - TO:0000466 - - - - - Amount of carbon present in the dry mass. - Gramene:pankaj_jaiswal - - - - - - - - - - Stability of the cell membrane under the impact of temperature (heat) and water deficit stress. - plant_trait_ontology - CELMBSTB - TO:0000467 - The trait is often observed in plants as a measure of drought and heat tolerance by determining the amount of solutes/electrolyte leaked from the cell. - cell membrane stability - TO:0000467 - - - - - Stability of the cell membrane under the impact of temperature (heat) and water deficit stress. - Gramene:pankaj_jaiswal - web:http://www.plantstress.com/methods/CMS_method.htm - - - - - - - - - - Causal agent: Magnaporthe grisea. Symptoms: Can affect either or both the leaf and panicles. - plant_trait_ontology - Bl - LFBLRS - TO:0000468 - leaf blast disease resistance - TO:0000468 - - - - - Causal agent: Magnaporthe grisea. Symptoms: Can affect either or both the leaf and panicles. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - Number of days required from seeding to seed/grain ripening . - plant_trait_ontology - DTMT - Mat - TO:0000469 - days to maturity - TO:0000469 - - - - - Number of days required from seeding to seed/grain ripening . - ICIS:1012 - IRRI:SES - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of a vascular tissue and its parts. - plant_trait_ontology - TO:0000470 - vascular tissue morphology trait - TO:0000470 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of a vascular tissue and its parts. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Its the fraction of number of penetrated roots over the total number of roots. - plant_trait_ontology - RTPNID - TO:0000471 - root penetration index - TO:0000471 - - - - - Its the fraction of number of penetrated roots over the total number of roots. - Gramene:jcl - Gramene:pankaj_jaiswal - - - - - - - - - - - - Number of vascular bundles present in a plant part. - plant_trait_ontology - VBNB - TO:0000472 - vascular bundle number - TO:0000472 - - - - - Number of vascular bundles present in a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Measurement of extent of grain shattering, which depends on development of abscission zone. This trait often refers to shattering or the premature or ease of shedding of the grass fruit called caryopsis from the inflorescence. - plant_trait_ontology - GRSH - caryopsis shattering - TO:0000473 - grain shattering - TO:0000473 - - - - - Measurement of extent of grain shattering, which depends on development of abscission zone. This trait often refers to shattering or the premature or ease of shedding of the grass fruit called caryopsis from the inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - Angle of opening of glumes is measured on each floret, assessment based on mean angle of glume opening. - plant_trait_ontology - glume angle - opening of glume of male sterile lines - TO:0000474 - glume opening - TO:0000474 - - - - - Angle of opening of glumes is measured on each floret, assessment based on mean angle of glume opening. - Gramene:pankaj_jaiswal - IRRI:SES - - - - - - - - - - plant_trait_ontology - ADVRTTH - TO:0000475 - adventitious root thickness - TO:0000475 - - - - - - - - - - A metabolite content trait (TO:0000281) which is the amount of plant hormone (CHEBI:37848) in a plant structure (PO:0009011). - CHEBI:37848 - plant_trait_ontology - TO:0000476 - growth hormone content - TO:0000476 - - - - - A metabolite content trait (TO:0000281) which is the amount of plant hormone (CHEBI:37848) in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Magnaporthe grisea (Pyricularia oryzae). Symptoms are dark necrotic lesions covering partially or completely around the panicle base (node) or the uppermost internode or the lower part. - plant_trait_ontology - PB - PNBLRS - TO:0000477 - panicle blast disease resistance - TO:0000477 - - - - - Causal agent: Magnaporthe grisea (Pyricularia oryzae). Symptoms are dark necrotic lesions covering partially or completely around the panicle base (node) or the uppermost internode or the lower part. - Gramene:pankaj_jaiswal - ICIS:1119 - IRRI:SES - - - - - - - - - - Measures the growth hormone concentration in a plant or plant part. - plant_trait_ontology - ABA concentration - ABACONC - abscisic acid accumulation - abscisic acid content - TO:0000478 - abscisic acid concentration - TO:0000478 - - - - - Measures the growth hormone concentration in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Plant sensitivity to an acidic (pH<7) growth media. - plant_trait_ontology - ADSN - TO:0000479 - acid sensitivity - TO:0000479 - - - - - Plant sensitivity to an acidic (pH<7) growth media. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A growth media composition sensitivity (TO:0000238) which is the plant's response to an excess or deficient amount of the macro or micronutrient in the growth medium (soil/culture media). - plant_trait_ontology - nutrient deficiency - TO:0000480 - nutrient sensitivity - TO:0000480 - - - - - A growth media composition sensitivity (TO:0000238) which is the plant's response to an excess or deficient amount of the macro or micronutrient in the growth medium (soil/culture media). - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Plant sensitivity to an alkali (pH>7) growth media. - plant_trait_ontology - ALKSN - TO:0000481 - alkali sensitivity - TO:0000481 - - - - - Plant sensitivity to an alkali (pH>7) growth media. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Response by the plant in terms of resistivity or senility to chemical stress. - plant_trait_ontology - TO:0000482 - chemical stress sensitivity - TO:0000482 - - - - - Response by the plant in terms of resistivity or senility to chemical stress. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Measure of the seed's germination ability at sub-permissive temperature levels. - plant_trait_ontology - GERMABITMP - germination ability at low temperature - TO:0000483 - germinability at low temperature - TO:0000483 - - - - - Measure of the seed's germination ability at sub-permissive temperature levels. - Gramene:pankaj_jaiswal - - - - - - - - - - A seed morphology trait (TO:0000184) which is the shape of a seed (PO:0009010). - PATO:0000052 - TO_GIT:193 - plant_trait_ontology - SDSHP - TO:0000484 - Seed shape can be a component of seed quality (TO:0000162). Refers to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - seed shape - TO:0000484 - - - - - A seed morphology trait (TO:0000184) which is the shape of a seed (PO:0009010). - Gramene:pankaj_jaiswal - PO:0009010 - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0000485 - sterility related trait - TO:0000485 - - - - - - - - - - A seed morphology trait (TO:0000184) which is the color of a seed (PO:0009010). - PATO:000014 - TO_GIT:192 - plant_trait_ontology - SDCL - TO:0000486 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. In a seed this can be measured on the seed coat or the inside parts of a seed. - seed color - TO:0000486 - - - - - A seed morphology trait (TO:0000184) which is the color of a seed (PO:0009010). - Gramene:pankaj_jaiswal - PO:0009019 - TO:moorel - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is the color of an endosperm (PO:0009089). - PATO:0000014 - TO_GIT:133 - plant_trait_ontology - ENDCL - TO:0000487 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - endosperm color - TO:0000487 - - - - - An endosperm morphology trait (TO:0000575) which is the color of an endosperm (PO:0009089). - Gramene:pankaj_jaiswal - PO:0009089 - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0000488 - seed composition quality trait - TO:0000488 - - - - - - - - - - plant_trait_ontology - TO:0000489 - carbohydrate composition related trait - TO:0000489 - - - - - - - - - - A seed composition based quality trait (TO:0000488) which is the amount of protein (CHEBI_36080) in a seed (PO:0009010). - plant_trait_ontology - TO:0000490 - seed protein composition trait - TO:0000490 - - - - - - - - - - plant_trait_ontology - TO:0000491 - fat and essential oil composition related trait - TO:0000491 - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the variation in shapes and forms of a leaf (PO:0025034). - PATO:0000052 - plant_trait_ontology - LFSHP - TO:0000492 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf shape - TO:0000492 - - - - - A leaf morphology trait (TO:0000748) which is the variation in shapes and forms of a leaf (PO:0025034). - Gramene:pankaj_jaiswal - PO:0025034 - TO:cooperl - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the composition of a leaf (PO:0025034). - plant_trait_ontology - TO:0000493 - If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf composition trait - TO:0000493 - - - - - A leaf morphology trait (TO:0000748) which is the composition of a leaf (PO:0025034). - PO:0025034 - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0000494 - pigment content - TO:0000494 - - - - - - - - - - Measures the chlorophyll content in a green tissue. Includes both chlorophyll-a and chlorophyll-b. Chlorophyll is the green pigment found in plants. - plant_trait_ontology - CHLCN - TO:0000495 - Chlorophyll is the principal photoreceptor in photosynthesis, the light-driven process in which carbon dioxide is fixed to yield carbohydrates and oxygen. Chlorophyll is a cyclic tetrapyrolle, similar in structure to the heme group of globins (hemoglobin, myoglobin) and cytochromes. Chlorophyll differs from heme in a few major respects, most notably that the central metal ion in chlorophyll is magnesium while that in heme is iron. - chlorophyll content - TO:0000495 - - - - - Measures the chlorophyll content in a green tissue. Includes both chlorophyll-a and chlorophyll-b. Chlorophyll is the green pigment found in plants. - Gramene:pankaj_jaiswal - - - - - - - - - - - - The carotenoid content in a plant or plant part. Includes naturally occurring tetra terpenes that are synthesized only in plants. - plant_trait_ontology - CRTCN - TO:0000496 - carotenoid content - TO:0000496 - - - - - - - - - - plant_trait_ontology - RF - TO:0000497 - fertility restoration trait - TO:0000497 - - - - - - - - - - Describes the extent of female fertility restoration in terms of percent seed set. - plant_trait_ontology - FEMRF - TO:0000498 - female fertility restoration trait - TO:0000498 - - - - - Describes the extent of female fertility restoration in terms of percent seed set. - Gramene:pankaj_jaiswal - - - - - - - - - - A reproductive shoot system morphology trait (TO:0000786) which is a quality of a flower (PO:0009046). - TO_GIT:57 - plant_trait_ontology - TO:0000499 - flower morphology trait - TO:0000499 - - - - - A reproductive shoot system morphology trait (TO:0000786) which is a quality of a flower (PO:0009046). - Gramene:pankaj_jaiswal - PO:0009046 - POC:cooperl - - - - - - - - - - true - TO:0000500 - - - - - - - - - - - - A spikelet morphology trait (TO:0000657) which is the weight of a spikelet (PO:0009051). - PATO:0000128 - plant_trait_ontology - SPKWT - TO:0000501 - Refer to weight (PATO:0000128): A physical quality inhering in a bearer that has mass near a gravitational body. - spikelet weight - TO:0000501 - - - - - A spikelet morphology trait (TO:0000657) which is the weight of a spikelet (PO:0009051). - Gramene:pankaj_jaiswal - PO:0009051 - TO:moorel - - - - - - - - - - Resistance to the KClO3 salt content in the growth medium. - plant_trait_ontology - KCLO3RS - KClO3 resistance - TO:0000502 - potassium chlorate resistance - TO:0000502 - - - - - Resistance to the KClO3 salt content in the growth medium. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf rolling trait (TO:0000085) which is the measure of time taken by the leaf to roll completely under drought or water stress. - plant_trait_ontology - LFRLTM - TO:0000503 - leaf rolling time - TO:0000503 - - - - - A leaf rolling trait (TO:0000085) which is the measure of time taken by the leaf to roll completely under drought or water stress. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the leaf surface temperature. - plant_trait_ontology - LFTMP - TO:0000504 - If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf temperature - TO:0000504 - - - - - A leaf morphology trait (TO:0000748) which is the leaf surface temperature. - Gramene:pankaj_jaiswal - TO:cooperl - TO:moorel - - - - - - - - - - A leaf morphology trait (TO:0000505) which is the weight of a leaf (PO:0025034). - plant_trait_ontology - LFWT - TO:0000505 - If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf weight - TO:0000505 - - - - - A leaf morphology trait (TO:0000505) which is the weight of a leaf (PO:0025034). - Gramene:pankaj_jaiswal - TO:cooperl - TO:moorel - - - - - - - - - - It is a measure of reduced net ammonium production in response to the receipt of photosynthate. - plant_trait_ontology - NIRCYC - nitrogen conservation - TO:0000506 - nitrogen recycling - TO:0000506 - - - - - It is a measure of reduced net ammonium production in response to the receipt of photosynthate. - Gramene:pankaj_jaiswal - - - - - - - - - - The ability of the plant to adust the osmotic potential under stress conditions. - plant_trait_ontology - OSADJCAP - TO:0000507 - The main role of osmotic adjustment in the plant is to assist in the maintenance of turgor and volume as organs lose water during desiccation, i.e. to provide dehydration tolerance. Often determined by relative water or the amount of solute accumulated at a given water potential. - osmotic adjustment capacity - TO:0000507 - - - - - The ability of the plant to adust the osmotic potential under stress conditions. - Gramene:pankaj_jaiswal - - - - - - - - - - Average maximum length of the root of a plant in a study that have penetrated to a predetermined soil depth. - plant_trait_ontology - PENRTLG - TO:0000508 - penetrated root length - TO:0000508 - - - - - Average maximum length of the root of a plant in a study that have penetrated to a predetermined soil depth. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000509 - - - - - - - - - - A ratio of penetrated to total number of roots in a plant. - plant_trait_ontology - PENTRTRO - TO:0000510 - penetrated to total root ratio - TO:0000510 - - - - - A ratio of penetrated to total number of roots in a plant. - Gramene:pankaj_jaiswal - - - - - - - - - - The total phosphorus ion uptake measured in a plant or a plant part. - plant_trait_ontology - PHOUP - TO:0000511 - phosphorus uptake - TO:0000511 - - - - - The total phosphorus ion uptake measured in a plant or a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Percent of plants survived under submerged conditions. - plant_trait_ontology - PTSPCENTSUB - TO:0000512 - plant survival percentage under submergence - TO:0000512 - - - - - Percent of plants survived under submerged conditions. - Gramene:pankaj_jaiswal - - - - - - - - - - The total potassium ion concentration measured in a plant or a plant part or plant extract. - plant_trait_ontology - KCONC - TO:0000513 - potassium concentration - TO:0000513 - - - - - The total potassium ion concentration measured in a plant or a plant part or plant extract. - Gramene:pankaj_jaiswal - - - - - - - - - - The total potassium ion uptake measured in a plant or a plant part. - plant_trait_ontology - KUP - TO:0000514 - potassium uptake - TO:0000514 - - - - - The total potassium ion uptake measured in a plant or a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - A vigor trait (TO:0000250) that is the increase in aboveground biomass in a defined period of time. - TO_GIT:418 - plant_trait_ontology - RELGRATE - TO:0000515 - Relative growth rate may be calculated in various ways, usually as a rate of growth compared to the amount of starting biomass. In some cases, it may be expressed as a percentage. - relative growth rate - TO:0000515 - - - - - A vigor trait (TO:0000250) that is the increase in aboveground biomass in a defined period of time. - Gramene:pankaj_jaiswal - ISBN: 9780044453734 - TO:Laurel_Cooper - - - - - - - - - - The relative length of the root determined after a given treatment as compared to the one determined under normal conditions. - plant_trait_ontology - RELRTLG - TO:0000516 - relative root length - TO:0000516 - - - - - The relative length of the root determined after a given treatment as compared to the one determined under normal conditions. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Elongation of the shoot under submergence condition against a reference without submergence. - plant_trait_ontology - RELSHELSUB - TO:0000517 - relative shoot elongation under submergence - TO:0000517 - - - - - Elongation of the shoot under submergence condition against a reference without submergence. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000518 - - - - - - - - - - It is calculated from the deepest soil layer where roots were present and the longest root measured in the layer. - maximum rooting depth - plant_trait_ontology - RTDP - TO:0000519 - rooting depth - TO:0000519 - - - - - It is calculated from the deepest soil layer where roots were present and the longest root measured in the layer. - Gramene:pankaj_jaiswal - PMID:12582650 - - - - - - - - - - The rate of closure of stomata due to stress or coupled to the rate of photosynthesis and/or transpiration. - plant_trait_ontology - STOCSRRATE - TO:0000520 - stomatal closure rate - TO:0000520 - - - - - The rate of closure of stomata due to stress or coupled to the rate of photosynthesis and/or transpiration. - Gramene:pankaj_jaiswal - - - - - - - - - - Average time taken for closure of stomata due to stress or coupled to the rate of photosynthesis and/or transpiration. - plant_trait_ontology - STOCSRTM - TO:0000521 - stomatal closure time - TO:0000521 - - - - - Average time taken for closure of stomata due to stress or coupled to the rate of photosynthesis and/or transpiration. - Gramene:pankaj_jaiswal - - - - - - - - - - It is a numerical measure of the maximum rate of passage of either water vapour or carbon dioxide through the stomata. - plant_trait_ontology - STOCOND - TO:0000522 - stomatal conductance - TO:0000522 - - - - - It is a numerical measure of the maximum rate of passage of either water vapour or carbon dioxide through the stomata. - Gramene:pankaj_jaiswal - Wikipedia:Stomatal_conductance - - - - - - - - - - Stomatal resistance (or its inverse, stomatal conductance) can therefore be calculated from the transpiration rate and humidity gradient. (The humidity gradient is the humidity inside the leaf, determined from leaf temperature based on the assumption that the leaf's air spaces are saturated with vapor, minus the humidity of the ambient air, which is measured directly). - plant_trait_ontology - STORS - TO:0000523 - This allows scientists to learn how stomata respond to changes in environmental conditions, such as light intensity, humidity, or carbon dioxide concentration. - stomatal resistance - TO:0000523 - - - - - Stomatal resistance (or its inverse, stomatal conductance) can therefore be calculated from the transpiration rate and humidity gradient. (The humidity gradient is the humidity inside the leaf, determined from leaf temperature based on the assumption that the leaf's air spaces are saturated with vapor, minus the humidity of the ambient air, which is measured directly). - Wikipedia:Stomatal_conductance - - - - - - - - - - plant_trait_ontology - SUBTL - TO:0000524 - submergence tolerance - TO:0000524 - - - - - - - - - - The ratio of total sodium to potassium ion content measured in a plant or a plant part. - plant_trait_ontology - NAKRO - Na/K ratio - sodium to potassium ratio - TO:0000525 - sodium to potassium content ratio - TO:0000525 - - - - - The ratio of total sodium to potassium ion content measured in a plant or a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - The total sodium ion concentration measured in a given volume of a plant or a plant part or plant extract. - plant_trait_ontology - NACONC - TO:0000526 - sodium concentration - TO:0000526 - - - - - The total sodium ion concentration measured in a given volume of a plant or a plant part or plant extract. - Gramene:pankaj_jaiswal - - - - - - - - - - The total sodium ion uptake measured in a plant or a plant part. - plant_trait_ontology - NAUP - TO:0000527 - sodium uptake - TO:0000527 - - - - - The total sodium ion uptake measured in a plant or a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - TSHELSUB - TO:0000528 - total shoot elongation under submergence - TO:0000528 - - - - - - - - - - Number of stomata present on the abaxial surface of leaf. - plant_trait_ontology - ABXSTOFQ - TO:0000529 - abaxial stomatal frequency - TO:0000529 - - - - - Number of stomata present on the abaxial surface of leaf. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of stomata present on the adaxial surface of leaf. - plant_trait_ontology - ADXSTOFQ - TO:0000530 - adaxial stomatal frequency - TO:0000530 - - - - - Number of stomata present on the adaxial surface of leaf. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - - - An anther morphology trait (TO:1000022) which is the length (PATO:0000122) of an anther (PO:0009066). - TO_GIT:385 - plant_trait_ontology - ANTLG - TO:0000531 - Refers to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - anther length - TO:0000531 - - - - - - true - - - - - An anther morphology trait (TO:1000022) which is the length (PATO:0000122) of an anther (PO:0009066). - TO:ethan_johnson -TO:austin_meier - - - - - - - - - - Length of the apiculus hair. - plant_trait_ontology - APIHLG - APIHRLG - TO:0000532 - apiculus hair length - TO:0000532 - - - - - Length of the apiculus hair. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000533 - - - - - - - - - - - - Variation in the color of the culm of a grass plant. - plant_trait_ontology - CULMCL - TO:0000534 - culm color - TO:0000534 - - - - - Variation in the color of the culm of a grass plant. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0000535 - - - - - - - - - - - - A spikelet floret morphology trait (TO:0000274) which is the color of a spikelet floret (PO:0009082). - TO_GIT:105 - plant_trait_ontology - FLCL - TO:0000536 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - spikelet floret color - TO:0000536 - - - - - A spikelet floret morphology trait (TO:0000274) which is the color of a spikelet floret (PO:0009082). - Gramene:pankaj_jaiswal - PATO:0000014 - PO:0009082 - TO:cooperl - - - - - - - - - - A flower morphology trait (TO:0000499) which is the color of the flower (PO:0009046). - PATO:0000014 - plant_trait_ontology - FLCL - TO:0000537 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - flower color - TO:0000537 - - - - - A flower morphology trait (TO:0000499) which is the color of the flower (PO:0009046). - Gramene:pankaj_jaiswal - PO:0009046 - TO:moorel - - - - - - - - - - A ratio of the large sized vascular bundles to the leaf surface area. - plant_trait_ontology - LVBNBLFARRO - TO:0000538 - large vascular bundle number to leaf area ratio - TO:0000538 - - - - - A ratio of the large sized vascular bundles to the leaf surface area. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of the large sized vascular bundles. - plant_trait_ontology - LVBNB - TO:0000539 - large vascular bundle number - TO:0000539 - - - - - Number of the large sized vascular bundles. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the total area of a leaf (PO:0025034). - PATO:0001323 - plant_trait_ontology - LFAR - TO:0000540 - Refer to area (PATO:0001323): A 2-D extent quality inhering in a bearer by virtue of the bearer's two dimensional extent. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf area trait - TO:0000540 - - - - - A leaf morphology trait (TO:0000748) which is the total area of a leaf (PO:0025034). - Gramene:pankaj_jaiswal - PO:0025034 - POC:cooperl - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the position of the leaf (PO:0025034) on the plant. - PATO:0000140 - TO_GIT:226 - plant_trait_ontology - LFHT - leaf height - TO:0000541 - Refers to: position (PATO_0000140): A spatial quality inhering in a bearer by virtue of the bearer's spatial location relative to other objects in the vicinity. Usually measured from the ground. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf position - TO:0000541 - - - - - A leaf morphology trait (TO:0000748) which is the position of the leaf (PO:0025034) on the plant. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A leaf size (TO:0002637) which is the ratio of leaf length to its width. - plant_trait_ontology - LFLGWDRO - TO:0000542 - If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf length to width ratio - TO:0000542 - - - - - A leaf size (TO:0002637) which is the ratio of leaf length to its width. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf composition trait (TO:0000493) which is the amount of nitrogen (CHEBI:51143) in the leaf (PO:0025034). - CHEBI:51143 - plant_trait_ontology - LFNICN - TO:0000543 - leaf nitrogen content - TO:0000543 - - - - - A leaf composition trait (TO:0000493) which is the amount of nitrogen (CHEBI:51143) in the leaf (PO:0025034). - CHEBI:51143 - - - - - - - - - - - - A mesocotyl morphology trait (TO:0000758) which is the length of a mesocotyl (PO:0020037). - PATO:0000122 - TO_GIT:64 - plant_trait_ontology - MCTLG - TO:0000544 - mesocotyl length - TO:0000544 - - - - - A mesocotyl morphology trait (TO:0000758) which is the length of a mesocotyl (PO:0020037). - Gramene:pankaj_jaiswal - PO:0020037 - POC:cooperl - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the length of the region between the panicle base to the lowest (the first) primary panicle branch. - PATO:0000122 - plant_trait_ontology - PNBLBR - panicle base to first primary branch - panicle base to lowest primary panicle branch - peduncle length from panicle base to first primary branch - TO:0000545 - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - panicle base to lowest branch - TO:0000545 - - - - - A panicle morphology trait (TO:0000847) which is the length of the region between the panicle base to the lowest (the first) primary panicle branch. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A peduncle morphology trait (TO:0000776) which is the diameter at the tip of the peduncle (PO:0009053). - PATO:0001334 - TO_GIT:88 - plant_trait_ontology - PDTDIA - TO:0000546 - Refers to the diameter ((PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary) of the tip of a peduncle (PO:0009053). - peduncle top diameter - TO:0000546 - - - - - A peduncle morphology trait (TO:0000776) which is the diameter at the tip of the peduncle (PO:0009053). - Gramene:pankaj_jaiswal - PO:0009053 - POC:cooperl - - - - - - - - - - - - - - A primary branch of inflorescence (TO:0000052) trait which is the number of primary branches present in the inflorescence (PO:0009049). - plant_trait_ontology - NPB - PBRNB - PRB - number of primary rachis branches - panicle primary branch number - primary branches per panicle - TO:0000547 - primary branch number - TO:0000547 - - - - - A primary branch of inflorescence (TO:0000052) trait which is the number of primary branches present in the inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - Number of rhizomes present in a plant. - plant_trait_ontology - RHZNB - rhizome number per plant - TO:0000548 - rhizome number - TO:0000548 - - - - - Number of rhizomes present in a plant. - Gramene:pankaj_jaiswal - - - - - - - - - - A trait which is a quality of of the rhizomatic stem and its parts. - plant_trait_ontology - TO:0000549 - rhizome morphology trait - TO:0000549 - - - - - A trait which is a quality of of the rhizomatic stem and its parts. - Gramene:pankaj_jaiswal - - - - - - - - - - Angle of branches on a rhizhomatic stem. - plant_trait_ontology - RHZBRAG - rhizome branching degree - TO:0000550 - rhizome branching angle - TO:0000550 - - - - - Angle of branches on a rhizhomatic stem. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of branches on a rhizhomatic stem. - plant_trait_ontology - RHZBRNB - rhizome branching number per plant - TO:0000551 - rhizome branching number - TO:0000551 - - - - - Number of branches on a rhizhomatic stem. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - - - The dry weight of the shoot without inflorescence. - plant_trait_ontology - SHDWT - total shoot dry weight - TO:0000552 - shoot dry weight - TO:0000552 - - - - - The dry weight of the shoot without inflorescence. - Gramene:pankaj_jaiswal37 - - - - - - - - - - - - Length of the rhizhomatic stem. - plant_trait_ontology - RHZLG - average rhizome length - TO:0000553 - rhizome length - TO:0000553 - - - - - Length of the rhizhomatic stem. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Length of internodes on a rhizhomatic stem. - plant_trait_ontology - RHZINLG - average rhizome internode length - TO:0000554 - rhizome internode length - TO:0000554 - - - - - Length of internodes on a rhizhomatic stem. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of internodes on a rhizhomatic stem. - plant_trait_ontology - RHZINNB - average rhizome internode number - TO:0000555 - rhizome internode number - TO:0000555 - - - - - Number of internodes on a rhizhomatic stem. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - - - plant_trait_ontology - RHZDWT - rhizome dry weight per plant - TO:0000556 - rhizome dry weight - TO:0000556 - - - - - - - - - - - - A secondary branching of inflorescence (TO:0000142) trait which is the number of secondary branches in an inflorescence (PO:0009049). - plant_trait_ontology - SBRNB - secondary branches per panicle - TO:0000557 - secondary branch number - TO:0000557 - - - - - A secondary branching of inflorescence (TO:0000142) trait which is the number of secondary branches in an inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - Number of small sized vascular bundles present in a plant part. - plant_trait_ontology - SVBNB - TO:0000558 - small vascular bundle number - TO:0000558 - - - - - Number of small sized vascular bundles present in a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Space occupied by the plant. - plant_trait_ontology - SP - space - TO:0000559 - plant volume - TO:0000559 - - - - - Space occupied by the plant. - Gramene:pankaj_jaiswal - - - - - - - - - - Space occupied by each culm or the tiller in a plant. - plant_trait_ontology - SPPCULM - tiller volume - TO:0000560 - space per culm - TO:0000560 - - - - - Space occupied by each culm or the tiller in a plant. - Gramene:pankaj_jaiswal - - - - - - - - - - A ratio of total space or volume occupied by the whole plant to the total number of culms or tiller in the plant. - plant_trait_ontology - SPCULMRO - TO:0000561 - space to culm ratio - TO:0000561 - - - - - A ratio of total space or volume occupied by the whole plant to the total number of culms or tiller in the plant. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf area trait (TO:0000540) that is the ratio of the leaf area (TO:0000540) to the leaf dry weight (TO:0001014) or leaf dry mass (TO:New). - MaizeGDB_QTL:247869 - TO_GIT:271 - plant_trait_ontology - SLA - SLFAR - leaf specific area - TO:0000562 - specific leaf area - TO:0000562 - - - - - A leaf area trait (TO:0000540) that is the ratio of the leaf area (TO:0000540) to the leaf dry weight (TO:0001014) or leaf dry mass (TO:New). - TO:cooperl - - - - - - - - - - A spikelet morphology trait (TO:0000657) which is the ratio of length to the width of a spikelet (PO:0009051). - PATO:0000122 - PATO:0000921 - plant_trait_ontology - SPKLGWDRO - TO:0000563 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. -Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - spikelet length to width ratio - TO:0000563 - - - - - A spikelet morphology trait (TO:0000657) which is the ratio of length to the width of a spikelet (PO:0009051). - Gramene:pankaj_jaiswal - PO:0009051 - TO:moorel - - - - - - - - - - - - A spikelet morphology trait (TO:0000657) which is the width of the spikelets (PO:0009051) present in a grass inflorescence. - PATO:0000921 - plant_trait_ontology - SPKWD - TO:0000564 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - spikelet width - TO:0000564 - - - - - A spikelet morphology trait (TO:0000657) which is the width of the spikelets (PO:0009051) present in a grass inflorescence. - Gramene:pankaj_jaiswal - PO:0009051 - TO:moorel - - - - - - - - - - Number of spikelets present in the rice panicle per unit length. - plant_trait_ontology - SPKPPNLG - number of spikelets per cm panicle length - spikelet number per panicle length - TO:0000565 - spikelets per panicle length - TO:0000565 - - - - - Number of spikelets present in the rice panicle per unit length. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A vascular leaf morphology trait (TO:0000419) which is the number of leaf stomatal complexes (PO:0025183) present on the leaf surface. - plant_trait_ontology - STOFQ - TO:0000566 - leaf stomatal complex frequency - TO:0000566 - - - - - A vascular leaf morphology trait (TO:0000419) which is the number of leaf stomatal complexes (PO:0025183) present on the leaf surface. - Gramene:pankaj_jaiswal - - - - - - - - - - - - plant_trait_ontology - TIAG - TO:0000567 - tiller angle - TO:0000567 - - - - - - - - - - - - - - - - - - Weight of the shoot without inflorescence. - plant_trait_ontology - SHWT - total shoot weight - TO:0000568 - shoot axis weight - TO:0000568 - - - - - Weight of the shoot without inflorescence. - Gramene:pankaj_jaiswal37 - - - - - - - - - - plant_trait_ontology - WBPH egg mortality - WBPHOVI - TO:0000569 - white-backed planthopper egg mortality - TO:0000569 - - - - - - - - - - plant_trait_ontology - WLPCENT - percentage of watery lesion - TO:0000570 - watery lesion percentage - TO:0000570 - - - - - - - - - - - - - - - - - - Fresh weight of the shoot without inflorescence. - plant_trait_ontology - SHFWT - total shoot fresh weight - TO:0000571 - shoot fresh weight - TO:0000571 - - - - - Fresh weight of the shoot without inflorescence. - Gramene:pankaj_jaiswal37 - - - - - - - - - - - - - - - - - - A petal morphology trait (TO:0000863) which is the color of a petal (PO:0009032). - PATO:0000014 - plant_trait_ontology - TO:0000572 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - petal color - TO:0000572 - - - - - A petal morphology trait (TO:0000863) which is the color of a petal (PO:0009032). - Gramene:pankaj_jaiswal - PO:0009032 - TO:moorel - - - - - - - - - - - - - - - - - - A sepal morphology trait (TO:0000864) which is the color of a sepal (PO:0009031) in a flower (PO:0009049). - PATO:0000014 - plant_trait_ontology - TO:0000573 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - sepal color - TO:0000573 - - - - - A sepal morphology trait (TO:0000864) which is the color of a sepal (PO:0009031) in a flower (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009031 - PO:0009049 - TO:moorel - - - - - - - - - - - - - - - - - - A tepal morphology trait (TO:0000865) which is the color of a tepal (PO:0009033). - PATO:0000014 - plant_trait_ontology - TO:0000574 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - tepal color - TO:0000574 - - - - - A tepal morphology trait (TO:0000865) which is the color of a tepal (PO:0009033). - Gramene:pankaj_jaiswal - PO:0009033 - TO:moorel - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of an endosperm (PO:0009089). - TO_GIT:133 - plant_trait_ontology - TO:0000575 - endosperm morphology trait - TO:0000575 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of an endosperm (PO:0009089). - PO:0009089 - TO:moorel - - - - - - - - - - - - - - - - - - A stem morphology trait (TO:0000361) which is the length of the stem (PO:0009047). - TO:0000309 - PATO:0000122 - TO_GIT:157 - core length - plant_trait_ontology - CULMLG - CmL - STEMLG - culm height - culm length - stem height - TO:0000576 - Often measured from soil surface to highest point on stem. -Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - stem length - TO:0000576 - - - - - A stem morphology trait (TO:0000361) which is the length of the stem (PO:0009047). - Gramene:pankaj_jaiswal37 - PO:0009047 - TO:moorel - - - - - - - - - - A stem morphology trait (TO:0000361) which is the angle of a stem (PO:0009047). - PATO:0002326 - plant_trait_ontology - STEMAG - TO:0000577 - Refer to angle (PATO:0002326): An orientation inhering in a bearer by virtue of the bearer's placement at an angle. - stem angle - TO:0000577 - - - - - A stem morphology trait (TO:0000361) which is the angle of a stem (PO:0009047). - Gramene:pankaj_jaiswal - PO:0009047 - TO:moorel - - - - - - - - - - - - - - - - - - The average fresh weight of the root determined in a study. - plant_trait_ontology - RTFWT - total root fresh weight - TO:0000578 - root fresh weight - TO:0000578 - - - - - The average fresh weight of the root determined in a study. - Gramene:pankaj_jaiswal37 - - - - - - - - - - The trait is an indirect measure of the balance between water absorption and transpiration. - plant_trait_ontology - RTDWTTINBRO - deep root dry weight to tiller number ratio - TO:0000579 - root dry weight to tiller number ratio - TO:0000579 - - - - - The trait is an indirect measure of the balance between water absorption and transpiration. - Gramene:pankaj_jaiswal37 - - - - - - - - - - plant_trait_ontology - TO:0000580 - cytoplasmic male sterility - TO:0000580 - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the color of an inflorescence (PO:0009049). - PATO:0000014 - TO_GIT:92 - TO_GIT:97 - head color - plant_trait_ontology - TO:0000581 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - inflorescence color - TO:0000581 - - - - - An inflorescence morphology trait (TO:0000373) which is the color of an inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - POC:cooperl - - - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the average number of inflorescence (PO:0009049) per plant in a study. - PATO:0001555 - TO_GIT:97 - plant_trait_ontology - INFLONB - TO:0000582 - Refer to number of (PATO:0001555): The number of parts of a particular type that the bearer entity has. This is a relational quality, and thus holds between two entities: the bearer of the quality, and the type of parts. The infloresence number is also an above ground biomas yield trait (TO:0000327). - inflorescence number - TO:0000582 - - - - - An inflorescence morphology trait (TO:0000373) which is the average number of inflorescence (PO:0009049) per plant in a study. - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - An infructescence morphology trait (TO:0000920) that is the average weight (mass) of an infructescence bearing mature fruit (PO:0009001). - TO_GIT:244 - plant_trait_ontology - TO:0000583 - Refers to mass (PATO:0000125): A physical quality that inheres in a bearer by virtue of the proportion of the bearer's amount of matter. - infructescence weight - TO:0000583 - - - - - An infructescence morphology trait (TO:0000920) that is the average weight (mass) of an infructescence bearing mature fruit (PO:0009001). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - true - TO:0000584 - - - - - - - - - - true - TO:0000585 - - - - - - - - - - A root length (TO:0000227) that is the length of one or more seminal roots (PO:0000046). - PATO:0000122 - TO_GIT:365 - plant_trait_ontology - TO:0000586 - Seminal root is the primary root originating in a plant after germination. -Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - seminal root length - TO:0000586 - - - - - A root length (TO:0000227) that is the length of one or more seminal roots (PO:0000046). - Gramene:pankaj_jaiswal37 - TO:seymour_megan -TO:austin_meier - - - - - - - - - - A seed quality trait (TO:0000931) which is the quality of the endosperm (PO:0009089) texture, content, composition, size, etc. - TO:0000150 - plant_trait_ontology - End - endosperm quality (sensu Poaceae) - TO:0000587 - endosperm quality - TO:0000587 - - - - - A seed quality trait (TO:0000931) which is the quality of the endosperm (PO:0009089) texture, content, composition, size, etc. - Gramene:pankaj_jaiswal - PO:0009089 - - - - - - - - - - true - TO:0000588 - - - - - - - - - - A grain yield trait (TO:0000396) which is the average weight of a grain, including the caryopsis hull (PO:0006000). - TO:0000509 - TO_GIT:245 - plant_trait_ontology - GRWT - SDWT - grain weight - kernel weight - TO:0000589 - The average grain weight (TO:0000589) can be used to calculate the overall yield or produce from a field. - average grain weight - TO:0000589 - - - - - A grain yield trait (TO:0000396) which is the average weight of a grain, including the caryopsis hull (PO:0006000). - Gramene:pankaj_jaiswal - POC:cooperl - - - - - - - - - - A fruit weight (TO:0002746) which is the weight of one or more dehulled grains. - TO_GIT:242 - plant_trait_ontology - DHULGRWT - GRWT - TO:0000590 - dehulled grain weight - TO:0000590 - - - - - A fruit weight (TO:0002746) which is the weight of one or more dehulled grains. - Gramene:pankaj_jaiswal - POC:cooperl - - - - - - - - - - Weight of the 100-dehulled grain having pericarp (seed coat). - plant_trait_ontology - HDGRWT - HDHULGRWT - hundred dehulled-grain weight - hundred grain weight - TO:0000591 - 100-dehulled grain weight - TO:0000591 - - - - - Weight of the 100-dehulled grain having pericarp (seed coat). - Gramene:pankaj_jaiswal - - - - - - - - - - Weight of the 1000-dehulled grains having pericarp (seed coat). - plant_trait_ontology - TDGRWT - TDHULGRWT - thousand dehulled-grain weight - thousand grain weight - TO:0000592 - 1000-dehulled grain weight - TO:0000592 - - - - - Weight of the 1000-dehulled grains having pericarp (seed coat). - Gramene:pankaj_jaiswal - - - - - - - - - - Weight of the polished grain (without hull and pericarp) weight. - plant_trait_ontology - PLSGRWT - TO:0000593 - polished grain weight - TO:0000593 - - - - - Weight of the polished grain (without hull and pericarp) weight. - Gramene:pankaj_jaiswal - - - - - - - - - - Weight of the 100-polished grain (without hull and pericarp) weight. - plant_trait_ontology - HPLSGRWT - hundred polished grain weight - TO:0000594 - 100-polished grain weight - TO:0000594 - - - - - Weight of the 100-polished grain (without hull and pericarp) weight. - Gramene:pankaj_jaiswal - - - - - - - - - - Weight of the 1000 polished grain (without hull and pericarp) weight. - plant_trait_ontology - TPLSGRWT - thousand polished grain weight - TO:0000595 - 1000-polished grain weight - TO:0000595 - - - - - Weight of the 1000 polished grain (without hull and pericarp) weight. - Gramene:pankaj_jaiswal - - - - - - - - OBSOLETE. - plant_trait_ontology - TO:0000596 - plant volume (sensu Poaceae) - true - TO:0000596 - - - - - - - - - - A plant trait (TO:0000387) that is the commercial and /or economical value of the plant product, or its overall improvement. - jaiswalp - TO_GIT:260 - plant_trait_ontology - TO:0000597 - Quality traits are often also classified as belonging to another upper level class such as: morphology trait (TO:0000017), biochemical trait (TO:0000277), growth and development trait (TO:0000357), stature or vigor trait (TO:0000133) and so on. - quality trait - TO:0000597 - - - - - A plant trait (TO:0000387) that is the commercial and /or economical value of the plant product, or its overall improvement. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - The total protein content measured in a plant or a plant part. - plant_trait_ontology - PROTCN - total protein content - TO:0000598 - protein content - TO:0000598 - - - - - The total protein content measured in a plant or a plant part. - Gramene:pankaj_jaiswal37 - - - - - - - - - - A biochemical trait which is a quality of an enzymatic reaction. - TO_GIT:380 - plant_trait_ontology - enzymatic activity - enzyme catalytic activity - TO:0000599 - Catalysis of a biochemical reaction at physiological temperatures. In biologically catalyzed reactions, the reactants are known as substrates, and the catalysts are naturally occurring macromolecular substances known as enzymes. Enzymes possess specific binding sites for substrates, and are usually composed wholly or largely of protein, but RNA that has catalytic activity (ribozyme) is often also regarded as enzymatic. - enzyme activity trait - TO:0000599 - - - - - A biochemical trait which is a quality of an enzymatic reaction. - TO:cooperl - - - - - Catalysis of a biochemical reaction at physiological temperatures. In biologically catalyzed reactions, the reactants are known as substrates, and the catalysts are naturally occurring macromolecular substances known as enzymes. Enzymes possess specific binding sites for substrates, and are usually composed wholly or largely of protein, but RNA that has catalytic activity (ribozyme) is often also regarded as enzymatic. - GO:0003824 - - - - - - - - - - Response shown by the plant in the presence of UV-A light stress. - plant_trait_ontology - UV-A resistance - UVARS - Ultraviolet-A light sensitivity - Ultraviolet-A resistance - TO:0000600 - UV-A light sensitivity - TO:0000600 - - - - - Response shown by the plant in the presence of UV-A light stress. - Gramene:pankaj_jaiswal - - - - - - - - - - Response shown by the plant in the presence of UV-B light stress. - plant_trait_ontology - UV-B resistance - UVBRS - Ultraviolet-A light sensitivity - Ultraviolet-B resistance - TO:0000601 - UV-B light sensitivity - TO:0000601 - - - - - Response shown by the plant in the presence of UV-B light stress. - Gramene:pankaj_jaiswal - - - - - - - - - - - - The total fat or lipid content of present in the plant or the plant part such as seed. - plant_trait_ontology - FATCN - lipid content - TO:0000602 - total fat content - TO:0000602 - - - - - The total fat or lipid content of present in the plant or the plant part such as seed. - Gramene:pankaj_jaiswal - - - - - - - - - - The ratio of total magnesium to potassium ion content measured in a plant or a plant part. - plant_trait_ontology - MGKCNRO - Magnesium to potassium ratio - ratio of magnesium to potassium - TO:0000603 - magnesium to potassium content ratio - TO:0000603 - - - - - The ratio of total magnesium to potassium ion content measured in a plant or a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Measures the fat and essential oil content in a plant or plant part. - plant_trait_ontology - TO:0000604 - fat and essential oil content - TO:0000604 - - - - - Measures the fat and essential oil content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An assay to determine the content of hydrogen peroxide or the peroxide reactive ions. - plant_trait_ontology - H2O2 content - H2O2CN - TO:0000605 - hydrogen peroxide content - TO:0000605 - - - - - An assay to determine the content of hydrogen peroxide or the peroxide reactive ions. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the joint action of alpha-amylase, beta-amylase and any other carbohydrate-degrading enzymes. - plant_trait_ontology - DIASPWR - TO:0000606 - diastatic power - TO:0000606 - - - - - An assay to determine the joint action of alpha-amylase, beta-amylase and any other carbohydrate-degrading enzymes. - GR_REF:8025 - - - - - - - - - - The total mineral or ion content measured after drying and burning the plant or a plant part. - plant_trait_ontology - TO:0000607 - ash content - TO:0000607 - - - - - The total mineral or ion content measured after drying and burning the plant or a plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the sodium cation (CHEBI:29101) composition in a plant structure (PO:0009011). - plant_trait_ontology - TO:0000608 - sodium content - TO:0000608 - - - - - A mineral and ion content trait (TO:0000465) which is the sodium cation (CHEBI:29101) composition in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the potassium cation (CHEBI:29103) composition in a plant structure (PO:0009011). - plant_trait_ontology - TO:0000609 - potassium content - TO:0000609 - - - - - A mineral and ion content trait (TO:0000465) which is the potassium cation (CHEBI:29103) composition in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - - - The ratio of soluble protein to total protein content is a measure of the degree of proteolysis. - plant_trait_ontology - STPROTRO - Soluble protein to total protein content ratio - TO:0000610 - As seen in degree of modification of grain to malt in barley. - soluble to total protein ratio - TO:0000610 - - - - - The ratio of soluble protein to total protein content is a measure of the degree of proteolysis. - GR_REF:8025 - - - - - - - - - - - - - - It is a measure of the sugars and nitrogenous compounds available for yeast nutrition. - plant_trait_ontology - MALTEXTPCENT - malt-extract percent - TO:0000611 - malt-extract percentage - TO:0000611 - - - - - It is a measure of the sugars and nitrogenous compounds available for yeast nutrition. - GR_REF:8025 - - - - - - - - - - - - A grain quality trait (TO:0000162) that is a measure of the density or weight per unit of volume of a grain at a standardized moisture level. - TO_GIT:262 - plant_trait_ontology - SDDN - test weight - TO:0000612 - grain density - TO:0000612 - - - - - A grain quality trait (TO:0000162) that is a measure of the density or weight per unit of volume of a grain at a standardized moisture level. - GR_REF:8025 - TO:cooperl - - - - - - - - - - - - It is defined as the amount of hull-less kernels obtained after de-hulling, expressed as a percentage of the weight of the sample. - plant_trait_ontology - GROATPCENT - caryopsis percentage - groat proportion - hull percentage - TO:0000613 - This trait is most commonly used in determining the milling quality of Oat. - groat percentage - TO:0000613 - - - - - It is defined as the amount of hull-less kernels obtained after de-hulling, expressed as a percentage of the weight of the sample. - GR_REF:8025 - - - - - - - - - - A lemma morphology trait (TO:1000023) which is the shape of the lemma (PO:0009037). - TO_GIT:390 - plant_trait_ontology - TO:0000614 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - lemma shape - TO:0000614 - - - - - - true - - - - - A lemma morphology trait (TO:1000023) which is the shape of the lemma (PO:0009037). - Gramene:pankaj_jaiswal - PATO:0000052 - PO:0009037 - TO:cooperl - TO:moorel - - - - - - - - - - Response with respect to application of abscisic acid. - plant_trait_ontology - ABA response - ABASN - abscisic acid response - TO:0000615 - abscisic acid sensitivity - TO:0000615 - - - - - Response with respect to application of abscisic acid. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - It is a measure of the total length covered by the leaf margin. - plant_trait_ontology - LFCIRCUM - leaf circumference - TO:0000616 - leaf perimeter - TO:0000616 - - - - - It is a measure of the total length covered by the leaf margin. - Gramene:pankaj_jaiswal - - - - - - - - - - Percentage of colored de-hulled grains in a sample of grains with reference color. - plant_trait_ontology - percentage of colored grains - percentage of damaged yellow rice grains - percentage of green rice grains - percentage of red rice grains - TO:0000617 - colored grain percentage - TO:0000617 - - - - - Percentage of colored de-hulled grains in a sample of grains with reference color. - Gramene:pankaj_jaiswal - - - - - - - - - - The percentage of cracked dehulled grain with at least one fourth of the size still intact. - plant_trait_ontology - CRUSHDHULGRPCENT - CRUSHGRPCENT - cracked dehulled-grain percentage - cracked grain percentage - crushed dehulled-grain percentage - percent broken - percentage brokens - TO:0000618 - crushed grain percentage - TO:0000618 - - - - - The percentage of cracked dehulled grain with at least one fourth of the size still intact. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - A phenomenon associated to the seeds that germinate before becoming detached or harvested from the parent plant. Thus the germination occurs before the seed undergoes dormancy. - plant_trait_ontology - preharvest germination - TO:0000619 - vivipary - TO:0000619 - - - - - A phenomenon associated to the seeds that germinate before becoming detached or harvested from the parent plant. Thus the germination occurs before the seed undergoes dormancy. - Gramene:pankaj_jaiswal - - - - - - - - - - A whole plant growth and development trait (TO:0000947) that is a quality of a plant embryo development stage (PO:0007631). - TO_GIT:299 - plant_trait_ontology - TO:0000620 - plant embryo development trait - TO:0000620 - - - - - A whole plant growth and development trait (TO:0000947) that is a quality of a plant embryo development stage (PO:0007631). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - - - Traits associated with observing effects on the development of the inflorescence and its parts. - plant_trait_ontology - TO:0000621 - inflorescence development trait - TO:0000621 - - - - - Traits associated with observing effects on the development of the inflorescence and its parts. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the development of the flower and its parts. - plant_trait_ontology - floret development trait - TO:0000622 - flower development trait - TO:0000622 - - - - - Traits associated with observing effects on the development of the flower and its parts. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - An inflorescence bristle length trait (TO:0000643) that is the length of the bristles found on an involucre (PO:0009100). - TO_GIT:153 - plant_trait_ontology - INVLCBS - bristle length - sterile inflorescence branch length - TO:0000623 - involucre bristle length - TO:0000623 - - - - - An inflorescence bristle length trait (TO:0000643) that is the length of the bristles found on an involucre (PO:0009100). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - This is an assay of any direct or indirect, harmful or beneficial effect of one plant on another through the production of chemical compounds (allelochemicals) that escape in the environment. - plant_trait_ontology - ALLELPATHEF - TO:0000624 - allelopathic effect - TO:0000624 - - - - - This is an assay of any direct or indirect, harmful or beneficial effect of one plant on another through the production of chemical compounds (allelochemicals) that escape in the environment. - Gramene:pankaj_jaiswal - - - - - - - - - - A spikelet morphology trait (TO:0000657) which is the density of a spikelet (PO:0009051) in the inflorescence (PO:0009049) or on the given inflorescence branch (PO:0009081) order. - PATO:0001019 - plant_trait_ontology - SPKDN - TO:0000625 - Refer to density (PATO:0001019): A physical quality which inheres in a bearer by virtue of some influence is exerted by the bearer's mass per unit size. - spikelet density - TO:0000625 - - - - - A spikelet morphology trait (TO:0000657) which is the density of a spikelet (PO:0009051) in the inflorescence (PO:0009049) or on the given inflorescence branch (PO:0009081) order. - Gramene:pankaj_jaiswal - PO:0009049 - PO:0009051 - PO:0009081 - TO:moorel - - - - - - - - - - plant_trait_ontology - RELPHOCONCSHRT - TO:0000626 - relative phosphorus distribution between shoot and root - TO:0000626 - - - - - - - - - - plant_trait_ontology - RELPHOUTZEFY - TO:0000627 - relative phosphorus utilization efficiency - TO:0000627 - - - - - - - - - - Causal agent: Sclerospora graminicola (Sacc. ) Schroet. It causes the downy mildew disease in Pearl millet. - plant_trait_ontology - Pg_DNMDRS - TO:0000628 - pearl millet downy mildew resistance - TO:0000628 - - - - - Causal agent: Sclerospora graminicola (Sacc. ) Schroet. It causes the downy mildew disease in Pearl millet. - Gramene:pankaj_jaiswal - - - - - - - - - - - - It is determined as the number of days from the seed sowing to the stage when either the pollen shedding or anther exsertion occurs on the maize tassel. - days to tassel flowering - plant_trait_ontology - TO:0000629 - Depends on the study type. For a study with multiple plants, on average 50% of the plants must have sheeding of pollen or anther exsertion. - days to tassel - TO:0000629 - - - - - It is determined as the number of days from the seed sowing to the stage when either the pollen shedding or anther exsertion occurs on the maize tassel. - Gramene:pankaj_jaiswal - - - - - - - - - - Length of the pedicel. - plant_trait_ontology - PDCLG - TO:0000630 - pedicel length - TO:0000630 - - - - - Length of the pedicel. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - GRNPTLDFQ - TO:0000631 - green plantlet differentiation frequency - TO:0000631 - - - - - - - - - - plant_trait_ontology - GRNPTLYLDFQ - TO:0000632 - green plantlet yield frequency - TO:0000632 - - - - - - - - - - plant_trait_ontology - RELTDWT - TO:0000633 - relative total dry weight - TO:0000633 - - - - - - - - - - - - A stem morphology trait (TO:0000361) which is the number of stem nodes (PO:0020141). - plant_trait_ontology - NDNB - TO:0000634 - stem node number - TO:0000634 - - - - - A stem morphology trait (TO:0000361) which is the number of stem nodes (PO:0020141). - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - POPEXPVOL - popcorn volume - TO:0000635 - popping expansion volume - TO:0000635 - - - - - - - - - - plant_trait_ontology - RELSHDWT - TO:0000636 - relative shoot dry weight - TO:0000636 - - - - - - - - - - true - TO:0000637 - - - - - - - - - - plant_trait_ontology - SPIKEWD - TO:0000638 - spike width - TO:0000638 - - - - - - - - - - - - - - plant_trait_ontology - SDFRT - percent seed fertility - TO:0000639 - seed fertility - TO:0000639 - - - - - - - - - - Total sum of number of roots in a plant derived per experiment. - plant_trait_ontology - TRTNB - TO:0000640 - total root number - TO:0000640 - - - - - Total sum of number of roots in a plant derived per experiment. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An inflorescence primary branch morphology trait (TO:0000846) which the length of a second order inflorescence axis (PO:0006321). - PATO:0000122 - plant_trait_ontology - PBRLG - TO:0000641 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - inflorescence primary branch length - TO:0000641 - - - - - An inflorescence primary branch morphology trait (TO:0000846) which the length of a second order inflorescence axis (PO:0006321). - Gramene:pankaj_jaiswal - PO:0006321 - TO:moorel - - - - - - - - - - A leaf sheath morphology trait (TO:0000835) which is the measurement, in centimeters of the leaf sheath (PO:0020104) diameter. - PATO:0001334 - plant_trait_ontology - LFSDIA - TO:0000642 - Refer to diameter (PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - leaf sheath diameter - TO:0000642 - - - - - A leaf sheath morphology trait (TO:0000835) which is the measurement, in centimeters of the leaf sheath (PO:0020104) diameter. - Gramene:pankaj_jaiswal - PO:0020104 - TO:moorel - - - - - - - - - - An inflorescence morphology trait (TO:0000050) that is the length of the bristles found on an inflorescence (PO:0009049). - TO_GIT:153 - plant_trait_ontology - BRLG - TO:0000643 - inflorescence bristle length - TO:0000643 - - - - - An inflorescence morphology trait (TO:0000050) that is the length of the bristles found on an inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - The relative (dry)weight of the root determined after a given treatment as compared to the one determined under normal conditions. - plant_trait_ontology - RELRTDWT - TO:0000644 - relative root dry weight - TO:0000644 - - - - - The relative (dry)weight of the root determined after a given treatment as compared to the one determined under normal conditions. - Gramene:pankaj_jaiswal - - - - - - - - - - - - jaiswalp - plant_trait_ontology - RELPHOCONC - TO:0000645 - relative phosphorus concentration - TO:0000645 - - - - - - - - - - plant_trait_ontology - CAUAXIBRNB - TO:0000646 - cauline axillary branch number - TO:0000646 - - - - - - - - - - plant_trait_ontology - RELACIDPASEACT - TO:0000647 - relative acid phosphatase activity - TO:0000647 - - - - - - - - - - plant_trait_ontology - RELPHOUP - TO:0000648 - relative phosphorus uptake - TO:0000648 - - - - - - - - - - A peduncle morphology trait (TO:0000776) which is the width of a peduncle (PO:0025386). - PATO:0000921 - TO_GIT:88 - plant_trait_ontology - PDCWD - TO:0000649 - Refers to the width ((PATO:0000921):A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite) of a peduncle (PO:0009053). - peduncle width - TO:0000649 - - - - - A peduncle morphology trait (TO:0000776) which is the width of a peduncle (PO:0025386). - Gramene:pankaj_jaiswal - PO:0025386 - POC:cooperl - - - - - - - - - - - - A lemma morphology trait (TO:1000023) which is the length of the lemma (PO:0009037). - TO_GIT:390 - plant_trait_ontology - LEMLG - TO:0000650 - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - lemma length - TO:0000650 - - - - - - true - - - - - - true - - - - - A lemma morphology trait (TO:1000023) which is the length of the lemma (PO:0009037). - Gramene:pankaj_jaiswal - PATO:0000122 - PO:0009037 - TO:moorel - - - - - - - - - - plant_trait_ontology - FLRCL - TO:0000651 - flour color - TO:0000651 - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the leaf surface area affected by abiotic stresses like insecticides and cold temperature as evidenced by chlorotic and/or necrotic tissue. - plant_trait_ontology - LFNEC - leaf scorch - TO:0000652 - If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf necrosis - TO:0000652 - - - - - A leaf morphology trait (TO:0000748) which is the leaf surface area affected by abiotic stresses like insecticides and cold temperature as evidenced by chlorotic and/or necrotic tissue. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A multi-tissue plant structure development trait (TO:0000927) that has as primary participant a seed (PO:0009010). - TO_GIT:254 - plant_trait_ontology - TO:0000653 - seed growth and development trait - TO:0000653 - - - - - A multi-tissue plant structure development trait (TO:0000927) that has as primary participant a seed (PO:0009010). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A plant structure growth and development trait (TO:0000928) that is a quality of the growth of the shoot system (PO:0009006), and shoot system development stages (PO:0025527). - TO_GIT:268 - plant_trait_ontology - TO:0000654 - shoot system growth and development trait - TO:0000654 - - - - - A plant structure growth and development trait (TO:0000928) that is a quality of the growth of the shoot system (PO:0009006), and shoot system development stages (PO:0025527). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A plant organ development trait (TO:0000927) that has as primary participant a leaf (PO:0025034). - jaiswalp - TO_GIT:253 - plant_trait_ontology - TO:0000655 - leaf growth and development trait - TO:0000655 - - - - - A plant organ development trait (TO:0000927) that has as primary participant a leaf (PO:0025034). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Traits associated with observing effects on the development of the root and its parts. - plant_trait_ontology - TO:0000656 - root development trait - TO:0000656 - - - - - Traits associated with observing effects on the development of the root and its parts. - Gramene:pankaj_jaiswal - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of a spikelet (PO:0009051). - TO_GIT:144 - plant_trait_ontology - <new synonym> - TO:0000657 - spikelet morphology trait - TO:0000657 - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of a spikelet (PO:0009051). - Gramene:pankaj_jaiswal - PO:0009051 - TO:cooperl - TO:moorel - - - - - - - - - - - - It is determined as the number of days from the seed sowing to the first visible silk (stigma) on the maize ear. - plant_trait_ontology - TO:0000658 - Depends on the study type. For a study with multiple plants, on average 50% of the plants must have exposed silks. - days to silk - TO:0000658 - - - - - It is determined as the number of days from the seed sowing to the first visible silk (stigma) on the maize ear. - Gramene:pankaj_jaiswal - - - - - - - - - - The time interval between the appearance of successive leaves (days/leaf) on the developing shoot. - plant_trait_ontology - TO:0000659 - phyllochron - TO:0000659 - - - - - The time interval between the appearance of successive leaves (days/leaf) on the developing shoot. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - TO:0000660 - axillary bud dormancy - TO:0000660 - - - - - - - - - - - - - - - - - - plant_trait_ontology - TO:0000661 - tiller bud dormancy - TO:0000661 - - - - - - - - - - Caused by Fusarium graminearum Schwabe, that affects the quality and yield of barley (Hordeum vulgare L.) grain. - plant_trait_ontology - Hv_FUSHEADBTRS - TO:0000662 - barley fusarium head blight resistance - TO:0000662 - - - - - Caused by Fusarium graminearum Schwabe, that affects the quality and yield of barley (Hordeum vulgare L.) grain. - Gramene:pankaj_jaiswal - - - - - - - - - - Caused by Fusarium graminearum Schwabe (teleomorph: Gibberella zeae), in the USA and Canada. It causes severe yield and quality losses in wheat (Triticum aestivum L.). - TO_GIT:70 - plant_trait_ontology - Ta_FUSHEADBTRS - TO:0000663 - wheat fusarium head blight resistance - TO:0000663 - - - - - Caused by Fusarium graminearum Schwabe (teleomorph: Gibberella zeae), in the USA and Canada. It causes severe yield and quality losses in wheat (Triticum aestivum L.). - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - TO:0000664 - fungal blight disease resistance - TO:0000664 - - - - - - - - - - Measurement of the whitish area found in the dehulled grain. - plant_trait_ontology - GRCARWHT - TO:0000665 - grain core area white - TO:0000665 - - - - - Measurement of the whitish area found in the dehulled grain. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - BRWRYLD - TO:0000666 - brown rice yield - TO:0000666 - - - - - - - - - - The quality trait of the seed or the products derived from it. - plant_trait_ontology - TO:0000667 - cooking or brewing quality - TO:0000667 - - - - - The quality trait of the seed or the products derived from it. - Gramene:pankaj_jaiswal - - - - - - - - - - Measuring amount of toxins found in the host plant after the infection by a fungal pathogen. The toxin is produced by the pathogen. - plant_trait_ontology - TO:0000668 - mycotoxin content - TO:0000668 - - - - - Measuring amount of toxins found in the host plant after the infection by a fungal pathogen. The toxin is produced by the pathogen. - Gramene:pankaj_jaiswal - - - - - - - - - - Measuring amount of mycotoxin deoxynivalenol found in the host plant after the infection by a fungus Fusarium sp. - plant_trait_ontology - DONCONC - TO:0000669 - deoxynivalenol content - TO:0000669 - - - - - Measuring amount of mycotoxin deoxynivalenol found in the host plant after the infection by a fungus Fusarium sp. - Gramene:pankaj_jaiswal - PMID:12897863 - - - - - - - - - - The number of flowers present on a inflorescence branch or in the inflorescence itself. - plant_trait_ontology - FLNB - TO:0000670 - floret number - TO:0000670 - - - - - The number of flowers present on a inflorescence branch or in the inflorescence itself. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - PREFLFLRABR - frequency of pre-flowering floret abortion - pre-flowering floret abortion - TO:0000671 - pre-flowering flower abortion - TO:0000671 - - - - - - - - - - plant_trait_ontology - BRAPCENT - rice bran percentage - TO:0000672 - bran percentage - TO:0000672 - - - - - - - - - - Caused by Fusarium graminearum Schwabe (telomorph: Gibberella zeae), in the USA and Canada. It causes severe yield and quality losses in wheat (Triticum turgidum). - plant_trait_ontology - Tt_FUSHEADBTRS - tetraploid wheat fusarium head blight disease resistance - TO:0000673 - tetraploid wheat fusarium head blight resistance - TO:0000673 - - - - - Caused by Fusarium graminearum Schwabe (telomorph: Gibberella zeae), in the USA and Canada. It causes severe yield and quality losses in wheat (Triticum turgidum). - Gramene:pankaj_jaiswal - - - - - - - - - - They are non-nutritive plant chemicals that have protective or disease preventive properties. - plant_trait_ontology - TO:0000674 - phytochemical compound content - TO:0000674 - - - - - They are non-nutritive plant chemicals that have protective or disease preventive properties. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of ferulic acid content determined in a given plant part. Ferulic acid is an antioxidant which neutralizes free radicals (superoxide, nitric oxide and hydroxyl radical) which could cause oxidative damage of cell membranes and DNA. Ferulic acid helps to prevent damage to the cells caused by ultraviolet light. - plant_trait_ontology - 4-hydroxy-3-methoxycinnamic acid - FERULICACIDCN - TO:0000675 - It is found in the leaves and seeds of many plants, but especially in cereals such as brown rice, whole wheat and oats. - ferulic acid content - TO:0000675 - - - - - Amount of ferulic acid content determined in a given plant part. Ferulic acid is an antioxidant which neutralizes free radicals (superoxide, nitric oxide and hydroxyl radical) which could cause oxidative damage of cell membranes and DNA. Ferulic acid helps to prevent damage to the cells caused by ultraviolet light. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Style color is determined from blooming flowers or florets. - plant_trait_ontology - STYCL - color of silk - color of style - silk color - TO:0000676 - style color - TO:0000676 - - - - - Style color is determined from blooming flowers or florets. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf position (TO:0000541) which is the position of the third leaf (PO:0025034) on a plant. - TO_GIT:226 - plant_trait_ontology - 3LFHT - 3rd leaf height - third leaf height - TO:0000677 - Refers to: position (PATO_0000140): A spatial quality inhering in a bearer by virtue of the bearer's spatial location relative to other objects in the vicinity. - third leaf position - TO:0000677 - - - - - A leaf position (TO:0000541) which is the position of the third leaf (PO:0025034) on a plant. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the diameter of a cob. - MaizeGDB_QTL:82753 - PATO:0001334 - TO_GIT:243 - plant_trait_ontology - COBDIA - cobd - diameter of central spike of ear - TO:0000678 - The cob is the first order infructescence axis PO:0025244 of the ear infructescence (new). Refers to diameter (PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. In maize, this is measured in centimeters. - cob diameter - TO:0000678 - - - - - An infructescence axis morphology trait (TO:0000921) which is the diameter of a cob. - POC:Cooperl - - - - - cobd - MaizeGDB_QTL:82753 - - - - - - - - - - true - TO:0000679 - - - - - - - - - - plant_trait_ontology - INFLOCIRCUM - TO:0000680 - inflorescence circumference - TO:0000680 - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) that is the circumference of an ear infructescence (PO:0025597). - TO_GIT:132 - ear infructescence circumference - plant_trait_ontology - EARCIRCUM - TO:0000681 - Refers to circumference (PATO:0001648): An 1-D extent quality which is equal to the length of the closed curve of a circle. Ear circumference (TO:0000681) is equal to ear diameter (TO:0000433) times 3.14. - ear circumference - TO:0000681 - - - - - An ear infructescence morphology trait (TO:0000976) that is the circumference of an ear infructescence (PO:0025597). - TO:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the height of an inflorescence (PO:0009049) measured from ground to the attachment point. - PATO:0000119 - TO_GIT:226 - plant_trait_ontology - INFLOHT - TO:0000682 - Refer to height (PATO:0000119): A 1-D extent quality inhering in a bearer by virtue of the bearer's vertical dimension of extension. - inflorescence height - TO:0000682 - - - - - An inflorescence morphology trait (TO:0000373) which is the height of an inflorescence (PO:0009049) measured from ground to the attachment point. - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) which is the position of an ear infructescence (PO:0025597). - MaizeGDB_QTL:61369 - TO_GIT:226 - plant_trait_ontology - EARHT - ear height - TO:0000683 - Refers to: position (PATO_0000140): A spatial quality inhering in a bearer by virtue of the bearer's spatial location relative to other objects in the vicinity. In maize this is usually measured from the ground to the attachment point of the ear. - ear infructescence position - TO:0000683 - - - - - An ear infructescence morphology trait (TO:0000976) which is the position of an ear infructescence (PO:0025597). - Gramene:pankaj_jaiswal - TO:cooperl - TO:moorel - - - - - - - - - - An assay to test for aroma and flavor reminiscent of freshly cut grass. - plant_trait_ontology - GRASSYFLVOR - grassy flavour - TO:0000684 - grassy flavor - TO:0000684 - - - - - An assay to test for aroma and flavor reminiscent of freshly cut grass. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay for the soft and juicy texture. - plant_trait_ontology - FRTENDER - TENDER - TO:0000685 - fruit tenderness - TO:0000685 - - - - - An assay for the soft and juicy texture. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay for a juicy appetizingness. - plant_trait_ontology - JUICE - succulence - TO:0000686 - juiciness - TO:0000686 - - - - - An assay for a juicy appetizingness. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An infructescence morphology trait (TO:0000920) which is the number of rows of kernels per ear infructescence (PO:0025597). - MaizeGDB_QTL:99383 - TO_GIT:286 - plant_trait_ontology - KERROWNB - kernel row number per ear - TO:0000687 - In maize, kernel row number is counted on the central, widest part of the uppermost ear infructescence. In comparing to teosinte "rank", kernel row number is divided by two. - kernel row number per ear - TO:0000687 - - - - - An infructescence morphology trait (TO:0000920) which is the number of rows of kernels per ear infructescence (PO:0025597). - TO:cooperl - - - - - - - - - - A infructescence yield trait (TO:0000936) which is the length of a kernel row from base to where kernels end on the ear infructescence (PO:0025597). - TO_GIT:288 - plant_trait_ontology - KERROWLG - kernel set length - TO:0000688 - kernel row length - TO:0000688 - - - - - A infructescence yield trait (TO:0000936) which is the length of a kernel row from base to where kernels end on the ear infructescence (PO:0025597). - TO:cooperl - - - - - - - - - - plant_trait_ontology - GRTENDER - kernel tenderness - TO:0000689 - grain tenderness - TO:0000689 - - - - - - - - - - Measures the maysin content in a plant or plant part. - plant_trait_ontology - MAYSINCN - TO:0000690 - Maysin is a coagulable globulin protein produced by the maize plant. It has insecticide properties. - maysin content - TO:0000690 - - - - - Measures the maysin content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Setosphaeria turcica. - plant_trait_ontology - TO:0000691 - Zea mays northern leaf blight disease resistance - TO:0000691 - - - - - Causal agent: Setosphaeria turcica. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - - - plant_trait_ontology - NLFBTINCUBPD - TO:0000692 - NCLB incubation period - TO:0000692 - - - - - - - - - - - - - - - - - - plant_trait_ontology - AUDPC - NLFBTPROGCURV - TO:0000693 - NCLB area under disease progress curve - TO:0000693 - - - - - - - - - - An assay of firmness and freshness of the fruit. - plant_trait_ontology - CRISP - TO:0000694 - fruit crispness - TO:0000694 - - - - - An assay of firmness and freshness of the fruit. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf margin morphology trait (TO:0002635) which is the color of a leaf margin (PO:0020128). - PATO:0000014 - plant_trait_ontology - LFMCL - leaf margin pigmentation - pigmentation of leaf margin - TO:0000695 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - leaf margin color - TO:0000695 - - - - - A leaf margin morphology trait (TO:0002635) which is the color of a leaf margin (PO:0020128). - PO:0020128 - TO:moorel - - - - - - - - - - Amount of starch present in the plant or plant part. - plant_trait_ontology - STARCHCN - TO:0000696 - starch content - TO:0000696 - - - - - Amount of starch present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - An assay to determine the starch yield from a bigger sample such as from a given population or from a plot or field. It is often carried out initially with the smaller sample but later converted to associate with a large sample for example record starch yield in kilograms per hectare. - plant_trait_ontology - STARCHYLD - TO:0000697 - starch yield - TO:0000697 - - - - - An assay to determine the starch yield from a bigger sample such as from a given population or from a plot or field. It is often carried out initially with the smaller sample but later converted to associate with a large sample for example record starch yield in kilograms per hectare. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - STARCH - mealiness - TO:0000698 - starchiness - TO:0000698 - - - - - - - - - - Catalysis of the reaction: UDP-glucose + D-fructose = UDP + sucrose. - plant_trait_ontology - SUSACT - TO:0000699 - sucrose synthase activity trait - TO:0000699 - - - - - Catalysis of the reaction: UDP-glucose + D-fructose = UDP + sucrose. - GO:GO:0016157 - - - - - - - - - - The quality of having the pleasant taste characteristic of sugar. - plant_trait_ontology - FRSWEET - SWEET - TO:0000700 - fruit sweetness - TO:0000700 - - - - - The quality of having the pleasant taste characteristic of sugar. - Gramene:pankaj_jaiswal - - - - - - - - - - The pressure within the cell resulting from the absorption of water into the vacuole and the imbibition of water by the protoplasm. - plant_trait_ontology - TURGPRES - TO:0000701 - turgor pressure - TO:0000701 - - - - - The pressure within the cell resulting from the absorption of water into the vacuole and the imbibition of water by the protoplasm. - Gramene:pankaj_jaiswal - - - - - - - - - - Concentration of starch present in the plant or plant part. - plant_trait_ontology - STARCHCONC - TO:0000702 - starch concentration - TO:0000702 - - - - - Concentration of starch present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - An enzyme activity trait (TO:0000599) which is the quality of the hydrolysis of amylose or an amylose derivative by amylase. - plant_trait_ontology - TO:0000703 - amylase activity trait - TO:0000703 - - - - - An enzyme activity trait (TO:0000599) which is the quality of the hydrolysis of amylose or an amylose derivative by amylase. - Gramene:pankaj_jaiswal - - - - - - - - - - Catalysis of the hydrolysis of phosphoric monoesters, releasing inorganic phosphate. - plant_trait_ontology - phosphoric monoester hydrolase activity - TO:0000704 - phosphatase activity trait - TO:0000704 - - - - - Catalysis of the hydrolysis of phosphoric monoesters, releasing inorganic phosphate. - GO:GO:0016791 - - - - - - - - - - Catalysis of the reaction: an orthophosphoric monoester + H2O = an alcohol + phosphate. - plant_trait_ontology - ACIDPASEACT - TO:0000705 - acid phosphatase activity trait - TO:0000705 - - - - - Catalysis of the reaction: an orthophosphoric monoester + H2O = an alcohol + phosphate. - EC:3.1.3.2 - GO:0003993 - - - - - - - - - - Describes the color of hull. - plant_trait_ontology - HULCL - TO:0000706 - Hull is the dry outer covering of a grass fruit/grain. The hull is comprised of dry lemma and palea, the two parts of a grass floret. - hull color - TO:0000706 - - - - - Describes the color of hull. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - - - - - - A pericarp morphology trait (TO:0000945) that is the color of the pericarp (PO:0009084). - PATO:0000014 - TO_GIT:292 - plant_trait_ontology - DHULGRCL - PERICARPCL - bran color - dehulled grain color - grain color - TO:0000707 - Pericarp is the wall of a fruit, developed from the ovary or carpel wall. Also scored for grain color or color of the dehulled grain in grasses. - pericarp color - TO:0000707 - - - - - A pericarp morphology trait (TO:0000945) that is the color of the pericarp (PO:0009084). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A whole plant morphology trait (TO:0000398) which is the color of a whole plant (PO:0000003). - PATO:0000014 - TO_GIT:367 - TO_GIT:85 - plant_trait_ontology - TO:0000708 - plant color - TO:0000708 - - - - - A whole plant morphology trait (TO:0000398) which is the color of a whole plant (PO:0000003). - Gramene:pankaj_jaiswal - PO:0000003 - TO:cooperl - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the appearance of glossiness of the leaf surface. Contributed by change in either the amount or content of cuticle wax (PO:0025386) on a leaf (PO:0025034). - plant_trait_ontology - TO:0000709 - If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf gloss - TO:0000709 - - - - - A leaf morphology trait (TO:0000748) which is the appearance of glossiness of the leaf surface. Contributed by change in either the amount or content of cuticle wax (PO:0025386) on a leaf (PO:0025034). - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - Assay to detrmine the amount of globulin proteins. - plant_trait_ontology - TO:0000710 - Globulin proteins also called globular proteins, or spheroproteins are one of the main protein classes. These have a globelike protein structure, that is more or less soluble in aqueous solutions. The two major sub classes are alpha and beta globulins. - globulin protein content - TO:0000710 - - - - - Assay to detrmine the amount of globulin proteins. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the tolerance exhibited by a plant or a group of plants (population) towards the applied herbicide imidazolinone. - PECO:0007633 - plant_trait_ontology - TO:0000711 - It is expected that the herbicide application must not affect the agronomic yield, if any. - imidazolinone sensitivity - TO:0000711 - - - - - An assay to determine the tolerance exhibited by a plant or a group of plants (population) towards the applied herbicide imidazolinone. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the tolerance exhibited by a plant or a group of plants (population) towards the applied herbicide sulfonylurea. - plant_trait_ontology - TO:0000712 - It is expected that the herbicide application must not affect the agronomic yield, if any. - sulfonylurea herbicide sensitivity - TO:0000712 - - - - - An assay to determine the tolerance exhibited by a plant or a group of plants (population) towards the applied herbicide sulfonylurea. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is a brittle endosperm (PO:0009089). - TO_GIT:133 - plant_trait_ontology - TO:0000713 - brittle endosperm - TO:0000713 - - - - - An endosperm morphology trait (TO:0000575) which is a brittle endosperm (PO:0009089). - PO:0009089 - TO:moorel - - - - - - - - - - Absence of seminal roots in the plant. - plant_trait_ontology - absence of seminal roots - TO:0000714 - seminal rootless - TO:0000714 - - - - - Absence of seminal roots in the plant. - Gramene:pankaj_jaiswal - - - - - - - - - - - - In maize ears, the floral meristems undergo repeated dichotomous branching, resulting in fascicled (highly branched and bundled or clustered) ears. - plant_trait_ontology - TO:0000715 - fascicled ear - TO:0000715 - - - - - In maize ears, the floral meristems undergo repeated dichotomous branching, resulting in fascicled (highly branched and bundled or clustered) ears. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is an etched endosperm (PO:0009089). - TO_GIT:133 - plant_trait_ontology - TO:0000716 - This is also an endosperm quality trait (TO:0000587). - etched endosperm - TO:0000716 - - - - - An endosperm morphology trait (TO:0000575) which is an etched endosperm (PO:0009089). - PO:0009089 - TO:moorel - - - - - - - - - - - - An endosperm morphology trait (TO:0000575) which is a rough endosperm (PO:0009089). - PATO:0000700 - TO_GIT:133 - plant_trait_ontology - TO:0000717 - This is also an endosperm quality trait (TO:0000587). Refers to rough PATO:0000700 A texture quality inhering in a bearer by virtue of the bearer's irregular surface. - rough endosperm - TO:0000717 - - - - - An endosperm morphology trait (TO:0000575) which is a rough endosperm (PO:0009089). - PO:0009089 - TO:moorel - - - - - - - - - - - - plant_trait_ontology - wrinkled kernel - TO:0000718 - wrinkled seed - TO:0000718 - - - - - - - - - - - - - - A leaf vein morphology trait (TO:0000820) which is the color of a leaf lamina vein (PO:0020138). - PATO:0000014 - plant_trait_ontology - TO:0000719 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - leaf vein color - TO:0000719 - - - - - A leaf vein morphology trait (TO:0000820) which is the color of a leaf lamina vein (PO:0020138). - PO:0020138 - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0000720 - leaf midrib color - TO:0000720 - - - - - - - - - - A leaf morphology trait (TO:0000748) which is a tightly rolled leaf encasing the next emerging leaf (PO:0025034). - plant_trait_ontology - TO:0000721 - If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf adherence - TO:0000721 - - - - - A leaf morphology trait (TO:0000748) which is a tightly rolled leaf encasing the next emerging leaf (PO:0025034). - Gramene:pankaj_jaiswal - PO:0025034,TO:cooperl - - - - - - - - - - Traits associated with observing effects on the sporocyte development. - plant_trait_ontology - TO:0000722 - sporocyte development trait - TO:0000722 - - - - - Traits associated with observing effects on the sporocyte development. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the microsporocyte development. - plant_trait_ontology - TO:0000723 - microsporocyte development trait - TO:0000723 - - - - - Traits associated with observing effects on the microsporocyte development. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the megasporocyte development. - plant_trait_ontology - TO:0000724 - megasporocyte development trait - TO:0000724 - - - - - Traits associated with observing effects on the megasporocyte development. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A count of the number of megasporocyte that is done to determine any increase or decrease in number. - plant_trait_ontology - TO:0000725 - megasporocyte number - TO:0000725 - - - - - A count of the number of megasporocyte that is done to determine any increase or decrease in number. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A count of the number of microsporocyte that is done to determine any increase or decrease in number. - plant_trait_ontology - TO:0000726 - microsporocyte number - TO:0000726 - - - - - A count of the number of microsporocyte that is done to determine any increase or decrease in number. - Gramene:pankaj_jaiswal - - - - - - - - - - The formation of spores. - plant_trait_ontology - TO:0000727 - sporogenesis - TO:0000727 - - - - - The formation of spores. - Gramene:pankaj_jaiswal - - - - - - - - - - - - The traits associated with various developmental landmarks and processes of cell division during either the meiotic cell cycle or mitotic cell cycle. - GO:GO:0007049 - plant_trait_ontology - cell division cycle - TO:0000728 - cell cycle trait - TO:0000728 - - - - - The traits associated with various developmental landmarks and processes of cell division during either the meiotic cell cycle or mitotic cell cycle. - R:pj - - - - - - - - - - The traits associated with various developmental landmarks and processes of cell division during either the meiotic cell cycle. - GO:GO:0051321 - plant_trait_ontology - TO:0000729 - Meiosis is a type of cell division in which haploid gametes and spores are formed. The process involves a single duplication of the genetic material followed by two mitotic divisions. As a result each daughter cell receives half the chromosomal content (haploid) as the parent cell. - meiotic cell cycle trait - TO:0000729 - - - - - The traits associated with various developmental landmarks and processes of cell division during either the meiotic cell cycle. - Gramene:pankaj_jaiswal - - - - - - - - - - The traits associated with various developmental landmarks and processes of cell division during the mitotic cell cycle. - GO:GO:0000278 - plant_trait_ontology - TO:0000730 - Mitosis is a type of cell division in which a cell duplicates its genetic information (DNA), in order to generate two, identical, daughter cells. Each daughter cell receives the same chromosome number / genetic content as the parent cell. - mitotic cell cycle trait - TO:0000730 - - - - - The traits associated with various developmental landmarks and processes of cell division during the mitotic cell cycle. - GO:pj - - - - - - - - - - Measures the lignin content in a plant or plant part. - plant_trait_ontology - TO:0000731 - lignin content - TO:0000731 - - - - - Measures the lignin content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - TO:0000732 - lignin monomer content - TO:0000732 - - - - - - - - - - Traits associated with the biosynthesis of lignin in a plant or plant part. - GO:GO:0009809 - plant_trait_ontology - lignin biosynthesis - TO:0000733 - lignin biosynthesis trait - TO:0000733 - - - - - Traits associated with the biosynthesis of lignin in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - A fruit length (TO:0002626) of the dehulled grain with pericarp (PO:0009084). - TO:0002760 - PATO:0000122 - plant_trait_ontology - DHULGRLG - GRLG - KERLG - kernel length - length of dehulled grain - length of grain without hull - TO:0000734 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - grain length - TO:0000734 - - - - - A fruit length (TO:0002626) of the dehulled grain with pericarp (PO:0009084). - Gramene:pankaj_jaiswal - PO:0009084 - TO:moorel - - - - - - - - - - The time between the initiation of two leaves on the shoot apical meristem is called a plastochron. - plant_trait_ontology - TO:0000735 - plastochron - TO:0000735 - - - - - The time between the initiation of two leaves on the shoot apical meristem is called a plastochron. - Gramene:pankaj_jaiswal - - - - - - - - - - A multi-tissue plant structure morphology trait (TO:0000836) which is a quality of a plant organ (PO:0009008). - moorel - 2012-04-19T10:36:57Z - TO_GIT:55 - plant_trait_ontology - TO:0000736 - plant organ morphology trait - TO:0000736 - - - - - A multi-tissue plant structure morphology trait (TO:0000836) which is a quality of a plant organ (PO:0009008). - PO:0009008 - POC:cooperl - - - - - - - - - - A stature or vigor trait (TO:0000133) that is a qualitative score of the visual appeal (ideotype) of the whole plant (PO:0000003). - moorel - 2012-04-16T02:18:03Z - TO_GIT:53 - plant_trait_ontology - TO:0000737 - - Includes visual scoring of plant characteristics such as plant height (TO:0000207), uniformity of plants, plant damage by diseases and insects and lodging incidence (TO:0000068). - plant aspect - TO:0000737 - - - - - A stature or vigor trait (TO:0000133) that is a qualitative score of the visual appeal (ideotype) of the whole plant (PO:0000003). - TO:curators - - - - - - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a plant axis (PO:0025004). - moorel - 2012-04-19T10:38:30Z - TO_GIT:55 - plant_trait_ontology - TO:0000738 - plant axis morphology trait - TO:0000738 - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a plant axis (PO:0025004). - PO:0025004 - POC:cooperl - - - - - - - - - - A plant axis morphology trait (TO:0000738) which is a quality of a shoot axis (PO:0025029). - moorel - 2012-04-19T10:40:33Z - TO_GIT:55 - plant_trait_ontology - TO:0000739 - shoot axis morphology trait - TO:0000739 - - - - - A plant axis morphology trait (TO:0000738) which is a quality of a shoot axis (PO:0025029). - PO:0025029 - POC:cooperl - - - - - - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of a branch (PO:0025073). - moorel - 2012-04-19T10:42:49Z - TO_GIT:56 - plant_trait_ontology - TO:0000740 - branch morphology trait - TO:0000740 - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of a branch (PO:0025073). - PO:0025073 - POC:cooperl - - - - - - - - - - A plant axis morphology trait (TO:0000738) which is quality of a tuber (PO:0004543). - moorel - 2012-04-19T10:45:11Z - TO_GIT:56 - plant_trait_ontology - TO:0000741 - tuber morphology trait - TO:0000741 - - - - - A plant axis morphology trait (TO:0000738) which is quality of a tuber (PO:0004543). - PO:0004543 - TO:cooperl - - - - - - - - - - - - A tuber morphology trait (TO:0000741) which is a quality of a subterranean tuber (PO:0004547). - moorel - 2012-04-19T10:46:10Z - TO_GIT:56 - plant_trait_ontology - TO:0000742 - - subterranean shoot axis tuber morphology trait - TO:0000742 - - - - - A tuber morphology trait (TO:0000741) which is a quality of a subterranean tuber (PO:0004547). - PO:0004547 - TO:cooperl - - - - - - - - - - A subterranean tuber morphology trait (TO:0000742) which is the shape of a subterranean tuber (PO:0004547). - moorel - 2012-04-19T10:48:44Z - tuber shape - PATO:0000052 - TO_GIT:56 - plant_trait_ontology - TO:0000743 - - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - subterranean shoot axis tuber shape - TO:0000743 - - - - - A subterranean tuber morphology trait (TO:0000742) which is the shape of a subterranean tuber (PO:0004547). - PO:0004547 - POC:cooperl - - - - - - - - - - A subterranean tuber morphology trait (TO:0000742) which is the size of a subterranean tuber (PO:0004547). - moorel - 2012-04-19T10:51:20Z - tuber size - PATO:0000117 - TO_GIT:56 - plant_trait_ontology - TO:0000744 - - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - subterranean shoot axis tuber size - TO:0000744 - - - - - A subterranean tuber morphology trait (TO:0000742) which is the size of a subterranean tuber (PO:0004547). - PO:0004547 - POC:cooperl - - - - - - - - - - A subterranean tuber morphology trait (TO:0000742) which is the appearance of a subterranean tuber (PO:0004547). - moorel - 2012-04-19T10:54:11Z - tuber appearance - TO_GIT:56 - plant_trait_ontology - TO:0000745 - - A 1-9 scale is used to score the overall appearance of the tuber, with 1 the lowest score (very poor) and 9 the highest (excellent). - subterranean shoot axis tuber appearance - TO:0000745 - - - - - A subterranean tuber morphology trait (TO:0000742) which is the appearance of a subterranean tuber (PO:0004547). - PO:0004547 - POC:cooperl - - - - - - - - - - A subterranean tuber morphology trait (TO:0000742) which is the mass of a subterranean tuber (PO:0004547). - moorel - 2012-04-19T10:56:34Z - tuber mass - PATO:0000125 - TO_GIT:56 - plant_trait_ontology - TO:0000746 - - Refer to mass (PATO:0000125): A physical quality that inheres in a bearer by virtue of the proportion of the bearer's amount of matter. - subterranean shoot axis tuber mass - TO:0000746 - - - - - A subterranean tuber morphology trait (TO:0000742) which is the mass of a subterranean tuber (PO:0004547). - PO:0004547 - POC:cooperl - - - - - - - - - - A plant organ morphology trait (TO:0000736) which is quality of a phyllome (PO:0006001). - moorel - 2012-04-25T01:09:12Z - TO_GIT:60 - plant_trait_ontology - TO:0000747 - phyllome morphology trait - TO:0000747 - - - - - A plant organ morphology trait (TO:0000736) which is quality of a phyllome (PO:0006001). - PO:0006001 - POC:cooperl - - - - - - - - - - A phyllome morphology trait (TO:0000747) which is quality of a leaf (PO:0025034). - moorel - 2012-04-25T01:16:59Z - TO_GIT:60 - plant_trait_ontology - TO:0000748 - - leaf morphology trait - TO:0000748 - - - - - A phyllome morphology trait (TO:0000747) which is quality of a leaf (PO:0025034). - PO:0025034 - POC:cooperl - - - - - - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a cotyledon (PO:0020030). - moorel - 2012-04-25T01:18:38Z - TO_GIT:61 - plant_trait_ontology - TO:0000749 - cotyledon morphology trait - TO:0000749 - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a cotyledon (PO:0020030). - PO:0020030 - POC:cooperl - - - - - - - - - - - - A seedling cotyledon morphology trait (TO:0000774) which is the color of a seedling cotyledon (PO:0025471). - moorel - 2012-04-25T01:38:00Z - PATO:0000014 - TO_GIT:61 - plant_trait_ontology - TO:0000750 - seedling cotyledon color - TO:0000750 - - - - - A seedling cotyledon morphology trait (TO:0000774) which is the color of a seedling cotyledon (PO:0025471). - PO:0025471 - POC:cooperl - - - - - - - - - - A seedling cotyledon morphology trait (TO:0000774) which is the number of seedling cotyledons (PO:0025471). - moorel - 2012-04-25T01:43:38Z - PATO:0000070 - TO_GIT:61 - plant_trait_ontology - TO:0000751 - seedling cotyledon number - TO:0000751 - - - - - A seedling cotyledon morphology trait (TO:0000774) which is the number of seedling cotyledons (PO:0025471). - PO:0025471 - POC:cooperl - - - - - - - - - - - - A seedling cotyledon morphology trait (TO:0000774) which is the size of a seedling cotyledon (PO:0025471). - moorel - 2012-04-25T01:47:23Z - PATO:0000117 - TO_GIT:60 - plant_trait_ontology - TO:0000752 - seedling cotyledon size - TO:0000752 - - - - - A seedling cotyledon morphology trait (TO:0000774) which is the size of a seedling cotyledon (PO:0025471). - PO:0025471 - POC:cooperl - - - - - - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a coleoptile (PO:0020033). - moorel - 2012-04-26T12:12:50Z - TO_GIT:62 - plant_trait_ontology - TO:0000753 - coleoptile morphology trait - TO:0000753 - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a coleoptile (PO:0020033). - PO:0020033 - POC:cooperl - - - - - - - - - - A cardinal organ part of a multi-tissue plant structure morphology trait (TO:0000837) which is a quality of a cardinal organ part (PO:0025001). - moorel - 2012-04-26T13:09:13Z - TO_GIT:63 - plant_trait_ontology - TO:0000754 - cardinal organ part morphology trait - TO:0000754 - - - - - A cardinal organ part of a multi-tissue plant structure morphology trait (TO:0000837) which is a quality of a cardinal organ part (PO:0025001). - PO:0025001 - POC:cooperl - TO:moorel - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a shoot axis internode (PO:0005005). - moorel - 2012-04-26T13:12:37Z - TO_GIT:64 - plant_trait_ontology - TO:0000755 - shoot axis internode morphology trait - TO:0000755 - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a shoot axis internode (PO:0005005). - PO:0005005 - POC:cooperl - - - - - - - - - - A shoot axis internode morphology trait (TO:0000755) which is a quality of a stem internode (PO:0020142). - moorel - 2012-04-26T13:17:31Z - TO_GIT:64 - plant_trait_ontology - TO:0000756 - stem internode morphology trait - TO:0000756 - - - - - A shoot axis internode morphology trait (TO:0000755) which is a quality of a stem internode (PO:0020142). - PO:0020142 - TO:cooperl - - - - - - - - - - A stem internode morphology trait (TO:0000756) which is a quality of a hypocotyl (PO:0020100). - moorel - 2012-04-26T13:21:05Z - TO_GIT:64 - plant_trait_ontology - TO:0000757 - hypocotyl morphology trait - TO:0000757 - - - - - A stem internode morphology trait (TO:0000756) which is a quality of a hypocotyl (PO:0020100). - PO:0020100 - TO:cooperl - - - - - - - - - - A stem internode morphology trait (TO:0000756) which is a quality of a mesocotyl (PO:0020037). - moorel - 2012-04-26T13:30:24Z - TO_GIT:64 - plant_trait_ontology - TO:0000758 - mesocotyl morphology trait - TO:0000758 - - - - - A stem internode morphology trait (TO:0000756) which is a quality of a mesocotyl (PO:0020037). - PO:0020037 - POC:cooperl - - - - - - - - - - - - A seedling hypocotyl morphology trait (TO:0000769) which is the color of a seedling hypocotyl (PO:0025291). - moorel - 2012-04-26T13:41:13Z - PATO:0000014 - TO_GIT:64 - plant_trait_ontology - TO:0000759 - The color of a seedling hypocotyl (PO:0025291) during the hypocotyl emergence stage (PO:0007043). - seedling hypocotyl color - TO:0000759 - - - - - A seedling hypocotyl morphology trait (TO:0000769) which is the color of a seedling hypocotyl (PO:0025291). - PO:0025291 - POC:cooperl - - - - - - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color green. - moorel - 2012-04-30T13:15:20Z - PATO:0000014 - PATO:0000320 - plant_trait_ontology - TO:0000760 - Refers to green (PATO:0000320): A color hue with medium-low wavelength of that portion of the visible spectrum lying between yellow and blue, evoked in the human observer by radiant energy with wavelengths of approximately 490 to 570 nanometers. - seedling hypocotyl green - TO:0000760 - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color green. - PATO:0000320 - PO:0020100 - POC:cooperl - - - - - - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color green with a bronze band. - moorel - 2012-04-30T13:16:51Z - PATO:0000014 - PATO:0000320 - PATO:0002363 - plant_trait_ontology - TO:0000761 - Refers to green ((PATO:0000320): A color hue with medium-low wavelength of that portion of the visible spectrum lying between yellow and blue, evoked in the human observer by radiant energy with wavelengths of approximately 490 to 570 nanometers) and bronze ((PATO:0002363): A medium brown color with a metallic sheen, resembles the actual alloy bronze). - seedling hypocotyl green with bronze band - TO:0000761 - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color green with a bronze band. - PATO:0000320 - PO:0020100 - POC:cooperl - - - - - - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color purple. - moorel - 2012-04-30T13:18:41Z - PATO:0000014 - PATO:0000951 - plant_trait_ontology - TO:0000762 - Refers to purple (PATO:0000951): A color that falls about midway between red and blue in hue. - seedling hypocotyl purple - TO:0000762 - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color purple. - PATO:0000951 - PO:0020100 - POC:cooperl - - - - - - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color dark purple. - moorel - 2012-04-30T13:20:07Z - PATO:0000014 - PATO:0001259 - plant_trait_ontology - TO:0000763 - Refers to dark purple (PATO:0001259): A color consisting of purple color and low brightness. - seedling hypocotyl dark purple - TO:0000763 - - - - - A seedling hypocotyl color trait (TO:0000759) where a hypocotyl (PO:0020100) is observed to have the color dark purple. - PATO:0001259 - PO:0020100 - POC:cooperl - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a stalk (PO:0025066). - moorel - 2012-04-30T13:27:43Z - plant_trait_ontology - TO:0000764 - stalk morphology trait - TO:0000764 - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a stalk (PO:0025066). - PO:0025066 - POC:cooperl - - - - - - - - - - A stalk morphology trait (TO:0000764) which is a quality of a petiole (PO:0020038). - moorel - 2012-04-30T13:29:38Z - TO_GIT:87 - plant_trait_ontology - TO:0000765 - petiole morphology trait - TO:0000765 - - - - - A stalk morphology trait (TO:0000764) which is a quality of a petiole (PO:0020038). - PO:0020038 - POC:cooperl - - - - - - - - - - A petiole morphology trait (TO:0000765) which is the length of a petiole (PO:0020038). - moorel - 2012-04-30T13:31:22Z - PATO:0000122 - TO_GIT:87 - plant_trait_ontology - TO:0000766 - petiole length - TO:0000766 - - - - - A petiole morphology trait (TO:0000765) which is the length of a petiole (PO:0020038). - PO:0020038 - POC:cooperl - - - - - - - - - - A petiole morphology trait (TO:0000765) which is the shape of a petiole (PO:0020038). - moorel - 2012-04-30T13:33:50Z - PATO:0000052 - TO_GIT:87 - plant_trait_ontology - TO:0000767 - petiole shape - TO:0000767 - - - - - A petiole morphology trait (TO:0000765) which is the shape of a petiole (PO:0020038). - PO:0020038 - POC:cooperl - - - - - - - - - - A petiole morphology trait (TO:0000765) which is the size of a petiole (PO:0020038). - moorel - 2012-04-30T13:37:02Z - PATO:0000117 - TO_GIT:87 - plant_trait_ontology - TO:0000768 - petiole size - TO:0000768 - - - - - A petiole morphology trait (TO:0000765) which is the size of a petiole (PO:0020038). - PO:0020038 - POC:cooperl - - - - - - - - - - A hypocotyl morphology trait (TO:0000757) which a seedling hypocotyl (PO:0025291). - moorel - 2012-05-03T12:51:59Z - plant_trait_ontology - TO:0000769 - Use this term to describe traits for a seedling hypocotyl (PO:002529; a hypocotyl (PO:0020100) that is part of a whole plant (PO:0000003) in the seedling development stage (PO:0007131)). - seedling hypocotyl morphology trait - TO:0000769 - - - - - A hypocotyl morphology trait (TO:0000757) which a seedling hypocotyl (PO:0025291). - PO:0025291 - POC:cooperl - - - - - - - - - - A bacterial disease resistance (TO:0000315) that is involved in the response to bacterial blight disease. - moorel - 2012-05-04T13:30:57Z - TO_GIT:66 - plant_trait_ontology - TO:0000770 - bacterial blight disease resistance - TO:0000770 - - - - - A bacterial disease resistance (TO:0000315) that is involved in the response to bacterial blight disease. - POC:cooperl - - - - - - - - - - A hypocotyl morphology trait (TO:0000757) which is a quality of an embryo hypocotyl (PO:0025290). - moorel - 2012-05-04T13:47:12Z - plant_trait_ontology - TO:0000771 - Use this term to describe traits for embryo hypocotyl (A hypocotyl (PO:0020100) that is part of a plant embryo (PO:0009009)). - embryo hypocotyl morphology trait - TO:0000771 - - - - - A hypocotyl morphology trait (TO:0000757) which is a quality of an embryo hypocotyl (PO:0025290). - PO:0025290 - POC:cooperl - - - - - - - - - - A mesocotyl morphology trait (TO:0000758) which is a quality of a seedling mesocotyl (PO:0025295). - moorel - 2012-05-04T13:52:34Z - plant_trait_ontology - TO:0000772 - Use this term to descride traits for seedling mesocotyl (PO:0025295: A seedling mesocotyl is an elongation of and embryonic mesocotyl that is part of a whole plant in the seedling phase). - seedling mesocotyl morphology trait - TO:0000772 - - - - - A mesocotyl morphology trait (TO:0000758) which is a quality of a seedling mesocotyl (PO:0025295). - PO:0025295 - POC:cooperl - - - - - - - - - - A mesocotyl morphology trait (TO:0000758) which is a quality of an embryo mesocotyl (PO:0025294). - moorel - 2012-05-04T13:57:56Z - plant_trait_ontology - TO:0000773 - embryo mesocotyl morphology trait - TO:0000773 - - - - - A mesocotyl morphology trait (TO:0000758) which is a quality of an embryo mesocotyl (PO:0025294). - PO:0025294 - POC:cooperl - - - - - - - - - - A cotyledon morphology trait (TO:0000749) which is a quality of a seedling cotyledon (PO:0025471). - moorel - 2012-05-11T12:28:54Z - TO_GIT:61 - plant_trait_ontology - TO:0000774 - Use this term to describe traits for a seedling cotyledon ((PO:0025471):A cotyledon (PO:0020030) that is part of a whole plant (PO:0000003) in the seedling development stage (PO:0007131)). - seedling cotyledon morphology trait - TO:0000774 - - - - - A cotyledon morphology trait (TO:0000749) which is a quality of a seedling cotyledon (PO:0025471). - PO:0025471 - POC:cooperl - - - - - - - - - - A cotyledon morphology trait (TO:0000749) which is a quality of a plant embryo cotyledon (PO:0025470). - moorel - 2012-05-11T12:34:04Z - plant_trait_ontology - TO:0000775 - Use this term to describe traits for an plant embryo cotyledon (PO:0025470): A cotyledon (PO:0020030) that is part of a plant embryo (PO:0009009). - plant embryo cotyledon morphology trait - TO:0000775 - - - - - A cotyledon morphology trait (TO:0000749) which is a quality of a plant embryo cotyledon (PO:0025470). - PO:0025470 - POC:cooperl - - - - - - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of a peduncle (PO:0009053). - moorel - 2012-05-17T12:28:05Z - TO_GIT:88 - plant_trait_ontology - TO:0000776 - - - - peduncle morphology trait - TO:0000776 - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of a peduncle (PO:0009053). - PO:0009053 - POC:cooperl - - - - - - - - - - A peduncle morphology trait (TO:0000776) which is a quality of the presence of cuticular wax (PO:0025386). - moorel - 2012-05-17T12:29:02Z - TO_GIT:88 - plant_trait_ontology - TO:0000777 - - peduncle waxiness - TO:0000777 - - - - - A peduncle morphology trait (TO:0000776) which is a quality of the presence of cuticular wax (PO:0025386). - PO:0025386 - TO:cooperl - - - - - - - - - - A peduncle morphology trait (TO:0000776) which is the type of a peduncle (PO:0009053). - moorel - 2012-05-17T13:54:47Z - plant_trait_ontology - TO:0000778 - - peduncle type - TO:0000778 - - - - - A peduncle morphology trait (TO:0000776) which is the type of a peduncle (PO:0009053). - PO:0009053 - POC:cooperl - - - - - - - - - - A peduncle morphology trait (TO:0000776) which is the color of a peduncle (PO:0009053). - moorel - 2012-05-17T13:58:50Z - PATO:0000014 - plant_trait_ontology - TO:0000779 - - Refers to the color ((PATO:0000014):A composite chromatic quality composed of hue, saturation and intensity parts) of a peduncle (PO:0009053). - peduncle color - TO:0000779 - - - - - A peduncle morphology trait (TO:0000776) which is the color of a peduncle (PO:0009053). - PO:0009053 - POC:cooperl - - - - - - - - - - A peduncle morphology trait (TO:0000776) which is the attachment quality of a peduncle (PO:0009053). - moorel - 2012-05-17T14:01:07Z - PATO:0001435 - plant_trait_ontology - pod attachment - TO:0000780 - - Refers to the attachment quatlity ((PATO:0001435): A structural quality inhering in a bearer by virtue of the bearer's having connection or association with another entity) of a peduncle (PO:0009053). - peduncle attachment - TO:0000780 - - - - - A peduncle morphology trait (TO:0000776) which is the attachment quality of a peduncle (PO:0009053). - PO:0009053 - POC:cooperl - - - - - - - - - - A seedling hypocotyl morphology trait (TO:0000769) which is the size of a seedling hypocotyl (PO:0025291). - moorel - 2012-05-17T14:19:59Z - PATO:0000117 - plant_trait_ontology - TO:0000781 - - seedling hypocotyl size - TO:0000781 - - - - - A seedling hypocotyl morphology trait (TO:0000769) which is the size of a seedling hypocotyl (PO:0025291). - PO:0025291 - POC:cooperl - - - - - - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of an inflorescence axis (PO:0020122). - moorel - 2012-05-17T14:39:45Z - plant_trait_ontology - TO:0000782 - inflorescence axis morphology trait - TO:0000782 - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of an inflorescence axis (PO:0020122). - PO:0020122 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000782) which is the size of an inflorescence axis (PO:0020122). - moorel - 2012-05-17T14:42:14Z - PATO:0000117 - plant_trait_ontology - TO:0000783 - - Refers to the size ((PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude) of an inflorescence axis (PO:0020122). - inflorescence axis size - TO:0000783 - - - - - An inflorescence morphology trait (TO:0000782) which is the size of an inflorescence axis (PO:0020122). - PO:0020122 - POC:cooperl - - - - - - - - - - - - A inflorescence axis morphology trait (TO:0000782) which is a quality of an inflorescence branch (PO:0009081). - moorel - 2012-05-18T13:25:20Z - plant_trait_ontology - TO:0000784 - inflorescence branch morphology trait - TO:0000784 - - - - - A inflorescence axis morphology trait (TO:0000782) which is a quality of an inflorescence branch (PO:0009081). - PO:0009081 - TO:cooperl - - - - - - - - - - An inflorescence branch morphology trait (TO:0000784) which is a quality of a tassel branch (PO:0006323). - moorel - 2012-05-18T13:29:07Z - TO_GIT:89 - plant_trait_ontology - TO:0000785 - tassel branch morphology trait - TO:0000785 - - - - - An inflorescence branch morphology trait (TO:0000784) which is a quality of a tassel branch (PO:0006323). - PO:0006323 - POC:coopler - - - - - - - - - - A shoot system morphology trait (TO:0000077) that is a quality of a reproductive shoot system (PO:0025082). - moorel - 2012-05-18T13:35:01Z - TO_GIT:57 - plant_trait_ontology - TO:0000786 - reproductive shoot system morphology trait - TO:0000786 - - - - - A shoot system morphology trait (TO:0000077) that is a quality of a reproductive shoot system (PO:0025082). - PO:0025082 - TO:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the waxiness of an inflorescence (PO:0009049). - moorel - 2012-05-18T13:38:09Z - plant_trait_ontology - TO:0000787 - - inflorescence waxiness - TO:0000787 - - - - - An inflorescence morphology trait (TO:0000373) which is the waxiness of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of a tassel inflorescence (PO:0020126). - moorel - 2012-05-18T13:45:59Z - TO_GIT:89 - plant_trait_ontology - TO:0000788 - - tassel inflorescence morphology trait - TO:0000788 - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of a tassel inflorescence (PO:0020126). - PO:0020126 - POC:cooperl - - - - - - - - - - A shoot system morphology trait (TO:0000077) which is a quality of a bud (PO:0000055). - moorel - 2012-05-24T13:52:40Z - TO_GIT:91 - plant_trait_ontology - TO:0000789 - bud morphology trait - TO:0000789 - - - - - A shoot system morphology trait (TO:0000077) which is a quality of a bud (PO:0000055). - PO:0000055 - TO:cooperl - - - - - - - - - - A bud morphology trait (TO:0000789) which is a quality of an axillary bud (PO:0004709). - moorel - 2012-05-24T13:55:08Z - TO_GIT:91 - plant_trait_ontology - TO:0000790 - - axillary bud morphology trait - TO:0000790 - - - - - A bud morphology trait (TO:0000789) which is a quality of an axillary bud (PO:0004709). - PO:0004709 - POC:cooperl - - - - - - - - - - An axillary bud morphology trait (TO:0000790) which the size of an axillary bud (PO:0004709). - moorel - 2012-05-30T13:20:21Z - PATO:0000117 - TO_GIT:91 - plant_trait_ontology - TO:0000791 - - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - axillary bud size - TO:0000791 - - - - - An axillary bud morphology trait (TO:0000790) which the size of an axillary bud (PO:0004709). - PO:0004709 - POC:cooperl - - - - - - - - - - An axillary bud morphology trait (TO:0000790) which is the number of axillary buds (PO:0004709) on a stalk or stem. - moorel - 2012-05-30T13:23:10Z - PATO:0001056 - TO_GIT:91 - plant_trait_ontology - TO:0000792 - - Refer to number (PATO:0001056). - axillary bud number - TO:0000792 - - - - - An axillary bud morphology trait (TO:0000790) which is the number of axillary buds (PO:0004709) on a stalk or stem. - PO:0004709 - POC:cooperl - - - - - - - - - - An axillary bud morphology trait (TO:0000790) which is the shape of an axillary bud (PO:0004709). - moorel - 2012-05-30T13:25:45Z - PATO:0000052 - TO_GIT:91 - plant_trait_ontology - TO:0000793 - - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - axillary bud shape - TO:0000793 - - - - - An axillary bud morphology trait (TO:0000790) which is the shape of an axillary bud (PO:0004709). - PO:0004709 - POC:cooperl - - - - - - - - - - An axillary bud morphology trait (TO:0000790) which is the prominence of an axillary bud (PO:0004709). - moorel - 2012-05-30T13:29:13Z - PATO:0014820 - TO_GIT:91 - plant_trait_ontology - TO:0000794 - - Refer to prominent (PATO:0014820): A protruding quality inhering in a bearer by virtue of the bearer's standing out or projecting beyond a surface or line. Promenence categorized by hidden, medium or exposed. - axillary bud prominence - TO:0000794 - - - - - An axillary bud morphology trait (TO:0000790) which is the prominence of an axillary bud (PO:0004709). - PO:0004709 - POC:cooperl - - - - - - - - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the color of a tassel inflorescence (PO:0020126). - moorel - 2012-05-30T13:56:54Z - PATO:0000014 - TO_GIT:89 - plant_trait_ontology - TO:0000795 - - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - tassel inflorescence color - TO:0000795 - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the color of a tassel inflorescence (PO:0020126). - PO:0020126 - POC:cooperl - - - - - - - - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the circumference of a tassel inflorescence (PO:0020126). - moorel - 2012-05-30T14:00:19Z - PATO:0001684 - TO_GIT:89 - plant_trait_ontology - TO:0000796 - - Refer to circumference PATO:0001684: An 1-D extent quality which is equal to the length of the closed curve of a circle. - tassel inflorescence circumference - TO:0000796 - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the circumference of a tassel inflorescence (PO:0020126). - PO:0020126 - POC:cooperl - - - - - - - - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the height of a tassel inflorescence (PO:0020126). - moorel - 2012-05-30T14:04:13Z - PATO:0000119 - TO_GIT:89 - plant_trait_ontology - TO:0000797 - - Refer to height PATO:0000119: A 1-D extent quality inhering in a bearer by virtue of the bearer's vertical dimension of extension. - tassel inflorescence height - TO:0000797 - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the height of a tassel inflorescence (PO:0020126). - PO:0020126 - POC:cooperl - - - - - - - - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the length of a tassel inflorescence (PO:0020126). - moorel - 2012-05-30T14:06:52Z - PATO:0000122 - TO_GIT:89 - plant_trait_ontology - TO:0000798 - - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - tassel inflorescence length - TO:0000798 - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the length of a tassel inflorescence (PO:0020126). - PO:0020126 - POC:cooperl - - - - - - - - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the diameter of a tassel inflorescence (PO:0020126). - moorel - 2012-05-30T14:09:31Z - PATO:0001334 - TO_GIT:89 - plant_trait_ontology - TO:0000799 - - Refer to diameter PATO:0001334: A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - tassel inflorescence diameter - TO:0000799 - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the diameter of a tassel inflorescence (PO:0020126). - PO:0020126 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the density of an inflorescence (PO:0009049). - moorel - 2012-06-01T13:16:10Z - PATO:0001070 - TO_GIT:92 - TO_GIT:97 - head density - plant_trait_ontology - TO:0000800 - Refer to absolute density PATO:0001070. - inflorescence density - TO:0000800 - - - - - An inflorescence morphology trait (TO:0000373) which is the density of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the depth of an inflorescence (PO:0009049). - moorel - 2012-06-01T13:18:51Z - PATO:0001595 - TO_GIT:92 - TO_GIT:97 - head depth - plant_trait_ontology - TO:0000801 - Refer to depth PATO:0001595: A 1-D extent quality inhering in a bearer by virtue of the bearer's downward or backward or inward dimenision. - inflorescence depth - TO:0000801 - - - - - An inflorescence morphology trait (TO:0000373) which is the depth of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which with the diameter of an inflorescence (PO:0009049). - moorel - 2012-06-01T13:20:49Z - TO:0000679 - PATO:0001334 - TO_GIT:92 - TO_GIT:97 - head diameter - plant_trait_ontology - TO:0000802 - Refer to diameter PATO:0001334:A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - inflorescence diameter - TO:0000802 - - - - - An inflorescence morphology trait (TO:0000373) which with the diameter of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the weight of an inflorescence (PO:0009049). - moorel - 2012-06-01T13:23:12Z - PATO:0000128 - TO_GIT:92 - TO_GIT:97 - head weight - plant_trait_ontology - TO:0000803 - Refer to weight PATO:0000128:A physical quality inhering in a bearer that has mass near a gravitational body. - inflorescence weight - TO:0000803 - - - - - An inflorescence morphology trait (TO:0000373) which is the weight of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the width of an inflorescence (PO:0009049). - moorel - 2012-06-01T13:25:43Z - TO:0000637 - PATO:0000921 - TO_GIT:92 - TO_GIT:97 - head width - plant_trait_ontology - INFLWD - TO:0000804 - Refer to width PATO:0000921: A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - inflorescence width - TO:0000804 - - - - - An inflorescence morphology trait (TO:0000373) which is the width of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which with the texture of an inflorescence (PO:0009049). - moorel - 2012-06-01T13:28:08Z - PATO:0000150 - TO_GIT:92 - TO_GIT:97 - head texture - plant_trait_ontology - TO:0000805 - Refer to texture PATO:0000150: A morphologic quality inhering in a bearer by virtue of the bearer's relative size, organization and distribution of its surface elements or the representation or invention of the appearance of its surface; visual and tactile surface characteristics. - inflorescence texture - TO:0000805 - - - - - An inflorescence morphology trait (TO:0000373) which with the texture of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the presence of an inflorescence (PO:0009049). - moorel - 2012-06-01T13:30:09Z - PATO:0000458 - TO_GIT:97 - plant_trait_ontology - TO:0000806 - Refer to presence value PATO:0000458. - inflorescence presence - TO:0000806 - - - - - An inflorescence morphology trait (TO:0000373) which is the presence of an inflorescence (PO:0009049). - PO:0009049 - POC:cooperl - - - - - - - - - - A collective organ part structure morphology trait (TO:0000841) which is a quality of a pseudostem (PO:0025248). - moorel - 2012-06-01T13:35:28Z - TO_GIT:94 - TO_GIT:96 - plant_trait_ontology - TO:0000807 - - pseudostem morphology trait - TO:0000807 - - - - - A collective organ part structure morphology trait (TO:0000841) which is a quality of a pseudostem (PO:0025248). - PO:0025248 - TO:cooperl - - - - - - - - - - A pseudostem morphology trait (TO:0000807) which is the length of a pseudostem (PO:0025248). - moorel - 2012-06-01T13:38:37Z - PATO:0000122 - TO_GIT:94 - plant_trait_ontology - TO:0000808 - - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - pseudostem length - TO:0000808 - - - - - A pseudostem morphology trait (TO:0000807) which is the length of a pseudostem (PO:0025248). - PO:0025248 - TO:cooperl - - - - - - - - - - A pseudostem morphology trait (TO:0000807) which is the shape of a pseudostem (PO:0025248). - moorel - 2012-06-01T13:40:25Z - PATO:0000052 - TO_GIT:94 - TO_GIT:96 - plant_trait_ontology - TO:0000809 - - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - pseudostem shape - TO:0000809 - - - - - A pseudostem morphology trait (TO:0000807) which is the shape of a pseudostem (PO:0025248). - PO:0025248 - TO:cooperl - - - - - - - - - - A pseudostem morphology trait (TO:0000807) which is the color of a pseudostem (PO:0025248). - moorel - 2012-06-01T13:43:28Z - PATO:0000014 - TO_GIT:94 - TO_GIT:96 - plant_trait_ontology - TO:0000810 - - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - pseudostem color - TO:0000810 - - - - - A pseudostem morphology trait (TO:0000807) which is the color of a pseudostem (PO:0025248). - PO:0025248 - TO:cooperl - - - - - - - - - - A pseudostem morphology trait (TO:0000807) which is the diameter of a pseudostem (PO:0025248). - moorel - 2012-06-01T13:45:05Z - PATO:0001334 - TO_GIT:94 - TO_GIT:96 - plant_trait_ontology - TO:0000811 - - Refer to diameter PATO:0001334:A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - pseudostem diameter - TO:0000811 - - - - - A pseudostem morphology trait (TO:0000807) which is the diameter of a pseudostem (PO:0025248). - PO:0025248 - TO:cooperl - - - - - - - - - - A tassel branch morphology trait (TO:0000785) which is the dry weight of a tassel branch (PO:0006323) prior to pollen shed. - moorel - 2012-06-26T12:37:26Z - PATO:0000128 - PATO:0001824 - TO_GIT:89 - plant_trait_ontology - TO:0000812 - Refer to dry PATO:0001824: A wetness quality inhering in a bearer by virtue of the bearer's not being covered by a liquid. -Refer to weight PATO:0000128: A physical quality inhering in a bearer that has mass near a gravitational body. - tassel branch dry weight - TO:0000812 - - - - - A tassel branch morphology trait (TO:0000785) which is the dry weight of a tassel branch (PO:0006323) prior to pollen shed. - PO:0006323 - POC:cooperl - - - - - - - - - - A tassel branch morphology trait (TO:0000785) which is the number of tassel branches (PO:0006323). - moorel - 2012-06-26T12:40:53Z - PATO:0001056 - TO_GIT:89 - plant_trait_ontology - TO:0000813 - Refer to number PATO:0001056. - tassel branch number - TO:0000813 - - - - - A tassel branch morphology trait (TO:0000785) which is the number of tassel branches (PO:0006323). - PO:0006323 - POC:cooperl - - - - - - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the type of tassel inflorescence (PO:0020126). - moorel - 2012-06-26T12:47:20Z - PATO:0000052 - TO_GIT:89 - plant_trait_ontology - TO:0000814 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - tassel inflorescence type - TO:0000814 - - - - - A tassel inflorescence morphology trait (TO:0000788) which is the type of tassel inflorescence (PO:0020126). - PO:0020126 - POC:cooperl - - - - - - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a bract (PO:0009055). - moorel - 2012-06-26T14:29:09Z - TO_GIT:109 - plant_trait_ontology - <new synonym> - TO:0000815 - bract morphology trait - TO:0000815 - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a bract (PO:0009055). - PO:0009055 - POC:cooperl - - - - - - - - - - A bract morphology trait (TO:0000815) which is the quality of an inflorescence bract (PO:0009054). - moorel - 2012-06-26T14:31:08Z - TO_GIT:110 - husk - plant_trait_ontology - TO:0000816 - inflorescence bract morphology trait - TO:0000816 - - - - - A bract morphology trait (TO:0000815) which is the quality of an inflorescence bract (PO:0009054). - PO:0009054 - TO:cooperl - - - - - - - - - - An inflorescence bract morphology trait (TO:0000816) which is the length of an inflorescence bract (PO:0009054). - moorel - 2012-06-26T14:34:28Z - PATO:0000122 - TO_GIT:110 - husk length - plant_trait_ontology - TO:0000817 - - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - inflorescence bract length - TO:0000817 - - - - - An inflorescence bract morphology trait (TO:0000816) which is the length of an inflorescence bract (PO:0009054). - PO:0009054 - POC:cooperl - - - - - - - - - - An inflorescence bract morphology trait (TO:0000816) which is the cover of an inflorescence bract (PO:0009054) measured as percentage of plants with ears that are not completely covered by the inflorescence bracts. - moorel - 2012-06-26T14:38:41Z - TO_GIT:110 - husk cover - plant_trait_ontology - TO:0000818 - - inflorescence bract cover - TO:0000818 - - - - - An inflorescence bract morphology trait (TO:0000816) which is the cover of an inflorescence bract (PO:0009054) measured as percentage of plants with ears that are not completely covered by the inflorescence bracts. - PO:0009054 - POC:cooperl - - - - - - - - - - An inflorescence bract morphology trait (TO:0000819) which is the color of an inflorescence bract (PO:0009054). - moorel - 2012-06-26T14:41:14Z - PATO:0000014 - TO_GIT:110 - husk color - plant_trait_ontology - TO:0000819 - - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - inflorescence bract color - TO:0000819 - - - - - An inflorescence bract morphology trait (TO:0000819) which is the color of an inflorescence bract (PO:0009054). - PO:0009054 - POC:cooperl - - - - - - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a leaf lamina vein (PO:0020138). - moorel - 2012-07-02T11:39:41Z - TO_GIT:91 - plant_trait_ontology - TO:0000820 - leaf vein morphology trait - TO:0000820 - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a leaf lamina vein (PO:0020138). - PO:0020138 - POC:cooperl - - - - - - - - - - A leaf vein morphology trait (TO:0000820) which is the size of a leaf lamina vein (PO:0020138). - moorel - 2012-07-02T11:45:41Z - PATO:0000117 - TO_GIT:91 - plant_trait_ontology - TO:0000821 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - leaf vein size - TO:0000821 - - - - - A leaf vein morphology trait (TO:0000820) which is the size of a leaf lamina vein (PO:0020138). - PO:0020138 - POC:cooperl - - - - - - - - - - - - A leaf vein morphology trait (TO:0000820) which is a quality of a leaf midvein (PO:0020139). - moorel - 2012-07-02T11:51:56Z - leaf midrib - TO_GIT:91 - plant_trait_ontology - TO:0000822 - leaf midvein morphology trait - TO:0000822 - - - - - A leaf vein morphology trait (TO:0000820) which is a quality of a leaf midvein (PO:0020139). - PO:0020139 - POC:cooperl - - - - - - - - - - - - A leaf midvein morphology trait (TO:0000822) which is the thickness of a leaf midvein (PO:0020139). - moorel - 2012-07-02T11:56:25Z - leaf midrib - PATO:0000915 - TO_GIT:91 - plant_trait_ontology - TO:0000823 - Refer to thickness (PATO:0000915): A 1-D extent quality which is equal to the dimension through an object as opposed to its length or width. - leaf midvein thickness - TO:0000823 - - - - - A leaf midvein morphology trait (TO:0000822) which is the thickness of a leaf midvein (PO:0020139). - PO:0020139 - POC:cooperl - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the attitude of a leaf (PO:0025034). - moorel - 2012-07-02T12:06:18Z - TO_GIT:91 - plant_trait_ontology - TO:0000824 - Leaf attitude traits refer to the way a leaf is naturally held on the plant. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf attitude - TO:0000824 - - - - - A leaf morphology trait (TO:0000748) which is the attitude of a leaf (PO:0025034). - PO:0025034 - TO:cooperl - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the flexibility of a leaf (PO:0025034). - moorel - 2012-07-02T12:12:45Z - PATO:0001543 - TO_GIT:91 - plant_trait_ontology - TO:0000825 - Refer to flexibility (PATO:0001543): A physical quality inhering in a bearer by virtue of the bearer's disposition to being turned, bowed, or twisted without breaking. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf flexibility - TO:0000825 - - - - - A leaf morphology trait (TO:0000748) which is the flexibility of a leaf (PO:0025034). - PO:0025034 - POC:cooperl - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the volume of a leaf (PO:0025034). - moorel - 2012-07-02T12:21:58Z - PATO:0000918 - TO_GIT:91 - plant_trait_ontology - TO:0000826 - Refer to volume (PATO:0000918): A 3-D extent quality inhering in a bearer by virtue of the bearer's amount of 3-dimensional space it occupies. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf volume - TO:0000826 - - - - - A leaf morphology trait (TO:0000748) which is the volume of a leaf (PO:0025034). - PO:0025034 - TO:cooperl - - - - - - - - - - A leaf lamina morphology trait (TO:0000829) which is the area of a leaf lamina (PO:0020039). - moorel - 2012-07-02T12:30:01Z - PATO:0001323 - TO_GIT:91 - plant_trait_ontology - TO:0000827 - Refer to area (PATO:0001323): A 2-D extent quality inhering in a bearer by virtue of the bearer's two dimensional extent. - leaf lamina area - TO:0000827 - - - - - A leaf lamina morphology trait (TO:0000829) which is the area of a leaf lamina (PO:0020039). - PO:0020039 - POC:cooperl - - - - - - - - - - A leaf morphology trait (TO:0000748) which is a quality of the cover of a leaf (PO:0025034). - moorel - 2012-07-02T12:36:51Z - TO_GIT:91 - plant_trait_ontology - TO:0000828 - leaf cover - TO:0000828 - - - - - A leaf morphology trait (TO:0000748) which is a quality of the cover of a leaf (PO:0025034). - PO:0025034 - POC:cooperl - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf lamina (PO:0020039). - moorel - 2012-07-02T13:36:23Z - plant_trait_ontology - TO:0000829 - leaf lamina morphology trait - TO:0000829 - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf lamina (PO:0020039). - PO:0020039 - - - - - - - - - - A leaf margin morphology trait (TO:0002635)which is a quality of a leaf lamina margin (PO:0025009). - moorel - 2012-07-02T13:58:07Z - TO_GIT:142 - plant_trait_ontology - TO:0000830 - leaf lamina margin morphology trait - TO:0000830 - - - - - A leaf margin morphology trait (TO:0002635)which is a quality of a leaf lamina margin (PO:0025009). - PO:0025009 - TO:moorel - - - - - - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of an adult vascular leaf (PO:0006340). - moorel - 2012-07-03T11:54:31Z - TO_GIT:141 - plant_trait_ontology - TO:0000831 - adult leaf morphology trait - TO:0000831 - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of an adult vascular leaf (PO:0006340). - PO:0006340 - TO:moorel - - - - - - - - - - An adult vascular leaf morphology trait (TO:0000831) which is a quality of a flag leaf (PO:0020103). - moorel - 2012-07-03T12:06:07Z - TO_GIT:141 - plant_trait_ontology - TO:0000832 - flag leaf morphology trait - TO:0000832 - - - - - An adult vascular leaf morphology trait (TO:0000831) which is a quality of a flag leaf (PO:0020103). - PO:0020103 - TO:moorel - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a organ margin (PO:0025005). - moorel - 2012-07-03T12:54:18Z - TO_GIT:142 - plant_trait_ontology - TO:0000833 - organ margin morphology trait - TO:0000833 - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a organ margin (PO:0025005). - PO:0025005 - TO:moorel - - - - - - - - - - An organ margin morphology trait (TO:0000833) which is a quality of a phyllome margin (PO:0025018). - moorel - 2012-07-03T12:56:42Z - TO_GIT:142 - plant_trait_ontology - TO:0000834 - phyllome margin morphology trait - TO:0000834 - - - - - An organ margin morphology trait (TO:0000833) which is a quality of a phyllome margin (PO:0025018). - PO:0025018 - TO:moorel - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf sheath (PO:0020104). - moorel - 2012-07-03T13:07:07Z - TO_GIT:143 - plant_trait_ontology - TO:0000835 - leaf sheath morphology trait - TO:0000835 - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf sheath (PO:0020104). - PO:0020104 - TO:moorel - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a multi-tissue plant structure (PO:0025496). - moorel - 2012-07-09T11:41:28Z - TO_GIT:147 - plant_trait_ontology - TO:0000836 - multi-tissue plant structure morphology trait - TO:0000836 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a multi-tissue plant structure (PO:0025496). - PO:0025496 - TO:moorel - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a cardinal organ part of a multi-tissue plant structure (PO:0025498). - moorel - 2012-07-09T13:36:14Z - TO_GIT:147 - plant_trait_ontology - TO:0000837 - cardinal part of a multi-tissue plant structure morphology trait - TO:0000837 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a cardinal organ part of a multi-tissue plant structure (PO:0025498). - PO:0025498 - TO:moorel - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the seed coat (PO:0009088). - moorel - 2012-07-11T11:29:01Z - TO_GIT:76 - plant_trait_ontology - TO:0000838 - seed coat morphology trait - TO:0000838 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the seed coat (PO:0009088). - PO:0009088 - TO:moorel - - - - - - - - - - A plant morphology trait (TO:0000017) which is a quality of a plant structure (PO:0009011). - moorel - 2012-07-12T11:29:26Z - TO_GIT:149 - plant_trait_ontology - TO:0000839 - plant structure morphology trait - TO:0000839 - - - - - A plant morphology trait (TO:0000017) which is a quality of a plant structure (PO:0009011). - PO:0009011 - TO:cooperl - TO:moorel - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a collective plant structure (PO:0025497). - moorel - 2012-07-12T11:42:53Z - TO_GIT:150 - plant_trait_ontology - TO:0000840 - collective plant structure morphology trait - TO:0000840 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a collective plant structure (PO:0025497). - PO:0025497 - TO:cooperl - TO:moorel - - - - - - - - - - A collective plant structure morphology trait (TO:0000840) which is a quality of a collective organ part structure (PO:0025269). - moorel - 2012-07-12T11:49:46Z - TO_GIT:150 - plant_trait_ontology - TO:0000841 - collective organ part structure morphology trait - TO:0000841 - - - - - A collective plant structure morphology trait (TO:0000840) which is a quality of a collective organ part structure (PO:0025269). - PO:0025269 - TO:cooperl - TO:moorel - - - - - - - - - - A collective plant structure morphology trait (TO:0000840) which is a quality of a collective plant organ structure (PO:0025007). - moorel - 2012-07-12T11:55:17Z - TO_GIT:150 - plant_trait_ontology - TO:0000842 - collective plant organ structure morphology trait - TO:0000842 - - - - - A collective plant structure morphology trait (TO:0000840) which is a quality of a collective plant organ structure (PO:0025007). - PO:0025007 - TO:cooperl - TO:moorel - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a portion of plant tissue (PO:0009007). - moorel - 2012-07-12T12:18:33Z - TO_GIT:151 - plant_trait_ontology - TO:0000843 - portion of plant tissue morphology trait - TO:0000843 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a portion of plant tissue (PO:0009007). - PO:0009007 - TO:moorel - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of an in vitro plant structure (PO:0000004). - moorel - 2012-07-12T13:52:02Z - TO_GIT:149 - plant_trait_ontology - TO:0000844 - in vitro plant structure morphology trait - TO:0000844 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of an in vitro plant structure (PO:0000004). - PO:0000004 - TO:moorel - - - - - - - - - - A collective plant organ structure morphology trait (TO:0000842) which is a quality of a collective phyllome structure (PO:0025023). - moorel - 2012-07-13T11:30:15Z - TO_GIT:304 - plant_trait_ontology - <new synonym> - TO:0000845 - collective phyllome structure morphology trait - TO:0000845 - - - - - A collective plant organ structure morphology trait (TO:0000842) which is a quality of a collective phyllome structure (PO:0025023). - PO:0025023 - TO:cooperl - TO:moorel - - - - - - - - - - An inflorescence branch morphology trait (TO:0000784) which is a quality of a second order inflorescence axis (PO:0006321). - moorel - 2012-07-13T13:09:22Z - plant_trait_ontology - TO:0000846 - inflorescence primary branch morphology trait - TO:0000846 - - - - - An inflorescence branch morphology trait (TO:0000784) which is a quality of a second order inflorescence axis (PO:0006321). - PO:0006321 - TO:moorel - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of a panicle. - moorel - 2012-07-13T13:43:22Z - TO_GIT:154 - plant_trait_ontology - panicle related trait - TO:0000847 - panicle morphology trait - TO:0000847 - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of a panicle. - TO:cooperl - TO:moorel - - - - - - - - - - A fruit size trait (TO:0002625) which is the diameter of a fruit (PO:0009001). - moorel - 2012-07-16T12:31:27Z - PATO:0001334 - plant_trait_ontology - TO:0000848 - Refer to diameter (PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - fruit diameter - TO:0000848 - - - - - A fruit size trait (TO:0002625) which is the diameter of a fruit (PO:0009001). - PO:0009001 - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the attachment of a fruit (PO:0009001). - moorel - 2012-07-16T12:39:53Z - PATO:0001435 - plant_trait_ontology - TO:0000849 - Refer to attachment quality (PATO:0001435): A structural quality inhering in a bearer by virtue of the bearer's having connection or association with another entity. - fruit attachment - TO:0000849 - - - - - A fruit morphology trait (TO:0002629) which is the attachment of a fruit (PO:0009001). - PO:0009001 - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the type of a fruit (PO:0009001). - moorel - 2012-07-16T12:45:56Z - plant_trait_ontology - TO:0000850 - fruit type - TO:0000850 - - - - - A fruit morphology trait (TO:0002629) which is the type of a fruit (PO:0009001). - PO:0009001 - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the presence or absence of hair on a fruit (PO:0009001). - moorel - 2012-07-16T12:48:45Z - PATO:0000454 - TO_GIT:131 - plant_trait_ontology - TO:0000851 - Refer to hairy (PATO:0000454): A pilosity quality inhering in a bearer by virtue of the bearer's being covered with hair or hairlike projections. - fruit hairiness - TO:0000851 - - - - - A fruit morphology trait (TO:0002629) which is the presence or absence of hair on a fruit (PO:0009001). - PO:0009001 - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the absence or presence of a fruit (PO:0009001). - moorel - 2012-07-16T12:53:17Z - TO_GIT:131 - plant_trait_ontology - TO:0000852 - In cassava fruit set is a visual rating with 0 = absent and 1 = present. - fruit set - TO:0000852 - - - - - A fruit morphology trait (TO:0002629) which is the absence or presence of a fruit (PO:0009001). - TO:moorel - - - - - - - - - - A spikelet floret morphology trait (TO:0000274) which is the shape of a spikelet floret (PO:0009082). - moorel - TO_GIT:105 - plant_trait_ontology - TO:0000853 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - spikelet floret shape - TO:0000853 - - - - - A spikelet floret morphology trait (TO:0000274) which is the shape of a spikelet floret (PO:0009082). - PATO:0000052 - PO:0009082 - TO:cooperl - TO:moorel - - - - - - - - - - A spikelet floret morphology trait (TO:0000274) which is the size of a spikelet floret (PO:0009082). - moorel - 2012-07-16T13:08:42Z - TO_GIT:105 - plant_trait_ontology - TO:0000854 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - spikelet floret size - TO:0000854 - - - - - A spikelet floret morphology trait (TO:0000274) which is the size of a spikelet floret (PO:0009082). - PATO:0000117 - PO:0009082 - TO:cooperl - TO:moorel - - - - - - - - - - A spikelet floret morphology trait (TO:0000274) which is the diameter of a spikelet floret (PO:0009082). - moorel - 2012-07-16T13:11:57Z - TO_GIT:105 - plant_trait_ontology - TO:0000855 - Refer to diameter (PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - spikelet floret diameter - TO:0000855 - - - - - A spikelet floret morphology trait (TO:0000274) which is the diameter of a spikelet floret (PO:0009082). - PATO:0001334 - PO:0009082 - TO:cooperl - TO:moorel - - - - - - - - - - A lodiclue morphology trait (TO:0006009) which is the length of a lodicule (PO:0009036). - moorel - 2012-07-16T13:47:12Z - PATO:0000122 - TO_GIT:105 - plant_trait_ontology - TO:0000856 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - lodicule length - TO:0000856 - - - - - A lodiclue morphology trait (TO:0006009) which is the length of a lodicule (PO:0009036). - PO:0009036 - TO:moorel - - - - - - - - - - A lodicule morphology trait (TO:0006009) which is the type of lodicule (PO:0009036). - moorel - 2012-07-16T13:51:17Z - TO_GIT:105 - plant_trait_ontology - TO:0000857 - lodicule type - TO:0000857 - - - - - A lodicule morphology trait (TO:0006009) which is the type of lodicule (PO:0009036). - PO:0009036 - TO:moorel - - - - - - - - - - A flower morphology trait (TO:0000499) which is the diameter of a flower (PO:0009046). - moorel - 2012-07-25T10:16:56Z - PATO:0001334 - TO_GIT:105 - plant_trait_ontology - TO:0000858 - Refer to diameter (PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - flower diameter - TO:0000858 - - - - - A flower morphology trait (TO:0000499) which is the diameter of a flower (PO:0009046). - PO:0009046 - TO:moorel - - - - - - - - - - A flower morphology trait (TO:0000499) which is the shape of a flower (PO:0009046). - moorel - 2012-07-25T10:21:29Z - PATO:0000052 - TO_GIT:105 - plant_trait_ontology - TO:0000859 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - flower shape - TO:0000859 - - - - - A flower morphology trait (TO:0000499) which is the shape of a flower (PO:0009046). - PO:0009046 - TO:moorel - - - - - - - - - - A flower morphology trait (TO:0000499) which is the length of a flower (PO:0009046). - moorel - 2012-07-25T10:27:25Z - PATO:0000122 - TO_GIT:105 - plant_trait_ontology - TO:0000860 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - flower length - TO:0000860 - - - - - A flower morphology trait (TO:0000499) which is the length of a flower (PO:0009046). - PO:0009046 - TO:moorel - - - - - - - - - - A flower morphology trait (TO:0000499) which is a quality of the flower abscission zone (PO:0006502). - moorel - 2012-07-25T10:30:55Z - TO_GIT:105 - plant_trait_ontology - TO:0000861 - flower abscission zone morphology trait - TO:0000861 - - - - - A flower morphology trait (TO:0000499) which is a quality of the flower abscission zone (PO:0006502). - PO:0006502 - TO:moorel - - - - - - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a floral organ (PO:0025395). - moorel - 2012-07-25T10:47:57Z - TO_GIT:160 - plant_trait_ontology - TO:0000862 - floral organ morphology trait - TO:0000862 - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a floral organ (PO:0025395). - PO:0025395 - TO:moorel - - - - - - - - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a petal (PO:0009032). - moorel - 2012-07-25T11:18:56Z - TO_GIT:161 - plant_trait_ontology - TO:0000863 - petal morphology trait - TO:0000863 - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a petal (PO:0009032). - PO:0009032 - TO:moorel - - - - - - - - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a sepal (PO:0009031). - moorel - 2012-07-25T11:22:26Z - TO_GIT:161 - plant_trait_ontology - TO:0000864 - sepal morphology trait - TO:0000864 - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a sepal (PO:0009031). - PO:0009031 - TO:moorel - - - - - - - - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a tepal (PO:0009033). - moorel - 2012-07-25T12:19:50Z - TO_GIT:161 - plant_trait_ontology - TO:0000865 - tepal morphology trait - TO:0000865 - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a tepal (PO:0009033). - PO:0009033 - TO:moorel - - - - - - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a sporophyll (PO:0009026). - moorel - 2012-07-25T13:04:01Z - TO_GIT:162 - plant_trait_ontology - TO:0000866 - sporophyll morphology trait - TO:0000866 - - - - - A phyllome morphology trait (TO:0000747) which is a quality of a sporophyll (PO:0009026). - PO:0009026 - TO:moorel - - - - - - - - - - A sporophyll morphology trait (TO:0000866) which is a quality of a megasporophyll (PO:0009027). - moorel - 2012-07-25T13:05:52Z - TO_GIT:162 - plant_trait_ontology - TO:0000867 - megasporophyll morphology trait - TO:0000867 - - - - - A sporophyll morphology trait (TO:0000866) which is a quality of a megasporophyll (PO:0009027). - PO:0009027 - TO:moorel - - - - - - - - - - A sporophyll morphology trait (TO:0000866) which is a quality of a microsporophyll (PO:0009028). - moorel - 2012-07-25T13:07:55Z - plant_trait_ontology - TO:0000868 - microsporophyll morphology trait - TO:0000868 - - - - - A sporophyll morphology trait (TO:0000866) which is a quality of a microsporophyll (PO:0009028). - PO:0009028 - TO:moorel - - - - - - - - - - - - - - - - - - An inflorescence bract morphology trait (TO:0000816) which is a quality of a glume (PO:0009039). - moorel - 2012-08-08T11:50:03Z - TO_GIT:166 - plant_trait_ontology - TO:0000869 - glume morphology trait - TO:0000869 - - - - - An inflorescence bract morphology trait (TO:0000816) which is a quality of a glume (PO:0009039). - PO:0009039 - TO:moorel - - - - - - - - - - A shoot system yield trait (TO:0000327) which is comprised of leaves (PO:0025034) or parts of leaves. - moorel - 2012-10-04T15:42:58Z - plant_trait_ontology - TO:0000870 - leaf yield trait - TO:0000870 - - - - - A shoot system yield trait (TO:0000327) which is comprised of leaves (PO:0025034) or parts of leaves. - TO:cooperl - - - - - - - - - - A shoot system yield trait (TO:0000327) which is the yield of fruits (PO:0009001). - moorel - 2012-10-04T15:45:03Z - TO_GIT:291 - plant_trait_ontology - TO:0000871 - fruit yield trait - TO:0000871 - - - - - A shoot system yield trait (TO:0000327) which is the yield of fruits (PO:0009001). - TO:cooperl - - - - - - - - - - - - A leaf attitude (TO:0000824) which is a leaf held upright away from the substrate or host. - moorel - 2012-10-09T13:55:46Z - PATO:0000622 - plant_trait_ontology - TO:0000872 - Refer to erect (PATO:0000622): A positional quality inhering in a bearer by virtue of the bearer's being upright in position or posture. - leaf erect - TO:0000872 - - - - - A leaf attitude (TO:0000824) which is a leaf held upright away from the substrate or host. - TO:moorel - - - - - - - - - - - - A leaf attitude (TO:0000824) which is a leaf hanging straight down. - moorel - 2012-10-09T14:01:24Z - PATO:0000631 - plant_trait_ontology - TO:0000873 - Refer to prostrate (PATO:0000631): A positional quality inhering in a bearer by virtue of the bearer's being stretched out and lying at full length along the ground. - leaf prostrate - TO:0000873 - - - - - A leaf attitude (TO:0000824) which is a leaf hanging straight down. - TO:moorel - - - - - - - - - - A leaf attitude (TO:0000824) which is a leaf laying flat against the substrate or host. - moorel - 2012-10-09T14:04:08Z - plant_trait_ontology - TO:0000874 - leaf penduloum - TO:0000874 - - - - - A leaf attitude (TO:0000824) which is a leaf laying flat against the substrate or host. - TO:moorel - - - - - - - - - - A leaf lamina morphology trait (TO:0000829) which is the splitting of a leaf lamina (PO:0020039). - moorel - 2012-10-09T14:11:08Z - PATO:0001786 - TO_GIT:91 - plant_trait_ontology - TO:0000875 - Refer to split (PATO:0001786): A shape quality inhering in a bearer by virtue of the bearer's being divided or broken up into parts or divisions. - leaf lamina splitting - TO:0000875 - - - - - A leaf lamina morphology trait (TO:0000829) which is the splitting of a leaf lamina (PO:0020039). - PO:0020039 - TO:moorel - - - - - - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a spine leaf (PO:0025173). - moorel - 2012-10-09T14:46:53Z - TO_GIT:158 - plant_trait_ontology - TO:0000876 - spine leaf morphology trait - TO:0000876 - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a spine leaf (PO:0025173). - PO:0025173 - TO:moorel - - - - - - - - - - - - A spine leaf morphology trait (TO:0000876) which is the size of the spine leaf (PO:0025173). - moorel - 2012-10-09T14:48:19Z - PATO:0000117 - TO_GIT:158 - plant_trait_ontology - TO:0000877 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - spine leaf size - TO:0000877 - - - - - A spine leaf morphology trait (TO:0000876) which is the size of the spine leaf (PO:0025173). - PO:0025173 - TO:moorel - - - - - - - - - - - - A spine leaf morphology trait (TO:0000876) which is the color of the spine leaf (PO:0025173). - moorel - 2012-10-09T14:52:10Z - PATO:0000014 - TO_GIT:158 - plant_trait_ontology - TO:0000878 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - spine leaf color - TO:0000878 - - - - - A spine leaf morphology trait (TO:0000876) which is the color of the spine leaf (PO:0025173). - PO:0025173 - TO:moorel - - - - - - - - - - A stem morphology trait (TO:0000361) which is the presence or absence of hair on the stem (PO:0009047). - moorel - 2012-10-09T15:17:12Z - PATO:0000454 - plant_trait_ontology - TO:0000879 - Refer to hairy (PATO:0000454): A pilosity quality inhering in a bearer by virtue of the bearer's being covered with hair or hairlike projections. - stem hairiness - TO:0000879 - - - - - A stem morphology trait (TO:0000361) which is the presence or absence of hair on the stem (PO:0009047). - PO:0009047 - TO:moorel - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the length of the seed coat (PO:0009088). - moorel - 2012-10-09T15:27:02Z - PATO:0000122 - TO_GIT:76 - plant_trait_ontology - TO:0000880 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - seed coat length - TO:0000880 - - - - - A seed coat morphology trait (TO:0000838) which is the length of the seed coat (PO:0009088). - PO:0009088 - TO:moorel - - - - - - - - - - A flower morphology trait (TO:0000499) which is the type of a flower (PO:0009046). - moorel - 2012-10-11T11:30:45Z - TO_GIT:175 - plant_trait_ontology - TO:0000881 - flower type - TO:0000881 - - - - - A flower morphology trait (TO:0000499) which is the type of a flower (PO:0009046). - PO:0009046 - TO:moorel - - - - - - - - - - A flower type trait (TO:0000881) which is a flower (PO:0009046) that does not open and favors self pollination. - moorel - 2012-10-11T11:33:35Z - TO_GIT:175 - plant_trait_ontology - TO:0000882 - cleistogamus flower - TO:0000882 - - - - - A flower type trait (TO:0000881) which is a flower (PO:0009046) that does not open and favors self pollination. - PO:0009046 - TO:moorel - - - - - - - - - - A flower type trait (TO:0000881) which is a flower (PO:0009046) that opens exposing anthers (PO:0009066) and/or pistil. - moorel - 2012-10-11T11:37:02Z - TO_GIT:175 - plant_trait_ontology - TO:0000883 - chasmogamous flower - TO:0000883 - - - - - A flower type trait (TO:0000881) which is a flower (PO:0009046) that opens exposing anthers (PO:0009066) and/or pistil. - PO:0009046 - PO:0009066 - TO:moorel - - - - - - - - - - A stalk morphology trait (TO:0000764) which is a quality of a petiolule (PO:0020050). - moorel - 2012-10-11T11:53:06Z - TO_GIT:176 - plant_trait_ontology - TO:0000884 - petiolule morphology trait - TO:0000884 - - - - - A stalk morphology trait (TO:0000764) which is a quality of a petiolule (PO:0020050). - PO:0020050 - TO:moorel - - - - - - - - - - A petiolule morphology trait (TO:0000884) which is the color of the petiolule (PO:0020050). - moorel - 2012-10-11T11:55:06Z - PATO:0000014 - TO_GIT:176 - plant_trait_ontology - TO:0000885 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - petiolule color - TO:0000885 - - - - - A petiolule morphology trait (TO:0000884) which is the color of the petiolule (PO:0020050). - PO:0020050 - TO:moorel - - - - - - - - - - A petiolule morphology trait (TO:0000884) which is the shape of the petiolule (PO:0020050). - moorel - 2012-10-11T12:02:02Z - PATO:0000052 - TO_GIT:176 - plant_trait_ontology - TO:0000886 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - petiolule shape - TO:0000886 - - - - - A petiolule morphology trait (TO:0000884) which is the shape of the petiolule (PO:0020050). - PO:0020050 - TO:moorel - - - - - - - - - - A petiolule morphology trait (TO:0000884) which is the length of the petiolule (PO:0020050). - moorel - 2012-10-11T12:05:48Z - PATO:0000122 - TO_GIT:176 - plant_trait_ontology - TO:0000887 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - petiolule length - TO:0000887 - - - - - A petiolule morphology trait (TO:0000884) which is the length of the petiolule (PO:0020050). - PO:0020050 - TO:moorel - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the luster of the seed coat (PO:0009088). - moorel - 2012-10-11T12:26:54Z - TO_GIT:148 - TO_GIT:76 - plant_trait_ontology - TO:0000888 - seed coat luster - TO:0000888 - - - - - A seed coat morphology trait (TO:0000838) which is the luster of the seed coat (PO:0009088). - PO:0009088 - TO:moorel - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the hardness of the seed coat (PO:0009088). - moorel - 2012-10-11T12:29:15Z - PATO:0000048 - TO_GIT:148 - TO_GIT:76 - plant_trait_ontology - TO:0000889 - Refer to hardness (PATO:0000048): A physical quality inhering in a bearer by virtue of the bearer's disposition to being turned, bowed, or twisted without breaking. - seed coat hardness - TO:0000889 - - - - - A seed coat morphology trait (TO:0000838) which is the hardness of the seed coat (PO:0009088). - PO:0009088 - TO:moorel - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the relative proportion of seed coat (PO:0009088) to cotyledon (PO:0020030). - moorel - 2012-10-11T12:32:02Z - PATO:0001470 - TO_GIT:148 - plant_trait_ontology - TO:0000890 - Refer to proportion (PATO:0001470): A quality inhering in a bearer by virtue of the bearer's magnitude in respect to a related entity. - seed coat proportion - TO:0000890 - - - - - A seed coat morphology trait (TO:0000838) which is the relative proportion of seed coat (PO:0009088) to cotyledon (PO:0020030). - PO:0009088 - PO:0020030 - TO:moorel - - - - - - - - - - A leaf weight trait (TO:0000505) which is the the measure of the wet weight of a leaf (PO:0025034). - moorel - 2012-10-11T12:50:20Z - plant_trait_ontology - TO:0000891 - leaf wet weight - TO:0000891 - - - - - A leaf weight trait (TO:0000505) which is the the measure of the wet weight of a leaf (PO:0025034). - PO:0025034 - TO:moorel - - - - - - - - - - A stem morphology trait (TO:0000361) which is the size of a stem (PO:0009047). - moorel - 2012-11-20T15:35:42Z - PATO:0000117 - TO_GIT:157 - core size - plant_trait_ontology - stalk size - TO:0000892 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - stem size - TO:0000892 - - - - - A stem morphology trait (TO:0000361) which is the size of a stem (PO:0009047). - PO:0009047 - TO:moorel - - - - - - - - - - A stem morphology trait (TO:0000361) which is the shape of a stem (PO:0009047). - moorel - 2012-11-20T15:44:05Z - PATO:0000052 - TO_GIT:80 - core shape - plant_trait_ontology - TO:0000893 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - stem shape - TO:0000893 - - - - - A stem morphology trait (TO:0000361) which is the shape of a stem (PO:0009047). - PO:0009047 - TO:moorel - - - - - - - - - - An infructescence morphology trait (TO:0000920) which is the number of fruits (PO:0009001). - moorel - 2013-01-24T14:03:35Z - PATO:0001555 - TO_GIT:178 - accessory fruit number - plant_trait_ontology - TO:0000894 - Refer to has number of (PATO:0001555): The number of parts of a particular type that the bearer entity has. This is a relational quality, and thus holds between two entities: the bearer of the quality, and the type of parts. - fruit number trait - TO:0000894 - - - - - An infructescence morphology trait (TO:0000920) which is the number of fruits (PO:0009001). - PO:0009001 - TO:moorel - - - - - - - - - - A harvest index (TO:0000128) which is the percent of usable fruit (PO:0009001). - moorel - 2013-01-24T14:15:17Z - TO_GIT:179 - plant_trait_ontology - TO:0000895 - fruit harvest index - TO:0000895 - - - - - A harvest index (TO:0000128) which is the percent of usable fruit (PO:0009001). - PO:0009001 - TO:moorel - - - - - - - - - - A harvest index (TO:0000128) which is the percent of usable leaves (PO:0025034). - moorel - 2013-01-24T14:19:38Z - TO_GIT:179 - plant_trait_ontology - TO:0000896 - leaf harvest index - TO:0000896 - - - - - A harvest index (TO:0000128) which is the percent of usable leaves (PO:0025034). - PO:0025034 - TO:moorel - - - - - - - - - - A harvest index (TO:0000128) which is the percent of usable seeds (PO:0009010). - moorel - 2013-01-24T14:21:24Z - TO_GIT:179 - plant_trait_ontology - TO:0000897 - seed harvest index - TO:0000897 - - - - - A harvest index (TO:0000128) which is the percent of usable seeds (PO:0009010). - PO:0009010 - TO:moorel - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a root nodule (PO:0003023). - moorel - 2013-01-24T14:24:48Z - TO_GIT:181 - plant_trait_ontology - TO:0000898 - root nodule morphology trait - TO:0000898 - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a root nodule (PO:0003023). - PO:0003023 - TO:moorel - - - - - - - - - - A root nodule morphology trait (TO:0000898) which is the weight of a root nodule (PO:0003023). - moorel - 2013-01-24T14:26:46Z - PATO:0000128 - TO_GIT:181 - plant_trait_ontology - TO:0000899 - Refer to weight (PATO:0000128): A physical quality inhering in a bearer that has mass near a gravitational body. - root nodule weight - TO:0000899 - - - - - A root nodule morphology trait (TO:0000898) which is the weight of a root nodule (PO:0003023). - PO:0003023 - TO:moorel - - - - - - - - - - A root nodule morphology trait (TO:0000898) which is the number of root nodules (PO:0003023). - moorel - 2013-01-24T14:30:27Z - PATO:0001555 - TO_GIT:181 - plant_trait_ontology - TO:0000900 - Refer to has number of (PATO:0001555): The number of parts of a particular type that the bearer entity has. This is a relational quality, and thus holds between two entities: the bearer of the quality, and the type of parts. - root nodule number - TO:0000900 - - - - - A root nodule morphology trait (TO:0000898) which is the number of root nodules (PO:0003023). - PO:0003023 - TO:moorel - - - - - - - - - - A fruit color (TO:0002617) which is the color of a fruit (PO:0009001) that has been dried. - moorel - 2013-01-24T14:37:51Z - PATO:0000014 - PATO:0001801 - TO_GIT:180 - dry pod color - plant_trait_ontology - TO:0000901 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. Refer to decreased water composition (PATO:0001801): A composition quality inhering in an bearer by virtue of the reduction in amount of water the bearer contains. - dry fruit color - TO:0000901 - - - - - A fruit color (TO:0002617) which is the color of a fruit (PO:0009001) that has been dried. - PO:0009001 - TO:moorel - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the bleeding of pigment in a seed coat (PO:0009088). - moorel - 2013-01-24T14:44:11Z - TO_GIT:148 - plant_trait_ontology - TO:0000902 - seed coat pigment bleeding - TO:0000902 - - - - - A seed coat morphology trait (TO:0000838) which is the bleeding of pigment in a seed coat (PO:0009088). - PO:0009088 - TO:moorel - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the texture of a seed coat (PO:0009088). - moorel - 2013-01-24T14:45:40Z - PATO:0000150 - TO_GIT:147 - plant_trait_ontology - TO:0000903 - Refer to texture (PATO:0000150): A morphologic quality inhering in a bearer by virtue of the bearer's relative size, organization and distribution of its surface elements or the representation or invention of the appearance of its surface; visual and tactile surface characteristics. - seed coat texture - TO:0000903 - - - - - A seed coat morphology trait (TO:0000838) which is the texture of a seed coat (PO:0009088). - PO:0009088 - TO:moorel - - - - - - - - - - A seed coat morphology trait (TO:0000838) which is the pattern of a seed coat (PO:0009088). - moorel - 2013-01-24T14:48:21Z - PATO:0000019 - TO_GIT:148 - plant_trait_ontology - TO:0000904 - Refer to color pattern (PATO:0000019): A chromatic property that is the relative position of different hues or degrees of saturation. - seed coat pattern - TO:0000904 - - - - - A seed coat morphology trait (TO:0000838) which is the pattern of a seed coat (PO:0009088). - PO:0009088 - TO:moorel - - - - - - - - - - A shoot system yield trait (TO:0000327) which is the yield of seeds (PO:0009010). - moorel - 2013-01-28T13:14:23Z - TO_GIT:182 - plant_trait_ontology - TO:0000905 - seed yield trait - TO:0000905 - - - - - A shoot system yield trait (TO:0000327) which is the yield of seeds (PO:0009010). - PO:0009010 - TO:cooperl - TO:moorel - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the exocarp (PO:0009085). - cooperl - 2013-04-28T15:48:43Z - TO_GIT:117 - TO_GIT:295 - epicarp morphology trait - plant_trait_ontology - TO:0000906 - exocarp morphology trait - TO:0000906 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the exocarp (PO:0009085). - PO:cooperl - - - - - - - - - - - - - - An exocarp morphology trait (TO:0000906) (TO:0000843) which is the thickness of the exocarp (PO:0009085). - cooperl - 2013-04-28T16:05:01Z - PATO:0000915 - TO_GIT:117 - TO_GIT:295 - rind thickness - plant_trait_ontology - TO:0000907 - exocarp thickness - TO:0000907 - - - - - An exocarp morphology trait (TO:0000906) (TO:0000843) which is the thickness of the exocarp (PO:0009085). - TO:cooperl - - - - - - - - - - - - A fruit morphology trait (TO:0002617) which is the hollowness of a fruit (PO:0009001). - cooperl - 2013-04-28T16:18:53Z - TO_GIT:117 - plant_trait_ontology - TO:0000908 - fruit hollowness - TO:0000908 - - - - - A fruit morphology trait (TO:0002617) which is the hollowness of a fruit (PO:0009001). - PATO:0002078 - PO:0009001 - PO:cooperl - - - - - - - - - - - - A fruit color trait (TO:0002617) which is the uniformity of the color (PATO:0000122) of the fruit (PO:0009001) . - cooperl - 2013-04-28T16:33:44Z - TO_GIT:117 - plant_trait_ontology - TO:0000909 - The proportion of the 2D area of the red color epicarp out of the total epicarp area visible from a top view of the proximal fruit end. - fruit color uniformity - TO:0000909 - - - - - A fruit color trait (TO:0002617) which is the uniformity of the color (PATO:0000122) of the fruit (PO:0009001) . - PATO:0000122 - PO:cooperl - - - - - - - - - - A fruit flavor trait (TO:0002694) which is the bitter fruit flavor. - cooperl - 2013-04-28T16:46:02Z - TO_GIT:117 - plant_trait_ontology - TO:0000910 - Need PATO quality: bitter - has been requested. - fruit bitterness trait - TO:0000910 - - - - - A fruit flavor trait (TO:0002694) which is the bitter fruit flavor. - TO:cooperl - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a trichome (PO:0000282). - moorel - 2013-06-18T14:29:56Z - TO_GIT:228 - plant_trait_ontology - TO:0000911 - trichome morphology trait - TO:0000911 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a trichome (PO:0000282). - PO:0000282 - TO:moorel - - - - - - - - - - A trichome morphology trait (TO:0000911) which is a trichome (PO:0000282) lying close to and flat against a surface of a plant structure (PO:0009011). - moorel - 2013-06-18T14:31:49Z - TO_GIT:228 - plant_trait_ontology - TO:0000912 - trichome appressed - TO:0000912 - - - - - A trichome morphology trait (TO:0000911) which is a trichome (PO:0000282) lying close to and flat against a surface of a plant structure (PO:0009011). - PO:0000282 - TO:moorel - - - - - - - - - - A trichome morphology trait (TO:0000911) which is a needle-shaped trichome (PO:0000282). - moorel - 2013-06-19T09:56:45Z - TO_GIT:228 - plant_trait_ontology - TO:0000913 - trichome acircular - TO:0000913 - - - - - A trichome morphology trait (TO:0000911) which is a needle-shaped trichome (PO:0000282). - PO:0000282 - TO:moorel - - - - - - - - - - A trichome morphology trait (TO:0000911) which is a gray-haired and hoary trichome (PO:0000282). - moorel - 2013-06-19T09:59:44Z - TO_GIT:228 - plant_trait_ontology - TO:0000914 - trichome canescent - TO:0000914 - - - - - A trichome morphology trait (TO:0000911) which is a gray-haired and hoary trichome (PO:0000282). - PO:0000282 - TO:moorel - - - - - - - - - - A trichome morphology trait (TO:0000911) which is a very slender or hair-like trichome (PO:0000282). - moorel - 2013-06-19T10:02:55Z - TO_GIT:228 - plant_trait_ontology - TO:0000915 - trichome capillary - TO:0000915 - - - - - A trichome morphology trait (TO:0000911) which is a very slender or hair-like trichome (PO:0000282). - PO:0000282 - TO:moorel - - - - - - - - - - A trichome morphology trait (TO:0000911) which is a club-shaped trichome (PO:0000282). - moorel - 2013-06-19T10:06:59Z - TO_GIT:228 - plant_trait_ontology - TO:0000916 - Clavate (PATO:0001883): A concave 3-D shape quality inhering in a bearer by virtue of the bearer's gradually becoming thicker towards the end. - trichome clavate - TO:0000916 - - - - - A trichome morphology trait (TO:0000911) which is a club-shaped trichome (PO:0000282). - PO:0000282 - TO:moorel - - - - - - - - - - A trichome morphology trait (TO:0000911) which is a sword-shaped trichome (PO:0000282). - moorel - 2013-06-19T10:14:01Z - TO_GIT:228 - plant_trait_ontology - TO:0000917 - Blade-like (PATO:0002235): A tapered shape quality inhering in a bearer by virtue of the bearer's being flat, slender, and tapering to a point. Synonym: ensiform. - trichome ensiform - TO:0000917 - - - - - A trichome morphology trait (TO:0000911) which is a sword-shaped trichome (PO:0000282). - PO:0000282 - TO:moorel - - - - - - - - - - A trichome morphology trait (TO:0000911) which is a rough trichome (PO:0000282). - moorel - 2013-06-19T10:18:46Z - TO_GIT:228 - plant_trait_ontology - TO:0000918 - trichome hirsute - TO:0000918 - - - - - A trichome morphology trait (TO:0000911) which is a rough trichome (PO:0000282). - PO:0000282 - TO:moorel - - - - - - - - - - A fruit weight (TO:0002746) which is the weight of one or more kernels. - cooperl - 2013-11-14T14:06:21Z - TO_GIT:242 - 20 kernel weight - plant_trait_ontology - kwt - TO:0000919 - kernel weight - TO:0000919 - - - - - A fruit weight (TO:0002746) which is the weight of one or more kernels. - TO:cooperl - - - - - kwt - MaizeGDB:78154 - - - - - - - - - - A reproductive shoot system morphology trait (TO:0000786) which is a quality of the infructescence (PO:0006342). - cooperl - 2013-11-15T13:32:29Z - TO_GIT:244 - plant_trait_ontology - TO:0000920 - infructescence morphology trait - TO:0000920 - - - - - A reproductive shoot system morphology trait (TO:0000786) which is a quality of the infructescence (PO:0006342). - POC:cooperl - - - - - - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of an infructescence axis (PO:0025242). - cooperl - 2013-11-15T15:54:24Z - TO_GIT:243 - plant_trait_ontology - TO:0000921 - infructescence axis morphology trait - TO:0000921 - - - - - A shoot axis morphology trait (TO:0000739) which is a quality of an infructescence axis (PO:0025242). - TO:cooperl - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the weight of a cob. - moorel - 2014-01-07T12:48:27Z - PATO:0000125 - TO_GIT:109 - plant_trait_ontology - TO:0000922 - Refers to mass (PATO:0000125) A physical quality that inheres in a bearer by virtue of the proportion of the bearer's amount of matter. - cob weight - TO:0000922 - - - - - An infructescence axis morphology trait (TO:0000921) which is the weight of a cob. - TO:moorel - - - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) that is the weight of an ear infructescence (PO:0025597). - cooperl - 2013-12-10T20:53:38Z - MaizeGDB_QTL:65408 - PATO:0000125 - TO_GIT:244 - plant_trait_ontology - earwt - TO:0000923 - - Refers to mass (PATO:0000125): A physical quality that inheres in a bearer by virtue of the proportion of the bearer's amount of matter. - ear weight - TO:0000923 - - - - - An ear infructescence morphology trait (TO:0000976) that is the weight of an ear infructescence (PO:0025597). - TO:cooperl - - - - - earwt - MaizeGDB:??? - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the color of a cob. - moorel - 2014-01-07T12:50:18Z - PATO:0000014 - TO_GIT:109 - plant_trait_ontology - cobpig - TO:0000924 - Refers to color (PATO:0000014) A composite chromatic quality composed of hue, saturation and intensity parts. - cob color - TO:0000924 - - - - - An infructescence axis morphology trait (TO:0000921) which is the color of a cob. - TO:moorel - - - - - cobpig - MaizeGDB_QTL:67275 - - - - - - - - - - A leaf morphology trait (TO:0000748) which is a quality of a non-vascular leaf (PO:0025075). - moorel - 2014-01-07T13:45:07Z - TO_GIT:246 - plant_trait_ontology - TO:0000925 - non-vascular leaf morphology trait - TO:0000925 - - - - - A leaf morphology trait (TO:0000748) which is a quality of a non-vascular leaf (PO:0025075). - PO:0025075 - TO:moorel - - - - - - - - - - A plant structure growth and development trait (TO:0000928) that has as primary participant a multi-tissue plant structure (PO:0025496). - cooperl - 2014-01-16T12:55:32Z - TO_GIT:250 - plant_trait_ontology - TO:0000926 - multi-tissue plant structure growth and development trait - TO:0000926 - - - - - A plant structure growth and development trait (TO:0000928) that has as primary participant a multi-tissue plant structure (PO:0025496). - TO:cooperl - - - - - - - - - - A multi-tissue plant structure development trait (TO:0000927) that has as primary participant a plant organ (PO:0009008). - cooperl - 2014-01-16T12:57:38Z - TO_GIT:251 - plant_trait_ontology - TO:0000927 - plant organ growth and development trait - TO:0000927 - - - - - A multi-tissue plant structure development trait (TO:0000927) that has as primary participant a plant organ (PO:0009008). - TO:cooperl - - - - - - - - - - A plant growth and development trait (TO:0000357) which is a quality of a plant structure development stage (PO:0009028). - cooperl - 2014-01-16T13:36:38Z - TO_GIT:252 - plant_trait_ontology - TO:0000928 - plant structure growth and development trait - TO:0000928 - - - - - A plant growth and development trait (TO:0000357) which is a quality of a plant structure development stage (PO:0009028). - TO:cooperl - - - - - - - - - - A multi-tissue plant structure development trait (TO:0000927) that has as primary participant a fruit (PO:0009001). - cooperl - 2014-01-16T14:38:50Z - TO_GIT:255 - plant_trait_ontology - TO:0000929 - fruit growth and development trait - TO:0000929 - - - - - A multi-tissue plant structure development trait (TO:0000927) that has as primary participant a fruit (PO:0009001). - TO:cooperl - - - - - - - - - - A seed growth and development trait (TO:0000653) which is the extent of seed shattering based on the development of an abscission zone (PO:0000146). - moorel - 2014-01-21T10:24:42Z - TO_GIT:249 - plant_trait_ontology - hilum abscission - TO:0000930 - seed shattering - TO:0000930 - - - - - A seed growth and development trait (TO:0000653) which is the extent of seed shattering based on the development of an abscission zone (PO:0000146). - PO:0000146 - TO:moorel - - - - - hilum abscission - SOY:0001341 - - - - - - - - - - A quality trait (TO:0000597) which is the commercial and /or economical value of a seed (PO:0009010) , or its overall improvement. - cooperl - 2014-03-17T11:41:08Z - TO_GIT:209 - plant_trait_ontology - TO:0000931 - seed quality trait - TO:0000931 - - - - - A quality trait (TO:0000597) which is the commercial and /or economical value of a seed (PO:0009010) , or its overall improvement. - TO:cooperl - - - - - - - - - - A hexose content trait (TO:0000307) which is the amount of mannose (CHEBI:37684). - cooperl - 2014-04-30T11:28:13Z - TO_GIT:259 - D-mannose content - plant_trait_ontology - man content - TO:0000932 - mannose content - TO:0000932 - - - - - A hexose content trait (TO:0000307) which is the amount of mannose (CHEBI:37684). - TO:cooperl - - - - - - - - - - A growth and development trait (TO:0000357) which is the timing of the occurrence of plant structure development stages (PO:0009012) and the relevant biological processes (GO:0008150). - cooperl - 2014-05-05T17:32:19Z - TO_GIT:266 - plant_trait_ontology - TO:0000933 - plant phenological trait - TO:0000933 - - - - - A growth and development trait (TO:0000357) which is the timing of the occurrence of plant structure development stages (PO:0009012) and the relevant biological processes (GO:0008150). - TO:cooperl - - - - - - - - - - - - A flowering time trait (TO:0002616) which is the difference between the time to flowering stage (PO:0007616) in long photoperiod (PECO:0007199) and short photoperiod (PECO:0007200) environments. - cooperl - 2014-05-06T16:41:00Z - MaizeGDB_QTL:64797 - TO_GIT:265 - flowering time response to photoperiod trait - plant_trait_ontology - TO:0000934 - photoperiod-sensitive flowering time trait - TO:0000934 - - - - - A flowering time trait (TO:0002616) which is the difference between the time to flowering stage (PO:0007616) in long photoperiod (PECO:0007199) and short photoperiod (PECO:0007200) environments. - TO:cooperl - - - - - - - - - - A kernel weight (TO:0000919) which is the total weight of all kernels on the primary ear infructescence (PO:0025597). - cooperl - 2014-06-27T08:27:30Z - OBO_S2F_TO:280 - plant_trait_ontology - TO:0000935 - kernel weight per ear - TO:0000935 - - - - - A kernel weight (TO:0000919) which is the total weight of all kernels on the primary ear infructescence (PO:0025597). - MaizeGDB:Mary_Schaeffer - TO:cooperl - - - - - - - - - - A shoot system yield trait (TO:0000327) which is a quality of an infructescence (PO:0006342), or the number born on a plant. - cooperl - 2014-09-02T16:37:45Z - TO_GIT:285 - plant_trait_ontology - seeds per panicle - TO:0000936 - infructescence yield trait - TO:0000936 - - - - - A shoot system yield trait (TO:0000327) which is a quality of an infructescence (PO:0006342), or the number born on a plant. - TO:cooperl - - - - - - - - - - An infructescence yield trait (TO:0000936) that is the number of kernels (fruit; PO:0009001) per ear infructescence (PO:0025597). - cooperl - 2014-09-02T17:16:07Z - MaizeGDB_QTL:99383 - TO_GIT:283 - plant_trait_ontology - TO:0000937 - Often calculated as the number of kernel rows in the middle of the ear times number of kernels per row. Also calculated based on total weight of kernels for an ear and average weight/kernel (Hung et al 2012). - kernel number per ear - TO:0000937 - - - - - An infructescence yield trait (TO:0000936) that is the number of kernels (fruit; PO:0009001) per ear infructescence (PO:0025597). - PMID:22027895 - TO:cooperl - - - - - - - - - - An infructescence yield trait (TO:0000936) that is the number of kernels (fruit; PO:0009001) per row on an ear infructescence (PO:0025597). - cooperl - 2014-09-02T18:07:39Z - MaizeGDB_QTL:78114 - TO_GIT:284 - plant_trait_ontology - 78114 - TO:0000938 - kernel number per row - TO:0000938 - - - - - An infructescence yield trait (TO:0000936) that is the number of kernels (fruit; PO:0009001) per row on an ear infructescence (PO:0025597). - TO:cooperl - - - - - - - - - - cooperl - 2014-09-08T11:52:52Z - TO_GIT:272 - plant_trait_ontology - TO:0000939 - tassel spike length - TO:0000939 - - - - - - - - - - cooperl - 2014-09-08T11:53:39Z - TO_GIT:272 - plant_trait_ontology - TO:0000940 - tassel branch zone length - TO:0000940 - - - - - - - - - - An infructescence yield trait (TO:0000936) which is the number of ranks of cupules per ear infructescence (PO:0025597). - cooperl - 2014-09-08T14:05:22Z - MaizeGDB_QTL:65770 - TO_GIT:288 - plant_trait_ontology - TO:0000941 - Used to look at QTL traits in crosses between Teosinte and maize. In order to compare the two types of ears, the kernel row number (TO:0000687; maize) is divided by two. - rank number per ear - TO:0000941 - - - - - An infructescence yield trait (TO:0000936) which is the number of ranks of cupules per ear infructescence (PO:0025597). - TO:cooperl - - - - - - - - - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the qualities of the aleurone layer (PO:0005360). - cooperl - 2015-07-21T15:15:42Z - TO_GIT:291 - plant_trait_ontology - TO:0000942 - - - - aleurone layer morphology trait - TO:0000942 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the qualities of the aleurone layer (PO:0005360). - TO:cooperl - - - - - - - - - - An aleurone layer appearance (TO:0000944) that is the color of the aleurone layer (PO:0005360). - cooperl - 2015-07-21T15:16:24Z - PATO:0000014 - TO_GIT:291 - plant_trait_ontology - TO:0000943 - aleurone layer color - TO:0000943 - - - - - An aleurone layer appearance (TO:0000944) that is the color of the aleurone layer (PO:0005360). - TO:cooperl - - - - - - - - - - An aleurone layer morphology trait (TO:0000942) that is the appearance of the aleurone layer (PO:0005360). - cooperl - 2015-07-21T16:08:50Z - TO_GIT:291 - plant_trait_ontology - TO:0000944 - aleurone layer appearance - TO:0000944 - - - - - An aleurone layer morphology trait (TO:0000942) that is the appearance of the aleurone layer (PO:0005360). - TO:cooperl - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the pericarp (PO:0009084). - cooperl - 2015-07-22T15:54:55Z - TO_GIT:292 - plant_trait_ontology - TO:0000945 - pericarp morphology trait - TO:0000945 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the pericarp (PO:0009084). - TO:cooperl - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the endocarp (PO:0009086). - austinmeier - 2015-07-22T17:16:05Z - TO_GIT:293 - plant_trait_ontology - TO:0000946 - endocarp morphology trait - TO:0000946 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of the endocarp (PO:0009086). - TO:austin_meier - - - - - - - - - - A plant structure growth and development trait (TO:0000928) which is a quality of a whole plant development stage (PO:0007033). - johnseth - 2015-07-23T14:28:41Z - TO_GIT:297 - plant_trait_ontology - TO:0000947 - whole plant growth and development trait - TO:0000947 - - - - - A plant structure growth and development trait (TO:0000928) which is a quality of a whole plant development stage (PO:0007033). - TO:ethan_johnson - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of a mesocarp (PO:0009087). - austinmeier - 2015-07-22T17:28:39Z - TO_GIT:294 - plant_trait_ontology - TO:0000948 - mesocarp morphology trait - TO:0000948 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is a quality of a mesocarp (PO:0009087). - TO:austin_meier - - - - - - - - - - A whole plant growth and development trait (TO:0000947) which is a quality of a seedling development stage (PO:0007131). - johnseth - 2015-07-23T14:39:53Z - TO_GIT:298 - plant_trait_ontology - TO:0000949 - seedling growth and development trait - TO:0000949 - - - - - A whole plant growth and development trait (TO:0000947) which is a quality of a seedling development stage (PO:0007131). - TO:ethan_johnson - - - - - - - - - - A collective phyllome structure morphology trait (TO:0000845) that is a quality of a corolla (PO:0009059). - cooperl - 2015-07-27T14:48:47Z - TO_GIT:299 - plant_trait_ontology - TO:0000950 - corolla morphology trait - TO:0000950 - - - - - A collective phyllome structure morphology trait (TO:0000845) that is a quality of a corolla (PO:0009059). - TO:cooperl - - - - - - - - - - A corolla morphology trait (TO:0000950) that is the color of a corolla (PO:0009059). - cooperl - 2015-07-27T15:41:16Z - PATO:0000014 - TO_GIT:299 - plant_trait_ontology - TO:0000951 - corolla color - TO:0000951 - - - - - A corolla morphology trait (TO:0000950) that is the color of a corolla (PO:0009059). - TO:cooperl - - - - - - - - - - - - A stem morphology trait (TO:0000361) which is the weight of a stem (PO:0009047). - cooperl - 2015-08-27T15:05:35Z - PATO:0000128 - TO_GIT:157 - stalk weight - plant_trait_ontology - TO:0000952 - stem weight - TO:0000952 - - - - - A stem morphology trait (TO:0000361) which is the weight of a stem (PO:0009047). - TO:cooperl - - - - - - - - - - A shoot system morphology trait (TO:0000077) which is the number of stems (PO:0009047). - johnseth - 2015-08-27T16:03:16Z - PATO:0001555 - TO_GIT:57 - stalk number - plant_trait_ontology - TO:0000953 - stem number - TO:0000953 - - - - - A shoot system morphology trait (TO:0000077) which is the number of stems (PO:0009047). - TO:cooperl - - - - - - - - - - An inflorescence branch morphology trait (TO:0000784) which is a quality of a spikelet rachilla (PO:0009080). - johnseth - 2015-10-19T14:35:34Z - PATO:0000051 - TO_GIT:106 - plant_trait_ontology - TO:0000954 - spikelet rachilla morphology trait - TO:0000954 - - - - - An inflorescence branch morphology trait (TO:0000784) which is a quality of a spikelet rachilla (PO:0009080). - TO:Ethan_Johnson - - - - - - - - - - A metabolite content related trait (TO:0000281) which is the amount of cyanide (CHEBI:17514) occurring in a plant anatomical entity (PO:0025131). - CHEBI:17514 - plant_trait_ontology - TO:0000955 - cyanide content - TO:0000955 - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the shape of a cob. - johnseth - 2015-09-01T14:35:54Z - PATO:0000052 - TO_GIT:109 - plant_trait_ontology - TO:0000958 - cob shape - TO:0000958 - - - - - An infructescence axis morphology trait (TO:0000921) which is the shape of a cob. - TO:ejohnson - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the length of a cob. - johnseth - 2015-09-01T14:44:47Z - PATO:0000122 - TO_GIT:109 - plant_trait_ontology - TO:0000959 - cob length - TO:0000959 - - - - - An infructescence axis morphology trait (TO:0000921) which is the length of a cob. - TO:ejohnson - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the width of a cob. - johnseth - 2015-09-01T14:51:33Z - PATO:0000921 - TO_GIT:109 - plant_trait_ontology - TO:0000960 - cob width - TO:0000960 - - - - - An infructescence axis morphology trait (TO:0000921) which is the width of a cob. - TO:ejohnson - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the area of a cob. - johnseth - 2015-09-01T15:00:53Z - PATO:0001323 - TO_GIT:109 - plant_trait_ontology - TO:0000961 - cob area - TO:0000961 - - - - - An infructescence axis morphology trait (TO:0000921) which is the area of a cob. - TO:ejohnson - - - - - - - - - - An infructescence axis morphology trait (TO:0000921) which is the angle of a cob. - johnseth - 2015-09-01T15:15:37Z - PATO:0002326 - TO_GIT:109 - plant_trait_ontology - TO:0000962 - cob angle - TO:0000962 - - - - - An infructescence axis morphology trait (TO:0000921) which is the angle of a cob. - TO:ejohnson - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) which is the color of an ear infructescence (PO:0025597). - johnseth - 2015-09-01T15:52:16Z - PATO:0000014 - TO_GIT:132 - ear infructescence color - plant_trait_ontology - TO:0000963 - ear color - TO:0000963 - - - - - An ear infructescence morphology trait (TO:0000976) which is the color of an ear infructescence (PO:0025597). - TO:Ethan_Johnson - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) which is the shape of an ear infructescence (PO:0025597). - johnseth - 2015-09-01T16:07:23Z - PATO:0000052 - TO_GIT:132 - ear infructescence shape - plant_trait_ontology - TO:0000964 - ear shape - TO:0000964 - - - - - An ear infructescence morphology trait (TO:0000976) which is the shape of an ear infructescence (PO:0025597). - TO:Ethan_Johnson - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) which is the qualitative rating of the harvested ear infructescence (PO:0025597). - johnseth - 2015-09-01T16:12:33Z - TO_GIT:132 - ear infructescence aspect - plant_trait_ontology - TO:0000965 - ear aspect - TO:0000965 - - - - - An ear infructescence morphology trait (TO:0000976) which is the qualitative rating of the harvested ear infructescence (PO:0025597). - TO:Ethan_Johnson - - - - - - - - - - An ear infructescence morphology trait (TO:0000976) which is the ratio of ear infructescence position (TO:0000683) to plant height (TO:0000207). - johnseth - 2015-09-01T16:17:13Z - TO_GIT:132 - plant_trait_ontology - ear position ratio - TO:0000966 - ear infructescence position ratio - TO:0000966 - - - - - An ear infructescence morphology trait (TO:0000976) which is the ratio of ear infructescence position (TO:0000683) to plant height (TO:0000207). - TO:Ethan_Johnson - TO:cooperl - - - - - - - - - - A seed morphology trait (TO:0000184) which is a quality of a hilum (PO:0020063). - meiera - 2015-10-13T11:16:35Z - TO_GIT:81 - plant_trait_ontology - TO:0000967 - hilum morphology trait - TO:0000967 - - - - - A seed morphology trait (TO:0000184) which is a quality of a hilum (PO:0020063). - POC:austin_meier - - - - - - - - - - - - A hilum morphology trait (TO:0000967) which is the color of a hilum (PO:0020063). - meiera - 2015-10-13T11:19:20Z - TO_GIT:81 - plant_trait_ontology - TO:0000968 - hilum color - TO:0000968 - - - - - A hilum morphology trait (TO:0000967) which is the color of a hilum (PO:0020063). - POC:austin_meier - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of an ear inflorescence (PO:0020136). - cooperl - 2015-10-16T14:24:59Z - TO_GIT:97 - plant_trait_ontology - TO:0000969 - ear inflorescence morphology trait - TO:0000969 - - - - - An inflorescence morphology trait (TO:0000373) which is a quality of an ear inflorescence (PO:0020136). - TO:cooperl - - - - - - - - - - - - An inflorescence density (TO:0000800) trait which is a quality of a panicle (PO:0009049). - cooperl - 2015-10-16T15:23:56Z - TO_GIT:97 - plant_trait_ontology - TO:0000970 - panicle density - TO:0000970 - - - - - An inflorescence density (TO:0000800) trait which is a quality of a panicle (PO:0009049). - TO:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the presence or absence of hairs on an inflorescence (PO:0009049). - cooperl - 2015-10-16T15:53:14Z - PATO:0000454 - TO_GIT:97 - head hairiness - plant_trait_ontology - TO:0000971 - inflorescence hairiness - TO:0000971 - - - - - An inflorescence morphology trait (TO:0000373) which is the presence or absence of hairs on an inflorescence (PO:0009049). - TO:cooperl - - - - - - - - - - - - An inflorescence branch morphology trait (TO:0000784) which is the length of a spikelet rachilla (PO:0009080). - johnseth - 2015-10-19T14:40:20Z - rachilla length - PATO:0000122 - TO_GIT:106 - plant_trait_ontology - TO:0000972 - spikelet rachilla length - TO:0000972 - - - - - An inflorescence branch morphology trait (TO:0000784) which is the length of a spikelet rachilla (PO:0009080). - TO:Ethan_Johnson - - - - - - - - - - An inflorescence branch morphology trait (TO:0000784) which is the shape of a spikelet rachilla (PO:0009080). - johnseth - 2015-10-19T14:46:04Z - rachilla shape - PATO:0000052 - TO_GIT:106 - plant_trait_ontology - TO:0000973 - spikelet rachilla shape - TO:0000973 - - - - - An inflorescence branch morphology trait (TO:0000784) which is the shape of a spikelet rachilla (PO:0009080). - TO:Ethan_Johnson - - - - - - - - - - An inflorescence branch morphology trait (TO:0000784) which is the pubescence of a spikelet rachilla (PO:0009080). - johnseth - 2015-10-19T14:47:51Z - rachilla hair type - PATO:0000454 - TO_GIT:106 - plant_trait_ontology - TO:0000974 - spikelet rachilla hair type - TO:0000974 - - - - - An inflorescence branch morphology trait (TO:0000784) which is the pubescence of a spikelet rachilla (PO:0009080). - TO:Ethan_Johnson - - - - - - - - - - A fruit width (TO:0002627) which is the variation in the width of a grain (PO:0009001). - meiera - 2015-10-20T15:15:19Z - plant_trait_ontology - TO:0000975 - grain width - TO:0000975 - - - - - A fruit width (TO:0002627) which is the variation in the width of a grain (PO:0009001). - TO:austin_meier - - - - - - - - - - An infructescence morphology trait (TO:0000920) which is a quality of the ear infructescence (PO:0025597). - johnseth - 2015-10-22T09:35:32Z - TO_GIT:132 - TO_GIT:144 - plant_trait_ontology - TO:0000976 - ear infructescence morphology trait - TO:0000976 - - - - - An infructescence morphology trait (TO:0000920) which is a quality of the ear infructescence (PO:0025597). - TO:Ethan_Johnson - - - - - - - - - - A leaf size trait (TO:0002637) which is the size of the total surface of a leaf (PO:0025034). - johnseth - 2015-10-23T10:29:59Z - TO_GIT:139 - plant_trait_ontology - TO:0000977 - Comment: rating scale of 3, small; 5, intermediate; 7 large - leaf foliage rating - TO:0000977 - - - - - A leaf size trait (TO:0002637) which is the size of the total surface of a leaf (PO:0025034). - TO:Ethan_Johnson - - - - - - - - - - A glume morphology trait (TO:0000869) with is the shape of a glume (PO:0009039). - johnseth - 2015-10-23T10:46:05Z - TO_GIT:166 - plant_trait_ontology - TO:0000978 - glume shape - TO:0000978 - - - - - A glume morphology trait (TO:0000869) with is the shape of a glume (PO:0009039). - TO:Ethan_Johnson - - - - - - - - - - A collective phyllome structure morphology trait (TO:0000845) that is a quality of an involucre (PO:0009100). - johnseth - 2015-11-02T15:02:56Z - TO_GIT:153 - plant_trait_ontology - TO:0000979 - involucre morphology trait - TO:0000979 - - - - - A collective phyllome structure morphology trait (TO:0000845) that is a quality of an involucre (PO:0009100). - TO:Ethan_Johnson - - - - - - - - - - A plant embryo cotyledon morphology trait (TO:0000775) which is the color of the plant embryo cotyledon (PO:0025470). - TO_austin_meier - GIT_TO:353 - plant embryo cotyledon colour - plant_trait_ontology - TO:0000980 - plant embryo cotyledon color - TO:0000980 - - - - - A plant embryo cotyledon morphology trait (TO:0000775) which is the color of the plant embryo cotyledon (PO:0025470). - PATO:0000014 - - - - - - - - - - A collective plant organ structure morphology trait (TO:0000842) which is a quality of a root system (PO:0025025). - Ethan_Johnson - TO_GIT:359 - plant_trait_ontology - TO:0000985 - root system morphology trait - TO:0000985 - - - - - A collective plant organ structure morphology trait (TO:0000842) which is a quality of a root system (PO:0025025). - ethan_johnson - PO:0025025 - - - - - - - - - - A flower number trait (TO:0002736) which is the number of staminate flowers (PO:0025600). - ethan_johnson - PATO:0001555 - TO_GIT:356 - male flower number trait - plant_trait_ontology - TO:0000986 - staminate flower number trait - TO:0000986 - - - - - - - - - - A flower number trait (TO:0002736) which is the number of pistillate flowers (PO:0025599). - ethan_johnson - PATO:0001555 - TO_GIT:356 - female flower number trait - plant_trait_ontology - TO:0000987 - pistillate flower number trait - TO:0000987 - - - - - - - - - - A shoot system morphology trait (TO:0000077) that is a quality of a shoot-borne shoot system (PO:0004545). - ethan_johnson - TO_GIT:332 - plant_trait_ontology - TO:0000988 - shoot-borne shoot system morphology trait - TO:0000988 - - - - - - - - - - A shoot-borne shoot system morphology trait (TO:0000988) that is a quality of an epicormic shoot system (PO:0004546). - ethan_johnson - TO_GIT:332 - plant_trait_ontology - TO:0000989 - epicormic shoot system morphology trait - TO:0000989 - - - - - - - - - - A seed morphology trait (TO:0000184) which is the hardness of a seed (PO:0009010). - ethan_johnson - PATO:0000048 - plant_trait_ontology - TO:0000990 - seed hardness - TO:0000990 - - - - - - - - - - An epicormic shoot system morphology trait (TO:0000989) which is the number of epicormic shoot systems (PO:0004546). - ethan_johnson - TO_GIT:332 - stem sucker number - plant_trait_ontology - TO:0000991 - epicormic shoot system number - TO:0000991 - - - - - - - - - - A biological process trait (TO:0000283) which is a quality of a gibberellin biosynthetic process (GO:0009686). - ethan_johnson - gibberellin biosynthesis - TO_GIT:383 - plant_trait_ontology - TO:0000992 - Refers to gibberellin (CHEBI:24250) - gibberellin biosynthesis trait - TO:0000992 - - - - - - - - - - A carbohydrate content trait (TO:0000291) which is the amount of cellulose (CHEBI:62968) in a plant structure (PO:0009011). - ethan_johnson - TO_GIT:384 - plant_trait_ontology - TO:0000993 - Refers to crystalline cellulose (CHEBI:62968): A (1→4)-β-D-glucan (cellulose) in crystalline form with a structure consisting of several hundred to over ten thousand D-glucose residues joined by β(1→4) glycosidic linkages. - cellulose content - TO:0000993 - - - - - A carbohydrate content trait (TO:0000291) which is the amount of cellulose (CHEBI:62968) in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A collective phyllome structure morphology trait (TO:0000845) that is a quality of the androecium (PO:0009061). - ethan_johnson - TO_GIT:386 - plant_trait_ontology - TO:0000994 - androecium morphology trait - TO:0000994 - - - - - A collective phyllome structure morphology trait (TO:0000845) that is a quality of the androecium (PO:0009061). - PO:0009061 - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the aluminium cation (CHEBI:63062) composition in a plant structure (PO:0009011). - TO_GIT:412 - Al content (exact) - aluminium content (exact) - plant_trait_ontology - TO:0000995 - aluminum content trait - TO:0000995 - - - - - A mineral and ion content trait (TO:0000465) which is the aluminium cation (CHEBI:63062) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - - - A flag leaf anatomy and morphology trait (TO:0000832) which is the area of a flag leaf (PO:0020103). - 2017-07-10 - TO_GIT:415 - plant_trait_ontology - TO:0000996 - flag leaf area - TO:0000996 - - - - - A flag leaf anatomy and morphology trait (TO:0000832) which is the area of a flag leaf (PO:0020103). - PMID:25785447 - PMID:26841834 - TO:cooperl - - - - - - - - - - A grain length (TO:0000734) measured on a dehulled, polished grain. - 2017-07-10 - TO_GIT:415 - white rice grain length (narrow) - plant_trait_ontology - TO:0000997 - polished grain length - TO:0000997 - - - - - A grain length (TO:0000734) measured on a dehulled, polished grain. - PMID:26842267 - TO:cooperl - - - - - - - - - - A grain width (TO:0000975) which is the width of the dehulled, polished grain. - 2017-07-10 - TO_GIT:415 - white rice grain width (narrow) - plant_trait_ontology - TO:0000998 - polished grain width - TO:0000998 - - - - - A grain width (TO:0000975) which is the width of the dehulled, polished grain. - PMID:26842267 - TO:cooperl - - - - - - - - - - A grain length to width ratio (TO:0002731) measured on a dehulled, polished grain. - 2017-07-10 - TO_GIT:415 - white rice grain length to width ratio (narrow) - plant_trait_ontology - TO:0000999 - polished grain length to width ratio - TO:0000999 - - - - - A grain length to width ratio (TO:0002731) measured on a dehulled, polished grain. - TO:cooperl - - - - - - - - - - A glume morphology trait (TO:0000869) which is amount the glume (PO:0009039) covers the caryopsis. Often measured as percentage. - plant_trait_ontology - TO:0001000 - glume cover - TO:0001000 - - - - - A glume morphology trait (TO:0000869) which is amount the glume (PO:0009039) covers the caryopsis. Often measured as percentage. - Gramene:pankaj_jaiswal - PO:0009039 - TO:moorel - - - - - - - - - - A glume morphology trait (TO:0000869) which is the persistence of a glume (PO:0009039). - PATO:0000082 - plant_trait_ontology - TO:0001001 - Measured as percentage of kernels or seeds carrying the glume after threshing. In a normal setup the seeds do not have glumes after the threshing process. -Refer to persistence (PATO:0000082): A rhythm quality inhering in a bearer by virtue of the repetitiveness of bearer's rhythm. - glume persistence - TO:0001001 - - - - - A glume morphology trait (TO:0000869) which is the persistence of a glume (PO:0009039). - Gramene:pankaj_jaiswal - PO:0009039 - TO:moorel - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the exsertion of an inflorescence (PO:0009049). - TO_GIT:97 - plant_trait_ontology - TO:0001002 - inflorescence exsertion - TO:0001002 - - - - - An inflorescence morphology trait (TO:0000373) which is the exsertion of an inflorescence (PO:0009049). - PO:0009049 - TO:moorel - - - - - - - - - - A visual estimate of the plant height for a group of plants in an experiment. - plant_trait_ontology - TO:0001003 - plant height uniformity - TO:0001003 - - - - - A visual estimate of the plant height for a group of plants in an experiment. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Number of basal tillers per plant, should represent most plants within a study. - plant_trait_ontology - basal axillary shoot number - TO:0001004 - basal tiller number - TO:0001004 - - - - - Number of basal tillers per plant, should represent most plants within a study. - Gramene:pankaj_jaiswal - - - - - - - - - - - - The height of the tallest basal tiller (basal axillary shoot) of a plant. - plant_trait_ontology - basal tiller height - TO:0001005 - basal tiller length - TO:0001005 - - - - - The height of the tallest basal tiller (basal axillary shoot) of a plant. - Gramene:pankaj_jaiswal - - - - - - - - - - Average sum of number of adventitious roots in a plant derived per experiment. - plant_trait_ontology - TO:0001006 - adventitious root number - TO:0001006 - - - - - Average sum of number of adventitious roots in a plant derived per experiment. - Gramene:pankaj_jaiswal - - - - - - - - - - A coleoptile morphology trait (TO:0000753) which is the length of a coleoptile (PO:0020033). - PATO:0000122 - TO_GIT:62 - plant_trait_ontology - TO:0001007 - coleoptile length - TO:0001007 - - - - - A coleoptile morphology trait (TO:0000753) which is the length of a coleoptile (PO:0020033). - Gramene:pankaj_jaiswal - PO:0020033 - POC:cooperl - - - - - - - - - - In grass plants the number of days required for the full emergence of the flag leaf in a field or study. It can be counted from date of seed sowing or the transplant (in case of rice). - plant_trait_ontology - TO:0001008 - days to flag leaf emergence - TO:0001008 - - - - - In grass plants the number of days required for the full emergence of the flag leaf in a field or study. It can be counted from date of seed sowing or the transplant (in case of rice). - Gramene:pankaj_jaiswal - - - - - - - - - - A count of number of roots present below a given depth from the soil surface. - plant_trait_ontology - TO:0001009 - deep root number - TO:0001009 - - - - - A count of number of roots present below a given depth from the soil surface. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of leaves in a plant that have undergone leaf senescence stage or are considered dead. - dead leaf number - plant_trait_ontology - TO:0001010 - senesced leaf number - TO:0001010 - - - - - Number of leaves in a plant that have undergone leaf senescence stage or are considered dead. - Gramene:pankaj_jaiswal - - - - - - - - - - A ration of the deep root dry weight to total root dry weight per plant. - deep root dry weight to total root dry weight ratio - plant_trait_ontology - TO:0001011 - deep root weight ratio - TO:0001011 - - - - - A ration of the deep root dry weight to total root dry weight per plant. - Gramene:pankaj_jaiswal - - - - - - - - - - A root length (TO:0000227) that is the length of one or more lateral roots (PO:0020121). - GIT_TO:365 - PATO:0000122 - plant_trait_ontology - TO:0001012 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - lateral root length - TO:0001012 - - - - - A root length (TO:0000227) that is the length of one or more lateral roots (PO:0020121). - Gramene:pankaj_jaiswal - TO:austin_meier - TO:seymour_megan - - - - - - - - - - Average sum of number of lateral roots in a plant derived per experiment. - plant_trait_ontology - TO:0001013 - lateral root number - TO:0001013 - - - - - Average sum of number of lateral roots in a plant derived per experiment. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf weight trait (TO:0000505) which is the dry weight of a leaf (PO:0025034). - plant_trait_ontology - TO:0001014 - leaf dry weight - TO:0001014 - - - - - A leaf weight trait (TO:0000505) which is the dry weight of a leaf (PO:0025034). - Gramene:pankaj_jaiswal - PO:0025034 - TO:moorel - - - - - - - - - - The total amount of carbon fixed by the plant per unit time and is measured by determining the changes in CO2 concentration over a plant leaf in a glass enclosure. - plant_trait_ontology - gross photosynthetic rate - leaf photosynthetic rate - TO:0001015 - photosynthetic rate - TO:0001015 - - - - - The total amount of carbon fixed by the plant per unit time and is measured by determining the changes in CO2 concentration over a plant leaf in a glass enclosure. - Gramene:pankaj_jaiswal - - - - - - - - - - The relative chlorophyll content of the plant determined after a given treatment as compared to the one determined under normal conditions. - plant_trait_ontology - TO:0001016 - relative chlorophyll content - TO:0001016 - - - - - The relative chlorophyll content of the plant determined after a given treatment as compared to the one determined under normal conditions. - Gramene:pankaj_jaiswal - - - - - - - - - - As determined by the ratio of photosynthetic rate to transpiration rate. - photosynthetic rate to transpiration rate ratio - plant_trait_ontology - TO:0001017 - water use efficiency - TO:0001017 - - - - - As determined by the ratio of photosynthetic rate to transpiration rate. - Gramene:pankaj_jaiswal - - - - - - - - - - The rate of transpiration. - GO:GO:0010148 - plant_trait_ontology - TO:0001018 - transpiration rate - TO:0001018 - - - - - The rate of transpiration. - Gramene:pankaj_jaiswal - - - - - - - - - - A ratio of root dry weight to total plant dry weight. - plant_trait_ontology - root dry weight to total plant dry weight ratio - TO:0001019 - root to total biomass ratio - TO:0001019 - - - - - A ratio of root dry weight to total plant dry weight. - Gramene:pankaj_jaiswal - - - - - - - - - - Volume of the sap exudate collected from the cut parts of a plant. - plant_trait_ontology - Sap per tiller - TO:0001020 - exudate sap volume - TO:0001020 - - - - - Volume of the sap exudate collected from the cut parts of a plant. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of days required for the emergence of inflorescence to become visible on the plant. - plant_trait_ontology - days to inflorescence emergence - TO:0001021 - Often in grasses it emerges from the flag leaf whcih is the top most leaft on the shoot. - days to inflorescence exsertion - TO:0001021 - - - - - Number of days required for the emergence of inflorescence to become visible on the plant. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of days required for the tassel to emerge from the flag leaf in a maize plant or a group of plants in a study. - plant_trait_ontology - TO:0001022 - Often determined when the 50% length of the tassel has emerged as compared to its full length. Number of days is calculated from the day of sowing of the seeds. - days to tassel emergence - TO:0001022 - - - - - Number of days required for the tassel to emerge from the flag leaf in a maize plant or a group of plants in a study. - Gramene:pankaj_jaiswal - - - - - - - - - - Number of days required for the ear shoot to emerge from the given leaf sheath in a maize plant or a group of plants in a study. - plant_trait_ontology - TO:0001023 - Often determined when the 50% length of the ear has emerged as compared to its full length. Number of days is calculated from the day of sowing of the seeds. - days to ear shoot emergence - TO:0001023 - - - - - Number of days required for the ear shoot to emerge from the given leaf sheath in a maize plant or a group of plants in a study. - Gramene:pankaj_jaiswal - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the phosphorus cation (CHEBI:33467) composition in a plant structure (PO:0009011). - jaiswalp - plant_trait_ontology - PHOCN - TO:0001024 - phosphorus content - TO:0001024 - - - - - A mineral and ion content trait (TO:0000465) which is the phosphorus cation (CHEBI:33467) composition in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Amount of phosphorus in the leaf. - plant_trait_ontology - LFPHOCN - TO:0001025 - Often measured in per unit dry weight. - leaf phosphorus content - TO:0001025 - - - - - Amount of phosphorus in the leaf. - Gramene:pankaj_jaiswal - - - - - - - - - - The total amount of carbon lost metabolically by the plant per unit time and is measured by determining the increase in CO2 concentration over a plant leaf in a glass enclosure. - plant_trait_ontology - TO:0001026 - respiration rate - TO:0001026 - - - - - The total amount of carbon lost metabolically by the plant per unit time and is measured by determining the increase in CO2 concentration over a plant leaf in a glass enclosure. - Gramene:pankaj_jaiswal - - - - - - - - - - It is measured as the difference between gross photosynthesis (the total amount of carbon fixed by the plant per unit time) and the respiration (the total amount of carbon lost metabolically during that same time). - plant_trait_ontology - TO:0001027 - net photosynthetic rate - TO:0001027 - - - - - It is measured as the difference between gross photosynthesis (the total amount of carbon fixed by the plant per unit time) and the respiration (the total amount of carbon lost metabolically during that same time). - Gramene:pankaj_jaiswal - - - - - - - - - - Break point of leaf water potential in the regression of leaf water potential against leaf relative water content. - plant_trait_ontology - Break point of osmotic adjustment - TO:0001028 - osmotic adjustment break point - TO:0001028 - - - - - Break point of leaf water potential in the regression of leaf water potential against leaf relative water content. - CIRAD:Brigitte_Courtois - - - - - - - - - - It is a ratio of harvest index in stress to that of control environment. - plant_trait_ontology - TO:0001029 - relative harvest index - TO:0001029 - - - - - It is a ratio of harvest index in stress to that of control environment. - Gramene:pankaj_jaiswal - - - - - - - - - - It is a ratio of leaf area determined from a stressed plant to that grown in normal environment. - plant_trait_ontology - TO:0001030 - relative leaf area - TO:0001030 - - - - - It is a ratio of leaf area determined from a stressed plant to that grown in normal environment. - Gramene:pankaj_jaiswal - - - - - - - - - - It is a ratio of leaf dry weight determined from a stressed plant to that grown in normal environment. - plant_trait_ontology - TO:0001031 - relative leaf dry weight - TO:0001031 - - - - - It is a ratio of leaf dry weight determined from a stressed plant to that grown in normal environment. - Gramene:pankaj_jaiswal - - - - - - - - - - A panicle number (TO:0000152) trait which is the ratio of panicle number determined from a stressed plant to that grown in normal environment. - plant_trait_ontology - TO:0001032 - relative panicle number - TO:0001032 - - - - - A panicle number (TO:0000152) trait which is the ratio of panicle number determined from a stressed plant to that grown in normal environment. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - It is a ratio of spikelet number per panicle/inflorescence determined from a stressed plant to that grown in normal environment. - plant_trait_ontology - relative number of spikelet per panicle - TO:0001033 - relative spikelet number - TO:0001033 - - - - - It is a ratio of spikelet number per panicle/inflorescence determined from a stressed plant to that grown in normal environment. - Gramene:pankaj_jaiswal - - - - - - - - - - It is a ratio of the plant height determined from a stressed plant to that grown in normal environment. - plant_trait_ontology - TO:0001034 - relative plant height - TO:0001034 - - - - - It is a ratio of the plant height determined from a stressed plant to that grown in normal environment. - Gramene:pankaj_jaiswal - - - - - - - - - - A stem morphology trait (TO:0000361) which is the width of a stem (PO:0009047). - PATO:0000921 - plant_trait_ontology - culm diameter - culm width - TO:0001035 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - stem width - TO:0001035 - - - - - A stem morphology trait (TO:0000361) which is the width of a stem (PO:0009047). - Gramene:cwt - PO:0009047 - TO:moorel - - - - - - - - OBSOLETE. - plant_trait_ontology - culm senescence - TO:0001036 - Please refer to stem senescence (TO:0020085)." [Gramene:cwt, TO:moorel] - stem senescence - true - TO:0001036 - - - - - - - - - - A yield trait (TO:0000371) which is the yield of roots (PO:0009005). - cooperl - plant_trait_ontology - TO:0001041 - root yield - TO:0001041 - - - - - A yield trait (TO:0000371) which is the yield of roots (PO:0009005). - TO:cooperl - - - - - - - - - - A quality trait (TO:0000597) which is the quality of roots (PO:0009005). - cooperl - plant_trait_ontology - TO:0001042 - root quality trait - TO:0001042 - - - - - A quality trait (TO:0000597) which is the quality of roots (PO:0009005). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the barium cation (CHEBI:39125) composition in a plant structure (PO:0009011). - TO_GIT:412 - Ba content (exact) - plant_trait_ontology - TO:0001043 - barium content trait - TO:0001043 - - - - - A mineral and ion content trait (TO:0000465) which is the barium cation (CHEBI:39125) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the cobalt cation (CHEBI:23336) composition in a plant structure (PO:0009011). - TO_GIT:412 - Co content (exact) - plant_trait_ontology - TO:0001044 - cobalt content trait - TO:0001044 - - - - - A mineral and ion content trait (TO:0000465) which is the cobalt cation (CHEBI:23336) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the chromium cation (CHEBI:33516) composition in a plant structure (PO:0009011). - TO_GIT:412 - Cr content (exact) - plant_trait_ontology - TO:0001045 - chromium content trait - TO:0001045 - - - - - A mineral and ion content trait (TO:0000465) which is the chromium cation (CHEBI:33516) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the iodine cation (CHEBI:33116) composition in a plant structure (PO:0009011). - TO_GIT:412 - I content (exact) - plant_trait_ontology - TO:0001046 - iodine content trait - TO:0001046 - - - - - A mineral and ion content trait (TO:0000465) which is the iodine cation (CHEBI:33116) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the lead cation (CHEBI:30180) composition in a plant structure (PO:0009011). - TO_GIT:412 - I content (exact) - plant_trait_ontology - TO:0001047 - lead content trait - TO:0001047 - - - - - A mineral and ion content trait (TO:0000465) which is the lead cation (CHEBI:30180) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the silicon cation (CHEBI:30584) composition in a plant structure (PO:0009011). - TO_GIT:412 - Si content (exact) - plant_trait_ontology - TO:0001048 - silicon content trait - TO:0001048 - - - - - A mineral and ion content trait (TO:0000465) which is the silicon cation (CHEBI:30584) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the rubidium cation (CHEBI:49847) composition in a plant structure (PO:0009011). - TO_GIT:412 - Rb content (exact) - plant_trait_ontology - TO:0001049 - rubidium content trait - TO:0001049 - - - - - A mineral and ion content trait (TO:0000465) which is the rubidium cation (CHEBI:49847) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the strontium ion (CHEBI:39130) composition in a plant structure (PO:0009011). - TO_GIT:412 - Sr content (exact) - plant_trait_ontology - TO:0001050 - strontium content trait - TO:0001050 - - - - - A mineral and ion content trait (TO:0000465) which is the strontium ion (CHEBI:39130) composition in a plant structure (PO:0009011). - TO:cooperl - - - - - - - - - - A root morphology trait (TO:0000043) which is the number of root hairs (GO:0035618) in a given surface area of a root (PO:0009005). - 2017-07-14 - TO_GIT:417 - plant_trait_ontology - TO:0001051 - root hair density - TO:0001051 - - - - - A root morphology trait (TO:0000043) which is the number of root hairs (GO:0035618) in a given surface area of a root (PO:0009005). - PMID:27294384 - TO:cooperl - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the cross-sectional area of the root cortex (PO:0000258). - 2017-07-14 - TO_GIT:417 - plant_trait_ontology - TO:0001052 - root cortex cross-sectional area - TO:0001052 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the cross-sectional area of the root cortex (PO:0000258). - PMID:27294384 - TO:cooperl - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is the cross-sectional area of the root stele (PO:0020124). - 2017-07-14 - TO_GIT:417 - plant_trait_ontology - TO:0001054 - root stele cross-sectional area - TO:0001054 - - - - - A cardinal organ part morphology trait (TO:0000754) which is the cross-sectional area of the root stele (PO:0020124). - PMID:27294384 - TO:cooperl - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the cross-sectional area of the root aerenchyma (PO:0006213). - 2017-07-14 - TO_GIT:417 - plant_trait_ontology - TO:0001055 - root aerenchyma cross-sectional area - TO:0001055 - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the cross-sectional area of the root aerenchyma (PO:0006213). - PMID:27294384 - TO:cooperl - - - - - - - - - - A root morphology trait (TO:0000043) which is the cross sectional area of a root (PO:0009005). - 2017-07-14 - TO_GIT:417 - plant_trait_ontology - TO:0001056 - root cross sectional area - TO:0001056 - - - - - A root morphology trait (TO:0000043) which is the cross sectional area of a root (PO:0009005). - PMID:21454799 - TO:cooperl - - - - - - - - - - A root system morphology trait (TO:0000985) which is the width of the root system (PO:0025025). - 2017-07-10 - TO_GIT:417 - plant_trait_ontology - TO:0001057 - root system width - TO:0001057 - - - - - A root system morphology trait (TO:0000985) which is the width of the root system (PO:0025025). - PMID:21454799 - TO:cooperl - - - - - - - - - - A root system morphology trait (TO:0000985) which is the depth of the root system (PO:0025025). - 2017-07-14 - TO_GIT:417 - plant_trait_ontology - TO:0001058 - root system depth - TO:0001058 - - - - - A root system morphology trait (TO:0000985) which is the depth of the root system (PO:0025025). - PMID:21454799 - TO:cooperl - - - - - - - - - - A root system morphology trait (TO:0000985) which is the ratio of the root system width (TO:0001057) to root system depth (TO:0001058). - 2017-07-14 - TO_GIT:417 - plant_trait_ontology - TO:0001059 - root system width to depth ratio - TO:0001059 - - - - - A root system morphology trait (TO:0000985) which is the ratio of the root system width (TO:0001057) to root system depth (TO:0001058). - PMID:21454799 - TO:cooperl - - - - - - - - - - A vascular tissue morphology trait (TO_0000470) which is the number of metaxylem vessels (PO:0025620). - 2017-08-17T21:15:56Z - TO_GIT:421 - plant_trait_ontology - TO:0001066 - The number of metaxylem vessels (PO:0025620) may be counted in a cross section of a primary xylem (PO:0005849). - number of metaxylem vessels - TO:0001066 - - - - - A vascular tissue morphology trait (TO_0000470) which is the number of metaxylem vessels (PO:0025620). - PMID:1186185 - TO:Laurel_Cooper - - - - - - - - - - A floral organ morphology trait (TO:0000862) which is the size of a floral organ (PO:0025395). - PATO:0000117 - plant_trait_ontology - TO:0002600 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - floral organ size - TO:0002600 - - - - - A floral organ morphology trait (TO:0000862) which is the size of a floral organ (PO:0025395). - Gramene:pankaj_jaiswal - PO:0025395 - TO:moorel - - - - - - - - - - A stamen morphology trait (TO:0000225) which is the size of a stamen (PO:0009029). - PATO:0000117 - plant_trait_ontology - TO:0002601 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - stamen size - TO:0002601 - - - - - A stamen morphology trait (TO:0000225) which is the size of a stamen (PO:0009029). - Gramene:pankaj_jaiswal - PO:0009029 - TO:moorel - - - - - - - - - - A pistil morphology trait (TO:0000223) which is the size of a pistil. - PATO:0000117 - plant_trait_ontology - TO:0002602 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - pistil size - TO:0002602 - - - - - A pistil morphology trait (TO:0000223) which is the size of a pistil. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A petal morphology trait (TO:0000863) which is the size of a petal (PO:0009032). - PATO:0000117 - plant_trait_ontology - TO:0002603 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - petal size - TO:0002603 - - - - - A petal morphology trait (TO:0000863) which is the size of a petal (PO:0009032). - Gramene:pankaj_jaiswal - PO:0009032 - TO:moorel - - - - - - - - - - A sepal morphology trait (TO:0000864) which is the size of a sepal (PO:0009031). - PATO:0000117 - plant_trait_ontology - TO:0002604 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - sepal size - TO:0002604 - - - - - A sepal morphology trait (TO:0000864) which is the size of a sepal (PO:0009031). - Gramene:pankaj_jaiswal - PO:0009031 - TO:moorel - - - - - - - - - - A petal morphology trait (TO:0000863) which is the length of a petal (PO:0009032). - PATO:0000122 - plant_trait_ontology - TO:0002605 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - petal length - TO:0002605 - - - - - A petal morphology trait (TO:0000863) which is the length of a petal (PO:0009032). - Gramene:pankaj_jaiswal - PO:0009032 - TO:moorel - - - - - - - - - - A petal morphology trait (TO:0000863) which is the width of a petal (PO:0009032) in a flower (PO:0009049). - PATO:0000921 - plant_trait_ontology - TO:0002606 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - petal width - TO:0002606 - - - - - A petal morphology trait (TO:0000863) which is the width of a petal (PO:0009032) in a flower (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009032 - PO:0009049 - TO:moorel - - - - - - - - - - A sepal morphology trait (TO:0000864) which is the length of a sepal (PO:0009031). - PATO:0000122 - plant_trait_ontology - TO:0002607 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - sepal length - TO:0002607 - - - - - A sepal morphology trait (TO:0000864) which is the length of a sepal (PO:0009031). - Gramene:pankaj_jaiswal - PO:0009031 - TO:moorel - - - - - - - - - - A sepal morphology trait (TO:0000864) which is the width of a sepal (PO:0009031) in a flower (PO:0009049). - PATO:0000921 - plant_trait_ontology - TO:0002608 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - sepal width - TO:0002608 - - - - - A sepal morphology trait (TO:0000864) which is the width of a sepal (PO:0009031) in a flower (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009031 - PO:0009049 - TO:moorel - - - - - - - - - - A stamen morphology trait (TO:0000215) which is the length of a stamen (PO:0009029). - PATO:0000122 - plant_trait_ontology - TO:0002609 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - stamen length - TO:0002609 - - - - - A stamen morphology trait (TO:0000215) which is the length of a stamen (PO:0009029). - Gramene:pankaj_jaiswal - PO:0009029 - TO:moorel - - - - - - - - - - A pistil morphology trait (TO:0000223) which is the length of a pistil. - PATO:0000122 - plant_trait_ontology - TO:0002610 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - pistil length - TO:0002610 - - - - - A pistil morphology trait (TO:0000223) which is the length of a pistil. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A developmental trait resulting development of increased, decreased or new organs and organ parts due to a mutation that causes one member of a repetitive series to assume the identity of another member , for example, the transformation of sepals into petals. - plant_trait_ontology - homeotic mutation - TO:0002611 - homeotic development trait - TO:0002611 - - - - - A developmental trait resulting development of increased, decreased or new organs and organ parts due to a mutation that causes one member of a repetitive series to assume the identity of another member , for example, the transformation of sepals into petals. - Gramene:pankaj_jaiswal - - - - - - - - - - A developmental trait resulting development of increased, decreased or new vegetative organs and organ parts due to a mutation that causes one member of a repetitive series to assume the identity of another member , for example, the transformation of leaves into scales. - plant_trait_ontology - TO:0002612 - vegetative homeotic development trait - TO:0002612 - - - - - A developmental trait resulting development of increased, decreased or new vegetative organs and organ parts due to a mutation that causes one member of a repetitive series to assume the identity of another member , for example, the transformation of leaves into scales. - Gramene:pankaj_jaiswal - - - - - - - - - - A developmental trait resulting development of increased, decreased or new reproductive organs and organ parts due to a mutation that causes one member of a repetitive series to assume the identity of another member , for example, the transformation of sepals into petals. - plant_trait_ontology - TO:0002613 - reproductive homeotic development trait - TO:0002613 - - - - - A developmental trait resulting development of increased, decreased or new reproductive organs and organ parts due to a mutation that causes one member of a repetitive series to assume the identity of another member , for example, the transformation of sepals into petals. - Gramene:pankaj_jaiswal - - - - - - - - - - A floral organ morphology trait (TO:0000862) which is the length of a floral organ (PO:0025395). - PATO:0000122 - plant_trait_ontology - TO:0002614 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - floral organ length - TO:0002614 - - - - - A floral organ morphology trait (TO:0000862) which is the length of a floral organ (PO:0025395). - Gramene:pankaj_jaiswal - PO:0025395 - TO:moorel - - - - - - - - - - A floral organ morphology trait (TO:0000862) which is the width of a floral organ (PO:0025395). - PATO:0000921 - plant_trait_ontology - TO:0002615 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - floral organ width - TO:0002615 - - - - - A floral organ morphology trait (TO:0000862) which is the width of a floral organ (PO:0025395). - Gramene:pankaj_jaiswal - PO:0025395 - TO:moorel - - - - - - - - - - A plant phenological trait (TO:0000933) which is a quality of the timing of anthesis (flowering stage; PO:0007616). - TO_GIT:267 - plant_trait_ontology - anthesis timing - time of flowering - TO:0002616 - Often influenced by the environment that includes, day light, temperature and geographic location. - flowering time trait - TO:0002616 - - - - - A plant phenological trait (TO:0000933) which is a quality of the timing of anthesis (flowering stage; PO:0007616). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A fruit morphology trait (TO:0002617) which is the color of a fruit (PO:0009001). - PATO:0000014 - plant_trait_ontology - TO:0002617 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - fruit color - TO:0002617 - - - - - A fruit morphology trait (TO:0002617) which is the color of a fruit (PO:0009001). - Gramene:pankaj_jaiswal - PO:0009001 - TO:moorel - - - - - - - - - - - - - - - - - - An endocarp morphology trait (TO:0000946) which is a the color of an endocarp (PO:0009084). - PATO:0000014 - TO_GIT:293 - plant_trait_ontology - TO:0002618 - endocarp color - TO:0002618 - - - - - An endocarp morphology trait (TO:0000946) which is a the color of an endocarp (PO:0009084). - TO:austin_meier - - - - - - - - - - - - - - - - - - A mesocarp morphology trait (TO:0000948) which is the color of a mesocarp (PO:0009087). - PATO:0000014 - TO_GIT:294 - plant_trait_ontology - TO:0002619 - mesocarp color - TO:0002619 - - - - - A mesocarp morphology trait (TO:0000948) which is the color of a mesocarp (PO:0009087). - TO:austin_meier - TO:cooperl - - - - - - - - - - - - - - - - - - An exocarp morphology trait (TO:0000906) which is the color of an exocarp (PO:0009085). - PATO:0000014 - TO_GIT:295 - epicarp color - plant_trait_ontology - TO:0002620 - exocarp color - TO:0002620 - - - - - An exocarp morphology trait (TO:0000906) which is the color of an exocarp (PO:0009085). - TO:austin_meier - TO:cooperl - - - - - - - - - - - - A fruit color trait (TO:0002617) which is the color of a fruit columella (PO:0004540). - PATO:0000014 - plant_trait_ontology - TO:0002621 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - fruit columella color - TO:0002621 - - - - - A fruit color trait (TO:0002617) which is the color of a fruit columella (PO:0004540). - PO:0004540 - TO:moorel - - - - - - - - - - The traits observed for the locular tissue present around the seeds as found in Solanaceae. - plant_trait_ontology - TO:0002622 - The values observed in tomato and pepper fruits may be defined differently. - locular tissue trait - TO:0002622 - - - - - The traits observed for the locular tissue present around the seeds as found in Solanaceae. - SGN:nm - - - - - - - - - - - - - - A pericarp morphology trait (TO:0000945) that is the texture of the pericarp (PO:0009084). - PATO:0000150 - TO_GIT:292 - plant_trait_ontology - TO:0002623 - pericarp texture - TO:0002623 - - - - - A pericarp morphology trait (TO:0000945) that is the texture of the pericarp (PO:0009084). - TO:cooperl - - - - - - - - - - An exocarp morphology trait (TO:0000906) that is the texture of the exocarp (PO:0009085). - PATO:0000150 - TO_GIT:295 - plant_trait_ontology - TO:0002624 - exocarp texture - TO:0002624 - - - - - An exocarp morphology trait (TO:0000906) that is the texture of the exocarp (PO:0009085). - TO:austin_meier - TO:cooperl - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the size of a fruit (PO:0009001). - PATO:0000117 - kernel size - pod size - plant_trait_ontology - FRSZ - TO:0002625 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - fruit size - TO:0002625 - - - - - A fruit morphology trait (TO:0002629) which is the size of a fruit (PO:0009001). - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the length of a fruit (PO:0009001). - PATO:0000122 - GRLG - grain length - pod length - plant_trait_ontology - TO:0002626 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - fruit length - TO:0002626 - - - - - A fruit morphology trait (TO:0002629) which is the length of a fruit (PO:0009001). - Gramene:pankaj_jaiswal - PO:0009001 - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the width of a fruit (PO:0009001). - PATO:0000921 - kernel width - plant_trait_ontology - FRWD - kernel plumpness - percentage of plump kernels - plump grain - TO:0002627 - Refer to width PATO:0000921: A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - fruit width - TO:0002627 - - - - - A fruit morphology trait (TO:0002629) which is the width of a fruit (PO:0009001). - Gramene:pankaj_jaiswal - PO:0009001 - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the shape of a fruit (PO:0009001). - PATO:0000052 - pod shape - plant_trait_ontology - TO:0002628 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - fruit shape - TO:0002628 - - - - - A fruit morphology trait (TO:0002629) which is the shape of a fruit (PO:0009001). - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A multi-tissue plant structure morphology trait (TO:0000836) which is a quality of a fruit (PO:0009001). - accessory fruit morphology trait - berry morphology trait - capsule morphology trait - caryopsis morphology trait - citrus fruit morphology trait - grain morphology trait - kernel morphology trait - nut morphology trait - pepo morphology trait - pod morphology trait - silique morphology trait - stone fruit morphology trait - plant_trait_ontology - fruit morphology - TO:0002629 - fruit morphology trait - TO:0002629 - - - - - A multi-tissue plant structure morphology trait (TO:0000836) which is a quality of a fruit (PO:0009001). - Gramene:pankaj_jaiswal - PO:0009001 - TO:moorel - - - - - - - - - - A fruit shape (TO:0002628) which is the shape of a fruit distal end (PO:0008001). - PATO:0000052 - plant_trait_ontology - TO:0002630 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - fruit distal end shape - TO:0002630 - - - - - A fruit shape (TO:0002628) which is the shape of a fruit distal end (PO:0008001). - Gramene:pankaj_jaiswal - PO:0008001 - TO:moorel - - - - - - - - - - A fruit shape (TO:0002628) which is the shape of the fruit proximal end (PO:0008002). - PATO:0000052 - plant_trait_ontology - TO:0002631 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - fruit proximal end shape - TO:0002631 - - - - - A fruit shape (TO:0002628) which is the shape of the fruit proximal end (PO:0008002). - Gramene:pankaj_jaiswal - PO:0008002 - TO:moorel - - - - - - - - - - - - - - A fruit morphology trait (TO:0002632) which is the size of the fruit abscission zone (PO:0006503). - PATO:0000117 - plant_trait_ontology - size stem scar size - TO:0002632 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - fruit abscission zone size - TO:0002632 - - - - - A fruit morphology trait (TO:0002632) which is the size of the fruit abscission zone (PO:0006503). - Gramene:pankaj_jaiswal - PO:0006503 - TO:moorel - - - - - - - - - - - - - - A fruit growth and development trait (TO:0000929) that is the extent of fruit ripening (GO:0009835). - GO:0009835 - TO_GIT:256 - plant_trait_ontology - fruit ripening - TO:0002633 - Fruit ripening (GO:0009835) is an aging process that has as participant a fruit. Ripening causes changes in one or more characteristics of a fruit (color, aroma, flavor, texture, hardness, cell wall structure) and may make it more attractive to animals and aid in seed dispersal. - fruit ripening trait - TO:0002633 - - - - - A fruit growth and development trait (TO:0000929) that is the extent of fruit ripening (GO:0009835). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - - - In addition to the fruit color, firmness is the best measurement of ripeness. It is assayed as the force necessary to break the flesh tissues and depends on the different growth stages during the ripening process. - plant_trait_ontology - TO:0002634 - fruit firmness - TO:0002634 - - - - - In addition to the fruit color, firmness is the best measurement of ripeness. It is assayed as the force necessary to break the flesh tissues and depends on the different growth stages during the ripening process. - BR:pj - - - - - - - - - - A phyllome margin morphology trait (TO:0000834) which is a quality of a leaf margin (PO:0020128). - jaiswalp - TO_GIT:142 - plant_trait_ontology - leaf margin curvature - TO:0002635 - Often associated with leaf margin curvature. - leaf margin morphology trait - TO:0002635 - - - - - A phyllome margin morphology trait (TO:0000834) which is a quality of a leaf margin (PO:0020128). - Gramene:pankaj_jaiswal - PO:0020128 - - - - - - - - - - - - An assay to detrmine the variation the number of leaves. - plant_trait_ontology - TO:0002636 - leaflet number - TO:0002636 - - - - - An assay to detrmine the variation the number of leaves. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the size of a leaf (PO:0025034). - PATO:0000117 - plant_trait_ontology - TO:0002637 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. If you are annotating to this term, please add an additional annotation to vascular leaf morphology (TO:0000419) or non-vascular leaf morphology trait (TO:0000925), depending on the species. - leaf size - TO:0002637 - - - - - A leaf morphology trait (TO:0000748) which is the size of a leaf (PO:0025034). - Gramene:pankaj_jaiswal - PO:0025034 - TO:cooperl - - - - - - - - - - - - An assay to associate observing effects on the development of shoot meristem. - plant_trait_ontology - shoot meristem abortion - TO:0002638 - shoot meristem development - TO:0002638 - - - - - An assay to associate observing effects on the development of shoot meristem. - Gramene:pankaj_jaiswal - - - - - - - - - - plant_trait_ontology - TO:0002639 - shoot branching - TO:0002639 - - - - - - - - - - plant_trait_ontology - TO:0002640 - fruit set trait - TO:0002640 - - - - - - - - - - The percentage of highly indigestible or slowly digestible fiber in a feed or forage. Acid detergent fiber contains cellulose as well as silica and lignin which are associated with low digestibility. - plant_trait_ontology - ACIDDETFIBR - ADF - TO:0002641 - The method typically uses acidified quaternary detergent solution to dissolve cell solubles, hemicellulose and soluble minerals leaving a residue of cellulose, lignin, and heat damaged protein and a portion of cell wall protein and minerals (ash). Acid detergent fiber is determined gravimetrically as the residue remaining after extraction. The lower the acid detergent fiber, the more digestible the feed is and the higher the energy value of the feed. - acid detergent fiber - TO:0002641 - - - - - The percentage of highly indigestible or slowly digestible fiber in a feed or forage. Acid detergent fiber contains cellulose as well as silica and lignin which are associated with low digestibility. - GrainGenes_trait:Acid_Detergent_Fiber - Gramene:pankaj_jaiswal - web:http://www.foragetesting.org/lab_procedure/sectionB/4/part4.1.htm - - - - - - - - - - The traits assayed for content and quality of food/forage based on pre or post digestive processes. - plant_trait_ontology - TO:0002642 - dietary fiber related trait - TO:0002642 - - - - - The traits assayed for content and quality of food/forage based on pre or post digestive processes. - Gramene:pankaj_jaiswal - - - - - - - - - - It is a measure of the C isotopic composition in plant material relative to the value of the same ratio in the air of the environment where the plant is grown. - plant_trait_ontology - CBISOTPDISC - TO:0002643 - carbon isotope discrimination - TO:0002643 - - - - - It is a measure of the C isotopic composition in plant material relative to the value of the same ratio in the air of the environment where the plant is grown. - GrainGenes_trait:Carbon_isotope_discrimination - Gramene:pankaj_jaiswal - PMID:11756262 - - - - - - - - - - Expressed as a percent, is a measure of the dry matter content of forage or feed that is retained in the animal body. - plant_trait_ontology - DMATTDIGAB - TO:0002644 - dry matter digestibility - TO:0002644 - - - - - Expressed as a percent, is a measure of the dry matter content of forage or feed that is retained in the animal body. - GrainGenes_trait:Dry_matter_digestibility - Gramene:iyt - Gramene:pankaj_jaiswal - - - - - - - - - - - - Percentage of soft malt, measured from micro malting 50g of barley. - plant_trait_ontology - MALTTENDER - TO:0002645 - malt tenderness - TO:0002645 - - - - - Percentage of soft malt, measured from micro malting 50g of barley. - GrainGenes_trait:Malt_tenderness - PMID:12677407 - - - - - - - - - - Size of flour particles determined after grinding the grains. The size depends on the length and type of grinding. - plant_trait_ontology - FLRPARTSZ - TO:0002646 - It affects the water absorption, dough handling characteristics and loaf volume while cooking. - flour particle size - TO:0002646 - - - - - Size of flour particles determined after grinding the grains. The size depends on the length and type of grinding. - GrainGenes_trait:Particle_size - Gramene:pankaj_jaiswal - - - - - - - - - - Expressed as a percent, is a measure of the starch content of forage or feed that is retained in the animal body. - plant_trait_ontology - STARCHDIG - TO:0002647 - starch digestibility - TO:0002647 - - - - - Expressed as a percent, is a measure of the starch content of forage or feed that is retained in the animal body. - GrainGenes_trait:Starch_digestibility - Gramene:pankaj_jaiswal - - - - - - - - - - A measure of the relative water absorption after soaking a known amount (weight) of seed. - plant_trait_ontology - WABSORPSD - TO:0002648 - water absorption by seed - TO:0002648 - - - - - A measure of the relative water absorption after soaking a known amount (weight) of seed. - GrainGenes_trait:Water_absorption - Gramene:pankaj_jaiswal - - - - - - - - - - A chemical stress sensitivity (TO:0000482) which is the tolerance exhibited by a plant or a group of plants (population) towards the applied pesticide. - plant_trait_ontology - TO:0002649 - pesticide sensitivity - TO:0002649 - - - - - A chemical stress sensitivity (TO:0000482) which is the tolerance exhibited by a plant or a group of plants (population) towards the applied pesticide. - POC:Cooperl - - - - - - - - - - The movement of a plant or plant part in the direction of the light. - plant_trait_ontology - TO:0002650 - phototropism - TO:0002650 - - - - - The movement of a plant or plant part in the direction of the light. - Gramene:pankaj_jaiswal - - - - - - - - - - Movement of the shoot part of a plant in the direction of the light. - coleoptile curvature - coleoptile phototropism - plant_trait_ontology - TO:0002651 - shoot phototropism - TO:0002651 - - - - - Movement of the shoot part of a plant in the direction of the light. - Gramene:pankaj_jaiswal - PMID:15598797 - - - - - - - - - - Movement of the shoot part of a plant in the direction of the light. - plant_trait_ontology - TO:0002652 - root phototropism - TO:0002652 - - - - - Movement of the shoot part of a plant in the direction of the light. - Gramene:pankaj_jaiswal - PMID:15598797 - - - - - - - - - - - - Assay for the amount of seed storage protein present in the endosperm. - plant_trait_ontology - TO:0002653 - endosperm storage protein content - TO:0002653 - - - - - Assay for the amount of seed storage protein present in the endosperm. - Gramene:pankaj_jaiswal - - - - - - - - - - Catalysis of the reaction: ATP + pyruvate + phosphate = AMP + phosphoenolpyruvate + diphosphate. - PPDK - Pyruvate phosphate dikinase - Pyruvate, phosphate phosphotransferase - plant_trait_ontology - TO:0002654 - pyruvate orthophosphate dikinase activity trait - TO:0002654 - - - - - Catalysis of the reaction: ATP + pyruvate + phosphate = AMP + phosphoenolpyruvate + diphosphate. - EC:2.7.9.1 - GO:GO:0050242 - Gramene:pankaj_jaiswal - - - - - - - - - - - - Assay to determine the size of the starch grain size. - plant_trait_ontology - TO:0002655 - starch grain size - TO:0002655 - - - - - Assay to determine the size of the starch grain size. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Assay to determine the shape of the starch grain. - plant_trait_ontology - TO:0002656 - starch grain shape - TO:0002656 - - - - - Assay to determine the shape of the starch grain. - Gramene:pankaj_jaiswal - - - - - - - - - - A chemical stress sensitivity (TO:0000482) which is the production of reactive oxygen and the plants ability to readily detoxify the reactive intermediates. - plant_trait_ontology - TO:0002657 - oxidative stress - TO:0002657 - - - - - A chemical stress sensitivity (TO:0000482) which is the production of reactive oxygen and the plants ability to readily detoxify the reactive intermediates. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - An assay to determine if the starch grains are formed in the plant or plant part. Often associated with the starch biosynthesis and branching of the starch. - plant_trait_ontology - TO:0002658 - starch grain synthesis - TO:0002658 - - - - - An assay to determine if the starch grains are formed in the plant or plant part. Often associated with the starch biosynthesis and branching of the starch. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - - - A pistil morphology trait (TO:0000223) which is the number of pistils in the gynoecium (PO:0009062). - plant_trait_ontology - TO:0002659 - pistil number - TO:0002659 - - - - - A pistil morphology trait (TO:0000223) which is the number of pistils in the gynoecium (PO:0009062). - Gramene:pankaj_jaiswal - PO:0009062 - TO:moorel - - - - - - - - - - Measures the cytokinin content in a plant or plant part. - plant_trait_ontology - TO:0002660 - cytokinin content - TO:0002660 - - - - - Measures the cytokinin content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - This trait can be derived based on the parameters like, degree of grain filling, grain hardness, hull color, grain moisture, etc. It can be determined for (a)synchronously with any of these parameters. - plant_trait_ontology - SDMT - asynchronous seed maturation - nonsynchronous seed maturation - synchronous seed maturation - TO:0002661 - seed maturation - TO:0002661 - - - - - This trait can be derived based on the parameters like, degree of grain filling, grain hardness, hull color, grain moisture, etc. It can be determined for (a)synchronously with any of these parameters. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf rolling trait (TO:0000085) which is the tolerance for leaf rolling or wilting observed in response to stresses like drought, water and temperature. It precedes leaf drying stage. - Cold-induced wilting tolerance - LFRLTL - wilting tolerance - plant_trait_ontology - TO:0002662 - leaf rolling tolerance - TO:0002662 - - - - - A leaf rolling trait (TO:0000085) which is the tolerance for leaf rolling or wilting observed in response to stresses like drought, water and temperature. It precedes leaf drying stage. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Tolerance for leaf necrosis or scorching observed in response to stresses like drought, insecticides and cold temperature as evidenced by less number or chlorotic and/or necrotic tissue. - plant_trait_ontology - Cold-induced necrosis tolerance - LFNECTL - necrosis tolerance - TO:0002663 - leaf necrosis tolerance - TO:0002663 - - - - - Tolerance for leaf necrosis or scorching observed in response to stresses like drought, insecticides and cold temperature as evidenced by less number or chlorotic and/or necrotic tissue. - Gramene:pankaj_jaiswal - - - - - - - - - - Tolerance for leaf color yellowing observed in response to stresses like drought, water and temperature. It may precedes leaf drying stage. - Cold-induced yellowing tolerance - plant_trait_ontology - LFYTL - TO:0002664 - leaf yellowing tolerance - TO:0002664 - - - - - Tolerance for leaf color yellowing observed in response to stresses like drought, water and temperature. It may precedes leaf drying stage. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Average maximum length of the root hair present in the root of a plant in a study. - plant_trait_ontology - RTHLG - RTHRLG - TO:0002665 - root hair length - TO:0002665 - - - - - Average maximum length of the root hair present in the root of a plant in a study. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of phosphorus in the seed. - plant_trait_ontology - SDPHOCN - TO:0002666 - seed phosphorus content - TO:0002666 - - - - - Amount of phosphorus in the seed. - Gramene:pankaj_jaiswal - - - - - - - - - - Measures the abscisic acid content in a plant or plant part. - CHEBI:62431 - plant_trait_ontology - ABA content - ABACN - TO:0002667 - abscisic acid content - TO:0002667 - - - - - Measures the abscisic acid content in a plant or plant part. - CHEBI:62431 - - - - - - - - - - Measures the jasmonic acid content in a plant or plant part. - plant_trait_ontology - JA content - jasmonate content - TO:0002668 - jasmonic acid content - TO:0002668 - - - - - Measures the jasmonic acid content in a plant or plant part. - Gramene:pankaj_jaiswal - PMID:17031029 - - - - - - - - - - Measures the diterpenoid phytoalexin content in a plant or plant part. - plant_trait_ontology - TO:0002669 - Diterpenoid phytoalexins are polycyclic diterpenes involved in pathogen response. - diterpenoid phytoalexin content - TO:0002669 - - - - - Measures the diterpenoid phytoalexin content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Measures the momilactone A content in a plant or plant part. - plant_trait_ontology - phytoalexin momilactone A content - TO:0002670 - Momilactone A is a instance of diterpenoid phytoalexin. - momilactone A content - TO:0002670 - - - - - Measures the momilactone A content in a plant or plant part. - PMID:16569039 - - - - - - - - - - Measures the momilactone A content in a plant or plant part. - plant_trait_ontology - phytoalexin momilactone B content - TO:0002671 - Momilactone B is a instance of diterpenoid phytoalexin. - momilactone B content - TO:0002671 - - - - - Measures the momilactone A content in a plant or plant part. - PMID:16569039 - - - - - - - - - - A growth hormone content (TO:0000476) which is the amount of auxin (CHEBI:22676) in a plant structure (PO:0009011). - CHEBI:22676 - plant_trait_ontology - AUXCN - TO:0002672 - The most important auxin produced by plants is indole-3-acetic acid (IAA). - auxin content - TO:0002672 - - - - - A growth hormone content (TO:0000476) which is the amount of auxin (CHEBI:22676) in a plant structure (PO:0009011). - Gramene:pankaj_jaiswal - PMID:16908506 - - - - - - - - - - The amino acid content in a plant or plant part. - plant_trait_ontology - TO:0002673 - amino acid content - TO:0002673 - - - - - The amino acid content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Amino acid tryptophan content in a plant or plant part. - plant_trait_ontology - TO:0002674 - tryptophan content - TO:0002674 - - - - - Amino acid tryptophan content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Measures the gibberellic acid content in a plant or plant part. - plant_trait_ontology - GA content - GACN - gibberellin content - TO:0002675 - gibberellic acid content - TO:0002675 - - - - - Measures the gibberellic acid content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Measures the brassinosteroid content in a plant or plant part. - plant_trait_ontology - BRCN - TO:0002676 - Brassinosteroids (BR) are a group of steroidal plant hormones. - brassinosteroid content - TO:0002676 - - - - - Measures the brassinosteroid content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Response with respect to application of Brassinosteroid. - plant_trait_ontology - BRSN - TO:0002677 - Brassinosteroids (BR) are a group of steroidal plant hormones. - brassinosteroid sensitivity - TO:0002677 - - - - - Response with respect to application of Brassinosteroid. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A panicle number (TO:0000152) trait which is the absence of panicle in the plant, either due to the abortion of the developmental process and/or due to environmental factors. - plant_trait_ontology - TO:0002678 - panicleless - TO:0002678 - - - - - A panicle number (TO:0000152) trait which is the absence of panicle in the plant, either due to the abortion of the developmental process and/or due to environmental factors. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - The absence of inflorescence in the plant, either due to the abortion of the inflorescence developmental process and/or due to environmental factors. - plant_trait_ontology - TO:0002679 - inflorescenceless - TO:0002679 - - - - - The absence of inflorescence in the plant, either due to the abortion of the inflorescence developmental process and/or due to environmental factors. - Gramene:pankaj_jaiswal - - - - - - - - - - Assay to determine the amount of albumin protein. - plant_trait_ontology - albumen content - TO:0002680 - albumin content - TO:0002680 - - - - - Assay to determine the amount of albumin protein. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to measure the extent of curling of the leaf lamina. - plant_trait_ontology - curled leaf trait - frizzled leaf trait - TO:0002681 - This is due to the changes in the leaf developmental process and is different from the leaf rolling (TO:0000085) observed due to the water deficient or dorught linke conditions. - leaf curling - TO:0002681 - - - - - An assay to measure the extent of curling of the leaf lamina. - Gramene:pankaj_jaiswal - - - - - - - - - - A plant cell morphology trait (TO:0002683) which is the shape of a plant cell (PO:0009002) type. - PATO:0000052 - plant_trait_ontology - TO:0002682 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - plant cell shape - TO:0002682 - - - - - A plant cell morphology trait (TO:0002683) which is the shape of a plant cell (PO:0009002) type. - Gramene:pankaj_jaiswal - PO:0009002 - TO:moorel - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a plant cell (PO:0009002). - TO_GIT:307 - plant_trait_ontology - TO:0002683 - plant cell morphology trait - TO:0002683 - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a plant cell (PO:0009002). - Gramene:pankaj_jaiswal - PO:0009002 - TO:moorel - - - - - - - - - - A plant cell morphology trait (TO:0002683) which is the size of a plant cell (PO:0009002) type. - PATO:0000117 - plant_trait_ontology - TO:0002684 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - plant cell size - TO:0002684 - - - - - A plant cell morphology trait (TO:0002683) which is the size of a plant cell (PO:0009002) type. - Gramene:pankaj_jaiswal - PO:0009002 - TO:moorel - - - - - - - - - - A count of number of crown roots present in the seedling. - plant_trait_ontology - TO:0002685 - crown root number - TO:0002685 - - - - - A count of number of crown roots present in the seedling. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the growth and development of the plant cell and its parts. - plant_trait_ontology - TO:0002686 - cell growth and development trait - TO:0002686 - - - - - Traits associated with observing effects on the growth and development of the plant cell and its parts. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the variation in the length of the plant cell due to cell growth and elongation. - plant_trait_ontology - cell length - TO:0002687 - cell elongation trait - TO:0002687 - - - - - An assay to determine the variation in the length of the plant cell due to cell growth and elongation. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf lamina morphology trait (TO:0000829) which is the extent of the bending that occurrs to the leaf lamina (PO:0020039) joint in degrees. - plant_trait_ontology - TO:0002688 - It may happen due to environmental stress such as upon brassinosteroid treatment. - leaf lamina joint bending - TO:0002688 - - - - - A leaf lamina morphology trait (TO:0000829) which is the extent of the bending that occurrs to the leaf lamina (PO:0020039) joint in degrees. - Gramene:pankaj_jaiswal - PMID:14615594 - PO:0020039 - TO:moorel - - - - - - - - - - A leaf sheath morphology trait (TO:0000835) which is the length of the leaf sheath (PO:0020104). - PATO:0000122 - plant_trait_ontology - LFSLG - TO:0002689 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. Usually measured in in centimeters. - leaf sheath length - TO:0002689 - - - - - A leaf sheath morphology trait (TO:0000835) which is the length of the leaf sheath (PO:0020104). - Gramene:pankaj_jaiswal - PO:0020104 - TO:moorel - - - - - - - - - - A leaf lamina morphology trait (TO:0000829) which is the length of the leaf laimina (PO:0020039). - PATO:0000122 - leaf blade length - plant_trait_ontology - LFLLG - TO:0002690 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. Usually measured in centimeters. - leaf lamina length - TO:0002690 - - - - - A leaf lamina morphology trait (TO:0000829) which is the length of the leaf laimina (PO:0020039). - Gramene:pankaj_jaiswal - PO:0020039 - TO:moorel - - - - - - - - - - A peduncle morphology trait (TO:0000776) which is the length of a peduncle (PO:0009053). - PATO:0000122 - TO_GIT:88 - neck internode length - plant_trait_ontology - TO:0002691 - Peduncle is the stalk of an inflorescence; that part of the inflorescence below the first flower or inflorescence branch and above the last foliage leaf/pair of foliage leaves. -Refers to the length ((PATO:0000122):A 1-D extent quality which is equal to the distance between two points) of a peduncle (PO:0009053). - peduncle length - TO:0002691 - - - - - A peduncle morphology trait (TO:0000776) which is the length of a peduncle (PO:0009053). - Gramene:pankaj_jaiswal - PO:0009053 - POC:cooperl - - - - - neck internode length - PMID:17303594 - - - - - - - - - - - - An assay to determine the variation in the root meristem development. - plant_trait_ontology - TO:0002692 - The variation may be due to both the genotypic and/or environmental effects. - root meristem development - TO:0002692 - - - - - An assay to determine the variation in the root meristem development. - Gramene:pankaj_jaiswal - PMID:17303594 - - - - - - - - - - An assay to determine the variation in the gravitropism under the influence of gravity or zero gravity. - plant_trait_ontology - TO:0002693 - gravity response trait - TO:0002693 - - - - - An assay to determine the variation in the gravitropism under the influence of gravity or zero gravity. - Gramene:pankaj_jaiswal - - - - - - - - - - - - An assay to determine the sensory impression of a fruit by the chemical senses of taste and smell. - TO_GIT:117 - pod flavor trait - plant_trait_ontology - TO:0002694 - fruit flavor trait - TO:0002694 - - - - - An assay to determine the sensory impression of a fruit by the chemical senses of taste and smell. - Gramene:pankaj_jaiswal - - - - - - - - - - The beta-carotene content in a plant or plant part. - beta-carotenoid content - plant_trait_ontology - TO:0002695 - The most common form of carotenoid is beta-carotene. - beta-carotene content - TO:0002695 - - - - - The beta-carotene content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - The alpha-carotene content in a plant or plant part. - alpha-carotenoid content - plant_trait_ontology - TO:0002696 - The alpha-carotene is the second most common form of carotenoid. - alpha carotene content - TO:0002696 - - - - - The alpha-carotene content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - The cyclic carotene content in a plant or plant part. - plant_trait_ontology - TO:0002697 - cyclic carotene content - TO:0002697 - - - - - The cyclic carotene content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - The acyclic carotene content in a plant or plant part. - plant_trait_ontology - TO:0002698 - acyclic carotene content - TO:0002698 - - - - - The acyclic carotene content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - The lycopene content in a plant or plant part. - plant_trait_ontology - TO:0002699 - Lycopene is the most efficient quencher of singlet oxygen free radicals. - lycopene content - TO:0002699 - - - - - The lycopene content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - The quality of producing a sharp sensation of taste or smell. - plant_trait_ontology - TO:0002700 - pungency - TO:0002700 - - - - - The quality of producing a sharp sensation of taste or smell. - Gramene:pankaj_jaiswal - - - - - - - - - - The leutein content in a plant or plant part. - plant_trait_ontology - TO:0002701 - lutein content - TO:0002701 - - - - - The leutein content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Cercospora spp. - plant_trait_ontology - TO:0002702 - cercospora leaf spot resistance - TO:0002702 - - - - - Causal agent: Cercospora spp. - Gramene:pankaj_jaiswal - - - - - - - - - - - - The resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a protist infection as compared to the susceptible and/or the reference plants of the same species. - plant_trait_ontology - TO:0002703 - protist disease resistance - TO:0002703 - - - - - The resistance exhibited by a plant or a group of plants (population) in response to the disease caused by a protist infection as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Meloidogyne incognita. Symptom: resistant to damage caused by the pathogen Meloidogyne incognita (root knot nematode). It produces characteristic galls (swellings) on roots. - plant_trait_ontology - TO:0002704 - Meloidogyne incognita resistance - TO:0002704 - - - - - Causal agent: Meloidogyne incognita. Symptom: resistant to damage caused by the pathogen Meloidogyne incognita (root knot nematode). It produces characteristic galls (swellings) on roots. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Pseudoperonospora cubensis. It causes the downy mildew disease in cucurbits. - plant_trait_ontology - TO:0002705 - cucurbit downy mildew resistance - TO:0002705 - - - - - Causal agent: Pseudoperonospora cubensis. It causes the downy mildew disease in cucurbits. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Meloidogyne javanica. Symptom: resistant to damage caused by the pathogen Meloidogyne javanica (root knot nematode). It produces characteristic galls (swellings) on roots. - plant_trait_ontology - TO:0002706 - Meloidogyne javanica resistance - TO:0002706 - - - - - Causal agent: Meloidogyne javanica. Symptom: resistant to damage caused by the pathogen Meloidogyne javanica (root knot nematode). It produces characteristic galls (swellings) on roots. - Gramene:pankaj_jaiswal - - - - - - - - - - A petiole morphology trait (TO:0000765) which is the color of the petiole (PO:0020038). - PATO:0000014 - plant_trait_ontology - TO:0002707 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - petiole color - TO:0002707 - - - - - A petiole morphology trait (TO:0000765) which is the color of the petiole (PO:0020038). - Gramene:pankaj_jaiswal - PO:0020038 - TO:moorel - - - - - - - - - - The color of the xylem tissue. - plant_trait_ontology - TO:0002708 - xylem color - TO:0002708 - - - - - The color of the xylem tissue. - Gramene:pankaj_jaiswal - - - - - - - - - - The color of the phloem tissue. - plant_trait_ontology - TO:0002709 - phloem color - TO:0002709 - - - - - The color of the phloem tissue. - Gramene:pankaj_jaiswal - - - - - - - - - - The shape of the plant root system. - plant_trait_ontology - TO:0002710 - root shape - TO:0002710 - - - - - The shape of the plant root system. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0002711 - - - - - - - - - - - - - - - - - - A whole plant growth and development trait (TO:0000947) which is the color of plant and the photosynthetic organs remain green compared to turning yellow and or brown at the time of senescing. - plant_trait_ontology - TO:0002712 - stay green trait - TO:0002712 - - - - - A whole plant growth and development trait (TO:0000947) which is the color of plant and the photosynthetic organs remain green compared to turning yellow and or brown at the time of senescing. - Gramene:pankaj_jaiswal - - - - - - - - - - A plant cell morphology trait (TO:0002683) which is a quality of a cell organelle. - organelle biogenesis trait - organelle structure trait - plant_trait_ontology - cell organelle development trait - TO:0002713 - cell organelle morphology trait - TO:0002713 - - - - - A plant cell morphology trait (TO:0002683) which is a quality of a cell organelle. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - - - A cell organelle morphology trait (TO:0002713) which is a quality of a plastid development. - plastid biogenesis trait - plastid structure trait - plant_trait_ontology - TO:0002714 - plastid development trait - TO:0002714 - - - - - A cell organelle morphology trait (TO:0002713) which is a quality of a plastid development. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Trait(s) associated with phenotypes observed for abnormal development of chloroplast structure and biogenesis. - chloroplast biogenesis trait - chloroplast structure trait - plant_trait_ontology - TO:0002715 - chloroplast development trait - TO:0002715 - - - - - Trait(s) associated with phenotypes observed for abnormal development of chloroplast structure and biogenesis. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf sheath morphology trait (TO: 0002717) which is the extent of pubescence (presence of hairs) on the leaf sheath auricle (PO:0020106). - plant_trait_ontology - AUPUBES - TO:0002716 - leaf sheath auricle pubescence - TO:0002716 - - - - - A leaf sheath morphology trait (TO: 0002717) which is the extent of pubescence (presence of hairs) on the leaf sheath auricle (PO:0020106). - Gramene:pankaj_jaiswal - PO:0020106 - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf sheath auricle (PO:0020106). - TO_GIT:143 - plant_trait_ontology - TO:0002717 - leaf sheath auricle morphology trait - TO:0002717 - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf sheath auricle (PO:0020106). - Gramene:pankaj_jaiswal - PO:0020106 - POC:cooperl - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which a quality of a awn (PO:0025349). - plant_trait_ontology - TO:0002718 - awn morphology trait - TO:0002718 - - - - - A cardinal organ part morphology trait (TO:0000754) which a quality of a awn (PO:0025349). - Gramene:pankaj_jaiswal - PO:0025349 - TO:moorel - - - - - - - - - - An awn morphology trait (TO:0002718) which is the thickness of the awn (PO:0025349) measured at a given distance from the apiculus. - PATO:0000915 - plant_trait_ontology - AWNTH - TO:0002719 - Refer to thickness (PATO:0000915): A 1-D extent quality which is equal to the dimension through an object as opposed to its length or width. - awn thickness - TO:0002719 - - - - - An awn morphology trait (TO:0002718) which is the thickness of the awn (PO:0025349) measured at a given distance from the apiculus. - Gramene:pankaj_jaiswal - PO:0025349 - TO:moorel - - - - - - - - - - A leaf lamina morphology trait (TO:0000829) which is the width of the leaf lamina (PO:0020039). - PATO:0000921 - LFLWD - plant_trait_ontology - leaf blade width - TO:0002720 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. in centimeters - leaf lamina width - TO:0002720 - - - - - A leaf lamina morphology trait (TO:0000829) which is the width of the leaf lamina (PO:0020039). - Gramene:pankaj_jaiswal - PO:0020039 - TO:moorel - - - - - - - - - - A leaf sheath morphology trait (TO:0000835) which is the width of the leaf sheath (PO:0020104). - PATO:0000921 - plant_trait_ontology - TO:0002721 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - leaf sheath width - TO:0002721 - - - - - A leaf sheath morphology trait (TO:0000835) which is the width of the leaf sheath (PO:0020104). - Gramene:pankaj_jaiswal - PO:0020104 - TO:cooperl - TO:moorel - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the extent of pubescence (presence of hairs) on the leaf (PO:0025034). - jaiswalp - PATO:0001320 - plant_trait_ontology - TO:0002722 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. - leaf pubescence - TO:0002722 - - - - - A leaf morphology trait (TO:0000748) which is the extent of pubescence (presence of hairs) on the leaf (PO:0025034). - Gramene:pankaj_jaiswal - PO:0025034 - - - - - - - - - - A leaf lamina margin morphology trait (TO:0000830) which is the extent of pubescence (presence of hairs) on a leaf lamina margin (PO:0025009). - PATO:0001320 - plant_trait_ontology - LFLMPUBES - leaf blade margin pubescence - TO:0002723 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. - leaf lamina margin pubescence - TO:0002723 - - - - - A leaf lamina margin morphology trait (TO:0000830) which is the extent of pubescence (presence of hairs) on a leaf lamina margin (PO:0025009). - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf sheath morphology trait (TO:0000835) which is the color of the leaf sheath (PO:0020104). - PATO:0000014 - plant_trait_ontology - LFSCL - TO:0002724 - Refer to color (PATO:0000014): A composite chromatic quality composed of hue, saturation and intensity parts. - leaf sheath color - TO:0002724 - - - - - A leaf sheath morphology trait (TO:0000835) which is the color of the leaf sheath (PO:0020104). - Gramene:pankaj_jaiswal - PO:0020104 - TO:moorel - - - - - - - - - - Determined for type of life cycle being annual, biannual, perennial etc. - plant_trait_ontology - LIFECYCHAB - TO:0002725 - life cycle habit - TO:0002725 - - - - - Determined for type of life cycle being annual, biannual, perennial etc. - Gramene:pankaj_jaiswal - - - - - - - - - - A lemma morphology trait (TO:1000023) which is the shape of a sterile lemma (PO:0009040). - TO_GIT:390 - plant_trait_ontology - STLEMSHP - TO:0002726 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - sterile lemma shape - TO:0002726 - - - - - A lemma morphology trait (TO:1000023) which is the shape of a sterile lemma (PO:0009040). - Gramene:pankaj_jaiswal - PATO:0000052 - PO:0009040 - TO:cooperl - TO:moorel - - - - - - - - - - A lemma morphology trait (TO:0000079) which is the width of a sterile lemma (PO:0009040). - TO_GIT:390 - plant_trait_ontology - STLEMWD - TO:0002727 - Measured in the widest portion of the sterile lemma. - -Refer to width PATO:0000921: A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - sterile lemma width - TO:0002727 - - - - - - true - - - - - A lemma morphology trait (TO:0000079) which is the width of a sterile lemma (PO:0009040). - Gramene:pankaj_jaiswal - PATO:0000921 - PO:0009040 - TO:cooperl - - - - - - - - - - A quality trait (TO:0000597) which is the commercial and /or economical value of a fruit (PO:0009001) , or its overall improvement. - TO_GIT:263 - plant_trait_ontology - TO:0002728 - fruit quality trait - TO:0002728 - - - - - A quality trait (TO:0000597) which is the commercial and /or economical value of a fruit (PO:0009001) , or its overall improvement. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - Traits associated with the fruit abscission zone. - plant_trait_ontology - TO:0002729 - fruit senescing quality trait - TO:0002729 - - - - - Traits associated with the fruit abscission zone. - Gramene:pankaj_jaiswal - - - - - - - - - - A fruit shape (TO:0002628) which is the shape of the dehulled grain. - PATO:0000052 - plant_trait_ontology - DHULGRSHP - GRSHP - dehulled-grain shape - TO:0002730 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - grain shape - TO:0002730 - - - - - A fruit shape (TO:0002628) which is the shape of the dehulled grain. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A grain size (TO:0000397) which is the grain length and grain width on dehulled grain. - PATO:0000117 - PATO:0000122 - PATO:0000921 - plant_trait_ontology - DHULGRLGWDRO - GRLHWDRO - dehulled-grain length to width ratio - TO:0002731 - Refer to width PATO:0000921: A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. Size categories ranging from small to medium to large. - grain length to width ratio - TO:0002731 - - - - - A grain size (TO:0000397) which is the grain length and grain width on dehulled grain. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - In grasses the flag leaf angle is measured near the collar as the angle of attachment between the flag leaf blade and the main inflorescence axis in grass plants. Observed around anthesis stage. - plant_trait_ontology - FLFAGERLY - flag leaf attitude: early stage - TO:0002732 - flag leaf angle: early stage - TO:0002732 - - - - - In grasses the flag leaf angle is measured near the collar as the angle of attachment between the flag leaf blade and the main inflorescence axis in grass plants. Observed around anthesis stage. - Gramene:pankaj_jaiswal - - - - - - - - - - In grasses the flag leaf angle is measured near the collar as the angle of attachment between the flag leaf blade and the main inflorescence axis in grass plants. Observed at maturity stage. - plant_trait_ontology - FLFAGLATE - flag leaf attitude: late stage - TO:0002733 - flag leaf angle: late stage - TO:0002733 - - - - - In grasses the flag leaf angle is measured near the collar as the angle of attachment between the flag leaf blade and the main inflorescence axis in grass plants. Observed at maturity stage. - Gramene:pankaj_jaiswal - - - - - - - - - - An awn morphology trait (TO:0002718) which is the presence or absence of an awn (PO:0025349). Observation may include relative awn size. - PATO:0000458 - plant_trait_ontology - AWNPLU - TO:0002734 - Refer to presence value PATO:0000458. - awn presence - TO:0002734 - - - - - An awn morphology trait (TO:0002718) which is the presence or absence of an awn (PO:0025349). Observation may include relative awn size. - Gramene:pankaj_jaiswal - PO:0025349 - TO:moorel - - - - - - - - - - Malformed inflorescence (panicle in rice), by staying upright/straight at the time of maturity and may carry infertile seeds. - plant_trait_ontology - TO:0002735 - For rice: Straighthead is a physiological disorder that causes the entire head to be blank and remain upright at maturity in rice. Straighthead generally occurs in spots scattered throughout a field and is most easily recognized near harvest when normal plants have downturned heads (from the weight of the grain in the panicle). The disease is frequently found on sandy loam soils but seldom on clay soils. Old cotton fields with arsenic residues can have a severe incidence of straighthead. Other, as yet unknown, soil factors are also involved in causing straighthead. Often it is found in fields where excessive non-decayed vegetation has been plowed under just before planting. The disease is characterized by upright heads when the rice matures due to infertile seed. Hulls may be distorted into a crescent shape or "parrot beak". One or both hulls may be missing. Affected plants continue to grow, are a darker green, and often produce shoots from a lower portion of the plant. First year crops of rice grown on "new ground" are more likely to be affected. Some varieties are more tolerant than others. Control measures include planting resistant varieties and draining fields with a history of the disorder just prior to internode elongation. - straighthead - TO:0002735 - - - - - Malformed inflorescence (panicle in rice), by staying upright/straight at the time of maturity and may carry infertile seeds. - Gramene:pankaj_jaiswal - web:http://plantpathology.tamu.edu/Texlab/Grains/Rice/rices.html - - - - - - - - - - - - A flower morphology trait (TO:0000499) which is the number of flowers (PO:0009046). - PATO:0001555 - plant_trait_ontology - TO:0002736 - flower number trait - TO:0002736 - - - - - A flower morphology trait (TO:0000499) which is the number of flowers (PO:0009046). - Gramene:pankaj_jaiswal - PO:0009046 - TO:moorel - - - - - - - - - - Average number of flowers (florets) per branch in a grass inflorescence. - plant_trait_ontology - FLNBPBR - TO:0002737 - floret number per branch - TO:0002737 - - - - - Average number of flowers (florets) per branch in a grass inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Average number of flowers (florets) in a grass inflorescence. - florets per panicle - plant_trait_ontology - FLNBPINFLO - FLNBPPN - floret number per panicle - florets per inflorescence - TO:0002738 - floret number per inflorescence - TO:0002738 - - - - - Average number of flowers (florets) in a grass inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - Average whole fruit surface area. - plant_trait_ontology - FRUTSURFAR - TO:0002739 - fruit surface area - TO:0002739 - - - - - Average whole fruit surface area. - Gramene:pankaj_jaiswal - - - - - - - - - - true - TO:0002740 - - - - - - - - - - The average surface area of the grain without hull (dehulled) in a grass fruit caryopsis. - TO:0002740 - plant_trait_ontology - DHULGRSURFAR - GRSURFAR - dehulled-grain surface area - hulled-grain surface area - kernel surface area - TO:0002741 - grain surface area - TO:0002741 - - - - - The average surface area of the grain without hull (dehulled) in a grass fruit caryopsis. - Gramene:pankaj_jaiswal - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the volume of the fruit (PO:0002629). - PATO:0000918 - plant_trait_ontology - TO:0002742 - Refer to volume (PATO:0000918): A 3-D extent quality inhering in a bearer by virtue of the bearer's amount of 3-dimensional space it occupies. - fruit volume - TO:0002742 - - - - - A fruit morphology trait (TO:0002629) which is the volume of the fruit (PO:0002629). - Gramene:pankaj_jaiswal - PO:0002629 - - - - - - - - - - A fruit volume (TO:0002742) of a grain without hull (dehulled). - PATO:0000918 - dehulled-grain volume - plant_trait_ontology - DHULGRVOL - GRVOL - TO:0002743 - Refer to volume (PATO:0000918): A 3-D extent quality inhering in a bearer by virtue of the bearer's amount of 3-dimensional space it occupies. - grain volume - TO:0002743 - - - - - A fruit volume (TO:0002742) of a grain without hull (dehulled). - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A fruit length (TO:0002626) which is the average length of the curved surface of fruit (PO:0009001). - PATO:0000122 - plant_trait_ontology - TO:0002744 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - fruit curved length - TO:0002744 - - - - - A fruit length (TO:0002626) which is the average length of the curved surface of fruit (PO:0009001). - Gramene:pankaj_jaiswal - PO:0009001 - TO:moorel - - - - - - - - - - A grain length (TO:0000734) which is the curved surface of grain without hull (dehulled). - PATO:0000122 - curved length of dehulled-grain - dehulled-grain curved length - plant_trait_ontology - DHULGRCURVLG - TO:0002745 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - grain curved length - TO:0002745 - - - - - A grain length (TO:0000734) which is the curved surface of grain without hull (dehulled). - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - A fruit morphology trait (TO:0002629) that is the weight of a fruit (PO:0009001). - TO_GIT:242 - plant_trait_ontology - TO:0002746 - Fruit weight is the weight of one or more fruits at a specified level of maturity and, for grain, moisture level. In maize it is often reported as 100 or 1000 kernel weight, in grams and at 15% moisture content. - fruit weight - TO:0002746 - - - - - A fruit morphology trait (TO:0002629) that is the weight of a fruit (PO:0009001). - Gramene:pankaj_jaiswal - TO:Cooperl - - - - - - - - - - Weight of 10-dehulled grain having pericarp (seed coat). - TENDHULGRWT - plant_trait_ontology - 10-grain weight - TENGRWT - ten dehulled-grain weight - ten grain weight - TO:0002747 - 10-dehulled grain weight - TO:0002747 - - - - - Weight of 10-dehulled grain having pericarp (seed coat). - Gramene:pankaj_jaiswal - - - - - - - - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a ligule (PO:0020105). - plant_trait_ontology - TO:0002748 - ligule morphology trait - TO:0002748 - - - - - A vascular leaf morphology trait (TO:0000419) which is a quality of a ligule (PO:0020105). - Gramene:pankaj_jaiswal - PO:0020105 - POC:cooperl - - - - - - - - - - A ligule morphology trait (TO:0002748) which is the extent of pubescence (presence of hairs) on the ligule (PO:0020105). - PATO:0001320 - plant_trait_ontology - LIGPUBES - TO:0002749 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. - ligule pubescence - TO:0002749 - - - - - A ligule morphology trait (TO:0002748) which is the extent of pubescence (presence of hairs) on the ligule (PO:0020105). - Gramene:pankaj_jaiswal - PO:0020105 - POC:cooperl - - - - - - - - - - A ligule morphology trait (TO:0002748) which isthe extent of pubescence (presence of hairs) on the margin of a ligule (PO:0020105). - PATO:0001320 - ligule margin hairiness - plant_trait_ontology - LIGMPUBES - TO:0002750 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. - ligule margin pubescence - TO:0002750 - - - - - A ligule morphology trait (TO:0002748) which isthe extent of pubescence (presence of hairs) on the margin of a ligule (PO:0020105). - Gramene:pankaj_jaiswal - PO:0020105 - POC:cooperl - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the arrangement of inflorescence branches (PO:0009081). - TO:0002752 - plant_trait_ontology - INFLBRARANGE - panicle branch arrangement - TO:0002751 - inflorescence branch arrangement - TO:0002751 - - - - - An inflorescence morphology trait (TO:0000373) which is the arrangement of inflorescence branches (PO:0009081). - Gramene:pankaj_jaiswal - PO:0009081 - TO:moorel - - - - - - - - - - true - TO:0002752 - - - - - - - - - - An inflorescence branch arrangement (TO:0002751) trait which is the arrangement of primary branches in an inflorescence (PO:0009049). - plant_trait_ontology - PBRARANGE - arrangement of primary branch - primary branch arrangement - TO:0002753 - arrangement of inflorescence primary branch - TO:0002753 - - - - - An inflorescence branch arrangement (TO:0002751) trait which is the arrangement of primary branches in an inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - An inflorescence morphology trait (TO:0000782) which is the texture of the inflorescence axis (PO:0020122). - PATO:0000150 - panicle axis texture - plant_trait_ontology - INFLOAXISTEX - PNAXISTEX - TO:0002754 - Refers to the texture ((PATO:0000150): A morphologic quality inhering in a bearer by virtue of the bearer's relative size, organization and distribution of its surface elements or the representation or invention of the appearance of its surface; visual and tactile surface characteristics) of an inflorescence axis (PO:0020122). - inflorescence axis texture - TO:0002754 - - - - - An inflorescence morphology trait (TO:0000782) which is the texture of the inflorescence axis (PO:0020122). - Gramene:pankaj_jaiswal - PO:0020122 - POC:cooperl - - - - - - - - - - Trait(s) associated with phenotypes observed for abnormal development of cell organelle structure and its biogenesis. - plant_trait_ontology - TO:0002755 - cell organelle development trait - TO:0002755 - - - - - Trait(s) associated with phenotypes observed for abnormal development of cell organelle structure and its biogenesis. - Gramene:pankaj_jaiswal - - - - - - - - - - Estimated by the angle of inclination of the main shoot/stem against the soil/growth medium surface. - plant_trait_ontology - CULMHAB - STEMHAB - culm habit - growth habit - stem habit - TO:0002756 - shoot habit - TO:0002756 - - - - - Estimated by the angle of inclination of the main shoot/stem against the soil/growth medium surface. - Gramene:pankaj_jaiswal - - - - - - - - - - - - A flag leaf morphology trait (TO:0000832) which is the length of the flag leaf (PO:0020103). - PATO:0000122 - FLFLG - plant_trait_ontology - TO:0002757 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - flag leaf length - TO:0002757 - - - - - A flag leaf morphology trait (TO:0000832) which is the length of the flag leaf (PO:0020103). - Gramene:pankaj_jaiswal - PO:0020103 - TO:moorel - - - - - - - - - - Actual measurements, in centimeters of the widest portion of the flag leaf lamina. - FLFLWD - flag leaf blade width - plant_trait_ontology - TO:0002758 - flag leaf lamina width - TO:0002758 - - - - - Actual measurements, in centimeters of the widest portion of the flag leaf lamina. - Gramene:pankaj_jaiswal - - - - - - - - - - A fruit number trait (TO:0000894) which is the number of grains (caryopsis fruit; PO:0030104) in an infructescence (PO:0006342). - PATO:0001555 - plant_trait_ontology - GRNB - kernel number - TO:0002759 - Refer to has number of (PATO:0001555): The number of parts of a particular type that the bearer entity has. This is a relational quality, and thus holds between two entities: the bearer of the quality, and the type of parts. - grain number - TO:0002759 - - - - - A fruit number trait (TO:0000894) which is the number of grains (caryopsis fruit; PO:0030104) in an infructescence (PO:0006342). - Gramene:pankaj_jaiswal - PO:0006342 - PO:0030104 - TO:moorel - TO:cooperl - - - - - - - - - - true - TO:0002760 - - - - - - - - - - A grain length (TO:0000734) with hull. - plant_trait_ontology - HULGRLG - hulled grain length - hulled-grain length - TO:0002761 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - length of grain with hull - TO:0002761 - - - - - A grain length (TO:0000734) with hull. - Gramene:pankaj_jaiswal - - - - - - - - - - A grain width (TO:0000975) with caryopsis hull (PO:0006000). - PATO:0000921 - plant_trait_ontology - HULGRWD - hulled grain curved width - hulled grain width - TO:0002762 - Refer to width PATO:0000921: A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - width of grain with hull - TO:0002762 - - - - - A grain width (TO:0000975) with caryopsis hull (PO:0006000). - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Average length of the curved surface of grain with hull (hulled). - PATO:0000122 - plant_trait_ontology - HULGRCURVLG - hulled grain curved length - TO:0002763 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - curved length of grain with hull - TO:0002763 - - - - - Average length of the curved surface of grain with hull (hulled). - Gramene:pankaj_jaiswal - - - - - - - - - - The average surface area of the grain with hull (hulled) in a grass fruit caryopsis. - plant_trait_ontology - HULGRSURFAR - hulled-grain surface area - TO:0002764 - surface area of grain with hull - TO:0002764 - - - - - The average surface area of the grain with hull (hulled) in a grass fruit caryopsis. - Gramene:pankaj_jaiswal - - - - - - - - - - Volume of the grain with hull (hulled). - plant_trait_ontology - HULGRVOL - hulled grain volume - TO:0002765 - volume of grain with hull - TO:0002765 - - - - - Volume of the grain with hull (hulled). - Gramene:pankaj_jaiswal - - - - - - - - - - A ligule morphology trait (TO:0002748) which is a shape of a margin of a ligule (PO:0020105). - PATO:0000052 - plant_trait_ontology - LIGMSHP - TO:0002766 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's -ratios of distances between its features (points, edges, surfaces and -also holes etc). - ligule margin shape - TO:0002766 - - - - - A ligule morphology trait (TO:0002748) which is a shape of a margin of a ligule (PO:0020105). - Gramene:pankaj_jaiswal - PO:0020105 - POC:cooperl - - - - - - - - - - plant_trait_ontology - RHZFORM - TO:0002767 - rhizome formation - TO:0002767 - - - - - - - - - - - - A spikelet morphology trait (TO:0000657) which is the length of a spikelet (PO:0009051). - PATO:0000122 - plant_trait_ontology - SPKLG - TO:0002768 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - spikelet length - TO:0002768 - - - - - A spikelet morphology trait (TO:0000657) which is the length of a spikelet (PO:0009051). - Gramene:pankaj_jaiswal - PO:0009051 - TO:moorel - - - - - - - - - - The linoleic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - CAS:60-33-3 - CHEBI:17351 - (9Z,12Z)-Octadecadienoic acid content - (Z,Z)-9,12-octadecadienoic acid content - 9-cis,12-cis-Octadecadienoic acid content - 9Z,12Z-octadecadienoic acid content - cis,cis-linoleic acid content - linoleic oil content - high linoleic oil content - low linoleic oil content - plant_trait_ontology - TO:0005001 - According to the Codex Alimentarium, the FAO international standards for food product specifications, the normal values may differ depending on the source plant. For example, in soybean oil the normal values for linoleic acid content are 48% - 59%. - linoleic acid content - TO:0005001 - - - - - The linoleic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - Gramene:pankaj_jaiswal - - - - - - - - - - The oleic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - CAS:112-80-1 - CHEBI:16196 - (9Z)-Octadecenoic acid content - (9Z)-octadec-9-enoic acid content - (Z)-Octadec-9-enoic acid content - cis-9-octadecenoic acid content - high oleic oil content - mid oleic oil content - plant_trait_ontology - oleic oil content - TO:0005002 - According to the Codex Alimentarium, the FAO international standards for food product specifications, the normal values may differ depending on the source plant. For example, for soybean oil the normal values for oleic acid content are 17% - 30%. - oleic acid content - TO:0005002 - - - - - The oleic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - Gramene:pankaj_jaiswal - - - - - - - - - - The stearic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - CAS:57-11-4 - CHEBI:28842 - n-octadecanoic acid content - octadecanoic acid content - octadecoic acid content - high stearic oil content - low stearic oil content - plant_trait_ontology - stearic oil content - TO:0005003 - According to the Codex Alimentarium, the FAO international standards for food product specifications, the normal values may differ depending on the source plant. e.g. for soybean oil the normal values for stearic acid content are 2% - 5.4%. - stearic acid content - TO:0005003 - - - - - The stearic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - Gramene:pankaj_jaiswal - - - - - - - - - - The omega-3 fatty acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - CHEBI:25681 - plant_trait_ontology - TO:0005004 - Omega-3 fatty acid (CHEBI:25681) is a polyunsaturated fatty acid (CHEBI:26208) . There are four subtypes of omega-3 fatty acids, namely, alpha-licanic acid (CHEBI:28771), all-cis-docosa-4,7,10,13,16,19-hexaenoic acid (CHEBI:28125), all-cis-icosa-5,8,11,14,17-pentaenoic acid and alpha-linolenic acid (CHEBI:27432). - omega-3 fatty acid content - TO:0005004 - - - - - The omega-3 fatty acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - Gramene:pankaj_jaiswal - - - - - - - - - - The alpha-linolenic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - CAS:463-40-1 - CHEBI:27432 - (9,12,15)-linolenic acid content - (9Z,12Z,15Z)-Octadecatrienoic acid content - (Z,Z,Z)-9,12,15-octadecatrienoic acid content - 9,12,15-Octadecatrienoic acid content - 9-cis,12-cis,15-cis-octadecatrienoic acid content - all-cis-9,12,15-octadecatrienoic acid content - cis,cis,cis-9,12,15-octadecatrienoic acid content - plant_trait_ontology - TO:0005005 - According to the Codex Alimentarium, the FAO international standards for food product specifications, the normal values may differ depending on the source plant. For example, in soybean oil the normal values for alpha-linolenic acid content are 4.5% - 11%. - alpha-linolenic acid content - TO:0005005 - - - - - The alpha-linolenic acid content in the essential oils present in or extracted from a plant or the plant part such as seed. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the sensitivity (tolerance or susceptibility) exhibited by a plant or a group of plants (population) towards the applied herbicide glyphosate. - glyphosate susceptibility - glyphosate tolerance - plant_trait_ontology - TO:0005006 - It is expected that the herbicide application must not affect the agronomic yield, if any. - glyphosate sensitivity - TO:0005006 - - - - - An assay to determine the sensitivity (tolerance or susceptibility) exhibited by a plant or a group of plants (population) towards the applied herbicide glyphosate. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the sensitivity (tolerance or susceptibility) exhibited by a plant or a group of plants (population) towards the applied herbicide glufosinate. - glufosinate susceptibility - glufosinate tolerance - plant_trait_ontology - TO:0005007 - It is expected that the herbicide application must not affect the agronomic yield, if any. - glufosinate sensitivity - TO:0005007 - - - - - An assay to determine the sensitivity (tolerance or susceptibility) exhibited by a plant or a group of plants (population) towards the applied herbicide glufosinate. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the sensitivity (tolerance or susceptibility) exhibited by a plant or a group of plants (population) towards the applied herbicide class of acetolactate synthase inhibitor. - ALS inhibitor susceptibility - ALS inhibitor tolerance - acetolactate synthase inhibitor susceptibility - acetolactate synthase inhibitor tolerance - plant_trait_ontology - TO:0005008 - It is expected that the herbicide application must not affect the agronomic yield, if any. - acetolactate synthase inhibitor sensitivity - TO:0005008 - - - - - An assay to determine the sensitivity (tolerance or susceptibility) exhibited by a plant or a group of plants (population) towards the applied herbicide class of acetolactate synthase inhibitor. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Ostrinia nubialis. - ECB resistance - plant_trait_ontology - TO:0005009 - European corn borer resistance - TO:0005009 - - - - - Causal agent: Ostrinia nubialis. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Diabrotica spp. - plant_trait_ontology - TO:0005010 - rootworm resistance - TO:0005010 - - - - - Causal agent: Diabrotica spp. - Gramene:pankaj_jaiswal - - - - - - - - - - Tolerance to the high salt content in the growth medium. - SALTTL - plant_trait_ontology - TO:0006001 - salt tolerance - TO:0006001 - - - - - Tolerance to the high salt content in the growth medium. - Gramene:pankaj_jaiswal - - - - - - - - - - Amino acid proline content in a plant or plant part. - plant_trait_ontology - TO:0006002 - proline content - TO:0006002 - - - - - Amino acid proline content in a plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of oligosaccharides present in the plant or its parts. - plant_trait_ontology - TO:0006003 - Oligosaccharide is a carbohydrate polymer that on hydrolysis yields a small number of monosaccharide molecules. - oligosaccharide content - TO:0006003 - - - - - Amount of oligosaccharides present in the plant or its parts. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of raffinose present in the plant or plant part. - plant_trait_ontology - TO:0006004 - raffinose content - TO:0006004 - - - - - Amount of raffinose present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Amount of fructose present in the plant or plant part. - plant_trait_ontology - TO:0006005 - fructose content - TO:0006005 - - - - - Amount of fructose present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of monosaccharide present in the plant or plant part. - plant_trait_ontology - TO:0006006 - monosaccharide content - TO:0006006 - - - - - Amount of monosaccharide present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - Amount of polysaccharide present in the plant or plant part. - plant_trait_ontology - TO:0006007 - polysaccharide content - TO:0006007 - - - - - Amount of polysaccharide present in the plant or plant part. - Gramene:pankaj_jaiswal - - - - - - - - - - A carbohydrate content (TO:0000291) which is the amount of carbohydrate derivatives (CHEBI:63299) in a plant structure (PO:0009011). - CHEBI:63299 - plant_trait_ontology - TO:0006008 - carbohydrate derivative content - TO:0006008 - - - - - - - - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a lodicule (PO:0009036) and its parts. - TO_GIT:105 - plant_trait_ontology - TO:0006009 - lodicule morphology trait - TO:0006009 - - - - - A plant organ morphology trait (TO:0000736) which is a quality of a lodicule (PO:0009036) and its parts. - Gramene:pankaj_jaiswal - PO:0009036 - TO:moorel - - - - - - - - - - - - - - A lodicule morphology trait (TO:0006009) which is the average number of lodicules (PO:0009036) per grass flower (floret) in a study. - plant_trait_ontology - TO:0006010 - lodicule number - TO:0006010 - - - - - A lodicule morphology trait (TO:0006009) which is the average number of lodicules (PO:0009036) per grass flower (floret) in a study. - Gramene:pankaj_jaiswal - PO:0009036 - TO:moorel - - - - - - - - - - A lodicule morphology trait (TO:0006009) which is the shape of a lodicule (PO:0009036). - PATO:0000052 - plant_trait_ontology - TO:0006011 - Refer to shape PATO:0000052: A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - lodicule shape - TO:0006011 - - - - - A lodicule morphology trait (TO:0006009) which is the shape of a lodicule (PO:0009036). - Gramene:pankaj_jaiswal - PO:0009036 - TO:moorel - - - - - - - - - - - - A megasporophyll morphology trait (TO:0000867) which is a quality of a carpel (PO:0009030). - plant_trait_ontology - TO:0006012 - carpel morphology trait - TO:0006012 - - - - - A megasporophyll morphology trait (TO:0000867) which is a quality of a carpel (PO:0009030). - Gramene:pankaj_jaiswal - PO:0009030 - TO:moorel - - - - - - - - - - A carpel morphology trait (TO:0006012) which is the number of carpels (PO:0009030) in the gynoecium (PO:0009062). - plant_trait_ontology - TO:0006013 - carpel number - TO:0006013 - - - - - A carpel morphology trait (TO:0006012) which is the number of carpels (PO:0009030) in the gynoecium (PO:0009062). - Gramene:pankaj_jaiswal - PO:0009030 - PO:0009062 - TO:moorel - - - - - - - - - - A leaf morphology trait (TO:0000748) which is the arrangement of the leaves on the shoot of a plant. - leaf arrangement - plant_trait_ontology - TO:0006014 - phyllotaxy - TO:0006014 - - - - - A leaf morphology trait (TO:0000748) which is the arrangement of the leaves on the shoot of a plant. - Gramene:pankaj_jaiswal - POC:cooperl - - - - - - - - - - Traits associated with observing effects on the development of a given tissue type. - plant_trait_ontology - TO:0006015 - plant tissue development trait - TO:0006015 - - - - - Traits associated with observing effects on the development of a given tissue type. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to determine the variation in the meristematic tissue development. - plant_trait_ontology - TO:0006016 - meristem tissue development trait - TO:0006016 - - - - - An assay to determine the variation in the meristematic tissue development. - Gramene:pankaj_jaiswal - - - - - - - - - - Trait to determine the variation or effect on the establishment of meristem identity or determinacy. - meristem determinacy - plant_trait_ontology - TO:0006017 - meristem identity - TO:0006017 - - - - - Trait to determine the variation or effect on the establishment of meristem identity or determinacy. - Gramene:pankaj_jaiswal - - - - - - - - - - Trait associated with observing effects on the establishment of organ identity. - plant_trait_ontology - TO:0006018 - Identity is considered to be the aggregate of characteristics by which a structure is recognized. - organ identity - TO:0006018 - - - - - Trait associated with observing effects on the establishment of organ identity. - Gramene:pankaj_jaiswal - - - - - - - - - - Trait associated with observing effects on the establishment of floral organ identity. - plant_trait_ontology - TO:0006019 - floral organ identity - TO:0006019 - - - - - Trait associated with observing effects on the establishment of floral organ identity. - Gramene:pankaj_jaiswal - - - - - - - - - - An assay to associate observing effects on the development of shoot apical (SAM) meristem. - plant_trait_ontology - TO:0006020 - shoot apical meristem development - TO:0006020 - - - - - An assay to associate observing effects on the development of shoot apical (SAM) meristem. - Gramene:pankaj_jaiswal - - - - - - - - - - Trait associated with the transition of vegetative growth phase to the reproductive growth phase. - plant_trait_ontology - TO:0006021 - Usually observed at the time of transition of shoot apical meristem (a vegetative meristem) to the inflorescence apical meristem (a reproductive meristem). - vegetative to reproductive phase transition trait - TO:0006021 - - - - - Trait associated with the transition of vegetative growth phase to the reproductive growth phase. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the development of the floral organ and its parts. - plant_trait_ontology - TO:0006022 - floral organ development trait - TO:0006022 - - - - - Traits associated with observing effects on the development of the floral organ and its parts. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the development of the lodicule in a grass flower (floret). - plant_trait_ontology - TO:0006023 - lodicule development trait - TO:0006023 - - - - - Traits associated with observing effects on the development of the lodicule in a grass flower (floret). - Gramene:pankaj_jaiswal - - - - - - - - - - - - Ectopic development of lodicule in a grass flower (floret). - plant_trait_ontology - TO:0006024 - ectopic lodicule development - TO:0006024 - - - - - Ectopic development of lodicule in a grass flower (floret). - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the development of the floral bracts. - plant_trait_ontology - TO:0006025 - floral bract development trait - TO:0006025 - - - - - Traits associated with observing effects on the development of the floral bracts. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Number of bracts in a flower. - plant_trait_ontology - TO:0006026 - floral bract number - TO:0006026 - - - - - Number of bracts in a flower. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the development of the floral bracts. - plant_trait_ontology - TO:0006027 - inflorescence bract development trait - TO:0006027 - - - - - Traits associated with observing effects on the development of the floral bracts. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Number of given type of bracts in a inflorescence. - plant_trait_ontology - TO:0006028 - inflorescence bract number - TO:0006028 - - - - - Number of given type of bracts in a inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Number of glumes in an inflorescence of grass, sedge or similar plant. - plant_trait_ontology - TO:0006029 - glume number - TO:0006029 - - - - - Number of glumes in an inflorescence of grass, sedge or similar plant. - Gramene:pankaj_jaiswal - - - - - - - - - - - - - - Trait associated to observed effect on the establishment of spikelet meristem identity or determinacy. - plant_trait_ontology - TO:0006030 - spikelet meristem identity - TO:0006030 - - - - - Trait associated to observed effect on the establishment of spikelet meristem identity or determinacy. - Gramene:pankaj_jaiswal - - - - - - - - - - An inflorescence morphology trait (TO:0000373) which is the variation in size of inflorescence (PO:0009049). - PATO:0000117 - plant_trait_ontology - TO:0006031 - Refer to size (PATO:0000117): A morphology quality inhering in a bearer by virtue of the bearer's physical magnitude. - inflorescence size - TO:0006031 - - - - - An inflorescence morphology trait (TO:0000373) which is the variation in size of inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the variation in size of panicle inflorescence. - plant_trait_ontology - TO:0006032 - panicle size - TO:0006032 - - - - - A panicle morphology trait (TO:0000847) which is the variation in size of panicle inflorescence. - Gramene:pankaj_jaiswal - TO:moorel - - - - - - - - - - Number of florets in a grass spikelet. - plant_trait_ontology - FLNBPSPK - TO:0006033 - floret number per spikelet - TO:0006033 - - - - - Number of florets in a grass spikelet. - Gramene:pankaj_jaiswal - - - - - - - - - - A tertiary branching of inflorescence (TO:0006035) trait which is the number of tertiary branches in an inflorescence (PO:0009049). - plant_trait_ontology - TO:0006034 - tertiary branch number - TO:0006034 - - - - - A tertiary branching of inflorescence (TO:0006035) trait which is the number of tertiary branches in an inflorescence (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - An inflorescence branching (TO:0000050) trait which is the extent of tertiary branching that usually determines the shape and compactness of the inflorescence (PO:0009049) (such as in rice panicle). - plant_trait_ontology - TO:0006035 - tertiary branching of inflorescence - TO:0006035 - - - - - An inflorescence branching (TO:0000050) trait which is the extent of tertiary branching that usually determines the shape and compactness of the inflorescence (PO:0009049) (such as in rice panicle). - Gramene:pankaj_jaiswal - PO:0009049 - TO:moorel - - - - - - - - - - Elongation of the stem. - plant_trait_ontology - TO:0006036 - Alternative associated traits are stem length (TO:0000576) and shoot elongation rate (TO:0000368). - stem elongation - TO:0006036 - - - - - Elongation of the stem. - Gramene:pankaj_jaiswal - - - - - - - - - - A carpel morphology trait (TO:0006012) which is the shape of a carpel (PO:0009030). - PATO:0000052 - plant_trait_ontology - TO:0006037 - Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - carpel shape - TO:0006037 - - - - - A carpel morphology trait (TO:0006012) which is the shape of a carpel (PO:0009030). - Gramene:pankaj_jaiswal - PO:0009030 - TO:moorel - - - - - - - - - - A floral organ morphology trait (TO:0000862) which is the number of floral organ (PO:0025395) types in a flower (PO:0009046). - plant_trait_ontology - TO:0006038 - floral organ number - TO:0006038 - - - - - A floral organ morphology trait (TO:0000862) which is the number of floral organ (PO:0025395) types in a flower (PO:0009046). - Gramene:pankaj_jaiswal - PO:0009046 - TO:moorel - - - - - - - - - - A petal morphology trait (TO:0000863) which is the number of petals (PO:0009032) in a flower (PO:0009049). - plant_trait_ontology - TO:0006039 - petal number - TO:0006039 - - - - - A petal morphology trait (TO:0000863) which is the number of petals (PO:0009032) in a flower (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009032 - PO:0009049 - TO:moorel - - - - - - - - - - A sepal morphology trait (TO:0000864) which is the number of the sepals (PO:0009031) in a flower (PO:0009049). - plant_trait_ontology - TO:0006040 - sepal number - TO:0006040 - - - - - A sepal morphology trait (TO:0000864) which is the number of the sepals (PO:0009031) in a flower (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009031 - PO:0009049 - TO:moorel - - - - - - - - - - A tepal morphology trait (TO:0000865) which is the number of the tepals (PO:0009033) in a flower (PO:0009049). - plant_trait_ontology - TO:0006041 - tepal number - TO:0006041 - - - - - A tepal morphology trait (TO:0000865) which is the number of the tepals (PO:0009033) in a flower (PO:0009049). - Gramene:pankaj_jaiswal - PO:0009033 - PO:0009049 - TO:moorel - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the lithium cation (CHEBI:49713) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25 - plant_trait_ontology - TO:0006042 - May be assayed for per gram fresh weight. - lithium content - TO:0006042 - - - - - A mineral and ion content trait (TO:0000465) which is the lithium cation (CHEBI:49713) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the boron cation (CHEBI:30168) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25T04:49:08Z - plant_trait_ontology - TO:0006043 - boron content - TO:0006043 - - - - - A mineral and ion content trait (TO:0000465) which is the boron cation (CHEBI:30168) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the magnesium cation (CHEBI:18420) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25 - plant_trait_ontology - TO:0006044 - magnesium content - TO:0006044 - - - - - A mineral and ion content trait (TO:0000465) which is the magnesium cation (CHEBI:18420) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A phosphorus content (TO:0001024) which is the concentration of phosphorus (CHEBI:26082) in some plant structure (PO:0009011) - jaiswalp - 2010-10-25T04:51:26Z - CHEBI:26082 - plant_trait_ontology - TO:0006045 - phosphorus concentration - TO:0006045 - - - - - A phosphorus content (TO:0001024) which is the concentration of phosphorus (CHEBI:26082) in some plant structure (PO:0009011) - Gramene:Karthik - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the sulfur cation (CHEBI:29832) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25 - plant_trait_ontology - TO:0006046 - sulfur content - TO:0006046 - - - - - A mineral and ion content trait (TO:0000465) which is the sulfur cation (CHEBI:29832) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the calcium cation (CHEBI:39123) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25T04:54:15Z - plant_trait_ontology - TO:0006047 - calcium content trait - TO:0006047 - - - - - A mineral and ion content trait (TO:0000465) which is the calcium cation (CHEBI:39123) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A manganese content (TO:0020091) which is the concentration of manganese (CHEBI:25154) in some plant structure (PO:0009011) - jaiswalp - 2010-10-25T04:55:34Z - CHEBI:25154 - plant_trait_ontology - TO:0006048 - manganese concentration - TO:0006048 - - - - - A manganese content (TO:0020091) which is the concentration of manganese (CHEBI:25154) in some plant structure (PO:0009011) - Gramene:Karthik - - - - - - - - - - An iron content (TO:0020089) which is the concentration of iron cation (CHEBI:24875) in a plant structure (PO:0009011) - jaiswalp - 2010-10-25T04:56:30Z - CHEBI:24873 - plant_trait_ontology - TO:0006049 - iron concentration - TO:0006049 - - - - - An iron content (TO:0020089) which is the concentration of iron cation (CHEBI:24875) in a plant structure (PO:0009011) - Gramene:Karthik - - - - - - - - - - A cobalt content trait (TO:0001044) which is the concentration of cobalt cation (CHEBI:23336) in a plant structure (PO:0009011). - jaiswalp - 2010-10-25 - plant_trait_ontology - TO:0006050 - cobalt concentration - TO:0006050 - - - - - A cobalt content trait (TO:0001044) which is the concentration of cobalt cation (CHEBI:23336) in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the nickel cation (CHEBI:25516) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25T04:58:31Z - plant_trait_ontology - TO:0006051 - nickel content - TO:0006051 - - - - - A mineral and ion content trait (TO:0000465) which is the nickel cation (CHEBI:25516) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A copper content (TO:0020092) which is the concentration of copper (CHEBI:23377) in a plant structure (PO:0009011) - jaiswalp - 2010-10-25T04:59:17Z - CHEBI:23377 - plant_trait_ontology - TO:0006052 - copper concentration - TO:0006052 - - - - - A copper content (TO:0020092) which is the concentration of copper (CHEBI:23377) in a plant structure (PO:0009011) - Gramene:Karthik - - - - - - - - - - A zinc content (TO:0020090) which is the concentration of zinc (CHEBI:27364) in some plant structure (PO:0009011) - jaiswalp - 2010-10-25T04:59:26Z - CHEBI:27364 - plant_trait_ontology - TO:0006053 - zinc concentration - TO:0006053 - - - - - A zinc content (TO:0020090) which is the concentration of zinc (CHEBI:27364) in some plant structure (PO:0009011) - Gramene:Karthik - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the arsenic cation (CHEBI:35829) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25T04:59:32Z - plant_trait_ontology - TO:0006054 - arsenic content trait - TO:0006054 - - - - - A mineral and ion content trait (TO:0000465) which is the arsenic cation (CHEBI:35829) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the selenium ion (CHEBI:60250) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25T04:59:38Z - plant_trait_ontology - TO:0006055 - selenium content - TO:0006055 - - - - - A mineral and ion content trait (TO:0000465) which is the selenium ion (CHEBI:60250) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the molybdenum cation (CHEBI:37239) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25T04:59:53Z - plant_trait_ontology - TO:0006056 - molybdenum content - TO:0006056 - - - - - A mineral and ion content trait (TO:0000465) which is the molybdenum cation (CHEBI:37239) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - The total Cu2+ ion concentration measured in a given volume of a plant or a plant part or plant extract. - jaiswalp - 2010-10-25T05:04:14Z - plant_trait_ontology - TO:0006057 - cuperous ion concentration - TO:0006057 - - - - - The total Cu2+ ion concentration measured in a given volume of a plant or a plant part or plant extract. - Gramene:pankaj_jaiswal - - - - - - - - - - The total Cu3+ ion concentration measured in a given volume of a plant or a plant part or plant extract. - jaiswalp - 2010-10-25T05:04:19Z - plant_trait_ontology - TO:0006058 - cuperic ion concentration - TO:0006058 - - - - - The total Cu3+ ion concentration measured in a given volume of a plant or a plant part or plant extract. - Gramene:pankaj_jaiswal - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the cadmium cation (CHEBI:63063) composition in a plant structure (PO:0009011). - jaiswalp - 2010-10-25 - plant_trait_ontology - TO:0006059 - cadmium content trait - TO:0006059 - - - - - A mineral and ion content trait (TO:0000465) which is the cadmium cation (CHEBI:63063) composition in a plant structure (PO:0009011). - Gramene:Karthik - TO:cooperl - - - - - - - - - - A leaf color trait (TO:0006060) describing the yellowing of leaves, due to insufficient production of chlorophyll. - jaiswalp - 2010-10-25T05:13:05Z - TO:0020113 - plant_trait_ontology - TO:0006060 - Leaf surface affected by abiotic stresses like insecticides and cold temperature as evidenced by chlorotic tissue. - leaf chlorosis - TO:0006060 - - - - - A leaf color trait (TO:0006060) describing the yellowing of leaves, due to insufficient production of chlorophyll. - Gramene:Karthik - TO:moorel - - - - - - - - - - Number of days taken from the day of sowing to the first emergence of cotyledons or hypocotyl. - jaiswalp - 2010-10-25T05:23:52Z - plant_trait_ontology - TO:0006061 - days to germinate - TO:0006061 - - - - - Number of days taken from the day of sowing to the first emergence of cotyledons or hypocotyl. - Gramene:curators - - - - - - - - - - The average width of a plant measured across an axis such as the main stem/stalk. - jaiswalp - 2010-10-25T05:27:37Z - plant_trait_ontology - TO:0006062 - plant width - TO:0006062 - - - - - The average width of a plant measured across an axis such as the main stem/stalk. - Gramene:pankaj_jaiswal - - - - - - - - - - A leaf margin morphology trait (TO:0002635) which is a notched or grooved leaf margin (PO:0020128). - jaiswalp - 2010-10-25T05:30:17Z - PATO:0001206 - plant_trait_ontology - TO:0006063 - Refer to serrated (PATO:0001206): A shape quality inhering in a bearer by virtue of having sharp straight-edged teeth pointing to the apex. - leaf margin serrated - TO:0006063 - - - - - A leaf margin morphology trait (TO:0002635) which is a notched or grooved leaf margin (PO:0020128). - Gramene:curators - PO:0020128 - POC:cooperl - - - - - - - - - - Leaf lamina rolled into a tube like structure. - jaiswalp - 2010-10-25T05:34:19Z - plant_trait_ontology - TO:0006064 - rolled leaf - TO:0006064 - - - - - Leaf lamina rolled into a tube like structure. - Gramene:Karthik - - - - - - - - - - - - A seedling hypocotyl morphology trait (TO:0000769) which is the length of a seedling hypocotyl (PO:0025291). - jaiswalp - 2010-10-25T05:36:01Z - PATO:0000122 - TO_GIT:64 - plant_trait_ontology - TO:0006065 - seedling hypocotyl length - TO:0006065 - - - - - A seedling hypocotyl morphology trait (TO:0000769) which is the length of a seedling hypocotyl (PO:0025291). - Gramene:Karthik - PO:0025291 - POC:cooperl - - - - - - - - - - Measurement of trichomes found in per unit area of a leaf. - jaiswalp - 2010-10-25T05:37:25Z - plant_trait_ontology - TO:0006066 - leaf trichome density - TO:0006066 - - - - - Measurement of trichomes found in per unit area of a leaf. - Gramene:curators - - - - - - - - - - Resistance displayed by the plant to the aphid infestation. - jaiswalp - 2010-10-25T05:38:56Z - plant_trait_ontology - TO:0006067 - Aphids are members of the insect order Homoptera, family Aphididae. - aphid resistance - TO:0006067 - - - - - Resistance displayed by the plant to the aphid infestation. - Gramene:pankaj_jaiswal - - - - - - - - - - - - Measure of the seed's germination ability in dark. - jaiswalp - 2010-10-25T05:42:12Z - plant_trait_ontology - TO:0006068 - germinability in dark - TO:0006068 - - - - - Measure of the seed's germination ability in dark. - Gramene:curators - - - - - - - - - - - - A measure of seed dormancy defined as the days of seed dry storage required to reach 50% germination (DSDS50). - jaiswalp - 2010-10-25T05:44:20Z - plant_trait_ontology - TO:0006069 - DSDS50 - TO:0006069 - - - - - A measure of seed dormancy defined as the days of seed dry storage required to reach 50% germination (DSDS50). - Gramene:Karthik - - - - - - - - - - The percentage of seeds that germinate against the total number of seeds planted. - plant_trait_ontology - TO:0010001 - percent germination - TO:0010001 - - - - - The percentage of seeds that germinate against the total number of seeds planted. - Gramene:pankaj_jaiswal - - - - - - - - - - Describes the way different colors, their hue and shades are distributed on a leaf lamina and its parts such as leaf margin, leaf tip, leaf veins. - plant_trait_ontology - LFLCLDIST - TO:0011001 - leaf lamina color distribution - TO:0011001 - - - - - Describes the way different colors, their hue and shades are distributed on a leaf lamina and its parts such as leaf margin, leaf tip, leaf veins. - Gramene:pankaj_jaiswal - - - - - - - - - - An inflorescence primary branch morphology trait (TO:0000846) which is the attitude of a second order inflorescence axis (PO:0006321) in terms of upright and drooping characters. - plant_trait_ontology - INFLPBRAATT - TO:0011002 - Associated to the trait inflorescence type (TO:0000267). - inflorescence primary branch attitude - TO:0011002 - - - - - An inflorescence primary branch morphology trait (TO:0000846) which is the attitude of a second order inflorescence axis (PO:0006321) in terms of upright and drooping characters. - Gramene:pankaj_jaiswal - PO:0006321 - TO:moorel - - - - - - - - - - - - - - - - - - An inflorescence axis morphology trait (TO:0000782) which is the color of the inflorescence axis (PO:0020122). - PATO:0000014 - plant_trait_ontology - INFLAXISCL - TO:0011003 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - inflorescence axis color - TO:0011003 - - - - - An inflorescence axis morphology trait (TO:0000782) which is the color of the inflorescence axis (PO:0020122). - Gramene:pankaj_jaiswal - PO:0020122 - TO:moorel - - - - - - - - - - - - An inflorescence branch morphology trait (TO:0000784) which is the color of the inflorescence branch (PO:0009081). - PATO:0000014 - plant_trait_ontology - INFLBRACL - panicle branch color - TO:0011004 - Refer to color PATO:0000014: A composite chromatic quality composed of hue, saturation and intensity parts. - inflorescence branch color - TO:0011004 - - - - - An inflorescence branch morphology trait (TO:0000784) which is the color of the inflorescence branch (PO:0009081). - Gramene:pankaj_jaiswal - PO:0009081 - TO:moorel - - - - - - - - - - Length of the leaf penultimate to the first leaf below the inflorescence. - plant_trait_ontology - PENLFLG - second leaf length - TO:0011005 - In case of cereal crop plants such as rice, corn, wheat etc., first leaf below the inflorescence or the last leaf on the shoot is called the flag leaf. Penultimate leaf is the one below flag leaf. - penultimate leaf length - TO:0011005 - - - - - Length of the leaf penultimate to the first leaf below the inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - Lamina width of the leaf penultimate to the first leaf below the inflorescence. - plant_trait_ontology - PENLFLWD - second leaf width - TO:0011006 - In case of cereal crop plants such as rice, corn, wheat etc., first leaf below the inflorescence or the last leaf on the shoot is called the flag leaf. Penultimate leaf is the one below flag leaf. - penultimate leaf lamina width - TO:0011006 - - - - - Lamina width of the leaf penultimate to the first leaf below the inflorescence. - Gramene:pankaj_jaiswal - - - - - - - - - - An awn morphology trait (TO:0002718) which is the width of the awn (PO:0025349). - PATO:0000921 - plant_trait_ontology - AWNWD - TO:0011007 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - awn width - TO:0011007 - - - - - An awn morphology trait (TO:0002718) which is the width of the awn (PO:0025349). - Gramene:pankaj_jaiswal - PO:0025349 - TO:moorel - - - - - - - - - - - - A floral organ length (TO:0002614) that is the length of the stigma (PO:0009073). - plant_trait_ontology - STIGLG - TO:0011008 - stigma length - TO:0011008 - - - - - A floral organ length (TO:0002614) that is the length of the stigma (PO:0009073). - Gramene:pankaj_jaiswal - - - - - - - - - - - - A floral organ length (TO:0002614) that is the length of the style (PO:0009074). - PATO:0000122 - TO_GIT:113 - silk length - plant_trait_ontology - STYLLG - TO:0011009 - style length - TO:0011009 - - - - - A floral organ length (TO:0002614) that is the length of the style (PO:0009074). - Gramene:pankaj_jaiswal - - - - - - - - - - Color of the spatial section of the internode that is found proximal (next) to the colored node of a stem. - plant_trait_ontology - INCLPROXNDCL - TO:0011010 - internode color in proxomity to colored node - TO:0011010 - - - - - Color of the spatial section of the internode that is found proximal (next) to the colored node of a stem. - Gramene:pankaj_jaiswal - - - - - - - - - - Leaf Area Index (LAI) is the ratio of total upper leaf surface of vegetation divided by the surface area of the land on which the vegetation grows. - jaiswalp - 2011-12-09T01:27:39Z - plant_trait_ontology - TO:0012001 - LAI is used to predict photosynthetic primary production and as a reference tool for crop growth. Measured on the plant canopy only. - leaf area index - TO:0012001 - - - - - Leaf Area Index (LAI) is the ratio of total upper leaf surface of vegetation divided by the surface area of the land on which the vegetation grows. - Wikipedia:Leaf_area_index - - - - - - - - - - - - A chlorophyll content trait (TO:0000495) which is a quality of a leaf (PO:0025034). - jaiswalp - 2011-12-09T01:52:17Z - TO_GIT:275 - plant_trait_ontology - TO:0012002 - leaf chlorophyll content - TO:0012002 - - - - - A chlorophyll content trait (TO:0000495) which is a quality of a leaf (PO:0025034). - PO:0025034 - TO:cooperl - - - - - - - - - - jaiswalp - 2011-12-09T01:54:09Z - plant_trait_ontology - TO:0012003 - chlorophyll content in an extract - TO:0012003 - - - - - - - - - - jaiswalp - 2011-12-09T02:09:21Z - plant_trait_ontology - QY - TO:0012004 - quantum yield - TO:0012004 - - - - - - - - - - jaiswalp - 2011-12-09T02:09:52Z - plant_trait_ontology - OJIP - TO:0012005 - chlorophyll fluorescence induction kinetics - TO:0012005 - - - - - - - - - - jaiswalp - 2011-12-09T02:12:03Z - plant_trait_ontology - TO:0012006 - fluorescence related trait - TO:0012006 - - - - - - - - - - jaiswalp - 2011-12-09T02:13:21Z - plant_trait_ontology - TO:0012007 - quantum yield determined by the light curve - TO:0012007 - - - - - - - - - - jaiswalp - 2011-12-09T02:16:09Z - plant_trait_ontology - TO:0012008 - quantum yield at a given wavelength - TO:0012008 - - - - - - - - - - jaiswalp - 2011-12-09T02:18:08Z - plant_trait_ontology - F<sub>T</sub> - TO:0012009 - continuous fluorescence yield - TO:0012009 - - - - - - - - - - Leaf Area Duration (LAD) is the ratio of total upper leaf surface of vegetation divided by the surface area of the land on which the vegetation grows. Measured over time. - jaiswalp - 2011-12-09T02:28:13Z - plant_trait_ontology - LAD - TO:0012010 - leaf area duration - TO:0012010 - - - - - Leaf Area Duration (LAD) is the ratio of total upper leaf surface of vegetation divided by the surface area of the land on which the vegetation grows. Measured over time. - group:Crop_Ontology_Group - - - - - - - - - - - - Rate of loss of normal leaf color over time. - jaiswalp - 2011-12-09T02:34:15Z - plant_trait_ontology - TO:0012011 - leaf senescence rate - TO:0012011 - - - - - Rate of loss of normal leaf color over time. - group:Crop_Ontology_Group - - - - - - - - - - - - Time taken to lose normal leaf color. - jaiswalp - 2011-12-09T02:35:49Z - plant_trait_ontology - TO:0012012 - In grasses often measured for flag or the second leaf from top. - leaf senescence duration - TO:0012012 - - - - - Time taken to lose normal leaf color. - group:Crop_Ontology_Group - - - - - - - - - - A panicle morphology trait (TO:0000847) which is the compactness and shape of a panicle. - PATO:0000052 - PATO:0001485 - plant_trait_ontology - TO:0020001 - Refer to compact (PATO:0001485): A structural quality inhering in a bearer by virtue of the bearer's being thicker or more closely packed together; pressed tightly together. -Refer to shape (PATO:0000052): A morphological quality inhering in a bearer by virtue of the bearer's ratios of distances between its features (points, edges, surfaces and also holes etc). - panicle compactness and shape - TO:0020001 - - - - - A panicle morphology trait (TO:0000847) which is the compactness and shape of a panicle. - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0020002 - grain weight to panicle weight ratio - TO:0020002 - - - - - - - - - - A potassium content trait (TO:0000609) which is the potassium cation (CHEBI:29103) composition in a shoot system (PO:0009006). - plant_trait_ontology - TO:0020003 - shoot system potassium content - TO:0020003 - - - - - A potassium content trait (TO:0000609) which is the potassium cation (CHEBI:29103) composition in a shoot system (PO:0009006). - Gramene:cwt - ICRIS:019 - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A sodium content trait (TO:0000608) which is the sodium cation (CHEBI:29101) composition in a shoot system (PO:0009006). - plant_trait_ontology - TO:0020004 - shoot system sodium content - TO:0020004 - - - - - A sodium content trait (TO:0000608) which is the sodium cation (CHEBI:29101) composition in a shoot system (PO:0009006). - Gramene:cwt - ICRIS:018 - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - Causative agent:Chilo partellus. Infections causes the appearance of small elongated holes in young whorl leaves, tunelling of earheads results in breakage or chaffy earheads affecting grain development. - plant_trait_ontology - TO:0020005 - sorghum stem borer resistance - TO:0020005 - - - - - Causative agent:Chilo partellus. Infections causes the appearance of small elongated holes in young whorl leaves, tunelling of earheads results in breakage or chaffy earheads affecting grain development. - GCP:053 - Gramene:cwt6 - - - - - - - - - - plant_trait_ontology - TO:0020006 - chickpea pod borer - TO:0020006 - - - - - - - - - - Causative agent:Atherigona soccata. Larval feeding results in central leaf wilting and drying causing the typical deadheart symptom. - plant_trait_ontology - TO:0020007 - sorghum shoot fly resistance - TO:0020007 - - - - - Causative agent:Atherigona soccata. Larval feeding results in central leaf wilting and drying causing the typical deadheart symptom. - GCP:051 - Gramene:cwt6 - - - - - - - - - - Causative agent: Aspergillus spp and Penicillium spp. Trait is measured as extent of grain surface covered with mold. - plant_trait_ontology - TO:0020008 - sorghum grain mold - TO:0020008 - - - - - Causative agent: Aspergillus spp and Penicillium spp. Trait is measured as extent of grain surface covered with mold. - Gramene:cwt - ICRIS:050 - - - - - - - - - - Causative agent: Puccinia purpurea. Infection causes purple, red or tan flecks on both surfaces of leaves, leaving a reddish powder on fingers when passed over it. - plant_trait_ontology - TO:0020009 - sorghum rust resistance - TO:0020009 - - - - - Causative agent: Puccinia purpurea. Infection causes purple, red or tan flecks on both surfaces of leaves, leaving a reddish powder on fingers when passed over it. - Gramene:cwt - ICRIS:049 - - - - - - - - - - Causative agent:Peronospora sp. It causes abundant downy white growth on the under surfaces of infected portions of leaves during humid weather, mature infected leaves become necrotic and intervenal tissues disintegrate to give the typical shredded leaf symptom. - plant_trait_ontology - TO:0020010 - sorghum downy mildew resistance - TO:0020010 - - - - - Causative agent:Peronospora sp. It causes abundant downy white growth on the under surfaces of infected portions of leaves during humid weather, mature infected leaves become necrotic and intervenal tissues disintegrate to give the typical shredded leaf symptom. - Gramene:cwt - ICRIS:047 - - - - - - - - - - plant_trait_ontology - TO:0020011 - chickpea botrytis grey mold resistance - TO:0020011 - - - - - - - - - - plant_trait_ontology - TO:0020012 - chickpea fusarium wild resistance - TO:0020012 - - - - - - - - - - plant_trait_ontology - TO:0020013 - chickpea colleotrichum blight resistance - TO:0020013 - - - - - - - - - - plant_trait_ontology - TO:0020014 - chickpea ascochyta blight resistance - TO:0020014 - - - - - - - - - - TO_GIT:69 - plant_trait_ontology - TO:0020015 - sorghum leaf blight resistance - TO:0020015 - - - - - - - - - - A seed morphology trait (TO:0000184) which is the texture of a seed (PO:0009010). - TO:0000150 - TO_GIT:213 - plant_trait_ontology - TO:0020016 - Refer to texture PATO:0000150: A morphologic quality inhering in a bearer by virtue of the bearer's relative size, organization and distribution of its surface elements or the representation or invention of the appearance of its surface; visual and tactile surface characteristics. - seed texture - TO:0020016 - - - - - A seed morphology trait (TO:0000184) which is the texture of a seed (PO:0009010). - PO:0009010 - TO:moorel - - - - - - - - - - A seed coat pattern trait (TO:0000904) where the seed coat (PO:0009088) has colored spots. - PATO:0000333 - TO_GIT:148 - plant_trait_ontology - TO:0020017 - Refer to spotted (PATO:0000333): A color pattern inhering in a bearer by virtue of bearer's being marked with a round area of different hue or degree of saturation. - seed coat spotted - TO:0020017 - - - - - A seed coat pattern trait (TO:0000904) where the seed coat (PO:0009088) has colored spots. - PO:0009088 - TO:moorel - - - - - - - - - - plant_trait_ontology - TO:0020018 - tertiary shoot branch number - TO:0020018 - - - - - - - - - - plant_trait_ontology - TO:0020019 - secondary shoot branch number - TO:0020019 - - - - - - - - - - plant_trait_ontology - TO:0020020 - primary shoot branch number - TO:0020020 - - - - - - - - - - - - plant_trait_ontology - TO:0020021 - basal axillary tertiary branch number - TO:0020021 - - - - - - - - - - - - plant_trait_ontology - TO:0020022 - basal axillary secondary branch number - TO:0020022 - - - - - - - - - - - - plant_trait_ontology - TO:0020023 - basal axillary primary branch number - TO:0020023 - - - - - - - - - - plant_trait_ontology - TO:0020024 - basal axillary branch number - TO:0020024 - - - - - - - - - - - - plant_trait_ontology - TO:0020025 - apical axillary tertiary branch number - TO:0020025 - - - - - - - - - - - - plant_trait_ontology - TO:0020026 - apical axillary secondary branch number - TO:0020026 - - - - - - - - - - - - plant_trait_ontology - TO:0020027 - apical axillary primary branch number - TO:0020027 - - - - - - - - - - Gramene:cwt6 - plant_trait_ontology - TO:0020028 - apical axillary branch number - TO:0020028 - - - - - - - - - - Length of pubescence (presence of hairs) on the leaf blade surface. - plant_trait_ontology - TO:0020029 - leaf lamina pubscence length - TO:0020029 - - - - - Length of pubescence (presence of hairs) on the leaf blade surface. - Gramene:cwt - - - - - - - - - - Density of pubescence (presence of hairs) on the leaf blade surface. - plant_trait_ontology - TO:0020030 - leaf lamina pubescence density - TO:0020030 - - - - - Density of pubescence (presence of hairs) on the leaf blade surface. - Gramene:cwt - - - - - - - - - - A leaf lamina margin pudescence (TO:0002723) trait which is the length of pubescence (presence of hairs) on the leaf lamina margin (PO:0025009). - PATO:0000122 - PATO:0001320 - plant_trait_ontology - TO:0020031 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - leaf lamina margin pubescence length - TO:0020031 - - - - - A leaf lamina margin pudescence (TO:0002723) trait which is the length of pubescence (presence of hairs) on the leaf lamina margin (PO:0025009). - Gramene:cwt - PO:0025009 - TO:moorel - - - - - - - - - - A leaf lamina margin pubescence trait (TO:0002723) which is the density of pubescence (presence of hairs) on the leaf lamina margin (PO:0025009). - PATO:0001019 - PATO:0001320 - plant_trait_ontology - TO:0020032 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. Refer to density (PATO:0001019): A physical quality which inheres in a bearer by virtue of some influence is exerted by the bearer's mass per unit size. - leaf lamina margin pubescence density - TO:0020032 - - - - - A leaf lamina margin pubescence trait (TO:0002723) which is the density of pubescence (presence of hairs) on the leaf lamina margin (PO:0025009). - Gramene:cwt6 - PO:002009 - TO:moorel - - - - - - - - - - - - A glume morphology trait (TO:0000869) which is the length of a glume (PO:0009039) measured in mm (millimeter). - PATO:0000122 - plant_trait_ontology - TO:0020033 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - glume length - TO:0020033 - - - - - A glume morphology trait (TO:0000869) which is the length of a glume (PO:0009039) measured in mm (millimeter). - Gramene:cwt - IWIS:1420 - PO:0009039 - TO:moorel - - - - - - - - - - A glume morphology trait (TO:0000869) with is the measurement of width of glume (PO:0009039) in mm (millimeter). - PATO:0000921 - plant_trait_ontology - TO:0020034 - Refer to width (PATO:0000921): A 1-D extent quality which is equal to the distance from one side of an object to another side which is opposite. - glume width - TO:0020034 - - - - - A glume morphology trait (TO:0000869) with is the measurement of width of glume (PO:0009039) in mm (millimeter). - Gramene:cwt - IWIS:1421 - PO:0009039 - TO:moorel - - - - - - - - - - A glume pubescence (TO:0020036) trait which is the measurement of glume hairines density on outer side of sterile glume (PO:0009039). - PATO:0001019 - plant_trait_ontology - TO:0020035 - Refer to density (PATO:0001019): A physical quality which inheres in a bearer by virtue of some influence is exerted by the bearer's mass per unit size. - glume pubescence density - TO:0020035 - - - - - A glume pubescence (TO:0020036) trait which is the measurement of glume hairines density on outer side of sterile glume (PO:0009039). - Gramene:cwt - IWIS:1422 - PO:0009039 - TO:moorel - - - - - - - - - - A glume morphology trait (TO:0000869) which is the extent of pubescence (presence of hairs) on the glume (PO:0009039) surface. - PATO:0001320 - plant_trait_ontology - TO:0020036 - Refer to pubescent hair (PATO:0001320): A pilosity quality of being covered with short hairs or soft down. - glume pubescence - TO:0020036 - - - - - A glume morphology trait (TO:0000869) which is the extent of pubescence (presence of hairs) on the glume (PO:0009039) surface. - Gramene:cwt - PO:0009039 - TO:moorel - - - - - - - - - - A glume pubescence (TO:0020036) which is the measurement of length of hairs on glume (PO:0009039). - PATO:0000122 - plant_trait_ontology - TO:0020037 - Refer to length (PATO:0000122): A 1-D extent quality which is equal to the distance between two points. - glume pubescence length - TO:0020037 - - - - - A glume pubescence (TO:0020036) which is the measurement of length of hairs on glume (PO:0009039). - Gramene:cwt - IWIS:1423 - PO:0009039 - TO:moorel - - - - - - - - - - A glume morphology trait (TO:0000869) which is the presence of wax on a glume (PO:0009039). - PATO:0002381 - plant_trait_ontology - TO:0020038 - Refer to waxiness (PATO:0002381): A composition quality inhering in an bearer by virtue of the presence of long chain aliphatic lipids on the surface of an organism. - glume waxiness - TO:0020038 - - - - - A glume morphology trait (TO:0000869) which is the presence of wax on a glume (PO:0009039). - Gramene:cwt - IWIS:1412 - PO:0009039 - TO:moorel - - - - - - - - - - Causal agent: Rhynchosporium secalis. - jaiswalp - 2011-08-19T12:12:24Z - scald - plant_trait_ontology - TO:0020051 - Symptoms include, oval, water-soaked, blue-grey spots (1.0-1.5 cm long) developing into lesions with dry necrotic centers and dark brown margins. Lesions will coalesce under high infection levels and are not delimited by veins. - barley leaf scald disease resistance - TO:0020051 - - - - - Causal agent: Rhynchosporium secalis. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Cochliobolus sativus (Bipolaris sorokiniana). - jaiswalp - 2011-08-19T12:19:00Z - spot blotch - plant_trait_ontology - TO:0020052 - Symptoms include, uniform chocolate brown lesions that eventually merge forming irregular necrotic patches on leaves. Lesions may be surrounded by yellow zones of varying width. - barley spot blotch disease resistance - TO:0020052 - - - - - Causal agent: Cochliobolus sativus (Bipolaris sorokiniana). - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Cochliobolus sativus (Bipolaris sorokiniana). - jaiswalp - 2011-08-19T12:21:53Z - Helminthosporium leaf blotch - plant_trait_ontology - TO:0020053 - Symptoms include, elongated to oval shaped dark brown lesions. Centers often lighten to dark brown or tan surrounded by an irregular dark brown ring. - wheat spot blotch disease resistance - TO:0020053 - - - - - Causal agent: Cochliobolus sativus (Bipolaris sorokiniana). - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Puccinia striiformis f. sp. hordei. - jaiswalp - 2011-08-19T12:25:00Z - BSR - yellow rust - plant_trait_ontology - TO:0020054 - Symptoms: chlorotic flecks at the infection site initially appear, followed by yellow uredinia (spore masses) in prominent stripes along the leaf veins. Black telia (overseasoning structures) readily develop from uredinia as infected plants mature. - barley stripe rust disease resistance - TO:0020054 - - - - - Causal agent: Puccinia striiformis f. sp. hordei. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Puccinia striiformis f. sp. tritici. - jaiswalp - 2011-08-19T12:27:45Z - yellow rust - plant_trait_ontology - TO:0020055 - Symptoms: pustules (spore masses) containing yellow to orange-yellow urediniospores form narrow stripes on leaves, leaf sheaths and glumes. - wheat stripe rust disease resistance - TO:0020055 - - - - - Causal agent: Puccinia striiformis f. sp. tritici. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Puccinia hordei. - jaiswalp - 2011-08-19T12:29:57Z - brown rust - plant_trait_ontology - TO:0020056 - Symptoms: small round orange brown pustules producing a mass of orange-brown urediniospores on the upper leaf surfaces and leaf sheaths. - barley leaf rust disease resistance - TO:0020056 - - - - - Causal agent: Puccinia hordei. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Puccinia recondita f. sp. tritici. - jaiswalp - 2011-08-19T12:31:09Z - brown rust - plant_trait_ontology - TO:0020057 - Symptoms: circular to slightly elliptical pustules containing masses of orange to orange-brown urediniospores on the leaf surfaces and leaf sheaths. - wheat leaf rust disease resistance - TO:0020057 - - - - - Causal agent: Puccinia recondita f. sp. tritici. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agents: Cochliobolus sativus (Bipolaris sorokiniana), Fusarium culmorum and Fusarium pseudograminearum. - jaiswalp - 2011-08-19T12:33:03Z - crown rot - plant_trait_ontology - TO:0020058 - Symptoms: brown lesions on the roots, especially the subcrown internode. Under severe conditions, lesions can become nearly black with brown tissue extending into the crown and leaf sheaths. Stunted plants with reduced tillering and yield. Heads can be white with fewer kernels that are small and shriveled. - barley common root rot resistance - TO:0020058 - - - - - Causal agents: Cochliobolus sativus (Bipolaris sorokiniana), Fusarium culmorum and Fusarium pseudograminearum. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agents: Cochliobolus sativus (Bipolaris sorokiniana). - jaiswalp - 2011-08-19T12:36:24Z - plant_trait_ontology - TO:0020059 - Symptoms: browning of the root, crown and basal culm tissues. Plants may lodge. White spikes can appear. - wheat common root rot resistance - TO:0020059 - - - - - Causal agents: Cochliobolus sativus (Bipolaris sorokiniana). - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Blumeria graminis f. sp. hordei. - jaiswalp - 2011-08-19T12:39:36Z - plant_trait_ontology - TO:0020060 - Symptoms: first visible signs are fuzzy white to pale grey tufts of mycelia and conidia on the upper surfaces of leaves and leaf sheaths (especially on lower leaves) and sometimes on the spikes. Older fungal tissue is yellowish grey and can be easily rubbed off. Plant tissue becomes chlorotic or necrotic. Spherical black cleistothecia may develop. - barley powdery mildew disease resistance - TO:0020060 - - - - - Causal agent: Blumeria graminis f. sp. hordei. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Blumeria graminis f. sp. tritici. - jaiswalp - 2011-08-19T12:39:36Z - plant_trait_ontology - TO:0020061 - Symptoms: first visible signs are fuzzy white to pale grey tufts of mycelia and conidia on the upper surfaces of leaves and leaf sheaths (especially on lower leaves) and sometimes on the spikes. Older fungal tissue is yellowish grey and can be easily rubbed off. Plant tissue becomes chlorotic or necrotic. Spherical black cleistothecia may develop. - wheat powdery mildew disease resistance - TO:0020061 - - - - - Causal agent: Blumeria graminis f. sp. tritici. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Pyrenophora teres f. teres. - jaiswalp - 2011-08-19T12:39:36Z - NFNB - plant_trait_ontology - TO:0020062 - Symptoms: in adult plants, initial symptoms are small pinpoint to elliptical brown spots which expand to form narrow, tan to light brown lesions, often delimited by leaf veins. Within lesions, dark brown longitudinal and transverse striations appear forming a net-like pattern. In seedlings, greenish grey, water-soaked areas appear forming brown lesions with netted striations. - barley net form net blotch disease resistance - TO:0020062 - - - - - Causal agent: Pyrenophora teres f. teres. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Pyrenophora teres f. maculata. - jaiswalp - 2011-08-19T12:39:36Z - SFNB - plant_trait_ontology - TO:0020063 - Symptoms: dark brown, circular to elliptical lesions surrounded by bands of chlorosis. - barley spot form net blotch disease resistance - TO:0020063 - - - - - Causal agent: Pyrenophora teres f. maculata. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Septoria passerinii and Stagonospora avenae f. sp. triticeae (teleomorph: Phaeosphaeria avenaria f. sp. triticeae). - jaiswalp - 2011-08-19T12:39:36Z - SSLB - plant_trait_ontology - TO:0020064 - Symptoms: in seedlings, S. passerinii causes faint, yellowish areas that turn greenish gray then straw colored with time forming a distinct demarcation next to healthy green tissue. On adult plants S. passerinii infection produces long, rectangular lesions delimited by veins that first appear graying then turn tan or straw colored. S. avenae f. sp. triticea produces yellow brown lesions that traverse veins and are shield or lens shaped. - barley septoria disease resistance - TO:0020064 - - - - - Causal agent: Septoria passerinii and Stagonospora avenae f. sp. triticeae (teleomorph: Phaeosphaeria avenaria f. sp. triticeae). - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Septoria tritici (Mycosphaerella graminicola), Septoria nodorum (Leptosphaeria nodorum), Septoria avenae f. sp. triticeae (Leptosphaeria avenaria f. sp. triticeae). - jaiswalp - 2011-08-19T12:39:36Z - plant_trait_ontology - TO:0020065 - Symptoms: Initial infection sites tend to be irregular in shape, oval to elongated chlorotic spots or lesions. As these sites expand, the centers of the lesions become pale, straw colored, and slightly necrotic, often with numerous small black dots (pycnidia). The lesions of septoria tritici blotch tend to be linear and restricted laterally, while those of septoria nodorum blotch and septoria avenae blotch are more lens shaped. All above ground plant parts can be affected. - wheat septoria leaf blotch disease resistance - TO:0020065 - - - - - Causal agent: Septoria tritici (Mycosphaerella graminicola), Septoria nodorum (Leptosphaeria nodorum), Septoria avenae f. sp. triticeae (Leptosphaeria avenaria f. sp. triticeae). - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: Xanthomonas translucens pv. translucens and pv. undulosa. - jaiswalp - 2011-08-19T12:58:34Z - plant_trait_ontology - TO:0020066 - Symptoms: small, light to pale green spots which later expand into linear streaks. Streaks can extend the entire length of the leaf, that will become translucent. Infected leaves will turn yellow then brown as it dies. - barley leaf streak resistance - TO:0020066 - - - - - Causal agent: Xanthomonas translucens pv. translucens and pv. undulosa. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Causal agent: The Barley Yellow Dwarf Viruses, Luteovirus (Group IV (+)ssRNA). - jaiswalp - 2011-08-19T01:00:45Z - BYDV - plant_trait_ontology - TO:0020067 - Symptoms: uneven blotches of bright yellow discoloration on the tips and margins of older leaves, eventually progressing down toward the base, covering the entire leaf within a few weeks. Reduced internode elongation causes stunting with severe infection possibly. - barley yellow dwarf virus disease resistance - TO:0020067 - - - - - Causal agent: The Barley Yellow Dwarf Viruses, Luteovirus (Group IV (+)ssRNA). - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Amount of beta-glucan present in the plant part or product (e.g. malt). Beta-Glucans are polysaccharides of D-glucose linked by beta-glycosidic bonds that vary by molecular mass, solubility, viscosity and 3D configuration. - jaiswalp - 2011-08-19T01:03:01Z - plant_trait_ontology - TO:0020068 - beta-glucan content - TO:0020068 - - - - - Amount of beta-glucan present in the plant part or product (e.g. malt). Beta-Glucans are polysaccharides of D-glucose linked by beta-glycosidic bonds that vary by molecular mass, solubility, viscosity and 3D configuration. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - A triticea trait measured in distance from the base of the spike to the flag leaf auricle. - jaiswalp - 2011-08-19T01:07:39Z - plant_trait_ontology - TO:0020069 - spike exsertion - TO:0020069 - - - - - A triticea trait measured in distance from the base of the spike to the flag leaf auricle. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Activity of beta-glucanase ((1,3-1,4)-beta-D-glucan, 4-glucanohydrolase), (EC:3.2.1.73) in the hydrolysis of beta-glucans. - jaiswalp - 2011-08-19T01:10:26Z - plant_trait_ontology - TO:0020070 - beta-glucanase activity trait - TO:0020070 - - - - - Activity of beta-glucanase ((1,3-1,4)-beta-D-glucan, 4-glucanohydrolase), (EC:3.2.1.73) in the hydrolysis of beta-glucans. - GO:0042972 - GO::0052736 - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - The ability of beta-glucanase to remain active under mashing (boiling grain in water) conditions during beer making. - jaiswalp - 2011-08-19T01:18:25Z - plant_trait_ontology - TO:0020071 - Beta-glucanase [(1-3,1-4)-beta-D-glucan, 4-glucanohydrolase], (E.C:3.2.1.73). - beta-glucanase thermostability - TO:0020071 - - - - - The ability of beta-glucanase to remain active under mashing (boiling grain in water) conditions during beer making. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - - - Activity of beta-glucanase in the barley wort (the boiled grain and water) during the beer making process. - jaiswalp - 2011-08-19T01:20:23Z - residual beta-glucanase - plant_trait_ontology - TO:0020072 - Beta-glucanase [(1-3,1-4)-beta-D-glucan, 4-glucanohydrolase], (E.C:3.2.1.73). - residual beta-glucanase activity trait - TO:0020072 - - - - - Activity of beta-glucanase in the barley wort (the boiled grain and water) during the beer making process. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - - - Concentration of protein in the wort after boiling the grain with water (mashing) in the beer making process. - jaiswalp - 2011-08-19T01:24:05Z - wort protein - plant_trait_ontology - TO:0020073 - barley wort protein concentration - TO:0020073 - - - - - Concentration of protein in the wort after boiling the grain with water (mashing) in the beer making process. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Color of the solution derived from boiling barley grain with water during the beer making process. - jaiswalp - 2011-08-19T01:27:42Z - plant_trait_ontology - TO:0020074 - barley wort color - TO:0020074 - - - - - Color of the solution derived from boiling barley grain with water during the beer making process. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Percent protein in the malt prior to mashing (boiling the grain with water to produce a wort) in the beer making process. - jaiswalp - 2011-08-19T01:29:00Z - plant_trait_ontology - TO:0020075 - barley malt protein - TO:0020075 - - - - - Percent protein in the malt prior to mashing (boiling the grain with water to produce a wort) in the beer making process. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - Amount of phenolics present in the plant part, whole plant or product. - jaiswalp - 2011-08-19T01:29:58Z - plant_trait_ontology - TO:0020076 - In barley its evaluated in ex malt. - phenolic compound content - TO:0020076 - - - - - Amount of phenolics present in the plant part, whole plant or product. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - A triticea trait evaluated for fertile spikes dropped before harvest. - jaiswalp - 2011-08-19T01:33:35Z - plant_trait_ontology - TO:0020077 - head drop - TO:0020077 - - - - - A triticea trait evaluated for fertile spikes dropped before harvest. - T-CAP:Victoria_Corollo_Blake - - - - - - - - - - A xanthophyll content (TO:0000301) which is the amount of zeaxanthin (CHEBI:27547) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T02:49:07Z - CHEBI:27547 - plant_trait_ontology - TO:0020078 - zeaxanthin content - TO:0020078 - - - - - - - - - - A xanthophyll content (TO:0000301) which is the amount of beta-cryptoxanthin (CHEBI:10362) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T02:53:13Z - CHEBI:10362 - plant_trait_ontology - TO:0020079 - beta-cryptoxanthin content - TO:0020079 - - - - - - - - - - This trait determines the amount of organic matter from the stover that would eventually be digested by animals. Value derived from chemical and in vitro analysis with rumen microbial inoculum of dried and ground stover, usually using Near Infrared Reflectance Spectrophotometry (NIRS) after appropriate calibration. - jaiswalp - 2011-08-19T03:13:08Z - stover related trait - in vitro organic matter digestibility - plant_trait_ontology - TO:0020080 - Measured as percentage. - stover organic matter digestability - TO:0020080 - - - - - This trait determines the amount of organic matter from the stover that would eventually be digested by animals. Value derived from chemical and in vitro analysis with rumen microbial inoculum of dried and ground stover, usually using Near Infrared Reflectance Spectrophotometry (NIRS) after appropriate calibration. - GCP:GCP_324.0000031 - ICRISAT:Vincent_Vadez - ILRI:Michael_Blummel - - - - - stover related trait - GCP:GCP_324.000003 - - - - - - - - - - The trait takes into account energy losses occurring in the animal in faeces, urine and CH4 and estimates how much energy (in calories or joules) a given unit of ground stover is actually available for meat and milk production . Value derived from chemical and in vitro analysis of dried and ground stover. - jaiswalp - 2011-08-19T03:17:28Z - stover related traits - metabolised energy - plant_trait_ontology - TO:0020081 - Units: Kcal/kg. - metabolized energy of stover - TO:0020081 - - - - - The trait takes into account energy losses occurring in the animal in faeces, urine and CH4 and estimates how much energy (in calories or joules) a given unit of ground stover is actually available for meat and milk production . Value derived from chemical and in vitro analysis of dried and ground stover. - GCP:GCP_324.0000036 - ICRISAT:Vincent_Vadez - ILRI:Michael_Blummel - - - - - stover related traits - GCP:GCP_324.000003 - - - - - - - - - - A trait to measure percent nitrogen concentration in the stover sample used for predicting crude protein (CP) content of stover by multiplication with a factor of 6.25 (CP = N x 6.25). This concentration is one of the criteria to assess the quality of fodder. Value derived from the analysis of stover using Near Infrared Reflectance Spectrophotometry (NIRS). - jaiswalp - 2011-08-19T03:20:23Z - stover related traits - plant_trait_ontology - TO:0020082 - stover nitrogen content - TO:0020082 - - - - - A trait to measure percent nitrogen concentration in the stover sample used for predicting crude protein (CP) content of stover by multiplication with a factor of 6.25 (CP = N x 6.25). This concentration is one of the criteria to assess the quality of fodder. Value derived from the analysis of stover using Near Infrared Reflectance Spectrophotometry (NIRS). - GCP:GCP_324.0000016 - ICRISAT:Vincent_Vadez - ILRI:Michael_Blummel - - - - - stover related traits - GCP:GCP_324.000003 - - - - - - - - - - A stem morphology trait (TO:0000361) which is the diameter of a stem (PO:0009047). - jaiswalp - 2011-08-19T03:31:47Z - PATO:0001334 - plant_trait_ontology - culm diameter - TO:0020083 - Refer to diameter (PATO:0001334): A length quality which is equal to the length of any straight line segment that passes through the center of a circle and whose endpoints are on the circular boundary. - stem diameter - TO:0020083 - - - - - A stem morphology trait (TO:0000361) which is the diameter of a stem (PO:0009047). - Gramene:pankaj_jaiswal - PO:0009047 - TO:moorel - - - - - - - - - - A trait to measure leaf spiralling. - jaiswalp - 2011-08-19T03:33:01Z - plant_trait_ontology - TO:0020084 - spiral leaf - TO:0020084 - - - - - A trait to measure leaf spiralling. - Gramene:pankaj_jaiswal - - - - - - - - - - A shoot development trait (TO:0000654) to measure the senescence of a stem (PO:0009047). - jaiswalp - 2011-08-19T03:34:31Z - GO:0010260 - TO_GIT:99 - culm senescence - plant_trait_ontology - TO:0020085 - Refer to organ senescence (GO:0010260): The process that occurs in an organ near the end of its active life that is associated with the dismantling of cell components and membranes, and an overall decline in metabolism. An example of this process is found in Arabidopsis thaliana. - stem senescence - TO:0020085 - - - - - A shoot development trait (TO:0000654) to measure the senescence of a stem (PO:0009047). - Gramene:pankaj_jaiswal - PO:0009047 - TO:moorel - - - - - - - - - - A trait to observe neck leaf presence. - jaiswalp - 2011-08-19T03:35:46Z - plant_trait_ontology - TO:0020086 - neck leaf presence - TO:0020086 - - - - - A trait to observe neck leaf presence. - Gramene:pankaj_jaiswal - - - - - - - - - - A trait measuring the extent of physical cracking of a root caused by genetic, environmental factors or by post-harvest storage and handling of the root or root part. - jaiswalp - 2011-08-19T03:44:21Z - plant_trait_ontology - TO:0020087 - root cracking - TO:0020087 - - - - - A trait measuring the extent of physical cracking of a root caused by genetic, environmental factors or by post-harvest storage and handling of the root or root part. - Gramene:pankaj_jaiswal - - - - - - - - - - A metabolite content related trait (TO:0000281) which is the concentration of water soluble components in a plant, as determined by refractive index. - jaiswalp - 2011-08-19T03:47:00Z - TO:0002711 - TO_GIT:100 - plant_trait_ontology - total dissolved solids content - TO:0020088 - This trait is usually highly correlated with total soluble sugar content (TO:0000340). Often determined in fresh tissue. - total water soluble content - TO:0020088 - - - - - A metabolite content related trait (TO:0000281) which is the concentration of water soluble components in a plant, as determined by refractive index. - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the iron cation (CHEBI:24875) composition in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:02:53Z - CHEBI:24873 - plant_trait_ontology - TO:0020089 - iron content trait - TO:0020089 - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the amount of zinc (CHEBI:27364) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:02:53Z - CHEBI:27364 - plant_trait_ontology - TO:0020090 - zinc content - TO:0020090 - - - - - A mineral and ion content trait (TO:0000465) which is the amount of zinc (CHEBI:27364) in a plant structure (PO:0009011). - CHEBI:27364 - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the amount of manganese (CHEBI:25154) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:02:53Z - CHEBI:25154 - plant_trait_ontology - TO:0020091 - manganese content - TO:0020091 - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the copper cation (CHEBI:23378) composition in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:02:53Z - CHEBI:23377 - Cu content - plant_trait_ontology - TO:0020092 - copper content trait - TO:0020092 - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the amount of nitrogen (CHEBI:51143) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:02:53Z - CHEBI:51143 - plant_trait_ontology - TO:0020093 - nitrogen content - TO:0020093 - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the amount of nitrate (CHEBI:17632) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:02:53Z - CHEBI:17632 - plant_trait_ontology - TO:0020094 - nitrate content - TO:0020094 - - - - - - - - - - Trait associated with any of the stomatal opening, closure, conductance, resistance process. - jaiswalp - 2011-08-19T04:06:44Z - plant_trait_ontology - TO:0020095 - stomatal process related trait - TO:0020095 - - - - - Trait associated with any of the stomatal opening, closure, conductance, resistance process. - TO:contributors - - - - - - - - - - Trait associated with directed movement of minerals and ions into, out of, within or between cells. - jaiswalp - 2011-08-19T04:08:23Z - plant_trait_ontology - TO:0020096 - mineral and ion transport trait - TO:0020096 - - - - - Trait associated with directed movement of minerals and ions into, out of, within or between cells. - TO:contributors - - - - - - - - - - A trait to measure the physiological parameters involved in the process of opening of stomatal pores. - jaiswalp - 2011-08-19T04:09:49Z - plant_trait_ontology - TO:0020097 - stomatal opening - TO:0020097 - - - - - A trait to measure the physiological parameters involved in the process of opening of stomatal pores. - Gramene:pankaj_jaiswal - TO:contributors - - - - - - - - - - The sensitivity to the nitrate content in the growth medium. - jaiswalp - 2011-08-19T04:11:32Z - plant_trait_ontology - TO:0020098 - nitrate sensitivity - TO:0020098 - - - - - The sensitivity to the nitrate content in the growth medium. - Gramene:pankaj_jaiswal - TO:contributors - - - - - - - - - - Trait associated with directed movement of nitrate into, out of, within or between cells. - jaiswalp - 2011-08-19T04:13:47Z - plant_trait_ontology - TO:0020099 - nitrate transport - TO:0020099 - - - - - Trait associated with directed movement of nitrate into, out of, within or between cells. - TO:contributors - - - - - - - - - - The total nitrate ion uptake measured in a plant or a plant part. - jaiswalp - 2011-08-19T04:13:47Z - plant_trait_ontology - TO:0020100 - nitrate uptake - TO:0020100 - - - - - The total nitrate ion uptake measured in a plant or a plant part. - TO:contributors - - - - - - - - - - Trait associated with directed movement of starch. - jaiswalp - 2011-08-19T04:13:47Z - plant_trait_ontology - TO:0020101 - starch mobilization - TO:0020101 - - - - - Trait associated with directed movement of starch. - TO:contributors - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the amount of phosphate (CHEBI:26020) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:16:58Z - CHEBI:26020 - phosphate ion content - plant_trait_ontology - TO:0020102 - phosphate content - TO:0020102 - - - - - A mineral and ion content trait (TO:0000465) which is the amount of phosphate (CHEBI:26020) in a plant structure (PO:0009011). - CHEBI:26020 - - - - - - - - - - Average maximum length of adventitious root of a plant in a study. - jaiswalp - 2011-08-19T04:18:45Z - plant_trait_ontology - TO:0020103 - adventitious root length - TO:0020103 - - - - - Average maximum length of adventitious root of a plant in a study. - TO:contributors - - - - - - - - - - Absence of adventitious roots in the plant. - jaiswalp - 2011-08-19T04:19:49Z - plant_trait_ontology - TO:0020104 - adventitious rootless - TO:0020104 - - - - - Absence of adventitious roots in the plant. - TO:contributors - - - - - - - - - - A trait to measure the CW type of ytoplasmic male sterility in plants. - jaiswalp - 2011-08-19T04:21:39Z - plant_trait_ontology - TO:0020105 - Often measured by abnormal pollen germination. - CW-cytoplasmic male sterility - TO:0020105 - - - - - A trait to measure the CW type of ytoplasmic male sterility in plants. - TO:contributors - - - - - - - - - - - - An auxin content (TO:0002672) which is the amount of indole-3-acetic acid (CHEBI:16411) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:24:06Z - CHEBI:16411 - IAA content - Indole-3-acetic acid (IAA) content - plant_trait_ontology - TO:0020106 - Indole-3-acetic acid content - TO:0020106 - - - - - - - - - - A plant cell morphology trait (TO:0002683) which is the length of a plant cell (PO:0009002). - jaiswalp - 2011-08-19T04:25:39Z - PATO:0000122 - plant_trait_ontology - TO:0020107 - Refer to length PATO:0000122: A 1-D extent quality which is equal to the distance between two points. - plant cell length - TO:0020107 - - - - - A plant cell morphology trait (TO:0002683) which is the length of a plant cell (PO:0009002). - Gramene:pankaj_jaiswal - PO:0009002 - TO:moorel - - - - - - - - - - Length of the root epidermal cell length. - jaiswalp - 2011-08-19T04:26:36Z - plant_trait_ontology - TO:0020108 - root cortical cell length - TO:0020108 - - - - - Length of the root epidermal cell length. - Gramene:pankaj_jaiswal - - - - - - - - - - Traits associated with observing effects on the development of vascular bundle. - jaiswalp - 2011-08-19T04:27:34Z - plant_trait_ontology - TO:0020109 - vascular bundle development trait - TO:0020109 - - - - - Traits associated with observing effects on the development of vascular bundle. - TO:contributors - - - - - - - - - - - - Traits associated with observing effects on the development of the gynoecium. - jaiswalp - 2011-08-19T04:29:46Z - plant_trait_ontology - TO:0020110 - gynoecium development trait - TO:0020110 - - - - - Traits associated with observing effects on the development of the gynoecium. - TO:contributors - - - - - - - - - - Traits associated with observing effects on the development of the ovary. - jaiswalp - 2011-08-19T04:30:47Z - plant_trait_ontology - TO:0020111 - ovary development trait - TO:0020111 - - - - - Traits associated with observing effects on the development of the ovary. - TO:contributors - - - - - - - - - - Accumulation of phosphate level in a plant or a plant part at toxic level. - jaiswalp - 2011-08-19T04:31:40Z - plant_trait_ontology - TO:0020112 - phosphorus toxicity - TO:0020112 - - - - - Accumulation of phosphate level in a plant or a plant part at toxic level. - TO:contributors - - - - - - - - - - true - TO:0020113 - - - - - - - - - - A phosphorus content trait (TO:0001024) which is the phosphorus cation (CHEBI:33467) composition in a shoot system (PO:0009006). - jaiswalp - 2011-08-19T04:35:33Z - plant_trait_ontology - TO:0020114 - shoot system phosphorus content - TO:0020114 - - - - - A phosphorus content trait (TO:0001024) which is the phosphorus cation (CHEBI:33467) composition in a shoot system (PO:0009006). - TO:contributors - https://search.proquest.com/docview/1426182399 - - - - - - - - - - The process to maintain the balance between dissipation and utilization of light energy to minimize generation of oxidizing molecules. - jaiswalp - 2011-08-19T04:36:34Z - plant_trait_ontology - TO:0020115 - chlorophyll fluorescence quenching - TO:0020115 - - - - - The process to maintain the balance between dissipation and utilization of light energy to minimize generation of oxidizing molecules. - TO:contributors - - - - - - - - - - The process to maintain the balance between dissipation and utilization of light energy to minimize generation of oxidizing molecules under light conditions. - jaiswalp - 2011-08-19T04:37:43Z - plant_trait_ontology - TO:0020116 - photochemical quenching - TO:0020116 - - - - - The process to maintain the balance between dissipation and utilization of light energy to minimize generation of oxidizing molecules under light conditions. - Gramene:pankaj_jaiswal - TO:contributors - - - - - - - - - - The process to maintain the balance between dissipation and utilization of light energy to minimize generation of oxidizing molecules under no light conditions. - jaiswalp - 2011-08-19T04:37:43Z - plant_trait_ontology - NPQ - TO:0020117 - non photochemical quenching - TO:0020117 - - - - - The process to maintain the balance between dissipation and utilization of light energy to minimize generation of oxidizing molecules under no light conditions. - Gramene:pankaj_jaiswal - TO:contributors - - - - - - - - - - A xanthophyll content (TO:0000301) which is the amount of neoxanthin (CHEBI:25501) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:39:32Z - CHEBI:25501 - plant_trait_ontology - TO:0020118 - neoxanthin content - TO:0020118 - - - - - - - - - - A xanthophyll content (TO:0000301) which is the amount of violaxanthin (CHEBI:27295) in a plant structure (PO:0009011). - jaiswalp - 2011-08-19T04:40:04Z - CHEBI:27295 - plant_trait_ontology - TO:0020119 - violaxanthin content - TO:0020119 - - - - - - - - - - An inflorescence bract morphology trait (TO:0000819) which is the presence of spines on an involucral bract (PO:0009045). - jaiswalp - 2011-08-19T04:50:17Z - TO_GIT:110 - spines on involucral bracts - plant_trait_ontology - TO:0020120 - involucral bract spine presence - TO:0020120 - - - - - An inflorescence bract morphology trait (TO:0000819) which is the presence of spines on an involucral bract (PO:0009045). - Gramene:pankaj_jaiswal - TO:cooperl - - - - - - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to arachnids as compared to the susceptible and/or the reference plants of the same species. - jaiswalp - 2011-08-19T04:55:55Z - plant_trait_ontology - TO:0020121 - arachnid damage resistance - TO:0020121 - - - - - An assay to determine the resistance exhibited by a plant or a group of plants (population) in response to arachnids as compared to the susceptible and/or the reference plants of the same species. - Gramene:pankaj_jaiswal - - - - - - - - - - Causal agent: Tetranychus urticae. - jaiswalp - 2011-08-19T04:56:56Z - red spider mite resistance - plant_trait_ontology - TO:0020122 - two-spotted spider mite resistance - TO:0020122 - - - - - Causal agent: Tetranychus urticae. - Gramene:pankaj_jaiswal - TO:contributors - - - - - - - - - - A trait to measure the ethanol yield from the industrial processing of feedstock (biomass). - jaiswalp - 2011-08-19T05:09:40Z - plant_trait_ontology - TO:0020123 - Often measured as volume/mass unit used by DOE-USA. It's also consistent with the common measure of fuel ethanol (volume, not mass) and common measure of biomass. Please note that ethanol yield in liters per megagram would depend on both the ethanol conversion process and the composition (not just the quantity) of the biomass. And in most cases (at least for breeding), it probably would be predicted ethanol yield instead of ethanol yield that is directly measured from a pretreatment and fermentation process. - ethanol yield from biomass - TO:0020123 - - - - - A trait to measure the ethanol yield from the industrial processing of feedstock (biomass). - Gramene:pankaj_jaiswal - TO:contributors - - - - - - - - - - A stem internode morphology trait (TO:0000756) where the stem internode (PO:0020142) is bent. - cooperl - 2015-11-24T22:16:25Z - plant_trait_ontology - TO:1000000 - Refers to bent (PATO:0000617): a shape quality inhering in a bearer by virtue of the bearer's having one or more angle(s) in its length. - stem internode bent - TO:1000000 - - - - - A stem internode morphology trait (TO:0000756) where the stem internode (PO:0020142) is bent. - TO:cooperl - - - - - - - - OBSOLETE. A trait which is associated with the size of a cotyledon. - cjmungall - 2015-11-30T17:23:54Z - seed leaf size - plant_trait_ontology - TO:1000001 - This term was obsoleted at the TermGenie Gatekeeper stage. - obsolete cotyledon size - true - TO:1000001 - - - - - OBSOLETE. A trait which is associated with the size of a cotyledon. - TO:TermGenie - - - - - seed leaf size - TO:TermGenie - - - - - - - - - - A trait which is associated with the volumetric density of a secondary xylem. - cjmungall - 2015-11-30T17:23:56Z - wood volumetric density - plant_trait_ontology - TO:1000002 - secondary xylem volumetric density - TO:1000002 - - - - - - true - - - - - A trait which is associated with the volumetric density of a secondary xylem. - TO:TermGenie - - - - - wood volumetric density - TO:TermGenie - - - - - - - - - - A trait which is associated with the color of a shoot axis node. - cjmungall - 2015-11-30T17:23:58Z - shoot axis node colour - shoot axis node relative color - plant_trait_ontology - TO:1000003 - shoot axis node color - TO:1000003 - - - - - - true - - - - - A trait which is associated with the color of a shoot axis node. - TO:TermGenie - - - - - shoot axis node colour - TO:TermGenie - - - - - shoot axis node relative color - TO:TermGenie - - - - - - - - - - An infructescence morphology trait (TO:0000920) which is the position of an infructescence (PO:0006342). - cooperl - 2015-12-10T00:13:35Z - plant_trait_ontology - TO:1000004 - infructescence position - TO:1000004 - - - - - An infructescence morphology trait (TO:0000920) which is the position of an infructescence (PO:0006342). - TO:cooperl - - - - - - - - - - - - A tuberous root tuber morphology trait (TO:1000007) which is the diameter of a tuberous root tuber (PO:0025476). - marieangelique.laporte - 2015-12-11T15:55:08Z - storage root diameter - plant_trait_ontology - root tuber diameter - TO:1000006 - tuberous root tuber diameter - TO:1000006 - - - - - A tuberous root tuber morphology trait (TO:1000007) which is the diameter of a tuberous root tuber (PO:0025476). - TO:TermGenie - - - - - storage root diameter - TO:TermGenie - - - - - root tuber diameter - TO:TermGenie - - - - - - - - - - - - A tuber morphology trait (TO:0000741) which is the quality of a tuberous root tuber (PO:0025476). - marieangelique.laporte - 2015-12-11T16:05:03Z - plant_trait_ontology - TO:1000007 - tuberous root tuber morphology trait - TO:1000007 - - - - - A tuber morphology trait (TO:0000741) which is the quality of a tuberous root tuber (PO:0025476). - TO:malaporte - - - - - - - - - - A branch morphology trait (TO:0000740) which is the position of a branch (PO:0025073). - marieangelique.laporte - 2015-12-16T09:38:12Z - shoot axis branch position - plant_trait_ontology - TO:1000008 - branch position - TO:1000008 - - - - - - true - - - - - A branch morphology trait (TO:0000740) which is the position of a branch (PO:0025073). - TO:TermGenie - - - - - shoot axis branch position - TO:TermGenie - - - - - - - - - - - - A branch morphology trait (TO:0000740) which is the angle of a branch (PO:0025073). - marieangelique.laporte - 2015-12-16T14:12:59Z - branching angle - shoot axis branch angle - plant_trait_ontology - TO:1000009 - branch angle - TO:1000009 - - - - - - true - - - - - A branch morphology trait (TO:0000740) which is the angle of a branch (PO:0025073). - TO:TermGenie - - - - - shoot axis branch angle - TO:TermGenie - - - - - - - - - - A cardinal part of a multi-tissue plant structure morphology trait (TO:0000837) which is the color of a caruncle (PO:0020060). - marieangelique.laporte - 2015-12-16T14:18:40Z - caruncle colour - plant_trait_ontology - TO:1000010 - caruncle color - TO:1000010 - - - - - - true - - - - - A cardinal part of a multi-tissue plant structure morphology trait (TO:0000837) which is the color of a caruncle (PO:0020060). - TO:TermGenie - - - - - caruncle colour - TO:TermGenie - - - - - - - - - - A fruit morphology trait (TO:0002629) which is the position of a fruit (PO:0009001). - cooperl - 2015-12-30T18:26:07Z - fruit location - fruit placement - accessory fruit position - achene position - acorn position - aggregate fruit position - akene position - anthocarp position - berry position - capsule position - caryopsides position - caryopsis position - circumcissile capsule position - citrus fruit position - coenocarp position - cypsela position - diclesium position - diplotegia position - diplotegium position - drupe position - folliceta position - follicetum position - glandes position - glans position - grain position - hesperidia position - hesperidium position - hip position - kernel position - legume position - loculicidal capsule position - loment position - lomentum position - multiple fruit position - nut position - nutlet position - pepo position - pod position - pome position - poricidal capsule position - pyxides location - pyxides position - pyxis position - samara position - schizocarp location - schizocarp position - septicidal capsule position - silicle location - silicle position - silicula position - silicula relational spatial quality - siliqua position - silique position - stone fruit position - syconia position - syconium position - syncarp position - utricle location - utricle position - plant_trait_ontology - TO:1000011 - fruit position - TO:1000011 - - - - - - true - - - - - A fruit morphology trait (TO:0002629) which is the position of a fruit (PO:0009001). - TO:cooperl - - - - - fruit location - TO:TermGenie - - - - - fruit placement - TO:TermGenie - - - - - accessory fruit position - TO:TermGenie - - - - - achene position - TO:TermGenie - - - - - acorn position - TO:TermGenie - - - - - aggregate fruit position - TO:TermGenie - - - - - akene position - TO:TermGenie - - - - - anthocarp position - TO:TermGenie - - - - - berry position - TO:TermGenie - - - - - capsule position - TO:TermGenie - - - - - caryopsides position - TO:TermGenie - - - - - caryopsis position - TO:TermGenie - - - - - circumcissile capsule position - TO:TermGenie - - - - - citrus fruit position - TO:TermGenie - - - - - coenocarp position - TO:TermGenie - - - - - cypsela position - TO:TermGenie - - - - - diclesium position - TO:TermGenie - - - - - diplotegia position - TO:TermGenie - - - - - diplotegium position - TO:TermGenie - - - - - drupe position - TO:TermGenie - - - - - folliceta position - TO:TermGenie - - - - - follicetum position - TO:TermGenie - - - - - glandes position - TO:TermGenie - - - - - glans position - TO:TermGenie - - - - - grain position - TO:TermGenie - - - - - hesperidia position - TO:TermGenie - - - - - hesperidium position - TO:TermGenie - - - - - hip position - TO:TermGenie - - - - - kernel position - TO:TermGenie - - - - - legume position - TO:TermGenie - - - - - loculicidal capsule position - TO:TermGenie - - - - - loment position - TO:TermGenie - - - - - lomentum position - TO:TermGenie - - - - - multiple fruit position - TO:TermGenie - - - - - nut position - TO:TermGenie - - - - - nutlet position - TO:TermGenie - - - - - pepo position - TO:TermGenie - - - - - pod position - TO:TermGenie - - - - - pome position - TO:TermGenie - - - - - poricidal capsule position - TO:TermGenie - - - - - pyxides location - TO:TermGenie - - - - - pyxides position - TO:TermGenie - - - - - pyxis position - TO:TermGenie - - - - - samara position - TO:TermGenie - - - - - schizocarp location - TO:TermGenie - - - - - schizocarp position - TO:TermGenie - - - - - septicidal capsule position - TO:TermGenie - - - - - silicle location - TO:TermGenie - - - - - silicle position - TO:TermGenie - - - - - silicula position - TO:TermGenie - - - - - silicula relational spatial quality - TO:TermGenie - - - - - siliqua position - TO:TermGenie - - - - - silique position - TO:TermGenie - - - - - stone fruit position - TO:TermGenie - - - - - syconia position - TO:TermGenie - - - - - syconium position - TO:TermGenie - - - - - syncarp position - TO:TermGenie - - - - - utricle location - TO:TermGenie - - - - - utricle position - TO:TermGenie - - - - - - - - - - A whole plant morphology trait (TO:0000398) which is the size of a whole plant (PO:0000003). - cooperl - 2015-12-30T19:41:19Z - planta entera (Spanish) size - bush size - frutex size - frutices size - gametophyte size - herb size - liana size - prothalli size - prothallium size - prothallus size - seedling size - shrub size - sporophyte size - suffrutex size - suffrutices size - tree size - vine size - woody clump size - plant_trait_ontology - clonal colony size - colony size - TO:1000012 - whole plant size - TO:1000012 - - - - - - true - - - - - A whole plant morphology trait (TO:0000398) which is the size of a whole plant (PO:0000003). - TO:cooperl - - - - - planta entera (Spanish) size - TO:TermGenie - - - - - bush size - TO:TermGenie - - - - - frutex size - TO:TermGenie - - - - - frutices size - TO:TermGenie - - - - - gametophyte size - TO:TermGenie - - - - - herb size - TO:TermGenie - - - - - liana size - TO:TermGenie - - - - - prothalli size - TO:TermGenie - - - - - prothallium size - TO:TermGenie - - - - - prothallus size - TO:TermGenie - - - - - seedling size - TO:TermGenie - - - - - shrub size - TO:TermGenie - - - - - sporophyte size - TO:TermGenie - - - - - suffrutex size - TO:TermGenie - - - - - suffrutices size - TO:TermGenie - - - - - tree size - TO:TermGenie - - - - - vine size - TO:TermGenie - - - - - woody clump size - TO:TermGenie - - - - - clonal colony size - TO:TermGenie - - - - - colony size - TO:TermGenie - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf lamina lobe (PO:0025517). - marieangelique.laporte - 2016-01-05T10:49:33Z - leaf lobe morphology trait - plant_trait_ontology - TO:1000013 - leaf lamina lobe morphology trait - TO:1000013 - - - - - - true - - - - - A cardinal organ part morphology trait (TO:0000754) which is a quality of a leaf lamina lobe (PO:0025517). - TO:TermGenie - - - - - - - - - - - - A leaf lamina lobe morphology trait (TO:1000013) which is the length of a leaf lamina lobe (PO:0025517). - marieangelique.laporte - 2016-01-05T11:01:12Z - leaf lobe length - plant_trait_ontology - TO:1000014 - leaf lamina lobe length - TO:1000014 - - - - - - true - - - - - A leaf lamina lobe morphology trait (TO:1000013) which is the length of a leaf lamina lobe (PO:0025517). - TO:TermGenie - - - - - - - - - - - - A leaf lamina lobe morphology trait (TO:1000013) which is the width of a leaf lamina lobe (PO:0025517). - marieangelique.laporte - 2016-01-05T11:04:25Z - plant_trait_ontology - leaf lobe width - TO:1000015 - leaf lamina lobe width - TO:1000015 - - - - - - true - - - - - A leaf lamina lobe morphology trait (TO:1000013) which is the width of a leaf lamina lobe (PO:0025517). - TO:TermGenie - - - - - - - - - - A plant ovary morphology (TO:10000021) which is the color of a plant ovary (PO:0009072). - marieangelique.laporte - 2016-01-05 - plant ovary colour - plant ovary relative color - plant_trait_ontology - TO:1000016 - plant ovary color - TO:1000016 - - - - - A plant ovary morphology (TO:10000021) which is the color of a plant ovary (PO:0009072). - TO:TermGenie - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the color of a stem cortex (PO:0025612). - marieangelique.laporte - 2016-01-05T14:08:59Z - stem cortex colour - stem cortex relative color - plant_trait_ontology - TO:1000017 - stem cortex color - TO:1000017 - - - - - - true - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the color of a stem cortex (PO:0025612). - TO:TermGenie - - - - - stem cortex colour - TO:TermGenie - - - - - stem cortex relative color - TO:TermGenie - - - - - - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the color of a stem epidermis (PO:0025178). - marieangelique.laporte - 2016-01-05T14:11:24Z - stem epidermis colour - stem epidermis relative color - plant_trait_ontology - TO:1000018 - stem epidermis color - TO:1000018 - - - - - - true - - - - - A portion of plant tissue morphology trait (TO:0000843) which is the color of a stem epidermis (PO:0025178). - TO:TermGenie - - - - - stem epidermis colour - TO:TermGenie - - - - - stem epidermis relative color - TO:TermGenie - - - - - - - - - - A flower color trait (TO:0000537) which is the color of a disk flower (PO:0025332). - marieangelique.laporte - 2016-01-05T14:21:10Z - disc floret color - disk floret color - plant_trait_ontology - TO:1000019 - disk flower color - TO:1000019 - - - - - - true - - - - - A flower color trait (TO:0000537) which is the color of a disk flower (PO:0025332). - TO:TermGenie - - - - - disc floret color - TO:TermGenie - - - - - disk floret color - TO:TermGenie - - - - - - - - - - A cardinal organ part morphology trait (TO:0000754) which is the length of a stipule (PO:0020041). - marieangelique.laporte - 2016-01-05T14:57:02Z - plant_trait_ontology - TO:1000020 - stipule length - TO:1000020 - - - - - - true - - - - - A cardinal organ part morphology trait (TO:0000754) which is the length of a stipule (PO:0020041). - TO:TermGenie - - - - - - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a plant ovary (PO:0009072). - cooperl - 2016-01-06T01:44:00Z - Poaceae ovary morphology - Zea ovary morphology - plant_trait_ontology - TO:1000021 - plant ovary morphology - TO:1000021 - - - - - - true - - - - - A plant structure morphology trait (TO:0000839) which is a quality of a plant ovary (PO:0009072). - TO:TermGenie - - - - - Poaceae ovary morphology - TO:TermGenie - - - - - Zea ovary morphology - TO:TermGenie - - - - - - - - - - - - - - - - - - A collective plant organ structure trait (TO:0000842) which is the quality of an anther (PO:0009066). - meiera - 2016-02-20T00:23:55Z - TO_GIT:385 - plant_trait_ontology - TO:1000022 - anther morphology trait - TO:1000022 - - - - - A collective plant organ structure trait (TO:0000842) which is the quality of an anther (PO:0009066). - TO:austinmeier - - - - - - - - - - A flower bract morphology trait (TO:0000079) which is the quality of a lemma (PO:0009037). - cooperl - 2016-03-16 - TO_GIT:390 - plant_trait_ontology - TO:1000023 - lemma morphology trait - TO:1000023 - - - - - A flower bract morphology trait (TO:0000079) which is the quality of a lemma (PO:0009037). - PO:0009037 - TO:cooperl - - - - - - - - - - A flower bract morphology trait (TO:0000079) which is the quality of a palea (PO:0009038). - cooperl - 2016-03-17 - TO_GIT:390 - plant_trait_ontology - TO:1000024 - palea morphology trait - TO:1000024 - - - - - A flower bract morphology trait (TO:0000079) which is the quality of a palea (PO:0009038). - PO:0009038 - TO:cooperl - - - - - - - - - - An aluminium content trait (TO:0000995) which is the aluminium cation (CHEBI:63062) composition in a root system (PO:0025025). - TO_GIT:412 - root system Al content (exact) - plant_trait_ontology - root Al content (related) - TO:1000025 - root system aluminum content - TO:1000025 - - - - - An aluminium content trait (TO:0000995) which is the aluminium cation (CHEBI:63062) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - An arsenic content trait (TO:0006054) which is the arsenic cation (CHEBI:35829) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root As content (related) - TO:1000026 - root system arsenic content - TO:1000026 - - - - - An arsenic content trait (TO:0006054) which is the arsenic cation (CHEBI:35829) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A boron content trait (TO:0006043) which is the boron cation (CHEBI:30168) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root B content (related) - TO:1000027 - root system boron content - TO:1000027 - - - - - A boron content trait (TO:0006043) which is the boron cation (CHEBI:30168) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A barium content trait (TO:0001043) which is the barium cation (CHEBI:39125) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Ba content (related) - TO:1000028 - root system barium content - TO:1000028 - - - - - A barium content trait (TO:0001043) which is the barium cation (CHEBI:39125) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A calcium content trait (TO:0006047) which is the calcium cation (CHEBI:39123) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Ca content (related) - TO:1000029 - root system calcium content - TO:1000029 - - - - - A calcium content trait (TO:0006047) which is the calcium cation (CHEBI:39123) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A cadmium content trait (TO:0006059) which is the cadmium cation (CHEBI:63063) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Cd content (related) - TO:1000030 - root system cadmium content - TO:1000030 - - - - - A cadmium content trait (TO:0006059) which is the cadmium cation (CHEBI:63063) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A cobalt content trait (TO:0001044) which is the cobalt cation (CHEBI:23336) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Co content (related) - TO:1000031 - root system cobalt content - TO:1000031 - - - - - A cobalt content trait (TO:0001044) which is the cobalt cation (CHEBI:23336) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A chromium content trait (TO:0001045) which is the chromium cation (CHEBI:33516) composition in a root system (PO:0025025). - plant_trait_ontology - root Cr content (related) - TO:1000032 - root system chromium content - TO:1000032 - - - - - A chromium content trait (TO:0001045) which is the chromium cation (CHEBI:33516) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A copper content trait (TO:0020092) which is the copper cation (CHEBI:23378) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Cu content (related) - TO:1000033 - root system copper content - TO:1000033 - - - - - A copper content trait (TO:0020092) which is the copper cation (CHEBI:23378) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - An iron content trait (TO:0020089) which is the iron cation (CHEBI:24875) composition in a root system (PO:0025025). - plant_trait_ontology - root Fe content (related) - TO:1000034 - root system iron content - TO:1000034 - - - - - An iron content trait (TO:0020089) which is the iron cation (CHEBI:24875) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - An iodine content trait (TO:0001046) which is the iodine cation (CHEBI:33116) in a root system (PO:0025025). - plant_trait_ontology - root I content (related) - TO:1000035 - root system iodine content - TO:1000035 - - - - - An iodine content trait (TO:0001046) which is the iodine cation (CHEBI:33116) in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A potassium content trait (TO:0000609) which is the potassium cation (CHEBI:29103) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root K content (related) - TO:1000036 - root system potassium content - TO:1000036 - - - - - A potassium content trait (TO:0000609) which is the potassium cation (CHEBI:29103) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A lithium content trait (TO:0006042) which is the lithium cation (CHEBI:49713) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Li content (related) - TO:1000037 - root system lithium content - TO:1000037 - - - - - A lithium content trait (TO:0006042) which is the lithium cation (CHEBI:49713) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A magnesium content trait (TO:0006044) which is the magnesium cation (CHEBI:18420) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Mg content (related) - TO:1000038 - root system magnesium content - TO:1000038 - - - - - A magnesium content trait (TO:0006044) which is the magnesium cation (CHEBI:18420) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A manganese content trait (TO:0020091) which is the manganese cation (CHEBI:29035) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Mn content (related) - TO:1000039 - root system manganese content - TO:1000039 - - - - - A manganese content trait (TO:0020091) which is the manganese cation (CHEBI:29035) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A molybdenum content trait (TO:0006056) which is the molybdenum cation (CHEBI:37239) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Mo content (related) - TO:1000040 - root system molybdenum content - TO:1000040 - - - - - A molybdenum content trait (TO:0006056) which is the molybdenum cation (CHEBI:37239) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A sodium content trait (TO:0000608) which is the sodium cation (CHEBI:29101) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Na content - TO:1000041 - root system sodium content - TO:1000041 - - - - - A sodium content trait (TO:0000608) which is the sodium cation (CHEBI:29101) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A nickel content trait (TO:0006051) which is the nickel cation (CHEBI:25516) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Ni content (related) - TO:1000042 - root system nickel content - TO:1000042 - - - - - A nickel content trait (TO:0006051) which is the nickel cation (CHEBI:25516) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A phosphorus content trait TO:0001024 which is the phosphorus cation (CHEBI:33467) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root P content (related) - TO:1000043 - root system phosphorus content - TO:1000043 - - - - - A phosphorus content trait TO:0001024 which is the phosphorus cation (CHEBI:33467) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A lead content trait (TO:0001047) which is the lead cation (CHEBI:30180) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Pb content - TO:1000044 - root system lead content - TO:1000044 - - - - - A lead content trait (TO:0001047) which is the lead cation (CHEBI:30180) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A rubidium content trait (TO:0001049) which is the rubidium cation (CHEBI:49847) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Rb content (related) - TO:1000045 - root system rubidium content - TO:1000045 - - - - - A rubidium content trait (TO:0001049) which is the rubidium cation (CHEBI:49847) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A sulfur content trait (TO:0006046) which is the sulfur cation (CHEBI:29832) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root S content (related) - TO:1000046 - root system sulfur content - TO:1000046 - - - - - A sulfur content trait (TO:0006046) which is the sulfur cation (CHEBI:29832) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A selenium content trait (TO:0006055) which is the selenium ion (CHEBI:60250) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Se content (related) - TO:1000047 - root system selenium content - TO:1000047 - - - - - A selenium content trait (TO:0006055) which is the selenium ion (CHEBI:60250) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A silicon content trait (TO:0001048) which is the silicon cation (CHEBI:30584) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Si content (related) - TO:1000048 - root system silicon content - TO:1000048 - - - - - A silicon content trait (TO:0001048) which is the silicon cation (CHEBI:30584) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A mineral and ion content trait (TO:0000465) which is the strontium ion (CHEBI:39130) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Sr content (related) - TO:1000049 - root system strontium content - TO:1000049 - - - - - A mineral and ion content trait (TO:0000465) which is the strontium ion (CHEBI:39130) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A zinc content trait (TO:0020090) which is the zinc ion (CHEBI:27365) composition in a root system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - root Zn content (related) - TO:1000050 - root system zinc content - TO:1000050 - - - - - A zinc content trait (TO:0020090) which is the zinc ion (CHEBI:27365) composition in a root system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - An aluminium content trait (TO:0000995) which is the aluminium cation (CHEBI:63062) composition in a shoot system (PO:0009006). - TO_GIT:412 - shoot system Al content (exact) - plant_trait_ontology - shoot Al content (related) - TO:1000051 - shoot system aluminum content - TO:1000051 - - - - - An aluminium content trait (TO:0000995) which is the aluminium cation (CHEBI:63062) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - An arsenic content trait (TO:0006054) which is the arsenic cation (CHEBI:35829) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot As content (related) - TO:1000052 - shoot system arsenic content - TO:1000052 - - - - - An arsenic content trait (TO:0006054) which is the arsenic cation (CHEBI:35829) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A boron content trait (TO:0006043) which is the boron cation (CHEBI:30168) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot B content (related) - TO:1000053 - shoot system boron content - TO:1000053 - - - - - A boron content trait (TO:0006043) which is the boron cation (CHEBI:30168) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A barium content trait (TO:0001043) which is the barium cation (CHEBI:39125) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Ba content (related) - TO:1000054 - shoot system barium content - TO:1000054 - - - - - A barium content trait (TO:0001043) which is the barium cation (CHEBI:39125) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A calcium content trait (TO:0006047) which is the calcium cation (CHEBI:39123) composition in a shoot system (PO:0025025). - TO_GIT:412 - plant_trait_ontology - shoot Ca content (related) - TO:1000055 - shoot system calcium content - TO:1000055 - - - - - A calcium content trait (TO:0006047) which is the calcium cation (CHEBI:39123) composition in a shoot system (PO:0025025). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A cadmium content trait (TO:0006059) which is the cadmium cation (CHEBI:63063) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Cd content (related) - TO:1000056 - shoot system cadmium content - TO:1000056 - - - - - A cadmium content trait (TO:0006059) which is the cadmium cation (CHEBI:63063) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A cobalt content trait (TO:0001044) which is the cobalt cation (CHEBI:23336) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Co content - TO:1000057 - shoot system cobalt content - TO:1000057 - - - - - A cobalt content trait (TO:0001044) which is the cobalt cation (CHEBI:23336) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A chromium content trait (TO:0001045) which is the chromium cation (CHEBI:33516) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Cr content (related) - TO:1000058 - shoot system chromium content - TO:1000058 - - - - - A chromium content trait (TO:0001045) which is the chromium cation (CHEBI:33516) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A copper content trait (TO:0020092) which is the copper cation (CHEBI:23378) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Cu content (related) - TO:1000059 - shoot system copper content - TO:1000059 - - - - - A copper content trait (TO:0020092) which is the copper cation (CHEBI:23378) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - An iron content trait (TO:0020089) which is the iron cation (CHEBI:24875) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Fe content (related) - TO:1000060 - shoot system iron content - TO:1000060 - - - - - An iron content trait (TO:0020089) which is the iron cation (CHEBI:24875) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - An iodine content trait (TO:0001046) which is the iodine cation (CHEBI:33116) in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot I content (related) - TO:1000061 - shoot system iodine content - TO:1000061 - - - - - An iodine content trait (TO:0001046) which is the iodine cation (CHEBI:33116) in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A lithium content trait (TO:0006042) which is the lithium cation (CHEBI:49713) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Li content (related) - TO:1000062 - shoot system lithium content - TO:1000062 - - - - - A lithium content trait (TO:0006042) which is the lithium cation (CHEBI:49713) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A magnesium content trait (TO:0006044) which is the magnesium cation (CHEBI:18420) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Mg content (related) - TO:1000063 - shoot system magnesium content - TO:1000063 - - - - - A magnesium content trait (TO:0006044) which is the magnesium cation (CHEBI:18420) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A manganese content trait (TO:0020091) which is the manganese cation (CHEBI:29035) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Mn content (related) - TO:1000064 - shoot system manganese content - TO:1000064 - - - - - A manganese content trait (TO:0020091) which is the manganese cation (CHEBI:29035) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A molybdenum content trait (TO:0006056) which is the (CHEBI:37239) in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Mo content (related) - TO:1000065 - shoot system molybdenum content - TO:1000065 - - - - - A molybdenum content trait (TO:0006056) which is the (CHEBI:37239) in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A nickel content trait (TO:0006051) which is the nickel cation (CHEBI:25516) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Ni content (related) - TO:1000066 - shoot system nickel content - TO:1000066 - - - - - A nickel content trait (TO:0006051) which is the nickel cation (CHEBI:25516) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A lead content trait (TO:0001047) which is the lead cation (CHEBI:30180) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Pb content (related) - TO:1000067 - shoot system lead content - TO:1000067 - - - - - A lead content trait (TO:0001047) which is the lead cation (CHEBI:30180) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A rubidium content trait (TO:0001049) which is the rubidium cation (CHEBI:49847) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Rb content (related) - TO:1000068 - shoot system rubidium content - TO:1000068 - - - - - A rubidium content trait (TO:0001049) which is the rubidium cation (CHEBI:49847) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A sulfur content trait (TO:0006046) which is the sulfur cation (CHEBI:29832) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot S content (related) - TO:1000069 - shoot system sulfur content - TO:1000069 - - - - - A sulfur content trait (TO:0006046) which is the sulfur cation (CHEBI:29832) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A selenium content trait (TO:0006055) which is the selenium ion (CHEBI:60250) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Se content (related) - TO:1000070 - shoot system selenium content - TO:1000070 - - - - - A selenium content trait (TO:0006055) which is the selenium ion (CHEBI:60250) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A silicon content trait (TO:0001048) which is the silicon cation (CHEBI:30584) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Si content (related) - TO:1000071 - shoot system silicon content - TO:1000071 - - - - - A silicon content trait (TO:0001048) which is the silicon cation (CHEBI:30584) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A strontium content trait (TO:0001050) which is the strontium ion (CHEBI:39130) composition in a shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shoot Sr content (related) - TO:1000072 - shoot system strontium content - TO:1000072 - - - - - A strontium content trait (TO:0001050) which is the strontium ion (CHEBI:39130) composition in a shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - - - A zinc content trait (TO:0020090) which is the zinc ion (CHEBI:27365) composition in the shoot system (PO:0009006). - TO_GIT:412 - plant_trait_ontology - shooCFt Zn content (related) - TO:1000073 - shoot system zinc content - TO:1000073 - - - - - A zinc content trait (TO:0020090) which is the zinc ion (CHEBI:27365) composition in the shoot system (PO:0009006). - TO:cooperl - https://search.proquest.com/docview/1426182399 - - - - - - - - plant_trait_ontology - 1.2 - cooperl - - - - - - - diff --git a/components/klab.component.alignment/biodev/sweet.owl b/components/klab.component.alignment/biodev/sweet.owl deleted file mode 100644 index e95840bda0..0000000000 --- a/components/klab.component.alignment/biodev/sweet.owl +++ /dev/null @@ -1,73072 +0,0 @@ - - - - SWEET Ontology - 3.2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Behavior - - - - - - - - - Census - - - - - - - - - CivilDisturbance - - - - - - - - - Colonization - - - - - - - - - ConsumptiveUse - - - - - - - - - EnergyEndUse - - - - - - - - - HumanActivity - hum:HumanActivity - huma:HumanActivity - human:HumanActivity - - - - - - - - - - HumanCapital - - - - - - - - - HumanNeed - human:HumanNeed - - - - - - - - - - Manned - - - - - - - - - Mapping - - - - - - - - - Profession - - - - - - - - - PsychologicalParameter - - - - - - - - - Recreation - - - - - - - - - Service - huma:Service - - - - - - - - - SocialActivity - - - - - - - - - SocialBehavior - human:SocialBehavior - - - - - - - - - SpaceCooling - - - - - - - - - SpaceHeating - - - - - - - - - Unmanned - - - - - - - - - WaterHeating - - - - - - - - - Work - - - - - - - - - - agri:Agriculture - - - - - - - - - agri:AnimalProduction - - - - - - - - - - agri:Apiculture - - - - - - - - - - - - - - - agri:Aquaculture - - - - - - - - - - - - - - - agri:Beekeeping - - - - - - - - - agri:Breeding - - - - - - - - - agri:CropProduction - - - - - - - - - agri:Cultivation - - - - - - - - - agri:DripIrrigation - - - - - - - - - - agri:FishProduction - - - - - - - - - agri:Fishing - - - - - - - - - agri:Harvesting - - - - - - - - - agri:Horticulture - - - - - - - - - - - - - - - agri:Irrigation - - - - - - - - - agri:Logging - - - - - - - - - agri:Overfishing - - - - - - - - - agri:PlantProduction - - - - - - - - - - - - - - - agri:Sericulture - - - - - - - - - - agri:ShellfishProduction - - - - - - - - - agri:SoilCultivation - - - - - - - - - Assembly - - - - - - - - - CapacityBuiiding - - - - - - - - - ClearCutting - - - - - - - - - Construction - - - - - - - - - ConsumptiveUse - - - - - - - - - Demand - - - - - - - - - Development - - - - - - - - - - Dig - - - - - - - - - - Drill - - - - - - - - - EngineeringActivity - - - - - - - - - Exploration - - - - - - - - - - Extraction - - - - - - - - - Forestry - - - - - - - - - FossilFuelBurning - - - - - - - - - Grading - - - - - - - - - - InSitu - - - - - - - - - Industrialization - - - - - - - - - LandUse - comm:LandUse - - - - - - - - - Manafacturing - - - - - - - - - Management - com:Management - comm:Management - - - - - - - - - - - - - - - ManagementSystem - - - - - - - - - - Mining - - - - - - - - - OnSite - - - - - - - - - Packaging - - - - - - - - - Processing - - - - - - - - - Production - comm:Production - - - - - - - - - Productivity - - - - - - - - - Prospecting - - - - - - - - - ResourceExtraction - - - - - - - - - StripMining - - - - - - - - - - - - - - - SustainableDevelopment - - - - - - - - - Urbanization - - - - - - - - - Allocation - - - - - - - - - Attribute - deci:Attribute - - - - - - - - - BeliefNetwork - - - - - - - - - Choice - - - - - - - - - ConsumerBehavior - - - - - - - - - ControlStrategy - dec:ControlStrategy - - - - - - - - - Criteria - - - - - - - - - - DSS - - - - - - - - - Decision - - - - - - - - - DecisionActivity - - - - - - - - - - DecisionMaker - deci:DecisionMaker - - - - - - - - - DecisionSupportSystem - - - - - - - - - - DecisionTree - - - - - - - - - - EnvironmentalControlObjective - - - - - - - - - Evaluation - - - - - - - - - GroupConsensus - - - - - - - - - LocationAllocation - - - - - - - - - Multiattribute - - - - - - - - - Multiobjective - - - - - - - - - MultipleDecisionMaker - - - - - - - - - Objective - deci:Objective - - - - - - - - - - - Optimization - - - - - - - - - - Optimize - - - - - - - - - Preference - - - - - - - - - Ranking - - - - - - - - - ResourceAllocation - - - - - - - - - Scenario - - - - - - - - - Screening - - - - - - - - - SolutionStrategy - - - - - - - - - Valuation - - - - - - - - - Weighting - - - - - - - - - - val:CEMS - - - - - - - - - - val:CarbonNeutral - - - - - - - - - val:CarbonNeutrality - - - - - - - - - val:ContinousEmissionMonitoringSystem - - - - - - - - - val:CostBenefitAnalysis - - - - - - - - - val:EmissionInventory - - - - - - - - - val:EnvironmentalAssessment - - - - - - - - - val:EnvironmentalImpactStatement - - - - - - - - - - val:EnvironmentalMonitoring - - - - - - - - - - val:HRA - - - - - - - - - val:HealthRiskAssessment - - - - - - - - - val:ImpactAssessment - - - - - - - - - - - val:NOAEL - - - - - - - - - - - val:NOEL - - - - - - - - - - val:NSR - - - - - - - - - val:NationalToxicsInventory - - - - - - - - - val:NaturalCapital - - - - - - - - - val:NewSourceReview - - - - - - - - - - val:NoObservedAdverseEffectLevel - - - - - - - - - - val:NoObservedEffectLevel - - - - - - - - - val:StatusAssessment - - - - - - - - - val:SuitabilityAssessment - - - - - - - - - - - val:URF - - - - - - - - - - val:UnitRiskFactor - - - - - - - - - Conservation - cons:Conservation - - - - - - - - - HabitatManagement - - - - - - - - - - - - - - - LandManagement - - - - - - - - - LandPreservation - - - - - - - - - LandTenure - - - - - - - - - - - Protection - - - - - - - - - Stewardship - - - - - - - - - - Sustainability - cons:Sustainability - - - - - - - - - Sustainable - cons:Sustainable - - - - - - - - - Abatement - - - - - - - - - Afforestation - - - - - - - - - - AirTreatmentProcess - - - - - - - - - - BACT - - - - - - - - - BestAvailablControlTechnology - - - - - - - - - Biosequestration - - - - - - - - - CapAndTrade - - - - - - - - - CarbonOffset - - - - - - - - - CarbonSequestration - - - - - - - - - CloudSeeding - - - - - - - - - Compliance - - - - - - - - - ControlledBurn - - - - - - - - - Distillation - - - - - - - - - DryScrubbing - - - - - - - - - EnvironmentalControlStrategy - con:EnvironmentalControlStrategy - - - - - - - - - Flocculation - - - - - - - - - - MACT - - - - - - - - - MaximumAchievableControlTechnology - - - - - - - - - Pretreatment - - - - - - - - - PrimaryTreatment - - - - - - - - - Reclamation - - - - - - - - - Reforestation - - - - - - - - - Remediation - - - - - - - - - Restoration - - - - - - - - - Revegetation - - - - - - - - - Scrubbing - - - - - - - - - SecondaryTreatment - - - - - - - - - Sequester - - - - - - - - - StateImplementationPlan - - - - - - - - - TertiaryTreatment - - - - - - - - - Treatment - - - - - - - - - WastewaterTreatment - - - - - - - - - WaterManagement - - - - - - - - - - WaterTreatmentProcess - - - - - - - - - WellInjection - - - - - - - - - WetScrubbing - - - - - - - - - - AAQS - - - - - - - - - - ADI - - - - - - - - - - ATCM - - - - - - - - - AcceptableDailyIntake - - - - - - - - - AcceptableLevel - - - - - - - - - AirQualityStandard - - - - - - - - - AirborneToxicControlMeasure - - - - - - - - - AmbientAirQualityStandard - - - - - - - - - EnvironmentalLaw - - - - - - - - - - EnvironmentalStandard - - - - - - - - - EnvironmentalStandardsBody - - - - - - - - - - NSPS - - - - - - - - - - NationalAmbientAirQualityStandard - - - - - - - - - NewSourcePerformanceStandard - - - - - - - - - - - - NonAttainmentArea - - - - - - - - - - REC - - - - - - - - - - REL - - - - - - - - - - - ReferenceDose - - - - - - - - - ReferenceExposureConcentration - - - - - - - - - ReferenceExposureLevel - - - - - - - - - - RfD - - - - - - - - - WaterQualityStandard - - - - - - - - - - AdministrativeRegion - jur:AdministrativeRegion - - - - - - - - - - CSA - - - - - - - - - - - - - - - City - jur:City - - - - - - - - - - - Civil - jur2:Civil - - - - - - - - - Civilian - - - - - - - - - CombinedStatisticalArea - - - - - - - - - Continent - - - - - - - - - Country - jur:Country - - - - - - - - - - - - - - - County - jur:County - - - - - - - - - Enforcement - - - - - - - - - - Federal - - - - - - - - - - - - - - - FederalGoverningBody - jur2:FederalGoverningBody - - - - - - - - - GoverningBody - - - - - - - - - GoverningBodyProduct - - - - - - - - - Government - - - - - - - - - GovtActivity - - - - - - - - - - HumanLaw - jur:HumanLaw - - - - - - - - - Jurisdiction - juri:Jurisdiction - - - - - - - - - - MSA - - - - - - - - - - - - - - - MetropolitanArea - - - - - - - - - MetropolitanStatisticalArea - - - - - - - - - Military - jur2:Military - - - - - - - - - Penalty - - - - - - - - - Permit - - - - - - - - - Policy - - - - - - - - - - - - - - - Province - - - - - - - - - Regulation - - - - - - - - - - SAR - - - - - - - - - - SMSA - - - - - - - - - - - - - - - SpecialAdministrationRegion - - - - - - - - - Standard - jur:Standard - - - - - - - - - StandardMetropolitanStatisticalArea - - - - - - - - - StandardsBody - jur:StandardsBody - - - - - - - - - - - - - - - State - jur:State - - - - - - - - - Treaty - jur:Treaty - - - - - - - - - UrbanArea - - - - - - - - - Anatomy - - - - - - - - - - AtmosphericScience - - - - - - - - - BehavioralScience - - - - - - - - - Biochemistry - - - - - - - - - - Biogeochemistry - - - - - - - - - Biology - know:Biology - - - - - - - - - Chemistry - know:Chemistry - - - - - - - - - - Climatology - - - - - - - - - Dynamics - know:Dynamics - - - - - - - - - Ecology - - - - - - - - - Economics - - - - - - - - - - - - - - - Epidemiology - - - - - - - - - Genetics - - - - - - - - - - Geochemistry - - - - - - - - - - - - Geodesy - - - - - - - - - - GeodeticScience - - - - - - - - - - Geodetics - - - - - - - - - Geology - know:Geology - - - - - - - - - - Geophysics - - - - - - - - - - - - - - - HumanDimension - - - - - - - - - - Hydrology - know:Hydrology - - - - - - - - - KnowledgeDomain - know:KnowledgeDomain - - - - - - - - - LandscapeEcology - - - - - - - - - Limnology - - - - - - - - - Lithology - - - - - - - - - - - MarineScience - - - - - - - - - Mechanics - - - - - - - - - Meteorology - - - - - - - - - Mineralogy - - - - - - - - - - - - - - - Neotectonics - - - - - - - - - - - - - - - NutritionScience - - - - - - - - - - Oceanography - - - - - - - - - - Oceanology - - - - - - - - - Paleoclimatology - - - - - - - - - Paleontology - - - - - - - - - Petrography - - - - - - - - - - - - - - - Petrology - - - - - - - - - Phenology - - - - - - - - - Photochemistry - - - - - - - - - Physics - know:Physics - - - - - - - - - Physiology - - - - - - - - - - PlanetaryScience - - - - - - - - - Planetology - - - - - - - - - - - - - - - PlateTectonics - - - - - - - - - Psychology - - - - - - - - - Rheology - - - - - - - - - Science - - - - - - - - - Seismology - - - - - - - - - Sociology - - - - - - - - - Stratigraphy - - - - - - - - - Tectonics - - - - - - - - - - - - - - - Thermodynamics - know:Thermodynamics - - - - - - - - - Toxicology - - - - - - - - - res:Analysis - - - - - - - - - res:AppliedResearch - - - - - - - - - - res:Assessment - - - - - - - - - res:Campaign - - - - - - - - - res:Correction - - - - - - - - - res:Difference - - - - - - - - - - res:EndToEndEnvironment - - - - - - - - - res:Evidence - - - - - - - - - - res:Experiment - - - - - - - - - res:ExperimentActivity - - - - - - - - - res:HypothesisTest - - - - - - - - - - res:Investigate - - - - - - - - - res:Investigation - - - - - - - - - - - - - res:LaboratoryEnvironment - - - - - - - - - res:MissionTestedEnvironment - - - - - - - - - - res:Monitor - - - - - - - - - res:Monitoring - - - - - - - - - - - res:Observation - - - - - - - - - - res:Observe - - - - - - - - - res:OperationalEnvironment - - - - - - - - - res:Project - - - - - - - - - res:Proof - - - - - - - - - - res:ProofOfConcept - - - - - - - - - res:Publication - - - - - - - - - res:Realization - - - - - - - - - res:RepresentativeEnvironment - - - - - - - - - res:Research - rese:Research - - - - - - - - - res:ResearchSetting - - - - - - - - - res:Residual - - - - - - - - - res:Result - - - - - - - - - res:Sample - - - - - - - - - res:Validation - - - - - - - - - res:Variable - - - - - - - - - res:VerifiedValidatedEnvironment - - - - - - - - - res:WeightOfEvidence - - - - - - - - - - TRL - - - - - - - - - - - - - - - - - - - 1 - - - TRL1 - - - - - - - - - - - - - - - - - - - 2 - - - TRL2 - - - - - - - - - - - - - - - - - - - 3 - - - TRL3 - - - - - - - - - - - - - - - - - - - 4 - - - TRL4 - - - - - - - - - - - - - - - - - - - 5 - - - TRL5 - - - - - - - - - - - - - - - - - - - 6 - - - TRL6 - - - - - - - - - - - - - - - - - - - 7 - - - TRL7 - - - - - - - - - - - - - - - - - - - 8 - - - TRL8 - - - - - - - - - - - - - - - - - - - 9 - - - TRL9 - - - - - - - - - Technology - - - - - - - - - - - - - - - TechnologyReadiness - - - - - - - - - - - - - - - TechnologyReadinessLevel - - - - - - - - - AirTraffic - tran:AirTraffic - - - - - - - - - - - - - - - AirTrafficControl - - - - - - - - - AirTransportation - - - - - - - - - Arrival - - - - - - - - - Ascent - - - - - - - - - Aviation - - - - - - - - - - - - - - - CivilAviation - - - - - - - - - Departure - - - - - - - - - Descent - - - - - - - - - Evacuation - - - - - - - - - Flight - - - - - - - - - GroundTransportation - - - - - - - - - Landing - - - - - - - - - Liftoff - - - - - - - - - - - - - - - MilitaryAviation - - - - - - - - - SpaceProgram - - - - - - - - - SpaceTravel - - - - - - - - - Takeoff - - - - - - - - - Transit - - - - - - - - - Transport - - - - - - - - - Transportation - tran:Transportation - - - - - - - - - - chem:Air - - - - - - - - - - - chem:BDOC - - - - - - - - - - chem:BiodegradableDissolvedOrganicCarbon - - - - - - - - - - chem:Chemical - matr:Chemical - - - - - - - - - chem:ChemicalSubstance - matr:ChemicalSubstance - - - - - - - - - - chem:DO - - - - - - - - - - chem:DOC - - - - - - - - - - - - - - - chem:DissolvedGas - - - - - - - - - chem:DissolvedOrganicCarbon - - - - - - - - - chem:DissolvedOxygen - - - - - - - - - - chem:DissolvedSolid - - - - - - - - - - - - - - - chem:DissolvedSubstance - - - - - - - - - - - - - - - - chem:GreenhouseGas - - - - - - - - - - - chem:Inorganic - - - - - - - - - - - chem:InorganicSubstance - - - - - - - - - chem:Medium - matr:Medium - - - - - - - - - - - chem:MixedChemicalSubstance - - - - - - - - - - chem:Mixture - - - - - - - - - - - - - - - - - - - - - - chem:NeutralGas - - - - - - - - - chem:OrganicLoading - - - - - - - - - - - - - - - chem:SolidSubstance - subs:SolidSubstance - - - - - - - - - - chem:Solution - - - - - - - - - chem:Substance - subs:Substance - - - - - - - - - - - - - - - chem:SuspendedGas - - - - - - - - - - chem:SuspendedSolid - - - - - - - - - - - - - - - chem:SuspendedSubstance - - - - - - - - - - - - - - - chem:TraceGas - - - - - - - - - - - - - - - chem:TraceSubstance - - - - - - - - - aero:Aerosol - poll:Aerosol - - - - - - - - - aero:Ash - - - - - - - - - - aero:BlackCarbon - - - - - - - - - - aero:CCN - - - - - - - - - aero:CloudCondensationNuclei - poll:CloudCondensationNuclei - - - - - - - - - - - - - - - aero:CondensationNuclei - - - - - - - - - - - - - - - aero:ContinentalAerosol - - - - - - - - - aero:Dust - pol:Dust - - - - - - - - - aero:FugitiveDust - - - - - - - - - - aero:Grain - - - - - - - - - - - - - - - - - - - aero:PM1 - - - - - - - - - - - - - - - - - - - aero:PM10 - - - - - - - - - - - - - - - - - - - aero:PM2point5 - - - - - - - - - aero:Particulate - - - - - - - - - aero:Pollen - - - - - - - - - aero:Smoke - - - - - - - - - aero:Soot - - - - - - - - - aero:Spray - - - - - - - - - AcornWorm - - - - - - - - - Amphibian - - - - - - - - - Anemone - - - - - - - - - Animal - - - - - - - - - Arachnid - - - - - - - - - Arthropod - - - - - - - - - Bee - anim:Bee - - - - - - - - - Bird - - - - - - - - - Centipede - - - - - - - - - Coral - anim:Coral - - - - - - - - - Cow - - - - - - - - - Crustacean - - - - - - - - - Dairy - - - - - - - - - Echinoderm - - - - - - - - - ExoticSpecies - - - - - - - - - Fauna - - - - - - - - - Fish - - - - - - - - - Flatworm - - - - - - - - - Human - - - - - - - - - IndigenousSpecies - - - - - - - - - Insect - - - - - - - - - Invertebrate - - - - - - - - - Jellyfish - - - - - - - - - Livestock - - - - - - - - - Mammal - - - - - - - - - MarineAnimal - anim:MarineAnimal - - - - - - - - - MarineBird - - - - - - - - - MarineInvertebrate - - - - - - - - - MarineMammal - - - - - - - - - Mesozooplankton - - - - - - - - - Microzooplankton - - - - - - - - - Millipede - - - - - - - - - Mollusk - - - - - - - - - Poultry - - - - - - - - - Reptile - - - - - - - - - Roundworm - - - - - - - - - SegmentedWorm - - - - - - - - - Silkworm - anim:Silkworm - - - - - - - - - Sponge - - - - - - - - - Vertebrate - - - - - - - - - Zooplankton - - - - - - - - - AnimalWaste - - - - - - - - - AquaticOrganism - - - - - - - - - - Bioindicator - - - - - - - - - Biomass - biol:Biomass - - - - - - - - - Detritus - - - - - - - - - Feed - - - - - - - - - Fertilizer - - - - - - - - - Food - biol:Food - - - - - - - - - Gelbstoff - - - - - - - - - Honey - - - - - - - - - Humus - - - - - - - - - IndicatorSpecies - - - - - - - - - Litter - - - - - - - - - LivingEntity - biol:LivingEntity - - - - - - - - - Manure - - - - - - - - - Organism - biol:Organism - - - - - - - - - Species - biol:Species - - - - - - - - - Wood - - - - - - - - - WoodDebris - - - - - - - - - - - ChemicalCompound - - - - - - - - - Clathrate - comp:Clathrate - - - - - - - - - - Compound - comp:Compound - - - - - - - - - - - - - - - InorganicAcid - - - - - - - - - - InorganicCompound - comp:InorganicCompound - - - - - - - - - Perchlorate - - - - - - - - - Peroxide - - - - - - - - - - elem:Actinoid - - - - - - - - - elem:AlkaliMetal - - - - - - - - - elem:AlkalineEarthMetal - - - - - - - - - - elem:Atmophile - - - - - - - - - - elem:Chalcogen - - - - - - - - - - elem:Chalcophile - - - - - - - - - - - elem:ChemicalElement - - - - - - - - - - elem:Element - - - - - - - - - - - elem:Ha - - - - - - - - - - elem:Halogen - - - - - - - - - elem:HeavyMetal - - - - - - - - - - elem:Lithophile - - - - - - - - - - - - elem:Metal - - - - - - - - - - - elem:Metalloid - - - - - - - - - - elem:NobleGas - - - - - - - - - - elem:Nonmetal - - - - - - - - - elem:PostTransitionMetal - - - - - - - - - - elem:Prictogen - - - - - - - - - - elem:RareEarthElement - - - - - - - - - - elem:Siderophile - - - - - - - - - - elem:TraceMetal - - - - - - - - - elem:TransitionMetal - - - - - - - - - - Allotrope - - - - - - - - - Battery - - - - - - - - - Biodiesel - - - - - - - - - - - - - - - Biofuel - - - - - - - - - Biomass - mener:Biomass - - - - - - - - - CompundParabolicConcentrator - - - - - - - - - EnergyCollector - - - - - - - - - EnergyConversionDevice - - - - - - - - - EnergyDistributionSystem - - - - - - - - - - EnergyStorage - - - - - - - - - Ethanol - - - - - - - - - FlatPlateCollector - - - - - - - - - Fuel - mener:Fuel - - - - - - - - - FuelCell - - - - - - - - - - - - - - - GeothermalPowerPlant - - - - - - - - - HeatExchanger - mener:HeatExchanger - - - - - - - - - HeatPump - - - - - - - - - Heater - - - - - - - - - HydrogenEnergy - - - - - - - - - ParabolicTrough - - - - - - - - - - - - - - - PhotovoltaicCell - - - - - - - - - PowerGrid - - - - - - - - - PowerPlant - - - - - - - - - PowerTransmissionFacility - - - - - - - - - Refrigerator - - - - - - - - - SmartGrid - - - - - - - - - TubularCollector - - - - - - - - - - - - - - - Aircraft - - - - - - - - - Airplane - - - - - - - - - Antenna - - - - - - - - - ArtesianWell - - - - - - - - - Borehole - - - - - - - - - Car - - - - - - - - - - Communication - - - - - - - - - - CommunicationMethod - - - - - - - - - Communications - - - - - - - - - - - - - - - CommunicationsEquipment - - - - - - - - - ComputerHardware - - - - - - - - - ConfinedWell - - - - - - - - - DisposalWell - - - - - - - - - DrainageWell - - - - - - - - - EmergencyVehicle - - - - - - - - - Equipment - comm:Equipment - - - - - - - - - Helicopter - - - - - - - - - Infrastructure - equi:Infrastructure - infr:Infrastructure - - - - - - - - - InjectionWell - - - - - - - - - Internet - - - - - - - - - Jet - - - - - - - - - LandLine - - - - - - - - - MaterialThing - infr:MaterialThing - - - - - - - - - MobilePhone - - - - - - - - - MonitoringWell - - - - - - - - - Navigation - - - - - - - - - - - - - - - NavigationEquipment - - - - - - - - - - Phone - - - - - - - - - Pipeline - - - - - - - - - PumpingWell - - - - - - - - - - Radio - - - - - - - - - - - Receive - - - - - - - - - - - - - - - Receiver - - - - - - - - - - Reception - - - - - - - - - RechargeWell - - - - - - - - - Rocket - - - - - - - - - Rover - - - - - - - - - Satellite - - - - - - - - - Ship - - - - - - - - - - Signal - - - - - - - - - Sink - - - - - - - - - SpaceShuttle - - - - - - - - - - - - - - - Spacecraft - - - - - - - - - Trailer - - - - - - - - - Train - - - - - - - - - - - Transmission - - - - - - - - - - Transmit - - - - - - - - - - - - - - - Transmitter - - - - - - - - - - - - - - - TransportationEquipment - - - - - - - - - Truck - - - - - - - - - UnconfinedWell - - - - - - - - - Vehicle - - - - - - - - - Well - - - - - - - - - Wireless - - - - - - - - - struc:AgriculturalProductionFacility - - - - - - - - - struc:AirTrafficControlCenter - - - - - - - - - struc:AirTrafficControlEnRouteCenter - - - - - - - - - struc:AirTrafficControlRadarRoom - - - - - - - - - struc:AirTrafficControlTower - - - - - - - - - struc:AirTransitway - - - - - - - - - struc:Airport - - - - - - - - - - - - - - - struc:AirportFacility - - - - - - - - - struc:Base - - - - - - - - - struc:Building - - - - - - - - - struc:CommunicationFacility - - - - - - - - - struc:CulturalFeature - - - - - - - - - struc:Dome - - - - - - - - - struc:Facility - - - - - - - - - struc:Farm - - - - - - - - - struc:Fishery - - - - - - - - - struc:Habitat - - - - - - - - - struc:MeteorologicalFacility - - - - - - - - - struc:Meteostation - - - - - - - - - struc:Mine - - - - - - - - - struc:MiningFacility - - - - - - - - - struc:Plantation - - - - - - - - - struc:Platform - - - - - - - - - struc:Runway - - - - - - - - - struc:Station - - - - - - - - - struc:Structure - - - - - - - - - struc:TransportationFacility - - - - - - - - - indu:Alloy - - - - - - - - - - indu:Cement - - - - - - - - - - indu:Colloid - - - - - - - - - indu:ForestProduct - - - - - - - - - indu:IndustrialProduct - - - - - - - - - indu:Product - - - - - - - - - - indu:Slurry - - - - - - - - - indu:Supply - - - - - - - - - indu:Yield - - - - - - - - - - - - - - - - instr:Anemometer - - - - - - - - - - instr:Buoy - - - - - - - - - - instr:Device - - - - - - - - - instr:DopplerRadar - - - - - - - - - - - instr:GPS - - - - - - - - - - instr:GlobalPositioningSystem - - - - - - - - - instr:Instrument - - - - - - - - - - instr:LIDAR - - - - - - - - - - instr:Magnetogram - - - - - - - - - - - - - - - - instr:Manometer - - - - - - - - - instr:Microscope - - - - - - - - - - instr:OpticalInstrument - - - - - - - - - - - - - - - - instr:Piezometer - - - - - - - - - - instr:Radar - - - - - - - - - - - instr:Sensor - - - - - - - - - instr:Telescope - - - - - - - - - instr:Telethermometer - - - - - - - - - - instr:Tensiometer - - - - - - - - - - - - - - - - instr:Thermometer - - - - - - - - - - - - - - - - instr:TideGauge - - - - - - - - - Anion - - - - - - - - - Cation - ion:Cation - - - - - - - - - HeavyIon - - - - - - - - - - - - - - - Ion - - - - - - - - - SaltIon - ion:SaltIon - - - - - - - - - AlphaParticle - - - - - - - - - BetaParticle - - - - - - - - - - Isotope - - - - - - - - - - Nuclide - - - - - - - - - Radiation - - - - - - - - - - - - - - - RadioactiveSubstance - isot:RadioactiveSubstance - - - - - - - - - Radiocarbon - - - - - - - - - - - Radioelement - - - - - - - - - - Radioisotope - - - - - - - - - Radionuclide - - - - - - - - - - Algae - - - - - - - - - Algal - - - - - - - - - Amoebae - - - - - - - - - Bacteria - - - - - - - - - - BlueGreenAlgae - - - - - - - - - Ciliate - - - - - - - - - ClostridiumPerfringen - - - - - - - - - Coccolithophore - - - - - - - - - Coliform - - - - - - - - - Diatom - - - - - - - - - Diazotroph - - - - - - - - - Enterococci - - - - - - - - - EscherichiaColi - - - - - - - - - FecalColiform - - - - - - - - - FecalStreptococci - - - - - - - - - Flagellate - - - - - - - - - Foraminifer - - - - - - - - - - MarineMicrobiota - - - - - - - - - Microalgae - - - - - - - - - Microbiota - - - - - - - - - MicrobiotaTaxonomy - - - - - - - - - Microphyte - - - - - - - - - Mold - - - - - - - - - Phytoplankton - - - - - - - - - Picophytoplankton - - - - - - - - - Plankton - - - - - - - - - Protist - - - - - - - - - Radiolarian - - - - - - - - - SlimeMold - - - - - - - - - Sporozoan - - - - - - - - - Yeast - - - - - - - - - min:Calcite - - - - - - - - - min:Evaporite - - - - - - - - - min:Feldspar - - - - - - - - - - min:Glass - - - - - - - - - min:Hematite - - - - - - - - - min:Magnetite - - - - - - - - - min:Malic - - - - - - - - - min:Mineral - - - - - - - - - min:Mineraloid - - - - - - - - - min:NonmetallicMineral - - - - - - - - - min:Olvine - - - - - - - - - min:Pyrolite - - - - - - - - - min:Pyroxine - - - - - - - - - min:Quartz - - - - - - - - - Anthracite - - - - - - - - - Bituminous - - - - - - - - - Coal - - - - - - - - - - CoralDeposit - - - - - - - - - - CrudeOil - - - - - - - - - Deposit - - - - - - - - - - FiniteResource - - - - - - - - - FossilFuel - - - - - - - - - - - - - - - LandResource - nat:LandResource - - - - - - - - - Lignite - - - - - - - - - NaturalGas - - - - - - - - - - NaturalResource - - - - - - - - - Oil - - - - - - - - - OilShale - - - - - - - - - Ore - - - - - - - - - Petroleum - - - - - - - - - RenewableResource - - - - - - - - - SubBituminous - - - - - - - - - - - - - - - WaterResource - nat:WaterResource - - - - - - - - - - Alkane - - - - - - - - - - Alkene - - - - - - - - - - CFC - - - - - - - - - ChlorinatedHydrocarbon - - - - - - - - - Chlorofluorocarbon - - - - - - - - - Chlorophyll - - - - - - - - - - ClathrateHydrate - - - - - - - - - GasHydrate - - - - - - - - - - HC - - - - - - - - - - - HCFC - - - - - - - - - Halon - - - - - - - - - - - - - - - - - - - - - Hydrocarbon - - - - - - - - - - Hydrochlorofluorocarbon - - - - - - - - - - - - - - - - - - MethaneClathrate - - - - - - - - - - MethaneHydrate - - - - - - - - - - MethaneIce - - - - - - - - - - - NMVOC - - - - - - - - - - NonMethaneVolatileOrganicCompound - - - - - - - - - - - OrganicCompound - - - - - - - - - - - - - - - OrganicSubstance - - - - - - - - - - - - - - - Organochloride - - - - - - - - - - VOC - - - - - - - - - VolatileOrganicCompound - - - - - - - - - part:AnomalousEnergeticParticle - - - - - - - - - part:Atom - - - - - - - - - part:CosmicRay - - - - - - - - - part:Electron - - - - - - - - - part:EnergeticParticle - - - - - - - - - part:GammaRay - - - - - - - - - part:HeavyNuclei - - - - - - - - - part:Molecule - - - - - - - - - part:Neutrino - - - - - - - - - part:Neutron - - - - - - - - - - - - - - - - - part:Nucleon - - - - - - - - - part:Particle - - - - - - - - - part:Photon - - - - - - - - - part:Proton - - - - - - - - - part:SolarEnergeticParticle - - - - - - - - - - - - - - - part:SubatomicParticle - - - - - - - - - Branch - - - - - - - - - Broadleaf - - - - - - - - - Canopy - - - - - - - - - Conifer - - - - - - - - - Crop - - - - - - - - - Crown - - - - - - - - - DominantSpecies - - - - - - - - - DouglasFir - - - - - - - - - Evergreen - - - - - - - - - Exotic - - - - - - - - - Fern - - - - - - - - - Flora - - - - - - - - - FloweringPlant - - - - - - - - - Fruit - - - - - - - - - Fungi - - - - - - - - - FungiTaxonomy - plant:FungiTaxonomy - - - - - - - - - Grass - plant:Grass - - - - - - - - - Indigenous - - - - - - - - - Leaf - - - - - - - - - Lichen - - - - - - - - - Liverwort - - - - - - - - - Macroalgae - - - - - - - - - Macrophyte - - - - - - - - - Mangrove - - - - - - - - - MarinePlant - plant:MarinePlant - - - - - - - - - Moss - - - - - - - - - Mushroom - - - - - - - - - Native - - - - - - - - - Needleleaf - - - - - - - - - - OldGrowth - - - - - - - - - Paleovegetation - - - - - - - - - Plant - plant:Plant - - - - - - - - - - - - - - - PlantPart - - - - - - - - - Pollen - - - - - - - - - PonderosaPine - - - - - - - - - Root - - - - - - - - - Sclerophyll - - - - - - - - - Scrub - plant:Scrub - - - - - - - - - SecondGrowth - - - - - - - - - Thorn - - - - - - - - - Tree - - - - - - - - - - - - - - - TreeRing - - - - - - - - - Trunk - - - - - - - - - Twig - - - - - - - - - Vegetable - - - - - - - - - Vegetation - plant:Vegetation - - - - - - - - - VegetationCover - - - - - - - - - VegetationSpecies - - - - - - - - - petr:Breccia - - - - - - - - - petr:Chondrite - - - - - - - - - petr:Fossil - - - - - - - - - petr:HeterogenousRock - - - - - - - - - petr:Macrofossil - - - - - - - - - petr:Melange - - - - - - - - - - - - - - - petr:MetamorphicRock - - - - - - - - - petr:Meteor - - - - - - - - - petr:Meteorite - - - - - - - - - petr:Microfossil - - - - - - - - - petr:Molasse - - - - - - - - - - - petr:Regolith - - - - - - - - - - - petr:Rock - rock:Rock - - - - - - - - - - - - - - - - - petr:RockBody - - - - - - - - - - - - - - - petr:SedimentaryRock - - - - - - - - - - - - - - - petr:Serpentinite - - - - - - - - - petr:Serpentinization - - - - - - - - - - ign:Aa - - - - - - - - - ign:Andesite - - - - - - - - - ign:AnorogenicIgneousRock - - - - - - - - - ign:Anorthosite - - - - - - - - - ign:Aphanite - - - - - - - - - ign:Basalt - - - - - - - - - ign:CinderCone - - - - - - - - - ign:CompositeCone - - - - - - - - - ign:Dacite - - - - - - - - - ign:ExtrusiveRock - - - - - - - - - - ign:Felsic - - - - - - - - - ign:Hypabyssal - - - - - - - - - - - - - - - ign:IgneousRock - - - - - - - - - ign:IntrusiveRock - - - - - - - - - ign:Kimberlite - - - - - - - - - - ign:Lava - - - - - - - - - ign:Mafic - - - - - - - - - ign:Magma - - - - - - - - - - ign:Obsidian - - - - - - - - - - ign:Pahoehoe - - - - - - - - - ign:Peridotite - - - - - - - - - - ign:PillowLava - - - - - - - - - - ign:Pluton - - - - - - - - - ign:PlutonicRock - - - - - - - - - ign:Pumice - - - - - - - - - - ign:Pyroclastic - - - - - - - - - ign:Rhyolite - - - - - - - - - ign:SpatterCone - - - - - - - - - - ign:Tephra - - - - - - - - - ign:Trachyandesite - - - - - - - - - ign:Trachybasalt - - - - - - - - - ign:Trachyte - - - - - - - - - ign:Tuff - - - - - - - - - ign:TuffCone - - - - - - - - - ign:TuffRing - - - - - - - - - - ign:Ultramaphic - - - - - - - - - ign:VolcanicCone - - - - - - - - - ign:VolcanicNeck - - - - - - - - - ign:VolcanicRock - - - - - - - - - - - - - - - - ign:Xenocryst - - - - - - - - - ign:Xenolith - - - - - - - - - sed:Alluvium - - - - - - - - - sed:AshFlow - - - - - - - - - sed:Ashfall - - - - - - - - - sed:Bentonite - - - - - - - - - sed:Block - - - - - - - - - sed:Bomb - - - - - - - - - sed:Boulder - - - - - - - - - sed:Clast - - - - - - - - - sed:Clay - - - - - - - - - sed:Cobble - - - - - - - - - sed:Colluvium - - - - - - - - - sed:Debris - - - - - - - - - sed:DebrisAvalanche - - - - - - - - - - sed:DebrisFlow - - - - - - - - - sed:DrillingMud - - - - - - - - - - chem:Ejecta - sed:Ejecta - - - - - - - - - sed:Gibber - - - - - - - - - sed:Granule - - - - - - - - - sed:Gravel - - - - - - - - - sed:HydrogenousSediment - - - - - - - - - sed:Hypoclastite - - - - - - - - - sed:Lahar - - - - - - - - - sed:Loam - - - - - - - - - sed:Loess - - - - - - - - - sed:MarineSediment - - - - - - - - - sed:Mud - - - - - - - - - sed:Mudflow - - - - - - - - - sed:Peat - - - - - - - - - sed:Pebble - - - - - - - - - sed:Sand - - - - - - - - - - sed:Sediment - - - - - - - - - sed:Silt - - - - - - - - - sed:Soil - - - - - - - - - - - - - - - sed:TerrigenousSediment - - - - - - - - - sed:Varve - - - - - - - - - sed:VolcanicDeposit - - - - - - - - - BlackWater - - - - - - - - - - - - - - - BrackishWater - water:BrackishWater - - - - - - - - - - Brine - - - - - - - - - - - - - - - - - - - CloudDrop - - - - - - - - - - DepthHoar - - - - - - - - - Dew - - - - - - - - - - DrinkingWater - - - - - - - - - - - - - - - - - - - DrizzleDrop - - - - - - - - - Drop - - - - - - - - - Effluent - - - - - - - - - - Firn - - - - - - - - - - FreshWater - water:FreshWater - - - - - - - - - - - - - - - Frost - water:Frost - - - - - - - - - GranularIce - - - - - - - - - GrayWater - - - - - - - - - - - - - - - Groundwater - water:Groundwater - - - - - - - - - - HoarCrystal - - - - - - - - - Hydrate - - - - - - - - - - - - - - - Ice - water:Ice - - - - - - - - - - - - - - - - IceCrystal - - - - - - - - - IceParticle - - - - - - - - - - - - - - - LiquidWater - water:LiquidWater - - - - - - - - - - - - - - - - - - - RainDrop - - - - - - - - - - - - - - - Rainwater - - - - - - - - - Rime - - - - - - - - - SalineWater - - - - - - - - - - - - - - - SaltWater - - - - - - - - - SeaWater - - - - - - - - - Sewage - - - - - - - - - - - - - - - Snow - water:Snow - - - - - - - - - - SnowFacies - - - - - - - - - SnowGrain - - - - - - - - - - Steam - water:Steam - - - - - - - - - Wastewater - - - - - - - - - - - - - - - - WaterMixture - - - - - - - - - - - - - - - WaterSubstance - - - - - - - - - - - - - - - WaterVapor - - - - - - - - - - - - - - - - - - - - - - - AirSeaExchange - - - - - - - - - - - - - - - - - - - - - - AtmosphereLandExchange - phen:AtmosphereLandExchange - - - - - - - - - - AtmosphereOceanExchange - - - - - - - - - BrownianMotion - - - - - - - - - DynamicalPhenomena - phen:DynamicalPhenomena - - - - - - - - - - Event - phen:Event - - - - - - - - - - - - - - - - ExtremeEvent - phen:ExtremeEvent - - - - - - - - - Flash - - - - - - - - - Occurrence - - - - - - - - - Phenomena - phen:Phenomena - - - - - - - - - - - - - - - PlanetaryPhenomena - phen:PlanetaryPhenomena - planet:PlanetaryPhenomena - planp:PlanetaryPhenomena - - - - - - - - - Precipitation - phen:Precipitation - - - - - - - - - - - - RadiationalCooling - phen:RadiationalCooling - - - - - - - - - - - - RadiationalHeating - - - - - - - - - - - - RadiativeCooling - - - - - - - - - - - RadiativeHeating - phen:RadiativeHeating - - - - - - - - - - - - - - - StochasticProcess - - - - - - - - - Teleconnection - - - - - - - - - - - AirMass - - - - - - - - - AtmosphericDisturbance - - - - - - - - - AtmosphericPhenomena - atmo:AtmosphericPhenomena - - - - - - - - - - - - - - - AtmosphericWave - aphen:AtmosphericWave - - - - - - - - - CappingInversion - aphen:CappingInversion - - - - - - - - - - - - - - - EasterlyWave - - - - - - - - - FoehnWave - - - - - - - - - FrontalWave - - - - - - - - - GroundInversion - - - - - - - - - Icing - - - - - - - - - KillingFreeze - - - - - - - - - LeeWave - - - - - - - - - LightFreeze - - - - - - - - - LightFrost - - - - - - - - - - - - - - - MesoscaleDisturbance - - - - - - - - - MeteorologicalPhenomena - aphen:MeteorologicalPhenomena - atmo:MeteorologicalPhenomena - atmp:MeteorologicalPhenomena - - - - - - - - - MixedLayerCappingInversion - - - - - - - - - - - - - - - MixedLayerEvolution - - - - - - - - - MoisturePooling - - - - - - - - - - - - - - - MountainWave - aphen:MountainWave - - - - - - - - - - - - - - - - NocturnalCooling - atmp:NocturnalCooling - - - - - - - - - Obscuration - - - - - - - - - - - - - - - - OrographicLifting - - - - - - - - - Rainbow - - - - - - - - - - Sunlight - - - - - - - - - - Sunlit - - - - - - - - - Thermal - - - - - - - - - - Weather - atmo:Weather - - - - - - - - - WeatherCondition - - - - - - - - - Whiteout - - - - - - - - - Altostratus - - - - - - - - - - - - - - - AnvilCloud - - - - - - - - - BannerCloud - - - - - - - - - - - - - - - BaroclinicLeaf - - - - - - - - - BillowCloud - - - - - - - - - BlackShearedAnvil - - - - - - - - - Cirrostratus - - - - - - - - - Cirrus - - - - - - - - - - - - - - - - - - - - - Cloud - - - - - - - - - Cumulonimbus - - - - - - - - - - - - - - - Cumulus - - - - - - - - - - - - - - - - - - - - - FlankingLine - - - - - - - - - - - - - - - - - - FoehnCloud - - - - - - - - - - FoehnWall - - - - - - - - - ForcedCloud - - - - - - - - - - - - - - - FunnelCloud - - - - - - - - - - - - - - - KelvinHelmholtzBillows - - - - - - - - - LaSerpe - - - - - - - - - - - - - - - LayerCloud - - - - - - - - - LenticularCloud - - - - - - - - - Mamma - - - - - - - - - MaritimeCloud - - - - - - - - - MixedCloud - - - - - - - - - - - - - - - MixingCloud - - - - - - - - - - Moazagotl - - - - - - - - - - - - - - - MountainWaveCloud - - - - - - - - - Nacreous - - - - - - - - - Nimbostratus - - - - - - - - - NoctilueentCloud - - - - - - - - - - - - - - - OrographicCloud - - - - - - - - - - - - - - - OvershootingTop - - - - - - - - - PassiveCloud - - - - - - - - - RollCloud - - - - - - - - - SelfCloud - - - - - - - - - Stratiform - cloud:Stratiform - - - - - - - - - Stratocumulus - - - - - - - - - Stratus - - - - - - - - - Towering - - - - - - - - - WallCloud - - - - - - - - - - - - - - - AdvectionFog - - - - - - - - - BrownCloud - - - - - - - - - - - - - - - EvaporationFog - - - - - - - - - - - - - - - Fog - fog:Fog - - - - - - - - - - - - - - - FreezingFog - - - - - - - - - - - - - - - FrontalFog - - - - - - - - - Garua - - - - - - - - - - - - - - - GroundFog - - - - - - - - - - - - - - - Haar - - - - - - - - - Haze - - - - - - - - - - HighFog - - - - - - - - - - - - - - - IceFog - - - - - - - - - - - - - - - MixingFog - - - - - - - - - - - - - - - - - - - - - MonsoonFog - - - - - - - - - - - - - - - - MountainFog - - - - - - - - - OrographicFog - - - - - - - - - - - - - - - - - - - - - RadiationFog - - - - - - - - - - - - - - - SaltHaze - - - - - - - - - - - - - - - SandHaze - - - - - - - - - Smog - - - - - - - - - - - - - - - UpslopeFog - - - - - - - - - - - - - - - - ColdFront - - - - - - - - - - - - - - - Damming - - - - - - - - - Dryline - - - - - - - - - FalseWarmSector - - - - - - - - - - - Front - front:Front - - - - - - - - - - - - - - - FrontRegion - - - - - - - - - - FrontalLifting - - - - - - - - - KataFront - - - - - - - - - KatabaticFront - - - - - - - - - MediterraneanFront - - - - - - - - - MeiyuFront - - - - - - - - - Microfront - - - - - - - - - MoistTongue - - - - - - - - - OccludedFront - - - - - - - - - OutflowBoundary - - - - - - - - - - - - - - - SeaBreezeFront - - - - - - - - - Seclusion - - - - - - - - - TransitionZone - - - - - - - - - TriplePoint - - - - - - - - - - - - - - - WarmFront - - - - - - - - - WarmSector - - - - - - - - - BallLightning - - - - - - - - - BeadedLightning - - - - - - - - - BlueJet - - - - - - - - - - - - - - - - - - - - - JunctionStreamer - - - - - - - - - - - - - - - - - - - - - Lightning - - - - - - - - - ReturnStroke - - - - - - - - - - - - - - - Thunder - - - - - - - - - - AtmosphericPrecipitation - - - - - - - - - Blizzard - - - - - - - - - CloudBurst - - - - - - - - - - - - - - - ConvectiveStorm - precip:ConvectiveStorm - - - - - - - - - - - - - - - - Drizzle - - - - - - - - - Ecnephias - - - - - - - - - - - - - - - - - FamilyOfTornadoes - - - - - - - - - FreezingRain - - - - - - - - - GoslingBlast - - - - - - - - - GowkStorm - - - - - - - - - Graupel - - - - - - - - - GreenThunderstorm - - - - - - - - - - - - - - - - - - - - - Hail - - - - - - - - - - - - - - - HailStorm - - - - - - - - - HeatThunderstorm - - - - - - - - - - HeavyRainfall - - - - - - - - - HeavySnowfall - - - - - - - - - HighLevelThunderstorm - - - - - - - - - - - - - - - - - - - - - Hurricane - precip:Hurricane - - - - - - - - - HurricaneBand - - - - - - - - - - - IcePellet - - - - - - - - - - - - - - - IceStorm - - - - - - - - - Kaavie - - - - - - - - - Kelsher - - - - - - - - - - - - - - - LakeEffect - - - - - - - - - - - LakeEffectSnow - - - - - - - - - - LakeEffectSnowstorm - - - - - - - - - LambingStorm - - - - - - - - - - LandLash - - - - - - - - - Landspout - - - - - - - - - LocalStorm - - - - - - - - - MesocycloneSignature - - - - - - - - - - - - - - - Mist - - - - - - - - - - - - - - - Monsoon - precip:Monsoon - - - - - - - - - MulticellConvectiveStorm - - - - - - - - - NonSupercellTornado - - - - - - - - - NortheastStorm - - - - - - - - - PopUpThunderstorm - - - - - - - - - PrefrontalSquallLine - - - - - - - - - - - - - - - - Rain - - - - - - - - - - Rainband - - - - - - - - - Rainfall - prec:Rainfall - - - - - - - - - - Shower - - - - - - - - - - Sleet - - - - - - - - - - - - - - - Snowfall - prec:Snowfall - - - - - - - - - SplittingConvectiveStorm - - - - - - - - - SquallLine - - - - - - - - - - - - - - - Storm - precip:Storm - - - - - - - - - SupercellConvectiveStorm - - - - - - - - - Thunderstorm - precip:Thunderstorm - - - - - - - - - - - - - - - Tornado - precip:Tornado - - - - - - - - - TropicalStorm - - - - - - - - - - - - - - - - - - - - - Typhoon - - - - - - - - - WaterSpout - - - - - - - - - - AtmosphericAnticyclone - - - - - - - - - - AtmosphericCyclone - - - - - - - - - - - AtmosphericHighPressure - - - - - - - - - - AtmosphericLowPressure - - - - - - - - - - - AtmosphericRidge - - - - - - - - - - AtmosphericTrough - - - - - - - - - Barometric - - - - - - - - - - - - - - - Blocking - - - - - - - - - BowEcho - - - - - - - - - ConvectionCell - - - - - - - - - CutOffHigh - - - - - - - - - CutOffLow - - - - - - - - - Cyclogenesis - press:Cyclogenesis - - - - - - - - - DeepConvection - - - - - - - - - Deepening - - - - - - - - - DryConvection - - - - - - - - - ElevatedConvection - - - - - - - - - - - - - - - ExtratropicalCyclone - - - - - - - - - KatallobaticCenter - - - - - - - - - LeesideConvergence - - - - - - - - - LongmontAnticyclone - - - - - - - - - - - - - - - - - - - - - Mesoanticyclone - - - - - - - - - - - - - - - - - - - - - Mesocyclone - - - - - - - - - Mesolow - - - - - - - - - - - - - - - MesoscaleCellularConvection - - - - - - - - - MesoscaleConvectiveComplex - - - - - - - - - - - - - - - MesoscaleConvectiveSystem - - - - - - - - - MiniSupercell - - - - - - - - - - - - - - - MinorRidge - - - - - - - - - - - - - - - MinorTrough - - - - - - - - - MoistConvection - - - - - - - - - MonsoonDepression - - - - - - - - - - - - - - - MonsoonGyre - - - - - - - - - - - - - - - MonsoonLow - - - - - - - - - - - - - - - - - Multivortex - - - - - - - - - - - - - - - PolarCyclone - - - - - - - - - - - - - - - PolarLow - - - - - - - - - ShallowConvection - - - - - - - - - - - - - - - SubtropicalCyclone - - - - - - - - - - TUTT - - - - - - - - - - - - - - - TropicalCyclone - press:TropicalCyclone - - - - - - - - - TropicalUpperTroposphericTrough - - - - - - - - - UpdraftCurtain - - - - - - - - - - - - - - - - AcidFog - - - - - - - - - AcidHaze - - - - - - - - - - - - - - - AcidRain - - - - - - - - - - - - - - - MixedLayerVenting - - - - - - - - - NucleationScavenging - - - - - - - - - - Rainout - - - - - - - - - ScavengingByPrecipitation - - - - - - - - - Washout - - - - - - - - - - - - - - - WetDeposition - - - - - - - - - AgeostrophicWind - - - - - - - - - - AtmosphericCirculation - - - - - - - - - AtmosphericPumping - - - - - - - - - Blowing - - - - - - - - - CrossWind - - - - - - - - - Derecho - - - - - - - - - Downdraft - - - - - - - - - DrainageWind - - - - - - - - - DustDevil - - - - - - - - - - - - - - - DustStorm - - - - - - - - - EasterlyWind - wind:EasterlyWind - - - - - - - - - EulerianWind - - - - - - - - - GeostrophicWind - - - - - - - - - GlobalWindCirculation - - - - - - - - - - Gust - - - - - - - - - HadleyCirculation - - - - - - - - - HeadWind - - - - - - - - - - - - - - - HotWind - - - - - - - - - JetEffectWind - - - - - - - - - - JetStreak - - - - - - - - - - - JetStream - - - - - - - - - - - - - - - JetStreamAxis - - - - - - - - - - JetStreamWind - - - - - - - - - LocalWind - - - - - - - - - MeridionalWind - - - - - - - - - Microburst - - - - - - - - - - - - - - - SandStorm - - - - - - - - - Tailwind - - - - - - - - - TertiaryCirculation - - - - - - - - - ThermalWind - - - - - - - - - - - - - - - TradeWind - - - - - - - - - - - - - - - VeeringWind - - - - - - - - - - WalkerCell - - - - - - - - - WalkerCirculation - - - - - - - - - WarmConveyorBelt - - - - - - - - - - - - - - - Wind - wind:Wind - - - - - - - - - WindGust - - - - - - - - - WindStorm - - - - - - - - - Windborne - - - - - - - - - ZonalFlow - - - - - - - - - - - - - - - ZonalWind - - - - - - - - - - - - - - - AnabaticWind - - - - - - - - - BarrierJet - - - - - - - - - BlackSquall - - - - - - - - - - BookEndVorticities - - - - - - - - - Bora - - - - - - - - - - - - - - - CanyonWind - - - - - - - - - CherguiWind - - - - - - - - - - ChinookWind - - - - - - - - - - - - - - - DesertWind - - - - - - - - - DownslopeWind - - - - - - - - - DownslopeWindStorm - - - - - - - - - - FallWind - - - - - - - - - - - - - - - Foehn - circ:Foehn - - - - - - - - - - - - - - - FogWind - - - - - - - - - Forano - - - - - - - - - Galerne - - - - - - - - - Gallego - - - - - - - - - Garbin - - - - - - - - - Gending - - - - - - - - - Gharbi - - - - - - - - - Gharra - - - - - - - - - Ghibli - - - - - - - - - - - - - - - GlacierWind - - - - - - - - - - - - - - - GorgeWind - - - - - - - - - - - - - - - GravityWind - - - - - - - - - Greco - - - - - - - - - Gregale - - - - - - - - - GregauWind - - - - - - - - - - GullySquall - - - - - - - - - Haboob - - - - - - - - - - IbeWind - - - - - - - - - InlandSeaBreeze - - - - - - - - - - Kachchan - - - - - - - - - - - - - - - KalBaisakhi - - - - - - - - - Karaburan - - - - - - - - - Karajol - - - - - - - - - Karema - - - - - - - - - Karif - - - - - - - - - KatabaticWind - - - - - - - - - Kaus - - - - - - - - - Khamsin - - - - - - - - - KloofWind - - - - - - - - - KnikWind - - - - - - - - - Koembang - - - - - - - - - Kona - - - - - - - - - Kossava - - - - - - - - - KrakatoaWind - - - - - - - - - Labbe - - - - - - - - - Laheimar - - - - - - - - - - - - - - - LakeBreeze - - - - - - - - - LandBreeze - - - - - - - - - Leste - - - - - - - - - Levante - - - - - - - - - Levantera - - - - - - - - - - - - - - - Leveche - - - - - - - - - Libeccio - - - - - - - - - Liberator - - - - - - - - - LineSquall - - - - - - - - - Lombarde - - - - - - - - - LongShoreWind - - - - - - - - - - MackerelBreeze - - - - - - - - - MackerelGale - - - - - - - - - Maestro - - - - - - - - - MajolaWind - - - - - - - - - MalojaWind - - - - - - - - - Mamatele - - - - - - - - - Marin - - - - - - - - - MatanuskaWind - - - - - - - - - Matinal - - - - - - - - - Meltem - - - - - - - - - Mergozzo - - - - - - - - - Mesojet - - - - - - - - - MesoscaleWind - - - - - - - - - Miejour - - - - - - - - - MoazagotlWind - - - - - - - - - Molan - - - - - - - - - MonsoonSurge - - - - - - - - - Morget - - - - - - - - - MountainBreeze - - - - - - - - - MountainGapWind - - - - - - - - - MountainPlainWind - - - - - - - - - MountainValleyWind - - - - - - - - - - - - - - - MountainWind - - - - - - - - - N_aschi - - - - - - - - - Narbonnais - - - - - - - - - NightWind - - - - - - - - - Nortada - - - - - - - - - Norte - - - - - - - - - - NorthFoehn - - - - - - - - - Northeaster - - - - - - - - - Norther - - - - - - - - - Northwester - - - - - - - - - - - - - - - OceanWind - - - - - - - - - - - - - - - OffshoreWind - - - - - - - - - - - - - - - OnshoreWind - - - - - - - - - - - - - - - - - - - - - OutflowJet - - - - - - - - - - - - - - - PlowWind - - - - - - - - - SeaBreeze - mwind:SeaBreeze - - - - - - - - - Squall - - - - - - - - - - - - - - - ThunderstormOutflow - - - - - - - - - - - - - - - UpslopeWind - meso:UpslopeWind - - - - - - - - - - - - - - - ValleyWind - - - - - - - - - YellowWind - - - - - - - - - Zephyr - - - - - - - - - Assimilation - - - - - - - - - BiologicalActivity - - - - - - - - - BiologicalPhenomena - - - - - - - - - Birth - - - - - - - - - BirthDefect - - - - - - - - - Breathing - - - - - - - - - Broncitis - - - - - - - - - Cancer - - - - - - - - - CardiovascularDisease - - - - - - - - - Chemosynthesis - - - - - - - - - Consumption - - - - - - - - - Death - - - - - - - - - Decomposition - - - - - - - - - Denitrification - - - - - - - - - Disease - heal:Disease - - - - - - - - - Epidemic - - - - - - - - - Excretion - - - - - - - - - Exposure - - - - - - - - - Feeding - - - - - - - - - Fertilization - - - - - - - - - Foraging - - - - - - - - - Grazing - - - - - - - - - Health - - - - - - - - - Hearing - - - - - - - - - Inhalation - - - - - - - - - Maintenance - - - - - - - - - - MetabolicPathway - - - - - - - - - Nursing - - - - - - - - - OcularMelanoma - - - - - - - - - Photosynthesis - bproc:Photosynthesis - - - - - - - - - PlantStress - - - - - - - - - Pollination - - - - - - - - - Respiration - - - - - - - - - Sense - - - - - - - - - Spawning - - - - - - - - - Survival - - - - - - - - - Transpiration - - - - - - - - - Uptake - - - - - - - - - Vision - - - - - - - - - VitalActivity - - - - - - - - - Waste - - - - - - - - - - Accumulation - - - - - - - - - - - Calving - - - - - - - - - Englacial - - - - - - - - - - Glacial - - - - - - - - - GlacialProcess - - - - - - - - - - Glaciation - - - - - - - - - - GlacierRetreat - - - - - - - - - - IceCalving - - - - - - - - - Periglacial - - - - - - - - - - Periglaciation - - - - - - - - - Proglacial - - - - - - - - - Subglacial - - - - - - - - - Supraglacial - - - - - - - - - - - - - - - AnnualCycle - - - - - - - - - AntarcticOscillation - - - - - - - - - ArcticOscillation - - - - - - - - - BodyTide - - - - - - - - - ChandlerWobble - - - - - - - - - - - - - - - DiurnalCycle - - - - - - - - - - - ENSO - cyc:ENSO - - - - - - - - - - - - - - - EarthOscillation - - - - - - - - - - - - - - - ElNinoSouthernOscillation - - - - - - - - - - - - - - - GlobalCycle - - - - - - - - - IceAgeCycle - cyc:IceAgeCycle - - - - - - - - - - - - - - - MaddenJulianOscillation - - - - - - - - - MilankovitchCycle - - - - - - - - - - NAO - osc:NAO - - - - - - - - - NorthAtlanticOscillation - - - - - - - - - - PDO - osc:PDO - - - - - - - - - PacificDecadalOscillation - - - - - - - - - PacificNorthAmericanPattern - - - - - - - - - PlanetaryOscillation - - - - - - - - - PolarWander - - - - - - - - - PoleTide - - - - - - - - - - QBO - - - - - - - - - - - - - - - QuasiBiennialOscillation - - - - - - - - - - - - - - - SolarCycle - cyc:SolarCycle - - - - - - - - - SouthernOscillation - - - - - - - - - Tide - cyc:Tide - osc:Tide - - - - - - - - - - - - - - - BiogeochemicalCycle - - - - - - - - - - - - - - - CarbonCycle - - - - - - - - - - - - - - - - - HydrologicCycle - - - - - - - - - HydrologicalCycle - - - - - - - - - - MaterialCycle - - - - - - - - - - - - - - - NitrogenCycle - - - - - - - - - - NutrientCycling - - - - - - - - - - - - - - - OxygenCycle - - - - - - - - - - - - - - - PhosphorusCycle - - - - - - - - - - - - - - - SulfurCycle - - - - - - - - - WaterCycle - - - - - - - - - Adaptation - - - - - - - - - Bioaccumulation - - - - - - - - - Bioconcentration - - - - - - - - - Biodiversity - - - - - - - - - Climax - - - - - - - - - CommunityStructure - - - - - - - - - Competition - - - - - - - - - DiurnalMovement - - - - - - - - - Diversity - - - - - - - - - Dominance - - - - - - - - - EcologicalDynamics - - - - - - - - - EcologicalPhenomena - ecol:EcologicalPhenomena - - - - - - - - - EcosystemHealth - - - - - - - - - EcosystemService - - - - - - - - - EndangeredSpecies - - - - - - - - - Evolution - - - - - - - - - FoodChain - - - - - - - - - FoodWebDynamics - - - - - - - - - Herbivory - - - - - - - - - Migration - - - - - - - - - Mutation - - - - - - - - - Mutualism - - - - - - - - - NaturalSelection - - - - - - - - - Overpopulation - - - - - - - - - Parasitism - - - - - - - - - PopulationDynamics - - - - - - - - - Postbreeding - - - - - - - - - Predation - - - - - - - - - PrimaryProduction - - - - - - - - - Scavenging - - - - - - - - - SecondaryProduction - - - - - - - - - Selection - - - - - - - - - Speciation - - - - - - - - - SpeciesInteraction - - - - - - - - - SpeciesRecruitment - - - - - - - - - Succession - - - - - - - - - Symbiosis - - - - - - - - - TrophicDynamics - - - - - - - - - CurrentSheet - - - - - - - - - - ElectricDipole - - - - - - - - - - - - - - - ElectricField - - - - - - - - - GeomagneticField - emf:GeomagneticField - - - - - - - - - Gyroresonance - - - - - - - - - - MagneticDipole - - - - - - - - - - - - - - - MagneticField - - - - - - - - - - - - - - - MagneticFieldPhenomena - - - - - - - - - MagneticMirror - - - - - - - - - - ActiveSolarEnergy - - - - - - - - - - - - - - - BinaryCycle - - - - - - - - - - - - - - - - - - - - - Biopower - - - - - - - - - ConcentratingSolarPower - - - - - - - - - - - - - - - - DirectUse - - - - - - - - - - - - - - - DrySteam - - - - - - - - - - Electricity - - - - - - - - - - - - - - - ElectricityProduction - - - - - - - - - EnergyCollection - - - - - - - - - EnergyConservation - - - - - - - - - EnergyConversionProcess - - - - - - - - - EnergyForm - ener:EnergyForm - - - - - - - - - EnergySource - ener:EnergySource - - - - - - - - - - - - - - - FlashSteam - - - - - - - - - - - - - - - Gasification - - - - - - - - - Geothermal - pener:Geothermal - - - - - - - - - - GeothermalPowerProcess - - - - - - - - - PassiveSolarEnergy - - - - - - - - - Photovoltaics - - - - - - - - - PowerSource - - - - - - - - - - - - - - - RenewableEnergySource - - - - - - - - - SolarEnergy - - - - - - - - - - - SolarPower - pener:SolarPower - - - - - - - - - - SolarThermalPower - - - - - - - - - ThermalCollection - - - - - - - - - - - WindEnergy - - - - - - - - - - - - - - - AirPollution - imp:AirPollution - - - - - - - - - AirQuality - - - - - - - - - AlgalBloom - - - - - - - - - Aridification - - - - - - - - - Contamination - - - - - - - - - CoralBleaching - - - - - - - - - DeadZone - - - - - - - - - Deforestation - - - - - - - - - Desertification - - - - - - - - - - - - - - - EnvironmentalImpact - - - - - - - - - Eutrophication - - - - - - - - - - Extinction - - - - - - - - - - - - - - - HabitatConversion - - - - - - - - - HabitatFragmentation - - - - - - - - - IndoorAirQuality - - - - - - - - - InvasiveSpecies - - - - - - - - - LandDegradation - - - - - - - - - - - - - - - LandEnvironmentalImpact - - - - - - - - - - - - - - - - MassExtinctionEvent - - - - - - - - - - - - - - - NoisePollution - - - - - - - - - NutrientLoading - - - - - - - - - - - - - - - OceanAcidification - - - - - - - - - - - - - - - OceanEnvironmentalImpact - - - - - - - - - OilSpill - - - - - - - - - - OzoneDepletion - - - - - - - - - - - - - - - OzoneHole - - - - - - - - - PhotochemicalAirPollution - - - - - - - - - Pollution - - - - - - - - - RangeChange - - - - - - - - - SaltWaterIntrusion - - - - - - - - - - - - - - - SeaLevelRise - - - - - - - - - - - - - - - SoilLoss - - - - - - - - - SpeciesExtinction - - - - - - - - - Spill - - - - - - - - - Toxicity - - - - - - - - - Upconing - - - - - - - - - - - - - - - WaterPollution - - - - - - - - - WaterQuality - - - - - - - - - - - - - - - Anticyclone - fluid:Anticyclone - - - - - - - - - BoundaryLayer - - - - - - - - - - Capillary - - - - - - - - - CapillaryAction - - - - - - - - - - - - - - - Cell - - - - - - - - - - - - - - - - - CellCluster - fluid:CellCluster - - - - - - - - - Circulation - fluid:Circulation - - - - - - - - - Cyclone - fluid:Cyclone - - - - - - - - - - Depression - - - - - - - - - Eddy - fluid:Eddy - wave:Eddy - - - - - - - - - - Flow - fld:Flow - fluid:Flow - - - - - - - - - - - - - - - FluidPhenomena - fluid:FluidPhenomena - - - - - - - - - Gyre - fluid:Gyre - - - - - - - - - - - HighPressure - fluid:HighPressure - - - - - - - - - - - - - - - Jet - fluid:Jet - - - - - - - - - - - - - - - LaminarBoundaryLayer - - - - - - - - - LaminarFlow - - - - - - - - - LaminarSublayer - - - - - - - - - LowPressure - fluid:LowPressure - - - - - - - - - Overturning - - - - - - - - - PointVortex - - - - - - - - - Recirculation - - - - - - - - - - - - - - - - Ridge - fluid:Ridge - - - - - - - - - StationaryEddy - - - - - - - - - - - - - - - Trough - fluid:Trough - - - - - - - - - ViscousFlow - - - - - - - - - - - - - - - Vortex - fluid:Vortex - - - - - - - - - - - - - - - instab:AbsoluteInstability - - - - - - - - - instab:ConditionalInstability - - - - - - - - - instab:ConvectiveInstability - - - - - - - - - - - instab:FluidInstability - - - - - - - - - inst:FreeInstability - instab:FreeInstability - - - - - - - - - - - - - - - instab:FrontalInversion - - - - - - - - - - - - - - - inst:Inversion - instab:Inversion - - - - - - - - - inst:KelvinHelmholtzInstability - instab:KelvinHelmholtzInstability - - - - - - - - - instab:LargeReynoldsNumberFlow - - - - - - - - - - instab:Lift - - - - - - - - - inst:Lifting - instab:Lifting - - - - - - - - - instab:MechanicalTurbulence - - - - - - - - - instab:RayleighTaylorInstability - - - - - - - - - inst:StaticStability - instab:StaticStability - - - - - - - - - - - - - - - - instab:TearingMode - - - - - - - - - - inst:Turbulence - instab:Turbulence - - - - - - - - - instab:Wake - - - - - - - - - - instab:ZombieTurbulence - - - - - - - - - - - - - - - - - - - - - Advection - trans:Advection - - - - - - - - - BolusAdvection - - - - - - - - - Buoyancy - tran:Buoyancy - - - - - - - - - Coning - - - - - - - - - Convection - trans:Convection - - - - - - - - - - - - - - - ConvectivePlume - - - - - - - - - CounterGradientFlux - - - - - - - - - Deposition - trans:Deposition - - - - - - - - - Fanning - - - - - - - - - - HTAP - - - - - - - - - - - - - - - HemisphericTransportOfAirPollutants - - - - - - - - - Lofting - - - - - - - - - LongRangeTransport - - - - - - - - - - - - - - - Plume - trans:Plume - - - - - - - - - Puff - - - - - - - - - SlantWiseConvection - - - - - - - - - StackEffect - - - - - - - - - Surge - - - - - - - - - Transport - tran:Transport - trans:Transport - - - - - - - - - Uptake - - - - - - - - - VorticityAdvection - - - - - - - - - WestEastTransport - - - - - - - - - CompositeProcess - - - - - - - - - - Differentiation - - - - - - - - - - Fluvial - - - - - - - - - - - - - - - - GeologicalPhenomena - geol:GeologicalPhenomena - - - - - - - - - GeospherePhenomena - geol:GeospherePhenomena - - - - - - - - - - Igneous - geol:Igneous - - - - - - - - - IntraplateProcess - - - - - - - - - - Metamorphic - geol:Metamorphic - - - - - - - - - - Orogenesis - - - - - - - - - - - - - - - - - - - - - - - - - - - OrogenicCollapse - geol:OrogenicCollapse - - - - - - - - - Orogeny - geol:Orogeny - - - - - - - - - - Paleomagnetism - - - - - - - - - Pedogenesis - - - - - - - - - - - - - RockCycle - - - - - - - - - - - - RockCycleProcess - - - - - - - - - - Sedimentary - geol:Sedimentary - - - - - - - - - StratigraphicSequence - - - - - - - - - Unconformity - - - - - - - - - - WilsonCycle - - - - - - - - - Detachment - - - - - - - - - - Dextral - - - - - - - - - DipSeparationSense - - - - - - - - - DipSlip - - - - - - - - - Extraction - - - - - - - - - - GenericDecollement - - - - - - - - - - - - - - - Heave - - - - - - - - - Horizontal - - - - - - - - - MixedExtraction - - - - - - - - - - NoMovementSense - - - - - - - - - - Normal - - - - - - - - - - - - - - - ObliqueSlip - - - - - - - - - PureExtraction - - - - - - - - - - Reverse - - - - - - - - - Scissor - - - - - - - - - - - Sense - - - - - - - - - - Sinistral - - - - - - - - - Slip - - - - - - - - - StrikeSeparationSense - - - - - - - - - StrikeSlip - - - - - - - - - - - - - - - Throw - - - - - - - - - - Thrust - - - - - - - - - ThrustDecollement - - - - - - - - - Transcurrent - - - - - - - - - Transform - - - - - - - - - Transpressional - - - - - - - - - Transtensional - - - - - - - - - Wrench - - - - - - - - - Abrasion - - - - - - - - - - Avalanche - geom:Avalanche - - - - - - - - - Compaction - - - - - - - - - - Creep - - - - - - - - - Denundation - - - - - - - - - Diagenesis - - - - - - - - - Exfoliation - - - - - - - - - - - - - - - Haloclasty - - - - - - - - - - Karst - geom:Karst - - - - - - - - - - - - - - - Landslide - - - - - - - - - MassWasting - - - - - - - - - MaterialDisplacement - - - - - - - - - Mudslide - - - - - - - - - Reptation - - - - - - - - - RockSlopeFailure - - - - - - - - - Saltation - - - - - - - - - - - - - - - SedimentFormation - geom:SedimentFormation - - - - - - - - - - - - - - - - Sedimentation - - - - - - - - - - - - - - - - Slide - - - - - - - - - Slump - - - - - - - - - Solifluction - - - - - - - - - Subsidence - - - - - - - - - - - - - - - - Weathering - geomor:Weathering - - - - - - - - - - seis:Aftershock - - - - - - - - - - seis:DeepFocusEarthquake - - - - - - - - - seis:Earthquake - - - - - - - - - seis:Foreshock - - - - - - - - - - seis:LoveWave - - - - - - - - - seis:Lwave - - - - - - - - - seis:MegathrustEarthquake - - - - - - - - - - - seis:PWave - - - - - - - - - - seis:PrimaryWave - - - - - - - - - - - seis:SWave - - - - - - - - - - seis:SecondaryWave - - - - - - - - - - seis:SeismicBodyWave - - - - - - - - - - - - - - - - - - - - - - seis:SeismicPhenomena - - - - - - - - - - seis:SeismicSurfaceWave - - - - - - - - - - - - - - - seis:SeismicWave - - - - - - - - - seis:ShallowFocusEarthquake - - - - - - - - - seis:Tremor - - - - - - - - - tec:AsymmetricHeatFlow - - - - - - - - - tec:CompositeProcess - - - - - - - - - tec:ContinenetalDrift - - - - - - - - - tec:ContinentalBreakup - - - - - - - - - tec:ContinentalCollision - - - - - - - - - tec:Creep - - - - - - - - - tec:ExtensionEvent - - - - - - - - - - tec:IsostaticAdjustment - - - - - - - - - tec:IsostaticRebound - - - - - - - - - - tec:PlateConvergence - - - - - - - - - tec:PlateDivergence - - - - - - - - - tec:Spreading - - - - - - - - - tec:Subduction - - - - - - - - - tec:TectonicAssemblage - - - - - - - - - - - - - - - - tec:TectonicForce - - - - - - - - - - - - - - - - - - - - - - tec:TectonicPhenomena - - - - - - - - - tec:TectonicProcess - - - - - - - - - tec:TectonicUplift - - - - - - - - - tec:Terrane - tecp:Terrane - - - - - - - - - - - - - - - tec:TransformFaulting - - - - - - - - - - - EruptionCloud - - - - - - - - - FlankEruption - - - - - - - - - LavaOfTephra - - - - - - - - - - MagmaMotion - - - - - - - - - Magmatic - - - - - - - - - - - - - - - - MantlePlume - - - - - - - - - MantleThermalPlume - - - - - - - - - - NueeArdenteEruption - - - - - - - - - PeleeanEruption - - - - - - - - - - PhreaticEruption - - - - - - - - - PhreatomagmaticEruption - - - - - - - - - PlinianEruption - - - - - - - - - SteamBlastEruption - - - - - - - - - StrombolianEruption - - - - - - - - - SummitEruption - - - - - - - - - Surge - - - - - - - - - - - - - - - - - - VolcanicActivity - - - - - - - - - - - - - - - - - - - - - - - VolcanicEruption - - - - - - - - - - VolcanicPhenomena - - - - - - - - - - - VolcanicPlume - - - - - - - - - - - Volcanism - - - - - - - - - - Vulcanism - - - - - - - - - helio:Airglow - - - - - - - - - - - - - - - helio:AtmosphericLightEmission - - - - - - - - - helio:Aurora - - - - - - - - - - helio:AuroralSubstorm - - - - - - - - - helio:BowShock - - - - - - - - - helio:BowShockCrossing - - - - - - - - - - - - - - - - - - - helio:GeomagneticStorm - - - - - - - - - helio:Geomagnetism - - - - - - - - - helio:Heliosheath - - - - - - - - - helio:HeliosphericPhenomena - - - - - - - - - helio:InterplanetaryPhenomena - - - - - - - - - helio:InterplanetaryShock - - - - - - - - - - - - helio:MagneticStorm - - - - - - - - - helio:MagneticSubstorm - - - - - - - - - helio:MagnetopauseCrossing - - - - - - - - - helio:Magnetosheath - - - - - - - - - helio:Magnetotail - - - - - - - - - - - helio:ProtonPrecipitation - - - - - - - - - helio:SchumannResonance - - - - - - - - - - helio:SolarParticleEvent - - - - - - - - - - - - - - - helio:SolarWind - - - - - - - - - helio:SolarWindExtreme - - - - - - - - - helio:SpaceWeather - - - - - - - - - helio:Substorm - - - - - - - - - - - - - - - - - - - - - helio:SunEarthInteraction - - - - - - - - - - helio:TelluricCurrent - - - - - - - - - BaseFlow - - - - - - - - - Debouche - - - - - - - - - - DeepPercolation - - - - - - - - - Discharge - - - - - - - - - Drain - - - - - - - - - Drainage - - - - - - - - - - FlashFlood - - - - - - - - - - - - - - - - Flood - - - - - - - - - - - GroundwaterStorage - - - - - - - - - - - - - - - HydrospherePhenomena - - - - - - - - - HydrothermalAlteration - - - - - - - - - Infiltration - - - - - - - - - Intrusion - - - - - - - - - - - - - - - - - - - - - LandWaterCirculation - - - - - - - - - OpenChannelFlow - - - - - - - - - Outflow - - - - - - - - - OverlandFlow - - - - - - - - - - Percolate - - - - - - - - - Percolation - - - - - - - - - RadionucleiRetardation - - - - - - - - - - - - - - - Recharge - - - - - - - - - Runoff - - - - - - - - - SnowCover - hydr:SnowCover - - - - - - - - - Snowslide - - - - - - - - - StreamDischarge - - - - - - - - - Streamflow - - - - - - - - - Torrent - - - - - - - - - - - - - - - WaterFlow - - - - - - - - - - Aeration - - - - - - - - - - - - - - - - Bioturbation - - - - - - - - - - - - - - - - Cryoturbation - mix:Cryoturbation - - - - - - - - - - Diffuse - - - - - - - - - Diffusion - - - - - - - - - - EddyDiffusion - - - - - - - - - - - - - - - Entrainment - - - - - - - - - - FickianDiffusion - - - - - - - - - - Mix - - - - - - - - - - Mixing - mix:Mixing - - - - - - - - - Separation - - - - - - - - - Settling - - - - - - - - - - TurbulentDiffusion - - - - - - - - - - - - - - - OceanPhenomena - ocea:OceanPhenomena - - - - - - - - - coast:Attrition - - - - - - - - - coast:Backwash - - - - - - - - - coast:BeachDepletion - - - - - - - - - coast:Breaker - - - - - - - - - coast:BreakingWave - - - - - - - - - - - - - - - coast:CoastalPhenomena - - - - - - - - - - coast:LittoralDrift - - - - - - - - - coast:LongshoreDrift - - - - - - - - - - coast:OceanTide - ocea:OceanTide - oceac:OceanTide - - - - - - - - - coast:PlungingBreaker - - - - - - - - - coast:SpillingBreaker - - - - - - - - - coast:StormSurge - - - - - - - - - coast:SurfBeat - - - - - - - - - coast:SurgingBreaker - - - - - - - - - - - coast:Swell - - - - - - - - - odyn:BoundaryCurrent - - - - - - - - - odyn:CircumpolarCurrent - - - - - - - - - - - - - - - odyn:ColdCoreCell - - - - - - - - - - - - - - - odyn:Downwelling - - - - - - - - - odyn:EasternBoundaryCurrent - - - - - - - - - odyn:LangmuirCirculation - - - - - - - - - - odyn:LittoralCurrent - - - - - - - - - odyn:LongshoreCurrent - - - - - - - - - odyn:LoopCurrent - - - - - - - - - - - - - - - - odyn:MesoscaleEddy - - - - - - - - - odyn:ModeEddy - - - - - - - - - - odyn:OceanCirculation - - - - - - - - - odyn:OceanConveyorBelt - - - - - - - - - odyn:OceanCurrent - - - - - - - - - - odyn:OceanGyre - - - - - - - - - - - odyn:OceanMixing - - - - - - - - - odyn:SecondaryCirculation - - - - - - - - - odyn:ThermohalineCirculation - - - - - - - - - - - - - - - odyn:TidalCurrent - - - - - - - - - - - odyn:TidalWave - - - - - - - - - - odyn:Tsunami - - - - - - - - - odyn:TurbidityCurrent - - - - - - - - - - - - - - - odyn:Upwelling - - - - - - - - - - - - - - - odyn:WarmCoreCell - - - - - - - - - odyn:WesternBoundaryCurrent - - - - - - - - - odyn:WesternIntensification - - - - - - - - - odyn:WindDrivenCirculation - - - - - - - - - - - - - - - - - - - - - - - - - - - - Climate - clim:Climate - - - - - - - - - - - - - - - - - ClimateAnomaly - - - - - - - - - - - - - ClimateAverage - - - - - - - - - ClimateChange - - - - - - - - - ClimatePhenomena - - - - - - - - - - ClimaticAnomaly - - - - - - - - - - - - - ClimaticAverage - - - - - - - - - - - - - ClimatologicalAverage - - - - - - - - - - Drought - clim:Drought - - - - - - - - - - - - - - - GlobalChange - - - - - - - - - - - - - - - - - - - - - - - - - - GlobalClimate - - - - - - - - - - - - - - - GlobalWarming - - - - - - - - - GreenhouseEffect - - - - - - - - - - - - - - - HeatIsland - - - - - - - - - - - - LocalClimate - - - - - - - - - - - - - - - - - - Mesoclimate - - - - - - - - - - - - - - - - - - Microclimate - - - - - - - - - - - - - - - - - - MoistureClimate - - - - - - - - - - - - - - - NuclearWinter - - - - - - - - - - - - Paleoclimate - - - - - - - - - - - - RegionalClimate - - - - - - - - - - - - - - - - - - ThermalClimate - - - - - - - - - - - Activation - - - - - - - - - BiochemicalRelease - - - - - - - - - - - - - - - - - Emission - - - - - - - - - Eruption - reac:Eruption - - - - - - - - - - - - - - - - - - - - - - - Explosion - - - - - - - - - - - - - - - - - Fire - - - - - - - - - - - - Flare - - - - - - - - - - - Flaring - - - - - - - - - FluidLeak - - - - - - - - - - - - - - - - - GasFlare - - - - - - - - - GasLeak - - - - - - - - - IndustrialEmission - - - - - - - - - Leach - - - - - - - - - Leak - - - - - - - - - - - - - - - RadioactivityRelease - - - - - - - - - Release - - - - - - - - - Wildfire - - - - - - - - - Ablation - - - - - - - - - - Accretion - - - - - - - - - Bend - - - - - - - - - - BergeronFindeisenProcess - - - - - - - - - Break - - - - - - - - - Buckle - - - - - - - - - Cataclasis - - - - - - - - - Cementation - - - - - - - - - Cleavage - - - - - - - - - - - Clump - - - - - - - - - - Clumping - - - - - - - - - Coalescence - solid:Coalescence - - - - - - - - - Comminution - - - - - - - - - Compaction - - - - - - - - - Conchoidal - - - - - - - - - Congelation - - - - - - - - - Consolidation - - - - - - - - - Crack - fail:Crack - - - - - - - - - - Deform - - - - - - - - - Deformation - def:Deformation - soli:Deformation - - - - - - - - - Diagenesis - - - - - - - - - - Disintegrate - - - - - - - - - Disintegration - - - - - - - - - Dislocation - - - - - - - - - Distortion - - - - - - - - - Earthy - - - - - - - - - - Elongate - - - - - - - - - - Elongation - - - - - - - - - - Erode - - - - - - - - - Erosion - solid:Erosion - - - - - - - - - Extension - - - - - - - - - Failure - - - - - - - - - - Fault - solid:Fault - - - - - - - - - FaultLine - - - - - - - - - Fissure - fail:Fissure - - - - - - - - - - Fold - - - - - - - - - Fracture - solid:Fracture - - - - - - - - - GrainSizeSorting - - - - - - - - - Harden - - - - - - - - - Jagged - - - - - - - - - Joint - - - - - - - - - Metamorphism - - - - - - - - - Microfracture - - - - - - - - - - Pore - - - - - - - - - PoreSpace - solid:PoreSpace - - - - - - - - - Ridging - - - - - - - - - Rip - - - - - - - - - Rupture - - - - - - - - - Shatter - - - - - - - - - Shear - sol:Shear - - - - - - - - - Slip - - - - - - - - - - - - - - - SolidPhenomena - - - - - - - - - Solidification - - - - - - - - - Solidify - - - - - - - - - Spintery - - - - - - - - - Strain - - - - - - - - - Stretch - - - - - - - - - Subconchoidal - - - - - - - - - - Subside - - - - - - - - - Subsidence - solid:Subsidence - - - - - - - - - Thinning - - - - - - - - - Wasting - - - - - - - - - Asteroseismology - - - - - - - - - - CME - - - - - - - - - CoronalDimming - - - - - - - - - CoronalHole - - - - - - - - - CoronalJet - - - - - - - - - CoronalLoop - - - - - - - - - CoronalMassEjection - - - - - - - - - - - - - - - CoronalPhenomena - - - - - - - - - CoronalRain - - - - - - - - - - - - FMode - - - - - - - - - Filament - - - - - - - - - Flare - - - - - - - - - - - GMode - - - - - - - - - - - Granulation - - - - - - - - - Granule - - - - - - - - - Helioseismology - - - - - - - - - - - - - - PMode - - - - - - - - - Plage - - - - - - - - - Prominence - - - - - - - - - SolarActivity - star:SolarActivity - - - - - - - - - - - - - - - SolarPhenomena - - - - - - - - - - Spicule - - - - - - - - - - - - - - - StellarFusion - - - - - - - - - - - - - - - StellarPhenomena - - - - - - - - - StellarWind - star:StellarWind - - - - - - - - - Sunspot - - - - - - - - - Supergranulation - - - - - - - - - TerminationShock - - - - - - - - - sys:Accumulation - - - - - - - - - sys:Change - - - - - - - - - sys:Collection - - - - - - - - - sys:Comeback - - - - - - - - - sys:Conversion - - - - - - - - - - sys:Decline - - - - - - - - - - - - sys:Decrease - - - - - - - - - sys:Demand - - - - - - - - - sys:Deposit - - - - - - - - - sys:Destruction - - - - - - - - - sys:Displacement - - - - - - - - - sys:Disruption - - - - - - - - - sys:Disturbance - - - - - - - - - sys:Drift - - - - - - - - - sys:Drop - - - - - - - - - sys:Exchange - - - - - - - - - sys:Extension - - - - - - - - - sys:Fall - - - - - - - - - sys:Flow - - - - - - - - - sys:Growth - - - - - - - - - sys:Halting - - - - - - - - - - sys:Increase - - - - - - - - - sys:Interaction - - - - - - - - - sys:Interruption - - - - - - - - - sys:Inundation - - - - - - - - - sys:Lag - - - - - - - - - sys:Loss - - - - - - - - - sys:Oscillation - - - - - - - - - sys:Perturbation - - - - - - - - - sys:Recycling - - - - - - - - - sys:Reduction - - - - - - - - - sys:Removal - - - - - - - - - sys:Replenishment - - - - - - - - - sys:Retreat - - - - - - - - - sys:Return - - - - - - - - - sys:Rise - - - - - - - - - sys:Shift - - - - - - - - - sys:Stress - - - - - - - - - - sys:System - - - - - - - - - sys:SystemPhenomena - - - - - - - - - sys:SystemStateChange - - - - - - - - - sys:Trend - - - - - - - - - sys:Vacillation - - - - - - - - - sys:Variability - - - - - - - - - sys:Variation - - - - - - - - - comp:Cascade - - - - - - - - - comp:Collapse - sys:Collapse - - - - - - - - - comp:Decay - - - - - - - - - comp:Decouple - - - - - - - - - comp:Development - - - - - - - - - comp:Dissipate - - - - - - - - - - comp:Emergence - - - - - - - - - - comp:Emergent - - - - - - - - - comp:EmergentPhenomenon - - - - - - - - - comp:ErrorPropagation - - - - - - - - - comp:Evolution - sys:Evolution - - - - - - - - - comp:Feedback - - - - - - - - - comp:Fluctuation - sysc:Fluctuation - - - - - - - - - comp:Maturation - - - - - - - - - - comp:NegativeFeedback - - - - - - - - - comp:Pattern - - - - - - - - - comp:PositiveFeedback - - - - - - - - - comp:Recharge - - - - - - - - - comp:Resilience - - - - - - - - - comp:SelfRegulation - - - - - - - - - - - comp:Shock - sysc:Shock - - - - - - - - - comp:Signature - - - - - - - - - comp:Synergy - - - - - - - - - comp:SystemDynamics - - - - - - - - - - comp:Transformation - - - - - - - - - comp:Transforming - - - - - - - - - - wave:Acoustic - - - - - - - - - - - - - - - wave:AcousticGravityWave - - - - - - - - - - - - - - - - - - wave:AcousticWave - - - - - - - - - wave:Acoustics - - - - - - - - - wave:AlfvenWave - - - - - - - - - - wave:BodyWave - - - - - - - - - wave:CapillaryWave - - - - - - - - - wave:CompressionWave - - - - - - - - - - - - - - - wave:FluidWave - - - - - - - - - - wave:GravitationalWave - - - - - - - - - - - - - - - wave:GravityWave - - - - - - - - - - wave:HelmholtzWave - - - - - - - - - - - - - - - - - wave:InertiaWave - - - - - - - - - - wave:InertialWave - - - - - - - - - - - - - - - - - - wave:InternalGravityWave - - - - - - - - - - - wave:InternalWave - - - - - - - - - - - - - - - - wave:KelvinHelmholtzWave - - - - - - - - - - wave:KelvinWave - - - - - - - - - wave:LongCrestedWave - - - - - - - - - - - - - - - wave:LongitudinalWave - - - - - - - - - wave:MagnetohydrodynamicWave - - - - - - - - - - - wave:PlanetaryWave - - - - - - - - - - - - - - - wave:PlasmaWave - - - - - - - - - - - - - - - wave:RayleighWave - - - - - - - - - - wave:RossbyWave - - - - - - - - - wave:Seiche - - - - - - - - - - wave:ShallowWaterWave - - - - - - - - - - - - - - - - wave:ShearWave - - - - - - - - - - - - - - - wave:ShockWave - - - - - - - - - wave:ShortWave - - - - - - - - - - - - - - - wave:SolidWave - - - - - - - - - wave:Sound - - - - - - - - - wave:SoundWave - - - - - - - - - - wave:StandingWave - - - - - - - - - wave:SurfaceWave - - - - - - - - - - wave:TopographicWave - - - - - - - - - - - - - - - wave:TransverseWave - - - - - - - - - wave:TravelingWave - - - - - - - - - wave:Wave - wavep:Wave - - - - - - - - - - - - - - - wave:WavePhenomena - - - - - - - - - - - - - - wave:Whistler - - - - - - - - - AmbientNoise - - - - - - - - - Beat - - - - - - - - - - Chorus - - - - - - - - - Distortion - - - - - - - - - Flicker - - - - - - - - - Hiss - - - - - - - - - Interference - - - - - - - - - - - - - - - Noise - noise:Noise - - - - - - - - - PulseSpreading - - - - - - - - - - Resonance - - - - - - - - - Resonant - - - - - - - - - Scintillation - - - - - - - - - SideLobe - - - - - - - - - Vibration - - - - - - - - - WhiteNoise - - - - - - - - - proc:Force - - - - - - - - - proc:Interaction - - - - - - - - - proc:Process - - - - - - - - - - - Absorption - - - - - - - - - - - Acidification - - - - - - - - - - - Adsorption - - - - - - - - - Bioluminescence - - - - - - - - - - - Bond - - - - - - - - - - - Burning - - - - - - - - - - - Calcification - - - - - - - - - - - Calcination - - - - - - - - - - - ChargeExchange - - - - - - - - - - - ChemicalProcess - proc:ChemicalProcess - - - - - - - - - ChemicalReaction - cproc:ChemicalReaction - - - - - - - - - - - Combustion - - - - - - - - - - - Corrosion - - - - - - - - - - - Crystallization - - - - - - - - - - - - Dehydration - - - - - - - - - - - Desalinization - - - - - - - - - - - Dilution - - - - - - - - - - - - Dissolution - - - - - - - - - - - Electrolysis - - - - - - - - - - - Enrichment - - - - - - - - - - - Fixation - - - - - - - - - Fluorescence - - - - - - - - - - - Hydration - - - - - - - - - - - Hydrolysis - - - - - - - - - - - Leaching - - - - - - - - - Luminescence - - - - - - - - - - - Neutralization - - - - - - - - - - - Nitrification - - - - - - - - - - - NuclearFusion - cproc:NuclearFusion - - - - - - - - - - - Nucleation - - - - - - - - - - - Outgas - - - - - - - - - - - - Oxidation - - - - - - - - - Phosphorescence - - - - - - - - - - - - Photodecomposition - - - - - - - - - - - - Photodissociation - - - - - - - - - - - - - - - - - Photolysis - - - - - - - - - Reaction - - - - - - - - - Recrystalization - - - - - - - - - - - Reduction - - - - - - - - - - - Solvation - - - - - - - - - - - - - - - - - Sorption - - - - - - - - - Thermoluminescence - - - - - - - - - - - Titration - - - - - - - - - - - Transmutation - - - - - - - - - Triboluminescence - - - - - - - - - Abrasion - - - - - - - - - Agitation - - - - - - - - - Bombardment - - - - - - - - - Burning - - - - - - - - - CentrifugalForce - - - - - - - - - CentripetalForce - - - - - - - - - Clogging - - - - - - - - - Collision - proc:Collision - - - - - - - - - - - Compression - - - - - - - - - Conduction - proc:Conduction - - - - - - - - - Congealing - - - - - - - - - Consolidation - - - - - - - - - - Contracting - - - - - - - - - - Cooling - proc:Cooling - - - - - - - - - - - CoriolisEffect - - - - - - - - - - CoriolisForce - proc:CoriolisForce - - - - - - - - - - Current - - - - - - - - - Decompression - - - - - - - - - Deflection - - - - - - - - - DifferentialRotation - - - - - - - - - Dynamo - - - - - - - - - ElectricCurrent - pproc:ElectricCurrent - - - - - - - - - - ElectromagneticInduction - - - - - - - - - ElectromagneticProcess - - - - - - - - - - Expanding - - - - - - - - - Expansion - - - - - - - - - Falling - - - - - - - - - Flocculation - - - - - - - - - Flushing - - - - - - - - - Friction - - - - - - - - - Funnelling - - - - - - - - - - GravitationalForce - - - - - - - - - - Gravity - phys:Gravity - proc:Gravity - - - - - - - - - GravityForce - - - - - - - - - GyroOrbit - - - - - - - - - Heating - pproc:Heating - proc:Heating - - - - - - - - - Induction - - - - - - - - - Insulation - - - - - - - - - - IonizingRadiation - - - - - - - - - Magnetism - pproc:Magnetism - proc:Magnetism - - - - - - - - - Meandering - - - - - - - - - Migration - - - - - - - - - Motion - proc:Motion - - - - - - - - - NonIonizingRadiation - - - - - - - - - - Nucleosynthesis - - - - - - - - - - Orbit - proc:Orbit - - - - - - - - - OrbitalMotion - - - - - - - - - Orientation - - - - - - - - - PhysicalProcess - phys:PhysicalProcess - proc:PhysicalProcess - - - - - - - - - Precession - - - - - - - - - Pressure - proc:Pressure - - - - - - - - - - Quenching - - - - - - - - - Radiation - phys:Radiation - pproc:Radiation - - - - - - - - - RadiativeTransfer - proc:RadiativeTransfer - - - - - - - - - Rareification - - - - - - - - - Revolution - - - - - - - - - Rotation - pproc:Rotation - proc:Rotation - - - - - - - - - Sheltering - - - - - - - - - Shorten - - - - - - - - - Shrink - - - - - - - - - Sinking - - - - - - - - - Smashing - - - - - - - - - Sputtering - - - - - - - - - Tension - proc:Tension - - - - - - - - - ThermalProcess - - - - - - - - - Translation - - - - - - - - - Trapping - - - - - - - - - ViscousForce - proc:ViscousForce - - - - - - - - - Washing - - - - - - - - - Boiling - - - - - - - - - - - - - - - - - - - - - - Condensation - - - - - - - - - - - - - - - - - - - - - - Deionization - - - - - - - - - - - - - - - - - - - - - - Deposition - - - - - - - - - Evaporation - statec:Evaporation - - - - - - - - - - - - - - - - - - - - - - Freezing - statec:Freezing - - - - - - - - - - - - - - - - Gasification - - - - - - - - - - - - - - - - Ionization - - - - - - - - - - - - - - - - Liquiefaction - - - - - - - - - - - - - - - - - - - - - - Melting - statec:Melting - - - - - - - - - - PhaseTransition - - - - - - - - - Photoionization - - - - - - - - - Refreezing - - - - - - - - - - - - - - - - - - - - - StateChange - - - - - - - - - - - - - - - - - - - - - - Sublimation - - - - - - - - - Thawing - - - - - - - - - - - - - - - - - - - - - - Vaporization - - - - - - - - - wave:Absorption - - - - - - - - - wave:AcousticBackScattering - - - - - - - - - - wave:Attenuation - - - - - - - - - wave:Backscattering - - - - - - - - - wave:BraggDiffraction - - - - - - - - - wave:Damping - - - - - - - - - wave:Diffraction - - - - - - - - - wave:Dispersion - - - - - - - - - wave:Dissipation - - - - - - - - - wave:Echo - - - - - - - - - - - wave:ElectromagneticRadiation - - - - - - - - - - wave:ElectromagneticWave - - - - - - - - - wave:Emission - waves:Emission - - - - - - - - - wave:Excitation - - - - - - - - - wave:Extinction - - - - - - - - - wave:FraunhoferDiffraction - - - - - - - - - wave:FresnelDiffraction - - - - - - - - - wave:Interference - - - - - - - - - wave:LineEmission - - - - - - - - - - wave:LineOfSightPropagation - - - - - - - - - wave:MediumWaveInteractionProcess - - - - - - - - - wave:MieScattering - - - - - - - - - wave:Polarization - - - - - - - - - - wave:Propagation - - - - - - - - - wave:RayleighScattering - - - - - - - - - wave:Reflection - - - - - - - - - wave:Refraction - - - - - - - - - wave:Scattering - wavep:Scattering - - - - - - - - - wave:SchaeferBergmannDiffraction - - - - - - - - - wave:Transmission - - - - - - - - - wave:WaveDrag - - - - - - - - - wave:WaveProcess - - - - - - - - - wave:WavePropagation - - - - - - - - - Accuracy - - - - - - - - - AngularMotionProperty - prop:AngularMotionProperty - - - - - - - - - - - - - - - BiologicalProperty - prop:BiologicalProperty - - - - - - - - - - - - - - - ChemicalProperty - prop:ChemicalProperty - - - - - - - - - Distortion - - - - - - - - - Efficiency - - - - - - - - - ElectromagneticProperty - - - - - - - - - - - - - - - ElectromagneticRadiationProperty - prop:ElectromagneticRadiationProperty - - - - - - - - - Error - prop:Error - - - - - - - - - Fideltiy - - - - - - - - - FlowProperty - - - - - - - - - FluidProperty - prop:FluidProperty - - - - - - - - - - - - - - - GeologicalProperty - - - - - - - - - - - - - - - HydrogeologicalProperty - prop:HydrogeologicalProperty - - - - - - - - - Measure - prop:Measure - - - - - - - - - Metric - prop:Metric - - - - - - - - - - - - - - - MotionProperty - prop:MotionProperty - - - - - - - - - - - - - - - PhysicalProperty - prop:PhysicalProperty - - - - - - - - - Precision - - - - - - - - - Property - prop:Property - - - - - - - - - RadiationMediumInteractionProperty - prop:RadiationMediumInteractionProperty - - - - - - - - - ReactionProperty - prop:ReactionProperty - - - - - - - - - Role - prop:Role - - - - - - - - - Sensitivity - - - - - - - - - StatisticalSummary - prop:StatisticalSummary - - - - - - - - - StockProperty - - - - - - - - - SystemProperty - prop:SystemProperty - - - - - - - - - - - - - - - ThermodynamicProperty - prop:ThermodynamicProperty - - - - - - - - - WaveProperty - prop:WaveProperty - - - - - - - - - - bin:BinaryProperty - - - - - - - - - bin:Free - - - - - - - - - - bin:Polarity - - - - - - - - - capa:Capacity - - - - - - - - - - - - - - - - capa:CoefficientOfHeatTransfer - - - - - - - - - - - - - - - - - capa:CoefficientOfThermalExpansion - - - - - - - - - - - - - - - - capa:HeatCapacity - - - - - - - - - - - - - - - capa:LinearThermalExpansion - - - - - - - - - - - - - - - - capa:MolarHeatCapacity - - - - - - - - - - - - - - - - - capa:SpecificHeat - - - - - - - - - - capa:SpecificHeatCapacity - - - - - - - - - - capa:ThermalExpansionCoefficient - - - - - - - - - - - - - - - - capa:VolumetricHeatCapacity - - - - - - - - - - capa:VolumetricThermalExpansion - - - - - - - - - - - cate:CategoricalProperty - - - - - - - - - - cate:Category - - - - - - - - - - cate:Characteristics - - - - - - - - - cate:Classification - - - - - - - - - cate:Community - - - - - - - - - cate:Description - - - - - - - - - cate:Group - - - - - - - - - cate:Industry - - - - - - - - - cate:Name - - - - - - - - - - cate:SIC - - - - - - - - - cate:StandardIndustrialClassification - - - - - - - - - cate:Type - - - - - - - - - - - - - - - Capacitance - - - - - - - - - - - - - - - CationExchangeCapacity - - - - - - - - - Charge - char:Charge - - - - - - - - - - ChargeDistribution - - - - - - - - - - - - - - - - DielectricConstant - - - - - - - - - - - - - - - ElectricCharge - - - - - - - - - - - - - - - ElectricChargeDensity - - - - - - - - - - - - - - - ElectricCurrent - - - - - - - - - - - - - - - ElectricCurrentDensity - - - - - - - - - - - - - - - - ElectricDipoleMoment - - - - - - - - - - - - - - - ElectricFieldStrength - - - - - - - - - - - - - - - - ElectricFluxDensity - - - - - - - - - - - - - - - - - - - - - ElectricPotential - elec:ElectricPotential - - - - - - - - - - - - - - - ExchangeCapacity - - - - - - - - - - - - - - - - - - - - - Inductance - - - - - - - - - MagnetiGradient - - - - - - - - - MagneticDipoleMoment - - - - - - - - - - - - - - - MagneticFieldStrength - - - - - - - - - - - - - - - - MagneticFlux - - - - - - - - - - - - - - - - MagneticFluxDensity - - - - - - - - - - - - - - - - MagneticMoment - char:MagneticMoment - - - - - - - - - - - - - - - Permeability - - - - - - - - - - - - - - - Permittivity - - - - - - - - - Abundance - - - - - - - - - Acidity - - - - - - - - - - Alkalic - - - - - - - - - - Alkaline - - - - - - - - - - - Alkalinity - - - - - - - - - - BOD - - - - - - - - - Basic - - - - - - - - - Basicity - - - - - - - - - - BedLoad - - - - - - - - - - BiochemicalOxygenDemand - - - - - - - - - BiologicalOxygenDemand - - - - - - - - - - COD - - - - - - - - - - - - - CarbonateAlkalinity - - - - - - - - - ChemicalOxygenDemand - - - - - - - - - Composition - - - - - - - - - - - Constituent - prop:Constituent - - - - - - - - - - DissolvedLoad - - - - - - - - - - - - - - - HplusConcentration - - - - - - - - - - - - - - - IonComposition - - - - - - - - - - Load - - - - - - - - - Moisture - mass:Moisture - - - - - - - - - - OxygenDemand - - - - - - - - - Purity - - - - - - - - - Reactivity - - - - - - - - - - SAR - - - - - - - - - - - - - - - - - - - - - - Salinity - chem:Salinity - conc:Salinity - - - - - - - - - SaturationPoint - - - - - - - - - - - - - - - SaturationProperty - chem:SaturationProperty - - - - - - - - - - - - - - - - Sodicity - - - - - - - - - - - - - - - SodiumAdsorptionRatio - - - - - - - - - Solubility - - - - - - - - - - - - SuspendedLoad - - - - - - - - - - SuspensionLoad - - - - - - - - - - - - - TotalAlkalinity - - - - - - - - - - - - - - - - TotalDissolvedSolids - - - - - - - - - - - - - - - - TotalSuspendedSolids - - - - - - - - - - - - - - - WashLoad - - - - - - - - - - - - - - - - WaterConcentration - chem:WaterConcentration - - - - - - - - - Zoomass - - - - - - - - - pH - - - - - - - - - - - - - - - cond:Conductance - - - - - - - - - cond:Conductivity - - - - - - - - - - - - - - - - cond:ElectricalConductivity - - - - - - - - - cond:HallConductivity - - - - - - - - - - - - - - - - cond:HydraulicConductivity - - - - - - - - - - - - - - - cond:Impedance - - - - - - - - - cond:PedersenConductivity - - - - - - - - - cond:Resistance - - - - - - - - - - - - - - - cond:Resistivity - - - - - - - - - - - - - - - cond:SpecificConductance - - - - - - - - - - - - - - - - cond:ThermalConductivity - - - - - - - - - AtomicNeutralNumberDensity - - - - - - - - - CarryingCapacity - - - - - - - - - - Count - - - - - - - - - EnergyLevel - - - - - - - - - - - - - - - - Fluence - - - - - - - - - MolecularNeutralNumberDensity - - - - - - - - - NeutralNumberDensity - - - - - - - - - - - - - - - - NumberDensity - - - - - - - - - Population - - - - - - - - - - - - - - - SunspotNumber - - - - - - - - - TotalElectronContent - - - - - - - - - - Amplitude - - - - - - - - - Anomaly - diff:Anomaly - - - - - - - - - - Bias - - - - - - - - - - Deviation - diff:Deviation - - - - - - - - - - Difference - - - - - - - - - SaturationDeficit - - - - - - - - - - Tolerance - - - - - - - - - - - - - - - - - - - - - - Undulation - - - - - - - - - - - - - - - Confluence - - - - - - - - - - - - - - - Diffluence - - - - - - - - - Diffusivity - - - - - - - - - - - - - - - DiffusivityQuantity - - - - - - - - - - - - - - - EddyDiffusivity - - - - - - - - - - - - - - - KinematicViscosity - - - - - - - - - MeridionalOvertuningStreamfunction - - - - - - - - - - - - - - - Streamfunction - - - - - - - - - - ThermalDiffusivity - - - - - - - - - Transmissivity - - - - - - - - - - VelocityPotential - - - - - - - - - - - - - - - - - - - - - ratio:BowenRatio - - - - - - - - - ratio:ChiSquareValue - - - - - - - - - - - - - - - ratio:DimensionlessRatio - - - - - - - - - ratio:ReducedChiSquareValue - - - - - - - - - ratio:StatisticalScore - - - - - - - - - - - - - - - ratio:ZScore - - - - - - - - - - - - - - - ratio:tScore - - - - - - - - - AvailablePotentialEnergy - - - - - - - - - - BindingEnergy - - - - - - - - - - ChemicalEnergy - - - - - - - - - ConvectiveInhibition - - - - - - - - - - - - - - - Energy - ener:Energy - energy:Energy - - - - - - - - - - - - - - - - - EnergyBudget - - - - - - - - - - - - - - - - - - - - - - - - - - - - EnergyDensity - - - - - - - - - Enthalpy - - - - - - - - - Entropy - ener:Entropy - - - - - - - - - - - - - - - EvaporativeAvailablePotentialEnergy - - - - - - - - - Geopotential - - - - - - - - - GibbsFreeEnergy - - - - - - - - - - - - - - - - - - - - - GravitationalPotential - - - - - - - - - Hamiltonian - - - - - - - - - - - - Heat - ener:Heat - ther:Heat - - - - - - - - - - - - - - - HeatBudget - - - - - - - - - - HeatEnergy - - - - - - - - - InternalEnergy - - - - - - - - - - - IonizationEnergy - - - - - - - - - - IonizationPotential - - - - - - - - - - KineticEnergy - - - - - - - - - Lagrangian - - - - - - - - - - - LatentHeat - ener:LatentHeat - - - - - - - - - - Luminosity - - - - - - - - - - MatricPotential - - - - - - - - - PotentialEnergy - - - - - - - - - - - - - - - - - - - - - - - - - - - - Power - - - - - - - - - - - - - - - RadiantEnergy - - - - - - - - - - - SensibleHeat - ener:SensibleHeat - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpecificEnergy - - - - - - - - - - - - - - - SpecificPotentialEnergy - - - - - - - - - - ThermalEnergy - - - - - - - - - ThermochemicalEnergy - - - - - - - - - TotalSoilWaterPotential - - - - - - - - - Work - - - - - - - - - AbsorbedSolarRadiation - - - - - - - - - - AbsorptionCoefficient - - - - - - - - - - - - - - - - Brightness - - - - - - - - - - - BulkHeatFlux - - - - - - - - - - CloudForcing - - - - - - - - - - - - - - - - - - - - - EarthquakeScale - - - - - - - - - - - - - - - EnergyFlux - eflux:EnergyFlux - flux:EnergyFlux - - - - - - - - - - - - - - - EnergyFlux_Wm2 - flux:EnergyFlux_Wm2 - - - - - - - - - - - - - - - - FluxDensity - - - - - - - - - - - HeatFlow - - - - - - - - - - - HeatFlux - - - - - - - - - - - - - - - Illuminance - - - - - - - - - Insolation - - - - - - - - - Intensity - - - - - - - - - - - Irradiance - - - - - - - - - - - - - - - Luminance - - - - - - - - - - - - - - - LuminousFlux - - - - - - - - - - - - - - - LuminousIntensity - - - - - - - - - - - - - - - Opacity - - - - - - - - - - PoyntingVector - - - - - - - - - - - - - - - Radiance - - - - - - - - - - - RadiantFlux - - - - - - - - - - - RadiativeFlux - - - - - - - - - - - RadiativeForcing - rad:RadiativeForcing - - - - - - - - - RichterScale - - - - - - - - - SolarFlux - - - - - - - - - - SolarForcing - - - - - - - - - SolarRadiation - - - - - - - - - SpecificIntensity - - - - - - - - - SpectralRadiance - - - - - - - - - TerrestrialRadiation - - - - - - - - - - ThermalFlux - - - - - - - - - - med:Absorptance - - - - - - - - - - med:Absorptivity - - - - - - - - - - med:AirSpaceRatio - - - - - - - - - - med:Albedo - - - - - - - - - - med:AvailableWaterCapacity - - - - - - - - - - med:Bioavailability - - - - - - - - - med:BivariateStatisticalSummary - - - - - - - - - med:BondAlbedo - - - - - - - - - med:CapacityFactor - - - - - - - - - med:CloudCover - - - - - - - - - med:Coherence - - - - - - - - - med:ConditionalProbability - - - - - - - - - med:Correlation - - - - - - - - - med:Covariance - - - - - - - - - med:CrossCorrelation - - - - - - - - - med:DegreeOfIonization - - - - - - - - - - med:DifferentialWaterCapacity - - - - - - - - - - med:EffectivePorosity - - - - - - - - - med:Efficiency - - - - - - - - - - - med:Emissivity - - - - - - - - - - med:Emittance - - - - - - - - - - med:FPAR - - - - - - - - - - med:FieldCapacity - - - - - - - - - med:FractionPhotosyntheticActiveRadiation - - - - - - - - - - - - - - - - med:FractionalQuantity - - - - - - - - - - med:Humidity - - - - - - - - - med:JointProbability - - - - - - - - - med:Likelihood - - - - - - - - - med:MarketShare - - - - - - - - - med:MassFraction - - - - - - - - - med:Metallicity - - - - - - - - - med:MixingRatio - - - - - - - - - - med:MolarConcentration - - - - - - - - - med:MoleConcentration - - - - - - - - - med:MoleFraction - - - - - - - - - med:MoleRatio - - - - - - - - - med:PartialCorrelation - - - - - - - - - med:PearsonProductMomentCorrelation - - - - - - - - - - - - - - - - - med:Porosity - - - - - - - - - - med:Porousness - - - - - - - - - med:Probability - - - - - - - - - med:RankCorrelation - - - - - - - - - - med:Reflectance - - - - - - - - - - med:Reflectivity - - - - - - - - - - med:Refractivity - - - - - - - - - med:RelativeHumidity - - - - - - - - - - med:SaturationMixingRatio - - - - - - - - - med:SpecificHumidity - - - - - - - - - - med:Transmittance - - - - - - - - - - med:Transparency - - - - - - - - - med:VolumeFraction - - - - - - - - - med:VolumeMixingRatio - - - - - - - - - - med:WaterHoldingCapacity - - - - - - - - - med:pValue - - - - - - - - - - - - - - - - - - AnnualAverage - func:AnnualAverage - - - - - - - - - - Average - pstat:Average - stat:Average - - - - - - - - - - CriticalLevel - - - - - - - - - CriticalPoint - - - - - - - - - Decile - - - - - - - - - Disturbance - - - - - - - - - - - - - - - ErrorBar - - - - - - - - - - - FlippingPoint - - - - - - - - - Kurtosis - - - - - - - - - Maximum - func:Maximum - pstat:Maximum - - - - - - - - - Mean - - - - - - - - - Median - - - - - - - - - MidRange - - - - - - - - - Minimum - func:Minimum - pstat:Minimum - - - - - - - - - Mode - - - - - - - - - Moment - - - - - - - - - - - - - - - - - - MonthlyAverage - func:MonthlyAverage - - - - - - - - - Peak - - - - - - - - - Percentile - - - - - - - - - Quartile - - - - - - - - - Quintile - - - - - - - - - Skewness - - - - - - - - - Spread - - - - - - - - - - StandardDeviation - - - - - - - - - - - - - - - StandardError - - - - - - - - - - - TemporalAverage - stat:TemporalAverage - - - - - - - - - - - TemporalMean - - - - - - - - - Threshold - pstat:Threshold - - - - - - - - - - - TimeAverage - - - - - - - - - - - - - - - - TimeMean - - - - - - - - - - TippingPoint - - - - - - - - - - Variance - - - - - - - - - AdaptiveCapacity - - - - - - - - - AirQualityIndex - - - - - - - - - - AkasofuEpsilon - - - - - - - - - - - AuroralBoundaryIndex - - - - - - - - - - - - BIBI - - - - - - - - - - - - BenthicIndex - - - - - - - - - - - BenthicIndexOfBiologicalIntegrity - - - - - - - - - BlockingIndex - - - - - - - - - - - - - - - BoydenIndex - - - - - - - - - - COH - - - - - - - - - CirculationIndex - - - - - - - - - - - - - - - ClimateIndicator - - - - - - - - - CoefficientOfHaze - - - - - - - - - CommonSenseClimateIndex - - - - - - - - - ComputationalComplexity - - - - - - - - - CropMoistureIndex - - - - - - - - - - - - - - - DroughtIndex - - - - - - - - - - EPI - - - - - - - - - - ESI - - - - - - - - - EnvironmentalIndex - - - - - - - - - - - - - - - EnvironmentalIndicator - - - - - - - - - EnvironmentalPerformanceIndex - - - - - - - - - EnvironmentalSustainabilityIndex - - - - - - - - - FireWeatherIndex - - - - - - - - - ForestFireDangerIndex - - - - - - - - - GeomagneticForce - - - - - - - - - - - - - - - - GeomagneticIndex - - - - - - - - - GeophysicalIndex - - - - - - - - - - HealthIndex - - - - - - - - - - - - - - - Hydropattern - - - - - - - - - - IBI - - - - - - - - - Index - - - - - - - - - IndexDefinedByDifference - - - - - - - - - - IndexOfBiologicalIntegrity - - - - - - - - - IndexOfBioticIntegrity - - - - - - - - - - - - - - - KaplanSSTIndex - - - - - - - - - - - Kp - - - - - - - - - - NRMI - - - - - - - - - NaturalResourceManagementIndex - - - - - - - - - - - - - - - NorthAtlanticOscillationIndex - - - - - - - - - - - - - - - NorthPacificOscillationIndex - - - - - - - - - - - - PC - - - - - - - - - - PDI - - - - - - - - - - PDSI - - - - - - - - - - PHDI - - - - - - - - - - PalmerDroughtIndex - - - - - - - - - PalmerDroughtSeverityIndex - - - - - - - - - PalmerHydrologicalDroughtIndex - - - - - - - - - PhysiologicalParameter - - - - - - - - - - - PolarCapIndex - - - - - - - - - PsychologicalParameter - - - - - - - - - RingelmannChart - - - - - - - - - - SMI - - - - - - - - - - ShallowConvectionParameter - - - - - - - - - StandardizedPrecipitationIndex - - - - - - - - - - StorageCoefficient - - - - - - - - - Storativity - - - - - - - - - SurfaceMoistureIndex - - - - - - - - - - - - - - - Turbidity - med:Turbidity - - - - - - - - - UVIndex - - - - - - - - - Virulence - - - - - - - - - VitalStatistics - - - - - - - - - WaterQualityIndex - indx:WaterQualityIndex - - - - - - - - - ZonalIndex - - - - - - - - - - conc:BulkDensity - - - - - - - - - - conc:Consistence - - - - - - - - - conc:ConsistenceProperty - mass:ConsistenceProperty - - - - - - - - - conc:Consistency - - - - - - - - - - - - - - - - - conc:Content - - - - - - - - - - - - - - - - conc:Density - mass:Density - - - - - - - - - - conc:DissolvedConcentration - - - - - - - - - - conc:Dosage - - - - - - - - - conc:Dose - indi:Dose - - - - - - - - - - - - - - - conc:DryWeight - - - - - - - - - conc:Ductibility - - - - - - - - - conc:Elasticity - - - - - - - - - conc:Flexure - - - - - - - - - - conc:Grade - - - - - - - - - conc:Hardness - - - - - - - - - conc:Malleability - - - - - - - - - - - - - - - conc:Mass - mass:Mass - - - - - - - - - conc:MassConcentration - - - - - - - - - - - - - - - - - - - - - conc:MassContent - - - - - - - - - conc:MaterialProperty - mass:MaterialProperty - - - - - - - - - conc:MeanMolecularWeight - - - - - - - - - - conc:MolecularWeight - - - - - - - - - - - - - - - - conc:Moles - - - - - - - - - - - - - - - conc:OpticalMass - - - - - - - - - conc:Plasticity - - - - - - - - - - conc:PotentialDensity - - - - - - - - - conc:Roughness - - - - - - - - - - conc:SigmaT - - - - - - - - - conc:Softness - - - - - - - - - conc:SolidProperty - - - - - - - - - - conc:Solidity - - - - - - - - - conc:Solidness - - - - - - - - - - - - - - - conc:SpecificVolume - - - - - - - - - conc:StrengthProperty - mass:StrengthProperty - - - - - - - - - conc:Structure - - - - - - - - - conc:Texture - - - - - - - - - DarcyFlux - - - - - - - - - DifferentialFlux - - - - - - - - - EffectivePermeability - - - - - - - - - - GPP - - - - - - - - - GrossPrimaryProductivity - - - - - - - - - IntrinsicPermeability - - - - - - - - - - - - - - - MassFlux - - - - - - - - - - NPP - - - - - - - - - NetPrimaryProductivity - - - - - - - - - Permeability - - - - - - - - - PermeabilityCoefficent - - - - - - - - - PrimaryProductivity - - - - - - - - - Productivity - - - - - - - - - SpecificCapacity - - - - - - - - - SpecificDischarge - - - - - - - - - SpecificPermeability - - - - - - - - - - ActivityLevel - ordi:ActivityLevel - - - - - - - - - Age - ordi:Age - - - - - - - - - - Belief - - - - - - - - - Color - - - - - - - - - Condition - - - - - - - - - EducationalLevel - - - - - - - - - ElectromagneticSpectrum - - - - - - - - - - - - - - - FlareClass - ordi:FlareClass - - - - - - - - - Gradation - - - - - - - - - Impact - ordi:Impact - - - - - - - - - Level - - - - - - - - - Luster - - - - - - - - - MineralAssessment - ordi:MineralAssessment - - - - - - - - - - OrdinalProperty - ordi:OrdinalProperty - - - - - - - - - Pigment - - - - - - - - - ProcessingLevel - ordi:ProcessingLevel - - - - - - - - - Qualifier - ordi:Qualifier - - - - - - - - - Quality - - - - - - - - - SpatialScale - ordi:SpatialScale - - - - - - - - - - SpectralBand - ordi:SpectralBand - - - - - - - - - - SpectralLine - ordi:SpectralLine - - - - - - - - - Streak - - - - - - - - - TemperatureRange - ordi:TemperatureRange - - - - - - - - - TrophicLevel - - - - - - - - - Trust - ordi:Trust - - - - - - - - - Visibility - ordi:Visibility - - - - - - - - - - AirPressure - - - - - - - - - - AtmosphericPressure - - - - - - - - - BarometricPressure - - - - - - - - - BarometricTendency - - - - - - - - - BulkModulus - - - - - - - - - - - - - - - Compressibility - - - - - - - - - CompressiveStrength - - - - - - - - - DifferentialPressure - - - - - - - - - - - DynamicViscosity - - - - - - - - - ExnerFunction - - - - - - - - - HydrostaticPressure - - - - - - - - - - - ModulusOfElasticity - - - - - - - - - - MomentumFlux - - - - - - - - - - NormalStress - - - - - - - - - PartialPressure - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pressure - pres:Pressure - - - - - - - - - - - - - - - - - - - - - - PressureGradient - pres:PressureGradient - - - - - - - - - - - - - - - - PressureTendency - - - - - - - - - - - SeaLevelPressure - - - - - - - - - - - - - - - - ShearModulus - - - - - - - - - - - - - - - - ShearStress - - - - - - - - - StaticPressure - - - - - - - - - - - - - - - - Stiffness - - - - - - - - - Strength - - - - - - - - - Stress - - - - - - - - - Suction - - - - - - - - - - - - - - - - - SurfaceTension - - - - - - - - - TensileStrength - - - - - - - - - - - - - - - TensileStress - - - - - - - - - TotalPressure - - - - - - - - - - - - - - - - - - - - - - Viscosity - - - - - - - - - - YoungsModulus - - - - - - - - - - BalanceEquation - - - - - - - - - - - BiologicalQuantity - - - - - - - - - - Budget - quan:Budget - - - - - - - - - BudgetEquation - - - - - - - - - - - ChemicalQuantity - quan:ChemicalQuantity - - - - - - - - - ConservedQuantity - quan:ConservedQuantity - - - - - - - - - - - ElectromagneticQuantity - quan:ElectromagneticQuantity - - - - - - - - - - - ElectromagneticRadiationQuantity - quan:ElectromagneticRadiationQuantity - - - - - - - - - - - ExtensiveProperty - quan:ExtensiveProperty - - - - - - - - - FieldStrength - - - - - - - - - Flux - quan:Flux - - - - - - - - - - - - - - - Force - quan:Force - - - - - - - - - - IntensiveProperty - quan:IntensiveProperty - - - - - - - - - IntervalQuantity - quan:IntervalQuantity - - - - - - - - - PhysicalConstant - quan:PhysicalConstant - - - - - - - - - - - PhysicalQuantity - quan:PhysicalQuantity - - - - - - - - - Potential - - - - - - - - - - QuantitativeProperty - - - - - - - - - Quantity - quan:Quantity - - - - - - - - - - - RadiationMediumInteractionQuantity - quan:RadiationMediumInteractionQuantity - - - - - - - - - ScalarPotential - quan:ScalarPotential - - - - - - - - - - - - 1 - - - ScientificQuantity - - - - - - - - - StokesParameters - - - - - - - - - - - ThermodynamicQuantity - quan:ThermodynamicQuantity - - - - - - - - - - VectorPotential - - - - - - - - - VectorQuantity - quan:VectorQuantity - - - - - - - - - AbsoluteVorticity - - - - - - - - - - - - - - - - AngularAcceleration - - - - - - - - - - - - - - - AngularMomentum - - - - - - - - - - - - - - - - AngularVelocity - - - - - - - - - - - - - - - Circulation - - - - - - - - - - CoriolisParameter - - - - - - - - - - - - - - - Curl - - - - - - - - - - CyclotronFrequency - - - - - - - - - - Enstrophy - - - - - - - - - - - - - - - ErtelPotentialVorticity - - - - - - - - - Gyrofrequency - - - - - - - - - - - - - - - Helicity - - - - - - - - - - MomentOfInertia - - - - - - - - - - PotentialVorticity - - - - - - - - - RelativeVorticity - - - - - - - - - Spin - - - - - - - - - - - - - - - - Torque - - - - - - - - - - - - - - - Vorticity - - - - - - - - - AngularDistribution - - - - - - - - - - Configuration - prop:Configuration - spac:Configuration - - - - - - - - - - Connectivity - spac:Connectivity - - - - - - - - - - Containment - - - - - - - - - Curvature - - - - - - - - - - - - - - - LinearExtent - - - - - - - - - Morphology - - - - - - - - - - - - - - - - OrbitalConfiguration - spac:OrbitalConfiguration - - - - - - - - - - Shape - spac:Shape - - - - - - - - - SpatialConfiguration - spac:SpatialConfiguration - - - - - - - - - - - SpatialDistribution - spac:SpatialDistribution - - - - - - - - - SpatialExtent - spac:SpatialExtent - space:SpatialExtent - - - - - - - - - - SpatialMeasure - dist:SpatialMeasure - - - - - - - - - - - - - - - SpatialProperty - space:SpatialProperty - - - - - - - - - SpatialSource - spac:SpatialSource - - - - - - - - - - - - - - - - - - - 2 - - - Angle - - - - - - - - - - - AngularDirection - mdir2:AngularDirection - - - - - - - - - - - Attitude - - - - - - - - - - - Axis - dir:Axis - - - - - - - - - - - Azimuth - - - - - - - - - - - AzimuthalDirection - - - - - - - - - - Bearing - - - - - - - - - - Direction - dir:Direction - mdir2:Direction - - - - - - - - - - - HorizontalDirection - mdir2:HorizontalDirection - - - - - - - - - - - Incidence - - - - - - - - - Inclination - - - - - - - - - - - - Incoming - - - - - - - - - - - Inward - - - - - - - - - - - Lateral - - - - - - - - - - - Orientation - - - - - - - - - - - - - - - - - - Outgoing - - - - - - - - - - - Outward - - - - - - - - - - - PolarDirection - - - - - - - - - - - Radial - - - - - - - - - - - - - - - - - - - - - - SolidAngle - - - - - - - - - - - Tilt - - - - - - - - - - - VerticalDirection - mdir2:VerticalDirection - - - - - - - - - - - Zenith - - - - - - - - - - AttenuationCoefficient - - - - - - - - - CompactionCoefficient - - - - - - - - - - CyclotronRadius - - - - - - - - - - DebyeLength - - - - - - - - - DebyeScreeningLength - - - - - - - - - - - - - - - DispersionCoeffienct - - - - - - - - - Dispersivity - - - - - - - - - Distance - dist:Distance - xten:Distance - - - - - - - - - - - - - - - DistanceRange - - - - - - - - - - - - - - - DistanceRange_km - dist:DistanceRange_km - - - - - - - - - ExtinctionCoefficient - - - - - - - - - Fetch - - - - - - - - - GrainSize - - - - - - - - - - Gyroradius - - - - - - - - - LarmorRadius - - - - - - - - - - - - - 1 - - - Length - dist:Length - - - - - - - - - - - - - - - - MeanFreePath - - - - - - - - - MixingLength - - - - - - - - - ObukhovLength - - - - - - - - - - - - - - - - PerMeterQuantity - - - - - - - - - PulseLength - - - - - - - - - Range - - - - - - - - - RossbyRadiusOfDeformation - - - - - - - - - - - - - - - ScatteringCoefficient - - - - - - - - - Size - dist:Size - - - - - - - - - - - - - - - SizeRange - - - - - - - - - - - - - - - SizeRange_micron - xten2:SizeRange_micron - - - - - - - - - - SpatialFrequency - - - - - - - - - - Visibility - - - - - - - - - - WaveNumber - - - - - - - - - - Wavelength - dist:Wavelength - - - - - - - - - - - - - - - WavelengthBand - - - - - - - - - - - - - - - WavelengthBand_nm - waves:WavelengthBand_nm - - - - - - - - - - - - - - - Wavelength_cm - waves:Wavelength_cm - - - - - - - - - - - - - - - Wavelength_nm - waves:Wavelength_nm - - - - - - - - - - Altitude - - - - - - - - - - BarometricAltitude - - - - - - - - - - Bathymetry - - - - - - - - - Ceiling - - - - - - - - - Crest - - - - - - - - - DampingDepth - - - - - - - - - - Depth - heig:Depth - ht:Depth - - - - - - - - - - - - - - - DepthRange - - - - - - - - - - - - - - - DepthRange_km - ht:DepthRange_km - - - - - - - - - Drawdown - - - - - - - - - DynamicTopography - - - - - - - - - Elevation - ht:Elevation - - - - - - - - - EstimatedCeiling - - - - - - - - - - FlightLevel - - - - - - - - - Freeboard - - - - - - - - - - Geoid - ht:Geoid - - - - - - - - - GeopotentialHeight - - - - - - - - - - Height - heig:Height - ht:Height - - - - - - - - - - - - - - - HeightRange - ht:HeightRange - - - - - - - - - - - - - - - HeightRange_km - ht:HeightRange_km - - - - - - - - - Level - ht:Level - - - - - - - - - MixingHeight - - - - - - - - - ScaleHeight - - - - - - - - - - SeaLevel - surf:SeaLevel - - - - - - - - - - - - - - - SeaState - - - - - - - - - - SecchiDepth - - - - - - - - - SignificantHeight - - - - - - - - - SkinDepth - - - - - - - - - TopographicProminence - - - - - - - - - Topography - - - - - - - - - UpperLevel - - - - - - - - - VerticalExtent - ht:VerticalExtent - vert:VerticalExtent - - - - - - - - - - loca:Center - - - - - - - - - loca:CenterOfMass - - - - - - - - - - loca:ControlPoint - - - - - - - - - loca:Epicenter - - - - - - - - - - - loca:Focii - - - - - - - - - - loca:Focus - - - - - - - - - - - - - - - - loca:LagrangianPoint - - - - - - - - - - - - loca:Location - - - - - - - - - - loca:MirrorPoint - - - - - - - - - - loca:Nadir - - - - - - - - - - - loca:Position - - - - - - - - - - loca:SubsolarPoint - - - - - - - - - - - - - - - mult:AngularExtent - - - - - - - - - - - - - - - - - - 2 - - - mult:Area - - - - - - - - - mult:Capacity - - - - - - - - - mult:CarbonFootprint - - - - - - - - - - mult:CrossSection - - - - - - - - - mult:CrossSectionalArea - - - - - - - - - mult:FieldOfView - - - - - - - - - mult:Footprint - - - - - - - - - - - mult:RadarCrossSection - - - - - - - - - mult:Resolution - - - - - - - - - - - - - - - - - - 3 - - - mult:Volume - spac:Volume - - - - - - - - - - thic:AverageAnnualPrecipitation - - - - - - - - - - - - - - - - thic:AverageDrySeasonPrecipitation - - - - - - - - - - thic:AverageMonthlyPrecipitation - - - - - - - - - thic:EquivalentThickness - - - - - - - - - thic:Evapotranspiration - - - - - - - - - - thic:FluidHead - - - - - - - - - thic:GaugeHeight - - - - - - - - - thic:HalfPotentialEvapotranspiration - - - - - - - - - - - - - - - thic:HydraulicHead - - - - - - - - - - thic:LWE - - - - - - - - - thic:LakeStage - - - - - - - - - thic:LiquidWaterEquivalent - - - - - - - - - - - - - - - - thic:OpticalDepth - - - - - - - - - thic:OpticalThickness - - - - - - - - - thic:PotentialEvapotranspiration - - - - - - - - - thic:PrecipitableWater - - - - - - - - - thic:Precipitation - - - - - - - - - - thic:PrecipitationRange - - - - - - - - - - - - - - - thic:PrecipitationRange_cm - - - - - - - - - - - - - - - thic:PressureThickness - - - - - - - - - - - thic:SWE - - - - - - - - - - - - - - - thic:SnowCover - - - - - - - - - - thic:SnowWaterEquivalent - - - - - - - - - thic:Snowpack - - - - - - - - - thic:StageHeight - - - - - - - - - thic:StaticHead - - - - - - - - - thic:StreamStage - - - - - - - - - - thic:Thickness - - - - - - - - - thic:TotalHead - - - - - - - - - - - - - - - thic:WaterContent - - - - - - - - - - - - - - - thic:WaterHeight - - - - - - - - - - - - - - - - Acceleration - - - - - - - - - Airspeed - - - - - - - - - AlfvenVelocity - - - - - - - - - DopplerVelocity - - - - - - - - - Drift - - - - - - - - - EscapeVelocity - - - - - - - - - GroundSpeed - - - - - - - - - - GroupVelocity - - - - - - - - - Inertia - - - - - - - - - IonVelocity - - - - - - - - - - MagnetiCurvatureDrift - - - - - - - - - - - - - - - - Momentum - dyna:Momentum - - - - - - - - - NeutralVelocity - - - - - - - - - Omega - - - - - - - - - - PhaseVelocity - - - - - - - - - ProperMotion - - - - - - - - - RadialVelocity - - - - - - - - - - SeepageVelocity - - - - - - - - - - - - - - - - Speed - velo:Speed - - - - - - - - - TangentialAcceleration - - - - - - - - - TerminalVelocity - - - - - - - - - ThermalVelocity - - - - - - - - - - - - - - - - - Velocity - velo:Velocity - - - - - - - - - - - - - - - VerticalVelocity - - - - - - - - - WindShear - - - - - - - - - - - - - - - WindSpeed - vel:WindSpeed - - - - - - - - - AntennaTemperature - - - - - - - - - BoilingPoint - - - - - - - - - BrightnessTemperature - - - - - - - - - - - - - - - ColdestMonthTemperature - temp:ColdestMonthTemperature - - - - - - - - - - DewPoint - - - - - - - - - - - - - - - - - - - - - - - DewPointDepression - - - - - - - - - DewPointTemperature - - - - - - - - - DryBulbTemperature - - - - - - - - - EffectiveTemperature - - - - - - - - - - - - - - - ElectronTemperature - - - - - - - - - EquivalentPotentialTemperature - - - - - - - - - EquivalentTemperature - - - - - - - - - GlobalWarmingPotential - - - - - - - - - - - - - - - IonTemperature - - - - - - - - - KineticTemperature - - - - - - - - - - MeanAnnualTemperature - temp:MeanAnnualTemperature - - - - - - - - - - MeanMonthlyTemperature - temp:MeanMonthlyTemperature - - - - - - - - - MeltingPoint - - - - - - - - - - - - - - - NeutralTemperature - - - - - - - - - - - - - - - PotentialTemperature - - - - - - - - - - - - - - - PseudoEquivalentPotentialTemperature - - - - - - - - - - - - - - - PseudoEquivalentTemperature - - - - - - - - - StaticTemperature - - - - - - - - - - - - - - - - - - - - - Temperature - temp:Temperature - therm:Temperature - thermo:Temperature - - - - - - - - - - - - - - - TemperatureRange - temp:TemperatureRange - - - - - - - - - TotalTemperature - - - - - - - - - TriplePoint - - - - - - - - - VirtualPotentialTemperature - - - - - - - - - VirtualTemperature - - - - - - - - - - - - - - - WarmestMonthTemperature - temp:WarmestMonthTemperature - - - - - - - - - WetBulbPotentialTemperature - - - - - - - - - WetBulbTemperature - - - - - - - - - - WindChill - - - - - - - - - - - - - - - WindChillIndex - - - - - - - - - AutoConvectiveLapseRate - - - - - - - - - - - - - - - DryAdiabaticLapseRate - - - - - - - - - EnvironmentalLapseRate - - - - - - - - - LapseRate - - - - - - - - - - - - - - - - TemperatureDepthDerivative - - - - - - - - - - - - - - - - - - - - - - TemperatureGradient - tempg:TemperatureGradient - thermo:TemperatureGradient - - - - - - - - - - - - - - - TemperatureGradientRange - - - - - - - - - - - - - - - - TemperatureHeightDerivative - - - - - - - - - ThermalGradient - - - - - - - - - - - - ThermalProfile - - - - - - - - - Age - - - - - - - - - - AverageITCZDominanceDuration - time:AverageITCZDominanceDuration - - - - - - - - - - AverageSnowCoverDuration - time:AverageSnowCoverDuration - - - - - - - - - - AverageWinterDuration - time:AverageWinterDuration - - - - - - - - - CurrentTime - - - - - - - - - - - - - - - Cycle - - - - - - - - - Delay - - - - - - - - - - - DoublingTime - - - - - - - - - - - - - Duration - time:Duration - - - - - - - - - - - DurationDescription - - - - - - - - - - - EFoldingTime - - - - - - - - - EndTime - time:EndTime - - - - - - - - - - Episode - - - - - - - - - Episodic - - - - - - - - - Exposure - - - - - - - - - - - - - - - - GeologicTime - - - - - - - - - Hydroperiod - - - - - - - - - - - - - - - - - ITCZDominanceDuration - - - - - - - - - Latency - - - - - - - - - - - - - - - - - MonthRange - ptime:MonthRange - - - - - - - - - Period - time:Period - - - - - - - - - Repose - - - - - - - - - - - ResidenceTime - - - - - - - - - - - - - - - - - SnowCoverDuration - - - - - - - - - StartTime - time:StartTime - - - - - - - - - - TemporalExtent - - - - - - - - - - - - - - - - TemporalRange - - - - - - - - - - - - - - - Time - time:Time - - - - - - - - - - - TimeInterval - - - - - - - - - - - - - - - - - - - - - - - TimePeriod - - - - - - - - - TimeRange - - - - - - - - - - - TimeStep - - - - - - - - - Timestamp - - - - - - - - - - - - - - - - - WinterDuration - - - - - - - - - - Bandwidth - - - - - - - - - - - - - - - BruntVaisalaFrequency - - - - - - - - - Cadence - - - - - - - - - - - - - - - Convergence - rate:Convergence - - - - - - - - - - - - - - - - - - - - - Divergence - rate:Divergence - - - - - - - - - - Fertility - - - - - - - - - - - - - - - - - Frequency - freq:Frequency - - - - - - - - - - - - - - - FrequencyBand - - - - - - - - - - - - - - - FrequencyBand_MHz - freq:FrequencyBand_MHz - - - - - - - - - Incidence - - - - - - - - - - - - - - - - - - - - - - Rate - - - - - - - - - - SpreadingRate - - - - - - - - - Tendency - rate:Tendency - - - - - - - - - - - - - - - - - - - - - Atmosphere - plan:Atmosphere - planet:Atmosphere - realm:Atmosphere - - - - - - - - - CriticalZone - - - - - - - - - - - - - - - - - - - - - Cryosphere - - - - - - - - - - - - - - - - - - - - - - Geosphere - planet:Geosphere - - - - - - - - - - GlobalPlanetaryLayer - - - - - - - - - - - - - - - Hydrosphere - planet:Hydrosphere - realm:Hydrosphere - - - - - - - - - - - - - - - - Land - planet:Land - realm:Land - - - - - - - - - - - - - - - - - - - - - Ocean - planet:Ocean - realm:Ocean - - - - - - - - - - - PlanetaryBoundary - planet:PlanetaryBoundary - realm:PlanetaryBoundary - - - - - - - - - PlanetaryLayer - planet:PlanetaryLayer - realm:PlanetaryLayer - - - - - - - - - PlanetaryRealm - planet:PlanetaryRealm - realm:PlanetaryRealm - - - - - - - - - PlanetaryStructure - realm:PlanetaryStructure - - - - - - - - - - - - PlanetarySurface - planet:PlanetarySurface - realm:PlanetarySurface - - - - - - - - - - PlanetarySurfaceLevel - planet:PlanetarySurfaceLevel - realm:PlanetarySurfaceLevel - - - - - - - - - Realm - realm:Realm - - - - - - - - - - - - - - - Ring - - - - - - - - - - Subaerial - - - - - - - - - Asteroid - - - - - - - - - AstronomicalBody - body:AstronomicalBody - - - - - - - - - Comet - - - - - - - - - Extraterrestrial - - - - - - - - - Galaxy - - - - - - - - - - - - - - - Moon - - - - - - - - - OuterSpace - body:OuterSpace - - - - - - - - - - - - - - - Planet - astro2:Planet - - - - - - - - - Satellite - - - - - - - - - Star - astro2:Star - - - - - - - - - - - - - - - - - - - - - - heli:DLayer - helio:DLayer - - - - - - - - - - - - - - - - - - - - - - heli:ELayer - helio:ELayer - - - - - - - - - - heli:Exosphere - helio:Exosphere - - - - - - - - - - - - - - - - - - - - - - heli:FLayer - helio:FLayer - - - - - - - - - - helio:Heliopause - - - - - - - - - - helio:Heliosphere - - - - - - - - - - heli:Ionosphere - helio:Ionosphere - - - - - - - - - - - - - - - - helio:LowerHeliosphere - - - - - - - - - - helio:Magnetosphere - - - - - - - - - - helio:Plasmapause - - - - - - - - - - - - - - - - - - - - - - - - - - - - helio:Plasmasphere - - - - - - - - - - - - - - - - - helio:RadiationBelt - - - - - - - - - - - - - - - - helio:UpperHeliosphere - - - - - - - - - - helio:VanAllenBelt - - - - - - - - - ActiveRegion - - - - - - - - - - - - - - - Chromosphere - - - - - - - - - - ConvectionZone - - - - - - - - - - - - - - - Corona - srealm:Corona - - - - - - - - - Photosphere - - - - - - - - - RadiativeZone - - - - - - - - - StellarAtmosphere - - - - - - - - - - - - - - - StellarCore - - - - - - - - - StellarInterior - - - - - - - - - StellarRealm - srealm:StellarRealm - - - - - - - - - Tacocline - - - - - - - - - - - - - - - - AtmosphereLayer - atmo:AtmosphereLayer - - - - - - - - - FreeTroposphere - - - - - - - - - - - - - - - - InversionLayer - - - - - - - - - - - - - - - JungeAerosolLayer - - - - - - - - - LowerAtmosphere - - - - - - - - - - Mesopause - - - - - - - - - - - - - - - - - - - - - - - - - - - Mesosphere - atmo:Mesosphere - - - - - - - - - - MiddleAtmosphere - - - - - - - - - OzoneLayer - - - - - - - - - - Stratopause - - - - - - - - - - - - - - - - - - - - - - - - - - - Stratosphere - atmo:Stratosphere - - - - - - - - - TemperatureInversionLayer - - - - - - - - - - - - - - - - - - - - - Thermosphere - atmo:Thermosphere - - - - - - - - - - Tropopause - - - - - - - - - - - - - - - - - - - - - - - - - - - Troposphere - atmo:Troposphere - - - - - - - - - UpperAtmosphere - - - - - - - - - - AtmosphericBoundaryLayer - - - - - - - - - - BoundaryLayer - - - - - - - - - Cap - - - - - - - - - - - ConstantFluxLayer - - - - - - - - - - - InternalBoundaryLayer - - - - - - - - - - - - - - - MechanicalInternalBoundaryLayer - - - - - - - - - - - - - - - - - MixedLayer - boun:MixedLayer - - - - - - - - - - - - - - - - - NocturnalBoundaryLayer - - - - - - - - - - - OuterLayer - - - - - - - - - - - - - - - PlanetaryBoundaryLayer - - - - - - - - - - - ResidualLayer - - - - - - - - - - - - - - - - - RoughnessSublayer - - - - - - - - - - - SkinLayer - - - - - - - - - - - StableBoundaryLayer - - - - - - - - - - - - - - - - - WellMixedLayer - - - - - - - - - AdiabaticCondensationLevel - - - - - - - - - - CloudBase - - - - - - - - - - CloudTop - - - - - - - - - CondensationLevel - - - - - - - - - - ConvectiveCloudBase - - - - - - - - - - ConvectiveCloudTop - - - - - - - - - ConvectiveCondensationLevel - - - - - - - - - - - - - - - FreeConvectiveLayer - - - - - - - - - - - FreezingLevel - - - - - - - - - - - LFC - - - - - - - - - - LevelOfFreeConvection - - - - - - - - - - MaximumWindSpeedLevel - - - - - - - - - - - - - - - - MeltingLayer - - - - - - - - - - - - - - - - MeltingLevel - - - - - - - - - - - - - - - - SnowGeneratingLevel - - - - - - - - - ZoneOfMaximumPrecipitation - - - - - - - - - - - - - - - Anthromes - - - - - - - - - - - - - - - AquaticEcosystem - - - - - - - - - Barren - - - - - - - - - Biome - - - - - - - - - Biota - - - - - - - - - BorealForest - - - - - - - - - CaveEcosystem - - - - - - - - - - - - - - - CoralReef - - - - - - - - - Croplands - - - - - - - - - DenseSettlements - - - - - - - - - Ecosystem - - - - - - - - - EmergentLayer - - - - - - - - - Fishery - - - - - - - - - - - - - - - Forest - - - - - - - - - Forested - - - - - - - - - - FreshwaterEcosystem - - - - - - - - - - - - - - - Grassland - - - - - - - - - MarineEcosystem - - - - - - - - - Montane - - - - - - - - - Pasture - - - - - - - - - Rangelands - - - - - - - - - Savanna - - - - - - - - - - - - - - - Scrubland - - - - - - - - - SeaGrass - - - - - - - - - SparseTrees - - - - - - - - - Steppe - - - - - - - - - - - - - - - - - - - - - - - - - - - Taiga - - - - - - - - - - - - - - - TemperateForest - - - - - - - - - Terrain - - - - - - - - - - - - - - - TerrestrialBiome - - - - - - - - - - - - - - - TerrestrialEcosystem - - - - - - - - - - - - - - - TropicalForest - - - - - - - - - Villages - - - - - - - - - Wildlands - - - - - - - - - Woodland - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A - - - - - - - - - - - - - - - - - - - - B - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C - zone:C - - - - - - - - - - ClimateClassification - - - - - - - - - ClimateZoneType - zone:ClimateZoneType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - D - - - - - - - - - DesertClimateZone - - - - - - - - - - - - - - - Doldrums - - - - - - - - - DryClimate - - - - - - - - - - - - - - - DryWinterClimate - - - - - - - - - E - - - - - - - - - Equator - - - - - - - - - - ITCZ - zone:ITCZ - - - - - - - - - - - - - - - IntertropicalConvergenceZone - - - - - - - - - - - - - - - MarineClimate - - - - - - - - - RainShadow - - - - - - - - - SubtropicalClimateZone - - - - - - - - - TemperateClimate - - - - - - - - - TropicalClimate - - - - - - - - - TropicalClimateZone - - - - - - - - - - - - - - - WetSummerClimate - - - - - - - - - - WetSummerDryWinterClimate - - - - - - - - - cryo:AblationZone - - - - - - - - - cryo:AccumulationZone - - - - - - - - - cryo:AlpineTundra - - - - - - - - - cryo:Calf - - - - - - - - - cryo:CongelationIce - - - - - - - - - - cryo:DriftIce - - - - - - - - - cryo:FastIce - - - - - - - - - - cryo:Floe - - - - - - - - - cryo:FrazilIce - - - - - - - - - - - - - - - cryo:FrozenGround - - - - - - - - - cryo:GlacialRegion - - - - - - - - - cryo:Glacier - - - - - - - - - - cryo:GlacierTerminus - - - - - - - - - - cryo:IceBase - - - - - - - - - cryo:IceCap - - - - - - - - - - - - - - - cryo:IceCore - - - - - - - - - cryo:IceField - - - - - - - - - cryo:IceFloe - - - - - - - - - cryo:IceSheet - - - - - - - - - cryo:IceShelf - - - - - - - - - - cryo:IceSnowInterface - - - - - - - - - cryo:IceStream - - - - - - - - - - cryo:IceSurface - - - - - - - - - - - - - - - cryo:Iceberg - - - - - - - - - - - - - - - cryo:LandIce - - - - - - - - - cryo:Lead - - - - - - - - - cryo:PackIce - - - - - - - - - - - - - - - cryo:SeaIce - - - - - - - - - cryo:SeasonalIce - - - - - - - - - cryo:Snout - - - - - - - - - cryo:TabularIceberg - - - - - - - - - - - - - - - cryo:Tundra - - - - - - - - - - Asthenosphere - - - - - - - - - Basement - - - - - - - - - Batholith - - - - - - - - - Bedrock - - - - - - - - - - BrittleDuctileTransitionZone - - - - - - - - - Continental - geol:Continental - - - - - - - - - Core - geol:Core - - - - - - - - - - CoreMantleBoundary - - - - - - - - - Cover - - - - - - - - - - - - - - - - Crust - geol:Crust - geolr:Crust - - - - - - - - - - CrustMantleBoundary - - - - - - - - - DLayer - - - - - - - - - Dike - - - - - - - - - - Fabric - - - - - - - - - - GeologicBoundary - geol:GeologicBoundary - - - - - - - - - - - - - - - GeologicFeature - geol:GeologicFeature - geolr:GeologicFeature - - - - - - - - - GeologicProvince - geol:GeologicProvince - geolr:GeologicProvince - - - - - - - - - - - - - - - - GeologicStructure - - - - - - - - - - - - - - - - - GeosphereLayer - - - - - - - - - GiantDikeSwarm - - - - - - - - - GuttenburgDiscontinuity - - - - - - - - - - InnerCore - - - - - - - - - Laccolith - - - - - - - - - LehmannDiscontinuity - - - - - - - - - - - - - - - Lithosphere - geol:Lithosphere - - - - - - - - - Lopolith - - - - - - - - - LowerMantle - - - - - - - - - - - - - - - Mantle - geolr:Mantle - - - - - - - - - - Mesosphere - - - - - - - - - - Moho - - - - - - - - - Mohorovi_i_Discontinuity - - - - - - - - - OuterCore - - - - - - - - - PlutonicStructure - - - - - - - - - SeismicZone - - - - - - - - - Sill - - - - - - - - - SkinLayer - - - - - - - - - SolidEarth - geolr:SolidEarth - - - - - - - - - Subsurface - - - - - - - - - - TransitionalCrust - - - - - - - - - - - - - - - TransitionalLithosphere - - - - - - - - - UpperMantle - geol:UpperMantle - - - - - - - - - UpperMantleFlowing - - - - - - - - - UpperMantleRigid - - - - - - - - - BackArcBasin - - - - - - - - - - Basin - - - - - - - - - FlyschBasin - - - - - - - - - ForeArcBasin - - - - - - - - - ForelandBasin - basin:ForelandBasin - - - - - - - - - IntraArcBasin - - - - - - - - - IntracratonicBasin - basin:IntracratonicBasin - - - - - - - - - - - - - - - - - - - - - PeripheralForelandBasin - - - - - - - - - RetroarcForelandBasin - - - - - - - - - SuccessorBasin - basin:SuccessorBasin - - - - - - - - - TranspressionalBasin - basin:TranspressionalBasin - - - - - - - - - TranstensionalBasin - - - - - - - - - ArmoredRelictInclusion - - - - - - - - - ArmouredRelictCrystal - - - - - - - - - Chadacryst - - - - - - - - - ClastSupportingOrthomatrix - - - - - - - - - Clot - - - - - - - - - Corona - - - - - - - - - CorrosionRim - - - - - - - - - CrystallineFramework - - - - - - - - - Dropstone - - - - - - - - - Epimatrix - - - - - - - - - FloatingClast - - - - - - - - - GranularFramework - - - - - - - - - Groundmass - - - - - - - - - Inclusion - - - - - - - - - InterstitialConstituent - - - - - - - - - Irregular - - - - - - - - - KelyphiticRim - - - - - - - - - Layer - - - - - - - - - Matrix - - - - - - - - - Megacryst - - - - - - - - - Oikocryst - - - - - - - - - Orthomatrix - - - - - - - - - Overgrowth - - - - - - - - - ParticulateConstituent - - - - - - - - - Phenoclast - - - - - - - - - Phenocryst - - - - - - - - - Porphyroblast - - - - - - - - - Porphyroclast - - - - - - - - - Protomatrix - - - - - - - - - Pseudomatrix - - - - - - - - - - - - - - - RockConstituent - - - - - - - - - SedimentaryRockCement - - - - - - - - - SmallConcretion - - - - - - - - - StructuralConfiguration - - - - - - - - - Vein - - - - - - - - - - Vug - - - - - - - - - - - - - - - ActiveContinent - - - - - - - - - - - - - - - - - - - - - - - ContinentalCrust - - - - - - - - - - - - - - - - ContinentalLithosphere - - - - - - - - - ContinentalMargin - - - - - - - - - ContinentalPlatform - - - - - - - - - - - ContinentalRift - cont:ContinentalRift - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Craton - - - - - - - - - Shield - - - - - - - - - - - - - - - StableContinent - - - - - - - - - - - - - - - - - - - - - Supercontinent - - - - - - - - - - oro:Arc - - - - - - - - - oro:ArcAxis - - - - - - - - - - - oro:BackArc - - - - - - - - - - oro:ForeArc - - - - - - - - - - - - - - - - - - - - - - - - - - - oro:MagmaticArc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - oro:Orogen - oror:Orogen - - - - - - - - - oro:RearArc - - - - - - - - - oro:RemnantArc - - - - - - - - - oro:RetroArc - - - - - - - - - Aquiclude - - - - - - - - - - - - - - - Aquifer - realm:Aquifer - - - - - - - - - Aquifuge - - - - - - - - - Aquitard - - - - - - - - - Bank - - - - - - - - - - CascadingWater - - - - - - - - - - ConeOfDepression - - - - - - - - - - ConeOfImpression - - - - - - - - - - - - - - - ConfinedAquifer - - - - - - - - - - - - - - - ConfinedBed - - - - - - - - - - - - - - - ConfinedUnit - - - - - - - - - - - - - - - ConfinedZone - - - - - - - - - - - - - - Dike - - - - - - - - - Dyke - - - - - - - - - Embankment - - - - - - - - - FloodBank - - - - - - - - - - - GroundwaterLevel - - - - - - - - - HydrosphereFeature - hydr:HydrosphereFeature - - - - - - - - - Levee - - - - - - - - - PotentiometricSurface - - - - - - - - - RaisedBank - - - - - - - - - - - - - - - SaturatedZone - - - - - - - - - - - SeepageFace - - - - - - - - - SurfaceWater - - - - - - - - - - - - - - - - UnconfinedAquifer - - - - - - - - - - - - - - - UndergroundWater - realm:UndergroundWater - - - - - - - - - - UnsaturatedZone - - - - - - - - - VadoseZone - - - - - - - - - WarmPool - - - - - - - - - WaterColumn - - - - - - - - - WaterTable - - - - - - - - - WaterTableAquifer - - - - - - - - - Aqueduct - - - - - - - - - Arroyo - - - - - - - - - BarrierLagoon - - - - - - - - - Basin - - - - - - - - - Bay - - - - - - - - - BlanketBog - - - - - - - - - BodyOfWater - body:BodyOfWater - hydro:BodyOfWater - - - - - - - - - Bog - - - - - - - - - Bolson - - - - - - - - - Canal - - - - - - - - - - - CarbonateCompensationLevel - - - - - - - - - Channel - - - - - - - - - CheckDam - - - - - - - - - Creek - - - - - - - - - Dam - - - - - - - - - - - - - - - - - - - - - Estuary - - - - - - - - - - Fiord - - - - - - - - - - - - - - - - - - - - - Fjord - - - - - - - - - - - - - - - FreshwaterLake - - - - - - - - - Inlet - - - - - - - - - Lagoon - - - - - - - - - Lake - body:Lake - hydro:Lake - - - - - - - - - Marsh - - - - - - - - - Mouth - - - - - - - - - - - - - - - Peatland - - - - - - - - - - Pond - - - - - - - - - RaisedBog - - - - - - - - - Reservoir - - - - - - - - - River - body:River - - - - - - - - - - - - SeaSurface - - - - - - - - - Sound - - - - - - - - - Spring - - - - - - - - - Strait - - - - - - - - - Stream - - - - - - - - - - - - - - - - - - - - - Swamp - - - - - - - - - ValleyBog - - - - - - - - - - - - - - - - WaterBodyBoundary - body:WaterBodyBoundary - - - - - - - - - Wetland - - - - - - - - - - aeol:Aeolian - - - - - - - - - - - - - - - aeol:AeolianLandform - - - - - - - - - - aeol:Barchan - - - - - - - - - aeol:Desert - - - - - - - - - - - - - - - - aeol:Dune - - - - - - - - - aeol:Eolian - - - - - - - - - aeol:Erg - - - - - - - - - - - - - - - aeol:HighDesert - - - - - - - - - aeol:SandDune - - - - - - - - - - aeol:Seif - - - - - - - - - aeol:Slack - - - - - - - - - aeol:SlipFace - - - - - - - - - aeol:Yardang - - - - - - - - - coast:Atoll - - - - - - - - - - - coast:Bar - - - - - - - - - coast:BarrierIsland - - - - - - - - - - - - - - - coast:Beach - - - - - - - - - - coast:Coastal - - - - - - - - - - - - - - - coast:CoastalLandform - - - - - - - - - - - coast:CoastalMargin - - - - - - - - - - - coast:CoastalPlain - - - - - - - - - - - - - - - - - - - - - coast:CoastalRegion - coastr:CoastalRegion - - - - - - - - - - coast:Cove - - - - - - - - - - - - - - - coast:Delta - - - - - - - - - - coast:DeltaBar - - - - - - - - - - coast:Harbor - - - - - - - - - - - - coast:Hinterland - - - - - - - - - - - coast:Intertidal - - - - - - - - - - - - - - - - - - - coast:IntertidalZone - - - - - - - - - - - - - - - coast:Island - - - - - - - - - coast:IslandArc - - - - - - - - - - coast:Isthmus - - - - - - - - - coast:Key - - - - - - - - - - coast:Littoral - - - - - - - - - - coast:LittoralZone - - - - - - - - - coast:MudFlat - - - - - - - - - - - coast:Riparian - - - - - - - - - - coast:RiparianZone - - - - - - - - - coast:Shoal - - - - - - - - - - - - - - - coast:Shore - - - - - - - - - - - coast:ShorePlatform - - - - - - - - - - - - - - coast:Shoreline - - - - - - - - - - coast:Spit - - - - - - - - - - coast:Supratidal - - - - - - - - - - coast:Terracette - - - - - - - - - - coast:Tidal - - - - - - - - - - coast:TidePool - - - - - - - - - - coast:Tombolo - - - - - - - - - - coast:Updrift - - - - - - - - - - coast:WaveAttackZone - - - - - - - - - - coast:WaveCutPlatform - - - - - - - - - Alluvial - - - - - - - - - AlluvialFan - - - - - - - - - - AlluvialPlain - - - - - - - - - Bajada - - - - - - - - - Bedform - - - - - - - - - Canyon - fluv:Canyon - - - - - - - - - - Catchment - - - - - - - - - - - - - - - - Cave - - - - - - - - - - - - - DrainageBasin - - - - - - - - - - DryLake - - - - - - - - - FloodPlain - - - - - - - - - FluvialLandform - - - - - - - - - FluvialPlain - - - - - - - - - Gorge - fluv:Gorge - - - - - - - - - Gulley - - - - - - - - - - - - - - - KarstLandform - - - - - - - - - LacustrinePlain - - - - - - - - - PiedmontSlope - - - - - - - - - - Playa - - - - - - - - - Ripple - - - - - - - - - RiverBed - - - - - - - - - Sabkha - - - - - - - - - SaltFlat - - - - - - - - - SaltLake - - - - - - - - - ScrollPlain - - - - - - - - - Trench - fluv:Trench - - - - - - - - - - Tunnel - - - - - - - - - Turbidite - - - - - - - - - Valley - fluv:Valley - - - - - - - - - Wall - - - - - - - - - Wash - - - - - - - - - - - - Watershed - - - - - - - - - glac:Arete - - - - - - - - - glac:Cirque - - - - - - - - - glac:Esker - - - - - - - - - glac:GlacialLandform - - - - - - - - - - glac:GlacialMoraine - - - - - - - - - glac:GlacialOutwashPlain - - - - - - - - - - glac:GlacialPlain - - - - - - - - - glac:Kame - - - - - - - - - glac:Moraine - - - - - - - - - glac:OutwashFan - - - - - - - - - glac:RockGlacier - - - - - - - - - glac:Sandur - - - - - - - - - glac:Thermokarst - - - - - - - - - - glac:Till - - - - - - - - - glac:TillPlain - - - - - - - - - glac:UShapedValley - - - - - - - - - Alpine - - - - - - - - - Bluff - - - - - - - - - Butte - - - - - - - - - Cliff - - - - - - - - - Foothill - - - - - - - - - Hill - orog:Hill - - - - - - - - - Hummock - - - - - - - - - Mesa - - - - - - - - - - Mountain - orog:Mountain - - - - - - - - - - - - - - - - - MountainRange - - - - - - - - - - - - - - - - - - MountainRegion - - - - - - - - - - NonOrographic - - - - - - - - - - Orographic - orog:Orographic - - - - - - - - - Orography - orog:Orography - - - - - - - - - Pass - - - - - - - - - Plateau - - - - - - - - - Protrusion - - - - - - - - - Ridge - orog:Ridge - - - - - - - - - Summit - - - - - - - - - Talus - - - - - - - - - - - - TopographicalRegion - - - - - - - - - Ubac - - - - - - - - - - - - - - - - prot:CityPark - - - - - - - - - - - - - - - - prot:CountyPark - - - - - - - - - - prot:LandReserve - - - - - - - - - - prot:MPA - - - - - - - - - prot:MarineProtectedArea - - - - - - - - - - - - - - - prot:NationalForest - - - - - - - - - - - - - - - prot:NationalMonument - - - - - - - - - - - - - - - - prot:NationalPark - - - - - - - - - - prot:Park - - - - - - - - - prot:Parkland - - - - - - - - - - - - - - - prot:StateForest - - - - - - - - - - - - - - - - prot:StatePark - - - - - - - - - - prot:WaterReserve - - - - - - - - - prot:WildlifeRefuge - - - - - - - - - AseismicRidge - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ConvergentBoundary - - - - - - - - - ConvergentMargin - - - - - - - - - ConvergentPlateBoundary - - - - - - - - - Diapir - - - - - - - - - - DivergentBoundary - tec:DivergentBoundary - - - - - - - - - DivergentPlateBoundary - - - - - - - - - - FaultZone - - - - - - - - - FloodBasalt - - - - - - - - - - - - - - - - - - - - - - Footwall - - - - - - - - - FossilPlateBoundary - - - - - - - - - - - - - - - FractureZone - - - - - - - - - - - - - - - - - - - - - HangingWall - - - - - - - - - - - - - - - - - - - LIP - - - - - - - - - - - - LargeIgneousProvince - - - - - - - - - Ophiolite - - - - - - - - - - - - - - - PairedMetamorphicBelt - - - - - - - - - - - - - - - Plate - - - - - - - - - - - - - - - - - - - - - PlateBoundary - - - - - - - - - - - - - - - - - Rift - tec:Rift - - - - - - - - - - - - - - - - - - - - - RiftValley - - - - - - - - - StressRegime - - - - - - - - - SubductionZone - - - - - - - - - SupraSubductionZoneComplex - tec:SupraSubductionZoneComplex - - - - - - - - - - - Suture - tec:Suture - - - - - - - - - TectonicLandform - - - - - - - - - - ThrustSystem - tec:ThrustSystem - - - - - - - - - - - - - - - - - TransformBoundary - - - - - - - - - - TransformFault - tecl:TransformFault - - - - - - - - - TransformMargin - - - - - - - - - TransformPlateBoundary - - - - - - - - - - - - - - - TranspressionalStressRegime - - - - - - - - - TranstensionalStressRegime - - - - - - - - - TripleJunction - - - - - - - - - Caldera - - - - - - - - - CentralVolcano - - - - - - - - - - CompositeVolcano - - - - - - - - - CompoundVolcano - - - - - - - - - Fumarole - - - - - - - - - - - - Geothermal - - - - - - - - - Geyser - volc:Geyser - - - - - - - - - - - - - - - - - - - - - HotSpot - - - - - - - - - LavaPlain - - - - - - - - - - LinearVolcanicChain - - - - - - - - - Monogenetic - - - - - - - - - ShieldVolcano - - - - - - - - - Stratovolcano - - - - - - - - - - - - - - - - SubaqueousVolcano - - - - - - - - - SubmarineVolcano - - - - - - - - - Tumulus - - - - - - - - - - Vent - - - - - - - - - - VolcanicArc - - - - - - - - - VolcanicChain - - - - - - - - - VolcanicField - - - - - - - - - VolcanicSystem - - - - - - - - - - - - - - - Volcano - - - - - - - - - CentralCreekCrater - - - - - - - - - ComplexCrater - - - - - - - - - - - - Continent - - - - - - - - - - Crater - - - - - - - - - - - - DebrisBasin - - - - - - - - - - - - DeflationZone - - - - - - - - - - - - Dryland - - - - - - - - - Field - - - - - - - - - - Highland - - - - - - - - - ImpactBasin - - - - - - - - - ImpactCrater - - - - - - - - - Lamination - - - - - - - - - - - - Land - land:Land - - - - - - - - - LandCover - - - - - - - - - LandRegion - land:LandRegion - - - - - - - - - LandSurface - - - - - - - - - - - - Landform - land:Landform - - - - - - - - - Landscape - - - - - - - - - Lowland - - - - - - - - - - - - - - - Mare - - - - - - - - - PedestalCrater - - - - - - - - - PitCrater - - - - - - - - - - - - - - - Plain - land:Plain - - - - - - - - - Prarie - - - - - - - - - RockyPitFloorCrater - - - - - - - - - ShatterCone - - - - - - - - - Spall - - - - - - - - - SurfaceRegion - land:SurfaceRegion - - - - - - - - - - Abyss - - - - - - - - - Abyssal - - - - - - - - - AbyssopelagicZone - ocean:AbyssopelagicZone - - - - - - - - - - - - - - - - - - - - - AphoticZone - - - - - - - - - BarrierLayer - - - - - - - - - Bathyal - - - - - - - - - BathypelagicZone - ocean:BathypelagicZone - - - - - - - - - - - - - - - BenthicZone - - - - - - - - - - - - - - - - - - - - - DemersalZone - - - - - - - - - - EuphoticZone - - - - - - - - - Hadal - - - - - - - - - - - - - - - Halocline - - - - - - - - - - - - - - - LimneticZone - - - - - - - - - MesopelagicZone - ocean:MesopelagicZone - - - - - - - - - MixedLayer - - - - - - - - - NeriticZone - - - - - - - - - - - - - - - OceanRegion - ocean:OceanRegion - - - - - - - - - OpenOcean - - - - - - - - - - - - - - - PelagicSubZone - - - - - - - - - PelagicZone - - - - - - - - - - - - - - - - - - - - - - - - - - - PhoticZone - ocean:PhoticZone - - - - - - - - - - - - - - - Polynya - - - - - - - - - - - - - - - ProfundalZone - - - - - - - - - - - - - - - Pycnocline - - - - - - - - - - - - - - - Thermocline - - - - - - - - - - - - - - - - WaterBodyLayer - - - - - - - - - - EarthEasternBoundaryCurrent - - - - - - - - - - - - - - - EarthOcean - - - - - - - - - - - - - - - EarthOceanCurrent - - - - - - - - - - EarthWesternBoundaryCurrent - - - - - - - - - KamchatkaCurrent - - - - - - - - - - - - - - - OceanArea - - - - - - - - - - - - - - - OceanDepth - - - - - - - - - - - - - - - OceanVolume - - - - - - - - - YellowSeaWarmCurrent - - - - - - - - - - - - floor:AbyssalHill - - - - - - - - - - - - floor:AbyssalPlain - - - - - - - - - - - - - floor:AbyssalTrench - - - - - - - - - - - floor:AlgalFlat - - - - - - - - - - - - floor:ColdSeep - - - - - - - - - - - floor:ContinentalRise - - - - - - - - - - - floor:ContinentalShelf - - - - - - - - - - - floor:ContinentalSlope - - - - - - - - - - - floor:DeepOceanBasin - - - - - - - - - - - - floor:DeepSeaTrench - - - - - - - - - floor:Guyot - - - - - - - - - - - - floor:HydrothermalVent - - - - - - - - - floor:MidOceanRidge - - - - - - - - - - - floor:OceanFloor - - - - - - - - - - - - floor:OceanRidge - - - - - - - - - floor:OceanicPlateau - - - - - - - - - floor:Reef - - - - - - - - - - - floor:SeaFloor - - - - - - - - - - floor:Seabed - - - - - - - - - - - - - - - - - floor:Seamount - - - - - - - - - - - - - - - floor:SubmarineCanyon - - - - - - - - - Austral - - - - - - - - - Borealis - - - - - - - - - - - - - - - - LatitudeBand - reg:LatitudeBand - - - - - - - - - - - - - - - - LatitudeLine - reg:LatitudeLine - - - - - - - - - - - - 0 - - - NorthLatitudeBand - - - - - - - - - NorthLatitudeLine - - - - - - - - - - - - 90 - - - NorthernHemisphere - reg:NorthernHemisphere - - - - - - - - - - - - 0 - - - SouthLatitudeBand - - - - - - - - - SouthLatitudeLine - - - - - - - - - - - - -90 - - - SouthernHemisphere - reg:SouthernHemisphere - - - - - - - - - - A_Horizon - - - - - - - - - - - - - - - ActiveLayer - - - - - - - - - Alfisol - - - - - - - - - Andisol - - - - - - - - - Aridisol - - - - - - - - - - B_Horizon - - - - - - - - - - C_Horizon - - - - - - - - - - Cryosol - - - - - - - - - Entisol - - - - - - - - - - - - - - - Gelisol - - - - - - - - - - - - - - - Ground - - - - - - - - - Histisol - - - - - - - - - Inceptisol - - - - - - - - - Mollisol - - - - - - - - - - O_Horizon - - - - - - - - - - - - - - - - - - - - - OrganicMatter - - - - - - - - - Oxisol - - - - - - - - - P_Horizon - - - - - - - - - Paleosol - - - - - - - - - ParentRock - - - - - - - - - - - - - - - Permafrost - - - - - - - - - Regolith - - - - - - - - - SoilHorizon - - - - - - - - - - SoilLayer - - - - - - - - - - SoilOrder - - - - - - - - - Spodosol - - - - - - - - - - - - - - - Subsoil - - - - - - - - - - Substrata - - - - - - - - - Substratum - - - - - - - - - - SurfaceSoil - - - - - - - - - - - - - - - Talik - - - - - - - - - - - - - - - Topsoil - - - - - - - - - Ultisol - - - - - - - - - Vertisol - - - - - - - - - CardinalScale - - - - - - - - - - - - CategoricalScale - - - - - - - - - - Component - repr:Component - - - - - - - - - Coordinate - repr:Coordinate - - - - - - - - - CoordinateSystem - - - - - - - - - - - - - - - Coordinates - repr:Coordinates - - - - - - - - - - - - 1 - - - - - - 2 - - - - - - 3 - - - D - repr:D - - - - - - - - - DependentVariable - repr:DependentVariable - - - - - - - - - Dimension - repr:Dimension - - - - - - - - - IndependentVariable - repr:IndependentVariable - - - - - - - - - IntervalScale - - - - - - - - - Knowledge - know:Knowledge - repr:Knowledge - - - - - - - - - LogarithmicScale - repr:LogarithmicScale - - - - - - - - - Measurement - repr:Measurement - - - - - - - - - - MeasurementScale - - - - - - - - - - - OrdinalScale - repr:OrdinalScale - - - - - - - - - - Qualitative - - - - - - - - - - QuantitativeScale - - - - - - - - - - RatioScale - - - - - - - - - ReferenceFrame - repr:ReferenceFrame - - - - - - - - - Representation - repr:Representation - - - - - - - - - Scale - repr:Scale - - - - - - - - - ByteOrder - - - - - - - - - File - - - - - - - - - Format - - - - - - - - - Header - - - - - - - - - SelfDescribingFormat - - - - - - - - - Array - - - - - - - - - Cell - - - - - - - - - Character - - - - - - - - - Column - - - - - - - - - - - - - - - - DataModel - data:DataModel - - - - - - - - - DataStructure - - - - - - - - - Delimiter - - - - - - - - - Field - - - - - - - - - - - - - - - - Grid - mod:Grid - - - - - - - - - - Increment - - - - - - - - - Parameter - - - - - - - - - - - - - - - Point - - - - - - - - - Raster - - - - - - - - - ReducedGrid - - - - - - - - - Resolution - - - - - - - - - Row - - - - - - - - - - - - - - - SpatialRepresentation - - - - - - - - - Structure - - - - - - - - - Swath - mod:Swath - - - - - - - - - - - - - - - Swath_2D - - - - - - - - - - - - - - - Swath_3D - - - - - - - - - - - - - - - TemporalRepresentation - - - - - - - - - Trajectory - - - - - - - - - Vector - - - - - - - - - - dprepr:Archive - prod:Archive - - - - - - - - - dprepr:Archiving - - - - - - - - - - dprepr:CDR - - - - - - - - - dprepr:ClimateDataRecord - - - - - - - - - dprepr:Collection - - - - - - - - - - dprepr:Curate - - - - - - - - - dprepr:Curation - - - - - - - - - data:Data - dprepr:Data - - - - - - - - - dprepr:DataProduct - - - - - - - - - dprepr:Dataset - - - - - - - - - - dprepr:ESDR - - - - - - - - - dprepr:EarthScienceDataRecord - - - - - - - - - dprepr:Ensemble - - - - - - - - - dprepr:FillValue - prod:FillValue - - - - - - - - - dprepr:Granule - - - - - - - - - dprepr:Image - - - - - - - - - dprepr:Layer - - - - - - - - - dprepr:MaximumValid - - - - - - - - - dprepr:MinimumValid - - - - - - - - - dprepr:MissingValue - - - - - - - - - dprepr:Offset - - - - - - - - - - - - dprepr:Profile - - - - - - - - - - dprepr:ScaleFactor - - - - - - - - - dprepr:Scaling - prod:Scaling - - - - - - - - - dprepr:Value - - - - - - - - - dprepr:Version - - - - - - - - - - Access - - - - - - - - - Accessing - - - - - - - - - Compression - - - - - - - - - - - - - - - CompressionMethod - - - - - - - - - DataService - serv:DataService - - - - - - - - - DataSynchronization - - - - - - - - - - - Discover - - - - - - - - - Discovery - - - - - - - - - DiscoveryService - serv:DiscoveryService - - - - - - - - - - FormatConversion - - - - - - - - - InterfaceProtocol - serv:InterfaceProtocol - - - - - - - - - PostProcessing - - - - - - - - - PreProcessing - - - - - - - - - - Reformat - serv:Reformat - - - - - - - - - Reformatting - - - - - - - - - - - Animate - - - - - - - - - - Animation - - - - - - - - - - - Assimilate - - - - - - - - - - Assimilation - anal:Assimilation - - - - - - - - - - AssociationRuleLearning - - - - - - - - - - - Classification - - - - - - - - - Classifier - - - - - - - - - Classify - - - - - - - - - - Cluster - - - - - - - - - Clustering - anal:Clustering - - - - - - - - - DataAnalysisService - - - - - - - - - - Filter - - - - - - - - - - - Fit - - - - - - - - - - Fitting - - - - - - - - - - - - - - - - - FourierAnalysis - - - - - - - - - - FourierTransform - - - - - - - - - - FrequencyDomainAnalysis - - - - - - - - - - Interpolate - anal:Interpolate - - - - - - - - - Interpolation - anal:Interpolation - - - - - - - - - - - - - - - InterpolationMethod - - - - - - - - - KnowledgeDiscovery - - - - - - - - - - Overlay - - - - - - - - - - - - Parameterize - anal:Parameterize - - - - - - - - - - Plot - anal:Plot - - - - - - - - - - - PowerSpectrum - - - - - - - - - - Reanalysis - anal:Reanalysis - - - - - - - - - Reanalyze - - - - - - - - - - Reconstruct - - - - - - - - - Reconstruction - - - - - - - - - Scattergram - - - - - - - - - SpectralAnalysis - - - - - - - - - SpectralSynthesis - - - - - - - - - - Spectrum - - - - - - - - - - - - - - - - SphericalHarmonicAnalysis - - - - - - - - - - Superimpose - - - - - - - - - TimeSeries - - - - - - - - - - - Train - - - - - - - - - - Training - anal:Training - - - - - - - - - - Visualization - anal:Visualization - - - - - - - - - Visualize - - - - - - - - - - WaveletAnalysis - - - - - - - - - Buffer - - - - - - - - - Clip - - - - - - - - - - CoordinateTransformation - - - - - - - - - - - - Gazetteer - - - - - - - - - - Generalization - - - - - - - - - Geocode - - - - - - - - - - Geolocate - - - - - - - - - Geolocation - geos:Geolocation - - - - - - - - - - Georeference - - - - - - - - - Georeferencing - geos:Georeferencing - - - - - - - - - GeospatialInterfaceProtocol - - - - - - - - - - - - 1 - - - GeospatialService - - - - - - - - - Gridding - geos:Gridding - - - - - - - - - - LBS - - - - - - - - - LocationBasedService - - - - - - - - - - - Map - - - - - - - - - - Mapping - geos:Mapping - - - - - - - - - Proximity - - - - - - - - - - - Regrid - - - - - - - - - - Regridding - geos:Regridding - - - - - - - - - Binning - redu:Binning - - - - - - - - - - DataMining - - - - - - - - - DataReductionService - redu:DataReductionService - - - - - - - - - Mining - redu:Mining - - - - - - - - - - Normalization - redu:Normalization - - - - - - - - - Normalize - - - - - - - - - - - - - - - ParameterSubset - - - - - - - - - - - - - - - SpatialSubset - - - - - - - - - Subsample - - - - - - - - - Subset - redu:Subset - - - - - - - - - - - - - - - TemporalSubset - - - - - - - - - valid:Acceptance - - - - - - - - - - valid:BinaryMask - - - - - - - - - - - valid:Calibrate - - - - - - - - - - vali:Calibration - valid:Calibration - - - - - - - - - valid:Certificate - - - - - - - - - valid:Copyright - - - - - - - - - - valid:DataCleaning - - - - - - - - - valid:Encoding - - - - - - - - - valid:Encryption - - - - - - - - - - valid:Intercalibration - - - - - - - - - valid:Key - - - - - - - - - valid:Mask - - - - - - - - - valid:PixelScreening - - - - - - - - - - valid:QualityScreening - - - - - - - - - - valid:SecurityMethod - - - - - - - - - valid:Signature - - - - - - - - - - vali:Validation - valid:Validation - - - - - - - - - - valid:ValidationEvidence - - - - - - - - - - vali:Verification - valid:Verification - - - - - - - - - valid:Verify - - - - - - - - - - - math:Array - - - - - - - - - - math:Bag - - - - - - - - - math:Collection - - - - - - - - - math:Constant - - - - - - - - - math:Container - - - - - - - - - math:Equation - - - - - - - - - math:Exponent - - - - - - - - - math:FuzzyPoint - - - - - - - - - math:FuzzySet - - - - - - - - - math:Inequality - - - - - - - - - - - - 1 - - - - math:Interval - - - - - - - - - - - - - - - - - math:Matrix - - - - - - - - - math:Multiset - - - - - - - - - math:Neighborhood - - - - - - - - - math:NumericalEntity - - - - - - - - - - math:Order - - - - - - - - - - math:OrderedPair - - - - - - - - - - math:OrderedTriple - - - - - - - - - - - - 0 - - - math:Point - - - - - - - - - math:Relation - - - - - - - - - - math:Scalar - - - - - - - - - - math:Seq - - - - - - - - - math:Sequence - - - - - - - - - - math:Set - - - - - - - - - - - - - - - - - math:Tensor - - - - - - - - - - - math:UnorderedPair - - - - - - - - - math:Variable - - - - - - - - - math:Vector - - - - - - - - - - math:Vector_3D - - - - - - - - - math:Window - - - - - - - - - - Affine - - - - - - - - - - AlgebraicFunction - - - - - - - - - BSpline - - - - - - - - - BasisFunction - func:BasisFunction - - - - - - - - - - BinaryFunction - func:BinaryFunction - - - - - - - - - Bivariate - - - - - - - - - - BoxCar - - - - - - - - - - ChiSquare - func:ChiSquare - - - - - - - - - ChiSquareDistribution - - - - - - - - - - Continuity - - - - - - - - - - - Continuous - - - - - - - - - Cosine - - - - - - - - - - - - 3 - - - Cubic - - - - - - - - - CubicSpline - - - - - - - - - Dirac - - - - - - - - - - Discontinuity - math:Discontinuity - - - - - - - - - Discontinuous - - - - - - - - - - Discrete - math:Discrete - mathp:Discrete - - - - - - - - - DiscreteFunction - - - - - - - - - DistributionFunction - func:DistributionFunction - - - - - - - - - ExponentialDecay - - - - - - - - - ExponentialFunction - func:ExponentialFunction - - - - - - - - - ExponentialGrowth - - - - - - - - - - - - - - - Field - func:Field - - - - - - - - - Filter - - - - - - - - - - - - - - - - - - - - - Function - func:Function - - - - - - - - - - Horizon - - - - - - - - - Kernel - - - - - - - - - - - - 1 - - - - Linear - - - - - - - - - Logarithmic - - - - - - - - - Logistic - - - - - - - - - MaxwellBoltzmannDistribution - - - - - - - - - Nonlinear - - - - - - - - - - Normal - func:Normal - - - - - - - - - NormalDistribution - - - - - - - - - NormalizedFunction - - - - - - - - - OptimizationFunction - - - - - - - - - Polynomial - - - - - - - - - PowerFunction - - - - - - - - - PowerLaw - - - - - - - - - - ProbabilityDensityFunction - - - - - - - - - - ProbabilityDistributionFunction - - - - - - - - - - Profile - func:Profile - - - - - - - - - - - - 2 - - - Quadratic - - - - - - - - - - - - 4 - - - Quartic - - - - - - - - - RadialBasisFunction - - - - - - - - - ScalarField - func:ScalarField - - - - - - - - - - - - - - - ScalarFunction - - - - - - - - - Sin - - - - - - - - - SquareWave - - - - - - - - - Step - - - - - - - - - - TensorField - func:TensorField - - - - - - - - - - - - - - - TensorFunction - - - - - - - - - TranscendentalFunction - func:TranscendentalFunction - - - - - - - - - TrigonometricFunction - - - - - - - - - UtilityFunction - - - - - - - - - - VectorField - func:VectorField - - - - - - - - - - - - - - - VectorFunction - - - - - - - - - - - - - - - VectorQuantity - func:VectorQuantity - - - - - - - - - VerticalProfile - - - - - - - - - Well - - - - - - - - - cdf - - - - - - - - - pdf - - - - - - - - - Coefficient - - - - - - - - - Degree - - - - - - - - - - Fourier - - - - - - - - - FourierFunction - func:FourierFunction - - - - - - - - - - Harmonic - - - - - - - - - Mode - - - - - - - - - Order - - - - - - - - - OrthogonalFunction - - - - - - - - - - - - - - 1 - - - - - - 1 - - - SphericalHarmonic - - - - - - - - - - SphericalHarmonicFunction - func:SphericalHarmonicFunction - - - - - - - - - WaveletFunction - - - - - - - - - graph:Arc - - - - - - - - - - - - graph:Circuit - - - - - - - - - graph:ConnectedGraph - - - - - - - - - - - graph:Cycle - - - - - - - - - - graph:Digraph - - - - - - - - - - graph:DirectedGraph - - - - - - - - - graph:Edge - - - - - - - - - graph:Forest - - - - - - - - - graph:Graph - - - - - - - - - - - graph:IsolatedVertex - - - - - - - - - - - graph:LeafNode - - - - - - - - - graph:Loop - - - - - - - - - graph:Network - - - - - - - - - - - graph:Node - - - - - - - - - - - - - - - graph:OrderedVertexPair - - - - - - - - - - - - - - - graph:Path - - - - - - - - - graph:StructuralComponent - - - - - - - - - - graph:StructuralModel - - - - - - - - - graph:Tree - - - - - - - - - graph:UndirectedGraph - - - - - - - - - - - - - - - graph:UnorderedVertexPair - - - - - - - - - - - graph:Vertex - - - - - - - - - - graph:Vertice - - - - - - - - - graph:WeightedEdge - - - - - - - - - oper:AreaIntegral - - - - - - - - - oper:Biharmonic - - - - - - - - - - - - - - - oper:BinaryOperation - - - - - - - - - - - - oper:CrossProduct - - - - - - - - - - oper:DefiniteIntegral - - - - - - - - - - - - - - - - - - - - - - - - - - - - oper:Derivative - - - - - - - - - - oper:Difference - - - - - - - - - oper:Differentiation - - - - - - - - - - oper:Division - - - - - - - - - - - - oper:DotProduct - - - - - - - - - oper:Double - - - - - - - - - - oper:Fraction - - - - - - - - - - - oper:Gradient - - - - - - - - - oper:Half - - - - - - - - - - oper:IndefiniteIntegral - - - - - - - - - oper:InflectionPoint - - - - - - - - - - oper:Integral - - - - - - - - - oper:Integration - - - - - - - - - oper:Laplacian - - - - - - - - - - oper:LineIntegral - - - - - - - - - oper:Logarithm - - - - - - - - - oper:MathematicalProcess - - - - - - - - - - - - - - - oper:MultipleIntegral - - - - - - - - - - oper:Multiplication - - - - - - - - - oper:Normalization - - - - - - - - - oper:Operation - - - - - - - - - - - - - - - oper:OperationOnFunction - - - - - - - - - - - oper:PartialDerivative - - - - - - - - - oper:Product - - - - - - - - - oper:Quotient - - - - - - - - - - oper:Ratio - - - - - - - - - oper:SaddlePoint - - - - - - - - - - - - - - - oper:ScalarFieldOperation - - - - - - - - - - - - - - - oper:ScalarValuedOperation - - - - - - - - - - oper:Slope - - - - - - - - - oper:Square - - - - - - - - - oper:SquareRoot - - - - - - - - - oper:Subtraction - - - - - - - - - - oper:Sum - - - - - - - - - oper:Summation - - - - - - - - - oper:SurfaceIntegral - - - - - - - - - - - - - - - oper:TensorFieldOperation - - - - - - - - - - - - - - - oper:TernaryOperation - - - - - - - - - - - - - - - oper:UnaryOperation - - - - - - - - - - - - - - - oper:VectorFieldOperation - - - - - - - - - - - - - - - oper:VectorValuedOperation - - - - - - - - - oper:VolumeIntegral - - - - - - - - - sol:AlgebraicSolution - - - - - - - - - sol:Algorithm - solu:Algorithm - - - - - - - - - sol:AnalyticalSolution - - - - - - - - - sol:Approximation - - - - - - - - - sol:BreadthFirstSearch - - - - - - - - - sol:DepthFirstSearch - - - - - - - - - sol:DivideAndConquer - - - - - - - - - sol:DynamicProgramming - - - - - - - - - - sol:Emulate - - - - - - - - - sol:ExhaustiveSearch - - - - - - - - - sol:Expansion - - - - - - - - - sol:FlowChart - - - - - - - - - sol:GeneticAlgorithm - - - - - - - - - sol:HeuristicAlgorithm - - - - - - - - - sol:Iteration - solu:Iteration - - - - - - - - - sol:MapReduce - - - - - - - - - sol:NewtonianRelaxation - - - - - - - - - sol:NumericalApproximation - - - - - - - - - sol:NumericalSolution - - - - - - - - - sol:Parallel - - - - - - - - - - sol:ParallelAlgorithm - - - - - - - - - sol:Reduction - - - - - - - - - sol:Search - - - - - - - - - sol:SensitivityAnalysis - - - - - - - - - sol:SeriesAlgorithm - - - - - - - - - - sol:Simulate - - - - - - - - - sol:Simulation - - - - - - - - - sol:Solution - - - - - - - - - - sol:TaylorSeries - - - - - - - - - - sol:VisualSolution - - - - - - - - - - ANOVA - - - - - - - - - AnalysisOfVariance - - - - - - - - - - - - - - - ChiSquareTest - - - - - - - - - GeneralLinearModel - - - - - - - - - GoodnessOfFit - - - - - - - - - HypothesisTest - stat:HypothesisTest - - - - - - - - - - OLS - - - - - - - - - OrdinaryLeastSquares - - - - - - - - - Regression - - - - - - - - - SampleStatistics - - - - - - - - - Sampling - - - - - - - - - StatisticalDistribution - stat:StatisticalDistribution - - - - - - - - - StatisticalInference - - - - - - - - - StatisticalOperation - - - - - - - - - - - - - - - StatisticalSample - - - - - - - - - Statistics - - - - - - - - - - - - - - - ZTest - mstat:ZTest - - - - - - - - - mstat:tTest - tTest - - - - - - - - - - comp:Component - - - - - - - - - - comp:Environment - - - - - - - - - - comp:Externality - - - - - - - - - - comp:Input - - - - - - - - - - comp:Output - - - - - - - - - - - comp:Reservoir - - - - - - - - - - comp:Resource - - - - - - - - - - comp:Sink - - - - - - - - - - comp:Source - - - - - - - - - - com:Storage - comp:Storage - - - - - - - - - comp:SystemComponent - - - - - - - - - - - - - - - AdiabaticInvariant - - - - - - - - - Invariant - - - - - - - - - - - - - - - Isentrope - - - - - - - - - - - - - - - Isobar - - - - - - - - - - - - - - - Isochore - - - - - - - - - - - - - - - Isohaline - - - - - - - - - Isopleth - - - - - - - - - - - - - - - Isotere - - - - - - - - - - - - - - - Isotherm - - - - - - - - - - - - - - - ThicknessLine - - - - - - - - - - - - - - - BernoulliTheorem - - - - - - - - - - - - - - - BouguerLaw - - - - - - - - - - - - - - - - - - - - - BuysBallotLaw - - - - - - - - - DarcysLaw - - - - - - - - - EmpiricalLaw - - - - - - - - - HookesLaw - - - - - - - - - - - - - - - IdealGasLaw - - - - - - - - - MathematicalTheorem - - - - - - - - - PhysicalLaw - - - - - - - - - StokesLaw - - - - - - - - - WalthersLaw - - - - - - - - - - - - - - - Z_RRelation - - - - - - - - - AerialPhotography - - - - - - - - - Altimetry - - - - - - - - - CarbonDating - - - - - - - - - Engineering - - - - - - - - - Imaging - - - - - - - - - Interferometry - - - - - - - - - IsotopeAnalysis - - - - - - - - - Methodology - - - - - - - - - Optics - - - - - - - - - Photography - - - - - - - - - Photometry - - - - - - - - - Polarimetry - - - - - - - - - RadioactiveDating - - - - - - - - - RemoteSensing - - - - - - - - - ResearchExploration - - - - - - - - - RetrievalApproach - - - - - - - - - Spectroscopy - - - - - - - - - Tomography - - - - - - - - - XRayDiffraction - - - - - - - - - mod:BoussinesqApproximation - - - - - - - - - - mod:ClimateModel - - - - - - - - - mod:EnsembleForecast - - - - - - - - - - mod:Estimate - - - - - - - - - mod:ExtendedForecast - - - - - - - - - - mod:FiniteElement - - - - - - - - - mod:FluxCorrection - - - - - - - - - - mod:Forecast - - - - - - - - - - - mod:GCM - - - - - - - - - - mod:GeneralCirculationModel - - - - - - - - - mod:Hypothesis - - - - - - - - - - mod:MixingScheme - - - - - - - - - - mod:Model - - - - - - - - - - - mod:Parameterization - smod:Parameterization - - - - - - - - - - mod:Parcel - - - - - - - - - - mod:PhysicalApproximation - - - - - - - - - - mod:Predict - - - - - - - - - mod:Prediction - - - - - - - - - - mod:ReactionPathModel - - - - - - - - - mod:RigidLidApproximation - - - - - - - - - mod:ScientificModel - - - - - - - - - - mod:Spectral - - - - - - - - - - mod:SpectralElement - - - - - - - - - - mod:Theoretical - - - - - - - - - mod:Theory - - - - - - - - - - - - - - - mod:WeatherForecast - - - - - - - - - Agent - sciprov:Agent - - - - - - - - - Artifact - sciprov:Artifact - - - - - - - - - Background - - - - - - - - - Chronology - - - - - - - - - - Crosswalk - - - - - - - - - DerivedRule - - - - - - - - - Documentation - - - - - - - - - Excavate - - - - - - - - - Genesis - hic:Genesis - his:Genesis - sciprov:Genesis - - - - - - - - - History - hic:History - - - - - - - - - InferenceRule - sciprov:InferenceRule - - - - - - - - - JustificationElement - - - - - - - - - Metadata - - - - - - - - - MethodRule - - - - - - - - - Pipeline - - - - - - - - - Predecessor - - - - - - - - - PrimitiveRule - - - - - - - - - Process - - - - - - - - - Provenance - - - - - - - - - ProvenanceElement - - - - - - - - - Reconstruction - sciprov:Reconstruction - - - - - - - - - Record - - - - - - - - - Sequence - - - - - - - - - Successor - - - - - - - - - VariableMapping - sciprov:VariableMapping - - - - - - - - - Workflow - - - - - - - - - - units:BaseUnit - - - - - - - - - units:ComplexUnit - - - - - - - - - - - - - - - units:LogarithmicUnit - - - - - - - - - units:Prefix - - - - - - - - - units:Unit - - - - - - - - - - - units:UnitDefinedByProduct - - - - - - - - - units:UnitDerivedByRaisingToPower - - - - - - - - - units:UnitDerivedByScaling - - - - - - - - - units:UnitDerivedByShifting - - - - - - - - - - - - - - - Space - meas:Space - spac:Space - space:Space - - - - - - - - - - AngularCoordinate - - - - - - - - - - - - - - - - - Equator - - - - - - - - - - - - - - - - HorizontalCoordinate - - - - - - - - - MagneticPole - - - - - - - - - Meridian - - - - - - - - - - - Pole - - - - - - - - - PrimeMeridian - - - - - - - - - - - - - - - - - Vertical - - - - - - - - - - VerticalCoordinate - - - - - - - - - Arc - geom:Arc - - - - - - - - - BoundingBox - - - - - - - - - - Circle - - - - - - - - - Circular - - - - - - - - - - - Cluster - geom:Cluster - obj:Cluster - space:Cluster - - - - - - - - - - Conic - - - - - - - - - ConicSection - - - - - - - - - Contour - - - - - - - - - Crescent - - - - - - - - - Curve - - - - - - - - - Depression - geom:Depression - - - - - - - - - - Ellipse - - - - - - - - - Family - - - - - - - - - GeometricalObject - obj:GeometricalObject - - - - - - - - - - - - - 0 - - - GeometricalObject_0D - - - - - - - - - - GeometricalObject_1D - - - - - - - - - - GeometricalObject_2D - obj:GeometricalObject_2D - - - - - - - - - - GreatCircle - obj:GreatCircle - - - - - - - - - Helical - - - - - - - - - - Hyperbola - - - - - - - - - Hyperplane - - - - - - - - - - - Lattice - - - - - - - - - Line - - - - - - - - - - Parabola - - - - - - - - - Parabolic - - - - - - - - - Patch - - - - - - - - - - Path - geom:Path - - - - - - - - - Peak - - - - - - - - - - Plane - - - - - - - - - - Point - obj:Point - - - - - - - - - - - - - - - Polygon - - - - - - - - - Rectangle - obj:Rectangle - - - - - - - - - Region - geom:Region - obj:Region - spac:Region - space:Region - - - - - - - - - Ridge - geom:Ridge - - - - - - - - - - Route - - - - - - - - - SmallCircle - - - - - - - - - Spiral - - - - - - - - - Square - - - - - - - - - Star - - - - - - - - - Surface - geom:Surface - - - - - - - - - Swarm - - - - - - - - - Trajectory - - - - - - - - - Trough - geom:Trough - - - - - - - - - Zone - - - - - - - - - obj3d:AirSpace - - - - - - - - - obj3d:Belt - - - - - - - - - obj3d:Body - - - - - - - - - obj3d:Bowl - - - - - - - - - obj3d:Cavity - - - - - - - - - obj3d:Cone - - - - - - - - - obj3d:Corkscrew - - - - - - - - - obj3d:Cylinder - - - - - - - - - obj3d:Dipole - - - - - - - - - obj3d:Dome - - - - - - - - - obj3d:Ellipsoid - - - - - - - - - obj3d:Envelope - - - - - - - - - obj3d:FluxTube - - - - - - - - - - obj3d:GeometricalObject_3D - - - - - - - - - obj3d:Hemisphere - - - - - - - - - obj3d:Layer - - - - - - - - - obj3d:Polyhedron - - - - - - - - - obj3d:ReferenceEllipsoid - - - - - - - - - obj3d:Ring - - - - - - - - - obj3d:Shell - - - - - - - - - obj3d:Sphere - - - - - - - - - obj3d:Spheroid - - - - - - - - - obj3d:Strata - - - - - - - - - obj3d:Striation - - - - - - - - - obj3d:Torus - - - - - - - - - obj3d:Tube - - - - - - - - - HorizontalCoordinateSystem - - - - - - - - - PolarCoordinates - - - - - - - - - SpatialReferenceSystem - - - - - - - - - VerticalCoordinateSystem - - - - - - - - - - Duration - - - - - - - - - Local - - - - - - - - - LocalTime - - - - - - - - - SolarTime - - - - - - - - - TemporalEntity - time:TemporalEntity - - - - - - - - - - - TemporalReference - - - - - - - - - - - - - - - Time - time:Time - - - - - - - - - - TimeFrame - - - - - - - - - - TimeReference - mtime:TimeReference - time:TimeReference - trep:TimeReference - - - - - - - - - - TimeZone - - - - - - - - - Dawn - - - - - - - - - Day - - - - - - - - - Daytime - - - - - - - - - Dusk - - - - - - - - - - Evening - - - - - - - - - Midnight - - - - - - - - - Morning - - - - - - - - - - Nighttime - - - - - - - - - Nocturnal - day:Nocturnal - - - - - - - - - Noon - - - - - - - - - - - - - - - Sunrise - - - - - - - - - - - - - - - Sunset - - - - - - - - - Twilight - - - - - - - - - - - - - - - - - - - - - ColdestMonth - seas:ColdestMonth - - - - - - - - - - - - - - - DrySeason - seas:DrySeason - - - - - - - - - Equinox - - - - - - - - - Season - seas:Season - - - - - - - - - Solstice - - - - - - - - - - - - - - - - - - - - - WarmestMonth - seas:WarmestMonth - - - - - - - - - - - - - - - WetSeason - seas:WetSeason - - - - - - - - - BinaryState - state:BinaryState - - - - - - - - - State - state:State - - - - - - - - - bstate:BiologicalState - - - - - - - - - - cstate:BiochemicalState - - - - - - - - - cstate:ChemicalState - - - - - - - - - - - - - - - Archived - - - - - - - - - - - - - - - Binned - - - - - - - - - - - - - - - Calibrated - - - - - - - - - - - - - - - Clustered - - - - - - - - - DataState - - - - - - - - - - - - - - - Georeferenced - - - - - - - - - - - - - - - Gridded - - - - - - - - - - - - - - - Interpolated - - - - - - - - - - L1 - - - - - - - - - - L2 - - - - - - - - - - L3 - - - - - - - - - - L4 - - - - - - - - - - - - - - - Level1 - - - - - - - - - - - - - - - - - - - - - Level2 - - - - - - - - - - - - - - - - - - - - - Level3 - - - - - - - - - - - - - - - Level4 - - - - - - - - - - - - - - - Mapped - - - - - - - - - - - - - - - Mined - - - - - - - - - - - - - - - Normalized - - - - - - - - - - - - - - - Parameterized - - - - - - - - - - - - - - - Plotted - - - - - - - - - Processed - - - - - - - - - - - - - - - Reanalyzed - - - - - - - - - - - - - - - Reconstructed - - - - - - - - - - - - - - - Reformatted - - - - - - - - - - - - - - - Regridded - - - - - - - - - - - - - - - Scaled - - - - - - - - - - - - - - - Subsetted - - - - - - - - - - - - - - - Trained - - - - - - - - - - - - - - - Validated - - - - - - - - - - - - - - - Verifed - - - - - - - - - - - - 1.0E-8 - - - - - - 1.0E-7 - - - AClass - - - - - - - - - - - - 1.0E-7 - - - - - - 1.0E-6 - - - BClass - - - - - - - - - - - - 1.0E-6 - - - - - - 1.0E-5 - - - CClass - - - - - - - - - - - - 1.0E-5 - - - - - - 1.0E-4 - - - MClass - - - - - - - - - - - - 1.0E-4 - - - XClass - - - - - - - - - - FluidEquilibriumState - - - - - - - - - - - - - - - FluidState - - - - - - - - - - - - - - - pstate:MoistureState - - - - - - - - - pstate:PhysicalState - - - - - - - - - - - - - - - pstate:RainState - - - - - - - - - pstate:SpeedState - - - - - - - - - pstate:StateOfMatter - - - - - - - - - pstate:SubstanceForm - - - - - - - - - pstate:WaveState - - - - - - - - - RealmConfiguration - - - - - - - - - - - - - - - - role:ConductionRole - - - - - - - - - role:PhysicalRole - - - - - - - - - role:ProvenanceRole - - - - - - - - - - Autotroph - - - - - - - - - BiologicalRole - - - - - - - - - Chemoautotroph - - - - - - - - - Chemoheterotroph - - - - - - - - - Consumer - - - - - - - - - Habitat - brole:Habitat - - - - - - - - - Heterotroph - - - - - - - - - Photoautotroph - - - - - - - - - Photoheterotroph - - - - - - - - - Producer - - - - - - - - - crole:ChemicalRole - - - - - - - - - geog:Barrier - - - - - - - - - - - geog:Boundary - sgeo:Boundary - - - - - - - - - geog:Collector - - - - - - - - - geog:Edge - - - - - - - - - geog:Face - - - - - - - - - - geog:Fringe - - - - - - - - - geog:GeographicRole - - - - - - - - - geog:Highway - - - - - - - - - - - geog:Margin - sgeo:Margin - - - - - - - - - geog:Obstruction - - - - - - - - - geog:Periphery - - - - - - - - - geog:Separation - sgeo:Separation - - - - - - - - - geog:Tributary - - - - - - - - - - RepresentativeRole - - - - - - - - - - - - - - - SolidState - - - - - - - - - Antumbra - - - - - - - - - - Basal - - - - - - - - - - Base - - - - - - - - - - - - - - - - Bottom - - - - - - - - - - Flank - - - - - - - - - Floor - - - - - - - - - - Juxtaposition - - - - - - - - - Penumbra - - - - - - - - - - Projection - - - - - - - - - Relief - - - - - - - - - - Rim - - - - - - - - - Shadow - - - - - - - - - - Side - - - - - - - - - - - - - - - - - - - - - Top - - - - - - - - - Umbra - - - - - - - - - - BandLimited - - - - - - - - - - - Bolometric - - - - - - - - - - BroadBand - - - - - - - - - - BroadSpectrum - - - - - - - - - - - Monochromatic - - - - - - - - - - NarrowBand - - - - - - - - - NarrowSpectrum - - - - - - - - - - - Polychromatic - - - - - - - - - WhiteLight - - - - - - - - - BeaufortScale - - - - - - - - - EnhancedFujitaScale - - - - - - - - - FujitaPearsonScale - - - - - - - - - - - - - - - HurricaneScale - - - - - - - - - SaffirSimpsonScale - - - - - - - - - - - - - - - TornadoScale - - - - - - - - - - - - - - - WindScale - - - - - - - - - Coherent - - - - - - - - - Complex - - - - - - - - - - Deficit - - - - - - - - - - - - - - - EquilibriumState - sstate:EquilibriumState - - - - - - - - - Excess - - - - - - - - - Homeostasis - - - - - - - - - - Instability - sstate:Instability - - - - - - - - - Overflow - - - - - - - - - Resilient - - - - - - - - - - - Stability - - - - - - - - - Stable - - - - - - - - - SystemState - sstate:SystemState - - - - - - - - - Unstable - - - - - - - - - tstate:ThermodynamicState - - - - - - - - - - - - - - - Age - gtime:Age - - - - - - - - - - - - - - - Eon - gtime:Eon - - - - - - - - - - - - - - - Epoch - gtime:Epoch - - - - - - - - - - - - - - - Era - gtime:Era - - - - - - - - - - - GeologicTimeUnit - - - - - - - - - - NeotectonicPeriod - gtim:NeotectonicPeriod - - - - - - - - - - - - - - - Period - gtime:Period - - - - - - - - - Supereon - gtime:Supereon - - - - - - - - - - - - - - - ElNino - - - - - - - - - - - - - - - HighTide - - - - - - - - - - - - - - - IceAge - - - - - - - - - - - - - - - Interglacial - - - - - - - - - - - - - - - LaNina - - - - - - - - - - - - - - - LowTide - - - - - - - - - MaunderMinimum - - - - - - - - - - - - - - - - - - - - - NeapTide - - - - - - - - - OscillationState - - - - - - - - - - - - - - - SolarMaximum - - - - - - - - - - - - - - - SolarMinimum - - - - - - - - - - - - - - - - - - - - - SpringTide - - - - - - - - owl:Thing - - - - - - - - - - owlt:Instant - - - - - - - - - - owlt:Interval - - - - - - - - - - owlt:ProperInterval - - - - - - - - - owlt:TemporalEntity - - - - - - - - - sosa:Sensor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.0 - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1000.0 - - - - - - - - - a - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2.0 - - - - - - - - - - 2.909E-4 - - - - - - - - - - 4.848E-6 - - - - - - - - - cd - - - - - - - - - - - - - - - - - - - 0.01 - c - - - - - - - - - - - 0.01 - - - - - - - - - - 3.1556926E9 - - - - - - - - - - - C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 86400.0 - - - - - - - - - - - - - - - - - 10.0 - da - - - - - - - - - - 3.1556926E8 - - - - - - - - - - -273.0 - C - - - - - - - - - - 1.8 - 32.0 - - - - - - - - - - 57.2957795 - - - - - - - - - - - - - - - - - 1.0E18 - E - - - - - - - - - - - F - - - - - - - - - - - - - - - - - - - 1.0E9 - G - - - - - - - - - - - 1.0E9 - - - - - - - - - 100.0 - h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3600.0 - - - - - - - - - - - J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - K - - - - - - - - - - - - - - - - - - - 1000.0 - k - - - - - - - - - kg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1000.0 - - - - - - - - - - - 1000.0 - - - - - - - - - - 0.27777777 - - - - - - - - - - - - - - - - - - - - - - Lx - - - - - - - - - 1000000.0 - M - - - - - - - - - - - 1000000.0 - - - - - - - - - - m - - - - - - - - - - 3.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.0E-6 - - - - - - - - - - - - 1.0E-6 - - - - - - - - - - - - - - - - - - 1000.0 - - - - - - - - - 0.001 - m - - - - - - - - - - - 0.001 - - - - - - - - - - 1.0E-12 - - - - - - - - - - 1.0E-15 - - - - - - - - - - 60.0 - - - - - - - - - mol - - - - - - - - - - 2629744.0 - - - - - - - - - 1.0E-9 - n - - - - - - - - - - - 1.0E-9 - - - - - - - - - - - - N - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pa - - - - - - - - - - - pa/s - - - - - - - - - - - - - - - - - - - - -1.0 - - - - - - - - - - -2.0 - - - - - - - - - - -1.0 - - - - - - - - - - -1.0 - - - - - - - - - - -1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1.0 - - - - - - - - - - -3.0 - - - - - - - - - - -2.0 - - - - - - - - - - 0.001 - - - - - - - - - - -1.0 - - - - - - - - - - -1.0 - - - - - - - - - - -1.0 - - - - - - - - - - -1.0 - Hz - - - - - - - - - - -3.0 - - - - - - - - - - -2.0 - - - - - - - - - - -1.0 - - - - - - - - - - -1.0 - - - - - - - - - - -1.0 - - - - - - - - - - 0.01 - - - - - - - - - - 0.001 - - - - - - - - - 1.0E15 - P - - - - - - - - - - 1.0E-9 - - - - - - - - - - 1.0E-9 - - - - - - - - - - 1.0E-6 - - - - - - - - - - 1.0E-6 - - - - - - - - - - 1.0E-12 - - - - - - - - - - 1.0E-12 - - - - - - - - - rad - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7889232.0 - - - - - - - - - s - - - - - - - - - - 2.0 - - - - - - - - - - -1.0 - G - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sr - - - - - - - - - 1.0E12 - T - - - - - - - - - - - 1.0E12 - - - - - - - - - - - - - - - - - - - - - - - V - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 604800.0 - - - - - - - - - - 3.1556926E7 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 355 - - - - - - - - - - - - - - - - - - - - - - - - - 172 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.0E-8 - 2.0E-8 - - - - - - - - - - - - - - 2.0E-8 - 3.0E-8 - - - - - - - - - - - - - - 3.0E-8 - 4.0E-8 - - - - - - - - - - - - - - 4.0E-8 - 5.0E-8 - - - - - - - - - - - - - - 5.0E-8 - 6.0E-8 - - - - - - - - - - - - - - 6.0E-8 - 7.0E-8 - - - - - - - - - - - - - - 7.0E-8 - 8.0E-8 - - - - - - - - - - - - - - 8.0E-8 - 9.0E-8 - - - - - - - - - - - - - - 9.0E-8 - 1.0E-7 - - - - - - - - - - - - - - 1.0E-7 - 2.0E-7 - - - - - - - - - - - - - - 2.0E-7 - 3.0E-7 - - - - - - - - - - - - - - 3.0E-7 - 4.0E-7 - - - - - - - - - - - - - - 4.0E-7 - 5.0E-7 - - - - - - - - - - - - - - 5.0E-7 - 6.0E-7 - - - - - - - - - - - - - - 6.0E-7 - 7.0E-7 - - - - - - - - - - - - - - 7.0E-7 - 8.0E-7 - - - - - - - - - - - - - - 8.0E-7 - 9.0E-7 - - - - - - - - - - - - - - 9.0E-7 - 1.0E-6 - - - - - - - - - - - - - - 1.0E-6 - 2.0E-6 - - - - - - - - - - - - - - 2.0E-6 - 3.0E-6 - - - - - - - - - - - - - - 3.0E-6 - 4.0E-6 - - - - - - - - - - - - - - 4.0E-6 - 5.0E-6 - - - - - - - - - - - - - - 5.0E-6 - 6.0E-6 - - - - - - - - - - - - - - 6.0E-6 - 7.0E-6 - - - - - - - - - - - - - - 7.0E-6 - 8.0E-6 - - - - - - - - - - - - - - 8.0E-6 - 9.0E-6 - - - - - - - - - - - - - - 9.0E-6 - 1.0E-6 - - - - - - - - - - - - - - 1.0E-5 - 2.0E-5 - - - - - - - - - - - - - - 2.0E-5 - 3.0E-5 - - - - - - - - - - - - - - 3.0E-5 - 4.0E-5 - - - - - - - - - - - - - - 4.0E-5 - 5.0E-5 - - - - - - - - - - - - - - 5.0E-5 - 6.0E-5 - - - - - - - - - - - - - - 6.0E-5 - 7.0E-5 - - - - - - - - - - - - - - 7.0E-5 - 8.0E-5 - - - - - - - - - - - - - - 8.0E-5 - 9.0E-5 - - - - - - - - - - - - - - 9.0E-5 - 1.0E-4 - - - - - - - - - - - - - - 0.001 - 0.0011 - - - - - - - - - - - - - - 0.0011 - 0.0012 - - - - - - - - - - - - - - 0.0012 - 0.0013 - - - - - - - - - - - - - - 0.0013 - 0.0014 - - - - - - - - - - - - - - 0.0014 - 0.0015 - - - - - - - - - - - - - - 0.0015 - 0.0016 - - - - - - - - - - - - - - 0.0016 - 0.0017 - - - - - - - - - - - - - - 0.0017 - 0.0018 - - - - - - - - - - - - - - 0.0018 - 0.0019 - - - - - - - - - - - - - - 0.0019 - 0.002 - - - - - - - - - - - - - - 1.0E-4 - 2.0E-4 - - - - - - - - - - - - - - 0.002 - 0.0021 - - - - - - - - - - - - - - 0.0021 - 0.0022 - - - - - - - - - - - - - - 0.0022 - 0.0023 - - - - - - - - - - - - - - 0.0023 - 0.0024 - - - - - - - - - - - - - - 0.0024 - 0.0025 - - - - - - - - - - - - - - 0.0025 - 0.0026 - - - - - - - - - - - - - - 0.0026 - 0.0027 - - - - - - - - - - - - - - 0.0027 - 0.0028 - - - - - - - - - - - - - - 0.0028 - 0.0029 - - - - - - - - - - - - - - 0.0029 - 0.003 - - - - - - - - - - - - - - 2.0E-4 - 3.0E-4 - - - - - - - - - - - - - - 0.003 - 0.0031 - - - - - - - - - - - - - - 0.0031 - 0.0032 - - - - - - - - - - - - - - 0.0032 - 0.0033 - - - - - - - - - - - - - - 0.0033 - 0.0034 - - - - - - - - - - - - - - 0.0034 - 0.0035 - - - - - - - - - - - - - - 0.0035 - 0.0036 - - - - - - - - - - - - - - 0.0036 - 0.0037 - - - - - - - - - - - - - - 0.0037 - 0.0038 - - - - - - - - - - - - - - 0.0038 - 0.0039 - - - - - - - - - - - - - - 0.0039 - 0.003 - - - - - - - - - - - - - - 3.0E-4 - 4.0E-4 - - - - - - - - - - - - - - 0.004 - 0.0041 - - - - - - - - - - - - - - 0.0041 - 0.0042 - - - - - - - - - - - - - - 0.0042 - 0.0043 - - - - - - - - - - - - - - 0.0043 - 0.0044 - - - - - - - - - - - - - - 0.0044 - 0.0045 - - - - - - - - - - - - - - 0.0045 - 0.0046 - - - - - - - - - - - - - - 0.0046 - 0.0047 - - - - - - - - - - - - - - 0.0047 - 0.0048 - - - - - - - - - - - - - - 0.0048 - 0.0049 - - - - - - - - - - - - - - 0.0049 - 0.005 - - - - - - - - - - - - - - 4.0E-4 - 5.0E-4 - - - - - - - - - - - - - - 5.0E-4 - 6.0E-4 - - - - - - - - - - - - - - 6.0E-4 - 7.0E-4 - - - - - - - - - - - - - - 7.0E-4 - 8.0E-4 - - - - - - - - - - - - - - 8.0E-4 - 9.0E-4 - - - - - - - - - - - - - - 9.0E-4 - 0.001 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 - - - - - - - - - 1 - - - - - - - - - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - 4 - - - - - - - - - 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 455.0 - 492.0 - - - - - - - - - - - - - - 4000.0 - 8000.0 - - - - - - - - - - - - - - 5.0 - 100.0 - - - - - - - - - - - - - - 87.5 - 108.0 - - - - - - - - - - - - - - 0.0 - 0.03 - - - - - - - - - - - - - - 492.0 - 557.0 - - - - - - - - - - - - - - 0.03 - 0.3 - - - - - - - - - - - - - - - 780.0 - 1000000.0 - - - - - - - - - - - - - - 18000.0 - 26500.0 - - - - - - - - - - - - - - 26500.0 - 40000.0 - - - - - - - - - - - - - - 12000.0 - 18000.0 - - - - - - - - - - - - - - 1000.0 - 2000.0 - - - - - - - - - - - - - - - - - - - - - - 300.0 - 300000.0 - - - - - - - - - - - - - - 597.0 - 622.0 - - - - - - - - - - - - - - 400.0 - 700.0 - - - - - - - - - - - - - - 0.0 - 300000.0 - - - - - - - - - - - - - - 622.0 - 780.0 - - - - - - - - - - - - - - 2000.0 - 4000.0 - - - - - - - - - - - - - - - - - - - - - - - 0.3 - 5.0 - - - - - - - - - - - - - - 780.0 - 6000.0 - - - - - - - - - - - - - - - - - - - - - - - 315.0 - 390.0 - - - - - - - - - - - - - - 280.0 - 315.0 - - - - - - - - - - - - - - 100.0 - 280.0 - - - - - - - - - - - - - - 5.0 - 390.0 - - - - - - - - - - - - - - 40000.0 - 75000.0 - - - - - - - - - - - - - - 0.003 - 0.03 - - - - - - - - - - - - - - 390.0 - 455.0 - - - - - - - - - - - - - - 390.0 - 780.0 - - - - - - - - - - - - - - 75000.0 - 110000.0 - - - - - - - - - - - - - - 8000.0 - 12000.0 - - - - - - - - - - - - - - 0.03 - 5.0 - - - - - - - - - - - - - - 557.0 - 597.0 - - - - - - - - - - - - - - - 393.5 - - - - - - - - - - - - - - - 21.2061 - - - - - - - - - - - - - - - 656.28 - - - - - - - - - - - - - - - 486.1 - - - - - - - - - - - - - - - 1083.0 - - - - - - - - - - - - - - - 304.0 - - - - - - - - - - - - - - - 769.9 - - - - - - - - - - - - - - - 12.15668 - - - - - - - - - - - - - - - 676.8 - - - - - - - - - - - - - - - 589.592 - - - - - - - - - - - - - - - 589.995 - - - - - - - - - - - - - - 10.7 - - - - - - - - - - - - 0 - 0.0 - 0.3 - - - - - - - - - 1 - 0.3 - 1.5 - - - - - - - - - 10 - 24.5 - 28.4 - - - - - - - - - 11 - 28.5 - 32.6 - - - - - - - - - 12 - 32.7 - - - - - - - - - 2 - 1.6 - 3.4 - - - - - - - - - - 3 - 3.5 - 5.4 - - - - - - - - - 4 - 5.5 - 7.9 - - - - - - - - - 5 - 8.0 - 10.7 - - - - - - - - - 6 - 10.8 - 13.8 - - - - - - - - - 7 - 13.9 - 17.1 - - - - - - - - - - 8 - 17.2 - 20.7 - - - - - - - - - 9 - 20.8 - 24.4 - - - - - - - - - - 1 - 33.0 - 42.0 - - - - - - - - - - 2 - 43.0 - 49.0 - - - - - - - - - - 3 - 50.0 - 58.0 - - - - - - - - - - 4 - 59.0 - 69.0 - - - - - - - - - - 5 - 70.0 - - - - - - - - - 0 - - - - - - - - - 1 - - - - - - - - - 2 - - - - - - - - - 3 - - - - - - - - - 4 - - - - - - - - - 5 - - - - - - - - - - 0 - 18.0 - 32.0 - - - - - - - - - - 1 - 32.0 - 50.0 - - - - - - - - - - 2 - 50.0 - 70.0 - - - - - - - - - - 0 - 70.0 - 92.0 - - - - - - - - - - 4 - 92.0 - 116.0 - - - - - - - - - - 5 - 116.0 - 142.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.0 - - - - - - - - - - 1.0 - - - - - - - - - - 1.0 - - - - - - - - - - 1.0 - - - - - - - - - - 1.0 - - - - - - - - - - 10.0 - - - - - - - - - - 12.0 - - - - - - - - - - 2.0 - - - - - - - - - - 2.0 - - - - - - - - - - 3.0 - - - - - - - - - - 5.0 - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.0 - 0.0 - - - - - - - - - 0.0117 - - - - - - - - - 0.126 - - - - - - - - - 0.781 - - - - - - - - - 1.806 - - - - - - - - - 1000.0 - - - - - - - - - 11.608 - - - - - - - - - 1.0 - 112.0 - - - - - - - - - 1200.0 - - - - - - - - - 1.0 - 125.0 - - - - - - - - - 13.82 - - - - - - - - - 1.6 - 130.0 - - - - - - - - - 133.9 - - - - - - - - - 3.0 - 140.2 - - - - - - - - - 1400.0 - - - - - - - - - 4.0 - 145.5 - - - - - - - - - 15.97 - - - - - - - - - 4.0 - 150.8 - - - - - - - - - 155.6 - - - - - - - - - 1600.0 - - - - - - - - - 4.0 - 161.2 - - - - - - - - - 4.0 - 164.7 - - - - - - - - - 3.5 - 167.7 - - - - - - - - - 3.0 - 171.6 - - - - - - - - - 2.0 - 175.6 - - - - - - - - - 1800.0 - - - - - - - - - 1.5 - 183.0 - - - - - - - - - 1.5 - 189.6 - - - - - - - - - 1.0 - 196.5 - - - - - - - - - 0.6 - 199.6 - - - - - - - - - 2.588 - - - - - - - - - 20.43 - - - - - - - - - 1.5 - 203.6 - - - - - - - - - 2050.0 - - - - - - - - - 2.0 - 216.5 - - - - - - - - - 228.7 - - - - - - - - - 23.03 - - - - - - - - - 2300.0 - - - - - - - - - 2.0 - 237.0 - - - - - - - - - 245.9 - - - - - - - - - 249.5 - - - - - - - - - 2500.0 - - - - - - - - - 0.4 - 251.0 - - - - - - - - - 0.7 - 253.8 - - - - - - - - - 0.7 - 260.4 - - - - - - - - - 0.7 - 265.8 - - - - - - - - - 0.7 - 268.0 - - - - - - - - - 0.7 - 270.6 - - - - - - - - - 0.7 - 275.6 - - - - - - - - - 0.1 - 28.4 - - - - - - - - - 2800.0 - - - - - - - - - 0.7 - 284.4 - - - - - - - - - 0.8 - 294.6 - - - - - - - - - 0.8 - 299.0 - - - - - - - - - 3.6 - - - - - - - - - 0.9 - 303.4 - - - - - - - - - 1.0 - 307.2 - - - - - - - - - 1.1 - 311.7 - - - - - - - - - 1.3 - 318.1 - - - - - - - - - 3200.0 - - - - - - - - - 1.6 - 328.3 - - - - - - - - - 0.1 - 33.9 - - - - - - - - - 2.1 - 345.3 - - - - - - - - - 2.5 - 359.2 - - - - - - - - - 3600.0 - - - - - - - - - 0.1 - 37.2 - - - - - - - - - 2.6 - 374.5 - - - - - - - - - 2.6 - 385.3 - - - - - - - - - 2.7 - 391.8 - - - - - - - - - 2.7 - 397.5 - - - - - - - - - 0.2 - 40.4 - - - - - - - - - 4000.0 - - - - - - - - - 2.8 - 407.0 - - - - - - - - - 2.8 - 411.2 - - - - - - - - - 2.8 - 416.0 - - - - - - - - - 2.7 - 418.7 - - - - - - - - - 2.6 - 421.3 - - - - - - - - - 2.5 - 422.9 - - - - - - - - - 2.4 - 426.2 - - - - - - - - - 2.3 - 428.2 - - - - - - - - - 1.9 - 436.0 - - - - - - - - - 1.8 - 439.0 - - - - - - - - - 1.5 - 443.7 - - - - - - - - - 1.5 - 445.6 - - - - - - - - - 1.6 - 455.8 - - - - - - - - - 1.6 - 460.9 - - - - - - - - - 4600.0 - - - - - - - - - 1.6 - 468.1 - - - - - - - - - 1.6 - 471.8 - - - - - - - - - 1.7 - 478.6 - - - - - - - - - 0.2 - 48.6 - - - - - - - - - 1.7 - 488.3 - - - - - - - - - 492.0 - - - - - - - - - 496.0 - - - - - - - - - 499.0 - - - - - - - - - 5.332 - - - - - - - - - 503.0 - - - - - - - - - 506.5 - - - - - - - - - 510.0 - - - - - - - - - 515.0 - - - - - - - - - 521.0 - - - - - - - - - 528.0 - - - - - - - - - 1.0 - 542.0 - - - - - - - - - 0.2 - 55.8 - - - - - - - - - 0.2 - 58.7 - - - - - - - - - 61.1 - - - - - - - - - 635.0 - - - - - - - - - 0.3 - 65.5 - - - - - - - - - 7.246 - - - - - - - - - 0.6 - 70.6 - - - - - - - - - 0.7 - 83.5 - - - - - - - - - 0.7 - 85.8 - - - - - - - - - 850.0 - - - - - - - - - 88.6 - - - - - - - - - 0.8 - 93.6 - - - - - - - - - 0.9 - 99.6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - 1 - - - 1 - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - SWEET Ontology - 3.2.0 - - - 3.2.0 - SWEET Ontology - - - 3.2.0 - SWEET Ontology - - - SWEET Ontology - 3.2.0 - - - - - - - - - diff --git a/components/klab.component.alignment/parameters.txt b/components/klab.component.alignment/parameters.txt deleted file mode 100644 index 3548257f0e..0000000000 --- a/components/klab.component.alignment/parameters.txt +++ /dev/null @@ -1,121 +0,0 @@ -print_output|false -bad_score_scope|0.0 -good_isub_anchors|0.98 -good_isub_candidates|0.95 -good_confidence|0.50 -good_sim_coocurrence|0.08 -min_conf_pro_map|0.80 -confidence_composed_mappings1|0.8 -confidence_composed_mappings2|0.7 -avoid_redundant_labels|true -max_redundancy_labels|3 -max_ambiguity|4 -good_ambiguity|2 -use_overlapping|false -min_size_overlapping|15000 -output_class_mappings|true -output_prop_mappings|true -instance_matching|true -output_instance_mappings|true -#only for statistics -output_instance_mapping_files|false -reason_datatypes|false -reasoner|HermiT -#reasoner|ELK -#Repair -perform_repair|true -#Global information for Downling and Gallier -glogal_info|true -timeout|25 -reverse_labels=false -output_equivalences_only|false -second_chance_conflicts|true -#Ration 5 -ratio_second_chance_discarded|10 -use_umls_lexicon|true -allow_bioportal|false -#Number of mediating ontologies to use from BioPortal -max_mediating_ontologies|10 -allow_interactivity|true -allow_multilingual|true -#false for tests -is_test_mode_multilingual|false -use_local_dict|true -call_online_translator|false -path_chinese_segmenter_dict|multilingual/dict_ictclas4j -#on-the-fly dictionaries if translation is not available in local dict or if local dict is not allowed -path_multilingual_tmp|multilingual -#path_multilingual_tmp|/home/ernesto/Documents/OAEI_OM_2015/EVAL_2015/dict_multilingual -#Local precompued disctionary if use_local_dict=true -path_multilingual_local|multilingual/local -target_lang|en -#0=Google, 1=Microsoft, >=2 -> all -translator_id|9 -annotation_URI|http://www.w3.org/2000/01/rdf-schema#label -annotation_URI|http://www.geneontology.org/formats/oboInOwl#hasRelatedSynonym -annotation_URI|http://www.geneontology.org/formats/oboInOwl#hasExactSynonym -annotation_URI|http://www.geneontology.org/formats/oboInOWL#hasExactSynonym -#annotation_URI|http://www.geneontology.org/formats/oboInOWL#hasRelatedSynonym -annotation_URI|http://purl.bioontology.org/ontology/SYN#synonym -annotation_URI|http://scai.fraunhofer.de/CSEO#Synonym -annotation_URI|http://purl.obolibrary.org/obo/synonym -annotation_URI|http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#FULL_SYN -annotation_URI|http://www.ebi.ac.uk/efo/alternative_term -annotation_URI|http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#Synonym -annotation_URI|http://bioontology.org/projects/ontologies/fma/fmaOwlDlComponent_2_0#Synonym -annotation_URI|http://www.geneontology.org/formats/oboInOwl#hasDefinition -annotation_URI|http://bioontology.org/projects/ontologies/birnlex#preferred_label -annotation_URI|http://bioontology.org/projects/ontologies/birnlex#synonyms -annotation_URI|http://www.w3.org/2004/02/skos/core#prefLabel -annotation_URI|http://www.w3.org/2004/02/skos/core#altLabel -#Doremus annotation -#annotation_URI|http://erlangen-crm.org/current/P3_has_note -#In case only a subset of the individuals should be matched -restrict_individual_types|false -#Categories for individuals (e.g. dbpedia category). Additional compatibility information to class types of an insstance -category_URI|http://data.doremus.org/ontology#U12_has_genre -#category_URI|http://data.doremus.org/ontology#U16_has_catalogue_statement -#Folder with available mappings between categories -path_mappings_categories|mappings/categories -##Check about and category for SPIMBENCH -#Lexical information as assertions -data_assertion_URI_Indiv|http://dbkwik.webdatacommons.org/oldschoolrunescape/property/name -data_assertion_URI_Indiv|http://dkm.fbk.eu/index.php/BPMN2_Ontology#name -data_assertion_URI_Indiv|http://dkm.fbk.eu/index.php/BPMN2_Ontology#id -data_assertion_URI_Indiv|http://xmlns.com/foaf/0.1/isPrimaryTopicOf -data_assertion_URI_Indiv|http://www.bbc.co.uk/ontologies/creativework/title -data_assertion_URI_Indiv|http://www.bbc.co.uk/ontologies/creativework/shortTitle -data_assertion_URI_Indiv|http://www.bbc.co.uk/ontologies/creativework/description -data_assertion_URI_Indiv|http://islab.di.unimi.it/imoaei2015#name -#data_assertion_URI_Indiv|http://islab.di.unimi.it/imoaei2015#title -data_assertion_URI_Indiv|http://oaei.ontologymatching.org/2012/IIMBTBOX/name -data_assertion_URI_Indiv|http://oaei.ontologymatching.org/2012/IIMBTBOX/article -data_assertion_URI_Indiv|http://dbpedia.org/ontology/birthName -data_assertion_URI_Indiv_deep2|http://www.instancematching.org/IIMB2012/ADDONS#has_value -#data_assertion_URI_Indiv_deep2|http://dkm.fbk.eu/index.php/BPMN2_Ontology#id -object_assertion_URI_Indiv|http://www.instancematching.org/IIMB2012/ADDONS#article -object_assertion_URI_Indiv|http://www.instancematching.org/IIMB2012/ADDONS#name -object_assertion_URI_Indiv|http://www.instancematching.org/label -object_assertion_URI_Indiv|http://www.instancematching.org/curriculum -object_assertion_URI_Indiv|http://www.instancematching.org/places -object_assertion_URI_Indiv|http://www.bbc.co.uk/ontologies/curriculum/about -object_assertion_URI_Indiv|http://www.bbc.co.uk/ontologies/creativework/about -object_assertion_URI_Indiv|http://www.tomtom.com/ontologies/traces#hasPoint -#Allowed types for individuals to be matched: OAEI 2015 -allowed_individual_type|http://islab.di.unimi.it/imoaei2015#Person -#SPIMBENCH -allowed_individual_type|http://www.bbc.co.uk/ontologies/creativework/BlogPost -allowed_individual_type|http://www.bbc.co.uk/ontologies/creativework/NewsItem -allowed_individual_type|http://www.bbc.co.uk/ontologies/creativework/Programme -##Process Model Matching -allowed_individual_type|http://dkm.fbk.eu/index.php/BPMN2_Ontology#task -allowed_individual_type|http://dkm.fbk.eu/index.php/BPMN2_Ontology#event -allowed_individual_type|http://owl.protege.stanford.edu#Transition -allowed_individual_type|http://owl.protege.stanford.edu#Place -#Doremus -allowed_individual_type|http://erlangen-crm.org/efrbroo/F22_Self-Contained_Expression -## -#Filter entities from these URIS: not included in Benchmark reference alignment -filter_entity|http://xmlns.com/foaf/ -filter_entity|http://www.w3.org/1999/02/22-rdf-syntax-ns -filter_entity|http://purl.org/dc/elements/ \ No newline at end of file diff --git a/components/klab.component.alignment/pom.xml b/components/klab.component.alignment/pom.xml deleted file mode 100644 index 081fcfa012..0000000000 --- a/components/klab.component.alignment/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - 4.0.0 - - org.integratedmodelling - components - 0.11.0-SNAPSHOT - - klab.component.alignment - - - - org.integratedmodelling - klab.modeler - ${klab.version} - - - - - commons-io - commons-io - 2.14.0 - - - - commons-logging - commons-logging - 1.1 - - - - dependency> commons-lang commons-lang - 2.4 - - - - org.json - json - 20231013 - - - - com.memetix - microsoft-translator-java-api - 0.6.2 - - - - - com.googlecode.json-simple - json-simple - 1.1 - jar - - - - org.semanticweb.elk - elk-owlapi - 0.4.2 - - - - dependency> log4j log4j - 1.2.17 - - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson-version} - - - - - com.fasterxml.jackson.core - jackson-core - ${jackson-version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson-version} - - - com.googlecode.ictclas4j - ictclas4j - 1.0.1 - - - - - - - - - - - - - src/main/java - - **/*.txt - **/*.gz - - - - - - - - - - - - - - - - - - TU-Darmstadt - http://zoidberg.ukp.informatik.tu-darmstadt.de/artifactory/public-releases/ - - - - diff --git a/components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapMatcher.java b/components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapMatcher.java deleted file mode 100644 index 308204f467..0000000000 --- a/components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapMatcher.java +++ /dev/null @@ -1,73 +0,0 @@ -package klab.alignment.main; - -import java.util.Set; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.LogMap2_Matcher; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; - -public class UsingLogMapMatcher { - - OWLOntology onto1; - OWLOntology onto2; - - OWLOntologyManager onto_manager; - - public UsingLogMapMatcher() { - - try { - - String onto1_iri = "http://purl.obolibrary.org/obo/envo.owl"; - String onto2_iri = "http://www.integratedmodelling.org/downloads/sweet.owl"; - - onto_manager = OWLManager.createOWLOntologyManager(); - - onto1 = onto_manager.loadOntology(IRI.create(onto1_iri)); - onto2 = onto_manager.loadOntology(IRI.create(onto2_iri)); - - LogMap2_Matcher logmap2 = new LogMap2_Matcher(onto1, onto2); - // Optionally LogMap also accepts the IRI strings as input - // LogMap2_Matcher logmap2 = new LogMap2_Matcher(onto1_iri, onto2_iri); - - // Set of mappings computed my LogMap - Set logmap2_mappings = logmap2.getLogmap2_Mappings(); - - System.out.println("Number of mappings computed by LogMap: " + logmap2_mappings.size()); - -// PrintWriter OutAlign = new PrintWriter(new FileWriter("C:\\ont\\OutAlign.txt")); - - for (MappingObjectStr mapping : logmap2_mappings) { - System.out.println("Mapping: "); - System.out.println("\t" + mapping.getIRIStrEnt1()); - System.out.println("\t" + mapping.getIRIStrEnt2()); - System.out.println("\t" + mapping.getConfidence()); - - // MappingObjectStr.EQ or MappingObjectStr.SUB or MappingObjectStr.SUP - System.out.println("\t" + mapping.getMappingDirection()); // Utilities.EQ; - - // MappingObjectStr.CLASSES or MappingObjectStr.OBJECTPROPERTIES or - // MappingObjectStr.DATAPROPERTIES or MappingObjectStr.INSTANCES - System.out.println("\t" + mapping.getTypeOfMapping()); - - } - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * @param args - */ - public static void main(String[] args) { - - new UsingLogMapMatcher(); - - } - -} diff --git a/components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapRepairFacility.java b/components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapRepairFacility.java deleted file mode 100644 index e25a659c52..0000000000 --- a/components/klab.component.alignment/src/main/java/klab/alignment/main/UsingLogMapRepairFacility.java +++ /dev/null @@ -1,140 +0,0 @@ -package klab.alignment.main; - - - -import java.io.FileWriter; -import java.io.PrintWriter; -import java.util.Set; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.LogMap2_RepairFacility; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.oaei.reader.MappingsReaderManager; - - -// not ready yet - -public class UsingLogMapRepairFacility { - - - - OWLOntology onto1; - OWLOntology onto2; - - OWLOntologyManager onto_manager; - - - - public UsingLogMapRepairFacility(){ - - - try{ - - Set input_mappings; - - // String onto1_iri = "file:/logmap2_standalone_v2.4_oct_2013/oaei2012_FMA_small_overlapping_nci.owl"; - // String onto2_iri = "file:/logmap2_standalone_v2.4_oct_2013/oaei2012_NCI_small_overlapping_fma.owl"; - - String onto1_iri = "file:///biodev/envo.owl"; - String onto2_iri = "file:///biodev/sweet.owl"; - - onto_manager = OWLManager.createOWLOntologyManager(); - - onto1 = onto_manager.loadOntology(IRI.create(onto1_iri)); - onto2 = onto_manager.loadOntology(IRI.create(onto2_iri)); - - - //Input from a file (RDF OAEI Alignment format) - //Mappings are also accepted as TXT or OWL with an special format - // String input_mappings_file = "/logmap2_standalone_v2.4_oct_2013/logmaplt_small_fma2nci.rdf"; - - String input_mappings_file = "/logmap2_standalone_v2.4_oct_2013/envo-sweet.rdf"; - - //String input_mappings_file = "/ont/output.txt"; - - MappingsReaderManager readermanager = new MappingsReaderManager(input_mappings_file, "RDF"); - input_mappings = readermanager.getMappingObjects(); - - /* - * Custom input - * - input_mappings.add( - new MappingObjectStr( - "http://bioontology.org/projects/ontologies/fma/fmaOwlDlComponent_2_0#Vertebra", //iri entity 1 - "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#Vertebra", //iri entity 2 - 1.0, //Confidence - MappingObjectStr.EQ, //Direction - MappingObjectStr.CLASSES //Type - ) - ); - */ - - LogMap2_RepairFacility logmap2_repair = - new LogMap2_RepairFacility( - onto1, //Ontology1 - onto2, //Ontology2 - input_mappings, //Input Mappings - false, //If the intersection or overlapping of the ontologies are extracted before the repair - true); //If the repair is performed in a two steps process (optimal) or in one cleaning step (more aggressive) - - - //Set of mappings repaired by LogMap - Set repaired_mappings = logmap2_repair.getCleanMappings(); - - PrintWriter twriter = new PrintWriter(new FileWriter("C:\\ont\\output.txt")); - - for (MappingObjectStr mapping: repaired_mappings){ - twriter.println("Mapping: "); - twriter.println("\t"+ mapping.getIRIStrEnt1()); - twriter.println("\t"+ mapping.getIRIStrEnt2()); - twriter.println("\t"+ mapping.getConfidence()); - - //MappingObjectStr.EQ or MappingObjectStr.SUB or MappingObjectStr.SUP - twriter.println("\t"+ mapping.getMappingDirection()); //Utilities.EQ; - - //MappingObjectStr.CLASSES or MappingObjectStr.OBJECTPROPERTIES or MappingObjectStr.DATAPROPERTIES or MappingObjectStr.INSTANCES - twriter.println("\t"+ mapping.getTypeOfMapping()); - - } - - System.out.println("Num repaired mappings using LogMap: " + repaired_mappings.size()); - - - //Optional: check if input mappings lead to unsatisfiabilities using HermiT reasoner - System.out.println("Satisfiability with input mappings"); - logmap2_repair.checkSatisfiabilityInputMappings(); - - //Optional: check if repaired mappings by LogMap still lead to unsatisfiabilities using HermiT reasoner - System.out.println("Satisfiability with repaired mappings using LogMap"); - logmap2_repair.checkSatisfiabilityCleanMappings(); - - - - } - catch (Exception e){ - e.printStackTrace(); - } - - } - - - - /** - * @param args - */ - public static void main(String[] args) { - - new UsingLogMapRepairFacility(); - - } - -} - - - - - diff --git a/components/klab.component.alignment/src/main/java/org/ictclas4j/segment/SegTag2.java b/components/klab.component.alignment/src/main/java/org/ictclas4j/segment/SegTag2.java deleted file mode 100644 index 74075b0ebd..0000000000 --- a/components/klab.component.alignment/src/main/java/org/ictclas4j/segment/SegTag2.java +++ /dev/null @@ -1,246 +0,0 @@ -package org.ictclas4j.segment; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import org.ictclas4j.bean.Atom; -import org.ictclas4j.bean.Dictionary; -import org.ictclas4j.bean.MidResult; -import org.ictclas4j.bean.SegNode; -import org.ictclas4j.bean.SegResult; -import org.ictclas4j.bean.Sentence; -import org.ictclas4j.utility.POSTag; -import org.ictclas4j.utility.Utility; - -import uk.ac.ox.krr.logmap2.Parameters; - -public class SegTag2 { - private Dictionary coreDict; - - private Dictionary bigramDict; - - private PosTagger personTagger; - - private PosTagger transPersonTagger; - - private PosTagger placeTagger; - - private PosTagger lexTagger; - - private int segPathCount = 1;// 分词路径的数目 - - public SegTag2(int segPathCount) { - this.segPathCount = segPathCount; - coreDict = new Dictionary(Parameters.path_chinese_segmenter_dict + "/coreDict.dct"); - - bigramDict = new Dictionary(Parameters.path_chinese_segmenter_dict + "/bigramDict.dct"); - personTagger = new PosTagger(Utility.TAG_TYPE.TT_PERSON, Parameters.path_chinese_segmenter_dict + "/nr", coreDict); - transPersonTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, Parameters.path_chinese_segmenter_dict + "/tr", coreDict); - placeTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, Parameters.path_chinese_segmenter_dict + "/ns", coreDict); - lexTagger = new PosTagger(Utility.TAG_TYPE.TT_NORMAL, Parameters.path_chinese_segmenter_dict + "/lexical", coreDict); - } - - public SegTag2(int segPathCount, InputStream coreDictIn, InputStream bigramDictIn, - InputStream personTaggerDctIn, InputStream personTaggerCtxIn, - InputStream transPersonTaggerDctIn, InputStream transPersonTaggerCtxIn, - InputStream placeTaggerDctIn, InputStream placeTaggerCtxIn, InputStream lexTaggerCtxIn) { - this.segPathCount = segPathCount; - // coreDict = new Dictionary("data\\coreDict.dct"); - // - // bigramDict = new Dictionary("data\\bigramDict.dct"); - // personTagger = new PosTagger(Utility.TAG_TYPE.TT_PERSON, "data\\nr", coreDict); - // transPersonTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, "data\\tr", coreDict); - // placeTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, "data\\ns", coreDict); - // lexTagger = new PosTagger(Utility.TAG_TYPE.TT_NORMAL, "data\\lexical", coreDict); - coreDict = new Dictionary(); - coreDict.load(coreDictIn, false); - bigramDict = new Dictionary(); - bigramDict.load(bigramDictIn, false); - personTagger = new PosTagger(Utility.TAG_TYPE.TT_PERSON, personTaggerDctIn, personTaggerCtxIn, - coreDict); - transPersonTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, transPersonTaggerDctIn, - transPersonTaggerCtxIn, coreDict); - placeTagger = new PosTagger(Utility.TAG_TYPE.TT_TRANS_PERSON, placeTaggerDctIn, - placeTaggerCtxIn, coreDict); - lexTagger = new PosTagger(Utility.TAG_TYPE.TT_NORMAL, null, lexTaggerCtxIn, coreDict); - - } - - public SegResult split(String src) { - SegResult sr = new SegResult(src);// 分词结果 - String finalResult = null; - - if (src != null) { - finalResult = ""; - int index = 0; - String midResult = null; - sr.setRawContent(src); - SentenceSeg ss = new SentenceSeg(src); - ArrayList sens = ss.getSens(); - - for (Sentence sen : sens) { - long start = System.currentTimeMillis(); - MidResult mr = new MidResult(); - mr.setIndex(index++); - mr.setSource(sen.getContent()); - if (sen.isSeg()) { - // 原子分词 - AtomSeg as = new AtomSeg(sen.getContent()); - ArrayList atoms = as.getAtoms(); - mr.setAtoms(atoms); - println2Err("[atom time]:" + (System.currentTimeMillis() - start)); - start = System.currentTimeMillis(); - - // 生成分词图表,先进行初步分词,然后进行优化,最后进行词性标记 - SegGraph segGraph = GraphGenerate.generate(atoms, coreDict); - mr.setSegGraph(segGraph.getSnList()); - // 生成二叉分词图表 - SegGraph biSegGraph = GraphGenerate.biGenerate(segGraph, coreDict, bigramDict); - mr.setBiSegGraph(biSegGraph.getSnList()); - println2Err("[graph time]:" + (System.currentTimeMillis() - start)); - start = System.currentTimeMillis(); - - // 求N最短路径 - NShortPath nsp = new NShortPath(biSegGraph, segPathCount); - ArrayList> bipath = nsp.getPaths(); - mr.setBipath(bipath); - println2Err("[NSP time]:" + (System.currentTimeMillis() - start)); - start = System.currentTimeMillis(); - - for (ArrayList onePath : bipath) { - // 得到初次分词路径 - ArrayList segPath = getSegPath(segGraph, onePath); - ArrayList firstPath = AdjustSeg.firstAdjust(segPath); - String firstResult = outputResult(firstPath); - mr.addFirstResult(firstResult); - println2Err("[first time]:" + (System.currentTimeMillis() - start)); - start = System.currentTimeMillis(); - - // 处理未登陆词,进对初次分词结果进行优化 - SegGraph optSegGraph = new SegGraph(firstPath); - ArrayList sns = clone(firstPath); - personTagger.recognition(optSegGraph, sns); - transPersonTagger.recognition(optSegGraph, sns); - placeTagger.recognition(optSegGraph, sns); - mr.setOptSegGraph(optSegGraph.getSnList()); - println2Err("[unknown time]:" + (System.currentTimeMillis() - start)); - start = System.currentTimeMillis(); - - // 根据优化后的结果,重新进行生成二叉分词图表 - SegGraph optBiSegGraph = GraphGenerate.biGenerate(optSegGraph, coreDict, bigramDict); - mr.setOptBiSegGraph(optBiSegGraph.getSnList()); - - // 重新求取N-最短路径 - NShortPath optNsp = new NShortPath(optBiSegGraph, segPathCount); - ArrayList> optBipath = optNsp.getPaths(); - mr.setOptBipath(optBipath); - - // 生成优化后的分词结果,并对结果进行词性标记和最后的优化调整处理 - ArrayList adjResult = null; - for (ArrayList optOnePath : optBipath) { - ArrayList optSegPath = getSegPath(optSegGraph, optOnePath); - lexTagger.recognition(optSegPath); - String optResult = outputResult(optSegPath); - mr.addOptResult(optResult); - adjResult = AdjustSeg.finaAdjust(optSegPath, personTagger, placeTagger); - String adjrs = outputResult(adjResult); - println2Err("[last time]:" + (System.currentTimeMillis() - start)); - start = System.currentTimeMillis(); - if (midResult == null) - midResult = adjrs; - break; - } - } - sr.addMidResult(mr); - } else - midResult = sen.getContent(); - finalResult += midResult; - midResult = null; - } - - sr.setFinalResult(finalResult); - } - - return sr; - } - - private ArrayList clone(ArrayList sns) { - ArrayList result = null; - if (sns != null && sns.size() > 0) { - result = new ArrayList(); - for (SegNode sn : sns) - result.add(sn.clone()); - } - return result; - } - - // 根据二叉分词路径生成分词路径 - private ArrayList getSegPath(SegGraph sg, ArrayList bipath) { - ArrayList path = null; - - if (sg != null && bipath != null) { - ArrayList sns = sg.getSnList(); - path = new ArrayList(); - - for (int index : bipath) - path.add(sns.get(index)); - } - return path; - } - - // 根据分词路径生成分词结果 - private String outputResult(ArrayList wrList) { - String result = null; - String temp = null; - char[] pos = new char[2]; - if (wrList != null && wrList.size() > 0) { - result = ""; - for (int i = 0; i < wrList.size(); i++) { - SegNode sn = wrList.get(i); - if (sn.getPos() != POSTag.SEN_BEGIN && sn.getPos() != POSTag.SEN_END) { - int tag = Math.abs(sn.getPos()); - pos[0] = (char) (tag / 256); - pos[1] = (char) (tag % 256); - temp = "" + pos[0]; - if (pos[1] > 0) - temp += "" + pos[1]; - result += sn.getSrcWord() + "/" + temp + " "; - } - } - } - - return result; - } - - public void setSegPathCount(int segPathCount) { - this.segPathCount = segPathCount; - } - - public static void main(String[] args) { - SegTag2 segTag = new SegTag2(1); - - BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); - String line = null; - try { - while ((line = reader.readLine()) != null) { - try { - // String code = new String(line.getBytes("GBK")); - - SegResult seg_res = segTag.split("我是中国人"); - System.out.println(seg_res.getFinalResult()); - } catch (Throwable t) { - t.printStackTrace(); - } - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static void println2Err(String str) { - // System.err.println(str); - } -} diff --git a/components/klab.component.alignment/src/main/java/org/integratedmodelling/aligment/AlignmentComponent.java b/components/klab.component.alignment/src/main/java/org/integratedmodelling/aligment/AlignmentComponent.java deleted file mode 100644 index cb2b800340..0000000000 --- a/components/klab.component.alignment/src/main/java/org/integratedmodelling/aligment/AlignmentComponent.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.integratedmodelling.aligment; - -import java.io.IOException; -import java.io.Writer; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import org.integratedmodelling.klab.Version; -import org.integratedmodelling.klab.api.extensions.Component; -import org.integratedmodelling.klab.api.knowledge.IOntology; -import org.integratedmodelling.klab.exceptions.KlabIOException; -import org.integratedmodelling.klab.owl.Ontology; - -import com.google.common.collect.Sets; - -import uk.ac.ox.krr.logmap2.LogMap2_Matcher; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; - -/** - * Provisional API: align functions should return a k.LAB-centric view of the alignment set, while - * describeAlignments should produce a k.LAB-informative description of it. - * - * @param ontologies - */ -@Component(id = "alignment", version = Version.CURRENT) -public class AlignmentComponent { - - public void align(Collection ontologies) { - for (Set pair : Sets.combinations(new HashSet(ontologies), 2)) { - Iterator pit = pair.iterator(); - align(pit.next(), pit.next()); - } - } - - public void describeAlignments(Collection ontologies, Writer writer) { - for (Set pair : Sets.combinations(new HashSet(ontologies), 2)) { - Iterator pit = pair.iterator(); - describeAlignments(pit.next(), pit.next(), writer); - } - } - - public void align(IOntology onto1, IOntology onto2) { - } - - /** - * Provisional API: should return a k.LAB-centric view of the mapping set - * - * @param ontologies - */ - public void describeAlignments(IOntology onto1, IOntology onto2, Writer writer) { - - LogMap2_Matcher logmap2 = new LogMap2_Matcher(((Ontology) onto1).getOWLOntology(), - ((Ontology) onto2).getOWLOntology()); - - // Set of mappings computed my LogMap - Set logmap2_mappings = logmap2.getLogmap2_Mappings(); - - try { - writer.append("Number of mappings computed by LogMap: " + logmap2_mappings.size() + "\n"); - - // PrintWriter OutAlign = new PrintWriter(new FileWriter("C:\\ont\\OutAlign.txt")); - - for (MappingObjectStr mapping : logmap2_mappings) { - - writer.append("Mapping: " + "\n"); - writer.append("\t" + mapping.getIRIStrEnt1() + "\n"); - writer.append("\t" + mapping.getIRIStrEnt2() + "\n"); - writer.append("\t" + mapping.getConfidence() + "\n"); - - // MappingObjectStr.EQ or MappingObjectStr.SUB or MappingObjectStr.SUP - writer.append("\t" + mapping.getMappingDirection() + "\n"); // Utilities.EQ; - - // MappingObjectStr.CLASSES or MappingObjectStr.OBJECTPROPERTIES or - // MappingObjectStr.DATAPROPERTIES or MappingObjectStr.INSTANCES - writer.append("\t" + mapping.getTypeOfMapping() + "\n"); - - } - } catch (IOException e) { - throw new KlabIOException(e); - } - - } - -} diff --git a/components/klab.component.alignment/src/main/java/org/semanticweb/elk/owlapi/ElkReasonerAdapted.java b/components/klab.component.alignment/src/main/java/org/semanticweb/elk/owlapi/ElkReasonerAdapted.java deleted file mode 100644 index 33871b8b63..0000000000 --- a/components/klab.component.alignment/src/main/java/org/semanticweb/elk/owlapi/ElkReasonerAdapted.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.semanticweb.elk.owlapi; - -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.reasoner.NodeSet; -import org.semanticweb.owlapi.reasoner.impl.OWLClassNodeSet; - -import uk.ac.ox.krr.logmap2.reasoning.DisjointnessAxiomExtractor; - -public class ElkReasonerAdapted extends ElkReasoner{ - - - public ElkReasonerAdapted(OWLOntology rootOntology){ - super(rootOntology, false); - } - - /** - * Getting all disjoint classes is costly. We get only explicit disjointness. - * We will complete with questions (A intersection B) later if necessary - */ - public NodeSet getDisjointClasses(OWLClassExpression ce) { - - OWLClassNodeSet nodeSet = new OWLClassNodeSet(); - - if (!ce.isAnonymous()) { - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - nodeSet.addAllNodes(DisjointnessAxiomExtractor.getExplicitOWLDisjointnessAxioms(this, ontology, ce.asOWLClass()).getNodes()); - nodeSet.addAllNodes(DisjointnessAxiomExtractor.getExplicitOWLDisjointnessAxioms(this, ontology, ce.asOWLClass()).getNodes()); - nodeSet.addAllNodes(DisjointnessAxiomExtractor.getExplicitOWLDisjointnessAxioms(this, ontology, ce.asOWLClass()).getNodes()); - } - } - - return nodeSet; - - /*if (!ce.isAnonymous()) { - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - - for (OWLDisjointClassesAxiom ax : ontology.getDisjointClassesAxioms(ce.asOWLClass())) { - for (OWLClassExpression op : ax.getClassExpressions()) { - if (!op.isAnonymous() && !op.equals(ce)) { //Op must be differnt to ce - nodeSet.addNode(getEquivalentClasses(op)); - } - } - } - } - } */ - - } - -} diff --git a/components/klab.component.alignment/src/main/java/stub.txt b/components/klab.component.alignment/src/main/java/stub.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractor.java deleted file mode 100644 index 7096dc6917..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractor.java +++ /dev/null @@ -1,757 +0,0 @@ -package uk.ac.manchester.syntactic_locality; - -import java.net.URI; - -import java.rmi.server.UID; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -//import org.mindswap.pellet.utils.MultiValueMap; -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.*; -import org.semanticweb.owlapi.util.OWLEntityCollector; - -import org.semanticweb.owlapi.apibinding.OWLManager; - -public class ModuleExtractor { - - private OWLEntityCollector axiomSignatureCollector; - - private Set ontologyAxioms; - - private OWLOntologyManager ontologyManager; - - private OWLOntology module; - - private SyntacticLocalityChecker localityChecker; - - private boolean considerAnnotations=false; - - private boolean considerImportsClosure=true; - - private boolean ignoreAssertions=false; - - private Set collectedEntities; - - - private OWLDataFactory dataFactory; - - /* - * Not used: this index does not speed up the execution - * @deprecated - */ - //private MultiValueMap entity2Axioms; - //private boolean useIndexes=false; - - private Set moduleAxioms; - - - private Set moduleSignature=new HashSet(); - - private List newMembers = new ArrayList(); - - - - /** - * - * @param ontology Ontology to be modularized (already locally loaded but not indexed) - * @param dualConcepts Type of interpretation for concepts outside the signature - * @param dualRoles Type of interpretation for properties outside the signature - * @param considerImportsClosure Treats the imported ontologies as well - * @param considerEntityAnnotations Annotations are always local, but it could be interesting to maintain them in modules - * @param ignoreAssertions The module will only extract the corresponding part from the TBOX - */ - public ModuleExtractor(OWLOntology ontology, boolean dualConcepts, boolean dualRoles, - boolean considerImportsClosure, boolean considerEntityAnnotations, boolean ignoreAssertions){ - - ontologyManager = OWLManager.createOWLOntologyManager(); - - dataFactory = ontologyManager.getOWLDataFactory(); - - //entity2Axioms = new MultiValueMap(); - ontologyAxioms=new HashSet(); - moduleAxioms = new HashSet(); - - - collectedEntities=new HashSet(); - axiomSignatureCollector = new OWLEntityCollector(collectedEntities); - - //From axioms we do not want to collect data types - axiomSignatureCollector.setCollectDatatypes(false); - - - //Load Ontology/ies - //Annotations treatment - considerAnnotations=considerEntityAnnotations; - this.considerImportsClosure=considerImportsClosure; - this.ignoreAssertions=ignoreAssertions; - indexOntology(ontology); - //System.out.println("Ontology Axioms: " + ontologyAxioms.size()); - - - - //Set localityChecker - setLocalityChecker(dualConcepts, dualRoles, considerEntityAnnotations, ignoreAssertions); - - - } - - - /** - * - * @param ontoAxioms - * @param dualConcepts - * @param dualRoles - * @param considerImportsClosure - * @param considerEntityAnnotations - * @param ignoreAssertions - */ - public ModuleExtractor(Set ontoAxioms, boolean dualConcepts, boolean dualRoles, - boolean considerImportsClosure, boolean considerEntityAnnotations, boolean ignoreAssertions){ - - ontologyManager = OWLManager.createOWLOntologyManager(); - - dataFactory = ontologyManager.getOWLDataFactory(); - - - ontologyAxioms=ontoAxioms; - moduleAxioms = new HashSet(); - - - collectedEntities=new HashSet(); - axiomSignatureCollector = new OWLEntityCollector(collectedEntities); - - //From axioms we do not want to collect data types - axiomSignatureCollector.setCollectDatatypes(false); - - - //Load Ontology/ies - //Annotations treatment - considerAnnotations=considerEntityAnnotations; - this.considerImportsClosure=considerImportsClosure; - this.ignoreAssertions=ignoreAssertions; - - //Set localityChecker - setLocalityChecker(dualConcepts, dualRoles, considerEntityAnnotations, ignoreAssertions); - - - } - - - /** - * This method uses a synchronised OWLOntologyManager - * @param ontoAxioms - * @param dualConcepts - * @param dualRoles - * @param considerImportsClosure - * @param considerEntityAnnotations - * @param ignoreAssertions - */ - public ModuleExtractor(Set ontoAxioms, OWLOntologyManager ontoManager, boolean dualConcepts, boolean dualRoles, - boolean considerImportsClosure, boolean considerEntityAnnotations, boolean ignoreAssertions){ - - //ontologyManager = OWLManager.createOWLOntologyManager(); - - ontologyManager = ontoManager; - - dataFactory = ontologyManager.getOWLDataFactory(); - - - ontologyAxioms=ontoAxioms; - moduleAxioms = new HashSet(); - - - collectedEntities=new HashSet(); - axiomSignatureCollector = new OWLEntityCollector(collectedEntities); - - //From axioms we do not want to collect data types - axiomSignatureCollector.setCollectDatatypes(false); - - - //Load Ontology/ies - //Annotations treatment - considerAnnotations=considerEntityAnnotations; - this.considerImportsClosure=considerImportsClosure; - this.ignoreAssertions=ignoreAssertions; - - //Set localityChecker - setLocalityChecker(dualConcepts, dualRoles, considerEntityAnnotations, ignoreAssertions, ontologyManager.getOWLDataFactory()); - - - } - - - - /** - * Default values for considerAnnotations=false, useIndexes=true, considerImportsClosure=true. - * @param ontology Ontology to be modularized - * @param dualConcepts Type of interpretation for concepts outside the signature - * @param dualRoles Type of interpretation for properties outside the signature - */ - public ModuleExtractor(OWLOntology ontology, boolean dualConcepts, boolean dualRoles){ - - ontologyManager = OWLManager.createOWLOntologyManager(); - //entity2Axioms = new MultiValueMap(); - ontologyAxioms=new HashSet(); - moduleAxioms = new HashSet(); - - dataFactory = ontologyManager.getOWLDataFactory(); - - collectedEntities=new HashSet(); - axiomSignatureCollector = new OWLEntityCollector(collectedEntities); - - //From axioms we do not want to collect data types - axiomSignatureCollector.setCollectDatatypes(false); - - //Load Ontology/ies - indexOntology(ontology); - //System.out.println("Ontology Axioms: " + ontologyAxioms.size()); - - //Set localityChecker - setLocalityChecker(dualConcepts, dualRoles, false, true); - - } - - - - private void indexOntology(OWLOntology ontology){ - //We consider annotationes - - - - if (considerImportsClosure) { - try { - indexImportedOntologies(ontologyManager.getImportsClosure(ontology)); - } - catch(Exception e){ - - //We do not consider direct closure - for (OWLAxiom ax : ontology.getAxioms()) { - if (considerAnnotations || !(ax instanceof OWLAnnotationAxiom)) - ontologyAxioms.add(ax); - } - - } - //indexImportedOntologies(ontologyManager.getDirectImports(ontology)); - } - else { - for (OWLAxiom ax : ontology.getAxioms()) { - if (considerAnnotations || !(ax instanceof OWLAnnotationAxiom)) - ontologyAxioms.add(ax); - } - //ontologyAxioms.addAll(ontology.getAxioms()); - } - - - System.out.println("Ontology Axioms: " + ontologyAxioms.size()); - - - } - - - private void indexImportedOntologies(Set ontologies) { - for(OWLOntology ontology : ontologies) { - //if (useIndexes) - // loadIndexedOntology(ontology); - //else - for (OWLAxiom ax : ontology.getAxioms()) { - if (considerAnnotations || !(ax instanceof OWLAnnotationAxiom)) - ontologyAxioms.add(ax); - } - } - } - - - /* - * @deprecated - * - * - private void loadIndexedOntology(OWLOntology ontology) { - for (OWLAxiom ax : ontology.getAxioms()) { - if (considerAnnotations || !(ax instanceof OWLAnnotationAxiom)) { - for (OWLEntity ent : getAxiomSignature(ax)){ - entity2Axioms.add(ent, ax); - } - } - } - }*/ - - - - - - private void setLocalityChecker(boolean dualConcepts, boolean dualRoles, boolean considerEntityAnnotations, boolean ignoreAssertions, OWLDataFactory dataFactory) { - - localityChecker = new SyntacticLocalityChecker(dualConcepts, dualRoles, considerEntityAnnotations, ignoreAssertions, dataFactory); - - - } - - - private void setLocalityChecker(boolean dualConcepts, boolean dualRoles, boolean considerEntityAnnotations, boolean ignoreAssertions) { - - localityChecker = new SyntacticLocalityChecker(dualConcepts, dualRoles, considerEntityAnnotations, ignoreAssertions); - - - } - - - - - private Set getAxiomSignature(OWLAxiom ax) { - - collectedEntities.clear(); - - axiomSignatureCollector.reset(collectedEntities); - - ax.accept(axiomSignatureCollector); - - //System.out.println("Ax: " + ax); - //System.out.println("\tEntities: " + collectedEntities); - - //return axiomSignatureCollector.getObjects(); - return collectedEntities; - } - - - /* - * - * @param ent - * @return - * @deprecated - * - private Set getEntityAxioms(OWLEntity ent) { - - if (entity2Axioms.containsKey(ent)) - return entity2Axioms.get(ent); - else - return Collections.emptySet(); - }*/ - - - - - public OWLOntology getLocalityModuleForSignatureGroup(Set signature){ - - return getLocalityModuleForSignatureGroup(signature, "http://krono.ac.uji.es/Links/ontologies/module" + new UID() + ".owl"); - - } - - - - public OWLOntology getLocalityModuleForSignatureGroup(Set signature, String moduleURIStr){ - return getLocalityModuleForSignatureGroup(signature, moduleURIStr, true); - } - - public OWLOntology getLocalityModuleForSignatureGroup(Set signature, String moduleURIStr, boolean reInitManager){ - - long init, fin; - init=Calendar.getInstance().getTimeInMillis(); - - moduleAxioms.clear(); - - IRI moduleIRI = IRI.create(moduleURIStr.replace("\\", "//")); - - //Creates moduleSignature and moduleaxioms - //if (useIndexes) - // extractModuleAxiomsForGroupSignatureIndex(signature); - //else - extractModuleAxiomsForGroupSignature(signature); - - fin=Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time extract module axioms (" + moduleAxioms.size() + " axioms) (s): " + (double)((double)fin-(double)init)/1000.0); - - return getModuleFromAxioms(moduleAxioms, moduleIRI, reInitManager); - - } - - - - - - - - public OWLOntologyManager getOntoModuleManager(){ - return ontologyManager; - } - - public OWLOntology getModuleFromAxioms(Set moduleAxioms, IRI moduleIri) { - return getModuleFromAxioms(moduleAxioms, moduleIri, true); - } - - public OWLOntology getModuleFromAxioms(Set moduleAxioms, IRI moduleIri, boolean reInitManager) { - - //we need to reinit manager (when many calls to extract modules) - if (reInitManager) - ontologyManager = OWLManager.createOWLOntologyManager(); - - long init, fin; - init=Calendar.getInstance().getTimeInMillis(); - - //OWLOntology module=null; - - try { - module = ontologyManager.createOntology(moduleIri); - List ontoChanges = new ArrayList(); - for(OWLAxiom axiom : moduleAxioms) { - ontoChanges.add(new AddAxiom(module, axiom)); - } - ontologyManager.applyChanges(ontoChanges); - } - - catch(Exception e) { - System.out.println("Error creating module ontology from axioms."); - - } - - - fin=Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time create OWLOntology for module (s): " + (double)((double)fin-(double)init)/1000.0); - - return module; - } - - - - - - - /* - * Extract the common (upper/lower) Module for a set of entities passed as a signature - * You **Do NOT*** need firstly to call extracModules() - * Using index structure and considering only axioms that involve entities form signature - * This method is slower - * Author Ernesto - * @deprecated - * - - private Set extractModuleAxiomsForGroupSignatureIndex(Set signature) { - - //The signature to be used for the locality checking will be the one of the provisional module - //At least a module will contain the entities from the signature - moduleSignature = signature; - //moduleSignature.addAll(signature); //Current module signature - - int previousSize = 0; //ModuleSignature size is 0 we don't extract any element - //(That's correct??) May be yoy can get non-local axiom for the empty signature, but actually - //you are interested in a module related to your signature - - - while(moduleSignature.size() != previousSize) { - previousSize = moduleSignature.size(); - - for (OWLEntity ent : moduleSignature) { - //Axioms involving only elements from signature - //Should we consider all axioms??? - for (OWLAxiom ax : getEntityAxioms(ent)) { - - //We consider annotationes --> NOw in locality checker - //if (considerAnnotations && (ax instanceof OWLAnnotationAxiom) && !moduleAxioms.contains(ax) ) - // moduleAxioms.add(ax); - - //We don't want to consider it again - if (!moduleAxioms.contains(ax) && !localityChecker.isLocalAxiom(ax, moduleSignature)) { - moduleAxioms.add(ax); - - for (OWLEntity newEnt : getAxiomSignature(ax)) { - if(!moduleSignature.contains(newEnt)) - newMembers.add(newEnt); //We don't want to modify module within the iterations - } - } - } - } - - moduleSignature.addAll(newMembers); - - newMembers.clear(); - - } - - return moduleAxioms; - - }*/ - - - - /** - * Extract the common (upper/lower) Module for a set of entities passed as a signature - * You **Do NOT*** need firstly to call extracModules() - * Author Ernesto - * - */ - public Set extractModuleAxiomsForGroupSignature(Set signature) { - - //The signature to be used for the locality checking will be the one of the provisional module - //At least a module will contain the entities from the signature - moduleSignature = signature; - moduleAxioms.clear(); - //moduleSignature.addAll(signature); //Current module signature - - - int previousSize = 0; //ModuleSignature size is 0 we don't extract any element - //(That's correct??) May be yoy can get non-local axiom for the empty signature, but actually - //you are interested in a module related to your signature - - - - //To ensure that entities in signature will belong to the module - //Declaration axiom are non local - for (OWLEntity ent : moduleSignature) { - moduleAxioms.add(dataFactory.getOWLDeclarationAxiom(ent)); - } - - - - while(moduleSignature.size() != previousSize) { - previousSize = moduleSignature.size(); - - for (OWLAxiom ax : ontologyAxioms) { - - //We consider annotationes -->> NOw in locality checker - //if (considerAnnotations && (ax instanceof OWLAnnotationAxiom) && !moduleAxioms.contains(ax) ) - // moduleAxioms.add(ax); - - if (!moduleAxioms.contains(ax) && !localityChecker.isLocalAxiom(ax, moduleSignature)) { //We don't want to consider it again - moduleAxioms.add(ax); - - for (OWLEntity newEnt : getAxiomSignature(ax)) { - if(!moduleSignature.contains(newEnt) && !newEnt.equals(Thing())) //No Thing class within signature - newMembers.add(newEnt); //We don't want to modify module within the iterations - } - } - } - - - - moduleSignature.addAll(newMembers); - //moduleMembers.addAll(newMembers); - newMembers.clear(); - } - - - - return moduleAxioms; - - } - - - - - - /** - * Extracts only the module entities for a set of entities passed as a signature. - * This method is used when the user is only intereseted in the entrities and not in the axioms - * You **Do NOT*** need firstly to call extracModules() - * Author Ernesto - * - */ - public Set extractModuleEntitiesForGroupSignature(Set signature) { - - //The signature to be used for the locality checking will be the one of the provisional module - //At least a module will contain the entities from the signature - moduleSignature = signature; - //moduleSignature.addAll(signature); //Current module signature - - - int previousSize = 0; //ModuleSignature size is 0 we don't extract any element - //(That's correct??) May be yoy can get non-local axiom for the empty signature, but actually - //you are interested in a module related to your signature - - - while(moduleSignature.size() != previousSize) { - previousSize = moduleSignature.size(); - - for (OWLAxiom ax : ontologyAxioms) { - - - - if (!localityChecker.isLocalAxiom(ax, moduleSignature)) { //We don't want to consider it again - - for (OWLEntity newEnt : getAxiomSignature(ax)) { - if(!moduleSignature.contains(newEnt) && !newEnt.equals(Thing())) //No Thing class within signature - newMembers.add(newEnt); //We don't want to modify module within the iterations - } - } - } - - - - moduleSignature.addAll(newMembers); - newMembers.clear(); - } - - - - return moduleSignature; - - } - - - - /** - * Extracts only the module entities for an entity passed as a signature. - * This method is used when the user is only intereseted in the entrities and not in the axioms - * You **Do NOT*** need to call extracModules() first - * Author Ernesto - * - */ - public Set extractModuleEntitiesForEntity(OWLEntity entity) { - - //The signature to be used for the locality checking will be the one of the provisional module - //At least a module will contain the entities from the signature - moduleSignature.clear(); - moduleSignature.add(entity); - //moduleSignature.addAll(signature); //Current module signature - - - int previousSize = 0; //ModuleSignature size is 0 we don't extract any element - //(That's correct??) May be yoy can get non-local axiom for the empty signature, but actually - //you are interested in a module related to your signature - - - while(moduleSignature.size() != previousSize) { - previousSize = moduleSignature.size(); - - for (OWLAxiom ax : ontologyAxioms) { - - - - if (!localityChecker.isLocalAxiom(ax, moduleSignature)) { //We don't want to consider it again - - for (OWLEntity newEnt : getAxiomSignature(ax)) { - if(!moduleSignature.contains(newEnt) && !newEnt.equals(Thing())) //No Thing class within signature - newMembers.add(newEnt); //We don't want to modify module within the iterations - } - } - } - - - - moduleSignature.addAll(newMembers); - newMembers.clear(); - } - - - - return moduleSignature; - - } - - - - - - - /** - * Extract the common (upper/lower) Module for an entity passed as a signature - * You **Do NOT*** need to call extracModules() first - * Author Ernesto - * - */ - public Set extractModuleAxiomsForEntity(OWLEntity entity) { - - //The signature to be used for the locality checking will be the one of the provisional module - //At least a module will contain the entities from the signature - moduleSignature.clear(); - moduleAxioms.clear(); - - moduleSignature.add(entity); - //moduleSignature.addAll(signature); //Current module signature - - - int previousSize = 0; //ModuleSignature size is 0 we don't extract any element - //(That's correct??) May be yoy can get non-local axiom for the empty signature, but actually - //you are interested in a module related to your signature - - - - - //To ensure that entities in signature will belong to the module - //Declaration axiom are non local - for (OWLEntity ent : moduleSignature) { - moduleAxioms.add(dataFactory.getOWLDeclarationAxiom(ent)); - } - - - - while(moduleSignature.size() != previousSize) { - previousSize = moduleSignature.size(); - - for (OWLAxiom ax : ontologyAxioms) { - - //We consider annotationes -->> NOw in locality checker - //if (considerAnnotations && (ax instanceof OWLAnnotationAxiom) && !moduleAxioms.contains(ax) ) - // moduleAxioms.add(ax); - - if (!moduleAxioms.contains(ax) && !localityChecker.isLocalAxiom(ax, moduleSignature)) { //We don't want to consider it again - moduleAxioms.add(ax); - - for (OWLEntity newEnt : getAxiomSignature(ax)) { - if(!moduleSignature.contains(newEnt) && !newEnt.equals(Thing())) //No Thing class within signature - newMembers.add(newEnt); //We don't want to modify module within the iterations - } - } - } - - - - moduleSignature.addAll(newMembers); - //moduleMembers.addAll(newMembers); - newMembers.clear(); - } - - - - return moduleAxioms; - - } - - public void saveExtractedModule(String physicalModuleURI) { - //OWLOntologyManager ontologyModuleManager = OWLManager.createOWLOntologyManager(); - - try { - ontologyManager.saveOntology(module, new RDFXMLOntologyFormat(), IRI.create(physicalModuleURI)); - } - catch (Exception e) { - System.err.println("Error saving module\n" + e.getLocalizedMessage()); - e.printStackTrace(); - } - } - - - - - - - public void clearStrutures(){ - - collectedEntities.clear(); - ontologyAxioms.clear(); - - moduleAxioms.clear(); - - //moduleSignature.clear(); - - newMembers.clear(); - - //ontologyManager.removeOntology(module); - //module=null; - //ontologyManager=null; - - } - - - private OWLClass Thing() { - return ontologyManager.getOWLDataFactory().getOWLThing(); - } - - - - - - -} \ No newline at end of file diff --git a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractorManager.java b/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractorManager.java deleted file mode 100644 index eaf1b261a1..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/ModuleExtractorManager.java +++ /dev/null @@ -1,300 +0,0 @@ -package uk.ac.manchester.syntactic_locality; - -import java.rmi.server.UID; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -//import java.net.URI; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.AddAxiom; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.manchester.syntactic_locality.utils.*; - - -/** - * This class serves as intermediary between the applications and the ModuleExtractor, managing the the iteration i module extraction when - * user are interested in combined module extraction like Lower of Upper modules. Also it makes the translation from type of module - * (upper, lower, lum...) to 'dualConcept' and 'dualRole' meaning (Use ModuleExtractorManager.UPPER_MODULE or Constants.UPPER_MODULE). - * @author Ernesto - * Temporal Knowledge Bases Group - * Jaume I University of Castellon - * Created: 08/03/2008 - * Modified: - - */ -public class ModuleExtractorManager { - - //DUAL CONCEPTS AND DUAL ROLES - public static final String LOWER_MODULE="LOWER_MODULE"; - public static final String LM="LM"; - - //NON DUAL CONCEPTS AND NON DUAL ROLES - public static final String UPPER_MODULE="UPPER_MODULE"; - public static final String UM="UM"; - - public static final String LOWER_UPPER_MODULE="LOWER_UPPER_MODULE"; - public static final String LUM="LUM"; - - public static final String UPPER_LOWER_MODULE="UPPER_LOWER_MODULE"; - public static final String ULM="ULM"; - - //ONLY DUAL CONCEPTS - public static final String DUAL_CONCEPTS_MODULE="DUAL_CONCEPTS_MODULE"; - public static final String DCM="DCM"; - - //ONLY DUAL ROLES - public static final String DUAL_ROLES_MODULE="DUAL_ROLES_MODULE"; - public static final String DRM="DRM"; - - private boolean dualConcepts; - - private boolean dualRoles; - - private boolean secondIteration; //Extract the "inverse module" of the previous extracted module - - private Set foreignSignature1; - private Set foreignSignature2; - - //Modularizers - private ModuleExtractor modularizer_Iteration1; - private ModuleExtractor modularizer_Iteration2; - - //private OWLOntologyManager externalOntologyManager; - private OWLOntology ontoToModularize; - - private OWLOntology module; - - private boolean considerAnnotations=false; - - private boolean considerImportsClosure=true; - - //private Set moduleAxioms; - - - public ModuleExtractorManager(OWLOntology ontology, String ModuleType){ - this(ontology, ModuleType, true, false, false); - - } - - public ModuleExtractorManager(OWLOntology ontology, String ModuleType, - boolean considerImportsClosure, boolean considerAnnotations, boolean ignoreAnnotations){ - - ontoToModularize=ontology; - - //Sets dualConcepts, dualRoles and seconIteration boolean variables - getModuleType(ModuleType); - - this.considerAnnotations=considerAnnotations; - this.considerImportsClosure=considerImportsClosure; - - //Construct modularizer (also creates structure for ontology) - modularizer_Iteration1 = new ModuleExtractor(ontoToModularize, dualConcepts, dualRoles, considerImportsClosure, considerAnnotations, ignoreAnnotations); - - } - - - /** - * Necessary toi construct a module for an arbitriary set of axioms - * @param moduleAxioms - * @param moduleUri - * @return - */ - public OWLOntology getModuleFromAxioms(Set moduleAxioms, IRI moduleIri) { - - OWLOntologyManager ontologyManager = OWLManager.createOWLOntologyManager(); - - OWLOntology module=null; - - try { - module = ontologyManager.createOntology(moduleIri); - List ontoChanges = new ArrayList(); - for(OWLAxiom axiom : moduleAxioms) { - ontoChanges.add(new AddAxiom(module, axiom)); - } - ontologyManager.applyChanges(ontoChanges); - } - - catch(Exception e) { - System.out.println("Error creating module ontology from extende set of axioms."); - - } - - //System.out.println("Time create OWLOntology for module (s): " + (double)((double)fin-(double)init)/1000.0); - - return module; - } - - - - /** - * Transform type of module to 'dualConcept' and 'dualRole' meaning - * @param ModuleType - */ - private void getModuleType(String ModuleType){ - - if (ModuleType.equals(UPPER_MODULE) || ModuleType.equals(UM)) { - dualConcepts = false; - dualRoles = false; - secondIteration=false; - } - else if (ModuleType.equals(LOWER_MODULE) || ModuleType.equals(LM)) { - dualConcepts = true; - dualRoles = true; - secondIteration=false; - } - else if (ModuleType.equals(LOWER_UPPER_MODULE) || ModuleType.equals(LUM)) { - dualConcepts = false; - dualRoles = false; - secondIteration=true; - } - - else if (ModuleType.equals(UPPER_LOWER_MODULE) || ModuleType.equals(ULM)) { - dualConcepts = true; - dualRoles = true; - secondIteration=true; - } - - else if (ModuleType.equals(DUAL_CONCEPTS_MODULE) || ModuleType.equals(DCM)) { - dualConcepts = true; - dualRoles = false; - secondIteration=false; - } - else if (ModuleType.equals(DUAL_ROLES_MODULE) || ModuleType.equals(DRM)) { - dualConcepts = false; - dualRoles = true; - secondIteration=false; - } - else { - System.err.println("The given module type is unknown. An Upper Module will be extracted."); - dualConcepts = false; - dualRoles = false; - secondIteration=false; - } - - } - - - - - - /** - * - * - */ - public OWLOntology extractModule(HashSet signature){ - return extractModule(signature, "http://krono.ac.uji.es/Links/ontologies/module" + new UID() + ".owl"); - } - - - - /** - * - * - */ - public OWLOntology extractModule(HashSet signature, String moduleURIStr) { //give URI!!! - - - - //We extract upper module of lower module, or lower module of the upper module - //------------------------------------------------------------------------------ - if (secondIteration) { - - //We need two signatures, since the signature is modified in moduleExtractor. If we create a new set in extractor we spedd down the excution - //so it's better to duplicate now the structure - //foreignSignature1=new HashSet(signature); - foreignSignature1=new HashSet(signature); - foreignSignature2=new HashSet(signature); - - //URI auxModuleURI = URI.create("http://krono.act.uji.es/Links/ontologies/temporalModule.owl"); - String auxModuleURI = "http://krono.act.uji.es/Links/ontologies/temporalModule.owl"; - - //It is important to use different URIs for first and second ioteration modules - module = modularizer_Iteration1.getLocalityModuleForSignatureGroup(foreignSignature1, auxModuleURI); - System.out.println("Module size (axioms) Iter 1: " + module.getAxioms().size()); - - if (module.getAxioms().size() == 0 && module.getClassesInSignature().size()==0) { - System.out.println("(Empty module, so not necessary iteration) Module size (axioms) Iter 2: " + module.getAxioms().size()); - } - else { - //Inverted - modularizer_Iteration2 = new ModuleExtractor(module, !dualConcepts, !dualRoles, considerImportsClosure, considerAnnotations, false); - module = modularizer_Iteration2.getLocalityModuleForSignatureGroup(foreignSignature2, moduleURIStr); - - System.out.println("Module size (axioms) Iter 2: " + module.getAxioms().size()); - } - } - else { - foreignSignature1=new HashSet(signature); - module = modularizer_Iteration1.getLocalityModuleForSignatureGroup(foreignSignature1, moduleURIStr); - //System.out.println("Module size (axioms): " + module.getAxioms().size()); - } - - - return module; - } - - - public IRI getModuleIRI(){ - return module.getOntologyID().getOntologyIRI(); - } - - - public OWLOntology getExtractedModule(){ - return module; - } - - public Set getModuleAxioms(){ - return module.getAxioms(); - } - - - public int getNumberOfAxiomsExtractedModule(){ - return module.getAxioms().size(); - } - - - public int getNumberOfClassesExtractedModule(){ - return module.getClassesInSignature().size(); - } - - public int getNumberOfIndividualsExtractedModule(){ - return module.getIndividualsInSignature().size(); - } - - public int getNumberOfRolesExtractedModule(){ - return module.getDataPropertiesInSignature().size() + module.getObjectPropertiesInSignature().size(); - } - - - - - public int getNumberOfAxiomsOntoToModularize(){ - return ontoToModularize.getAxioms().size(); - } - - public int getNumberOfClassesOntoToModularize(){ - return ontoToModularize.getClassesInSignature().size(); - } - - public int getNumberOfIndividualsOntoToModularize(){ - return ontoToModularize.getIndividualsInSignature().size(); - } - - public int getNumberOfRolesOntoToModularize(){ - return ontoToModularize.getDataPropertiesInSignature().size() + ontoToModularize.getObjectPropertiesInSignature().size(); - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/OntologyModuleExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/OntologyModuleExtractor.java deleted file mode 100644 index 968d4485d9..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/OntologyModuleExtractor.java +++ /dev/null @@ -1,717 +0,0 @@ -package uk.ac.manchester.syntactic_locality; - -import java.util.ArrayList; - - -import java.util.HashSet; -import java.util.HashMap; -import java.util.List; -import java.util.Set; -import java.util.Map; - -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLAnnotationProperty; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -//import org.semanticweb.owlapi.model.OWLAnonymousIndividual; -import org.semanticweb.owlapi.modularity.OntologySegmenter; - -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.reasoner.OWLReasoner; - -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; - -//import uk.ac.manchester.cs.owlapi.modularity.ModuleType; -//import uk.ac.manchester.cs.owlapi.modularity.SyntacticLocalityModuleExtractor; - -/** - * - * This class implements locality modules: bottom, top and star - * - * @author Ernesto - * - */ -public class OntologyModuleExtractor implements OntologySegmenter { - - - private OWLOntologyManager ontologyManager; - private OWLDataFactory dataFactory; - - private Set ontologyAxioms;// = new HashSet(); - - private Map> entity2Axioms = new HashMap>(); - - private SyntacticLocalityChecker localityChecker; - - private boolean considerAnnotations=false; - - private boolean ignoreAssertions=false; - - - private Set moduleAxioms = new HashSet(); - - - private Set moduleSignature=new HashSet(); - - private Set inputSignature=new HashSet(); - - - private List newMembers = new ArrayList(); - - private boolean useOptimization; - - private boolean includeDeclarationAxioms=false; - - - public static enum TYPEMODULE { - BOTTOM_LOCALITY, TOP_LOCALITY, BOTTOM_TOP_LOCALITY, STAR - } - - private TYPEMODULE typeModule = TYPEMODULE.BOTTOM_LOCALITY; - - - /** - * Default constructor. - * @param ontology - */ - public OntologyModuleExtractor(OWLOntology ontology){ - - this(ontology, true, false, false, false); - - } - - - /** - * - * @param ontology OWLOntology to be modularised - * @param considerImportsClosure Treats the imported ontologies as well - * @param considerEntityAnnotations Annotations are always local, but it could be interesting to maintain them in modules - * @param ignoreAssertions The module will only extract the corresponding part from the TBOX - */ - public OntologyModuleExtractor( - OWLOntology ontology, - boolean considerImportsClosure, - boolean considerEntityAnnotations, - boolean ignoreAssertions, - boolean useOptimization){ - - this(getAxioms( - ontology, - considerImportsClosure, - considerEntityAnnotations, - ignoreAssertions), - considerEntityAnnotations, - ignoreAssertions, - useOptimization); - - } - - - - /** - * Default constructor. - * @param ontoAxioms - */ - public OntologyModuleExtractor(Set ontoAxioms){ - - this(ontoAxioms, false, false, false); - - } - - - - /** - * Constructor like OWL API one (uk.ac.manchester.cs.owlapi.modularity.SyntacticLocalityModuleExtractor) - * @param manager - * @param ontology - */ - public OntologyModuleExtractor(OWLOntologyManager manager, OWLOntology ontology, TYPEMODULE typeModule){ - - ontologyManager = manager; - ontologyAxioms=ontology.getAxioms(); - - this.typeModule = typeModule; - - this.considerAnnotations=false; - this.ignoreAssertions=false; - - this.useOptimization=true; - - indexEntities(); - - } - - - /** - * Main constructor - * @param ontoAxioms - * @param considerEntityAnnotations - * @param ignoreAssertions - * @param useOptimization - */ - public OntologyModuleExtractor( - Set ontoAxioms, - boolean considerEntityAnnotations, - boolean ignoreAssertions, - boolean useOptimization){ - - //ontologyAxioms.addAll(ontoAxioms); - ontologyAxioms=ontoAxioms; - - this.considerAnnotations=considerEntityAnnotations; - this.ignoreAssertions=ignoreAssertions; - - - //System.out.println("Ontology Axioms to modularize: " + ontologyAxioms.size()); - - this.useOptimization=useOptimization; - - if (useOptimization) - indexEntities(); - - } - - /** - * Main constructor with manager - * @param manager - * @param ontoAxioms - * @param considerEntityAnnotations - * @param ignoreAssertions - * @param useOptimization - */ - public OntologyModuleExtractor( - OWLOntologyManager manager, - Set ontoAxioms, - boolean considerEntityAnnotations, - boolean ignoreAssertions, - boolean useOptimization){ - - ontologyManager = manager; - - //ontologyAxioms.addAll(ontoAxioms); - ontologyAxioms=ontoAxioms; - - this.considerAnnotations=considerEntityAnnotations; - this.ignoreAssertions=ignoreAssertions; - - - //System.out.println("Ontology Axioms to modularize: " + ontologyAxioms.size()); - - this.useOptimization=useOptimization; - - if (useOptimization) - indexEntities(); - - } - - - public void clearStrutures(){ - - ontologyAxioms.clear(); - - moduleAxioms.clear(); - - moduleSignature.clear(); - - newMembers.clear(); - - entity2Axioms.clear(); - - inputSignature.clear(); - - } - - - private void indexEntities() { - - for (OWLAxiom ax : ontologyAxioms) { - for (OWLEntity ent : ax.getSignature()){ - if (!entity2Axioms.containsKey(ent)){ - entity2Axioms.put(ent, new HashSet()); - } - entity2Axioms.get(ent).add(ax); - } - } - } - - - /** - * Returns module axioms. The module should have been previously extracted. - * @return - */ - public Set getModuleAxioms(){ - return moduleAxioms; - } - - - /** - * Returns module entities. The module should have been previously extracted. - * @return - */ - public Set getModuleEntities(){ - return moduleSignature; - } - - - /** - * Return the OWLOntology correspondent to the module. The module should have been previously extracted. - * A default uri is assigned - * @return - * @throws OWLOntologyCreationException - */ - public OWLOntology getModuleOntology() throws OWLOntologyCreationException { - return getModuleOntology("http://krono.act.uji.es/ontologies/module.owl"); - } - - - /** - * Return the OWLOntology correspondent to the module. The module should have been previously extracted. - * @param iri_str - * @return - * @throws OWLOntologyCreationException - */ - public OWLOntology getModuleOntology(String iri_str) throws OWLOntologyCreationException { - return ontologyManager.createOntology(moduleAxioms, IRI.create(iri_str)); - } - - - - /*private void setOntologyAxioms(Set newOntologyAxioms){ - - ontologyAxioms.clear(); - ontologyAxioms.addAll(newOntologyAxioms); - - }*/ - - private Set getOntologyAxioms(){ - return ontologyAxioms; - } - - - /** - * Get axioms from ontology depending on requirements - * @param ontology - * @param considerImportsClosure - * @param considerEntityAnnotations - * @param ignoreAssertions - * @return - */ - private static Set getAxioms( - OWLOntology ontology, - boolean considerImportsClosure, - boolean considerEntityAnnotations, - boolean ignoreAssertions){ - - Set axioms = new HashSet(); - - - //axioms.addAll(ontology.getGeneralClassAxioms()); - axioms.addAll(ontology.getTBoxAxioms(considerImportsClosure)); - axioms.addAll(ontology.getRBoxAxioms(considerImportsClosure)); - if (!ignoreAssertions){ - axioms.addAll(ontology.getABoxAxioms(considerImportsClosure)); - } - - if (considerEntityAnnotations){ - - for (OWLClass cls : ontology.getClassesInSignature(considerImportsClosure)){ - axioms.addAll(cls.getAnnotationAssertionAxioms(ontology)); - //axioms.addAll(ontology.getDeclarationAxioms(cls)); - - } - - for (OWLObjectProperty oprop : ontology.getObjectPropertiesInSignature(considerImportsClosure)){ - axioms.addAll(oprop.getAnnotationAssertionAxioms(ontology)); - //axioms.addAll(ontology.getDeclarationAxioms(oprop)); - } - - for (OWLDataProperty dprop : ontology.getDataPropertiesInSignature(considerImportsClosure)){ - axioms.addAll(dprop.getAnnotationAssertionAxioms(ontology)); - //axioms.addAll(ontology.getDeclarationAxioms(dprop)); - } - - for (OWLAnnotationProperty aprop : ontology.getAnnotationPropertiesInSignature()){ - axioms.addAll(aprop.getAnnotationAssertionAxioms(ontology)); - //axioms.addAll(ontology.getDeclarationAxioms(aprop)); - } - - if (!ignoreAssertions){ - for (OWLNamedIndividual indiv : ontology.getIndividualsInSignature(considerImportsClosure)){ - axioms.addAll(indiv.getAnnotationAssertionAxioms(ontology)); - //axioms.addAll(ontology.getDeclarationAxioms(indiv)); - } - - //TODO In pizza.owl gives an error - //for (OWLAnonymousIndividual aindiv : ontology.getAnonymousIndividuals()){ - // axioms.addAll(ontology.getAnnotationAssertionAxioms(aindiv)); - //} - - - - } - } - - /*for (OWLAxiom ax : ontology.getAxioms()){ - if (!axioms.contains(ax)){ - - System.out.println(ax); - - } - }*/ - - - return axioms; - - } - - - /** - * Interface from OWLAPI OntologySegmenter. We extract by the type of module defined in constructor or Bottom module by default - */ - public Set extract(Set signature) { - - if (ontologyManager!=null) - return extractModule4Entities(signature, typeModule, ontologyManager); - else - return extractModule4Entities(signature, typeModule); - } - - - /** - * Not implemented - */ - public Set extract(Set arg0, int arg1, int arg2, - OWLReasoner arg3) { - // TODO Auto-generated method stub - return null; - } - - - /** - * - */ - public OWLOntology extractAsOntology(OWLOntologyManager manager, Set signature, IRI iri, TYPEMODULE typeModule) - throws OWLOntologyCreationException { - - return manager.createOntology(extractModule4Entities(signature, typeModule, manager), iri); - } - - /** - * - */ - public OWLOntology extractAsOntology(OWLOntologyManager manager, Set signature, IRI iri) - throws OWLOntologyCreationException { - - return manager.createOntology(extractModule4Entities(signature, TYPEMODULE.BOTTOM_LOCALITY, manager), iri); - } - - - - /** - * Interface from OWLAPI OntologySegmenter. - * We extract by the type of module defined in constructor or Bottom module by default - */ - public OWLOntology extractAsOntology(Set signature, IRI iri) - throws OWLOntologyCreationException { - - OWLOntologyManager manager; - if (ontologyManager!=null) - manager=ontologyManager; - else - manager = SynchronizedOWLManager.createOWLOntologyManager(); - - return manager.createOntology(extractModule4Entities(signature, typeModule, manager), iri); - } - - - /** - * Not implemented - */ - public OWLOntology extractAsOntology(Set signature, IRI arg1, - int arg2, int arg3, OWLReasoner arg4) - throws OWLOntologyCreationException { - // TODO Auto-generated method stub - //Not Implemented - return null; - } - - - - - - public Set extractModule4Entity(OWLEntity entity, TYPEMODULE typeModule) { - return extractModule4Entity(entity, typeModule, SynchronizedOWLManager.createOWLOntologyManager()); - } - - public Set extractModule4Entity(OWLEntity entity, TYPEMODULE typeModule, OWLOntologyManager ontologyManager) { - - //init manager - this.ontologyManager = ontologyManager; - dataFactory = this.ontologyManager.getOWLDataFactory(); - - //Input signature - inputSignature.clear(); - inputSignature.add(entity); - - - - extractModule(typeModule); - - - return moduleAxioms; - - } - - - - public Set extractModule4Entities(Set signature, TYPEMODULE typeModule) { - return extractModule4Entities(signature, typeModule, SynchronizedOWLManager.createOWLOntologyManager()); - } - - - public Set extractModule4Entities(Set signature, TYPEMODULE typeModule, OWLOntologyManager ontologyManager) { - - //init manager - this.ontologyManager = ontologyManager; - dataFactory = this.ontologyManager.getOWLDataFactory(); - - //we init input signature - inputSignature.clear(); - inputSignature.addAll(signature); - - - extractModule(typeModule); - - return moduleAxioms; - - - } - - - - private void extractModule(TYPEMODULE typeModule){ - - switch (typeModule) { - case BOTTOM_LOCALITY: - extractModule(false, false); - break; - - case TOP_LOCALITY: - extractModule(true, true); - break; - - case BOTTOM_TOP_LOCALITY: //LUM modules - //Star 2 iterations - extractStarModule(ontologyAxioms, 2); - break; - - case STAR: //STAR modules. Until a fix point is reached - extractStarModule(ontologyAxioms, 1000); //we put in any case a limit to the recursivity (give always a high "even" value) - break; - default: - extractModule(false, false); //bottom module - break; - - } - - - } - - - - public void setIncludeDeclarationAxioms(boolean includeDeclarationAxioms){ - this.includeDeclarationAxioms = includeDeclarationAxioms; - } - - - private void extractModule(boolean dualConcepts, boolean dualRoles){ - extractModule(ontologyAxioms, dualConcepts, dualRoles); //by default we give the original ontology axioms - } - - - /** - * General module extractor (single bottom or top locality module for the input signature (inputSignature) and ontology axioms (ontologyAxioms)) - * @param dualConcepts - * @param dualRoles - */ - private void extractModule(Set axioms, boolean dualConcepts, boolean dualRoles){ - - - - //We initialise extractor - localityChecker = new SyntacticLocalityChecker(dualConcepts, dualRoles, considerAnnotations, ignoreAssertions, dataFactory); - - - //We reinit the moduleaxioms - moduleAxioms.clear(); - - //we init with input signature - moduleSignature.clear(); - moduleSignature.addAll(inputSignature); - - - int previousSize = 0; //ModuleSignature size is 0 we don't extract any element - //(That's correct??) May be yoy can get non-local axiom for the empty signature, but actually - //you are interested in a module related to your signature - - - //To ensure that entities in signature will belong to the module - //Declaration axioms are non local - if (includeDeclarationAxioms){ - for (OWLEntity ent : moduleSignature) { - moduleAxioms.add(dataFactory.getOWLDeclarationAxiom(ent)); - } - } - - - //We have a preliminary step, where we only check axioms involving "current" signature - //This may avoid some iterations - //Optimization from: - //Dmitry Tsarkov. Improved Algorithms for Module Extraction and Atomic Decomposition (DL 2012) - if (useOptimization){ - - while(moduleSignature.size() != previousSize) { - - previousSize = moduleSignature.size(); - - //We only check axioms involving the entities - for (OWLEntity ent : moduleSignature){ - - //We cannot assume all entities are indexed. Only those appearing in a axioms (see indexEntities) - //if (!entity2Axioms.containsKey(ent)) - // continue; - try{ - for (OWLAxiom ax : entity2Axioms.get(ent)) { - - //only axioms to be considered - if (axioms.contains(ax) && !moduleAxioms.contains(ax) && !localityChecker.isLocalAxiom(ax, moduleSignature)) { //We don't want to consider it again - moduleAxioms.add(ax); - - for (OWLEntity newEnt : ax.getSignature()) { - if(!moduleSignature.contains(newEnt) && !newEnt.equals(dataFactory.getOWLThing())) //No Thing class within signature - newMembers.add(newEnt); //We don't want to modify module within the iterations - } - } - } - } - catch (Exception e){ //in case entity was not indexed - continue; - } - } - - - - moduleSignature.addAll(newMembers); - newMembers.clear(); - } - - }//end if optimization - - - //Reinit to enter next step! - previousSize = 0; - - while(moduleSignature.size() != previousSize) { - previousSize = moduleSignature.size(); - - for (OWLAxiom ax : axioms) { - - - if (!moduleAxioms.contains(ax) && !localityChecker.isLocalAxiom(ax, moduleSignature)) { //We don't want to consider it again - moduleAxioms.add(ax); - - for (OWLEntity newEnt : ax.getSignature()) { - if(!moduleSignature.contains(newEnt) && !newEnt.equals(dataFactory.getOWLThing())) //No Thing class within signature - newMembers.add(newEnt); //We don't want to modify module within the iterations - } - } - } - - - - moduleSignature.addAll(newMembers); - newMembers.clear(); - } - - - } - - - - - - - - - - private Set axiomsIterations = new HashSet(); - - - /** - * Extracts module alternating top and botton locality extractions. - * 2 iterations: LUM modules or top-bottom modules - * Star: until a fix point is reached - * @param iterations - */ - private void extractStarModule(Set axioms, int iterations){ - - boolean type = (iterations % 2 == 0); //if we start with even -> top locality - - //System.out.println("\tIteration: " + iterations + ", module type: " + type); - - //extracts module entities and axioms - extractModule(axioms, type, type); - - - //If the axioms being modularise == module axioms then we are done - //Only stop when odd -> bottom locality (considering we started with even) - if (!type && (axiomsIterations.size() == getModuleAxioms().size())){ - return; - } - - - iterations--; - //If iterations = 0 we are done! - if (iterations<=0){ - return; - } - - //Set new axioms to modularise - axiomsIterations.clear(); - axiomsIterations.addAll(getModuleAxioms()); //we create new structure since module axioms will be cleared - - - //Recursivity - extractStarModule(axiomsIterations, iterations); - - - } - - - - public void saveExtractedModule(OWLOntologyManager manager, OWLOntology module, String physicalModuleURI) { - //OWLOntologyManager ontologyModuleManager = SynchronizedOWLManager.createOWLOntologyManager(); - - try { - manager.saveOntology(module, new RDFXMLOntologyFormat(), IRI.create(physicalModuleURI)); - } - catch (Exception e) { - System.err.println("Error saving module\n" + e.getLocalizedMessage()); - e.printStackTrace(); - } - } - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/SyntacticLocalityChecker.java b/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/SyntacticLocalityChecker.java deleted file mode 100644 index a9e2e9aafc..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/SyntacticLocalityChecker.java +++ /dev/null @@ -1,1675 +0,0 @@ -package uk.ac.manchester.syntactic_locality; - -import java.util.Set; -import java.util.HashSet; -import java.util.Iterator; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.*; - - -/** - * This class re-implements the syntactic locality checker, based on the codes from Bernardo Cuenca, - * using the OWLAxiomVisitor class and the current version of the OWL API * - * http://web.comlab.ox.ac.uk/oucl/work/bernardo.cuenca.grau/Software.html - * For theoretical basis see "Modular Reuse of Ontologies: Theory and Practice". - * Bernardo Cuenca Grau , Ian Horrocks , Yevgeny Kazakov , and Ulrike Sattler. - * Journal of Artificial Intelligence Research (JAIR), Vol. 31, pp 273-318, 2008. - * @author Ernesto Jimenez - * @author Modified by Ana Armas (2012) - * Temporal Knowledge Bases Group - * Jaume I University of Castellon - * Created: 04/03/2008 - * Modified: - - */ -public class SyntacticLocalityChecker implements OWLAxiomVisitor { - - private boolean local; - - //private OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - private OWLDataFactory dataFactory; - - - private String suggestedInformation; - - //private boolean dualConcepts; - - //private boolean dualRoles; - - //public static final int BOTTOM_LOCALITY = 1; - - //public static final int TOP_LOCALITY = 2; - - - - private PositiveOWLClassExpressionVisitor positiveOWLClassExpressionChecker; - private NegativeOWLClassExpressionVisitor negativeOWLClassExpressionChecker; - - private Set foreignSignature;// = new HashSet(); - - private boolean dualRoles; - private boolean dualConcepts; - - private boolean considerEntityAnnotations; - - //It may be interesting when assertions are used as annotations - private boolean ignoreAssertions; - - - - /** - * Currently only supported bottom or dual interpretations, no support for 'id' interpretation - * @param dualClasses - * @param dualProperties - * @param considerAnnotations Used for module extraction. Perhaps the user is interested in the annotations - */ - //public SyntacticLocalityChecker(int localityInterpretation){ - public SyntacticLocalityChecker(boolean dualClasses, boolean dualProperties, boolean considerAnnotations, boolean ignoreAssertions, OWLDataFactory dataFactory){ - - /*boolean dual = (localityInterpretation == TOP_LOCALITY); - dualConcepts = dual; - dualRoles = dual;*/ - dualConcepts = dualClasses; - dualRoles = dualProperties; - - considerEntityAnnotations=considerAnnotations; - this.ignoreAssertions=ignoreAssertions; - - positiveOWLClassExpressionChecker = new PositiveOWLClassExpressionVisitor(); - negativeOWLClassExpressionChecker = new NegativeOWLClassExpressionVisitor(); - - this.dataFactory = dataFactory; - - } - - public SyntacticLocalityChecker(boolean dualClasses, boolean dualProperties, boolean considerAnnotations, boolean ignoreAssertions){ - this(dualClasses, dualProperties, considerAnnotations, ignoreAssertions, OWLManager.getOWLDataFactory()); - } - - /** - * Method used for locality chcking where annotations are always local - * @param dualClasses - * @param dualProperties - */ - public SyntacticLocalityChecker(boolean dualClasses, boolean dualProperties){ - this(dualClasses, dualProperties, false, false); - } - - - - - - /** - * Information about why the axiom is non-local - * @return - */ - public String suggestions() { - return suggestedInformation; - } - - /** - * To put outside? In a Locality Utils, where checkers are defined?? - * @param axiom - * @param signature - * @return - */ - public boolean isLocalAxiom(OWLAxiom axiom, Set signature) { - - //Filter axioms??--> They are filtered within the segmenter - //Review!!! - //foreignSignature.clear(); - //foreignSignature=new HashSet(signature); - //foreignSignature.addAll(signature); - foreignSignature=signature; - //positiveOWLClassExpressionChecker.setSignature(foreignSignature); - //negativeOWLClassExpressionChecker.setSignature(foreignSignature); - axiom.accept( this ); - return local; - } - - - private OWLClass Nothing() { - //return manager.getOWLDataFactory().getOWLNothing(); - return dataFactory.getOWLNothing(); - } - - private OWLClass Thing() { - //return manager.getOWLDataFactory().getOWLThing(); - return dataFactory.getOWLThing(); - } - - - /** - * Method to be called inside visitors - * @param classDescription - * @return - */ - private boolean isNegativeOWLClassExpression(OWLClassExpression classDescription) { - classDescription.accept(negativeOWLClassExpressionChecker); - return negativeOWLClassExpressionChecker.isNegativeDescription(); - } - - /** - * Method to be called inside visitors - * @param classDescription - * @return - */ - private boolean isPositiveOWLClassExpression(OWLClassExpression classDescription) { - classDescription.accept(positiveOWLClassExpressionChecker); - return positiveOWLClassExpressionChecker.isPositiveDescription(); - - } - - - /*public boolean dualRoles(){ - return dualRoles; - }*/ - - - - - /* - * ------------------------------------------------ - * ASSERTION AXIOMS - * ------------------------------------------------- - * - */ - /** - * Axioms of type a:C - */ - public void visit(OWLClassAssertionAxiom axiom) { - - //if ignoreAssertions the is always local - local = ignoreAssertions || isPositiveOWLClassExpression(axiom.getClassExpression()); - - suggestedInformation= "An OWLClassAssertionAxiom is local (bottom or dual) if the class description is 'Positive', " + - "considering foreign entities both top and bottom."; - - } - - - /** - * Opposite case to OWLObjectPropertyAssertionAxiom for Top Locality - * (no R )(a, b)) --> ?? - */ - public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) { - //local = false; - local = ignoreAssertions; - suggestedInformation="An OWLNegativeDataPropertyAssertionAxiom is always non-local."; - } - - - - /** - * Opposite case to OWLObjectPropertyAssertionAxiom for Top Locality - * (no R )(a, b)) --> ?? - */ - public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom) { - //local = false; - local = ignoreAssertions; - suggestedInformation="An OWLNegativeObjectPropertyAssertionAxiom is always non-local."; - } - - /** - * OWLObjectPropertyAssertionAxiom is dual-local iff the property doesn't belong to the signature. - * Notice that this axiom is always non bottom local - */ - public void visit(OWLObjectPropertyAssertionAxiom axiom) { - - local = ignoreAssertions || (dualRoles && !foreignSignature.contains(axiom.getProperty().asOWLObjectProperty())); - suggestedInformation="An OWLObjectPropertyAssertionAxiom could be dual-local if the property doesn't belong to the external signature"; - - } - - /** - * OWLObjectPropertyAssertionAxiom is dual-local iff the property doesn't belong to the signature. - * Notice that this axiom are always non bottom local - */ - public void visit(OWLDataPropertyAssertionAxiom axiom) { - - local = ignoreAssertions || (dualRoles && !foreignSignature.contains(axiom.getProperty().asOWLDataProperty())); - suggestedInformation="An OWLDataPropertyAssertionAxiom could be dual-local if the property doesn't belong to the external signature"; - - } - - /** - * - */ - public void visit(OWLSameIndividualAxiom axiom) { - //local = false; - local = ignoreAssertions; - suggestedInformation="An OWLSameIndividualsAxiom is always non-local."; - } - - /** - * - */ - public void visit(OWLDifferentIndividualsAxiom axiom) { - //local = false; - local = ignoreAssertions; - suggestedInformation="An OWLDifferentIndividualsAxiom is always non-local."; - } - - /*End Assertion Axioms*/ - //------------------------------------------------------------------------ - - - - - - - - - /* - * ------------------------------------------------ - * CLASS AXIOMS - * ------------------------------------------------- - * - */ - - /** - * Both dual and bottom has the same behaviour - */ - public void visit(OWLSubClassOfAxiom axiom) { - - local = isNegativeOWLClassExpression( axiom.getSubClass()) - || isPositiveOWLClassExpression( axiom.getSuperClass()); - - suggestedInformation="An OWLSubClassAxiom is local if 'the subclass description is Negative' or " + - "'the superclass description is Positive'."; - } - - - - /* - Incorrect method. We should guarantee pairwise disjointness - public void visit(OWLDisjointClassesAxiom axiom) { - - suggestedInformation="An OWLDisjointClassesAxiom is local if at least one of the involved descriptions is" + - "Negative."; - - //At least one description is bottom - //A dij B --> (A intersection B) subClassOf bottom - Set disjclasses = axiom.getClassExpressions(); - if (disjclasses.size()<=1) { //We could consider the intersection with the empty set - local=true; - return; - } - else { - for(OWLClassExpression clsDesc : disjclasses) { - if(isNegativeOWLClassExpression(clsDesc)){ - local = true; - return; - } - } - } - - local=false; - }*/ - - - /** - * Both dual and bottom has the same behaviour - * @author Modified by Ana - */ - public void visit(OWLDisjointClassesAxiom axiom) { - - suggestedInformation="An OWLDisjointClassesAxiom is local if at most one of the involved descriptions is" + - " not Negative."; - - - //Because this axiom can be expressing disjointness of an arbitrary number of classes - //and they all need to be pairwise disjoint, at most one description is not bottom - //A disj B --> (A intersection B) subClassOf bottom - Set disjclasses = axiom.getClassExpressions(); - if (disjclasses.size()<=1) { //We could consider the intersection with the empty set - local=true; - return; - } - else { - int nNonNegative = 0; - for(OWLClassExpression clsDesc : disjclasses) { - if(!isNegativeOWLClassExpression(clsDesc)){ - nNonNegative++; - if (nNonNegative>1){ - local = false; - return; - } - } - } - } - - local=true; - } - - - /** - * Both dual and bottom has the same behaviour - */ - public void visit(OWLEquivalentClassesAxiom axiom) { - - Set eqclasses = axiom.getClassExpressions(); - - if(eqclasses.size() == 1){ - local=true; - } - else if(eqclasses.size() == 2){ - Iterator iter = eqclasses.iterator(); - OWLClassExpression first = (OWLClassExpression)iter.next(); - OWLClassExpression second = (OWLClassExpression)iter.next(); - if ((isNegativeOWLClassExpression(first) - || isPositiveOWLClassExpression(second)) && - (isNegativeOWLClassExpression(second) - || isPositiveOWLClassExpression(first))) - local = true; - else - local = false; - - } - else { - - Object[] classDescriptions = eqclasses.toArray(); - - - for (int i=0; i1){ - local = false; - return; - } - } - } - - local=true; - - } - - - ///END CLASS AXIOMS - - - - - - - - /* - * ----------------------------------------- - * PROPERTY AXIOMS - * ----------------------------------------- - * - */ - /** - * OWLObjectSubPropertyAxiom - */ - public void visit(OWLSubObjectPropertyOfAxiom axiom) { - - //Bottom locality R^(bottom) subOf R - if(!dualRoles && !foreignSignature.contains(axiom.getSubProperty().asOWLObjectProperty())) - local = true; - - //Top Locality: R subOf R^(top x top) - else if(dualRoles && !foreignSignature.contains(axiom.getSuperProperty().asOWLObjectProperty())) - local = true; - - else - local = false; - } - - - /** - * OWLDataSubPropertyAxiom - */ - public void visit(OWLSubDataPropertyOfAxiom axiom) { - - //Bottom locality R^(bottom) subOf R - if(!dualRoles && !foreignSignature.contains(axiom.getSubProperty().asOWLDataProperty())) - local = true; - - //Top Locality: R subOf R^(top x top) - else if(dualRoles && !foreignSignature.contains(axiom.getSuperProperty().asOWLDataProperty())) - local = true; - - else - local = false; - - } - - - public void visit(OWLEquivalentDataPropertiesAxiom axiom) { - - //For both cases: dual and bottom - suggestedInformation="An OWLEquivalentDataPropertiesAxiom is local if non external properties are involved."; - - for(OWLDataPropertyExpression dataPropExp : axiom.getProperties()) { - if(foreignSignature.contains(dataPropExp.asOWLDataProperty())){ - local=false; - return; - } - } - local=true; - - } - - - public void visit(OWLEquivalentObjectPropertiesAxiom axiom) { - //For both cases: dual and bottom - suggestedInformation="An OWLEquivalentObjectPropertiesAxiom is local if non external properties are involved."; - - for(OWLObjectPropertyExpression objPropExp : axiom.getProperties()) { - if (objPropExp.isAnonymous()){ - local=false; - return; - } - else if(foreignSignature.contains(objPropExp.asOWLObjectProperty())){ - local=false; - return; - } - } - local=true; - - } - - - /* - Wrong methods - public void visit(OWLDisjointDataPropertiesAxiom axiom) { - local = false; - suggestedInformation="An OWLDisjointDataPropertiesAxiom is always non local."; - } - public void visit(OWLDisjointObjectPropertiesAxiom axiom) { - local = false; - suggestedInformation="An OWLDisjointObjectPropertiesAxiom is always non local."; - } - */ - - - /** - * OWLDisjointDataPropertiesAxiom - * @author Ana - */ - public void visit(OWLDisjointDataPropertiesAxiom axiom) { - local = true; - suggestedInformation="An OWLDisjointDataPropertiesAxiom is local if at most one of the properties is in the external signature."; - - int nPropertiesInForeignSignature = 0; - for (OWLDataPropertyExpression prop : axiom.getProperties()){ - if (foreignSignature.contains(prop.asOWLDataProperty())){ - nPropertiesInForeignSignature++; - if (nPropertiesInForeignSignature>1){ - local=false; - return; - } - } - } - } - - - /** - * OWLDisjointObjectPropertiesAxiom - * @author Ana - */ - public void visit(OWLDisjointObjectPropertiesAxiom axiom) { - local = true; - suggestedInformation="An OWLDisjointObjectPropertiesAxiom is local if at most one of the properties is in the external signature."; - - int nPropertiesInForeignSignature = 0; - for (OWLObjectPropertyExpression prop : axiom.getProperties()){ - if (foreignSignature.contains(prop.asOWLObjectProperty())){ - nPropertiesInForeignSignature++; - if (nPropertiesInForeignSignature>1){ - local=false; - return; - } - } - } - } - - - - /** - * Non local for dual locality. - * For bottom locality is local iff property does not belong to the external signature - */ - public void visit(OWLFunctionalDataPropertyAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLDataProperty()) && !dualRoles) - local = true; - else - local = false; //Non Local for dual locality - - suggestedInformation="A OWLFunctionalDataPropertyAxiom axiom can only be bottom local iff property does not belong to the external signature."; - - } - - /** - * Non local for dual locality. - * For bottom locality is local iff proerty does not belong to the external signature - */ - public void visit(OWLFunctionalObjectPropertyAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty()) && !dualRoles) - local = true; - else - local = false; //Non Local for dual locality - - suggestedInformation="A OWLFunctionalObjectPropertyAxiom axiom can only be bottom local iff property does not belong to the external signature."; - } - - - public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty()) && !dualRoles) - local = true; - else - local = false; //Non Local for dual locality - - suggestedInformation="A OWLInverseFunctionalObjectPropertyAxiom axiom can only be bottom local iff property does not belong to the external signature."; - } - - - /** - * Both properties involved in the inverse axiom shouldn't belong to the external signature - */ - public void visit(OWLInverseObjectPropertiesAxiom axiom) { - - if (axiom.getFirstProperty().isAnonymous() || axiom.getSecondProperty().isAnonymous()) - local = false; - else if(!foreignSignature.contains(axiom.getFirstProperty().asOWLObjectProperty()) && - !foreignSignature.contains(axiom.getSecondProperty().asOWLObjectProperty())) - local = true; - else - local = false; - - suggestedInformation="A OWLInverseObjectPropertiesAxiom axiom is local iff the involved property do not belong to the external signature."; - - } - - /** - * An irreflexive (or aliorelative) relation R is one where for all a in X, a is never R-related to itself - */ - public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty())) - local = true; - else - local = false; - - suggestedInformation="A OWLIrreflexiveObjectPropertyAxiom axiom is local iff property does not belong to the external signature."; - - } - - /** - * - */ - public void visit(OWLAsymmetricObjectPropertyAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty())) - local = true; - else - local = false; - - suggestedInformation="A OWLAntiSymmetricObjectPropertyAxiom axiom is local iff property does not belong to the external signature."; - - } - - /** - * A reflexive relation R on set C is one where for all a in C, a is R-related to itself (R(a,a)). - */ - public void visit(OWLReflexiveObjectPropertyAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty())) - local = true; - else - local = false; - - suggestedInformation="A OWLSymmetricObjectPropertyAxiom axiom is local iff property does not belong to the external signature."; - - } - - /** - * Similar to inverse... - */ - public void visit(OWLSymmetricObjectPropertyAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty())) - local = true; - else - local = false; - - suggestedInformation="A OWLSymmetricObjectPropertyAxiom axiom is local iff property does not belong to the external signature."; - } - - /** - * - */ - public void visit(OWLTransitiveObjectPropertyAxiom axiom) { - //Bottom and dual - if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty())) - local = true; - else - local = false; - - suggestedInformation="A OWLFunctionalObjectPropertyAxiom axiom is local iff property does not belong to the external signature."; - - } - - - /** - * Different in codes from Clark & Parsia!! - */ - public void visit(OWLDataPropertyDomainAxiom axiom) { - - //Dual && bottom - if(isPositiveOWLClassExpression(axiom.getDomain())) - local=true; - //Bottom - else if(!foreignSignature.contains(axiom.getProperty().asOWLDataProperty()) && !dualRoles) - local=true; - else - local=false; - - suggestedInformation=""; - } - - /** - * Different in codes from Clark & Parsia!! - */ - public void visit(OWLObjectPropertyDomainAxiom axiom) { - - //Dual && bottom - if(isPositiveOWLClassExpression(axiom.getDomain())) - local=true; - //Bottom - else if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty()) && !dualRoles) - local=true; - else - local=false; - - suggestedInformation=""; - } - - - /** - * Different in codes from Clark & Parsia!! - */ - public void visit(OWLObjectPropertyRangeAxiom axiom) { - //Dual && Bottom - if(isPositiveOWLClassExpression(axiom.getRange())) - local=true; - //Bottom - else if(!foreignSignature.contains(axiom.getProperty().asOWLObjectProperty()) && !dualRoles) - local = true; - else - local=false; - - suggestedInformation=""; - } - - - - /** - * Different in codes from Clark & Parsia!! - */ - public void visit(OWLDataPropertyRangeAxiom axiom) { - if(!foreignSignature.contains(axiom.getProperty().asOWLDataProperty()) && !dualRoles) - local=true; - else - local=false; - - suggestedInformation="An OWLDataPropertyRangeAxiom can only be bottom local if the property does not belong to the external signature.";; - } - - - - - /** - * OWLSubPropertyChainOfAxiom - * @author Modified by Ana - */ - public void visit(OWLSubPropertyChainOfAxiom axiom) { - //Encadenamiento de propiedades.... - //Book hasArticles Articles hasAuthors Individuals - // and chain(hasArticles, hasAuthors) subOf hasBookAuthors - //so Book hasBookAuthors Individuals - //local = false; - //suggestedInformation="An OWLObjectPropertyChainSubPropertyAxiom is always non-local."; - - - //Wrong code - /*suggestedInformation="A OWLObjectPropertyChainSubPropertyAxiom axiom is local iff involved properties do not belong to the external signature."; - //Bottom locality R^(bottom) subOf R - if(!dualRoles){ - for (OWLObjectPropertyExpression propExp : axiom.getPropertyChain()){ - if (foreignSignature.contains(propExp.asOWLObjectProperty())){ - local = false; - return; - } - } - local = true; - }*/ - - //Similar to subproperty axiom - suggestedInformation="A OWLObjectPropertyChainSubPropertyAxiom axiom is local iff at least one of the properties in the chain" + - "does not belong to the external signature."; - //Bottom locality R^(bottom) subOf R - if(!dualRoles){ - for (OWLObjectPropertyExpression propExp : axiom.getPropertyChain()){ - if (!foreignSignature.contains(propExp.asOWLObjectProperty())){ - local = true; - return; - } - } - local = false; - } - - - //Top Locality: R subOf R^(top x top) - else if(dualRoles && !foreignSignature.contains(axiom.getSuperProperty().asOWLObjectProperty())) - local = true; - - else - local = false; - - - - - } - - - //End Property Axioms - //--------------------------------------------------------------- - - - - - - /* - * ---------------------- - * ANNOTATION AXIOMS - * Local=true, for locality checking, but for module extraction we could be interested in the extraction - * ---------------------- - */ - - public void visit(OWLAnnotationAssertionAxiom axiom){ - - local = true; - - if (axiom.getSubject() instanceof IRI){ - - if (foreignSignature.contains(dataFactory.getOWLClass((IRI)axiom.getSubject())) - || foreignSignature.contains(dataFactory.getOWLObjectProperty((IRI)axiom.getSubject())) - || foreignSignature.contains(dataFactory.getOWLDataProperty((IRI)axiom.getSubject()))){ - - - - if (axiom.getAnnotation().getValue() instanceof IRI){ //Named individual (used in FMA) - local = ignoreAssertions || !considerEntityAnnotations; - } - else if (axiom.getAnnotation().getValue() instanceof OWLAnonymousIndividual){ //Anonymous individual (used in OBO ontologies) - local = ignoreAssertions || !considerEntityAnnotations; - } - else { - local=!considerEntityAnnotations; - } - } - } - //The other option is to be and anonymous individual (used by FMA, and OBO ontos): they contain annotation for synonyms - else if (axiom.getSubject() instanceof OWLAnonymousIndividual){ - - //check if instance was included - //if (!axiom.getSubject().toString().matches(".+#genid[0-9]+")){ - // System.out.println(axiom.getSubject().toString()); - //} - - local = ignoreAssertions || !considerEntityAnnotations; - - } - - - - } - - - - public void visit(OWLSubAnnotationPropertyOfAxiom axiom){ - //Bottom locality R^(bottom) subOf R - if(!dualRoles && !foreignSignature.contains(axiom.getSubProperty())) - local = true; - - //Top Locality: R subOf R^(top x top) - else if(dualRoles && !foreignSignature.contains(axiom.getSuperProperty())) - local = true; - - else - local = false; - - } - - public void visit(OWLAnnotationPropertyDomainAxiom axiom){ - //Dual && bottom - /*if(isPositiveOWLClassExpression(axiom.get.getDomain().)) - local=true; - //Bottom - else*/ if(!foreignSignature.contains(axiom.getProperty()) && !dualRoles) - local=true; - else - local=false; - - suggestedInformation=""; - } - - public void visit(OWLAnnotationPropertyRangeAxiom axiom){ - if(!foreignSignature.contains(axiom.getProperty()) && !dualRoles) - local=true; - else - local=false; - - suggestedInformation="An OWLAnnotationPropertyRangeAxiom can only be bottom local if the property does not belong to the external signature.";; - } - - - - //OLD ones deprecated in OWL 2.0 - /*public void visit(OWLOntologyAnnotationAxiom axiom) { - //local=!considerEntityAnnotations; - local = true; - } - - public void visit(OWLAxiomAnnotationAxiom axiom) { - //local=!considerEntityAnnotations; - local = true; - } - - - public void visit(OWLEntityAnnotationAxiom axiom) { - local = true; - - //Only if annotation belongs to external sig - if (foreignSignature.contains(axiom.getSubject())) - local=!considerEntityAnnotations; - - }*/ - - - /*END ANNOTATIONS - ------------------------------------*/ - - - /* - * OTHERS - */ - /** - * Why is non local?? - */ - public void visit(OWLImportsDeclaration axiom) { - local = false; //We should not consider this axioms - } - - /** - * A Declaration Axiom only introduces an entity in the ontology it has not logical significance - a:C and R(a,b)?? - */ - public void visit(OWLDeclarationAxiom axiom) { - //local=true; - //isLocal = !(axiom.getEntity() instanceof OWLIndividual); - suggestedInformation="An OWLDeclarationAxiom is local if the declared entity does not belongs to the foreign signature."; - local = !foreignSignature.contains(axiom.getEntity()); - } - - public void visit(SWRLRule axiom) { - local = false; - suggestedInformation="Currently, a SWRLRule axiom is always considered non-local."; - } - - - public void visit(OWLHasKeyAxiom axiom){ - local = false; - suggestedInformation="Currently, a HasKey axiom is always considered non-local."; - - } - - public void visit(OWLDatatypeDefinitionAxiom axiom){ - local = false; - suggestedInformation="Currently, a OWLDatatypeDefinition axiom is always considered non-local."; - - } - - - - - - - /** - * A re-implementation of the method "isPositivelyLocal" from Bernardo's code using the OWLClassExpressionVisitor - * Cons(BOTTOM) - * @author Ernesto - * Temporal Knowledge Bases Group - * Jaume I University of Castellon - * Created: 04/03/2008 - * Modified: - - */ - private class NegativeOWLClassExpressionVisitor implements OWLClassExpressionVisitor { - - //boolean dualConcepts; - //boolean dualRoles; - - boolean isNegativeDescription; - - //Set foreignSignature; - - - public NegativeOWLClassExpressionVisitor(){ - - } - - - //public void setSignature(Set signature){ - // foreignSignature=signature; - //} - - - - public boolean isNegativeDescription(){ - return isNegativeDescription; - } - - - - public void visit(OWLClass desc) { - - //Bottom and dual - if (desc.equals(Nothing())) - isNegativeDescription = true; - else if (!foreignSignature.contains(desc) && !dualConcepts) //Only for bottom - isNegativeDescription = true; - else - isNegativeDescription = false; - - } - - /** - * INTERSECTIONOF: At least one conjunct must be negative to make the intersection bottom - */ - public void visit(OWLObjectIntersectionOf desc) { - - for (OWLClassExpression clsDesc : desc.getOperands()) { - if (isNegativeOWLClassExpression(clsDesc)){ - isNegativeDescription = true; - return; - } - } - isNegativeDescription=false; - - } - - - /** - * UNIONOF: All disjuncts must be negative - */ - public void visit(OWLObjectUnionOf desc) { - - for (OWLClassExpression clsDesc : desc.getOperands()){ - if (!isNegativeOWLClassExpression(clsDesc)){ - isNegativeDescription = false; - return; - } - } - isNegativeDescription = true; - } - - - /** - * COMPLEMENTOF: not C^Top - */ - public void visit(OWLObjectComplementOf desc) { - isNegativeDescription = isPositiveOWLClassExpression(desc.getOperand()); - } - - - /** - * ONEOF: Always non local? - */ - public void visit(OWLObjectOneOf desc) { - isNegativeDescription = false; - } - - - /** - * ONEOF: Always non local? - */ - public void visit(OWLDataOneOf desc) { - isNegativeDescription = false; - } - - - - - - - - /** - * OBJECT ALL RESTRICTIONS - */ - public void visit(OWLObjectAllValuesFrom desc) { - - //Only for dual - if (dualRoles && isNegativeOWLClassExpression(desc.getFiller()) - && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - - //Bottom is always false - //"All Restrictions" are always non Negative (non empty), since any class that does not uses the - //property is going to belong to this set - else - isNegativeDescription=false; - - } - - - /** - * DATA ALL RESTRICTIONS - */ - public void visit(OWLDataAllValuesFrom desc) { - //DataRanges (desc.getFiller()) are evaluated as Negative or Positive --> ?? - //In Clark&parsia codes is considered false --> Range class is literal (outside signature) then --> Top - //isNegativeDescription=false; - - - //Only mixed - if (dualRoles && !dualConcepts && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isNegativeDescription=true; - - //Bottom is always false - //"All Restrictions" are always non Negative (non empty), since any class that does not uses the - //property is going to belong to this set - else - isNegativeDescription=false; - - } - - - /** - * OBJECT SOME RESTRICTION - */ - public void visit(OWLObjectSomeValuesFrom desc) { - - //Bottom and Dual - if (isNegativeOWLClassExpression(desc.getFiller())) - isNegativeDescription=true; - //Only bottom - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - else - isNegativeDescription=false; - - } - - - /** - * DATA SOME RESTRICTION - */ - public void visit(OWLDataSomeValuesFrom desc) { - - //Only bottom concepts - if (!dualConcepts) - isNegativeDescription=true; //If Literals are considered as bottom - //Only bottom roles - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isNegativeDescription=true; - else - isNegativeDescription=false; - } - - - /** - * SELF RESTRICTION: C belongs (some??)R.C - */ - public void visit(OWLObjectHasSelf desc) { - //Only bottom - //For dual: if prop are not in signature --> Top - if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription = true; - else - isNegativeDescription = false; - } - - - - /** - * OBJECT VALUE RESTRICTION - */ - public void visit(OWLObjectHasValue desc) { - //Only bottom - //For dual: if prop are not in signature --> Top - - //Changed by Ana - //if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty()) && - // !foreignSignature.contains(desc.getValue())) - if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription = true; - else - isNegativeDescription = false; - - } - - - - /** - * DATA VALUE RESTRICTION - */ - public void visit(OWLDataHasValue desc) { - //Only bottom - //For dual: if prop are not in signature --> Top - if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isNegativeDescription = true; - else - isNegativeDescription = false; - } - - - /* - * CARDINALITIES - */ - public void visit(OWLObjectMinCardinality desc) { - - //Adaptation to OWL 1.1 with qualified number restrictions (cardinalities) - if (desc.isQualified()) { - //Bottom and Dual - if (isNegativeOWLClassExpression(desc.getFiller())) - isNegativeDescription=true; - //Only bottom - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - else - isNegativeDescription=false; - } - - //Non qualified cardinalities - else { - if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - else - isNegativeDescription=false; - } - - } - - - public void visit(OWLDataMinCardinality desc) { - - //Only bottom concepts - if (!dualConcepts) - isNegativeDescription=true; //If Literals are considered as bottom - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isNegativeDescription=true; - else - //For Dual always is false - ////Range class is literal (outside signature) then --> Top - isNegativeDescription=false; - } - - - - /* NOTE: - * Max card Restrictions are always non Negative (considering external entities as bottom), since any class that does not uses the property - * is going to belong to this set. Similar to all restrictions, we present a maximum or a rule that we mustn't violate. - * "Some restrictions" and "Min cardinality" presents necessary restrictions to be preserved that we must keep or fulfil - */ - public void visit(OWLObjectMaxCardinality desc) { - - //Adaptation to OWL 1.1 with qualified number restrictions (cardinalities) - if (desc.isQualified()) { - //Only for dual - if (dualRoles && isNegativeOWLClassExpression(desc.getFiller()) - && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - - //Bottom is always false - //"Max Restrictions" are always non Negative (non empty), since any class that does not uses the - //property is going to belong to this set - else - isNegativeDescription=false; - } - else { - - if (dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - - //Bottom is always false - //"Max Restrictions" are always non Negative (non empty), since any class that does not uses the - //property is going to belong to this set - else - isNegativeDescription=false; - } - - - } - - public void visit(OWLDataMaxCardinality desc) { - - //DataRanges (desc.getFiller()) are evaluated as Negative or Positive --> ?? - //In Clark&parsia codes is considered false --> Range class is literal (outside signature) then --> Top - - - //Only mixed - if (dualRoles && !dualConcepts && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isNegativeDescription=true; - - //Bottom is always false - //"All Restrictions" are always non Negative (non empty), since any class that does not uses the - //property is going to belong to this set - else - isNegativeDescription=false; - - } - - public void visit(OWLObjectExactCardinality desc) { - - //Adaptation to OWL 1.1 with qualified number restrictions (cardinalities) - if (desc.isQualified()) { - - //Both duaRoles and nonDual - if (isNegativeOWLClassExpression(desc.getFiller()) && - !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - - else - isNegativeDescription=false; - } - else { - if (!foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isNegativeDescription=true; - - else - isNegativeDescription=false; - } - - } - - - public void visit(OWLDataExactCardinality desc) { - //If Literals are considered as bottom - //Review!! - if (!dualConcepts && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isNegativeDescription=true; - - else - isNegativeDescription=false; - - } - - } - - - - - - - - - - - - - /** - * A re-implementation of the method "isNegativelyyLocal" from Bernardo's code using the OWLClassExpressionVisitor - * Cons(TOP) - * @author Ernesto - * Temporal Knowledge Bases Group - * Jaume I University of Castellon - * Created: 04/03/2008 - * Modified: - - */ - private class PositiveOWLClassExpressionVisitor implements OWLClassExpressionVisitor { - - //boolean dualConcepts; - //boolean dualRoles; - - boolean isPositiveDescription; - - //Set foreignSignature; - - - public PositiveOWLClassExpressionVisitor(){ - - } - - - public boolean isPositiveDescription(){ - return isPositiveDescription; - } - - - //public void setSignature(Set signature){ - // foreignSignature=signature; - //} - - - /** - * OWLCLASS: - */ - public void visit(OWLClass desc) { - - //Bottom and Dual - if (desc.equals(Thing())) - isPositiveDescription = true; - //Only Top: A^Top - else if (dualConcepts && !foreignSignature.contains(desc)) - isPositiveDescription=true; - else - isPositiveDescription=false; - } - - - - - /** - * INTERSECTION: All conjuncts must be positive - */ - public void visit(OWLObjectIntersectionOf desc) { - - //All conjuncts must be positive - for (OWLClassExpression clsDesc : desc.getOperands()){ - if (!isPositiveOWLClassExpression(clsDesc)){ - isPositiveDescription = false; - return; - } - } - isPositiveDescription = true; - } - - - - /** - * UNION: At least one of the disjuncts must be positive - */ - public void visit(OWLObjectUnionOf desc) { - - //At least one of the disjuncts must be positive - for (OWLClassExpression clsDesc : desc.getOperands()){ - if (isPositiveOWLClassExpression(clsDesc)) { - isPositiveDescription = true; - return; - } - - } - isPositiveDescription = false; - } - - - - /** - * COMPLEMENT: not C^bottom - */ - public void visit(OWLObjectComplementOf desc) { - - isPositiveDescription = isNegativeOWLClassExpression(desc.getOperand()); - - } - - - /** - * ONEOF: alway false?? - */ - public void visit(OWLObjectOneOf desc) { - isPositiveDescription = false; - } - - /** - * ONEOF: Always non local? - */ - public void visit(OWLDataOneOf desc) { - isPositiveDescription = false; - } - - - - - - - - public void visit(OWLObjectAllValuesFrom desc) { - - //All - if (isPositiveOWLClassExpression(desc.getFiller())) - isPositiveDescription = true; - //Only for bottom roles - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - } - - - public void visit(OWLDataAllValuesFrom desc) { - - //Only dual concepts since literal values are interpreted as Top - if (dualConcepts) - isPositiveDescription = true; - //Only for bottom roles - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - } - - - - public void visit(OWLObjectSomeValuesFrom desc) { - - if (dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty()) - && isPositiveOWLClassExpression(desc.getFiller())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - } - - public void visit(OWLDataSomeValuesFrom desc) { - //Both duals, since literal range should be considered as Top - if (dualRoles && dualConcepts && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - } - - /** - * SELF RESTRICTION: C belongs (some??)R.C - */ - public void visit(OWLObjectHasSelf desc) { - isPositiveDescription = false; //We don't know about the class - } - - - - /** - * OBJECT VALUE RESTRICTION - */ - public void visit(OWLObjectHasValue desc) { - //Only dual - //For dual: if prop are not in signature --> Top - if (dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty()) && - !foreignSignature.contains(desc.getValue())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - } - - - - /** - * DATA VALUE RESTRICTION - */ - public void visit(OWLDataHasValue desc) { - //Only dual - //For dual: if prop are not in signature --> Top - if (dualRoles && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - } - - - - - - public void visit(OWLObjectMinCardinality desc) { - - if (desc.isQualified()){ - if (dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty()) - && isPositiveOWLClassExpression(desc.getFiller())) - isPositiveDescription = true; - else - isPositiveDescription = false; - } - else { - if (dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - } - - } - - public void visit(OWLDataMinCardinality desc) { - - //Both duals, since literal range should be considered as Top - if (dualRoles && dualConcepts && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - - } - - - public void visit(OWLObjectMaxCardinality desc) { - //All - if (isPositiveOWLClassExpression(desc.getFiller())) - isPositiveDescription = true; - //Only for bottom roles - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - } - - - public void visit(OWLDataMaxCardinality desc) { - - if (desc.isQualified()) { - //Only dual concepts since literal values are interpreted as Top - if (dualConcepts) - isPositiveDescription = true; - //Only for bottom roles - else if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - } - else { - if (!dualRoles && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - } - } - - - - public void visit(OWLObjectExactCardinality desc) { - - //Idem than MInCardinality - if (desc.isQualified()) { - if (dualRoles && !foreignSignature.contains(desc.getProperty()) && isPositiveOWLClassExpression(desc.getFiller())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - } - else { - if (dualRoles && !foreignSignature.contains(desc.getProperty().asOWLObjectProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - } - } - - public void visit(OWLDataExactCardinality desc) { - - //Both duals, since literal range should be considered as Top - if (dualRoles && dualConcepts && !foreignSignature.contains(desc.getProperty().asOWLDataProperty())) - isPositiveDescription = true; - else - isPositiveDescription = false; - - } - - - - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ExtractorConstants.java b/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ExtractorConstants.java deleted file mode 100644 index 8e15db2155..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ExtractorConstants.java +++ /dev/null @@ -1,24 +0,0 @@ -package uk.ac.manchester.syntactic_locality.utils; - -public class ExtractorConstants { - - //DUAL CONCEPTS AND DUAL ROLES - public static final String LOWER_MODULE="LOWER_MODULE"; - public static final String LM="LM"; - - //NON DUAL CONCEPTS AND NON DUAL ROLES - public static final String UPPER_MODULE="UPPER_MODULE"; - public static final String UM="UM"; - - public static final String LOWER_UPPER_MODULE="LOWER_UPPER_MODULE"; - public static final String LUM="LUM"; - - //ONLY DUAL CONCEPTS - public static final String DUAL_CONCEPTS_MODULE="DUAL_CONCEPTS_MODULE"; - public static final String DCM="DCM"; - - //ONLY DUAL ROLES - public static final String DUAL_ROLES_MODULE="DUAL_ROLES_MODULE"; - public static final String DRM="DRM"; - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ReadFile.java b/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ReadFile.java deleted file mode 100644 index 0543cb1d35..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/manchester/syntactic_locality/utils/ReadFile.java +++ /dev/null @@ -1,67 +0,0 @@ -package uk.ac.manchester.syntactic_locality.utils; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.FileNotFoundException; -import java.io.IOException; - -/** - * This program reads a text file line by line, using a BufferedReader - * - */ -public class ReadFile { - - private BufferedReader rBuffer=null; - - public ReadFile (String fstring) throws FileNotFoundException{ - - //System.err.println(fstring); - - File file = new File(fstring); - //System.out.print("File " + file.exists()); - - if (file.exists()){ - try { - rBuffer = new BufferedReader(new FileReader(fstring)); - - } - catch (IOException e) { - e.printStackTrace(); - } - } - else { - throw new FileNotFoundException("The file '"+ fstring + "' doesn't exist."); - //new Exception("The file '"+ fstring + "' doesn't exist."); - - } - } - - public String readLine(){ - try { - return rBuffer.readLine(); - - } - catch (Exception e) { - System.err.println("An error occurred reading the file: " + e.getMessage()); - //e.printStackTrace(); - } - return ""; - - - - } - - public void closeBuffer(){ - try { - rBuffer.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - } - - - - -} \ No newline at end of file diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/AddConfidence2Mappings.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/AddConfidence2Mappings.java deleted file mode 100644 index 522f2f4e00..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/AddConfidence2Mappings.java +++ /dev/null @@ -1,592 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - -import java.io.File; -import java.util.Calendar; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.TreeSet; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLOntology; - -import uk.ac.ox.krr.logmap2.indexing.JointIndexManager; -import uk.ac.ox.krr.logmap2.indexing.OntologyProcessing; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OutPutFilesManager; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.mappings.CandidateMappingManager; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.oaei.reader.MappingsReaderManager; -import uk.ac.ox.krr.logmap2.overlapping.OverlappingExtractor4Mappings; -import uk.ac.ox.krr.logmap2.repair.AnchorAssessment; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * This class will add confidence based on the scope and the isub similarity - * to those mappings without confidence value (e.g. UMLS mappings) - * @author Ernesto - * - */ -public class AddConfidence2Mappings { - - private long init_global, init, fin; - - - private OntologyProcessing onto_process1; - private OntologyProcessing onto_process2; - - private JointIndexManager index; - - private CandidateMappingManager mapping_manager; - - - private OWLOntology onto1; - private OWLOntology onto2; - private Set input_mappings = new HashSet(); - private String ouput_file; - - - - public AddConfidence2Mappings( - OWLOntology ont1, - OWLOntology ont2, - Set mappings, - String outPutFileName){ - - //init_global = init = Calendar.getInstance().getTimeInMillis(); - - onto1 = ont1; - onto2 = ont2; - input_mappings = mappings; - ouput_file = outPutFileName; - - try { - setUpStructures(); - - //When reading from RDF align there is no type - //Also adds classes to structure/anchors - associateType2Mappings(); - - //We add new confidence to mappings - addConfidenceToMapping(); - - //Ouputmappings - saveMappings(); - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - onto_process1.clearReasoner(); - onto_process1.getClass2Identifier().clear(); - - onto_process2.clearReasoner(); - onto_process2.getClass2Identifier().clear(); - - } - - - private void setUpStructures() throws Exception{ - - - //TODO showOutput!! - LogOutput.showOutpuLog(false); - - - - - //Create Index and new Ontology Index... - index = new JointIndexManager(); - - - onto_process1 = new OntologyProcessing(onto1, index, new LexicalUtilities()); - onto_process2 = new OntologyProcessing(onto2, index, new LexicalUtilities()); - - - - mapping_manager = new CandidateMappingManager(index, onto_process1, onto_process2); - - - - //Extracts lexicon - init = Calendar.getInstance().getTimeInMillis(); - onto_process1.precessLexicon(true); - onto_process2.precessLexicon(true); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time indexing entities (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Extracts Taxonomy - //Also extracts A^B->C - init = Calendar.getInstance().getTimeInMillis(); - onto_process1.setTaxonomicData(); - onto_process2.setTaxonomicData(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time extracting structural information (s): " + (float)((double)fin-(double)init)/1000.0); - - - - - } - - - /** - * We associate type to mappings in case the object does indicate this. - */ - private void associateType2Mappings(){ - - - //TREAT GIVEN MAPPINGS - - int num_original_class_mappings=0; - int num_original_dprop_mappings=0; - int num_original_oprop_mappings=0; - int num_original_instance_mappings=0; - int num_mixed_mappings=0; - - - for (MappingObjectStr map : input_mappings){ - - //Detect the type of mapping: class, property or instance - //In some cases it might be included - if (onto1.containsClassInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsClassInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.CLASSES); - - //We add mapping to anchors. Important to get scope - addClassMapping(map); - - num_original_class_mappings++; - - - } - else if (onto1.containsObjectPropertyInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsObjectPropertyInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.OBJECTPROPERTIES); - - num_original_oprop_mappings++; - - - } - else if (onto1.containsDataPropertyInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsDataPropertyInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.DATAPROPERTIES); - - num_original_dprop_mappings++; - - } - - else if (onto1.containsIndividualInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsIndividualInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.INSTANCES); - - num_original_instance_mappings++; - - } - else { - System.out.println("Mixed Entities or entities not in signature of ontologies: "); - System.out.println("\t" + map.getIRIStrEnt1()); - System.out.println("\t" + map.getIRIStrEnt2()); - - num_mixed_mappings++; - - } - - - } - - - - LogOutput.printAlways("Num original mappings: " + input_mappings.size()); - LogOutput.printAlways("\tNum original class mappings: " + num_original_class_mappings); - LogOutput.printAlways("\tNum original object property mappings: " + num_original_oprop_mappings); - LogOutput.printAlways("\tNum original data property mappings: " + num_original_dprop_mappings); - LogOutput.printAlways("\tNum original instance mappings: " + num_original_instance_mappings); - LogOutput.printAlways("\tNum mixed mappings: " + num_mixed_mappings); - - - - } - - - - - - /** - * Adds mappings to structures - * @param map - */ - private void addClassMapping(MappingObjectStr map){ - - - - int ide1; - int ide2; - - - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Classes not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - - if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - - } - else if (map.getMappingDirection()==Utilities.L2R){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - - } - else{ - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - - } - - - } - - - private void addConfidenceToMapping(){ - - int ide1; - int ide2; - - - for (MappingObjectStr map : input_mappings){ - - if (map.getTypeOfMapping()==Utilities.CLASSES){ - - ide1=onto_process1.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - //Get isub and scope - map.setConfidenceMapping( - 0.5 * mapping_manager.getIsubScore4ConceptsLabels(ide1, ide2) + - 0.5 * mapping_manager.getScopeISUB4Neighbourhood(ide1, ide2)); - - - } - else if (map.getTypeOfMapping()==Utilities.OBJECTPROPERTIES){ - - ide1=onto_process1.getIdentifier4ObjectPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ObjectPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - //Use only isub - map.setConfidenceMapping(mapping_manager.getIsubScore4ObjectPropertyLabels(ide1, ide2)); - - - - } - - else if (map.getTypeOfMapping()==Utilities.DATAPROPERTIES){ - - ide1=onto_process1.getIdentifier4DataPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4DataPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - //Use only isub - //Use only isub - map.setConfidenceMapping(mapping_manager.getIsubScore4DataPropertyLabels(ide1, ide2)); - - } - else if (map.getTypeOfMapping()==Utilities.INSTANCES){ - - ide1=onto_process1.getIdentifier4InstanceName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4InstanceName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - //Use only isub - map.setConfidenceMapping(mapping_manager.getIsubScore4IndividualLabels(ide1, ide2)); - - } - - - } - - - } - - - private void saveMappings(){ - - OutPutFilesManager outPutFilesManager = new OutPutFilesManager(); - - try { - outPutFilesManager.createOutFiles( - //logmap_mappings_path + "Output/mappings", - //path + "/" + file_name, - //outPutFileName + "/" + "repaired_mappings", - ouput_file, - OutPutFilesManager.AllFormats, - onto1.getOntologyID().getOntologyIRI().toString(), - onto2.getOntologyID().getOntologyIRI().toString()); - - - - for (MappingObjectStr map : input_mappings){ - - if (map.getTypeOfMapping()==Utilities.CLASSES){ - - outPutFilesManager.addClassMapping2Files( - map.getIRIStrEnt1(), - map.getIRIStrEnt2(), - map.getMappingDirection(), - map.getConfidence() - ); - } - - else if (map.getTypeOfMapping()==Utilities.OBJECTPROPERTIES){ - - outPutFilesManager.addObjPropMapping2Files( - map.getIRIStrEnt1(), - map.getIRIStrEnt2(), - map.getMappingDirection(), - map.getConfidence() - ); - - } - - else if (map.getTypeOfMapping()==Utilities.DATAPROPERTIES){ - - outPutFilesManager.addDataPropMapping2Files( - map.getIRIStrEnt1(), - map.getIRIStrEnt2(), - map.getMappingDirection(), - map.getConfidence() - ); - } - - else if (map.getTypeOfMapping()==Utilities.INSTANCES){ - outPutFilesManager.addInstanceMapping2Files( - map.getIRIStrEnt1(), - map.getIRIStrEnt2(), - //map.getMappingDirection(), - map.getConfidence() - ); - - } - } - - - outPutFilesManager.closeAndSaveFiles(); - - - } - catch (Exception e){ - System.err.println("Error saving mappings..."); - e.printStackTrace(); - } - - - } - - - - - - /** - * Load Gold Standard Mappings - * @throws Exception - */ - private static Set loadInputMappings(String path) throws Exception{ - - ReadFile reader = new ReadFile(path); - - Set mappings = new HashSet(); - - String line; - String[] elements; - - line=reader.readLine(); - - - while (line!=null) { - - if (line.indexOf("|")<0){ - System.out.println("Wrong line: " + line); - line=reader.readLine(); - continue; - } - - elements=line.split("\\|"); - - MappingObjectStr mapping = new MappingObjectStr(elements[0], elements[1]); - - if (!mappings.contains(mapping)){ - mappings.add(mapping); - } - else{ - System.out.println("Duplicated line: " + line); - } - - line=reader.readLine(); - } - - reader.closeBuffer(); - - return mappings; - - } - - - - private static void StatisticsOAEI2012() throws Exception{ - - int onto_pair; - //onto_pair = Utilities.FMA2NCI; - //onto_pair = Utilities.FMA2SNOMED; - onto_pair = Utilities.SNOMED2NCI; - - StatisticsOAEI2012("/usr/local/data/DataUMLS/UMLS_Onto_Versions/", onto_pair); - - } - - - /** - * Used to extract statistics from OAEI 2012 tool outputs - */ - private static void StatisticsOAEI2012(String path_base, int ontoPair) throws Exception{ - - long init,fin; - - String format_mappings; - - MappingsReaderManager readermanager; - OntologyLoader loader1; - OntologyLoader loader2; - - //String base_path = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/"; - String base_path = path_base; - int onto_pair = ontoPair; - - - String rootpath; - String rootpath_fma2nci = base_path + "OAEI_datasets/oaei_2012/fma2nci/"; - String rootpath_fma2snomed = base_path + "OAEI_datasets/oaei_2012/fma2snmd/"; - String rootpath_snomed2nci = base_path + "OAEI_datasets/oaei_2012/snmd2nci/"; - - String irirootpath; - String irirootpath_fma2nci = "file:" + rootpath_fma2nci; - String irirootpath_fma2snomed = "file:" + rootpath_fma2snomed; - String irirootpath_snomed2nci = "file:" + rootpath_snomed2nci; - - //String irirootpath = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/"; - //String mappings_path = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/OutputAlcomo/"; - - String onto1; - String onto2; - String pattern; - String extension; - - - - format_mappings = MappingsReaderManager.FlatFormat; - - String path_input_mappings; - String output_file = base_path + "OAEI_datasets/oaei_2013/"; - - if (onto_pair==Utilities.FMA2NCI){ - - path_input_mappings = base_path + "OAEI_datasets/UMLS_txt_mappings/onto_mappings_FMA_NCI_dirty.txt"; - - irirootpath = irirootpath_fma2nci; - - onto1 = irirootpath + "oaei2012_FMA_whole_ontology.owl"; - onto2 = irirootpath + "oaei2012_NCI_whole_ontology.owl"; - - output_file+="onto_mappings_FMA_NCI_dirty_confidence"; - - } - else if (onto_pair==Utilities.FMA2SNOMED){ - - path_input_mappings = base_path + "OAEI_datasets/UMLS_txt_mappings/onto_mappings_FMA_SNOMED_dirty.txt"; - - irirootpath = irirootpath_fma2snomed; - - onto1 = irirootpath_fma2nci + "oaei2012_FMA_whole_ontology.owl"; - onto2 = irirootpath + "oaei2012_SNOMED_whole_ontology.owl.zip"; - - output_file+="onto_mappings_FMA_SNOMED_dirty_confidence"; - - } - else { - - path_input_mappings = base_path + "OAEI_datasets/UMLS_txt_mappings/onto_mappings_SNOMED_NCI_dirty.txt"; - - irirootpath = irirootpath_snomed2nci; - onto2 = irirootpath_fma2nci + "oaei2012_NCI_whole_ontology.owl"; - onto1 = irirootpath_fma2snomed + "oaei2012_SNOMED_whole_ontology.owl.zip"; - - output_file+="onto_mappings_SNOMED_NCI_dirty_confidence"; - - } - - - loadInputMappings(path_input_mappings); - if (true) - return; - - LogOutput.printAlways("Loading ontologies..."); - loader1 = new OntologyLoader(onto1); - loader2 = new OntologyLoader(onto2); - LogOutput.printAlways("...Done"); - - - new AddConfidence2Mappings( - loader1.getOWLOntology(), - loader2.getOWLOntology(), - loadInputMappings(path_input_mappings), - output_file); - - - } - - public static void main(String[] args) { - - try { - StatisticsOAEI2012(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2Core.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2Core.java deleted file mode 100644 index f3d3a1890f..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2Core.java +++ /dev/null @@ -1,2560 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - - -import java.io.*; - -import java.util.Calendar; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.Comparator; -import java.util.Iterator; -import java.util.Set; -import java.util.Map; -import java.util.TreeSet; - -import java.util.HashSet; - -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.OWLDataFactory; - - -import uk.ac.manchester.syntactic_locality.ModuleExtractor; -import uk.ac.ox.krr.logmap2.background.CategoryMappingsLoader; -import uk.ac.ox.krr.logmap2.io.*; -import uk.ac.ox.krr.logmap2.reasoning.SatisfiabilityIntegration; -import uk.ac.ox.krr.logmap2.repair.*; -import uk.ac.ox.krr.logmap2.mappings.objects.*; -import uk.ac.ox.krr.logmap2.oaei.oracle.OracleManager; -import uk.ac.ox.krr.logmap2.overlapping.*; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.utilities.Lib; -import uk.ac.ox.krr.logmap2.utilities.PrecomputeIndexCombination; - -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -import uk.ac.ox.krr.logmap2.indexing.*; -import uk.ac.ox.krr.logmap2.indexing.entities.ClassIndex; -import uk.ac.ox.krr.logmap2.interactive.*; - -import uk.ac.ox.krr.logmap2.interactive.objects.MappingObjectInteractivity; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; -import uk.ac.ox.krr.logmap2.mappings.CandidateMappingManager; - -import uk.ac.ox.krr.logmap2.io.LogOutput; - -import uk.ac.ox.krr.logmap2.statistics.*; - - - - -/** - * This class implements LogMap 2 algorithm calling it main functionalities - * - * @author ernesto - * - */ -public class LogMap2Core { - - private OverlappingExtractor overlappingExtractor; - - private IndexManager index; - - private OntologyProcessing onto_process1; - private OntologyProcessing onto_process2; - - //private AnchorExtraction mapping_extractor; - private MappingManager mapping_extractor; - - private AnchorAssessment mappings_assessment; - - private InteractiveProcess interactiveProcessManager; - - //For precission and recall - private Set mappings_gs = new HashSet(); - - private LexicalUtilities lexicalUtilities = new LexicalUtilities(); - - private CategoryMappingsLoader categoryMappingsLoader = new CategoryMappingsLoader(); - - private OWLDataFactory dataFactory; - - private String prefix4IRIs; - private String logmap_mappings_path=""; - private String gs_mappings=""; - - long init; - - - - //boolean cleanD_G=true; - - - boolean useInteractivity=true; - boolean useHeuristics=true; - boolean orderQuestions=true; - int error_user = 0; //%error for user - boolean record_interactivity=false; - - boolean ask_everything=false; - - boolean evaluate_impact=false; - - //boolean overlapping=true; - //String interactivityFile; - - - - - /** - * OAEI constructor - * @param iri1_str - * @param iri2_str - * @throws Exception - */ - public LogMap2Core( - String iri1_str, - String iri2_str) throws Exception{ - - this(iri1_str, iri2_str, "", "", "", "", false, false, false, 0, false, false, false); - - } - - - /** - * Constructor for tests: conference task with gold standard - * @param iri1_str - * @param iri2_str - * @param evaluate_impact - * @param file_gs Gold standard file - * @throws Exception - */ - public LogMap2Core( - String iri1_str, - String iri2_str, - boolean evaluate_impact, - String file_gs) throws Exception{ - - this(iri1_str, iri2_str, "", "", file_gs, "", false, false, false, 0, false, false, evaluate_impact); - - } - - - /** - * Constructor for tests: conference/multifarm task - * @param iri1_str - * @param iri2_str - * @param evaluate_impact - */ - public LogMap2Core( - String iri1_str, - String iri2_str, - boolean evaluate_impact) throws Exception { - - this(iri1_str, iri2_str, "", "", "", "", false, false, false, 0, false, false, evaluate_impact); //eval impact - - } - - - /** - * Constructor for tests: instance matching task - * @param iri1_str - * @param iri2_str - * @param output_path - * @param gs_file - * @param evaluate_impact - * @throws Exception - */ - public LogMap2Core( - String iri1_str, - String iri2_str, - String output_path, - String gs_file, - boolean evaluate_impact) throws Exception { - - this(iri1_str, iri2_str, "", "", gs_file, output_path, false, false, false, 0, false, false, evaluate_impact); //eval impact - - } - - - - - /** - * basic constructor: currently only from LogMap2_launch - * @param iri1_str - * @param iri2_str - * @param output_path - * @param eval_impact - * @throws Exception - */ - public LogMap2Core( - String iri1_str, - String iri2_str, - String output_path, - boolean eval_impact) throws Exception{ - - this(iri1_str, iri2_str, "", "", "", output_path, false, false, false, 0, false, false, eval_impact); - - } - - - - /** - * Constructor from a java application - */ - public LogMap2Core( - OWLOntology onto1, - OWLOntology onto2, - boolean only_achors) throws Exception{ - - this(onto1, onto2, new HashSet(), only_achors); - - } - - - /** - * Constructor from a java application - */ - public LogMap2Core( - OWLOntology onto1, - OWLOntology onto2) throws Exception{ - - this(onto1, onto2, new HashSet(), false); - - } - - /** - * Constructor from a java application with input mapping (e.g. composed mappings) - */ - public LogMap2Core( - OWLOntology onto1, - OWLOntology onto2, - Set input_mappings) throws Exception{ - - this(onto1, onto2, input_mappings, false); - } - - /** - * Constructor from a java application with input mapping (e.g. composed mappings). If validated_input_mappings = true, - * then the input mappings are added to the anchor set as they are - * @param onto1 - * @param onto2 - * @param input_mappings - * @param are_input_mappings_validated - * @throws Exception - */ - public LogMap2Core( - OWLOntology onto1, - OWLOntology onto2, - Set input_mappings, - boolean are_input_mappings_validated) throws Exception{ - - - boolean only_anchors=false; - - //we keep true in order to not to delete modules overlappings - //See IndexLexiconAndStructure - //Furthremore we may want to evaluate impact at some point - //Although in this constructor it does NIT evaluate impact - evaluate_impact=true; - - //dataFactory = OWLManager.getOWLDataFactory(); - dataFactory = SynchronizedOWLManager.createOWLDataFactory(); - - - - StatisticsTimeMappings.setInitGlobalTime(); - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - - - //INIT LOGMAP: lex and precomp integer combinations - InitLogMap(); - - - //Overlapping estimation - OverlappingEstimation(onto1, onto2); - - - //Indexes lexicon (IF creation) and structure - IndexLexiconAndStructure(input_mappings); - - - LogOutput.printAlways("Time Parsing and Index Lexicon (s): " + StatisticsTimeMappings.getRunningTime(init)); - - - //EXTRACT, CLEAN ANCHORS and INDEX INTLABELLING - createAndCleanAnchors(are_input_mappings_validated); - - if (!only_anchors){ - //Extract new candidates (Level 1), clean them and index labelling - createCandidateMappings(); - - - //Extract more candidates Level 2 (If interactivity is active then those are the mappings to ask) - createCandidateMappingsLevel2(); - - //Last Cleaning - //lastLogicalCleaning(); - - - createAndAssessPropertyMappings(); - - - //Optional (see parameters file) - if (Parameters.perform_instance_matching){ - - - createAndAssessInstanceMappings(); - } - - - - //System.out.println("TOTAL MATCHING TIME (s): " + StatisticsTimeMappings.getTotalRunningTime()); - //System.out.println("LogMap 2 Total Matching Time (s): " + StatisticsTimeMappings.getTotalRunningTime()); - - - //Clean index structures and others... - //Not here because OAEI and call fro other application - //index.clearTaxonomicalStructures(); - } - - - } - - - /** - * Constructor for test (implementation process) - * @param iri1_str - * @param iri2_str - * @param iri1_str_out - * @param iri2_str_out - * @param gs_mappings - * @param logmap_mappings_path - * @param useInteractivity - * @param useHeuristics - * @param orderQuestions - * @throws Exception - */ - public LogMap2Core( - String iri1_str, - String iri2_str, - String iri1_str_out, - String iri2_str_out, - String gs_mappings, - String logmap_mappings_path, - boolean useInteractivity, - boolean useHeuristics, //should be an input parameter - boolean orderQuestions, - int error_user, - boolean ask_everything, - boolean record_interactivity, - boolean evaluate_impact) throws Exception{ - - - this.logmap_mappings_path = logmap_mappings_path; - this.gs_mappings = gs_mappings; - //this.interactivityFile=interactivityFile; - - this.useInteractivity=useInteractivity; - this.useHeuristics=useHeuristics; - this.orderQuestions=orderQuestions; - - this.error_user = error_user; - - this.record_interactivity=record_interactivity; - - this.ask_everything=ask_everything; - - - this.evaluate_impact=evaluate_impact; - - - //dataFactory = OWLManager.getOWLDataFactory(); - dataFactory = SynchronizedOWLManager.createOWLDataFactory(); - - if (logmap_mappings_path.startsWith("/")) - prefix4IRIs = "file:"; - else - prefix4IRIs = "file:/"; - - - - StatisticsTimeMappings.setInitGlobalTime(); - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - - - //INIT LOGMAP: lex and precomp integer combinations - InitLogMap(); - - - //Overlapping estimation - OverlappingEstimation(iri1_str, iri2_str); - //OverlappingEstimation(iri1_str, iri2_str, iri1_str_out, iri2_str_out);//test - //if (true) - // return; - - - - //Indexes lexicon (IF creation) and structure - IndexLexiconAndStructure(); - - - LogOutput.printAlways("Time Parsing and Index Lexicon (s): " + StatisticsTimeMappings.getRunningTime(init)); - - - - - //Only for statistical purposes (and interactivity) - if (!gs_mappings.equals("")){ - loadMappingsGS(); - } - //printStatisticsGoldStandard(); - - - //EXTRACT, CLEAN ANCHORS and INDEX INTLABELLING - createAndCleanAnchors(); - - - //Extract new candidates (Level 1), clean them and index labelling - createCandidateMappings(); - //mapping_extractor.printStatisticsMappingEvaluation(); - - - //Anchors should be non ambiguous for interval labelling index - //LogOutput.print("AMBIGUOUS ANCHORS: " + areAnchorsdAmbiguous()); - - - - StatisticsManager.setPrecisionAndRecallAnchors(mapping_extractor.getStringGoldStandardAnchors().size()); - //Statistics before interactivity - StatisticsManager.printStatisticsLogMap_mappings(); - - - - //Extract more candidates Level 2 (If interactivity is active then those are the mappings to ask) - //Also weakened in previous iterations - createCandidateMappingsLevel2(); - - - //mapping_extractor.printAllDicoveredMappingsStatistics(); - //mapping_extractor.printHarDiscardedStatistics(); - //mapping_extractor.printStatisticsMappingEvaluation();//|Everything - - - StatisticsManager.printMappingsAskedHeur(); - - - //mapping_extractor.printStatisticsLogMap_mappings(); - - //Tests - //outputMappings(mapping_extractor.getAnchors(), logmap_mappings_path + "all_extracted.txt"); - //outputMappings(mapping_extractor.getDircardedAnchors(), logmap_mappings_path + "discarded.txt"); - //orderedOutputMappings(true); //For LUCADA - - - - //Last cleaning just in case - //lastLogicalCleaning(); - - - - createAndAssessPropertyMappings(); - - - //Optional (see parameters file) - if (Parameters.perform_instance_matching){ - - - - createAndAssessInstanceMappings(); - - if (Parameters.output_instance_mapping_files && !logmap_mappings_path.equals("")){ - - outputInstaceMappings4Evaluation(); - - } - - } - - - - //TODO Delete OntologyProcessing if possible - - - //OUTPUT - //P&R wrt GS - if (!gs_mappings.equals("")){ - getPrecisionAndRecallMappings(); - } - - - File file_folder = new File(logmap_mappings_path); - - - if (!logmap_mappings_path.equals("") && file_folder.exists() && file_folder.isAbsolute()){ //Some experiments do not provide path... - - //if (!file_folder.isAbsolute()){ - // logmap_mappings_path = file_folder.getAbsolutePath(); - //} - - //FINAL OVERLAPPING - //Extracts new overlapping for anchors and saves overlapping as OWL files - LogOutput.print("Creating overlapping output"); - createOutput4Overlapping(true); //TODO UNCOMMENT (just removed for tests) - - //Mapping OUTPUTFILES - LogOutput.print("Saving output mapping files"); - saveExtractedMappings("logmap2_mappings"); - } - else{ - //System.err.println("The given output path is not absolute or it does not exist. The output mappings cannot be stored."); - LogOutput.print("The given output path is not absolute or it does not exist. The output mappings cannot be stored."); - } - - - - LogOutput.print("Average time taxonomic queries: " + - index.getAvgTime4TaxCalls() + ". Total: " + index.getTime4TaxCalls() + ". Num calls: " + index.getNumberOfTaxCalls()); - - LogOutput.print("Average time disjointness queries: " + - index.getAvgTime4DisjCalls() + ". Total: " + index.getTime4DisjCalls() + ". Num calls: " + index.getNumberOfDisjCalls()); - - - - - //System.out.println("Number of computed mappings: " + getLogMapMappings()); - LogOutput.printAlways("Number of computed mappings: " + getLogMapMappings().size()); - - //System.out.println("TOTAL MATCHING TIME (s): " + StatisticsTimeMappings.getTotalRunningTime()); - LogOutput.printAlways("LogMap 2 Total Matching Time (s): " + StatisticsTimeMappings.getTotalRunningTime()); - - - if (evaluate_impact){ - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - //impactIntegration(); - impactIntegration(iri1_str, iri2_str); - LogOutput.printAlways("Time checking impact integration (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - - - - - //Clean index structures and others... - //Not here because OAEI - //index.clearTaxonomicalStructures(); - //Since we need to return the mappings! We cannot remove the index! - - - } - - SatisfiabilityIntegration sat_checker; - boolean hasUnSat = false; - int numUnsat = 0; - - public boolean hasUnsatClasses(){ - - return hasUnSat; - } - - public int getNumUnsatClasses(){ - - return numUnsat; - } - - - private void impactIntegration() throws Exception { - - OWLOntology mappins_owl_onto = getOWLOntology4Mappings(); - - LogOutput.print(overlappingExtractor.getOverlappingOnto1().getAxiomCount()); - LogOutput.print(overlappingExtractor.getOverlappingOnto2().getAxiomCount()); - LogOutput.print(mappins_owl_onto.getAxiomCount()); - - - - sat_checker = new SatisfiabilityIntegration( - overlappingExtractor.getOverlappingOnto1(), - overlappingExtractor.getOverlappingOnto2(), - mappins_owl_onto, - true,//Time_Out_Class - false); //use factory - - hasUnSat=sat_checker.hasUnsatClasses(); - numUnsat=sat_checker.getNumUnsatClasses(); - - LogOutput.print("Num unsat classes: " + sat_checker.getNumUnsatClasses()); - - - /*ImpactAuditedIntegration impact = new ImpactAuditedIntegration(); - - try{ - impact.reasonWithGivenOntologiesHermit( - overlappingExtractor.getOverlappingOnto1(), - overlappingExtractor.getOverlappingOnto2(), - getOWLOntology4Mappings()); - } - catch (Exception e){ - System.err.println("HermiT could not deal with these ontologies: " + e.getMessage()); - } - - try{ - impact.reasonWithGivenOntologiesPellet( - overlappingExtractor.getOverlappingOnto1(), - overlappingExtractor.getOverlappingOnto2(), - getOWLOntology4Mappings()); - } - catch (Exception e){ - System.err.println("Pellet could not deal with these ontologies: " + e.getMessage()); - } - */ - - - } - - private void impactIntegration(String iri1, String iri2) throws Exception { - - OWLOntology mappings_owl_onto = getOWLOntology4Mappings(); - - OntologyLoader loader1 = new OntologyLoader(iri1); - OntologyLoader loader2 = new OntologyLoader(iri2); - - LogOutput.printAlways("Evaluating impact..."); - - LogOutput.print("Axioms onto1: " + loader1.getOWLOntology().getAxiomCount()); - LogOutput.print("Axioms onto2: " + loader2.getOWLOntology().getAxiomCount()); - LogOutput.print("Mapping Axioms: " + mappings_owl_onto.getAxiomCount()); - - - - sat_checker = new SatisfiabilityIntegration( - loader1.getOWLOntology(), - loader2.getOWLOntology(), - mappings_owl_onto, - true,//Time_Out_Class - false); //use factory - - - hasUnSat=sat_checker.hasUnsatClasses(); - numUnsat=sat_checker.getNumUnsatClasses(); - - //OWLManager.createOWLOntologyManager().saveOntology(mappings_owl_onto, new RDFXMLOntologyFormat(), - //IRI.create("file:/usr/local/data/MappingsConferenceBenchmark/ontologies/mappings-cmt-confof.owl")); - // IRI.create("file:/usr/local/data/MappingsConferenceBenchmark/ontologies/mappings-edas-ekaw.owl")); - LogOutput.printAlways("\nNum unsat classes after integration: " + sat_checker.getNumUnsatClasses()); - } - - - - /** - * This method will be used to build an OWLOntology object to evaluate the logical impact - * The ontology will not be stored (see @saveExtractedMappings()) - * - * @return - * @throws Exception - */ - public OWLOntology getOWLOntology4Mappings() throws Exception{ - - int ident2; - - OWLAlignmentFormat owlformat = new OWLAlignmentFormat(""); - - int dir_mapping; - - for (int ide1 : getClassMappings().keySet()){ - for (int ide2 : getClassMappings().get(ide1)){ - - //LogOutput.print(getIRI4ConceptIdentifier(ide1)); - //LogOutput.print(getIRI4ConceptIdentifier(ide2)); - //LogOutput.print(getConfidence4ConceptMapping(ide1, ide2)); - //LogOutput.print(""); - - dir_mapping = getDirClassMapping(ide1, ide2); - - if (dir_mapping!=Utilities.NoMap){ - - //System.out.println(getIRI4ConceptIdentifier(ide1)); - //System.out.println(getIRI4ConceptIdentifier(ide2)); - //System.out.println(dir_mapping); - - //TODO No need to reverse ids. Done in OWLAlignmentFormat - //if (dir_mapping!=Utilities.R2L){ - owlformat.addClassMapping2Output( - getIRI4ConceptIdentifier(ide1), - getIRI4ConceptIdentifier(ide2), - dir_mapping, - getConfidence4ConceptMapping(ide1, ide2) - ); - /*} - else{ - owlformat.addClassMapping2Output( - getIRI4ConceptIdentifier(ide2), - getIRI4ConceptIdentifier(ide1), - dir_mapping, - getConfidence4ConceptMapping(ide1, ide2) - ); - }*/ - } - } - } - - for (int ide1 : getDataPropMappings().keySet()){ - - - - //System.out.println(getIRI4DataPropIdentifier(ide1)); - //System.out.println(getIRI4DataPropIdentifier(getDataPropMappings().get(ide1))); - //System.out.println(getConfidence4DataPropConceptMapping(ide1, getDataPropMappings().get(ide1))); - - - owlformat.addDataPropMapping2Output( - getIRI4DataPropIdentifier(ide1), - getIRI4DataPropIdentifier(getDataPropMappings().get(ide1)), - Utilities.EQ, - getConfidence4DataPropConceptMapping(ide1, getDataPropMappings().get(ide1))//1.0 - ); - } - - for (int ide1 : getObjectPropMappings().keySet()){ - - //System.out.println(getIRI4ObjectPropIdentifier(ide1)); - //System.out.println(getIRI4ObjectPropIdentifier(getObjectPropMappings().get(ide1))); - //System.out.println(getConfidence4ObjectPropConceptMapping(ide1, getObjectPropMappings().get(ide1))); - //LogOutput.print(""); - - owlformat.addObjPropMapping2Output( - getIRI4ObjectPropIdentifier(ide1), - getIRI4ObjectPropIdentifier(getObjectPropMappings().get(ide1)), - Utilities.EQ, - getConfidence4ObjectPropConceptMapping(ide1, getObjectPropMappings().get(ide1))//1.0 - ); - } - - - if (Parameters.perform_instance_matching){ - - for (int ide1 : getInstanceMappings().keySet()){ - for (int ide2 : getInstanceMappings().get(ide1)){ - - owlformat.addInstanceMapping2Output( - getIRI4InstanceIdentifier(ide1), - getIRI4InstanceIdentifier(ide2), - getConfidence4InstanceMapping(ide1, ide2) - ); - - } - } - } - - return owlformat.getOWLOntology(); - - } - - - - private boolean areAnchorsdAmbiguous(){ - - for (int ide : mapping_extractor.getLogMapMappings().keySet()){ - - if (mapping_extractor.getLogMapMappings().get(ide).size()>1){ - LogOutput.print(ide + " " + mapping_extractor.getLogMapMappings().get(ide)); - return true; - } - - } - - return false; - - - } - - - - - private void InitLogMap() throws Exception{ - - //Show print outs - LogOutput.showOutpuLog(Parameters.print_output); //False for OAEI? - LogOutput.showOutpuLogAlways(Parameters.print_output || Parameters.print_output_always); - - - - //Only from OAEI-LogMap - //Parameters.readParameters(); - - //We load both sets - lexicalUtilities.loadStopWords(); - lexicalUtilities.loadStopWordsExtended(); - - if (Parameters.use_umls_lexicon) - lexicalUtilities.loadUMLSLexiconResources(); - - lexicalUtilities.setStemmer(); //creates stemmer object (Paice by default) - - //Lib.debuginfo(LexicalUtilities.getStemming4Word("Prolactin") + " " + LexicalUtilities.getStemming4Word("brachii") + "\n"); - - - - LogOutput.print("Time initializing lexical utilities (s): " + StatisticsTimeMappings.getRunningTime(init)); - StatisticsTimeMappings.addUpperbound_mappings_time(StatisticsTimeMappings.getRunningTime(init)); - - - //init = StatisticsTimeMappings.getCurrentTimeInMillis(); - //PrecomputeIndexCombination.preComputeIdentifierCombination(); - // - //LogOutput.print("Time precomputing index combinations (s): " + StatisticsTimeMappings.getRunningTime(init)); - - } - - - - private void OverlappingEstimation(String iri1_str, String iri2_str) throws Exception{ - - LogOutput.print("OVERLAPPING"); - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - - //Overlapping to store and compare - //overlappingExtractor = new LexicalOverlappingExtractor(gs_mappings, logmap_mappings, iri1_str_out, iri2_str_out); - - //Overlapping to be used in the normal behaviour - //No overlapping if size onto <10,000 entities (see parameters file) - if (!Parameters.use_overlapping){ - overlappingExtractor = new NoOverlappingExtractor(); - } - else{ - overlappingExtractor = new LexicalOverlappingExtractor(lexicalUtilities, true); - } - - - overlappingExtractor.createOverlapping(iri1_str, iri2_str); - - LogOutput.printAlways("Entities ontology 1: " + overlappingExtractor.getBaseOverlappedEntities1().size()); - LogOutput.printAlways("Entities ontology 2: " + overlappingExtractor.getBaseOverlappedEntities2().size()); - - LogOutput.print("Time extracting overlapping (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - private void OverlappingEstimation(OWLOntology onto1, OWLOntology onto2) throws Exception{ - - LogOutput.print("OVERLAPPING"); - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - - //Overlapping to store and compare - //overlappingExtractor = new LexicalOverlappingExtractor(gs_mappings, logmap_mappings, iri1_str_out, iri2_str_out); - - //Overlapping to be used in the normal behaviour - //No overlapping if size onto <10,000 entities (see parameters file) - if (!Parameters.use_overlapping){ - overlappingExtractor = new NoOverlappingExtractor(); - } - else{ - overlappingExtractor = new LexicalOverlappingExtractor(lexicalUtilities, true); - } - - - overlappingExtractor.createOverlapping(onto1, onto2); - - LogOutput.print("Time extracting overlapping (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - - private void IndexLexiconAndStructure() throws Exception{ - IndexLexiconAndStructure(new HashSet()); - } - - private void IndexLexiconAndStructure(Set input_mappings) throws Exception{ - - //Create Index and new Ontology Index... - index = new JointIndexManager(); - - - //Process ontologies: lexicon and taxonomy (class) and IFs - onto_process1 = new OntologyProcessing(overlappingExtractor.getOverlappingOnto1(), index, lexicalUtilities); - onto_process2 = new OntologyProcessing(overlappingExtractor.getOverlappingOnto2(), index, lexicalUtilities); - - - //Extracts lexicon - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - onto_process1.precessLexicon(); - onto_process2.precessLexicon(); - - LogOutput.print("Time extracting lexicon and IF (s): " + StatisticsTimeMappings.getRunningTime(init)); - - //I guess can be deleted here - lexicalUtilities.clearStructures(); - - - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - //Init Mapping extractor: intersects IF and extract IF weak - //mapping_extractor = new LexicalMappingExtractor(index, onto_process1, onto_process2); - mapping_extractor = new CandidateMappingManager(index, onto_process1, onto_process2); - - //Statistics - StatisticsManager.reInitValues(); - StatisticsManager.setMappingManager(mapping_extractor); - - - //TODO Category mappings - categoryMappingsLoader.loadMappings(Parameters.path_mappings_categories); - mapping_extractor.setCategoryMappings(categoryMappingsLoader.getCategoryMappings()); - - - //Input mappings (e.g. composed mappings using MO given as input) - mapping_extractor.processInputMappings(input_mappings); - - - mapping_extractor.intersectInvertedFiles(); - - LogOutput.print("Time intersecting IF and extracting IF weak (s): " + StatisticsTimeMappings.getRunningTime(init)); - - //Clear ontology stemmed labels - onto_process1.clearStemmedLabels(); - onto_process2.clearStemmedLabels(); - - //Extracts Taxonomy - //Also extracts A^B->C - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - onto_process1.setTaxonomicData(); - onto_process2.setTaxonomicData(); - - LogOutput.print("Time extracting structural information (s): " + StatisticsTimeMappings.getRunningTime(init)); - - - //TODO Remove!! - //if (!gs_mappings.equals("")){ - // loadMappingsGS(); - //} - - - - //Keep only TBOX axioms to extract final module - if (logmap_mappings_path.equals("")){ // no output files for overlappings - if (!evaluate_impact){ - overlappingExtractor.clearModulesOverlapping();//Not necessary if we do no provide output - } - } - else { - overlappingExtractor.keepOnlyTBOXOverlapping(!evaluate_impact); - } - - - - - //We do not need the references to OWLEntities anymore - onto_process1.clearOntologyRelatedInfo(); - onto_process2.clearOntologyRelatedInfo(); - - /* - loadMappingsGS(gs_mappings); - printStatisticsGoldStandard(); - if (true) - { - LogOutput.print("finished!"); - return ; - } - */ - - - //We first create weak anchors to be used for scopes - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - mapping_extractor.extractAllWeakMappings(); - - LogOutput.print("Time creating all weak anchors (s): " + StatisticsTimeMappings.getRunningTime(init)); - - - //Extract subsets from all weak mappings to evaluate later - //---------------------------------------------------------- - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - mapping_extractor.extractCandidatesSubsetFromWeakMappings(); - - LogOutput.print("Time creating candidate subset of weak anchors (s): " + StatisticsTimeMappings.getRunningTime(init)); - - - //Remove structures used for frequency extractor - - //Frequency structures - onto_process1.clearFrequencyRelatedStructures(); - onto_process2.clearFrequencyRelatedStructures(); - index.clearSingleWordInvertedIndex(); - - //Only used by frequency-like weak mappings - index.clearStemmedAlternativeLabels4Classes(); - - - } - - - private void createAndCleanAnchors() throws Exception{ - createAndCleanAnchors(false); - } - - - - private void createAndCleanAnchors(boolean are_input_mapping_validated) throws Exception{ - - LogOutput.printAlways("\nANCHOR DIAGNOSIS "); - - - //TODO test for mouse 2 anatomy - //Background knowledge: mappings composition - //((CandidateMappingManager)mapping_extractor).createCandidatesFromBackgroundKnowledge(); - //getPrecisionAndRecallMappings(); - - - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - mapping_extractor.createAnchors(are_input_mapping_validated); - - //Create different groups: "exact", ambiguity and no_scope (different sets...). We will add them later (almost done) - - - LogOutput.printAlways("Time creating anchors (s): " + StatisticsTimeMappings.getRunningTime(init)); - - - - - //if (true){ - // return ; - //} - - //Tests - //outputMappings(mapping_extractor.getAnchors(), logmap_mappings_path + "good.txt"); - - - - - countAnchors(); - mappings_assessment = new AnchorAssessment(index, mapping_extractor); - - - if (Parameters.cleanD_G){ - - //Only for statistical purposes or to extract global infor - if (Parameters.extractGlobal_D_G_Info){ - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - mappings_assessment.CountSatisfiabilityOfIntegration_DandG(mapping_extractor.getLogMapMappings()); - - LogOutput.printAlways("Time checking satisfiability D&G (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - mappings_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_extractor.getLogMapMappings()); - - LogOutput.printAlways("Time cleaning anchors D&G (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - //After repairing exact - mapping_extractor.setExactAsFixed(true); - mapping_extractor.saveAnchors(); //we save anchors in new structure so that we can retrieve them at the end of the process - - countAnchors(); - - - //TODO extract further disjointness based on weak anchors and mappings - - - - //INTERVAL LABELLING SCHEMA - //-------------------------- - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - - //Index already have the necessary taxonomical information apart from the equiv mappings - - index.setIntervalLabellingIndex(mapping_extractor.getFixedMappings()); - - index.clearAuxStructuresforLabellingSchema(); - - - LogOutput.printAlways("Time indexing hierarchy + anchors (ILS) (s): " + StatisticsTimeMappings.getRunningTime(init)); - - } - - - - - private void countAnchors(){ - - int numMappings = 0; - - for (int ide1: mapping_extractor.getLogMapMappings().keySet()){ - for (int ide2: mapping_extractor.getLogMapMappings().get(ide1)){ - - if (ide1Parameters.bad_score_scope); - - } - - private boolean hasGoodConfidence(MappingObjectInteractivity m){ - - return (mapping_extractor.getConfidence4Mapping(m.getIdentifierOnto1(), m.getIdentifierOnto2())>Parameters.good_confidence); - - } - - /** - * Automatic decisions to mappings to ask if interactivity is not active - */ - private void performAutomaticDecisions(){ - - for (MappingObjectInteractivity mapping : mapping_extractor.getListOfMappingsToAskUser()){ - - - //See createMappings2AskUser in mapping_extractor for more information about the use of this filter - if (!mapping_extractor.isFilterWithHeuristicsSecondLevelMappings() - || hasScopeAll(mapping) && hasGoodConfidence(mapping)){ - - //SOME MAPPINGS MAY REPRESENT ONLY ONE SIDE - //EITHER THE USER DECIDED TO SPLIT IT or IT WAS SPLIT BY D&G - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.L2R) - mapping_extractor.addSubMapping2Mappings2Review(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.R2L) - mapping_extractor.addSubMapping2Mappings2Review(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - - } - } - - //mapping_extractor.setStringAnchors(); ??? - - } - - - - private void createCandidateMappingsLevel2() throws Exception{ - - - LogOutput.printAlways("\nCANDIDATE DIAGNOSIS 2"); - - if (OracleManager.isActive()){ - LogOutput.printAlways("Oracle is active for interactivity."); - createCandidateMappingsInteractiveProcess(); - } - else{ - LogOutput.printAlways("Oracle is not active. Performing automatic decisions."); - performAutomaticDecisions(); - } - - - //Also index interval labelling?? Problem, no mappings 1-1 for index.... - //We keep previous index - - - - - //Add weakened mappings by D and G iff no conflictive or already inferred - //Add no conflictive to anchors and the clean together with interactivity - //We should add a low confidence so that if they are involved in an error then remove - //isMappingWeakenedDandG - //!!!Already Included in assesMappings2AskUser!!! - //mapping_extractor.assesWeakenedMappingsDandG(true, false); //we add them to mappings to review - - - //Retrieve mappings from conflictive mappings if not in conflict - //Then add to mapping to review - if (Parameters.second_chance_conflicts) - secondChanceConflictiveMappingsD_G(); - - - - - - - //Clean interactive-like mappings + weakened with DandG - - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - if (Parameters.cleanD_G){ - - - //Only for statistical purposes or to extract global infor - if (Parameters.extractGlobal_D_G_Info){ - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - mappings_assessment.CountSatisfiabilityOfIntegration_DandG(mapping_extractor.getMappings2Review()); - - LogOutput.printAlways("Time checking satisfiability D&G (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - //Adds clean mappings to anchors. Conflictive and split mappings to respective sets - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - mappings_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_extractor.getMappings2Review()); //With Fixed mappings! - //mappings_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_extractor.getAnchors()); //No fixed mappings - - LogOutput.printAlways("Time cleaning interactive mappings D&G (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - //Merge mappings 2 review and anchors - //Comment if no fixed anchors - mapping_extractor.moveMappingsToReview2AnchorList(); - - - //Add new weakened mappings - //Do not add them? Since they are suspicious>? - //mapping_extractor.assesWeakenedMappingsDandG(false, true); //we add them to anchors - - - //Remove mappings to review - mapping_extractor.getMappings2Review().clear(); - - - - } - - /** - * This method aims at giving a second chance to those mappings involved in a conflict - * and removed using the D&G method. Some of them may be good and not cause an error - */ - private void secondChanceConflictiveMappingsD_G(){ - - LogOutput.print("Second chance to mappings discarded by Dowling and Gallier."); - - int second_chance = 0; - int good_second_chance = 0; - - Map> toDelete = new HashMap>(); - - - //Check conflicts with fixed mappings - //-------------------------------------- - for (int ide1 : mapping_extractor.getConflictiveMappings_D_G().keySet()){ - - for (int ide2 : mapping_extractor.getConflictiveMappings_D_G().get(ide1)){ - - if (mapping_extractor.isMappingInConflictWithFixedMappings(ide1, ide2)){ - - if (!toDelete.containsKey(ide1)){ - toDelete.put(ide1, new HashSet()); - } - toDelete.get(ide1).add(ide2); - - - } - - } - } - - - for (int ide1 : toDelete.keySet()){ - for (int ide2 : toDelete.get(ide1)){ - - mapping_extractor.addSubMapping2ConflictiveAnchors(ide1, ide2); - - mapping_extractor.removeSubMappingFromConflictive_D_G(ide1, ide2); - } - } - - toDelete.clear(); - - - - //Check if they are in conflict between them - //If in conflict then check confidences and remove the one with less value - //----------------------------------------------------------------------------- - for (int ide1 : mapping_extractor.getConflictiveMappings_D_G().keySet()){ - - for (int ide2 : mapping_extractor.getConflictiveMappings_D_G().get(ide1)){ - - for (int ideA : mapping_extractor.getConflictiveMappings_D_G().keySet()){ - - for (int ideB : mapping_extractor.getConflictiveMappings_D_G().get(ideA)){ - - if (ide1==ideA && ide2==ideB) - continue; - - if (mapping_extractor.areMappingsInConflict(ide1, ide2, ideA, ideB)){ - - //Check confidences - if (mapping_extractor.getConfidence4Mapping(ide1, ide2) >= - mapping_extractor.getConfidence4Mapping(ideA, ideB)){ - - if (!toDelete.containsKey(ideA)){ - toDelete.put(ideA, new HashSet()); - } - toDelete.get(ideA).add(ideB); - } - else{ - - if (!toDelete.containsKey(ide1)){ - toDelete.put(ide1, new HashSet()); - } - toDelete.get(ide1).add(ide2); - } - } - - - } - } - } - } - - - for (int ide1 : toDelete.keySet()){ - for (int ide2 : toDelete.get(ide1)){ - - mapping_extractor.addSubMapping2ConflictiveAnchors(ide1, ide2); - - mapping_extractor.removeSubMappingFromConflictive_D_G(ide1, ide2); - } - } - toDelete.clear(); - - - - //Check conflicts with mappings 2 review - //-------------------------------------- - for (int ide1 : mapping_extractor.getConflictiveMappings_D_G().keySet()){ - - for (int ide2 : mapping_extractor.getConflictiveMappings_D_G().get(ide1)){ - - //Already filtered - //if (mapping_extractor.isMappingInConflictWithFixedMappings(ide1, ide2)){ - // mapping_extractor.addSubMapping2ConflictiveAnchors(ide1, ide2); - //} - //else { //If no conflict add to mappings to review - - //Check if there are mappings in conflict in mappings2review - for (int ideA : mapping_extractor.getMappings2Review().keySet()){ - - for (int ideB : mapping_extractor.getMappings2Review().get(ideA)){ - - if (mapping_extractor.areMappingsInConflict(ide1, ide2, ideA, ideB)){ - - //Remove mapping 2 review. We give priority to the anchor deleted by D&G - if (!toDelete.containsKey(ideA)){ - toDelete.put(ideA, new HashSet()); - } - toDelete.get(ideA).add(ideB); - - } - - } - } - //We remove them to facilitate D&G processs - for (int ideA : toDelete.keySet()){ - for (int ideB : toDelete.get(ideA)){ - mapping_extractor.removeSubMappingFromMappings2Review(ideA, ideB); - } - } - - - mapping_extractor.addSubMapping2Mappings2Review(ide1, ide2); //check with new ones - - if (mapping_extractor.isMappingInGoldStandard(ide1, ide2)) - good_second_chance++; - - second_chance++; - - - - - } - //} - } - LogOutput.print("Mappings with second chance: " + second_chance + " in GS: " + good_second_chance); - - - } - - - /** - * We perform a last check using D&G - */ - private void lastLogicalCleaning(){ - - if (Parameters.cleanD_G){ - - //Adds clean mappings to anchors. Conflictive and split mappings to respective sets - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - - mapping_extractor.setExactAsFixed(false); - mappings_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_extractor.getLogMapMappings()); ///No fixed mappings: we clean everything just in case - mapping_extractor.setExactAsFixed(true); - - - LogOutput.printAlways("LAST CLEANING MAPPINGS D&G (s): " + StatisticsTimeMappings.getRunningTime(init)); - - } - - - } - - - - - /** - * Discovery and assessment of DATA and OBJECT property mappings - */ - private void createAndAssessPropertyMappings(){ - mapping_extractor.createObjectPropertyAnchors(); - mapping_extractor.createDataPropertyAnchors(); - - - //Delete inverted files for properties - onto_process1.clearInvertedFiles4properties(); - onto_process2.clearInvertedFiles4properties(); - } - - - /** - * Discovery and assessment of Instance mappings - */ - private void createAndAssessInstanceMappings(){ - - - //Check allowed class for instances - int type_id; - for (String uri: Parameters.allowed_instance_types){ - type_id = onto_process1.getIdentifier4ConceptIRI(uri); - if (type_id>=0) - index.addAllowedInstanceType(type_id); - - type_id = onto_process2.getIdentifier4ConceptIRI(uri); - if (type_id>=0) - index.addAllowedInstanceType(type_id); - } - - - mapping_extractor.createInstanceAnchors(); - - //Clean D&G - if (mapping_extractor.getInstanceMappings().size()>0 && Parameters.cleanD_G){ - - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - - //We have an specific method since there is not a top-down search. And we first repair classes - mappings_assessment.CheckSatisfiabilityOfIntegration_DandG_Individuals( - mapping_extractor.getInstanceMappings()); - - - LogOutput.printAlways("Time cleaning instance mappings D&G (s): " + StatisticsTimeMappings.getRunningTime(init)); - } - - - onto_process1.clearInvertedFiles4Individuals(); - onto_process2.clearInvertedFiles4Individuals(); - - - } - - - - Set signature_onto1 = new HashSet(); - Set signature_onto2 = new HashSet(); - - private void createSignatureFromMappings(Map> mappings){ - - for (int idea : mappings.keySet()){ - for (int ideb : mappings.get(idea)){ - - if (mapping_extractor.isId1SmallerThanId2(idea, ideb)){ - - signature_onto1.add( - dataFactory.getOWLClass(index.getIRI4ConceptIndex(idea))); - - //System.out.println(index.getIRI4ConceptIndex(idea)); - - - signature_onto2.add( - dataFactory.getOWLClass(index.getIRI4ConceptIndex(ideb))); - - } - else{ - - //Not alresdy included - if (!mapping_extractor.isMappingAlreadyInList(ideb, idea)){ - - signature_onto1.add( - dataFactory.getOWLClass(index.getIRI4ConceptIndex(ideb))); - - //System.out.println(index.getIRI4ConceptIndex(ideb)); - - signature_onto2.add( - dataFactory.getOWLClass(index.getIRI4ConceptIndex(idea))); - - } - - - } - } - } - - } - - /** - * This method creates the OWL files correspondent to the overlapping/module files. - * Uses Old extractor - */ - private void createOutput4Overlapping(boolean use_discarded){ - - - createSignatureFromMappings(mapping_extractor.getLogMapMappings()); - if (use_discarded) - createSignatureFromMappings(mapping_extractor.getDiscardedMappings()); - - - - //EXTRACT MODULE 1 - ModuleExtractor module_extractor1 = new ModuleExtractor( - overlappingExtractor.getTBOXOverlappingOnto1(), false, false, true, true, false); - - module_extractor1.getLocalityModuleForSignatureGroup(signature_onto1, onto_process1.getOntoIRI()); - - module_extractor1.saveExtractedModule(prefix4IRIs + logmap_mappings_path + "/module1_overlapping_logmap2.owl"); //"Output/module1.owl" - - module_extractor1.clearStrutures(); - overlappingExtractor.getTBOXOverlappingOnto1().clear(); - signature_onto1.clear(); - - - //EXTRACT MODULE 2 - ModuleExtractor module_extractor2 = new ModuleExtractor( - overlappingExtractor.getTBOXOverlappingOnto2(), false, false, true, true, false); - - module_extractor2.getLocalityModuleForSignatureGroup(signature_onto2, onto_process2.getOntoIRI()); - - module_extractor2.saveExtractedModule(prefix4IRIs + logmap_mappings_path + "/module2_overlapping_logmap2.owl"); //Output/module2.owl - - module_extractor2.clearStrutures(); - overlappingExtractor.getTBOXOverlappingOnto2().clear(); - signature_onto2.clear(); - - - - - } - - - - private void saveExtractedMappings(String file_name){ - - int dirMapping; - - OutPutFilesManager outPutFilesManager = new OutPutFilesManager(); - - try { - outPutFilesManager.createOutFiles( - //logmap_mappings_path + "Output/mappings", - logmap_mappings_path + "/" + file_name, - OutPutFilesManager.AllFormats, - onto_process1.getOntoIRI(), - onto_process1.getOntoIRI()); - - if (Parameters.output_class_mappings){ - - for (int idea : mapping_extractor.getLogMapMappings().keySet()){ - for (int ideb : mapping_extractor.getLogMapMappings().get(idea)){ - - //This is important to keep compatibility with OAEI and Flat alignment formats - //The order of mappings is important - //For OWL output would be the same since mappings are axioms - if (mapping_extractor.isId1SmallerThanId2(idea, ideb)){ - - if (mapping_extractor.isMappingAlreadyInList(ideb, idea)){ - dirMapping=Utilities.EQ; - } - else { - dirMapping=Utilities.L2R; - } - - outPutFilesManager.addClassMapping2Files( - index.getIRIStr4ConceptIndex(idea), - index.getIRIStr4ConceptIndex(ideb), - dirMapping, - mapping_extractor.getConfidence4Mapping(idea, ideb)); - } - else { - if (mapping_extractor.isMappingAlreadyInList(ideb, idea)){ - //Do nothing - } - else { - outPutFilesManager.addClassMapping2Files( - index.getIRIStr4ConceptIndex(ideb), - index.getIRIStr4ConceptIndex(idea), - Utilities.R2L, - mapping_extractor.getConfidence4Mapping(idea, ideb)); - } - } - - - } - } - } - - - if (Parameters.output_prop_mappings){ - - for (int ide1 : getDataPropMappings().keySet()){ - outPutFilesManager.addDataPropMapping2Files( - getIRI4DataPropIdentifier(ide1), - getIRI4DataPropIdentifier(getDataPropMappings().get(ide1)), - Utilities.EQ, - getConfidence4DataPropConceptMapping(ide1, getDataPropMappings().get(ide1))//1.0 - ); - } - - for (int ide1 : getObjectPropMappings().keySet()){ - - outPutFilesManager.addObjPropMapping2Files( - getIRI4ObjectPropIdentifier(ide1), - getIRI4ObjectPropIdentifier(getObjectPropMappings().get(ide1)), - Utilities.EQ, - getConfidence4ObjectPropConceptMapping(ide1, getObjectPropMappings().get(ide1))//1.0 - ); - } - } - - - - if (Parameters.perform_instance_matching && Parameters.output_instance_mappings){ - - for (int ide1 : getInstanceMappings().keySet()){ - for (int ide2 : getInstanceMappings().get(ide1)){ - - outPutFilesManager.addInstanceMapping2Files( - getIRI4InstanceIdentifier(ide1), - getIRI4InstanceIdentifier(ide2), - getConfidence4InstanceMapping(ide1, ide2) - ); - - } - - } - } - - - - outPutFilesManager.closeAndSaveFiles(); - - } - catch (Exception e){ - System.err.println("Error saving mappings..."); - e.printStackTrace(); - } - - - } - - - - - /** - * Load Gold Standard Mappings - * @throws Exception - */ - private void loadMappingsGS() throws Exception{ - - ReadFile reader = new ReadFile(gs_mappings); - - - String line; - String[] elements; - - line=reader.readLine(); - - int index1; - int index2; - double confidence; - - int wrong=0; - - while (line!=null) { - - if (line.indexOf("|")<0 && line.indexOf("\t")<0){ - line=reader.readLine(); - continue; - } - - if (line.indexOf("|")>=0) - elements=line.split("\\|"); - else { // if (line.indexOf("\t")>=0){ - elements=line.split("\\t"); - } - - //TODO temporal, only for im assessment - /*if (!overlappingExtractor.getOverlappingOnto1().containsEntityInSignature(IRI.create(elements[0]), true) || - !overlappingExtractor.getOverlappingOnto2().containsEntityInSignature(IRI.create(elements[1]), true)){ - //LogOutput.printAlways("Wrong mapping: " + elements[0] + " " + elements[1]); - wrong++; - line=reader.readLine(); - continue; - }*/ - - - - //Necessary for preccsion and recall or only for GS cleaning - index1=onto_process1.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(elements[0])); - index2=onto_process2.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(elements[1])); - - if (index1>0 && index2>0){ //IN CASE IT DOES NOT EXISTS - - mapping_extractor.addMapping2GoldStandardAnchors(index1, index2); - - //if (umls_assessment) - // identifier2exactMapping.add(new MappingObjectIdentifiers(index1, index2)); - - } - - //System.out.println(elements[0] + " " + elements[1]); - - mappings_gs.add(new MappingObjectStr(elements[0], elements[1])); - mapping_extractor.getStringGoldStandardAnchors().add(new MappingObjectStr(elements[0], elements[1])); - - - - line=reader.readLine(); - } - - reader.closeBuffer(); - - LogOutput.printAlways("Wrong mappings: " + wrong); - LogOutput.printAlways("Gold Standard:" + mappings_gs.size()); - - } - - - - - - - - - - - - double precision=0.0; - double recall=0.0; - double fmeasure=0.0; - - public double getPrecision(){ - return precision; - } - public double getRecall(){ - return recall; - } - public double getFmeasure(){ - return fmeasure; - } - - - - public Set getLogMapMappings(){ - - mapping_extractor.setStringAnchors( - Parameters.output_class_mappings, - Parameters.output_prop_mappings, - Parameters.output_instance_mappings); - - return mapping_extractor.getStringLogMapMappings(); - } - - - /*public Set getDiscardedLogMapMappings(){ - - mapping_extractor.setDiscardedStringAnchors(); - - return mapping_extractor.getDiscardedMappingsStr(); - }*/ - - - - private void getPrecisionAndRecallMappings() throws Exception{ - - - Set intersection; - - - //double precision; - //double recall; - - mapping_extractor.setStringAnchors( - Parameters.output_class_mappings, - Parameters.output_prop_mappings, - Parameters.output_instance_mappings); - - - StatisticsManager.setMFinal(mapping_extractor.getStringLogMapMappings().size()); - LogOutput.printAlways("MAPPINGS: " + mapping_extractor.getStringLogMapMappings().size()); - - - //ALL UMLS MAPPINGS - intersection=new HashSet(mapping_extractor.getStringLogMapMappings()); - intersection.retainAll(mappings_gs); - - StatisticsManager.setGoodMFinal(intersection.size()); - - - precision=((double)intersection.size())/((double)mapping_extractor.getStringLogMapMappings().size()); - recall=((double)intersection.size())/((double)mappings_gs.size()); - - //String dir = "/auto/users/yzhou/LogMapStuff/Test/FMA2NCI/"; - /*if (!logmap_mappings_path.equals("")){ - String dir = logmap_mappings_path; - BufferedWriter writer = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(dir + "_itersection.txt"))); - for (MappingObjectStr obj : intersection) - writer.write(obj.getIRIStrEnt1() + "|" + obj.getIRIStrEnt2() + " " + obj.getConfidence() + "\n"); - writer.close(); - - writer = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(dir + "_add_bad.txt"))); - for (MappingObjectStr obj : mapping_extractor.getStringAnchors()) - if (!intersection.contains(obj)) - writer.write(obj.getIRIStrEnt1() + "|" + obj.getIRIStrEnt2() + " " + obj.getConfidence() + "\n"); - writer.close(); - - writer = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(dir + "_lose_good.txt"))); - for (MappingObjectStr obj : mappings_gs) - if (!intersection.contains(obj)) - writer.write(obj.getIRIStrEnt1() + "|" + obj.getIRIStrEnt2() + "\n"); - writer.close(); - }*/ - - fmeasure=(2*recall*precision)/(precision+recall); - - System.out.println("WRT GS MAPPINGS"); - System.out.println("\tPrecision Mappings: " + precision); - System.out.println("\tRecall Mapping: " + recall); - System.out.println("\tF measure: " + (2*recall*precision)/(precision+recall)); - - LogOutput.print("WRT GS MAPPINGS"); - LogOutput.print("\tPrecision Mappings: " + precision); - LogOutput.print("\tRecall Mapping: " + recall); - LogOutput.print("\tF measure: " + (2*recall*precision)/(precision+recall)); - - - - // - /*getPrecisionandRecallMappings4Subset(0.95); - getPrecisionandRecallMappings4Subset(0.80); - getPrecisionandRecallMappings4Subset(0.50); - getPrecisionandRecallMappings4Subset(0.20); - */ - - - int max_print; - int prints; - - Set difference; - difference=new HashSet(mappings_gs); - difference.removeAll(mapping_extractor.getStringLogMapMappings()); - //LogOutput.print("Difference in GS: " + difference.size()); - LogOutput.printAlways("Difference in GS: " + difference.size()); - LogOutput.printAlways("\tPrinting only the first 250"); - max_print=250; - prints=0; - //if (difference.size()<250){ - for (MappingObjectStr mapping : difference){ - //LogOutput.print("\t" + mapping.getIRIStrEnt1() + "--" + mapping.getIRIStrEnt2()); - prints++; - if (prints>=max_print) - break; - } - //} - Set difference2; - difference2=new HashSet(mapping_extractor.getStringLogMapMappings()); - difference2.removeAll(mappings_gs); - //LogOutput.print("Difference in Candidates: " + difference2.size()); - LogOutput.printAlways("Difference in Candidates: " + difference2.size()); - LogOutput.printAlways("\tPrinting only the first 100"); - max_print=100; - prints=0; - // if (difference2.size()<100){ - for (MappingObjectStr mapping : difference2){ - //LogOutput.print("\t" + mapping.getIRIStrEnt1() + "--" + mapping.getIRIStrEnt2()); - prints++; - if (prints>=max_print) - break; - } - //} - - - StatisticsManager.setMMissing(difference.size()); - - - - - } - - - - private void clearStructures(){ - - //TODO - - - - } - - - - - - - private void outputInstaceMappings4Evaluation() throws Exception{ - - //Only exact mappings (this method is only for statistics purposes) - - FlatAlignmentFormat good_file = new FlatAlignmentFormat(logmap_mappings_path + "/logmap_instance_mappings.txt"); - FlatAlignmentFormat disc1_file = new FlatAlignmentFormat(logmap_mappings_path + "/discarded1_instance_mappings.txt"); - FlatAlignmentFormat disc2_file = new FlatAlignmentFormat(logmap_mappings_path + "/discarded2_instance_mappings.txt"); - FlatAlignmentFormat incomp_file = new FlatAlignmentFormat(logmap_mappings_path + "/incompatible_instance_mappings.txt"); - - int type; - - for (int ide1 : mapping_extractor.getInstanceMappings4OutputType().keySet()) { - - for (int ide2 : mapping_extractor.getInstanceMappings4OutputType().get(ide1).keySet()){ - - - type = mapping_extractor.getInstanceMappings4OutputType().get(ide1).get(ide2); - - - if (type==0){ - - good_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - else if (type==1){ - - disc1_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - else if (type==2){ - - disc2_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - else if (type==3){ - - incomp_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - - - - - } - - } - - good_file.saveOutputFile(); - disc1_file.saveOutputFile(); - disc2_file.saveOutputFile(); - incomp_file.saveOutputFile(); - - - } - - - - - - - - private void outputMappings(Map> mappings, String fileName) throws Exception{ - - //Only exact mappings (this method is only for statistics purposes) - - FlatAlignmentFormat outputFile = new FlatAlignmentFormat(fileName); - - LogOutput.print(fileName); - - String inGS; - - for (int idea : mappings.keySet()){ - - for (int ideb : mappings.get(idea)){ - - if (idea ordered_output_mappings = - new TreeSet(new ComparatorConfidence()); - - - MappingObjectInteractivity mapping; - - Iterator it; - - WriteFile writer; - - String inGS; - - - //ORDER ANCHORS - for (int idea : mapping_extractor.getLogMapMappings().keySet()){ - - for (int ideb : mapping_extractor.getLogMapMappings().get(idea)){ - - if (idea> getClassMappings(){ - return mapping_extractor.getLogMapMappings(); - - } - - - public Map> getDiscardedClassMappings(){ - return mapping_extractor.getDiscardedMappings(); - - } - - public Map> getHardDiscardedClassMappings(){ - return mapping_extractor.getHardDiscardedMappings(); - - } - - public Map> getConflictiveAnchors(){ - return mapping_extractor.getConflictiveMappings(); - - } - - - public Map> getAnchors(){ - return mapping_extractor.getAnchors(); - - } - - - public Map> getLogMapMappings1N(){ - return mapping_extractor.getLogMapMappings(); - - } - - public int getDirClassMapping(int ide1, int ide2){ - return mapping_extractor.getDirMapping(ide1, ide2); - } - - - public String getIRIOntology1(){ - return onto_process1.getOntoIRI(); - } - - public String getIRIOntology2(){ - return onto_process2.getOntoIRI(); - } - - public Map getDataPropMappings(){ - return mapping_extractor.getDataPropertyAnchors(); - } - - - public Map getObjectPropMappings(){ - return mapping_extractor.getObjectPropertyAnchors(); - } - - public Map> getInstanceMappings(){ - return mapping_extractor.getInstanceMappings(); - } - - public Map> getInstanceMappings4OutputType(){ - return mapping_extractor.getInstanceMappings4OutputType(); - } - - - - public double getConfidence4ConceptMapping(int ide1, int ide2){ - return mapping_extractor.getConfidence4Mapping(ide1, ide2); - } - - public double getConfidence4DataPropConceptMapping(int ide1, int ide2){ - return mapping_extractor.getConfidence4DataPropertyAnchor(ide1, ide2); - } - - public double getConfidence4ObjectPropConceptMapping(int ide1, int ide2){ - return mapping_extractor.getConfidence4ObjectPropertyAnchor(ide1, ide2); - } - - public double getConfidence4InstanceMapping(int ide1, int ide2){ - return mapping_extractor.getConfidence4InstanceMapping(ide1, ide2); - } - - - public String getIRI4ConceptIdentifier(int ide){ - return index.getIRIStr4ConceptIndex(ide); - } - - - public String getLabel4ConceptIdentifier(int ide){ - return index.getLabel4ConceptIndex(ide); - } - - - public String getIRI4DataPropIdentifier(int ide){ - return index.getIRIStr4DataPropIndex(ide); - } - - public String getIRI4ObjectPropIdentifier(int ide){ - return index.getIRIStr4ObjPropIndex(ide); - } - - public String getIRI4InstanceIdentifier(int ide){ - return index.getIRIStr4IndividualIndex(ide); - } - - - public void clearIndexStructures(){ - index.clearTaxonomicalStructures(); - } - - - - - - - - - - - - private double getConfidence(MappingObjectInteractivity m){ - - return (mapping_extractor.getConfidence4Mapping(m.getIdentifierOnto1(), m.getIdentifierOnto2())); - - } - - - - /** - * @author Ernesto - * - */ - private class ComparatorConfidence implements Comparator { - - public int compare(MappingObjectInteractivity m1, MappingObjectInteractivity m2) { - - if (getConfidence(m1) < getConfidence(m2)) - return -1; - else - return 1; - } - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_CommandLine.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_CommandLine.java deleted file mode 100644 index d6fef76b69..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_CommandLine.java +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - -import uk.ac.ox.krr.logmap2.oaei.reader.MappingsReaderManager; -import uk.ac.ox.krr.logmap2.oaei.FromRDFAlign2OWL; - - -public class LogMap2_CommandLine { - - - private static String getHelpMessage(){ - return "LogMap 2 can operate as an ontology matching systems (MATCHER) or as a mapping debugging system (DEBUGGER). " + - "Additionally it also converts mappings from RDF-OAEI format to OWL.\n\n" + - - "LogMap 2 MATCHER facility requires 5 parameters:\n" + - "\t1. MATCHER. To use the matching functionality.\n" + - "\t2. IRI ontology 1. e.g.: http://myonto1.owl or file:/C://myonto1.owl or file:/usr/local/myonto1.owl\n" + - "\t3. IRI ontology 2. e.g.: http://myonto2.owl or file:/C://myonto2.owl or file:/usr/local/myonto2.owl\n" + - "\t4. Full output path for mapping files and overlapping modules/fragments. e.g. /usr/local/output_path/ or C://output_path/\n" + - "\t5. Classify the input ontologies together with the mappings. e.g. true or false\n\n" + - "\tFor example: java -jar logmap2_standalone.jar MATCHER file:/home/ontos/cmt.owl file:/home/ontos/ekaw.owl /home/mappings/output true\n\n\n" + - - "LogMap 2 DEBUGGER facility requires 8 parameters:\n" + - "\t1. DEBUGGER. To use the debugging facility.\n" + - "\t2. IRI ontology 1. e.g.: http://myonto1.owl or file:/C://myonto1.owl or file:/usr/local/myonto1.owl\n" + - "\t3. IRI ontology 2. e.g.: http://myonto2.owl or file:/C://myonto2.owl or file:/usr/local/myonto2.owl\n" + - "\t4. Format mappings e.g.: OWL or RDF or TXT\n" + - "\t5. Full IRI or full Path:\n" + - "\t\ta. Full IRI of input mappings if OWL format. e.g.: file:/C://mymappings.owl or file:/usr/local/mymappings.owl or http://mymappings.owl\n" + - "\t\tb. or Full path of input mappings if formats RDF or TXT. e.g.: C://mymappings.rdf or /usr/local/mymappings.txt\n" + - "\t6. Full output path for the repaired mappings: e.g. /usr/local/output_path or C://output_path\n" + - "\t7. Extract modules for repair?: true or false\n" + - "\t8. Check satisfiability after repair using HermiT? true or false\n\n" + - "\tFor example: java -jar logmap2_standalone.jar DEBUGGER file:/home/ontos/cmt.owl file:/home/ontos/ekaw.owl " + - "RDF /usr/local/mymappings.rdf /home/mappings/output false true\n\n\n" + - - - "The RDF2OWL converter facility requires 4 parameters:\n" + - "\t1. RDF2OWL. To transform from RDF-OAEI format to OWL. Note that the input ontologies are required to check the type of entity of the mapped IRIs.\n" + - "\t2. IRI ontology 1. e.g.: http://myonto1.owl or file:/C://myonto1.owl or file:/usr/local/myonto1.owl\n" + - "\t3. IRI ontology 2. e.g.: http://myonto2.owl or file:/C://myonto2.owl or file:/usr/local/myonto2.owl\n" + - "\t4. Full path RDF mappings to be converted: e.g. C://mymappings.rdf or /usr/local/mymappings.rdf\n\n" + - "\tFor example: java -jar logmap2_standalone.jar RDF2OWL file:/home/ontos/cmt.owl file:/home/ontos/ekaw.owl /usr/local/mymappings.rdf\n\n"; - - - - } - - - - /** - * @param args - */ - public static void main(String[] args) { - // TODO Auto-generated method stub - - try{ - - if (args.length<1){// || (!args[0].equals("MATCHER") && !args[0].equals("DEBUGGER"))){ - - System.out.println(getHelpMessage()); - } - - else if (args[0].equals("RDF2OWL")){ - if (args.length!=4){ - System.out.println(getHelpMessage()); - } - else{ - new FromRDFAlign2OWL(args[1], args[2], args[3]); - } - - } - - else if (args[0].equals("MATCHER")){ - - if (args.length!=5){ - System.out.println(getHelpMessage()); - } - else { - new LogMap2_Matcher(args[1], args[2], args[3], Boolean.valueOf(args[4])); - - } - - - } - - else if (args[0].equals("DEBUGGER")){ - - String iri_onto1; - String iri_onto2; - String format_mappings; - String input_mappings_path; - String output_path; - boolean overlapping; - boolean satisfiability_check; - - MappingsReaderManager readermanager; - OntologyLoader loader1; - OntologyLoader loader2; - - if (args.length!=8){ - System.out.println(getHelpMessage()); - return; - } - else{ - iri_onto1=args[1]; - iri_onto2=args[2]; - format_mappings=args[3]; - input_mappings_path=args[4]; - output_path=args[5]; - overlapping=Boolean.valueOf(args[6]); - satisfiability_check=Boolean.valueOf(args[7]); - - } - - - - System.out.println("Loading ontologies..."); - loader1 = new OntologyLoader(iri_onto1); - loader2 = new OntologyLoader(iri_onto2); - System.out.println("...Done"); - - - readermanager = new MappingsReaderManager(input_mappings_path, format_mappings); - - new LogMap2_RepairFacility( - loader1.getOWLOntology(), - loader2.getOWLOntology(), - readermanager.getMappingObjects(), - overlapping, - true, //always optimal - satisfiability_check, - output_path + "/" + "mappings_repaired_with_LogMap"); - - - - } - else { - System.out.println(getHelpMessage()); - } - - - - } - catch(Exception e){ - System.out.println(getHelpMessage()); - } - - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_Matcher.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_Matcher.java deleted file mode 100644 index 04ce165585..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_Matcher.java +++ /dev/null @@ -1,688 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - -import java.util.Set; -import java.util.HashSet; - -import java.util.List; -import java.util.ArrayList; - -import uk.ac.ox.krr.logmap2.io.FlatAlignmentFormat; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -import org.semanticweb.owlapi.model.OWLOntology; - - - -public class LogMap2_Matcher { - - LogMap2Core logmap2; - Set logmap2_mappings = new HashSet(); - Set logmap2_discarded_mappings = new HashSet(); - Set logmap2_hard_discarded_mappings = new HashSet(); - Set logmap2_conflictive_mappings = new HashSet(); - Set logmap2_anchors = new HashSet(); - - Set representative_labels = new HashSet(); - - - - /** - * LogMap access from command line - * See uk.ac.ox.krr.logmap2.Parameters.java to adapt LogMap 2 - * - */ - public LogMap2_Matcher(String iri_onto1, String iri_onto2, String output_path, boolean eval_impact){ - - //LogOutput.showOutpuLog(true); - Parameters.readParameters(); - - try { - logmap2 = new LogMap2Core(iri_onto1, iri_onto2, output_path, eval_impact); - createObjectMappings(); - - //TODO save mappings - saveMappings(output_path); - - - - } - catch (Exception e) { - e.printStackTrace(); - } - - } - - - private void saveMappings(String output_path) throws Exception { - - //saveMappings(getLogmap2_Mappings(), output_path, "logmap_mappings.txt"); ALready created - saveMappings(getLogmap2_DiscardedMappings(), output_path, "logmap_discarded_mappings.txt"); - saveMappings(getLogmap2_HardDiscardedMappings(), output_path, "logmap_hard_discarded_mappings.txt"); - saveMappings(getLogmap2_ConflictiveMappings(), output_path, "logmap_logically_conflicting_mappings.txt"); - saveMappings(getLogmap2_anchors(), output_path, "logmap_anchors.txt"); - - } - - - private void saveMappings(Set mappings, String output_path, String name) throws Exception { - - FlatAlignmentFormat flat_format = new FlatAlignmentFormat(output_path + name); - - for (MappingObjectStr mapping : mappings) { - - if (mapping.isClassMapping()) - flat_format.addClassMapping2Output(mapping.getIRIStrEnt1(), mapping.getIRIStrEnt2(), mapping.getMappingDirection(), mapping.getConfidence()); - - else if (mapping.isObjectPropertyMapping()) - flat_format.addObjPropMapping2Output(mapping.getIRIStrEnt1(), mapping.getIRIStrEnt2(), mapping.getMappingDirection(), mapping.getConfidence()); - - else if (mapping.isDataPropertyMapping()) - flat_format.addDataPropMapping2Output(mapping.getIRIStrEnt1(), mapping.getIRIStrEnt2(), mapping.getMappingDirection(), mapping.getConfidence()); - - else if (mapping.isInstanceMapping()) - flat_format.addInstanceMapping2Output(mapping.getIRIStrEnt1(), mapping.getIRIStrEnt2(), mapping.getConfidence()); - - } - - flat_format.saveOutputFile(); - } - - - - /** - * LogMap access from java application - * See uk.ac.ox.krr.logmap2.Parameters.java to adapt LogMap 2 - * @param iri_onto1 Strig with IRI ontology 1 (source) - * @param iri_onto2 Strig with IRI ontology 2 (target) - */ - public LogMap2_Matcher(String iri_onto1, String iri_onto2){ - - //LogOutput.showOutpuLog(true); - Parameters.readParameters(); - - try { - logmap2 = new LogMap2Core(iri_onto1, iri_onto2); - createObjectMappings(); - } - catch (Exception e) { - e.printStackTrace(); - } - - } - - - /** - * LogMap access from java application - * See uk.ac.ox.krr.logmap2.Parameters.java to adapt LogMap 2 - * @param iri_onto1 Strig with IRI ontology 1 (source) - * @param iri_onto2 Strig with IRI ontology 2 (target) - */ - public LogMap2_Matcher(OWLOntology onto1, OWLOntology onto2){ - - //LogOutput.showOutpuLog(true); - Parameters.readParameters(); - - try { - logmap2 = new LogMap2Core(onto1, onto2); - createObjectMappings(); - } - catch (Exception e) { - e.printStackTrace(); - } - - } - - - /** - * LogMap access from java application - * See uk.ac.ox.krr.logmap2.Parameters.java to adapt LogMap 2 - * @param iri_onto1 Strig with IRI ontology 1 (source) - * @param iri_onto2 Strig with IRI ontology 2 (target) - */ - public LogMap2_Matcher(OWLOntology onto1, OWLOntology onto2, boolean only_anchors){ - - //LogOutput.showOutpuLog(true); - Parameters.readParameters(); - - try { - logmap2 = new LogMap2Core(onto1, onto2, only_anchors); - createObjectMappings(); - } - catch (Exception e) { - e.printStackTrace(); - } - - } - - - - /** - * LogMap access from java application. - * Input mappings are accepted (e.g. composed mappings when using a MO) - * See uk.ac.ox.krr.logmap2.Parameters.java to adapt LogMap 2 - * @param iri_onto1 Strig with IRI ontology 1 (source) - * @param iri_onto2 Strig with IRI ontology 2 (target) - */ - public LogMap2_Matcher(OWLOntology onto1, OWLOntology onto2, Set input_mappings){ - - //LogOutput.showOutpuLog(true); - Parameters.readParameters(); - - try { - logmap2 = new LogMap2Core(onto1, onto2, input_mappings); - createObjectMappings(); - } - catch (Exception e) { - e.printStackTrace(); - } - - } - - - /** - * LogMap access from java application. - * Input mappings are accepted (e.g. composed mappings when using a MO or ) - * See uk.ac.ox.krr.logmap2.Parameters.java to adapt LogMap 2 - * If are_input_mappings_validated = true, then the input mappings are added to the anchor set as they are - */ - public LogMap2_Matcher(OWLOntology onto1, OWLOntology onto2, Set input_mappings, boolean are_input_mappings_validated){ - - //LogOutput.showOutpuLog(true); - Parameters.readParameters(); - - try { - logmap2 = new LogMap2Core(onto1, onto2, input_mappings, are_input_mappings_validated); - createObjectMappings(); - } - catch (Exception e) { - e.printStackTrace(); - } - - } - - - - - /** - * Returns the mappings extracted by LogMap - * @return - */ - public Set getLogmap2_Mappings(){ - return logmap2_mappings; - } - - - public Set getLogmap2_DiscardedMappings(){ - return logmap2_discarded_mappings; - } - - public Set getLogmap2_HardDiscardedMappings(){ - return logmap2_hard_discarded_mappings; - } - - public Set getLogmap2_ConflictiveMappings(){ - return logmap2_conflictive_mappings; - } - - - - public Set getLogmap2_anchors(){ - return logmap2_anchors; - } - - - - - - public Set getRepresentativeLabelsForMappings(){ - return representative_labels; - } - - - public String getIRIOntology1(){ - return logmap2.getIRIOntology1(); - } - - public String getIRIOntology2(){ - return logmap2.getIRIOntology2(); - } - - public OWLOntology getOWLOntology4Mappings() throws Exception{ - return logmap2.getOWLOntology4Mappings(); - } - - private void createObjectMappings(){ - - - - int dir_mapping; - - - try { - - if (Parameters.output_class_mappings){ - - for (int ide1 : logmap2.getClassMappings().keySet()){ - for (int ide2 : logmap2.getClassMappings().get(ide1)){ - - - //Avoid same URI mappings - if (logmap2.getIRI4ConceptIdentifier(ide1).equals(logmap2.getIRI4ConceptIdentifier(ide2))) - continue; - - - dir_mapping = logmap2.getDirClassMapping(ide1, ide2); - - if (dir_mapping!=Utilities.NoMap){ - - //We add labels from both ontos - if (representative_labels.size()%2 == 0) - representative_labels.add(logmap2.getLabel4ConceptIdentifier(ide2)); - else - representative_labels.add(logmap2.getLabel4ConceptIdentifier(ide1)); - - - if (dir_mapping!=Utilities.R2L){ - - //GSs in OAIE only contains, in general, equivalence mappings - if (Parameters.output_equivalences_only){ - dir_mapping=Utilities.EQ; - } - - - logmap2_mappings.add( - new MappingObjectStr( - logmap2.getIRI4ConceptIdentifier(ide1), - logmap2.getIRI4ConceptIdentifier(ide2), - logmap2.getConfidence4ConceptMapping(ide1, ide2), - dir_mapping, - Utilities.CLASSES)); - - } - else{ - - if (Parameters.output_equivalences_only){ - dir_mapping=Utilities.EQ; - } - - logmap2_mappings.add( - new MappingObjectStr( - logmap2.getIRI4ConceptIdentifier(ide2), - logmap2.getIRI4ConceptIdentifier(ide1), - logmap2.getConfidence4ConceptMapping(ide1, ide2), - dir_mapping, - Utilities.CLASSES)); - } - } - } //for ide2 - }//for ide1 - } - - - if (Parameters.output_prop_mappings){ - - for (int ide1 : logmap2.getDataPropMappings().keySet()){ - - //Avoid same URI mappings - if (logmap2.getIRI4DataPropIdentifier(ide1).equals(logmap2.getIRI4DataPropIdentifier(logmap2.getDataPropMappings().get(ide1)))) - continue; - - logmap2_mappings.add( - new MappingObjectStr( - logmap2.getIRI4DataPropIdentifier(ide1), - logmap2.getIRI4DataPropIdentifier(logmap2.getDataPropMappings().get(ide1)), - logmap2.getConfidence4DataPropConceptMapping(ide1, logmap2.getDataPropMappings().get(ide1)), - Utilities.EQ, - Utilities.DATAPROPERTIES)); - } - - for (int ide1 : logmap2.getObjectPropMappings().keySet()){ - - //Avoid same URI mappings - if (logmap2.getIRI4ObjectPropIdentifier(ide1).equals(logmap2.getIRI4ObjectPropIdentifier(logmap2.getObjectPropMappings().get(ide1)))) - continue; - - logmap2_mappings.add( - new MappingObjectStr( - logmap2.getIRI4ObjectPropIdentifier(ide1), - logmap2.getIRI4ObjectPropIdentifier(logmap2.getObjectPropMappings().get(ide1)), - logmap2.getConfidence4ObjectPropConceptMapping(ide1, logmap2.getObjectPropMappings().get(ide1)), - Utilities.EQ, - Utilities.OBJECTPROPERTIES)); - } - } - - - //Output for individuals - if (Parameters.perform_instance_matching && Parameters.output_instance_mappings){ - - for (int ide1 : logmap2.getInstanceMappings().keySet()){ - for (int ide2 : logmap2.getInstanceMappings().get(ide1)){ - - - //Avoid same URI mappings - if (logmap2.getIRI4InstanceIdentifier(ide1).equals(logmap2.getIRI4InstanceIdentifier(ide2))) - continue; - - logmap2_mappings.add( - new MappingObjectStr( - logmap2.getIRI4InstanceIdentifier(ide1), - logmap2.getIRI4InstanceIdentifier(ide2), - logmap2.getConfidence4InstanceMapping(ide1, ide2), - Utilities.EQ, - Utilities.INSTANCES)); - - } - } - - - /*for (int ide1 : mapping_extractor.getInstanceMappings4OutputType().keySet()) { - - for (int ide2 : mapping_extractor.getInstanceMappings4OutputType().get(ide1).keySet()){ - - - type = mapping_extractor.getInstanceMappings4OutputType().get(ide1).get(ide2); - - - if (type==0){ - - good_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - else if (type==1){ - - disc1_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - else if (type==2){ - - disc2_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - else if (type==3){ - - incomp_file.addInstanceMapping2Output( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - "=", - mapping_extractor.getISUB4InstanceMapping(ide1, ide2), - mapping_extractor.getCompFactor4InstanceMapping(ide1, ide2), - mapping_extractor.getScope4InstanceMapping(ide1, ide2)); - - } - - - - - } - - }*/ - - - - - - - } - - //TODO revise direction of mapping - - - //For statistics. They may also be reusable since sometimes are border-line cases - //We also create here discarded mappings - for (int ide1 : logmap2.getDiscardedClassMappings().keySet()){ - for (int ide2 : logmap2.getDiscardedClassMappings().get(ide1)){ - - - if (ide1. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - -import java.net.URL; - -import java.util.Calendar; - -import uk.ac.ox.krr.logmap2.oaei.oracle.OracleManager; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OAEIAlignmentOutput; - -/** - * This classes manages the required wrapper of LogMap 2 in order to be accept and provided the required input and output data. - * @author root - * - */ -public class LogMap2_OAEI { - - private long init_tot, fin; - private double total_time=0.0; - - LogMap2Core logmap2; - - OAEIAlignmentOutput alignment_output; - - - public LogMap2_OAEI(){ - - //LogOutput.showOutpuLog(false); - //Oraculo.unsetStatusOraculo(); - - - } - - public void align(URL source, URL target) throws Exception{ - - init_tot = Calendar.getInstance().getTimeInMillis(); - - //Done in Bridge - //Parameters.readParameters(); - - OracleManager.allowOracle(Parameters.allow_interactivity); - - - //System.out.println(Parameters.path_chinese_segmenter_dict); - //System.out.println(Parameters.path_multilingual_tmp); - - - logmap2 = new LogMap2Core(source.toURI().toString(), target.toURI().toString()); - - fin = Calendar.getInstance().getTimeInMillis(); - - //System.out.println("Matching Time (s): " + (float)((double)fin-(double)init_tot)/1000.0); - total_time = (float)((double)fin-(double)init_tot)/1000.0; - //total_time = total_time - time_loading; - //System.out.println("Time loading ontos (s): " + time_loading); - //System.out.println("Is Oracle active? " + Oraculo.isActive() + " " + Oraculo.getStatusOraculo()); - if (OracleManager.isActive()){ - System.out.println("\tNumber of questions to oracle: " + OracleManager.getNumberOfQuestions()); - } - //System.out.println("LogMap 2 Total Matching Time (s): " + total_time); - - } - - - - private boolean ignoreMapping(String uri_entity){ - //ignore mappings involving entities containing these uris - for (String uri : Parameters.filter_entities) - if (uri_entity.contains(uri)) - return true; - return false; - } - - - - public URL returnAlignmentFile() throws Exception{ - - - alignment_output = new OAEIAlignmentOutput("alignment", logmap2.getIRIOntology1(), logmap2.getIRIOntology2()); - - int dir_mapping; - - if (Parameters.output_class_mappings){ - - for (int ide1 : logmap2.getClassMappings().keySet()){ - - if (ignoreMapping(logmap2.getIRI4ConceptIdentifier(ide1))) - continue; - - for (int ide2 : logmap2.getClassMappings().get(ide1)){ - - dir_mapping = logmap2.getDirClassMapping(ide1, ide2); - - if (ignoreMapping(logmap2.getIRI4ConceptIdentifier(ide2))) - continue; - - - //Avoid same URI mappings - if (logmap2.getIRI4ConceptIdentifier(ide1).equals(logmap2.getIRI4ConceptIdentifier(ide2))) - continue; - - - - if (dir_mapping!=Utilities.NoMap){ - - if (dir_mapping!=Utilities.R2L){ - - //GSs in OAIE only contains, in general, equivalence mappings - if (Parameters.output_equivalences_only){ - dir_mapping=Utilities.EQ; - } - - //TODO Filter cases where IRIs are the same - - alignment_output.addClassMapping2Output( - logmap2.getIRI4ConceptIdentifier(ide1), - logmap2.getIRI4ConceptIdentifier(ide2), - dir_mapping, - logmap2.getConfidence4ConceptMapping(ide1, ide2) - ); - } - else{ - - if (Parameters.output_equivalences_only){ - dir_mapping=Utilities.EQ; - } - - alignment_output.addClassMapping2Output( - logmap2.getIRI4ConceptIdentifier(ide2), - logmap2.getIRI4ConceptIdentifier(ide1), - dir_mapping, - logmap2.getConfidence4ConceptMapping(ide1, ide2) - ); - } - } - } - } - } - - - if (Parameters.output_prop_mappings){ - - - for (int ide1 : logmap2.getDataPropMappings().keySet()){ - - //ignore mappings involving entities containing these uris - if (ignoreMapping(logmap2.getIRI4DataPropIdentifier(ide1))|| - ignoreMapping(logmap2.getIRI4DataPropIdentifier(logmap2.getDataPropMappings().get(ide1)))) - continue; - - //Avoid same URI mappings - if (logmap2.getIRI4DataPropIdentifier(ide1).equals(logmap2.getIRI4DataPropIdentifier(logmap2.getDataPropMappings().get(ide1)))) - continue; - - - alignment_output.addDataPropMapping2Output( - logmap2.getIRI4DataPropIdentifier(ide1), - logmap2.getIRI4DataPropIdentifier(logmap2.getDataPropMappings().get(ide1)), - Utilities.EQ, - logmap2.getConfidence4DataPropConceptMapping(ide1, logmap2.getDataPropMappings().get(ide1))//1.0 - ); - } - - for (int ide1 : logmap2.getObjectPropMappings().keySet()){ - - //ignore mappings involving entities containing these uris - if (ignoreMapping(logmap2.getIRI4ObjectPropIdentifier(ide1))|| - ignoreMapping(logmap2.getIRI4ObjectPropIdentifier(logmap2.getObjectPropMappings().get(ide1)))) - continue; - - - //Avoid same URI mappings - if (logmap2.getIRI4ObjectPropIdentifier(ide1).equals(logmap2.getIRI4ObjectPropIdentifier(logmap2.getObjectPropMappings().get(ide1)))) - continue; - - - alignment_output.addObjPropMapping2Output( - logmap2.getIRI4ObjectPropIdentifier(ide1), - logmap2.getIRI4ObjectPropIdentifier(logmap2.getObjectPropMappings().get(ide1)), - Utilities.EQ, - logmap2.getConfidence4ObjectPropConceptMapping(ide1, logmap2.getObjectPropMappings().get(ide1))//1.0 - ); - } - } - - - //Output for individuals - if (Parameters.perform_instance_matching && Parameters.output_instance_mappings){ - - if (Parameters.output_instance_mapping_files){ - int type; - for (int ide1 : logmap2.getInstanceMappings4OutputType().keySet()) { - - for (int ide2 : logmap2.getInstanceMappings4OutputType().get(ide1).keySet()){ - - - //Avoid same URI mappings - if (logmap2.getIRI4InstanceIdentifier(ide1).equals(logmap2.getIRI4InstanceIdentifier(ide2))) - continue; - - - type = logmap2.getInstanceMappings4OutputType().get(ide1).get(ide2); - - if (type<=1){ - alignment_output.addInstanceMapping2Output( - logmap2.getIRI4InstanceIdentifier(ide1), - logmap2.getIRI4InstanceIdentifier(ide2), - logmap2.getConfidence4InstanceMapping(ide1, ide2) - ); - } - } - } - } - else{ - for (int ide1 : logmap2.getInstanceMappings().keySet()){ - for (int ide2 : logmap2.getInstanceMappings().get(ide1)){ - - //Avoid same URI mappings - if (logmap2.getIRI4InstanceIdentifier(ide1).equals(logmap2.getIRI4InstanceIdentifier(ide2))) - continue; - - alignment_output.addInstanceMapping2Output( - logmap2.getIRI4InstanceIdentifier(ide1), - logmap2.getIRI4InstanceIdentifier(ide2), - logmap2.getConfidence4InstanceMapping(ide1, ide2) - ); - } - } - } - - - } - - - alignment_output.saveOutputFile(); - - logmap2.clearIndexStructures(); - - return alignment_output.returnAlignmentFile(); - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_OAEI_BioPortal.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_OAEI_BioPortal.java deleted file mode 100644 index 4621897a45..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_OAEI_BioPortal.java +++ /dev/null @@ -1,770 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - -import java.net.URL; - -import java.util.Calendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.oaei.oracle.OracleManager; -import uk.ac.ox.krr.logmap2.oaei.reader.RDFAlignReader; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.reasoning.ReasonerManager; -import uk.ac.ox.krr.logmap2.reasoning.SatisfiabilityIntegration; -import uk.ac.ox.krr.logmap2.statistics.StatisticsTimeMappings; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.bioportal.MediatingOntologyExtractor; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OAEIAlignmentOutput; -import uk.ac.ox.krr.logmap2.io.OWLAlignmentFormat; - -/** - * This classes manages the required wrapper of LogMap 2 in order to be accept and provided the required input and output data. - * @author root - * - */ -public class LogMap2_OAEI_BioPortal { - - OAEIAlignmentOutput alignment_output; - - MediatingOntologyExtractor MO_extractor; - - OWLOntology O1; - OWLOntology O2; - OWLOntology MO; - - String str_uri_onto1; - String str_uri_onto2; - - LogMap2_Matcher logmap2; - - Set mappings = new HashSet(); - - //voted mappings in composition - Map mappings2votes = new HashMap(); - - - - private final int MIN_VOTES=2; - - - - public LogMap2_OAEI_BioPortal(){ - - //LogOutput.showOutpuLog(false); - //Oraculo.unsetStatusOraculo(); - - //TODO call logmap matcher and use MO test in LogMap Bioportal project... - //1. tests that the relevant/representative labels are ok (Done) - //2. Check extraction of MO for mouse and largebio (Done) - //3. Evaluate download times... (Done) - //4. Since many MOs 1-5 clear structures if possible!! (Done) - //5. Test P&R (Done) - //6. Unsat (Done) - - } - - - public void align(URL source, URL target) throws Exception{ - - align(source.toURI().toString(), target.toURI().toString()); - - - } - - - public void align(String source_iri, String target_iri) throws Exception{ - - //It does not work here since it is also used inside LogMap calls - //StatisticsTimeMappings.setInitGlobalTime(); - long init_global = StatisticsTimeMappings.getCurrentTimeInMillis(); - - //TODO No interactive mode! - Parameters.allow_interactivity=false; - OracleManager.allowOracle(Parameters.allow_interactivity); - //Read from parameters file done inside calls to LogMap - - - //0. Load input ontologies - //--------------------------------------- - O1 = loadOWLOntology(source_iri); - O2 = loadOWLOntology(target_iri); - - - //1 (composed). We map the input ontologies ontologies (only basic lexical matching to get representative labels) - //--------------------------------------- - /*StatisticsTimeMappings.setCurrentInitTime(); - //Structures are clean inside LogMapMatcher - //No need to repair - Parameters.cleanD_G=false; - LogMap2_Matcher logmap2_exact = new LogMap2_Matcher(O1, O2, true); - str_uri_onto1 = logmap2_exact.getIRIOntology1(); - str_uri_onto2 = logmap2_exact.getIRIOntology2(); - print("Time getting exact matching with input ontologies O1 and O2 (s): " + StatisticsTimeMappings.getRunningTime()); - print("Representative elements: " + logmap2_exact.getRepresentativeLabelsForMappings().size()); - */ - - //1. Perform LogMap matching using (no composed mappings as input) - //--------------------------------------- - //Mappings between O1 and O2 will be considered as the same level as composed mappings - StatisticsTimeMappings.setCurrentInitTime(); - //Parameters.ratio_second_chance_discarded=100; - logmap2 = new LogMap2_Matcher(O1, O2); - //for (MappingObjectStr mapping : logmap2.getLogmap2_Mappings()){ - //addVote2Mappings(mapping, 2);//we start with vote 1 to guarantee they are in the output - //} - getPrecisionRecall(logmap2.getLogmap2_Mappings()); - //getPrecisionRecall(mappings2votes.keySet()); - print("Representative elements: " + logmap2.getRepresentativeLabelsForMappings().size()); - print("Time performing matching with input ontologies O1 and O2 (s): " + StatisticsTimeMappings.getRunningTime()); - - - Parameters.ratio_second_chance_discarded=5; - - - //2. Extract mediating ontologies - //--------------------------------------- - print("Extracting up to " + Parameters.max_mediating_ontologies + " mediating ontologies from BioPortal."); - StatisticsTimeMappings.setCurrentInitTime(); - MO_extractor = - new MediatingOntologyExtractor(logmap2.getRepresentativeLabelsForMappings()); - - print("Time extracting Mediating Ontologies (s): " + StatisticsTimeMappings.getRunningTime()); - //print("Necessary number of calls to BioPortal: " + MO_extractor.getNumCallsBioPortal()); - - //We make sure we repair - Parameters.cleanD_G=true; - - - //3. Perform matching with mediating ontology and get composed mappings - //--------------------------------------- - int num_used_MO = 0; - - for (String ontoAcronym : MO_extractor.getSelectedMediatingOntologies()){ - - StatisticsTimeMappings.setCurrentInitTime(); - //It also updates the mapping2votes inside - Set composed_mappings = performComposedMatchingWithMediatingOntology(ontoAcronym); - - print("\nTime performing composed matching with MO '" + ontoAcronym +"' (s): " + StatisticsTimeMappings.getRunningTime()); - print("Composed mappings: " + composed_mappings.size()); - getPrecisionRecall(composed_mappings); - getPrecisionRecall(mappings2votes.keySet()); - - //We perform MO matching with a asubset of the selected ontologies and for those contribute to the composed mappings - if (composed_mappings.size()>0) - num_used_MO++; - if (num_used_MO>=MO_extractor.MAX_MO_FOR_MATCHING) - break; - } - - - - - - print("\nResults Composed mappings: "); - getComposedMappings(1); - getComposedMappings(2); - getComposedMappings(3); - getComposedMappings(4); - getComposedMappings(5); - getComposedMappings(); - getComposedMappings2(); - getComposedMappings3(); - getComposedMappings4(); - print("\n"); - - //4 (composed). Perform LogMap matching using composed mappings as input - /*StatisticsTimeMappings.setCurrentInitTime(); - Parameters.ratio_second_chance_discarded=100; - LogMap2_Matcher logmap2 = new LogMap2_Matcher(O1, O2, getComposedMappings2()); - mappings.addAll(logmap2.getLogmap2_Mappings()); - print("Time performing matching with input ontologies O1 and O2 and composed mappings (s): " + StatisticsTimeMappings.getRunningTime()); - */ - - - //5. Perform mapping repair -> not necessary if 4 - - StatisticsTimeMappings.setCurrentInitTime(); - //LogMap2_RepairFacility logmap_repair = new LogMap2_RepairFacility(O1, O2, getComposedMappings2(), true); - //LogMap2_RepairFacility logmap_repair = new LogMap2_RepairFacility(O1, O2, logmap2.getLogmap2_Mappings(), getComposedMappings2()); - LogMap3_RepairFacility logmap_repair = new LogMap3_RepairFacility(O1, O2, logmap2.getLogmap2_Mappings(), getComposedMappings4()); - - mappings.addAll(logmap_repair.getCleanMappings()); - print("\nTime performing mapping repir (s): " + StatisticsTimeMappings.getRunningTime()); - - - //5. Check unsatisfiability - //checkSatisfiabilityMappings(); - - - - //print("Number of original computed mappings: " + logmap2_exact.getLogmap2_Mappings().size()); - print("Number of total computed mappings: " + mappings.size()); - getPrecisionRecall(mappings); - print("LogMap 2 (with BioPortal) total matching time (s): " + StatisticsTimeMappings.getRunningTime(init_global)); - - - - } - - - public URL returnAlignmentFile() throws Exception{ - - - alignment_output = new OAEIAlignmentOutput("alignment", str_uri_onto1, str_uri_onto2); - - int dir_mapping; - - for (MappingObjectStr mapping : mappings){ - - if (Parameters.output_class_mappings && mapping.isClassMapping()){ - - dir_mapping = mapping.getMappingDirection(); - - //GSs in OAIE only contains, in general, equivalence mappings - //For test only - if (Parameters.output_equivalences_only) - dir_mapping=Utilities.EQ; - - //Avoid same URI mappings - if (!mapping.getIRIStrEnt1().equals(mapping.getIRIStrEnt2())) { - - alignment_output.addClassMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - dir_mapping, - mapping.getConfidence() - ); - } - - } - - if (Parameters.output_prop_mappings){ - - if (mapping.isDataPropertyMapping()){ - - dir_mapping = mapping.getMappingDirection(); - - - //Avoid same URI mappings - if (!mapping.getIRIStrEnt1().equals(mapping.getIRIStrEnt2())) { - - alignment_output.addDataPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - dir_mapping, - mapping.getConfidence() - ); - } - } - - if (mapping.isObjectPropertyMapping()){ - - dir_mapping = mapping.getMappingDirection(); - - //Avoid same URI mappings - if (!mapping.getIRIStrEnt1().equals(mapping.getIRIStrEnt2())) { - alignment_output.addObjPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - dir_mapping, - mapping.getConfidence() - ); - } - } - - } - - - - if (Parameters.perform_instance_matching && Parameters.output_instance_mappings && mapping.isInstanceMapping()){ - - dir_mapping = mapping.getMappingDirection(); - - //Avoid same URI mappings - if (!mapping.getIRIStrEnt1().equals(mapping.getIRIStrEnt2())) { - alignment_output.addInstanceMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getConfidence() - ); - } - - } - - } - - - - - - alignment_output.saveOutputFile(); - - //Called already in LgMap matcher - ///logmap2.clearIndexStructures(); - - return alignment_output.returnAlignmentFile(); - - } - - - /** - * Downloads ontology from BioPortal, Performs matching with mediating ontology and returns composed mappings - * @param onto_acronym - * @return composed mappings - */ - private Set performComposedMatchingWithMediatingOntology(String ontoAcronym){ - - //Download BioPortal ontology - StatisticsTimeMappings.setCurrentInitTime(); - OWLOntology MO = MO_extractor.downloadBioPortalOntology(ontoAcronym, 1); - print("\nTime downloading MO '" + ontoAcronym +"' (s): " + StatisticsTimeMappings.getRunningTime()); - - Set composed_mappings = new HashSet(); - - if (MO!=null){ - - //Matching O1 with MO - StatisticsTimeMappings.setCurrentInitTime(); - LogMap2_Matcher logmap2_matcher_mo1 = new LogMap2_Matcher(O1, MO); - print("Time matching O1 with MO '" + ontoAcronym +"' (s): " + StatisticsTimeMappings.getRunningTime()); - - //Matching O2 with MO - StatisticsTimeMappings.setCurrentInitTime(); - LogMap2_Matcher logmap2_matcher_mo2 = new LogMap2_Matcher(MO, O2); - print("Time matching O2 with MO '" + ontoAcronym +"' (s): " + StatisticsTimeMappings.getRunningTime()); - - //Compose mappings - StatisticsTimeMappings.setCurrentInitTime(); - - Set mappings_mo1 = logmap2_matcher_mo1.getLogmap2_Mappings(); - Set mappings_mo2 = logmap2_matcher_mo2.getLogmap2_Mappings(); - - composed_mappings = new HashSet(); - - for (MappingObjectStr map_mo1 : mappings_mo1){ - if (!map_mo1.isClassMapping()) - continue; - for (MappingObjectStr map_mo2 : mappings_mo2){ - - if (!map_mo2.isClassMapping()) - continue; - - if (map_mo1.getIRIStrEnt2().equals(map_mo2.getIRIStrEnt1())){ - - //TODO Check Impact on Precision - //if (map_mo1.getConfidence()>Parameters.confidence_composed_mappings && - // map_mo2.getConfidence()>Parameters.confidence_composed_mappings) - - MappingObjectStr mapping = new MappingObjectStr( - map_mo1.getIRIStrEnt1(), - map_mo2.getIRIStrEnt2(), - (map_mo1.getConfidence()+map_mo2.getConfidence())/2.0, MappingObjectStr.EQ, MappingObjectStr.CLASSES); - - composed_mappings.add(mapping); - - addVote2Mappings(mapping); - - - } - } - - } - print("Time creating composed mappings for'" + ontoAcronym +"' (s): " + StatisticsTimeMappings.getRunningTime()); - - } - - return composed_mappings; - - - } - - - private void addVote2Mappings(MappingObjectStr mapping){ - addVote2Mappings(mapping, 0); - } - - private void addVote2Mappings(MappingObjectStr mapping, int init_vote){ - if (!mappings2votes.containsKey(mapping)){ - mappings2votes.put(mapping, init_vote); - } - mappings2votes.put(mapping, mappings2votes.get(mapping).intValue()+1); - } - - - //if (map_mo1.getConfidence()>Parameters.confidence_composed_mappings && - // map_mo2.getConfidence()>Parameters.confidence_composed_mappings) - - - private Set getComposedMappings(){ - - Set composed_mappings = new HashSet(); - - for (MappingObjectStr mapping : mappings2votes.keySet()){ - - if (logmap2.getLogmap2_Mappings().contains(mapping)) - continue; - - //Voted by at least "min_votes". 3 is good - if (mappings2votes.get(mapping).intValue()>=MIN_VOTES){ - composed_mappings.add(mapping); - } - //By confidence - else if (mapping.getConfidence()>Parameters.confidence_composed_mappings2){ - composed_mappings.add(mapping); - } - - } - - getPrecisionRecall(composed_mappings); - - return composed_mappings; - } - - private Set getComposedMappings2(){ - - Set composed_mappings = new HashSet(); - - for (MappingObjectStr mapping : mappings2votes.keySet()){ - - if (logmap2.getLogmap2_Mappings().contains(mapping)) - continue; - - //Voted by at least "min_votes". 3 is good - if (mappings2votes.get(mapping).intValue()>=MIN_VOTES){ - composed_mappings.add(mapping); - } - //By confidence - else if (mappings2votes.get(mapping).intValue()>=2 && mapping.getConfidence()>Parameters.confidence_composed_mappings2){ - composed_mappings.add(mapping); - } - - } - - getPrecisionRecall(composed_mappings); - - return composed_mappings; - } - - - private Set getComposedMappings3(){ - - Set composed_mappings = new HashSet(); - - for (MappingObjectStr mapping : mappings2votes.keySet()){ - - if (logmap2.getLogmap2_Mappings().contains(mapping)) - continue; - - //Voted by at least "min_votes". 3 is good - if (mappings2votes.get(mapping).intValue()>=MIN_VOTES){ - composed_mappings.add(mapping); - } - //By confidence - else if (mappings2votes.get(mapping).intValue()>=2 && mapping.getConfidence()>Parameters.confidence_composed_mappings2){ - composed_mappings.add(mapping); - } - else if (mappings2votes.get(mapping).intValue()>=1 && mapping.getConfidence()>Parameters.confidence_composed_mappings1){ - composed_mappings.add(mapping); - } - - } - - getPrecisionRecall(composed_mappings); - - return composed_mappings; - } - - - private Set getComposedMappings4(){ - - Set composed_mappings = new HashSet(); - - for (MappingObjectStr mapping : mappings2votes.keySet()){ - - if (logmap2.getLogmap2_Mappings().contains(mapping)) - continue; - - - if (mappings2votes.get(mapping).intValue()>=MIN_VOTES && mapping.getConfidence()>Parameters.confidence_composed_mappings2){ - composed_mappings.add(mapping); - } - else if (mappings2votes.get(mapping).intValue()>=1 && mapping.getConfidence()>Parameters.confidence_composed_mappings1){ - composed_mappings.add(mapping); - } - - } - - getPrecisionRecall(composed_mappings); - - return composed_mappings; - } - - - private Set getComposedMappings(int min_votes){ - - Set composed_mappings = new HashSet(); - - for (MappingObjectStr mapping : mappings2votes.keySet()){ - - if (logmap2.getLogmap2_Mappings().contains(mapping)) - continue; - - //Voted by at least "min_votes" - if (mappings2votes.get(mapping).intValue()>=min_votes){ - composed_mappings.add(mapping); - } - - } - - getPrecisionRecall(composed_mappings); - - return composed_mappings; - } - - - private OWLOntology loadOWLOntology(String iri_onto) throws OWLOntologyCreationException{ - - OWLOntologyManager managerOnto = SynchronizedOWLManager.createOWLOntologyManager(); - - managerOnto.setSilentMissingImportsHandling(true); - - return managerOnto.loadOntology(IRI.create(iri_onto)); - - } - - - - private void checkSatisfiabilityMappings() throws Exception { - - OWLOntology mappins_owl_onto = getOWLOntology4GivenMappings(mappings); - - - SatisfiabilityIntegration.setTimeoutClassSatisfiabilityCheck(60); - - - SatisfiabilityIntegration sat_checker = new SatisfiabilityIntegration( - O1, - O2, - mappins_owl_onto, - true,//class sat - true,//Time_Out_Class - false); //use factory - - - print("Num unsat classes lead by LogMap mappings: " + sat_checker.getNumUnsatClasses()); - - } - - - - /** - * Returns the given mappings as an OWLOntology object. - * @return - * @throws Exception - */ - private OWLOntology getOWLOntology4GivenMappings(Set mappings) throws Exception { - - OWLAlignmentFormat owlformat = new OWLAlignmentFormat(""); - - - for (MappingObjectStr mapping : mappings){ - - - if (mapping.getTypeOfMapping() == Utilities.INSTANCE){ - - owlformat.addInstanceMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getConfidence()); - } - - - else if (mapping.getTypeOfMapping() == Utilities.CLASSES){ - - - owlformat.addClassMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - } - - else if (mapping.getTypeOfMapping() == Utilities.OBJECTPROPERTIES){ - - owlformat.addObjPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - } - - else if (mapping.getTypeOfMapping() == Utilities.DATAPROPERTIES){ - - owlformat.addDataPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - - } - - - }//end for mappings - - - return owlformat.getOWLOntology(); - - - } - - - - - - - private void getPrecisionRecall(Set mappingsToTest){ - - boolean printPR = false; - - try{ - - if (printPR){ - - double p; - double r; - double f; - - int size_mappings=mappingsToTest.size(); - - Set mappings = new HashSet(mappingsToTest); - - - mappings.retainAll(reference); - - int good_mappings = mappings.size(); - - p = (double)good_mappings/(double) size_mappings; - r = (double)good_mappings/(double) reference.size(); - f = 2*r*p/(r+p); - - - print("P: "+ p + ", R: " + r +", F: "+ f +", Num: "+ mappingsToTest.size()); - } - } - catch(Exception e){ - //do nothing - } - - } - - - - private static Set loadReference(String ref){ - - try { - - RDFAlignReader readerref; - - readerref = new RDFAlignReader(ref); - - return readerref.getMappingObjects(); - - - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return null; - - } - - - private void print(String text){ - //if (Parameters.print_output_always) - System.out.println(text); - - } - - - public static Set reference = new HashSet(); - - public static void main(String[] args){ - - String iri1, iri2, ref; - - - iri1= "file:/home/ernesto/Documents/OAEI_datasets/mouse.owl"; - iri2= "file:/home/ernesto/Documents/OAEI_datasets/human.owl"; - ref = "/home/ernesto/Documents/OAEI_datasets/reference.rdf"; // Reference ontology - - /*iri1= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_FMA_small_overlapping_nci.owl"; - iri2= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_NCI_small_overlapping_fma.owl"; - - iri1= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_FMA_whole_ontology.owl"; - iri2= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_NCI_whole_ontology.owl"; - ref = "/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_FMA2NCI_repaired_UMLS_mappings.rdf"; - - /*iri1= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_FMA_small_overlapping_snomed.owl"; - iri2= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_SNOMED_small_overlapping_fma.owl"; - - iri1= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_FMA_whole_ontology.owl"; - iri2= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_SNOMED_extended_overlapping_fma_nci.owl"; - - ref = "/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_FMA2SNOMED_repaired_UMLS_mappings.rdf"; - - /*iri1= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_SNOMED_small_overlapping_nci.owl"; - iri2= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_NCI_small_overlapping_snomed.owl"; - - iri1= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_SNOMED_extended_overlapping_fma_nci.owl"; - iri2= "file:/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_NCI_whole_ontology.owl"; - ref = "/home/ernesto/Documents/OAEI_datasets/oaei_2013/oaei2013_SNOMED2NCI_repaired_UMLS_mappings.rdf"; - - SatisfiabilityIntegration.setReasoner(ReasonerManager.ELK); - */ - - - reference = loadReference(ref); - - LogMap2_OAEI_BioPortal logmap_Bio = new LogMap2_OAEI_BioPortal(); - - - try { - logmap_Bio.align(iri1, iri2); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_RepairFacility.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_RepairFacility.java deleted file mode 100644 index 9f9a3db42d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/LogMap2_RepairFacility.java +++ /dev/null @@ -1,1675 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - - -import uk.ac.ox.krr.logmap2.indexing.JointIndexManager; -import uk.ac.ox.krr.logmap2.oaei.reader.MappingsReaderManager; -import uk.ac.ox.krr.logmap2.indexing.OntologyProcessing; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OWLAlignmentFormat; -import uk.ac.ox.krr.logmap2.io.OutPutFilesManager; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.mappings.CandidateMappingManager; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.reasoning.SatisfiabilityIntegration; -import uk.ac.ox.krr.logmap2.repair.AnchorAssessment; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.overlapping.OverlappingExtractor4Mappings; - -import org.semanticweb.owlapi.model.AddAxiom; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAnnotation; -import org.semanticweb.owlapi.model.OWLAnnotationProperty; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.apibinding.OWLManager; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.util.Calendar; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.HashSet; -import java.util.TreeSet; - - -/** - * This class will require two OWL ontologies and a set of mappings (see MappingObjectStr) - * @author Ernesto - * - */ -public class LogMap2_RepairFacility { - - - private long init_global, init, fin; - - private OntologyProcessing onto_process1; - private OntologyProcessing onto_process2; - - private JointIndexManager index; - - private CandidateMappingManager mapping_manager; - - private AnchorAssessment mapping_assessment; - - private OWLOntology onto1; - private OWLOntology onto2; - private Set input_mappings; - private boolean overlapping; - private boolean method_optimal; - private boolean useLogMapConfidences; - - - private TreeSet ordered_mappings = new TreeSet(new MappingComparator()); - private Set clean_mappings = new HashSet(); - - - protected Map> mappings2Review_step2 = new HashMap>(); - - - private double average_confidence=0; - - - - public LogMap2_RepairFacility( - OWLOntology onto1, - OWLOntology onto2, - Set mappings, - boolean sat_check){ - this(onto1, onto2, mappings, false, false, sat_check, ""); - } - - - - /** - * Constructor from Java application - * @param onto1 - * @param onto2 - * @param mappings - * @param overlapping If the intersection or overlapping of the ontologies are extracted before the repair - * @param optimal If the repair is performed in a two steps process (optimal) or in one cleaning step (more aggressive) - */ - public LogMap2_RepairFacility( - OWLOntology onto1, - OWLOntology onto2, - Set mappings, - boolean overlapping, - boolean optimal){ - this(onto1, onto2, mappings, overlapping, optimal, false, ""); - } - - - - public LogMap2_RepairFacility( - OWLOntology onto1, - OWLOntology onto2, - Set mappings, - boolean overlapping, - boolean optimal, - boolean chechSatisfiability, - String outPutFileName){ - - this(onto1, onto2, mappings, overlapping, optimal, false, chechSatisfiability, outPutFileName); - - } - - - - /** - * Constructor for command line - * @param onto1 - * @param onto2 - * @param mappings - * @param overlapping If the intersection or overlapping of the ontologies are extracted before the repair - * @param optimal If the repair is performed in a two steps process (optimal) or in one cleaning step (more aggressive) - * @param chechSatisfiability Uses HermiT to check if the repaired mappings lead to unsatisfiable classes - * @param outPutFileName - */ - public LogMap2_RepairFacility( - OWLOntology onto1, - OWLOntology onto2, - Set mappings, - boolean overlapping, - boolean optimal, - boolean useLogMapConfidences, - boolean chechSatisfiability, - String outPutFileName){ - - this.onto1 = onto1; - this.onto2 = onto2; - this.input_mappings = mappings; - this.overlapping=overlapping; - this.method_optimal = optimal; - this.useLogMapConfidences = useLogMapConfidences; - - - - - try{ - - init_global = init = Calendar.getInstance().getTimeInMillis(); - - - setUpStructures(); - - //TODO It also includes assessment for properties and instances! - assessMappings(); - - //Always... at least for testing - keepRepairedMappings(); - - - if (!outPutFileName.equals("")){ - saveRepairedMappings(outPutFileName); - } - - if (chechSatisfiability){ - checkSatisfiabilityMappings(clean_mappings); - } - - - fin = Calendar.getInstance().getTimeInMillis(); - System.out.println("TOTAL REPAIR TIME (s): " + (float)((double)fin-(double)init_global)/1000.0); - - - } - catch (Exception e){ - System.out.println("Error repairing mappings using LogMap repair module: " + e.getMessage()); - } - - - } - - - - /** - * Method to be called from web service - * Create a new class??? //TODO - * @param onto1 - * @param onto2 - * @param fixedmappings - * @param mappings2review - * @deprecated Not completed method! - */ - public LogMap2_RepairFacility( - OWLOntology onto1, - OWLOntology onto2, - Set fixedmappings, - Set mappings2review){ - - - this.onto1 = onto1; - this.onto2 = onto2; - this.input_mappings = fixedmappings; - this.overlapping=false; //we already have the modules! - this.method_optimal = true; - - - try{ - - init_global = init = Calendar.getInstance().getTimeInMillis(); - - setUpStructures(); - - //TODO It also includes assessment for properties and instances! - assessMappings(); - - //Always... at least for testing - //Clean mapping - keepRepairedMappings(); - - - - fin = Calendar.getInstance().getTimeInMillis(); - System.out.println("TOTAL REPAIR TIME (s): " + (float)((double)fin-(double)init_global)/1000.0); - - - } - catch (Exception e){ - System.out.println("Error repairing mappings using LogMap repair module: " + e.getMessage()); - } - - - - - } - - - - private void addSubMapping2Mappings2Review(int index1, int index2){ - - if (!mappings2Review_step2.containsKey(index1)){ - mappings2Review_step2.put(index1, new HashSet()); - } - mappings2Review_step2.get(index1).add(index2); - } - - - /** - * We associate type to mappings in case the object does indicate this. - */ - private void associateType2Mappings(){ - - - //TREAT GIVEN MAPPINGS - - int num_original_class_mappings=0; - int num_original_dprop_mappings=0; - int num_original_oprop_mappings=0; - int num_original_instance_mappings=0; - int num_mixed_mappings=0; - - double min_confidence = 2.0; - double max_confidence = 0.0; - average_confidence = 0.0; - - - for (MappingObjectStr map : input_mappings){ - - //Check if it contains type? Better to double check - - average_confidence = average_confidence + map.getConfidence(); - if (map.getConfidence()max_confidence){ - max_confidence = map.getConfidence(); - } - - - //Detect the type of mapping: class, property or instance - //In some cases it might be included - if (onto1.containsClassInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsClassInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.CLASSES); - - ordered_mappings.add(map); - - num_original_class_mappings++; - - - } - else if (onto1.containsObjectPropertyInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsObjectPropertyInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.OBJECTPROPERTIES); - - ordered_mappings.add(map); - - num_original_oprop_mappings++; - - - } - else if (onto1.containsDataPropertyInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsDataPropertyInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.DATAPROPERTIES); - - ordered_mappings.add(map); - - num_original_dprop_mappings++; - - } - - else if (onto1.containsIndividualInSignature(IRI.create(map.getIRIStrEnt1()), true) - && onto2.containsIndividualInSignature(IRI.create(map.getIRIStrEnt2()), true)) { - - map.setTypeOfMapping(Utilities.INSTANCES); - - ordered_mappings.add(map); - - num_original_instance_mappings++; - - } - else { - //System.out.println("Mixed Entities or entities not in signature of ontologies: "); - //System.out.println("\t" + map.getIRIStrEnt1()); - //System.out.println("\t" + map.getIRIStrEnt2()); - - num_mixed_mappings++; - - } - - - } - - average_confidence = average_confidence/(double)input_mappings.size(); - - LogOutput.printAlways("Num original mappings: " + input_mappings.size()); - LogOutput.print("\tNum original class mappings: " + num_original_class_mappings); - LogOutput.print("\tNum original object property mappings: " + num_original_oprop_mappings); - LogOutput.print("\tNum original data property mappings: " + num_original_dprop_mappings); - LogOutput.print("\tNum original instance mappings: " + num_original_instance_mappings); - LogOutput.print("\tNum mixed mappings: " + num_mixed_mappings); - LogOutput.print("\tMin confidence: " + min_confidence); - LogOutput.print("\tMax confidence: " + max_confidence); - LogOutput.print("\tAVERAGE confidence: " + average_confidence); - - //We do not differentiate between reliable mappings and other mappings - if (!method_optimal) - average_confidence=-1.0; - - - - } - - - /** - * We add mapping to structures in mapping_manager - */ - private void addMapping2Structures(){ - - - mappings2Review_step2.clear(); - - - Iterator it = ordered_mappings.descendingIterator(); - - MappingObjectStr map; - - - //for (MappingObjectStr map : ordered_mappings){ - while (it.hasNext()){ - - map = it.next(); - - //System.out.println(map + " " + map.getConfidence()); - - if (map.getTypeOfMapping()==Utilities.CLASSES) { - - addClassMapping(map); - - } - else if (map.getTypeOfMapping()==Utilities.OBJECTPROPERTIES) { - - addObjectPropertyMapping(map); - - } - else if (map.getTypeOfMapping()==Utilities.DATAPROPERTIES) { - - addDataPropertyMapping(map); - - } - - else if (map.getTypeOfMapping()==Utilities.INSTANCES) { - - addInstanceMapping(map); - - } - else { - //Do nothing - } - - - } - - //Not necessary any more - ordered_mappings.clear(); - - - LogOutput.print("Numb of reliable mappings: " + num_anchors); - LogOutput.print("Numb of other mappings: " + num_mappings2review); - - - - - } - - - - - private void setUpStructures() throws Exception{ - - - //try{ - - //TODO showOutput!! - LogOutput.showOutpuLog(false); - - //init = Calendar.getInstance().getTimeInMillis(); - //PrecomputeIndexCombination.preComputeIdentifierCombination(); - //fin = Calendar.getInstance().getTimeInMillis(); - //LogOutput.print("Time precomputing index combinations (s): " + (float)((double)fin-(double)init)/1000.0); - - - //When reading from RDF align there is no type - associateType2Mappings(); - - - //Create Index and new Ontology Index... - index = new JointIndexManager(); - - - //Extract overlapping if indicated - if (overlapping){ - OverlappingExtractor4Mappings overlapping = new OverlappingExtractor4Mappings(); - - overlapping.createOverlapping(onto1, onto2, input_mappings); - - onto_process1 = new OntologyProcessing(overlapping.getOverlappingOnto1(), index, new LexicalUtilities()); - onto_process2 = new OntologyProcessing(overlapping.getOverlappingOnto2(), index, new LexicalUtilities()); - } - else{ - onto_process1 = new OntologyProcessing(onto1, index, new LexicalUtilities()); - onto_process2 = new OntologyProcessing(onto2, index, new LexicalUtilities()); - } - - - - - mapping_manager = new CandidateMappingManager(index, onto_process1, onto_process2); - - - - //Extracts lexicon - init = Calendar.getInstance().getTimeInMillis(); - //TODO This may affect scalability!! - onto_process1.precessLexicon(useLogMapConfidences); //we process labels if "useLogMapConfidences" - onto_process2.precessLexicon(useLogMapConfidences); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time indexing entities (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Extracts Taxonomy - //Also extracts A^B->C - init = Calendar.getInstance().getTimeInMillis(); - onto_process1.setTaxonomicData(); - onto_process2.setTaxonomicData(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time extracting structural information (s): " + (float)((double)fin-(double)init)/1000.0); - - - //We add mappings to structures (important to be after setting tax data) - addMapping2Structures(); - - - onto_process1.clearReasoner(); - onto_process1.getClass2Identifier().clear(); - - onto_process2.clearReasoner(); - onto_process2.getClass2Identifier().clear(); - //} - //catch (Exception e){ - // e.printStackTrace(); - //} - - - } - - - - - private void assessMappings(){ - - - //CLASS MAPPINGS ASSESSESMENT - if (method_optimal) - assessClassMappings2steps(); //we split between reliable and other mappings - else - assessClassMappings1step(); - - - - //Clean property mappings and individual mappings - //-------------------------------- - - //Assess Property mappings: using index - if (mapping_manager.getDataPropertyAnchors().size() >0 || mapping_manager.getObjectPropertyAnchors().size() > 0) { - init = Calendar.getInstance().getTimeInMillis(); - mapping_manager.evaluateCompatibilityDataPropertyMappings(); - mapping_manager.evaluateCompatibilityObjectPropertyMappings(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime assessing property mappings (s): " + (float)((double)fin-(double)init)/1000.0); - } - - - - //Asses Individuals index - if (mapping_manager.getInstanceMappings().size()>0){ - - init = Calendar.getInstance().getTimeInMillis(); - mapping_manager.evaluateCompatibilityInstanceMappings(); - - - //Asses Individuals D&G - if (mapping_manager.getInstanceMappings().size()>0){ - - init = Calendar.getInstance().getTimeInMillis(); - - //We have an specific method since there is not a top-down search. And we first repair classes - mapping_assessment.CheckSatisfiabilityOfIntegration_DandG_Individuals( - mapping_manager.getInstanceMappings()); - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time cleaning instance mappings D&G (s): " + (float)((double)fin-(double)init)/1000.0); - } - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime assessing instance mappings (s): " + (float)((double)fin-(double)init)/1000.0); - } - - - } - - /** - * Clean first the identified anchors and then clean the rest of candidates - */ - private void assessClassMappings2steps(){ - - - int discarded_with_index=0; - - mapping_assessment = new AnchorAssessment(index, mapping_manager); - - //TODO uncomments for general behaviour - //For SNOMED-NCI cases we need an approximation and for other cases as well - //init = Calendar.getInstance().getTimeInMillis(); - //mapping_assessment.CountSatisfiabilityOfIntegration_DandG(mapping_manager.getAnchors()); - //fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("\tTime counting unsat Dowling and Gallier (s): " + (float)((double)fin-(double)init)/1000.0); - - - init = Calendar.getInstance().getTimeInMillis(); - mapping_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_manager.getLogMapMappings()); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime cleaning reliable class mappings Dowling and Gallier (s): " + (float)((double)fin-(double)init)/1000.0); - LogOutput.print("\tRepaired Root Unsat using Dowling and Gallier (aproximation): " + mapping_assessment.getNumRepairedUnsatClasses()); - - //After repairing exact - mapping_manager.setExactAsFixed(true); - - - //Interval labelling schema and cleaning of mappings 2 review against anchors - //------------------------------------------------------------------------------ - try { - - init = Calendar.getInstance().getTimeInMillis(); - - //Index already have the necessary taxonomical information apart from the equiv mappings - index.setIntervalLabellingIndex(mapping_manager.getFixedMappings()); - index.clearAuxStructuresforLabellingSchema(); - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime indexing hierarchy + anchors (ILS) (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Asses mappings to review - for (int ide1 : mappings2Review_step2.keySet()){ - for (int ide2 : mappings2Review_step2.get(ide1)){ - - //if (index.areDisjoint(ide1, ide2)) { //less agressive? - if (mapping_manager.isMappingInConflictWithFixedMappings(ide1, ide2)){ - discarded_with_index++; - } - else { - mapping_manager.addSubMapping2Mappings2Review(ide1, ide2); - } - } - } - - LogOutput.print("Discarded with index: " + discarded_with_index); - - - } - catch (Exception e){ - System.out.println("Error creating Interval Labelling index 1: " + e.getMessage()); - e.printStackTrace(); - } - - if (mapping_manager.getMappings2Review().size()>0){ - - mapping_manager.setExactAsFixed(false);//repair all, just in case... - - //Clean D&G mappings 2 review - init = Calendar.getInstance().getTimeInMillis(); - mapping_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_manager.getMappings2Review()); //With Fixed mappings! - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time cleaning rest of the mappings using D&G (s): " + (float)((double)fin-(double)init)/1000.0); - LogOutput.print("\tRepaired Root Unsat using Dowling and Gallier 2 (aproximation): " + mapping_assessment.getNumRepairedUnsatClasses()); - - //Move clean to anchors - mapping_manager.moveMappingsToReview2AnchorList(); - - - //Interval labelling index with try block with all clean mappings - //------------------------------ - try{ - init = Calendar.getInstance().getTimeInMillis(); - index.setIntervalLabellingIndex(mapping_manager.getLogMapMappings());//It also contains mappings 2 review - index.clearAuxStructuresforLabellingSchema(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time indexing hierarchy + anchors and candidates I (ILS) (s): " + (float)((double)fin-(double)init)/1000.0); - } - catch (Exception e){ - System.out.println("Error creating Interval Labelling index 2: " + e.getMessage()); - e.printStackTrace(); - } - } - - - //Add weakened - for (int ide1 : mapping_manager.getWeakenedDandGMappings().keySet()){ - - for (int ide2 : mapping_manager.getWeakenedDandGMappings().get(ide1)){ - - if (!mapping_manager.isMappingInConflictWithFixedMappings(ide1, ide2)){ - - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - - } - } - } - - - //TODO necesary?? - //Repair all just in case - ///-------------------------- - //mapping_manager.setExactAsFixed(false); - - //init = Calendar.getInstance().getTimeInMillis(); - //mapping_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_manager.getAnchors()); - //fin = Calendar.getInstance().getTimeInMillis(); - //LogOutput.print("\tTime cleaning ALL class mappings Dowling and Gallier (s): " + (float)((double)fin-(double)init)/1000.0); - //LogOutput.print("\tRepaired Root Unsat using Dowling and Gallier 3 (aproximation): " + mapping_assessment.getNumRepairedUnsatClasses()); - - //New weakened ar not added - - - - } - - - /** - * Clean the complete set of mappings at once - */ - private void assessClassMappings1step(){ - - mapping_assessment = new AnchorAssessment(index, mapping_manager); - - //TODO comments for general behaviour - //For SNOMED-NCI cases we need an approximation and for other cases as well - //init = Calendar.getInstance().getTimeInMillis(); - //mapping_assessment.CountSatisfiabilityOfIntegration_DandG(mapping_manager.getAnchors()); - //fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("\tTime counting unsat Dowling and Gallier (s): " + (float)((double)fin-(double)init)/1000.0); - //if (true) - // return; - //End to comments - - - init = Calendar.getInstance().getTimeInMillis(); - mapping_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_manager.getLogMapMappings()); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime cleaning class mappings Dowling and Gallier (s): " + (float)((double)fin-(double)init)/1000.0); - LogOutput.print("\tRepaired Root Unsat using Dowling and Gallier (aproximation): " + mapping_assessment.getNumRepairedUnsatClasses()); - - - - try { - - //Interval labelling schema - //-------------------------- - init = Calendar.getInstance().getTimeInMillis(); - - //Index already have the necessary taxonomical information apart from the equiv mappings - index.setIntervalLabellingIndex(mapping_manager.getLogMapMappings()); - index.clearAuxStructuresforLabellingSchema(); - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime indexing hierarchy + anchors (ILS) (s): " + (float)((double)fin-(double)init)/1000.0); - } - catch (Exception e){ - System.out.println("Error creating Interval Labelling index: " + e.getMessage()); - e.printStackTrace(); - } - - - for (int ide1 : mapping_manager.getWeakenedDandGMappings().keySet()){ - - for (int ide2 : mapping_manager.getWeakenedDandGMappings().get(ide1)){ - - //TODO: This is necessary no? - if (!mapping_manager.isMappingInConflictWithFixedMappings(ide1, ide2)){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - } - - } - } - } - - - int num_anchors=0; - int num_mappings2review=0; - - - /** - * Adds mappings to structures and extract isub and scope using LogMap methods - * It deprecates the original given confidence in order to identity "reliable" mappings as LogMap does. - * @param map - */ - private void addClassMapping(MappingObjectStr map){ - - int ide1; - int ide2; - - double scoreISUB; - double scoreScope; - - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Classes not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - - //New isub and scope calculated by LogMap - if (useLogMapConfidences){ - scoreISUB = mapping_manager.extractISUB4Mapping(ide1, ide2); - scoreScope = mapping_manager.extractScopeAll4Mapping(ide1, ide2); - } - else{ - //TODO Confidence given in the mapping (e.g. calculated by the OM systems) - //In that case, method_optimal is not recommended - mapping_manager.addIsub2Structure(ide1, ide2, map.getConfidence()); - mapping_manager.addIsub2Structure(ide2, ide1, map.getConfidence()); - - scoreISUB = map.getConfidence(); - scoreScope = map.getConfidence(); - } - - - if (method_optimal){ - //TODO - //If good isub and scope then reliable! Otherwise clean... - - if (scoreISUB>=Parameters.good_isub_anchors && scoreScope>Parameters.bad_score_scope && map.getMappingDirection()==Utilities.EQ){ - //Reliable "equivalence" mappings - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - num_anchors++; - } - else if (map.getMappingDirection()==Utilities.L2R){ - addSubMapping2Mappings2Review(ide1, ide2); - num_mappings2review++; - } - else{ - addSubMapping2Mappings2Review(ide2, ide1); - num_mappings2review++; - } - } - else{ //We do not split mappings: all are anchors - - num_anchors++; - - if (map.getMappingDirection()==Utilities.EQ){ - //Reliable "equivalence" mappings - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - } - else if (map.getMappingDirection()==Utilities.L2R){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - } - else{ - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - } - - } - - } - - - - - /** - * Adds mappings to structures. Uses confidence given in mapping - * @param map - * @deprecated - */ - private void addClassMapping2(MappingObjectStr map){ - - - - int ide1; - int ide2; - - - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Classes not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - //Confidence given in the mapping (e.g. calculated by the OM systems) - mapping_manager.addIsub2Structure(ide1, ide2, map.getConfidence()); - mapping_manager.addIsub2Structure(ide2, ide1, map.getConfidence()); - - - //TODO Split mappings in anchors and candidates 2 review - //Less than half - if (((2*num_anchors) < ordered_mappings.size()) || !method_optimal){ - //if (map.getConfidence()>=average_confidence){ - - num_anchors++; - - if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - - } - else if (map.getMappingDirection()==Utilities.L2R){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); //TODO Check this - //mapping_manager.addIsub2Structure(ide1, ide2, map.getConfidence()); //confidence - - if (method_optimal){//we do not add them to reliable mappings for indexing issues - addSubMapping2Mappings2Review(ide1, ide2); - } - - } - else{ - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - - if (method_optimal){ //we do not add them to reliable mappings for indexing issues - addSubMapping2Mappings2Review(ide2, ide1); - } - //mapping_manager.addIsub2Structure(ide2, ide1, map.getConfidence()); - } - - } - else { - - num_mappings2review++; - - if (map.getMappingDirection()==Utilities.EQ){ - addSubMapping2Mappings2Review(ide1, ide2); //local method - addSubMapping2Mappings2Review(ide2, ide1); - - } - else if (map.getMappingDirection()==Utilities.L2R){ - addSubMapping2Mappings2Review(ide1, ide2); - } - else{ - addSubMapping2Mappings2Review(ide2, ide1); - } - - } - - } - - - private void addObjectPropertyMapping(MappingObjectStr map){ - - int ide1; - int ide2; - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4ObjectPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ObjectPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Object properties not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - //So far only equivalences are considered - //if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addObjectPropertyAnchor(ide1, ide2); - mapping_manager.addObjectPropertyAnchorConfidence(ide1, map.getConfidence()); - //} - } - - - - - - - - private void addDataPropertyMapping(MappingObjectStr map){ - - int ide1; - int ide2; - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4DataPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4DataPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Data properties not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - //So far only equivalences are considered - //if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addDataPropertyAnchor(ide1, ide2); - mapping_manager.addDataPropertyAnchorConfidence(ide1, map.getConfidence()); - //} - - - } - - - private void addInstanceMapping(MappingObjectStr map){ - - - int ide1; - int ide2; - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4InstanceName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4InstanceName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Individuals not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - //So far only equivalences are considered - //if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addInstanceMapping(ide1, ide2); - mapping_manager.addInstanceAnchorConfidence(ide1, ide2, map.getConfidence()); - //} - - - } - - - public void saveRepairedMappings(String outPutFileName){ - saveRepairedMappings(outPutFileName, OutPutFilesManager.AllFormats); - } - - - public void saveRepairedMappings(String outPutFileName, int format){ - - int dirMapping; - - OutPutFilesManager outPutFilesManager = new OutPutFilesManager(); - - int num_clean_mappings=0; - int num_clean_class_mappings=0; - int num_clean_dprop_mappings=0; - int num_clean_oprop_mappings=0; - int num_clean_instance_mappings=0; - - try { - outPutFilesManager.createOutFiles( - //logmap_mappings_path + "Output/mappings", - //path + "/" + file_name, - //outPutFileName + "/" + "repaired_mappings", - outPutFileName, - //OutPutFilesManager.AllFormats, - //OutPutFilesManager.OAEIFormat, - format, - onto_process1.getOntoIRI(), - onto_process1.getOntoIRI()); - - //if (Parameters.output_class_mappings){ - - for (int idea : mapping_manager.getLogMapMappings().keySet()){ - for (int ideb : mapping_manager.getLogMapMappings().get(idea)){ - - //This is important to keep compatibility with OAEI and Flat alignment formats - //The order of mappings is important - //For OWL output would be the same since mappings are axioms - if (mapping_manager.isId1SmallerThanId2(idea, ideb)){ - - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - dirMapping=Utilities.EQ; - } - else { - dirMapping=Utilities.L2R; - } - - num_clean_mappings++; - num_clean_class_mappings++; - - outPutFilesManager.addClassMapping2Files( - index.getIRIStr4ConceptIndex(idea), - index.getIRIStr4ConceptIndex(ideb), - dirMapping, - mapping_manager.getConfidence4Mapping(idea, ideb)); - } - else { - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - //Do nothing - } - else { - - num_clean_mappings++; - num_clean_class_mappings++; - - outPutFilesManager.addClassMapping2Files( - index.getIRIStr4ConceptIndex(ideb), - index.getIRIStr4ConceptIndex(idea), - Utilities.R2L, - mapping_manager.getConfidence4Mapping(idea, ideb)); - } - } - - - } - } - //} - - //if (Parameters.output_prop_mappings){ - - for (int ide1 : mapping_manager.getDataPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_dprop_mappings++; - - outPutFilesManager.addDataPropMapping2Files( - index.getIRIStr4DataPropIndex(ide1), - index.getIRIStr4DataPropIndex(mapping_manager.getDataPropertyAnchors().get(ide1)), - Utilities.EQ, - mapping_manager.getConfidence4DataPropertyAnchor(ide1, mapping_manager.getDataPropertyAnchors().get(ide1))//1.0 - ); - } - - for (int ide1 : mapping_manager.getObjectPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_oprop_mappings++; - - outPutFilesManager.addObjPropMapping2Files( - index.getIRIStr4ObjPropIndex(ide1), - index.getIRIStr4ObjPropIndex(mapping_manager.getObjectPropertyAnchors().get(ide1)), - Utilities.EQ, - mapping_manager.getConfidence4ObjectPropertyAnchor(ide1, mapping_manager.getObjectPropertyAnchors().get(ide1))//1.0 - ); - } - //} - - - - //if (Parameters.perform_instance_matching && Parameters.output_instance_mappings){ - - for (int ide1 : mapping_manager.getInstanceMappings().keySet()){ - for (int ide2 : mapping_manager.getInstanceMappings().get(ide1)){ - - num_clean_mappings++; - num_clean_instance_mappings++; - - outPutFilesManager.addInstanceMapping2Files( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - mapping_manager.getConfidence4InstanceMapping(ide1, ide2) - ); - - } - - } - //} - - - //mapping_manager.setStringAnchors(); - LogOutput.printAlways("Num repaired mappings: " + num_clean_mappings); - LogOutput.print("\tNum repaired class mappings: " + num_clean_class_mappings); - LogOutput.print("\tNum repaired object property mappings: " + num_clean_oprop_mappings); - LogOutput.print("\tNum repaired data property mappings: " + num_clean_dprop_mappings); - LogOutput.print("\tNum repaired instance mappings: " + num_clean_instance_mappings); - - outPutFilesManager.closeAndSaveFiles(); - - - } - catch (Exception e){ - System.err.println("Error saving mappings..."); - e.printStackTrace(); - } - - - } - - - - /** - * Returns the set of mappings that have been repaired using LogMap's repair facility - * @return - */ - public Set getCleanMappings(){ - return clean_mappings; - } - - /** - * Returns the input set of mappings (NOT repaired) - * @return - */ - public Set getInputMappings(){ - return input_mappings; - } - - /** - * Returns the real size of the repair: number of removed clauses - * @return - */ - public int getSizeOfRepair(){ - - int clauses = 0; - - for (int ide1 : mapping_manager.getConflictiveMappings().keySet()){ - clauses += mapping_manager.getConflictiveMappings().get(ide1).size(); - } - - return clauses; - - } - - - public void checkSatisfiabilityInputMappings() throws Exception { - checkSatisfiabilityMappings(input_mappings); - } - - public void checkSatisfiabilityCleanMappings() throws Exception { - checkSatisfiabilityMappings(clean_mappings); - } - - - public void checkSatisfiabilityMappings(Set mappings) throws Exception { - - OWLOntology mappins_owl_onto = getOWLOntology4GivenMappings(mappings); - - - SatisfiabilityIntegration.setTimeoutClassSatisfiabilityCheck(60); - - - SatisfiabilityIntegration sat_checker = new SatisfiabilityIntegration( - onto1, - onto2, - mappins_owl_onto, - true,//class sat - true,//Time_Out_Class - false); //use factory - - - LogOutput.print("Num unsat classes lead by repaired mappings using LogMap: " + sat_checker.getNumUnsatClasses()); - - } - - - - public OWLOntology getOWLOntology4CleanMappings() throws Exception { - return getOWLOntology4GivenMappings(clean_mappings); - } - - - - /** - * Returns the clean mappings as an OWLOntology object. - * @return - * @throws Exception - */ - public OWLOntology getOWLOntology4GivenMappings(Set mappings) throws Exception { - - OWLAlignmentFormat owlformat = new OWLAlignmentFormat(""); - - - for (MappingObjectStr mapping : mappings){ - - - if (mapping.getTypeOfMapping() == Utilities.INSTANCE){ - - owlformat.addInstanceMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getConfidence()); - } - - - else if (mapping.getTypeOfMapping() == Utilities.CLASSES){ - - - owlformat.addClassMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - } - - else if (mapping.getTypeOfMapping() == Utilities.OBJECTPROPERTIES){ - - owlformat.addObjPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - } - - else if (mapping.getTypeOfMapping() == Utilities.DATAPROPERTIES){ - - owlformat.addDataPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - - } - - - }//end for mappings - - - return owlformat.getOWLOntology(); - - - } - - - - - - - - private void keepRepairedMappings(){ - - int dirMapping; - - int num_clean_mappings=0; - int num_clean_class_mappings=0; - int num_clean_dprop_mappings=0; - int num_clean_oprop_mappings=0; - int num_clean_instance_mappings=0; - - clean_mappings.clear(); - - try { - - for (int idea : mapping_manager.getLogMapMappings().keySet()){ - for (int ideb : mapping_manager.getLogMapMappings().get(idea)){ - - //This is important to keep compatibility with OAEI and Flat alignment formats - //The order of mappings is important - //For OWL output would be the same since mappings are axioms - if (mapping_manager.isId1SmallerThanId2(idea, ideb)){ - - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - dirMapping=Utilities.EQ; - } - else { - dirMapping=Utilities.L2R; - } - - num_clean_mappings++; - num_clean_class_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ConceptIndex(idea), - index.getIRIStr4ConceptIndex(ideb), - mapping_manager.getConfidence4Mapping(idea, ideb), - dirMapping, - Utilities.CLASSES)); - - } - else { - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - //Do nothing - } - else { - - num_clean_mappings++; - num_clean_class_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ConceptIndex(ideb), - index.getIRIStr4ConceptIndex(idea), - mapping_manager.getConfidence4Mapping(idea, ideb), - Utilities.R2L, - Utilities.CLASSES)); - } - } - - - } - } - //} - - //if (Parameters.output_prop_mappings){ - - for (int ide1 : mapping_manager.getDataPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_dprop_mappings++; - - - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ConceptIndex(ide1), - index.getIRIStr4DataPropIndex(mapping_manager.getDataPropertyAnchors().get(ide1)), - mapping_manager.getConfidence4DataPropertyAnchor(ide1, mapping_manager.getDataPropertyAnchors().get(ide1)), - Utilities.EQ, - Utilities.DATAPROPERTIES)); - - - } - - for (int ide1 : mapping_manager.getObjectPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_oprop_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ObjPropIndex(ide1), - index.getIRIStr4ObjPropIndex(mapping_manager.getObjectPropertyAnchors().get(ide1)), - mapping_manager.getConfidence4ObjectPropertyAnchor(ide1, mapping_manager.getObjectPropertyAnchors().get(ide1)), - Utilities.EQ, - Utilities.OBJECTPROPERTIES)); - } - //} - - - - //if (Parameters.perform_instance_matching && Parameters.output_instance_mappings){ - - for (int ide1 : mapping_manager.getInstanceMappings().keySet()){ - for (int ide2 : mapping_manager.getInstanceMappings().get(ide1)){ - - num_clean_mappings++; - num_clean_instance_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - mapping_manager.getConfidence4InstanceMapping(ide1, ide2), - Utilities.EQ, - Utilities.INSTANCES)); - - } - - } - //} - - - //mapping_manager.setStringAnchors(); - //TODO uncomment - /*System.out.println("\tNum clean mappings: " + num_clean_mappings); - System.out.println("\t\tNum clean class mappings: " + num_clean_class_mappings); - System.out.println("\t\tNum clean object property mappings: " + num_clean_oprop_mappings); - System.out.println("\t\tNum clean data property mappings: " + num_clean_dprop_mappings); - System.out.println("\t\tNum clean instance mappings: " + num_clean_instance_mappings); - */ - - - - } - catch (Exception e){ - System.err.println("Error keeping mappings..."); - e.printStackTrace(); - } - - - } - - - - - - private static Set emptyMappings() throws Exception{ - - Set mappings = new HashSet(); - - - mappings.add(new MappingObjectStr( - "http://csu6325.cs.ox.ac.uk/ontologies/matching_21_05_2012/emptyOntology.owl#lala", - "http://csu6325.cs.ox.ac.uk/ontologies/matching_31_05_2012/ontology_31_05_2012__18_53_50_221#lala", - 1.0, - Utilities.EQ)); - - return mappings; - - - } - - - - /** - * - * @deprecated Use instead mappings manager reader - * @param file - * @return - * @throws Exception - */ - private static Set readMappings(String file) throws Exception{ - - - Set mappings = new HashSet(); - - ReadFile reader = new ReadFile(file); - - - String line; - String[] elements; - - line=reader.readLine(); - - int dir; - - while (line!=null) { - - if (line.indexOf("|")<0){ - line=reader.readLine(); - continue; - } - - elements=line.split("\\|"); - - if (elements.length<4) - continue; - - - if (elements[2].equals(">")){ - dir = Utilities.R2L; - } - else if (elements[2].equals("<")){ - dir = Utilities.L2R; - } - else { - dir = Utilities.EQ; - } - - - mappings.add(new MappingObjectStr(elements[0], elements[1], Double.valueOf(elements[3]), dir)); - - line=reader.readLine(); - } - - reader.closeBuffer(); - - - return mappings; - - - } - - - - - private static String getHelpMessage(){ - return "LogMap's repair facility requires 7 parameters:\n" + - "\t1. IRI ontology 1. e.g.: http://myonto1.owl or file:/C://myonto1.owl or file:/usr/local/myonto1.owl\n" + - "\t2. IRI ontology 2. e.g.: http://myonto2.owl or file:/C://myonto2.owl or file:/usr/local/myonto2.owl\n" + - "\t3. Format mappings e.g.: OWL or RDF or TXT\n" + - "\t4. Full IRI or full Path:\n" + - "\t\ta. Full IRI of input mappings if OWL format. e.g.: file:/C://mymappings.owl or file:/usr/local/mymappings.owl or http://mymappings.owl\n" + - "\t\tb. Full path of input mappings if formats RDF or TXT. e.g.: C://mymappings.rdf or /usr/local/mymappings.txt\n" + - "\t5. Full output path for the repaired mappings: e.g. /usr/local/output_path or C://output_path\n" + - "\t6. Extract modules for repair?: true or false\n" + - "\t7. Check satisfiability after repair using HermiT? true or false\n"; - //"\t4. Classify the input ontologies together with the mappings. e.g. true or false"; - } - - - - - - - /** - * @param args - */ - public static void main(String[] args) { - - - - try { - - String iri_onto1; - String iri_onto2; - String format_mappings; - String input_mappings_path; - String output_path; - boolean overlapping; - boolean satisfiability_check; - - MappingsReaderManager readermanager; - OntologyLoader loader1; - OntologyLoader loader2; - - /* - if (args.length==1){ - - if (args[0].toLowerCase().contains("help")){ - System.out.println("HELP:\n" + getHelpMessage()); - return; - } - - } - */ - - if (args.length!=7){ - System.out.println(getHelpMessage()); - return; - } - else{ - iri_onto1=args[0]; - iri_onto2=args[1]; - format_mappings=args[2]; - input_mappings_path=args[3]; - output_path=args[4]; - overlapping=Boolean.valueOf(args[5]); - satisfiability_check=Boolean.valueOf(args[6]); - - } - - - - LogOutput.printAlways("Loading ontologies..."); - loader1 = new OntologyLoader(iri_onto1); - loader2 = new OntologyLoader(iri_onto2); - LogOutput.printAlways("...Done"); - - - readermanager = new MappingsReaderManager(input_mappings_path, format_mappings); - - new LogMap2_RepairFacility( - loader1.getOWLOntology(), - loader2.getOWLOntology(), - readermanager.getMappingObjects(), - overlapping, - false, //always optimal? - satisfiability_check, - output_path + "/" + "mappings_repaired_with_LogMap"); - - - - - } - catch (Exception e){ - e.printStackTrace(); - } - - - } - - - - - - - /** - * Comparator based on the mapping confidence - * @author Ernesto - * - */ - private class MappingComparator implements Comparator { - - /** - * We order by confidence - */ - public int compare(MappingObjectStr m1, MappingObjectStr m2) { - - - if (m1.getConfidence(). - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - - - -import uk.ac.ox.krr.logmap2.indexing.JointIndexManager; -import uk.ac.ox.krr.logmap2.oaei.reader.MappingsReaderManager; -import uk.ac.ox.krr.logmap2.indexing.OntologyProcessing; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OWLAlignmentFormat; -import uk.ac.ox.krr.logmap2.io.OutPutFilesManager; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.mappings.CandidateMappingManager; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.reasoning.SatisfiabilityIntegration; -import uk.ac.ox.krr.logmap2.repair.AnchorAssessment; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.overlapping.OverlappingExtractor4Mappings; - -import org.semanticweb.owlapi.model.AddAxiom; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAnnotation; -import org.semanticweb.owlapi.model.OWLAnnotationProperty; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.apibinding.OWLManager; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.util.Calendar; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.HashSet; -import java.util.TreeSet; - - -/** - * This class will require two OWL ontologies and a set of mappings (see MappingObjectStr) - * @author Ernesto - * - */ -public class LogMap3_RepairFacility { - - - private long init_global, init, fin; - - private OntologyProcessing onto_process1; - private OntologyProcessing onto_process2; - - private JointIndexManager index; - - private CandidateMappingManager mapping_manager; - - private AnchorAssessment mapping_assessment; - - private OWLOntology onto1; - private OWLOntology onto2; - private Set fixed_mappings; - private Set mappings2review; - private boolean overlapping; - - - Set input_mappings = new HashSet(); - - private Set clean_mappings = new HashSet(); - - - - /** - * - */ - public LogMap3_RepairFacility( - OWLOntology onto1, - OWLOntology onto2, - Set fixed_mappings, - Set mappings2review){ - - this.onto1 = onto1; - this.onto2 = onto2; - this.fixed_mappings = fixed_mappings; - this.overlapping=false; - this.mappings2review = mappings2review; - - - input_mappings.addAll(fixed_mappings); - input_mappings.addAll(mappings2review); - - - - try{ - - init_global = init = Calendar.getInstance().getTimeInMillis(); - - - setUpStructures(); - - - //TODO It also includes assessment for properties and instances! - assessMappings(); - - //Always... at least for testing - keepRepairedMappings(); - - - - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.printAlways("TOTAL REPAIR TIME (s): " + (float)((double)fin-(double)init_global)/1000.0); - - - } - catch (Exception e){ - System.out.println("Error repairing mappings using LogMap repair module: " + e.getMessage()); - } - - - } - - - - private void addMapping2Structures(){ - - for (MappingObjectStr map : fixed_mappings){ - - if (map.getTypeOfMapping()==Utilities.CLASSES) { - - addClassMapping(map, true); - - } - else if (map.getTypeOfMapping()==Utilities.OBJECTPROPERTIES) { - - addObjectPropertyMapping(map); - - } - else if (map.getTypeOfMapping()==Utilities.DATAPROPERTIES) { - - addDataPropertyMapping(map); - - } - - else if (map.getTypeOfMapping()==Utilities.INSTANCES) { - - addInstanceMapping(map); - - } - else { - //Do nothing - } - - } - - for (MappingObjectStr map : mappings2review){ - - if (map.getTypeOfMapping()==Utilities.CLASSES) { - - addClassMapping(map, false); - - } - else if (map.getTypeOfMapping()==Utilities.OBJECTPROPERTIES) { - - addObjectPropertyMapping(map); - - } - else if (map.getTypeOfMapping()==Utilities.DATAPROPERTIES) { - - addDataPropertyMapping(map); - - } - - else if (map.getTypeOfMapping()==Utilities.INSTANCES) { - - addInstanceMapping(map); - - } - else { - //Do nothing - } - - } - - } - - - - - - - - - private void setUpStructures() throws Exception{ - - //try{ - - //TODO showOutput!! - LogOutput.showOutpuLog(false); - - - //Create Index and new Ontology Index... - index = new JointIndexManager(); - - - //Extract overlapping if indicated - if (overlapping){ - OverlappingExtractor4Mappings overlapping = new OverlappingExtractor4Mappings(); - - overlapping.createOverlapping(onto1, onto2, input_mappings); - - onto_process1 = new OntologyProcessing(overlapping.getOverlappingOnto1(), index, new LexicalUtilities()); - onto_process2 = new OntologyProcessing(overlapping.getOverlappingOnto2(), index, new LexicalUtilities()); - } - else{ - onto_process1 = new OntologyProcessing(onto1, index, new LexicalUtilities()); - onto_process2 = new OntologyProcessing(onto2, index, new LexicalUtilities()); - } - - - - - mapping_manager = new CandidateMappingManager(index, onto_process1, onto_process2); - - - - //Extracts lexicon - init = Calendar.getInstance().getTimeInMillis(); - //TODO This may affect scalability!! - onto_process1.precessLexicon(false); //we process labels if "useLogMapConfidences" - onto_process2.precessLexicon(false); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time indexing entities (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Extracts Taxonomy - //Also extracts A^B->C - init = Calendar.getInstance().getTimeInMillis(); - onto_process1.setTaxonomicData(); - onto_process2.setTaxonomicData(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time extracting structural information (s): " + (float)((double)fin-(double)init)/1000.0); - - - //We add mappings to structures (important to be after setting tax data) - addMapping2Structures(); - - - onto_process1.clearReasoner(); - onto_process1.getClass2Identifier().clear(); - - onto_process2.clearReasoner(); - onto_process2.getClass2Identifier().clear(); - //} - //catch (Exception e){ - // e.printStackTrace(); - //} - - - } - - - - - private void assessMappings(){ - - - //CLASS MAPPINGS ASSESSESMENT - assessClassMappings(mapping_manager.getMappings2Review()); - - - //Clean property mappings and individual mappings - //-------------------------------- - - //Assess Property mappings: using index - if (mapping_manager.getDataPropertyAnchors().size() >0 || mapping_manager.getObjectPropertyAnchors().size() > 0) { - init = Calendar.getInstance().getTimeInMillis(); - mapping_manager.evaluateCompatibilityDataPropertyMappings(); - mapping_manager.evaluateCompatibilityObjectPropertyMappings(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime assessing property mappings (s): " + (float)((double)fin-(double)init)/1000.0); - } - - - - //Asses Individuals index - if (mapping_manager.getInstanceMappings().size()>0){ - - init = Calendar.getInstance().getTimeInMillis(); - mapping_manager.evaluateCompatibilityInstanceMappings(); - - - //Asses Individuals D&G - if (mapping_manager.getInstanceMappings().size()>0){ - - init = Calendar.getInstance().getTimeInMillis(); - - //We have an specific method since there is not a top-down search. And we first repair classes - mapping_assessment.CheckSatisfiabilityOfIntegration_DandG_Individuals( - mapping_manager.getInstanceMappings()); - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time cleaning instance mappings D&G (s): " + (float)((double)fin-(double)init)/1000.0); - } - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime assessing instance mappings (s): " + (float)((double)fin-(double)init)/1000.0); - } - - - } - - - - /** - * Clean the complete set of mappings at once - */ - private void assessClassMappings(Map> mappings){ - - mapping_manager.setExactAsFixed(true); - - mapping_assessment = new AnchorAssessment(index, mapping_manager); - - //TODO comments for general behaviour - //For SNOMED-NCI cases we need an approximation and for other cases as well - //init = Calendar.getInstance().getTimeInMillis(); - //mapping_assessment.CountSatisfiabilityOfIntegration_DandG(mappings); - //fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("\tTime counting unsat Dowling and Gallier (s): " + (float)((double)fin-(double)init)/1000.0); - //if (true) - // return; - //End to comments - - - init = Calendar.getInstance().getTimeInMillis(); - mapping_assessment.CheckSatisfiabilityOfIntegration_DandG(mappings); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime cleaning class mappings Dowling and Gallier (s): " + (float)((double)fin-(double)init)/1000.0); - LogOutput.print("\tRepaired Root Unsat using Dowling and Gallier (aproximation): " + mapping_assessment.getNumRepairedUnsatClasses()); - - - //Move clean repaired mappings to anchors - mapping_manager.moveMappingsToReview2AnchorList(); - - - try { - - //Interval labelling schema - //-------------------------- - init = Calendar.getInstance().getTimeInMillis(); - - //Index already have the necessary taxonomical information apart from the equiv mappings - index.setIntervalLabellingIndex(mapping_manager.getLogMapMappings()); - index.clearAuxStructuresforLabellingSchema(); - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime indexing hierarchy + anchors (ILS) (s): " + (float)((double)fin-(double)init)/1000.0); - } - catch (Exception e){ - System.out.println("Error creating Interval Labelling index: " + e.getMessage()); - e.printStackTrace(); - } - - - for (int ide1 : mapping_manager.getWeakenedDandGMappings().keySet()){ - - for (int ide2 : mapping_manager.getWeakenedDandGMappings().get(ide1)){ - - //TODO: This is necessary no? - if (!mapping_manager.isMappingInConflictWithFixedMappings(ide1, ide2)){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - } - - } - } - } - - - int num_anchors=0; - int num_mappings2review=0; - - - /** - * Adds mappings to structures and extract isub and scope using LogMap methods - * It deprecates the original given confidence in order to identity "reliable" mappings as LogMap does. - * @param map - */ - private void addClassMapping(MappingObjectStr map, boolean fixed){ - - int ide1; - int ide2; - - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Classes not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - - - //TODO Confidence given in the mapping (e.g. calculated by the OM systems) - //In that case, method_optimal is not recommended - mapping_manager.addIsub2Structure(ide1, ide2, map.getConfidence()); - mapping_manager.addIsub2Structure(ide2, ide1, map.getConfidence()); - - if (fixed){ - if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - } - else if (map.getMappingDirection()==Utilities.L2R) - mapping_manager.addSubMapping2ListOfAnchors(ide1, ide2); - else - mapping_manager.addSubMapping2ListOfAnchors(ide2, ide1); - } - else{ - if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addSubMapping2Mappings2Review(ide1, ide2); - mapping_manager.addSubMapping2Mappings2Review(ide2, ide1); - } - else if (map.getMappingDirection()==Utilities.L2R){ - mapping_manager.addSubMapping2Mappings2Review(ide1, ide2); - } - else{ - mapping_manager.addSubMapping2Mappings2Review(ide2, ide1); - } - } - - } - - - - - - - - private void addObjectPropertyMapping(MappingObjectStr map){ - - int ide1; - int ide2; - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4ObjectPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4ObjectPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Object properties not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - //So far only equivalences are considered - //if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addObjectPropertyAnchor(ide1, ide2); - mapping_manager.addObjectPropertyAnchorConfidence(ide1, map.getConfidence()); - //} - } - - - - - - - - private void addDataPropertyMapping(MappingObjectStr map){ - - int ide1; - int ide2; - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4DataPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4DataPropName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Data properties not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - //So far only equivalences are considered - //if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addDataPropertyAnchor(ide1, ide2); - mapping_manager.addDataPropertyAnchorConfidence(ide1, map.getConfidence()); - //} - - - } - - - private void addInstanceMapping(MappingObjectStr map){ - - - int ide1; - int ide2; - - //Translate from mapping 2 index - ide1=onto_process1.getIdentifier4InstanceName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt1())); - ide2=onto_process2.getIdentifier4InstanceName(Utilities.getEntityLabelFromURI(map.getIRIStrEnt2())); - - - //We only consider classes - if (ide1<0 || ide2<0){ - LogOutput.print("Individuals not found in ontology."); - LogOutput.print("\t" + ide1 + " " + map.getIRIStrEnt1()); - LogOutput.print("\t" + ide2 + " " + map.getIRIStrEnt2()); - return; - } - - //So far only equivalences are considered - //if (map.getMappingDirection()==Utilities.EQ){ - mapping_manager.addInstanceMapping(ide1, ide2); - mapping_manager.addInstanceAnchorConfidence(ide1, ide2, map.getConfidence()); - //} - - - } - - - public void saveRepairedMappings(String outPutFileName){ - saveRepairedMappings(outPutFileName, OutPutFilesManager.AllFormats); - } - - - public void saveRepairedMappings(String outPutFileName, int format){ - - int dirMapping; - - OutPutFilesManager outPutFilesManager = new OutPutFilesManager(); - - int num_clean_mappings=0; - int num_clean_class_mappings=0; - int num_clean_dprop_mappings=0; - int num_clean_oprop_mappings=0; - int num_clean_instance_mappings=0; - - try { - outPutFilesManager.createOutFiles( - //logmap_mappings_path + "Output/mappings", - //path + "/" + file_name, - //outPutFileName + "/" + "repaired_mappings", - outPutFileName, - //OutPutFilesManager.AllFormats, - //OutPutFilesManager.OAEIFormat, - format, - onto_process1.getOntoIRI(), - onto_process1.getOntoIRI()); - - //if (Parameters.output_class_mappings){ - - for (int idea : mapping_manager.getLogMapMappings().keySet()){ - for (int ideb : mapping_manager.getLogMapMappings().get(idea)){ - - //This is important to keep compatibility with OAEI and Flat alignment formats - //The order of mappings is important - //For OWL output would be the same since mappings are axioms - if (mapping_manager.isId1SmallerThanId2(idea, ideb)){ - - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - dirMapping=Utilities.EQ; - } - else { - dirMapping=Utilities.L2R; - } - - num_clean_mappings++; - num_clean_class_mappings++; - - outPutFilesManager.addClassMapping2Files( - index.getIRIStr4ConceptIndex(idea), - index.getIRIStr4ConceptIndex(ideb), - dirMapping, - mapping_manager.getConfidence4Mapping(idea, ideb)); - } - else { - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - //Do nothing - } - else { - - num_clean_mappings++; - num_clean_class_mappings++; - - outPutFilesManager.addClassMapping2Files( - index.getIRIStr4ConceptIndex(ideb), - index.getIRIStr4ConceptIndex(idea), - Utilities.R2L, - mapping_manager.getConfidence4Mapping(idea, ideb)); - } - } - - - } - } - //} - - //if (Parameters.output_prop_mappings){ - - for (int ide1 : mapping_manager.getDataPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_dprop_mappings++; - - outPutFilesManager.addDataPropMapping2Files( - index.getIRIStr4DataPropIndex(ide1), - index.getIRIStr4DataPropIndex(mapping_manager.getDataPropertyAnchors().get(ide1)), - Utilities.EQ, - mapping_manager.getConfidence4DataPropertyAnchor(ide1, mapping_manager.getDataPropertyAnchors().get(ide1))//1.0 - ); - } - - for (int ide1 : mapping_manager.getObjectPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_oprop_mappings++; - - outPutFilesManager.addObjPropMapping2Files( - index.getIRIStr4ObjPropIndex(ide1), - index.getIRIStr4ObjPropIndex(mapping_manager.getObjectPropertyAnchors().get(ide1)), - Utilities.EQ, - mapping_manager.getConfidence4ObjectPropertyAnchor(ide1, mapping_manager.getObjectPropertyAnchors().get(ide1))//1.0 - ); - } - //} - - - - //if (Parameters.perform_instance_matching && Parameters.output_instance_mappings){ - - for (int ide1 : mapping_manager.getInstanceMappings().keySet()){ - for (int ide2 : mapping_manager.getInstanceMappings().get(ide1)){ - - num_clean_mappings++; - num_clean_instance_mappings++; - - outPutFilesManager.addInstanceMapping2Files( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - mapping_manager.getConfidence4InstanceMapping(ide1, ide2) - ); - - } - - } - //} - - - //mapping_manager.setStringAnchors(); - LogOutput.printAlways("Num repaired mappings: " + num_clean_mappings); - LogOutput.print("\tNum repaired class mappings: " + num_clean_class_mappings); - LogOutput.print("\tNum repaired object property mappings: " + num_clean_oprop_mappings); - LogOutput.print("\tNum repaired data property mappings: " + num_clean_dprop_mappings); - LogOutput.print("\tNum repaired instance mappings: " + num_clean_instance_mappings); - - outPutFilesManager.closeAndSaveFiles(); - - - } - catch (Exception e){ - System.err.println("Error saving mappings..."); - e.printStackTrace(); - } - - - } - - - - /** - * Returns the set of mappings that have been repaired using LogMap's repair facility - * @return - */ - public Set getCleanMappings(){ - return clean_mappings; - } - - /** - * Returns the input set of mappings (NOT repaired) - * @return - */ - public Set getInputMappings(){ - return input_mappings; - } - - /** - * Returns the real size of the repair: number of removed clauses - * @return - */ - public int getSizeOfRepair(){ - - int clauses = 0; - - for (int ide1 : mapping_manager.getConflictiveMappings().keySet()){ - clauses += mapping_manager.getConflictiveMappings().get(ide1).size(); - } - - return clauses; - - } - - - public void checkSatisfiabilityInputMappings() throws Exception { - checkSatisfiabilityMappings(input_mappings); - } - - public void checkSatisfiabilityCleanMappings() throws Exception { - checkSatisfiabilityMappings(clean_mappings); - } - - - public void checkSatisfiabilityMappings(Set mappings) throws Exception { - - OWLOntology mappins_owl_onto = getOWLOntology4GivenMappings(mappings); - - - SatisfiabilityIntegration.setTimeoutClassSatisfiabilityCheck(60); - - - SatisfiabilityIntegration sat_checker = new SatisfiabilityIntegration( - onto1, - onto2, - mappins_owl_onto, - true,//class sat - true,//Time_Out_Class - false); //use factory - - - LogOutput.print("Num unsat classes lead by repaired mappings using LogMap: " + sat_checker.getNumUnsatClasses()); - - } - - - - public OWLOntology getOWLOntology4CleanMappings() throws Exception { - return getOWLOntology4GivenMappings(clean_mappings); - } - - - - /** - * Returns the clean mappings as an OWLOntology object. - * @return - * @throws Exception - */ - public OWLOntology getOWLOntology4GivenMappings(Set mappings) throws Exception { - - OWLAlignmentFormat owlformat = new OWLAlignmentFormat(""); - - - for (MappingObjectStr mapping : mappings){ - - - if (mapping.getTypeOfMapping() == Utilities.INSTANCE){ - - owlformat.addInstanceMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getConfidence()); - } - - - else if (mapping.getTypeOfMapping() == Utilities.CLASSES){ - - - owlformat.addClassMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - } - - else if (mapping.getTypeOfMapping() == Utilities.OBJECTPROPERTIES){ - - owlformat.addObjPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - } - - else if (mapping.getTypeOfMapping() == Utilities.DATAPROPERTIES){ - - owlformat.addDataPropMapping2Output( - mapping.getIRIStrEnt1(), - mapping.getIRIStrEnt2(), - mapping.getMappingDirection(), - mapping.getConfidence()); - - } - - - }//end for mappings - - - return owlformat.getOWLOntology(); - - - } - - - - - - - - private void keepRepairedMappings(){ - - int dirMapping; - - int num_clean_mappings=0; - int num_clean_class_mappings=0; - int num_clean_dprop_mappings=0; - int num_clean_oprop_mappings=0; - int num_clean_instance_mappings=0; - - clean_mappings.clear(); - - try { - - for (int idea : mapping_manager.getLogMapMappings().keySet()){ - for (int ideb : mapping_manager.getLogMapMappings().get(idea)){ - - //This is important to keep compatibility with OAEI and Flat alignment formats - //The order of mappings is important - //For OWL output would be the same since mappings are axioms - if (mapping_manager.isId1SmallerThanId2(idea, ideb)){ - - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - dirMapping=Utilities.EQ; - } - else { - dirMapping=Utilities.L2R; - } - - num_clean_mappings++; - num_clean_class_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ConceptIndex(idea), - index.getIRIStr4ConceptIndex(ideb), - mapping_manager.getConfidence4Mapping(idea, ideb), - dirMapping, - Utilities.CLASSES)); - - } - else { - if (mapping_manager.isMappingAlreadyInList(ideb, idea)){ - //Do nothing - } - else { - - num_clean_mappings++; - num_clean_class_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ConceptIndex(ideb), - index.getIRIStr4ConceptIndex(idea), - mapping_manager.getConfidence4Mapping(idea, ideb), - Utilities.R2L, - Utilities.CLASSES)); - } - } - - - } - } - //} - - //if (Parameters.output_prop_mappings){ - - for (int ide1 : mapping_manager.getDataPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_dprop_mappings++; - - - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ConceptIndex(ide1), - index.getIRIStr4DataPropIndex(mapping_manager.getDataPropertyAnchors().get(ide1)), - mapping_manager.getConfidence4DataPropertyAnchor(ide1, mapping_manager.getDataPropertyAnchors().get(ide1)), - Utilities.EQ, - Utilities.DATAPROPERTIES)); - - - } - - for (int ide1 : mapping_manager.getObjectPropertyAnchors().keySet()){ - - num_clean_mappings++; - num_clean_oprop_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4ObjPropIndex(ide1), - index.getIRIStr4ObjPropIndex(mapping_manager.getObjectPropertyAnchors().get(ide1)), - mapping_manager.getConfidence4ObjectPropertyAnchor(ide1, mapping_manager.getObjectPropertyAnchors().get(ide1)), - Utilities.EQ, - Utilities.OBJECTPROPERTIES)); - } - //} - - - - //if (Parameters.perform_instance_matching && Parameters.output_instance_mappings){ - - for (int ide1 : mapping_manager.getInstanceMappings().keySet()){ - for (int ide2 : mapping_manager.getInstanceMappings().get(ide1)){ - - num_clean_mappings++; - num_clean_instance_mappings++; - - clean_mappings.add( - new MappingObjectStr( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - mapping_manager.getConfidence4InstanceMapping(ide1, ide2), - Utilities.EQ, - Utilities.INSTANCES)); - - } - - } - //} - - - //mapping_manager.setStringAnchors(); - //TODO uncomment - /*System.out.println("\tNum clean mappings: " + num_clean_mappings); - System.out.println("\t\tNum clean class mappings: " + num_clean_class_mappings); - System.out.println("\t\tNum clean object property mappings: " + num_clean_oprop_mappings); - System.out.println("\t\tNum clean data property mappings: " + num_clean_dprop_mappings); - System.out.println("\t\tNum clean instance mappings: " + num_clean_instance_mappings); - */ - - - - } - catch (Exception e){ - System.err.println("Error keeping mappings..."); - e.printStackTrace(); - } - - - } - - - - - - private static Set emptyMappings() throws Exception{ - - Set mappings = new HashSet(); - - - mappings.add(new MappingObjectStr( - "http://csu6325.cs.ox.ac.uk/ontologies/matching_21_05_2012/emptyOntology.owl#lala", - "http://csu6325.cs.ox.ac.uk/ontologies/matching_31_05_2012/ontology_31_05_2012__18_53_50_221#lala", - 1.0, - Utilities.EQ)); - - return mappings; - - - } - - - - /** - * - * @deprecated Use instead mappings manager reader - * @param file - * @return - * @throws Exception - */ - private static Set readMappings(String file) throws Exception{ - - - Set mappings = new HashSet(); - - ReadFile reader = new ReadFile(file); - - - String line; - String[] elements; - - line=reader.readLine(); - - int dir; - - while (line!=null) { - - if (line.indexOf("|")<0){ - line=reader.readLine(); - continue; - } - - elements=line.split("\\|"); - - if (elements.length<4) - continue; - - - if (elements[2].equals(">")){ - dir = Utilities.R2L; - } - else if (elements[2].equals("<")){ - dir = Utilities.L2R; - } - else { - dir = Utilities.EQ; - } - - - mappings.add(new MappingObjectStr(elements[0], elements[1], Double.valueOf(elements[3]), dir)); - - line=reader.readLine(); - } - - reader.closeBuffer(); - - - return mappings; - - - } - - - - - private static String getHelpMessage(){ - return "LogMap's repair facility requires 7 parameters:\n" + - "\t1. IRI ontology 1. e.g.: http://myonto1.owl or file:/C://myonto1.owl or file:/usr/local/myonto1.owl\n" + - "\t2. IRI ontology 2. e.g.: http://myonto2.owl or file:/C://myonto2.owl or file:/usr/local/myonto2.owl\n" + - "\t3. Format mappings e.g.: OWL or RDF or TXT\n" + - "\t4. Full IRI or full Path:\n" + - "\t\ta. Full IRI of input mappings if OWL format. e.g.: file:/C://mymappings.owl or file:/usr/local/mymappings.owl or http://mymappings.owl\n" + - "\t\tb. Full path of input mappings if formats RDF or TXT. e.g.: C://mymappings.rdf or /usr/local/mymappings.txt\n" + - "\t5. Full output path for the repaired mappings: e.g. /usr/local/output_path or C://output_path\n" + - "\t6. Extract modules for repair?: true or false\n" + - "\t7. Check satisfiability after repair using HermiT? true or false\n"; - //"\t4. Classify the input ontologies together with the mappings. e.g. true or false"; - } - - - - - - - /** - * @param args - */ - public static void main(String[] args) { - - - - try { - - String iri_onto1; - String iri_onto2; - String format_mappings; - String input_mappings_path; - String output_path; - boolean overlapping; - boolean satisfiability_check; - - MappingsReaderManager readermanager; - OntologyLoader loader1; - OntologyLoader loader2; - - /* - if (args.length==1){ - - if (args[0].toLowerCase().contains("help")){ - System.out.println("HELP:\n" + getHelpMessage()); - return; - } - - } - */ - - if (args.length!=7){ - System.out.println(getHelpMessage()); - return; - } - else{ - iri_onto1=args[0]; - iri_onto2=args[1]; - format_mappings=args[2]; - input_mappings_path=args[3]; - output_path=args[4]; - overlapping=Boolean.valueOf(args[5]); - satisfiability_check=Boolean.valueOf(args[6]); - - } - - - - LogOutput.printAlways("Loading ontologies..."); - loader1 = new OntologyLoader(iri_onto1); - loader2 = new OntologyLoader(iri_onto2); - LogOutput.printAlways("...Done"); - - - readermanager = new MappingsReaderManager(input_mappings_path, format_mappings); - - new LogMap2_RepairFacility( - loader1.getOWLOntology(), - loader2.getOWLOntology(), - readermanager.getMappingObjects(), - overlapping, - false, //always optimal? - satisfiability_check, - output_path + "/" + "mappings_repaired_with_LogMap"); - - - - - } - catch (Exception e){ - e.printStackTrace(); - } - - - } - - - - - - - /** - * Comparator based on the mapping confidence - * @author Ernesto - * - */ - private class MappingComparator implements Comparator { - - /** - * We order by confidence - */ - public int compare(MappingObjectStr m1, MappingObjectStr m2) { - - - if (m1.getConfidence(). - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - - -import java.util.Calendar; - -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.model.OWLOntology; - -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.indexing.ReasonerBasedIndexManager; -import uk.ac.ox.krr.logmap2.indexing.OntologyProcessing; -import uk.ac.ox.krr.logmap2.interactive.InteractiveProcess; -import uk.ac.ox.krr.logmap2.interactive.InteractiveProcessAmbiguity; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OWLAlignmentFormat; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.mappings.CandidateMappingManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.overlapping.LexicalOverlappingExtractor; -import uk.ac.ox.krr.logmap2.overlapping.NoOverlappingExtractor; -import uk.ac.ox.krr.logmap2.overlapping.OverlappingExtractor; -import uk.ac.ox.krr.logmap2.reasoning.ReasonerManager; -import uk.ac.ox.krr.logmap2.reasoning.SatisfiabilityIntegration; -import uk.ac.ox.krr.logmap2.repair.AnchorsAssessmentFullReasoning; -import uk.ac.ox.krr.logmap2.statistics.StatisticsManager; -import uk.ac.ox.krr.logmap2.utilities.PrecomputeIndexCombination; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - - - -/** - * This version of LogMap implements full reasoning capabilities - * @author root - * - */ -public class LogMap_Full { - - private OverlappingExtractor overlappingExtractor; - - private IndexManager index; - - private OntologyProcessing onto_process1; - private OntologyProcessing onto_process2; - - private MappingManager mapping_extractor; - - private AnchorsAssessmentFullReasoning anchor_assessment; - - private InteractiveProcess interactiveProcessManager; - - //For precission and recall - private Set mappings_gs = new HashSet(); - - private LexicalUtilities lexicalUtilities = new LexicalUtilities(); - - private String prefix4IRIs; - - private String gs_mappings; - - long init_global, init, fin; - - - private int reasoner_id = ReasonerManager.HERMIT; - - - - - /** - * - */ - public LogMap_Full( - String iri1_str, - String iri2_str, - String gs_mappings, - int ReasonerID) throws Exception{ - - this.reasoner_id = ReasonerID; - this.gs_mappings = gs_mappings; - //this.interactivityFile=interactivityFile; - - - init_global = init = Calendar.getInstance().getTimeInMillis(); - - //INIT LOGMAP: lex and precomp integer combinations - InitLogMap(); - - - - //Overlapping estimation - OverlappingEstimation(iri1_str, iri2_str); - - - //Indexes lexicon (IF creation) and structure - IndexLexiconAndStructure(); - - - - init = Calendar.getInstance().getTimeInMillis(); - //Only for statistical purposes (and interactivity) - if (!gs_mappings.equals("")){ - loadMappingsGS(); - } - //printStatisticsGoldStandard(); - - - - //EXTRACT, CLEAN ANCHORS and INDEX INTLABELLING - LogOutput.printAlways("\n\nCLEANING ANCHORS"); - LogOutput.printAlways("---------------------------"); - createAndCleanAnchors(); - - - //Extract new candidates, clean them and index labelling - LogOutput.printAlways("\n\nCLEANING CANDIDATES 1"); - LogOutput.printAlways("---------------------------"); - createCandidateMappings(); - mapping_extractor.printStatisticsMappingEvaluation(); - - - //Anchors should be non ambiguous for interval labelling index - //LogOutput.print("AMBIGUOUS ANCHORS: " + areAnchorsdAmbiguous()); - - - - StatisticsManager.setPrecisionAndRecallAnchors(mapping_extractor.getStringGoldStandardAnchors().size()); - //Statistics before interactivity - StatisticsManager.printStatisticsLogMap_mappings(); - - - - //Before last cleaning! - mapping_extractor.createObjectPropertyAnchors(); - mapping_extractor.createDataPropertyAnchors(); - - - //Delete inverted files for properties - onto_process1.clearInvertedFiles4properties(); - onto_process2.clearInvertedFiles4properties(); - - - - - //INTERACTIVE PROCESS - //Also weakened in previous iterations - - LogOutput.printAlways("\n\nCLEANING CANDIDATES 2"); - LogOutput.printAlways("---------------------------"); - createMappingsInteractiveProcess(false); - - - - - //OUTPUT - //P&R wrt GS - if (!gs_mappings.equals("")){ - getPrecisionAndRecallMappings(); - } - - - LogOutput.printAlways("Average time taxonomic queries: " + - index.getAvgTime4TaxCalls() + ". Total: " + index.getTime4TaxCalls() + ". Num calls: " + index.getNumberOfTaxCalls()); - - LogOutput.printAlways("Average time disjointness queries: " + - index.getAvgTime4DisjCalls() + ". Total: " + index.getTime4DisjCalls() + ". Num calls: " + index.getNumberOfDisjCalls()); - - - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.printAlways("TOTAL TIME (s): " + (float)((double)fin-(double)init_global)/1000.0); - - - //Clean index strcutires and others... - //Only if no cleaning is necessary anymore - //index.clearTaxonomicalStructures(); - - impactIntegration(); - - - } - - private void impactIntegration() throws Exception { - - OWLOntology mappings_onto = getOWLOntology4Mappings(); - - //We only have TBOX axioms - - System.out.println("ONTO 1 axioms: " + overlappingExtractor.getTBOXOverlappingOnto1().size()); - System.out.println("ONTO 2 axioms: " + overlappingExtractor.getTBOXOverlappingOnto2().size()); - System.out.println("Mappings: " + mappings_onto.getAxiomCount()); - - - - SatisfiabilityIntegration sat_checker = new SatisfiabilityIntegration( - overlappingExtractor.getTBOXOverlappingOnto1(), - overlappingExtractor.getTBOXOverlappingOnto2(), - mappings_onto.getAxioms(), - false,//Time_Out_Class - false); //factory - - System.out.println("Num unsat classes: " + sat_checker.getNumUnsatClasses()); - } - - - /** - * This method will be used to build an OWLOntology object to evaluate the impact - * - * @return - * @throws Exception - */ - private OWLOntology getOWLOntology4Mappings() throws Exception{ - - int ident2; - - OWLAlignmentFormat owlformat = new OWLAlignmentFormat(""); - - int dir_mapping; - - for (int ide1 : getClassMappings().keySet()){ - for (int ide2 : getClassMappings().get(ide1)){ - - dir_mapping = getDirClassMapping(ide1, ide2); - - if (dir_mapping!=Utilities.NoMap){ - - //System.out.println(getIRI4ConceptIdentifier(ide1)); - //System.out.println(getIRI4ConceptIdentifier(ide2)); - //System.out.println(dir_mapping); - - if (dir_mapping!=Utilities.R2L){ - owlformat.addClassMapping2Output( - getIRI4ConceptIdentifier(ide1), - getIRI4ConceptIdentifier(ide2), - dir_mapping, - getConfidence4ConceptMapping(ide1, ide2) - ); - } - else{ - owlformat.addClassMapping2Output( - getIRI4ConceptIdentifier(ide2), - getIRI4ConceptIdentifier(ide1), - dir_mapping, - getConfidence4ConceptMapping(ide1, ide2) - ); - } - } - } - } - - for (int ide1 : getDataPropMappings().keySet()){ - owlformat.addDataPropMapping2Output( - getIRI4DataPropIdentifier(ide1), - getIRI4DataPropIdentifier(getDataPropMappings().get(ide1)), - Utilities.EQ, - 1.0 - ); - } - - for (int ide1 : getObjectPropMappings().keySet()){ - - owlformat.addObjPropMapping2Output( - getIRI4ObjectPropIdentifier(ide1), - getIRI4ObjectPropIdentifier(getObjectPropMappings().get(ide1)), - Utilities.EQ, - 1.0 - ); - } - - return owlformat.getOWLOntology(); - - } - - - public Map> getClassMappings(){ - return mapping_extractor.getLogMapMappings(); - - } - - public int getDirClassMapping(int ide1, int ide2){ - return mapping_extractor.getDirMapping(ide1, ide2); - } - - - public String getIRIOntology1(){ - return onto_process1.getOntoIRI(); - } - - public String getIRIOntology2(){ - return onto_process2.getOntoIRI(); - } - - public Map getDataPropMappings(){ - return mapping_extractor.getDataPropertyAnchors(); - } - - - public Map getObjectPropMappings(){ - return mapping_extractor.getObjectPropertyAnchors(); - } - - - public double getConfidence4ConceptMapping(int ide1, int ide2){ - return mapping_extractor.getConfidence4Mapping(ide1, ide2); - } - - public double getConfidence4DataPropConceptMapping(int ide1, int ide2){ - return mapping_extractor.getConfidence4DataPropertyAnchor(ide1, ide2); - } - - public double getConfidence4ObjectPropConceptMapping(int ide1, int ide2){ - return mapping_extractor.getConfidence4ObjectPropertyAnchor(ide1, ide2); - } - - - public String getIRI4ConceptIdentifier(int ide){ - return index.getIRIStr4ConceptIndex(ide); - } - - public String getIRI4DataPropIdentifier(int ide){ - return index.getIRIStr4DataPropIndex(ide); - } - - public String getIRI4ObjectPropIdentifier(int ide){ - return index.getIRIStr4ObjPropIndex(ide); - } - - - private void InitLogMap() throws Exception{ - - //Show print outs - LogOutput.showOutpuLog(false); - - - lexicalUtilities.loadStopWords(); - - if (Parameters.use_umls_lexicon) - lexicalUtilities.loadUMLSLexiconResources(); - - lexicalUtilities.setStemmer(); //creates stemmer object (Paice by default) - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time initializing lexical utilities (s): " + (float)((double)fin-(double)init)/1000.0); - - - //init = Calendar.getInstance().getTimeInMillis(); - //PrecomputeIndexCombination.preComputeIdentifierCombination(); - //fin = Calendar.getInstance().getTimeInMillis(); - //LogOutput.print("Time precomputing index combinations (s): " + (float)((double)fin-(double)init)/1000.0); - - } - - - - private void OverlappingEstimation(String iri1_str, String iri2_str) throws Exception{ - - LogOutput.print("OVERLAPPING"); - init = Calendar.getInstance().getTimeInMillis(); - - if (!Parameters.use_overlapping){ - overlappingExtractor = new NoOverlappingExtractor(); - } - else{ - overlappingExtractor = new LexicalOverlappingExtractor(lexicalUtilities, true); - } - - - overlappingExtractor.createOverlapping(iri1_str, iri2_str); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time extracting overlapping (s): " + (float)((double)fin-(double)init)/1000.0); - } - - - - private void IndexLexiconAndStructure() throws Exception{ - - //Create Index and new Ontology Index... - index = new ReasonerBasedIndexManager(); - - - //Process ontologies: lexicon and taxonomy (class) and IFs - onto_process1 = new OntologyProcessing(overlappingExtractor.getOverlappingOnto1(), index, lexicalUtilities); - onto_process2 = new OntologyProcessing(overlappingExtractor.getOverlappingOnto2(), index, lexicalUtilities); - - - //Extracts lexicon - init = Calendar.getInstance().getTimeInMillis(); - onto_process1.precessLexicon(); - onto_process2.precessLexicon(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time extracting lexicon and IF (s): " + (float)((double)fin-(double)init)/1000.0); - - //I guess can be deleted here - lexicalUtilities.clearStructures(); - - - init = Calendar.getInstance().getTimeInMillis(); - //Init Mapping extractor: intersects IF and extract IF weak - //mapping_extractor = new LexicalMappingExtractor(index, onto_process1, onto_process2); - mapping_extractor = new CandidateMappingManager(index, onto_process1, onto_process2); - - //Statistics - StatisticsManager.reInitValues(); - StatisticsManager.setMappingManager(mapping_extractor); - - - mapping_extractor.intersectInvertedFiles(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time intersecting IF and extracting IF weak (s): " + (float)((double)fin-(double)init)/1000.0); - - //Clear ontology stemmed labels - onto_process1.clearStemmedLabels(); - onto_process2.clearStemmedLabels(); - - //Extracts Taxonomy - //Also extracts A^B->C - init = Calendar.getInstance().getTimeInMillis(); - onto_process1.setTaxonomicData(); - onto_process2.setTaxonomicData(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time extracting structural information (s): " + (float)((double)fin-(double)init)/1000.0); - - - //We only need the axioms to create merged ontology - overlappingExtractor.keepOnlyTBOXOverlapping(); - - - //TODO Remove ide2class and class2ide?? - //We keep ontology things - //onto_process1.clearOntologyRelatedInfo(); - //onto_process2.clearOntologyRelatedInfo(); - - - - - //We first create weak anchors to be used for scopes - init = Calendar.getInstance().getTimeInMillis(); - mapping_extractor.extractAllWeakMappings(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time creating all weak anchors (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Extract subsets from all weak mappings to evaluate later - //---------------------------------------------------------- - init = Calendar.getInstance().getTimeInMillis(); - mapping_extractor.extractCandidatesSubsetFromWeakMappings(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time creating candidate subset of weak anchors (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Remove structures used for frequency extractor - - //Frequency structures - onto_process1.clearFrequencyRelatedStructures(); - onto_process2.clearFrequencyRelatedStructures(); - index.clearSingleWordInvertedIndex(); - - //Only used by frequency-like weak mappings - index.clearStemmedAlternativeLabels4Classes(); - - - } - - - - - private void createAndCleanAnchors() throws Exception{ - - //CREATE ANCHORS - //------------------------ - init = Calendar.getInstance().getTimeInMillis(); - mapping_extractor.createAnchors(); - - //Create different groups: "exact", ambiguity and no_scope (different sets...). We will add them later (almost done) - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time creating anchors (s): " + (float)((double)fin-(double)init)/1000.0); - - - countAnchors(); - - - //ANCHORS ASSESSMENT - //------------------------ - - - - init = Calendar.getInstance().getTimeInMillis(); - anchor_assessment = new AnchorsAssessmentFullReasoning( - reasoner_id, index, mapping_extractor, overlappingExtractor, true); - - //For statistics (Uncomment) - //anchor_assessment.checkUnsatisfiability(); - //anchor_assessment.clearStructures(); - - anchor_assessment.classifyAndRepairUnsatisfiability(); - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time cleaning anchors with DL reasoner (s): " + (float)((double)fin-(double)init)/1000.0); - - //After repairing exact - mapping_extractor.setExactAsFixed(true); - - - - //SET REASONER FOR INDEX - //------------------------ - index.setJointReasoner(anchor_assessment.getReasoner()); - - - countAnchors(); - - } - - - private void countAnchors(){ - - int numMappings = 0; - - for (int ide1: mapping_extractor.getLogMapMappings().keySet()){ - for (int ide2: mapping_extractor.getLogMapMappings().get(ide1)){ - - if (ide10 && index2>0){ //IN CASE IT DOES NOT EXISTS - - mapping_extractor.addMapping2GoldStandardAnchors(index1, index2); - - } - - mappings_gs.add(new MappingObjectStr(elements[0], elements[1])); - mapping_extractor.getStringGoldStandardAnchors().add(new MappingObjectStr(elements[0], elements[1])); - - - line=reader.readLine(); - } - - reader.closeBuffer(); - - } - - - private void getPrecisionAndRecallMappings() throws Exception{ - - - Set intersection; - - - double precision; - double recall; - - mapping_extractor.setStringAnchors(); - - - StatisticsManager.setMFinal(mapping_extractor.getStringLogMapMappings().size()); - LogOutput.print("MAPPINGS: " + mapping_extractor.getStringLogMapMappings().size()); - - - //ALL UMLS MAPPINGS - intersection=new HashSet(mapping_extractor.getStringLogMapMappings()); - intersection.retainAll(mappings_gs); - - StatisticsManager.setGoodMFinal(intersection.size()); - - - precision=((double)intersection.size())/((double)mapping_extractor.getStringLogMapMappings().size()); - recall=((double)intersection.size())/((double)mappings_gs.size()); - - - System.out.println("MAPPINGS: " + mapping_extractor.getStringLogMapMappings().size()); - System.out.println("WRT GS MAPPINGS"); - System.out.println("\tPrecision Mappings: " + precision); - System.out.println("\tRecall Mapping: " + recall); - System.out.println("\tF measure: " + (2*recall*precision)/(precision+recall)); - - LogOutput.print("WRT GS MAPPINGS"); - LogOutput.print("\tPrecision Mappings: " + precision); - LogOutput.print("\tRecall Mapping: " + recall); - LogOutput.print("\tF measure: " + (2*recall*precision)/(precision+recall)); - - - - Set difference; - difference=new HashSet(mappings_gs); - difference.removeAll(mapping_extractor.getStringLogMapMappings()); - //LogOutput.print("Difference in GS: " + difference.size()); - System.out.println("Difference in GS: " + difference.size()); - - Set difference2; - difference2=new HashSet(mapping_extractor.getStringLogMapMappings()); - difference2.removeAll(mappings_gs); - //LogOutput.print("Difference in Candidates: " + difference2.size()); - System.out.println("Difference in Candidates: " + difference2.size()); - - - StatisticsManager.setMMissing(difference.size()); - - } - - - - - /** - * @param args - */ - public static void main(String[] args) { - - //long init, fin; - - String uri1=""; - String uri2=""; - String gs_mappings=""; - - int ontopair; - - int reasoner_id; - - /*public static int FMA2NCI=0; - public static int FMA2SNOMED=1; - public static int SNOMED2NCI=2; - public static int MOUSE2HUMAN=5;*/ - - if (args.length==2){ - ontopair=Integer.valueOf(args[0]); - reasoner_id=Integer.valueOf(args[1]); - - - LogOutput.print("Ontology pair: " + args[0] + " " + args[1]); - - } - - else if (args.length==4){ - - uri1 = args[0]; - uri2 = args[1]; - - gs_mappings = args[2]; - reasoner_id=Integer.valueOf(args[3]); - - ontopair=-1; - - - LogOutput.print("Ontology pair: " + uri1 + " " + uri2 + " " + gs_mappings + " " + reasoner_id); - - - - - } - - else{ - //if (args.length!=2){ - - reasoner_id = ReasonerManager.HERMIT; - //reasoner_id = ReasonerManager.PELLET; - //reasoner_id = ReasonerManager.FACTpp; - //reasoner_id = ReasonerManager.ELK; - //reasoner_id = ReasonerManager.TrOWL; - - ontopair=Utilities.MOUSE2HUMAN; - - //ontopair=Utilities.FMA2NCI; - //ontopair=Utilities.NCIpeque2FMA; - //ontopair=Utilities.NCI2FMApeque; - //ontopair=Utilities.SNOMED2LUCADA; - //ontopair=Utilities.NCI2LUCADA; - //ontopair=Utilities.FMA2LUCADA; - - //ontopair=Utilities.FMA2SNOMED; - //ontopair=Utilities.SNOMED2NCI; - - //ontopair=8; - - - - - } - - - - if (ontopair==Utilities.FMA2NCI){ - - - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_whole_ontology.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_big_overlapping_nci.owl"; - //uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_big_overlapping_fma.owl"; - - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/FMA_bigoverlapping_nci.owl"; - //uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/NCI_bigoverlapping_fma.owl"; - - - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/FMA_overlapping_nci.owl"; - //uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/NCI_overlapping_fma.owl"; - - - //old - //uri1= "http://seals-test.sti2.at/tdrs-web/testdata/persistent/cf0378d9-da30-4b58-b937-192028ed4961/1dc20ac1-400c-4c01-afc1-1e0e80f16ace/suite/original-fma-c-nci-c/component/source"; - //uri2= "http://seals-test.sti2.at/tdrs-web/testdata/persistent/cf0378d9-da30-4b58-b937-192028ed4961/1dc20ac1-400c-4c01-afc1-1e0e80f16ace/suite/original-fma-c-nci-c/component/target"; - - //uri1= "http://seals-test.sti2.at/tdrs-web/testdata/persistent/cf0378d9-da30-4b58-b937-192028ed4961/a9fe4a9b-54c0-4ecf-bdfe-f405cf72193d/suite/original-fma-c-nci-c/component/source"; - //uri2= "http://seals-test.sti2.at/tdrs-web/testdata/persistent/cf0378d9-da30-4b58-b937-192028ed4961/a9fe4a9b-54c0-4ecf-bdfe-f405cf72193d/suite/original-fma-c-nci-c/component/target"; - - //uri1 = "http://seals-test.sti2.at/tdrs-web/testdata/persistent/cf0378d9-da30-4b58-b937-192028ed4961/a9fe4a9b-54c0-4ecf-bdfe-f405cf72193d/suite/original-fma-a-nci-a/component/source"; - //uri2 = "http://seals-test.sti2.at/tdrs-web/testdata/persistent/cf0378d9-da30-4b58-b937-192028ed4961/a9fe4a9b-54c0-4ecf-bdfe-f405cf72193d/suite/original-fma-a-nci-a/component/target"; - - - - //uri1_out= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/FMA_bigoverlapping_nci.owl"; - //uri2_out= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/NCI_bigoverlapping_fma.owl"; - - gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_FMA_NCI_cleantDG.txt"; - //gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_FMA_NCI_dirty.txt"; - - - } - else if (ontopair==Utilities.FMA2SNOMED){ - - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/FMADL_2_0_with_synonyms.owl"; - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_whole_ontology.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snomed20090131_replab.owl"; - - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/FMA_bigoverlapping_snmd.owl"; - //uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/SNMD_bigoverlapping_fma.owl"; - - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2snmd_dataset/oaei2012_FMA_big_overlapping_snomed.owl"; - //uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2snmd_dataset/oaei2012_SNOMED_big_overlapping_fma.owl"; - - - //uri1_out= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/FMA_bigoverlapping_snmd.owl"; - //uri2_out= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/SNMD_bigoverlapping_fma.owl"; - - - - gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_FMA_SNOMED_cleantDG.txt"; - //gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_FMA_SNOMED_dirty.txt"; - - - - } - else if (ontopair==Utilities.SNOMED2NCI){ - - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snomed20090131_replab.owl"; - //uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/NCI_Thesaurus_08.05d_with_synonyms.owl";// - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - - gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_SNOMED_NCI_cleantDG.txt"; - //gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_SNOMED_NCI_dirty.txt"; - - - } - else if (ontopair==Utilities.MOUSE2HUMAN){ - - //interactivityFile = "simulationInteractivityMouse.txt"; - - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/mouse_anatomy_2010.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/nci_anatomy_2010.owl"; - - gs_mappings = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/GSAll_Anatomy_2010.txt"; - - } - - - else if (ontopair==Utilities.SNOMED2LUCADA){ - - //interactivityFile = "simulationInteractivitySNMD2LUCADA.txt"; - - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/snomed20090131_replab.owl"; - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/LUCADA/snomed20110131_replab.owl"; - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/LUCADA/snomed20110131_replab_with_ids.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/LUCADA/LUCADAOntology15September2011.owl"; - - - gs_mappings = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/LUCADA/references_to_snomed.txt"; - - - } - - else if (ontopair==Utilities.NCI2LUCADA){ - - //interactivityFile = "simulationInteractivityNCI2LUCADA.txt"; - - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/LUCADA/LUCADAOntology15September2011.owl"; - - - gs_mappings = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/LUCADA/references_to_nci.txt"; - - - } - - else { - //Do nothing - } - - - - - - try{ - //init = Calendar.getInstance().getTimeInMillis(); - - new LogMap_Full( - uri1, - uri2, - gs_mappings, - reasoner_id - ); - - //fin = Calendar.getInstance().getTimeInMillis(); - //LogOutput.print("TOTAL TIME (s): " + (float)((double)fin-(double)init)/1000.0); - } - catch (Exception e){ - e.printStackTrace(); - } - - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/OntologyLoader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/OntologyLoader.java deleted file mode 100644 index de8ff0d1a9..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/OntologyLoader.java +++ /dev/null @@ -1,386 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (Universit y of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - -//import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.util.DLExpressivityChecker; - -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.AddAxiom; - -import org.semanticweb.owlapi.profiles.OWLProfileReport; -import org.semanticweb.owlapi.profiles.OWLProfileViolation; - - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.reasoning.profiles.CheckOWL2Profile; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -import java.util.Calendar; -import java.util.List; -import java.util.HashSet; -import java.util.Set; - - - -/** - * This class will manage the loaded ontology - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 6, 2011 - * - */ -public class OntologyLoader { - - - protected OWLDataFactory dataFactory; - protected OWLOntologyManager managerOnto; - protected OWLOntology onto; - - protected String iri_onto_str; - - protected int size_signature; - protected int size_classes; - //protected int size_axioms; - - protected Set axiomSet = new HashSet(); - - private String DLNameOnto; - - private CheckOWL2Profile profileChecker; - - private boolean inOWL2DL; - private boolean inOWL2EL; - - //We only report violations for OWL 2 DL - //private List listViolatiosnOWL2DL; - private OWLProfileReport owl2DLProfileReport; - - private boolean keepLogicalAxiomsOnly; - - - public OntologyLoader(String phy_iri_onto, boolean keepLogicalAxiomsOnly) throws OWLOntologyCreationException{ - //managerOnto = OWLManager.createOWLOntologyManager(); - managerOnto = SynchronizedOWLManager.createOWLOntologyManager(); - dataFactory=managerOnto.getOWLDataFactory(); - this.keepLogicalAxiomsOnly=keepLogicalAxiomsOnly; - loadOWLOntology(phy_iri_onto); - } - - public OntologyLoader(String phy_iri_onto) throws OWLOntologyCreationException{ - //managerOnto = OWLManager.createOWLOntologyManager(); - this(phy_iri_onto, false); - } - - - public OntologyLoader(OWLOntology given_onto) throws OWLOntologyCreationException{ - //managerOnto = OWLManager.createOWLOntologyManager(); - managerOnto = SynchronizedOWLManager.createOWLOntologyManager(); - dataFactory=managerOnto.getOWLDataFactory(); - setOWLOntology(given_onto); - } - - - - private String getURIFromClasses(OWLOntology ontology){ - for (OWLClass cls : ontology.getClassesInSignature()){ - return Utilities.getNameSpaceFromURI(cls.getIRI().toString()); - } - - //Just in case we return default IRI - return "http://logmap.cs.ox.ac.uk/ontology.owl"; - - } - - - /** - * Sets the given OWLOntology to be used by LogMap - * @param given_onto - * @throws OWLOntologyCreationException - */ - public void setOWLOntology(OWLOntology given_onto) throws OWLOntologyCreationException{ - - try { - - //TODO is this necessary to allow modifications of the ontology??? - - //managerOnto.setSilentMissingImportsHandling(true); - - if (given_onto.getOntologyID().getOntologyIRI()!=null){ - iri_onto_str=given_onto.getOntologyID().getOntologyIRI().toString(); //Give this iri to module - } - else { - iri_onto_str=getURIFromClasses(given_onto); - } - - Set axioms = new HashSet(); - axioms.addAll(given_onto.getAxioms()); - - try{ - //Get import closure - for (OWLOntology imported_onto : given_onto.getImportsClosure()){ - axioms.addAll(imported_onto.getAxioms()); - } - } - catch (Exception e){} - - - onto = managerOnto.createOntology(axioms, IRI.create(iri_onto_str)); - - - LogOutput.print("IRI: " + iri_onto_str); - - - - - size_signature = onto.getSignature(true).size(); - size_classes = onto.getClassesInSignature(true).size(); - - - //We add dummy axiom - if (size_classes==0){ - addDummyAxiom2Ontology(); - } - } - - catch(Exception e){ - System.err.println("Error creating OWL ontology 4 LogMap: " + e.getMessage()); - e.printStackTrace(); - throw new OWLOntologyCreationException(); - } - - - } - - - public void loadOWLOntology(String phy_iri_onto) throws OWLOntologyCreationException{ - - try { - - //If import cannot be loaded - //TODO: deprecated?? - managerOnto.setSilentMissingImportsHandling(true); - - onto = managerOnto.loadOntology(IRI.create(phy_iri_onto)); - - - - //The preclassification with condor has no ontology id - if (onto.getOntologyID().getOntologyIRI()!=null){ - iri_onto_str=onto.getOntologyID().getOntologyIRI().toString(); //Give this iri to module - } - else { - iri_onto_str=getURIFromClasses(onto); - } - - - LogOutput.print("IRI: " + iri_onto_str); - - - - - size_signature = onto.getSignature(true).size(); - size_classes = onto.getClassesInSignature(true).size(); - - - //We add dummy axiom - if (size_classes==0){ - addDummyAxiom2Ontology(); - } - - - //Important when reasoning with the integrated ontology from LogMap webservice - if (keepLogicalAxiomsOnly){ - Set filteredAxioms = new HashSet(); - filteredAxioms.addAll(onto.getTBoxAxioms(true)); - filteredAxioms.addAll(onto.getRBoxAxioms(true)); - filteredAxioms.addAll(onto.getABoxAxioms(true)); - managerOnto.removeOntology(onto); - onto = managerOnto.createOntology(filteredAxioms, - IRI.create(iri_onto_str)); - } - - //LogOutput.print(iri_onto); - - //EXPRESSIVITY ontology - //Used in webservice - try{ - Set importsClosure = managerOnto.getImportsClosure(onto); - DLExpressivityChecker checker = new DLExpressivityChecker(importsClosure); - DLNameOnto = checker.getDescriptionLogicName(); - - profileChecker = new CheckOWL2Profile(onto); - - owl2DLProfileReport = profileChecker.getReport4OWL2DL(); - - if (!owl2DLProfileReport.isInProfile()){ - inOWL2DL=false; - inOWL2EL=false; - } - else{ - inOWL2DL=true; - //In DL but may be not in EL - inOWL2EL = profileChecker.getReport4OWL2EL().isInProfile(); - } - } - catch (Exception e){ - LogOutput.printError("Error checking DL expressivity: " + e.getMessage()); - } - - - - } - catch(Exception e){ - System.err.println("Error loading OWL ontology: " + e.getMessage()); - //e.printStackTrace(); - throw new OWLOntologyCreationException(); - } - } - - - public String getDLNameOntology(){ - return DLNameOnto; - } - - - public boolean isOntologyInOWL2DL(){ - return inOWL2DL; - } - - public boolean isOntologyInOWL2EL(){ - return inOWL2EL; - } - - public List getOWL2DLProfileViolation(){ - return owl2DLProfileReport.getViolations(); - } - - - - public void addDummyAxiom2Ontology(){ - - OWLClass dummycls = dataFactory.getOWLClass(IRI.create("http://logmap.cs.ox.ac.uk/ontologies#TopClass")); - - - managerOnto.applyChange( - new AddAxiom( - onto, - dataFactory.getOWLDeclarationAxiom(dummycls))); - - - managerOnto.applyChange( - new AddAxiom( - onto, - dataFactory.getOWLSubClassOfAxiom( - dummycls, - dataFactory.getOWLThing()))); - } - - - - - public void createAxiomSet(){ - - //TODO DO NOT delete any of these lines - axiomSet.addAll(onto.getAxioms()); //Add All axioms. This line also includes annotations. - axiomSet.addAll(onto.getTBoxAxioms(true));//also imports closure... - axiomSet.addAll(onto.getABoxAxioms(true)); - axiomSet.addAll(onto.getRBoxAxioms(true)); - - //Original size - //size_axioms = axiomSet.size(); - - } - - public void clearAxiomSet(){ - axiomSet.clear(); - } - - public Set getAxiomSet(){ - return axiomSet; - } - - - public void clearOntology(){ - - managerOnto.removeOntology(onto); - onto=null; - managerOnto=null; - } - - - public OWLOntologyManager getOWLOntologyManager(){ - return managerOnto; - } - - public OWLOntology getOWLOntology(){ - return onto; - } - - public String getOntologyIRIStr(){ - return iri_onto_str; - } - - public IRI getOntologyIRI(){ - return IRI.create(iri_onto_str); - } - - - public Set getClassesInSignature(){ - return onto.getClassesInSignature(true);//With imports!! - } - - public int getSignatureSize(){ - return size_signature; - } - - public int getClassesInSignatureSize(){ - return size_classes; - } - - public void applyChanges(List listchanges){ - managerOnto.applyChanges(listchanges); - } - - public OWLDataFactory getDataFactory(){ - return dataFactory; - } - - - public void saveOntology(String phy_iri_onto) throws Exception{ - - managerOnto.saveOntology(onto, new RDFXMLOntologyFormat(), IRI.create(phy_iri_onto)); - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/Parameters.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/Parameters.java deleted file mode 100644 index ec903b80bd..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/Parameters.java +++ /dev/null @@ -1,710 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.multilingual.TranslatorManager; - -import java.util.Set; -import java.util.HashSet; -import java.io.File; - -public class Parameters { - - public static String deprecated_uri = "http://www.w3.org/2002/07/owl#deprecated"; - - public static String rdf_label_uri = "http://www.w3.org/2000/01/rdf-schema#label"; - public static String rdf_comment_uri = "http://www.w3.org/2000/01/rdf-schema#comment"; - - private static String skos_label_uri = "http://www.w3.org/2004/02/skos/core#prefLabel"; - private static String skos_altlabel_uri = "http://www.w3.org/2004/02/skos/core#altLabel"; - - private static String SYN_synonym = "http://purl.bioontology.org/ontology/SYN#synonym"; - - private static String EFO_synonym = "http://www.ebi.ac.uk/efo/alternative_term"; - - private static String foaf_name_uri = "http://xmlns.com/foaf/0.1/name"; - - private static String NCI_synonym = "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#FULL_SYN"; - private static String OBO_synonym = "http://purl.obolibrary.org/obo/synonym"; - private static String CSEO_synonym = "http://scai.fraunhofer.de/CSEO#Synonym"; - - - private static String BIRNLEX_prefLabel = "http://bioontology.org/projects/ontologies/birnlex#preferred_label"; - private static String BIRNLEX_synonym = "http://bioontology.org/projects/ontologies/birnlex#synonyms"; - - - - private static String hasRelatedSynonym_uri = "http://www.geneontology.org/formats/oboInOwl#hasRelatedSynonym"; - private static String hasExactSynonym_uri = "http://www.geneontology.org/formats/oboInOwl#hasExactSynonym"; - - private static String hasRelatedSynonym_uri2 = "http://www.geneontology.org/formats/oboInOWL#hasRelatedSynonym"; - private static String hasExactSynonym_uri2 = "http://www.geneontology.org/formats/oboInOWL#hasExactSynonym"; - - private static String nci_synonym_uri = "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#Synonym"; - private static String fma_synonym_uri="http://bioontology.org/projects/ontologies/fma/fmaOwlDlComponent_2_0#Synonym"; - private static String hasDefinition_uri="http://www.geneontology.org/formats/oboInOwl#hasDefinition"; - private static String xbrl_label_uri="http://www.xbrl.org/2003/role/label"; - - - - - - - - - - private static String name_dprop_im_uri = "http://oaei.ontologymatching.org/2012/IIMBTBOX/name"; - private static String article_dprop_im_uri = "http://oaei.ontologymatching.org/2012/IIMBTBOX/article"; - - private static String has_value_dprop_im_uri = "http://www.instancematching.org/IIMB2012/ADDONS#has_value"; - - private static String article_oprop_im_uri = "http://www.instancematching.org/IIMB2012/ADDONS#article"; - private static String name_oprop_im_uri = "http://www.instancematching.org/IIMB2012/ADDONS#name"; - - - //2013 - private static String population_dprop_im_uri = "http://dbpedia.org/ontology/populationTotal"; - private static String birthName_dprop_im_uri = "http://dbpedia.org/ontology/birthName"; - - private static String label_oprop_im_uri = "http://www.instancematching.org/label"; - private static String curriculum_oprop_im_uri = "http://www.instancematching.org/curriculum"; - private static String places_oprop_im_uri = "http://www.instancematching.org/places"; - - //Other - private static String abstract_dprop_im_uri = "http://dbpedia.org/ontology/abstract"; - private static String label_dprop_im_uri = "http://dbpedia.org/property/label"; - private static String name2_dprop_im_uri = "http://dbpedia.org/property/name"; - - - //2010 URIs - private static String article_oprop_im_uri_2010 = "http://www.instancematching.org/IIMB2010/ADDONS#name"; - private static String name_oprop_im_uri_2010 = "http://www.instancematching.org/IIMB2010/ADDONS#article"; - - private static String has_value_dprop_im_uri_2010 = "http://www.instancematching.org/IIMB2010/ADDONS#has_value"; - - private static String name_dprop_im_uri_2010 = "http://oaei.ontologymatching.org/2010/IIMBTBOX/name"; - private static String article_dprop_im_uri_2010 = "http://oaei.ontologymatching.org/2010/IIMBTBOX/article"; - - - - //IM 2015 URIS - private static String name_dprop_im_uri_2015 = "http://islab.di.unimi.it/imoaei2015#name"; - - - private static boolean restrict_instance_types = false; - - - public static boolean print_output = false; //false; - public static boolean print_output_always = false; //false; - - - public static boolean print_statistics = true; - - - - public static double bad_score_scope = 0.0; - - public static double good_isub_anchors = 0.98; - - public static double good_isub_candidates = 0.95; - - public static double good_confidence = 0.50; - - public static double min_conf_pro_map = 0.75; - - - public static double min_isub_instances = 0.75; - - - - public static double good_sim_coocurrence = 0.08; //Tested one 0.09 - - public static boolean avoid_redundant_labels = true; - - public static int max_redundancy_labels = 3; - - public static int max_ambiguity = 4; - - public static int good_ambiguity = 2; - - //Note that even if overlapping is set to true. It will only applied for big ontologies >15000 - public static boolean use_overlapping = false; - - public static boolean second_chance_conflicts = true; - - public static int ratio_second_chance_discarded = 5; - - public static int min_size_overlapping = 15000; //5000 - - //set to false by default? - public static boolean perform_instance_matching = false; //true; - public static boolean output_instance_mappings = false; //true; - - public static boolean output_instance_mapping_files = false; //for statistics - - public static boolean output_class_mappings = true; - public static boolean output_prop_mappings = true; - - //TODO Now with ignore types it may be solved this issue! - public static boolean reason_datatypes = true; //with OM client gives error if true - - public static String structural = "Structural"; - public static String hermit = "HermiT"; - //public static String more = "MORe"; - public static String elk = "ELK"; - //public static String reasoner = hermit; - //public static String reasoner = more; - public static String reasoner = structural; - //public static String reasoner = elk; - - //Timeout reasoner - public static int timeout = 25; - - - public static boolean output_equivalences_only = false; - - public static boolean use_umls_lexicon = true; - - public static boolean reverse_labels = false; - - public static boolean allow_interactivity = false; - - public static boolean allow_multilingual = true; - public static boolean is_test_mode_multilingual = false; //for testing, we only simulate translation - public static boolean use_local_dict = true; - public static boolean call_online_translator = true; - //TODO default target language is english - public static String target_lang = "en"; - //0= Google, 1= Microsoft, >=2 all - public static int translator_id=TranslatorManager.ALL_TRANSLATORS; - - - - public static boolean allow_bioportal = false; - public static int max_mediating_ontologies =10; - public static double confidence_composed_mappings1 = 0.8; - public static double confidence_composed_mappings2 = 0.7; - - - - public static boolean cleanD_G = true; - public static boolean extractGlobal_D_G_Info = true; - - - - public static String path_chinese_segmenter_dict = "/home/ernesto/Documents/OAEI_2014_campaign/EVAL_2014/logmap2_package_oaei2014/conf/multilingual/dict_ictclas4j"; - - //To store the translations from google codes to be used in next iterations (useful in Multifarm track) - //Note that these folders are changed in the parameters file to not to point to local files - //Dynamic (on-the-fly) dict folder - public static String path_multilingual_tmp = "/home/ernesto/Documents/OAEI_OM_2015/EVAL_2015/dict_multilingual"; - //Static dictionary folder - public static String path_multilingual_local = "/home/ernesto/Documents/OAEI_OM_2015/EVAL_2015/dict_multilingual/local"; - - public static String path_mappings_categories = "/mappings/categories"; - - public static Set accepted_annotation_URIs_for_classes = new HashSet(); - - public static Set accepted_data_assertion_URIs_for_individuals = new HashSet(); - public static Set accepted_data_assertion_URIs_for_individuals_deep2 = new HashSet(); - public static Set accepted_object_assertion_URIs_for_individuals = new HashSet(); - - - //Some individuals contain links to dbpedia categories or other sort of categories which are very important for desambiguation - public static Set accepted_property_URIs_for_instance_categories = new HashSet(); - - - - - //Some IM tracks require to match specific type of individuals: i.e. Persons - public static Set allowed_instance_types = new HashSet(); - //The benchmark tracks does not consider in the output alignemnts - public static Set filter_entities = new HashSet(); - - - //For thresholds file - - private static final String print_output_str = "print_output"; - - private static final String bad_score_scope_str = "bad_score_scope"; - - private static final String good_isub_anchors_str = "good_isub_anchors"; - - private static final String good_isub_candidates_str = "good_isub_candidates"; - - private static final String good_confidence_str = "good_confidence"; - - private static final String good_sim_coocurrence_str = "good_sim_coocurrence"; - - private static final String min_conf_pro_map_str = "min_conf_pro_map"; - - private static final String confidence_composed_mappings_str1 = "confidence_composed_mappings1"; - private static final String confidence_composed_mappings_str2 = "confidence_composed_mappings2"; - - private static final String avoid_redundant_labels_str = "avoid_redundant_labels"; - - private static final String max_redundancy_labels_str = "max_redundancy_labels"; - - - private static final String max_ambiguity_str = "max_ambiguity"; - - private static final String good_ambiguity_str = "good_ambiguity"; - - private static final String use_overlapping_str = "use_overlapping"; - - private static final String min_size_overlapping_str = "min_size_overlapping"; - - private static final String instance_matching_str = "instance_matching"; - - private static final String annotation_URI_str = "annotation_URI"; - - private static final String category_URI_str = "category_URI"; - - - private static final String data_assertion_URI_Indiv_str = "data_assertion_URI_Indiv"; - private static final String data_assertion_URI_Indiv_deep2_str = "data_assertion_URI_Indiv_deep2"; - - private static final String object_assertion_URI_Indiv_str = "object_assertion_URI_Indiv"; - - - private static final String restrict_individual_types_str = "restrict_individual_types"; - private static final String allowed_individual_type_str = "allowed_individual_type"; - private static final String filter_entity_str = "filter_entity"; - - private static final String output_class_mappings_str = "output_class_mappings"; - private static final String output_prop_mappings_str = "output_prop_mappings"; - private static final String output_instance_mappings_str = "output_instance_mappings"; - private static final String output_instance_mapping_files_str = "output_instance_mapping_files"; - - - private static final String glogal_info_str = "glogal_info"; - - - private static final String reason_datatypes_str = "reason_datatypes"; - - private static final String second_chance_conflicts_str = "second_chance_conflicts"; - private static final String ratio_second_chance_discarded_str = "ratio_second_chance_discarded"; - - - //reasoner|MORe or HermiT - private static final String reasoner_str = "reasoner"; - private static final String timeout_str = "timeout"; - - - - private static final String output_equivalences_only_str = "output_equivalences_only"; - - private static final String use_umls_lexicon_str = "use_umls_lexicon"; - - private static final String allow_bioportal_str = "allow_bioportal"; - - private static final String max_mediating_ontologies_str = "max_mediating_ontologies"; - - private static final String allow_interactivity_str = "allow_interactivity"; - - private static final String allow_multilingual_str = "allow_multilingual"; - - private static final String is_test_mode_multilingual_str = "is_test_mode_multilingual"; - - private static final String use_local_dict_str = "use_local_dict"; - - private static final String call_online_translator_str = "call_online_translator"; - - private static final String path_chinese_segmenter_dict_str = "path_chinese_segmenter_dict"; - - private static final String path_multilingual_tmp_str = "path_multilingual_tmp"; - - private static final String path_multilingual_local_str = "path_multilingual_local"; - - private static final String path_mappings_categories_str = "path_mappings_categories"; - - private static final String reverse_labels_str = "reverse_labels"; - - private static final String target_lang_str = "target_lang"; - - private static final String translator_id_str = "translator_id"; - - - - - - //Init of default accepted annotation/assertion uris - static { - //accepted_annotation_URIs = new HashSet(); - accepted_annotation_URIs_for_classes.add(rdf_label_uri); - accepted_annotation_URIs_for_classes.add(hasExactSynonym_uri); - accepted_annotation_URIs_for_classes.add(hasRelatedSynonym_uri); - - accepted_annotation_URIs_for_classes.add(hasExactSynonym_uri2); - //TODO - //accepted_annotation_URIs_for_classes.add(hasRelatedSynonym_uri2); - - accepted_annotation_URIs_for_classes.add(nci_synonym_uri); - accepted_annotation_URIs_for_classes.add(fma_synonym_uri); - accepted_annotation_URIs_for_classes.add(hasDefinition_uri); - accepted_annotation_URIs_for_classes.add(xbrl_label_uri); - - accepted_annotation_URIs_for_classes.add(skos_label_uri); - accepted_annotation_URIs_for_classes.add(skos_altlabel_uri); - accepted_annotation_URIs_for_classes.add(foaf_name_uri); - - accepted_annotation_URIs_for_classes.add(SYN_synonym); - accepted_annotation_URIs_for_classes.add(EFO_synonym); - - accepted_annotation_URIs_for_classes.add(NCI_synonym); - accepted_annotation_URIs_for_classes.add(OBO_synonym); - accepted_annotation_URIs_for_classes.add(CSEO_synonym); - - accepted_annotation_URIs_for_classes.add(BIRNLEX_synonym); - accepted_annotation_URIs_for_classes.add(BIRNLEX_prefLabel); - - - - //OAEI IM 2015 - //accepted_data_assertion_URIs_for_individuals.add(name_dprop_im_uri_2015); - //accepted_data_assertion_URIs_for_individuals.add("http://islab.di.unimi.it/imoaei2015#title"); - - - //Allowed class types IM 2015 - //allowed_instance_types.add("http://islab.di.unimi.it/imoaei2015#Person"); - //allowed_instance_types.add("http://www.bbc.co.uk/ontologies/creativework/BlogPost"); - //allowed_instance_types.add("http://www.bbc.co.uk/ontologies/creativework/NewsItem"); - //allowed_instance_types.add("http://www.bbc.co.uk/ontologies/creativework/Programme"); - - - //Entities to be filtered from there URIS. For example, in the Benchmark track they are not included in output - filter_entities.add("http://xmlns.com/foaf/"); - filter_entities.add("http://www.w3.org/1999/02/22-rdf-syntax-ns"); - filter_entities.add("http://purl.org/dc/elements/"); - - - - - - //OAEI IM 2012 - //Data - accepted_data_assertion_URIs_for_individuals.add(name_dprop_im_uri); - accepted_data_assertion_URIs_for_individuals.add(article_dprop_im_uri); - - //Data deep2 - accepted_data_assertion_URIs_for_individuals_deep2.add(has_value_dprop_im_uri); - - //Object - accepted_object_assertion_URIs_for_individuals.add(name_oprop_im_uri); - accepted_object_assertion_URIs_for_individuals.add(article_oprop_im_uri); - - //OAEI IM 2010 - //Data - accepted_data_assertion_URIs_for_individuals.add(name_dprop_im_uri_2010); - accepted_data_assertion_URIs_for_individuals.add(article_dprop_im_uri_2010); - - //Data deep2 - accepted_data_assertion_URIs_for_individuals_deep2.add(has_value_dprop_im_uri_2010); - - //Object - accepted_object_assertion_URIs_for_individuals.add(name_oprop_im_uri_2010); - accepted_object_assertion_URIs_for_individuals.add(article_oprop_im_uri_2010); - - - //oaei 2013 - //Data - accepted_data_assertion_URIs_for_individuals.add(birthName_dprop_im_uri); - //It is a number and will be filtered - //Shoyld be considered for the "role assertion inverted file" - //accepted_data_assertion_URIs_for_individuals.add(population_dprop_im_uri); - - //Data deep2?? - //it is a comment - - //Object - accepted_object_assertion_URIs_for_individuals.add(label_oprop_im_uri); - accepted_object_assertion_URIs_for_individuals.add(curriculum_oprop_im_uri); - accepted_object_assertion_URIs_for_individuals.add(places_oprop_im_uri); - - - - //Other accepted data assertions - accepted_data_assertion_URIs_for_individuals.add(abstract_dprop_im_uri); - accepted_data_assertion_URIs_for_individuals.add(label_dprop_im_uri); - accepted_data_assertion_URIs_for_individuals.add(name2_dprop_im_uri); - - - } - - - public static void setMinSize4Overlapping(int size){ - min_size_overlapping = size; - } - - - public static void readParameters(){ - - try{ - - //File file = new File("thresholds.txt"); - //System.out.println(file.getAbsolutePath() + " " + file.exists()); - - File file = new File ("parameters.txt"); - - if (!file.exists()){ - //LogOutput.printAlways("Error reading LogMap parameters. File 'parameters.txt' is not available. Using default parameters."); - System.err.println("Error reading LogMap parameters. File 'parameters.txt' is not available. Using default parameters."); - return; - } - - - //We reinit with URIs in file - accepted_annotation_URIs_for_classes.clear(); - accepted_data_assertion_URIs_for_individuals.clear(); - allowed_instance_types.clear(); - filter_entities.clear(); - - ReadFile reader = new ReadFile("parameters.txt"); - //ReadFile reader = new ReadFile("/home/ernesto/OM_OAEI/logmap2_package/conf/thresholds.txt"); - - String line; - String[] elements; - - while ((line = reader.readLine()) != null){ - - //Ignore commented lines - if (line.startsWith("#")){ - continue; - } - - if (line.indexOf("|")<0){ - continue; - } - //System.out.println(line); - elements=line.split("\\|"); - - if (elements[0].equals(print_output_str)){ - print_output = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(bad_score_scope_str)){ - bad_score_scope = Double.valueOf(elements[1]); - } - else if (elements[0].equals(good_isub_anchors_str)){ - good_isub_anchors = Double.valueOf(elements[1]); - } - else if (elements[0].equals(good_isub_candidates_str)){ - good_isub_candidates=Double.valueOf(elements[1]); - } - else if (elements[0].equals(good_confidence_str)){ - good_confidence = Double.valueOf(elements[1]); - } - else if (elements[0].equals(good_sim_coocurrence_str)){ - good_sim_coocurrence = Double.valueOf(elements[1]); - } - else if (elements[0].equals(min_conf_pro_map_str)){ - min_conf_pro_map = Double.valueOf(elements[1]); - } - - else if (elements[0].equals(max_redundancy_labels_str)){ - max_redundancy_labels = Integer.valueOf(elements[1]); - } - else if (elements[0].equals(avoid_redundant_labels_str)){ - avoid_redundant_labels = Boolean.valueOf(elements[1]); - } - - else if (elements[0].equals(max_ambiguity_str)){ - max_ambiguity = Integer.valueOf(elements[1]); - } - else if (elements[0].equals(good_ambiguity_str)){ - good_ambiguity = Integer.valueOf(elements[1]); - } - else if (elements[0].equals(use_overlapping_str)){ - use_overlapping = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(min_size_overlapping_str)){ - min_size_overlapping = Integer.valueOf(elements[1]); - } - else if (elements[0].equals(instance_matching_str)){ - perform_instance_matching = Boolean.valueOf(elements[1]); - } - - else if (elements[0].equals(output_class_mappings_str)){ - output_class_mappings = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(output_prop_mappings_str)){ - output_prop_mappings = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(output_instance_mappings_str)){ - output_instance_mappings = Boolean.valueOf(elements[1]); - } - - else if (elements[0].equals(output_instance_mapping_files_str)){ - output_instance_mapping_files = Boolean.valueOf(elements[1]); - } - - - - else if (elements[0].equals(annotation_URI_str)){ - accepted_annotation_URIs_for_classes.add(elements[1]); - } - - else if (elements[0].equals(category_URI_str)){ - accepted_property_URIs_for_instance_categories.add(elements[1]); - } - - else if (elements[0].equals(data_assertion_URI_Indiv_str)){ - accepted_data_assertion_URIs_for_individuals.add(elements[1]); - } - else if (elements[0].equals(data_assertion_URI_Indiv_deep2_str)){ - accepted_data_assertion_URIs_for_individuals_deep2.add(elements[1]); - } - else if (elements[0].equals(object_assertion_URI_Indiv_str)){ - accepted_object_assertion_URIs_for_individuals.add(elements[1]); - } - else if (elements[0].equals(reason_datatypes_str)){ - reason_datatypes = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(reasoner_str)){ - reasoner = elements[1]; - } - else if (elements[0].equals(timeout_str)){ - timeout = Integer.valueOf(elements[1]); - } - else if (elements[0].equals(output_equivalences_only_str)){ - output_equivalences_only = Boolean.valueOf(elements[1]); - } - - else if (elements[0].equals(second_chance_conflicts_str)){ - second_chance_conflicts = Boolean.valueOf(elements[1]); - } - - else if (elements[0].equals(ratio_second_chance_discarded_str)){ - ratio_second_chance_discarded = Integer.valueOf(elements[1]); - } - - else if (elements[0].equals(use_umls_lexicon_str)){ - use_umls_lexicon = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(reverse_labels_str)){ - reverse_labels = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(allow_interactivity_str)){ - allow_interactivity = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(allow_multilingual_str)){ - allow_multilingual = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(is_test_mode_multilingual_str)){ - is_test_mode_multilingual = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(path_chinese_segmenter_dict_str)){ - path_chinese_segmenter_dict = elements[1]; - } - else if (elements[0].equals(use_local_dict_str)){ - use_local_dict = Boolean.valueOf(elements[1]); - } - - else if (elements[0].equals(call_online_translator_str)){ - call_online_translator = Boolean.valueOf(elements[1]); - } - - - else if (elements[0].equals(path_multilingual_tmp_str)){ - path_multilingual_tmp = elements[1]; - } - else if (elements[0].equals(path_multilingual_local_str)){ - path_multilingual_local = elements[1]; - } - else if (elements[0].equals(path_mappings_categories_str)){ - path_mappings_categories = elements[1]; - } - else if (elements[0].equals(target_lang_str)){ - target_lang = elements[1]; - } - else if (elements[0].equals(translator_id_str)){ - translator_id = Integer.valueOf(elements[1]); - } - else if (elements[0].equals(allow_bioportal_str)){ - allow_bioportal = Boolean.valueOf(elements[1]); - } - else if (elements[0].equals(restrict_individual_types_str)){ - setRestrictInstanceTypes(Boolean.valueOf(elements[1])); - } - - else if (elements[0].equals(confidence_composed_mappings_str1)){ - confidence_composed_mappings1 = Double.valueOf(elements[1]); - } - else if (elements[0].equals(confidence_composed_mappings_str2)){ - confidence_composed_mappings2 = Double.valueOf(elements[1]); - } - - - else if (elements[0].equals(allowed_individual_type_str)){ - allowed_instance_types.add(elements[1]); - } - - else if (elements[0].equals(filter_entity_str)){ - filter_entities.add(elements[1]); - } - - else if (elements[0].equals(glogal_info_str)){ - extractGlobal_D_G_Info = Boolean.valueOf(elements[1]); - } - - else if (elements[0].equals(max_mediating_ontologies_str)){ - max_mediating_ontologies = Integer.valueOf(elements[1]); - } - - - - - - - - - - - - - - - } - - //System.out.println(accepted_annotation_URIs.size()); - //for (String str : accepted_annotation_URIs){ - // System.out.println("Read: " + str); - //} - - reader.closeBuffer(); - } - catch (Exception e){ - //LogOutput.printAlways("Error reading LogMap 2 parameters file: " + e.getLocalizedMessage()); - } - - } - - - public static boolean isRestrictInstanceTypesActive() { - return restrict_instance_types; - } - - - public static void setRestrictInstanceTypes(boolean restrict_individual_types) { - Parameters.restrict_instance_types = restrict_individual_types; - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/DataPropertyMappingAssessment.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/DataPropertyMappingAssessment.java deleted file mode 100644 index cc17cb9575..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/DataPropertyMappingAssessment.java +++ /dev/null @@ -1,261 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.SIAssessment; - -import java.util.HashSet; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; - -/** - * Manages the compatibility of data properties - * - * @author Ernesto - * - */ -public class DataPropertyMappingAssessment extends PropertyMappingAssessment { - - - - public DataPropertyMappingAssessment(IndexManager index, MappingManager mapping_manager){ - - this.index = index; - this.mapping_manager = mapping_manager; - - - - } - - - - protected int arePropertiesCompatible(int ident1, int ident2) { - - - Set domain1=index.getDomainDataProp4Identifier(ident1); - Set mapped_domain1=new HashSet(); - Set domain2=index.getDomainDataProp4Identifier(ident2); - - Set range1=index.getRangeDataProp4Identifier(ident1); - Set range2=index.getRangeDataProp4Identifier(ident2); - - - boolean same_domain=false; - boolean same_range=false; - - - if (domain1.isEmpty() && domain2.isEmpty() && range1.isEmpty() && range2.isEmpty()) - return EMPTY_RANGE_OR_DOMAIN; - - - //look for incompatibilities - if ( - (domain1.isEmpty() && !domain2.isEmpty()) || - (range1.isEmpty() && !range2.isEmpty()) || - (!domain1.isEmpty() && domain2.isEmpty()) || - (!range1.isEmpty() && range2.isEmpty()) - ){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; //we do not risk (proved: source of errors!) - } - - - for (int ide1 : domain1){ - if (index.getDangerousClasses().contains(ide1))//If domain or ranges are equivalent to Top - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - for (int ide2 : domain2){ - if (index.getDangerousClasses().contains(ide2))//If domain or ranges are equivalent to Top - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - - - //One side may still be empty - if (!domain1.isEmpty() && !domain2.isEmpty()){ - //Find mappings - for (int cls1 : domain1){ - if (mapping_manager.getLogMapMappings().containsKey(cls1)){ - mapped_domain1.addAll(mapping_manager.getLogMapMappings().get(cls1)); - } - } - } - - - - same_domain=haveSameDomain(mapped_domain1, domain2); - same_range=haveSameRange(range1, range2); - - - //Same sets in one of teh sides at least - if (same_domain && same_range){ - return SAME_RANGE_AND_DOMAIN; - } - //If different range --> incompatible - else if (same_range){ //same range - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : domain1){ - for (int cls2 : domain2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - //Compatible ranges or domains?? Dangerous? - return COMPATIBLE_RANGE_DOMAIN; - //return INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - - //Different ranges! - return INCOMPATIBLE_RANGE_OR_DOMAIN; - - - - - - - - } - - - - /** - * Less aggresive method - */ - protected int arePropertiesCompatibleLight(int ident1, int ident2) { - - - Set domain1=index.getDomainDataProp4Identifier(ident1); - Set mapped_domain1=new HashSet(); - Set domain2=index.getDomainDataProp4Identifier(ident2); - - Set range1=index.getRangeDataProp4Identifier(ident1); - Set range2=index.getRangeDataProp4Identifier(ident2); - - - boolean same_domain=false; - boolean same_range=false; - - - if (domain1.isEmpty() && domain2.isEmpty() && range1.isEmpty() && range2.isEmpty()) - return EMPTY_RANGE_OR_DOMAIN; - - - //look for incompatibilities -> too aggressive - /*if ( - (domain1.isEmpty() && !domain2.isEmpty()) || - (range1.isEmpty() && !range2.isEmpty()) || - (!domain1.isEmpty() && domain2.isEmpty()) || - (!range1.isEmpty() && range2.isEmpty()) - ){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; //we do not risk (proved: source of errors!) - }*/ - - - for (int ide1 : domain1){ - if (index.getDangerousClasses().contains(ide1))//If domain or ranges are equivalent to Top - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - for (int ide2 : domain2){ - if (index.getDangerousClasses().contains(ide2))//If domain or ranges are equivalent to Top - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - - - //One side may still be empty - if (!domain1.isEmpty() && !domain2.isEmpty()){ - //Find mappings - for (int cls1 : domain1){ - if (mapping_manager.getLogMapMappings().containsKey(cls1)){ - mapped_domain1.addAll(mapping_manager.getLogMapMappings().get(cls1)); - } - } - } - - - - same_domain=haveSameDomain(mapped_domain1, domain2); - same_range=haveSameRange(range1, range2); - - - //TODO Identify if rdf:Literal - if (range1.size()==1 && range1.contains("Literal")){ - same_range=true; - } - else if (range2.size()==1 && range2.contains("Literal")){ - same_range=true; - } - - - //Same sets in one of teh sides at least - if (same_domain && same_range){ - return SAME_RANGE_AND_DOMAIN; - } - //If different range --> incompatible - else if (same_range){ //same range - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : domain1){ - for (int cls2 : domain2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - } - } - - //Compatible ranges or domains?? Dangerous? - return COMPATIBLE_RANGE_DOMAIN; - //return INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - - - //Different ranges! - return INCOMPATIBLE_RANGE_OR_DOMAIN; - - - - - - - - } - - - - - - - - /*protected boolean haveSameRange(Set range1, Set range2){ - - if (range1.size()>0 && range2.size()>0){ - return range1.equals(range2); - } - - return false; - }*/ - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/InstanceMatchingAssessment.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/InstanceMatchingAssessment.java deleted file mode 100644 index 62cc7e8896..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/InstanceMatchingAssessment.java +++ /dev/null @@ -1,251 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.SIAssessment; - -import java.util.HashSet; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; - -public class InstanceMatchingAssessment { - - - protected IndexManager index; - protected MappingManager mapping_manager; - - - protected final int EMPTY_TYPES=0; - protected final int ONE_TYPE_EMPTY=1; - - protected final int COMPATIBLE_TYPES=2; - protected final int INCOMPATIBLE_TYPES=3; - - protected final int SAME_TYPES=4; - protected final int SUB_TYPES=5; - - protected int compatibility=0; - - public InstanceMatchingAssessment(IndexManager index, MappingManager mapping_manager){ - - this.index = index; - this.mapping_manager = mapping_manager; - - } - - - //In some cases the instances are of the same class_type (and the ontology TBox is not very rich) - //However, they do contain information about a dbpedia category or other type of information that make - //the instances incompatible - //Categories can come as an annotation, data role assertion or object role assertion - Set categories1; - Set categories2; - public boolean haveInstancesCompatibleCategories(int ident1, int ident2){ - - categories1 = index.getIndividualCategory4Identifier(ident1); - categories2 = index.getIndividualCategory4Identifier(ident2); - - //If not defined one of them - if (categories1.size()==0 || categories2.size()==0){ - //System.out.println(categories1 + " " + categories2 + " true"); - return true; - } - - //Two calls to consider composed mappings A mapped to B, B broader than B' - //int cat1 = categories1.size(); - //int cat2 = categories2.size(); - extendCategoriesWithMappings(categories1); - extendCategoriesWithMappings(categories2); - - //if (cat1 additional_categories = new HashSet(); - private void extendCategoriesWithMappings(Set categories) { - - for (String cat : categories){ - if (mapping_manager.hasCategoryMappings(cat)){ - additional_categories.addAll(mapping_manager.getMappings4Category(cat)); - } - } - categories.addAll(additional_categories); - additional_categories.clear(); - } - - - protected int areInstancesCompatible(int ident1, int ident2){ - - Set types1 = index.getIndividualClassTypes4Identifier(ident1); - Set types2 = index.getIndividualClassTypes4Identifier(ident2); - - Set mapped_types1=new HashSet(); - - if (types1.isEmpty() && types2.isEmpty()){ - return EMPTY_TYPES; - } - if (types1.isEmpty() || types2.isEmpty()){ - return ONE_TYPE_EMPTY; - } - - - - for (int cls1 : types1){ - if (mapping_manager.getLogMapMappings().containsKey(cls1)){ - mapped_types1.addAll(mapping_manager.getLogMapMappings().get(cls1)); - } - } - - if (areSameClassTypes(mapped_types1, types2)){ - return SAME_TYPES; - } - - for (int cls1 : types1){ - for (int cls2 : types2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_TYPES; - } - } - } - - - //Subtypes - if (areAllSubTypes(types1, types2)) - return SUB_TYPES; - - - - - return COMPATIBLE_TYPES; - - - - - } - - - public double getConfidence4Compatibility(int ident1, int ident2){ - - compatibility = areInstancesCompatible(ident1, ident2); - - switch (compatibility) { - case EMPTY_TYPES: - return Parameters.min_isub_instances+0.15;//0.90; //0.85 - case ONE_TYPE_EMPTY: - return Parameters.min_isub_instances+0.15;//0.90; - case SAME_TYPES: - return Parameters.min_isub_instances;//0.75 - case SUB_TYPES: - return Parameters.min_isub_instances+0.05;//0.80; - case COMPATIBLE_TYPES: - return Parameters.min_isub_instances+0.10;//0.85; - case INCOMPATIBLE_TYPES: - return 2.0; - default: - return 2.0; - } - } - - - public double getCompatibilityFactor(int ident1, int ident2){ - - //compatibility has been set when calling the above method - - switch (compatibility) { - case EMPTY_TYPES: - return 0.50; - case ONE_TYPE_EMPTY: - return 0.50; - case SAME_TYPES: - return 1.0; - case SUB_TYPES: - return 0.90; - case COMPATIBLE_TYPES: - return 0.70; - case INCOMPATIBLE_TYPES: - return 0.0; //no compatible - default: - return 0.0; - } - } - - - protected boolean areSameClassTypes(Set types1, Set types2){ - - if (types1.size()>0 && types2.size()>0){ - return types1.equals(types2); - } - - return false; - } - - - protected boolean areCompatibleCategories(Set cat1, Set cat2){ - - //System.out.println(cat1 + "\n" + cat2 + "\n\n"); - - //Non empty intersection - //if (cat1.size()>0 && cat2.size()>0){ cat1. - Set intersection = new HashSet(cat1); - - intersection.retainAll(cat2); - - return (intersection.size()>0); - //} - - //return false; - } - - - protected boolean areAllSubTypes(Set types1, Set types2){ - - for (int cls1 : types1){ - for (int cls2 : types2){ - if (!index.isSubClassOf(cls1, cls2) && !index.isSubClassOf(cls2, cls1)) - return false; - } - } - - return true; - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/ObjectPropertyMappingAssessment.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/ObjectPropertyMappingAssessment.java deleted file mode 100644 index 4a4990f94d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/ObjectPropertyMappingAssessment.java +++ /dev/null @@ -1,365 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.SIAssessment; - -import java.util.HashSet; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; - -/** - * Manages the compatibility of object properties - * - * @author Ernesto - * - */ -public class ObjectPropertyMappingAssessment extends PropertyMappingAssessment { - - - public ObjectPropertyMappingAssessment(IndexManager index, MappingManager mapping_manager){ - this.index = index; - this.mapping_manager = mapping_manager; - } - - - - protected int arePropertiesCompatible(int ident1, int ident2) { - - Set domain1=index.getDomainObjProp4Identifier(ident1); - Set mapped_domain1=new HashSet(); - Set domain2=index.getDomainObjProp4Identifier(ident2); - - - Set range1=index.getRangeObjProp4Identifier(ident1); - Set mapped_range1=new HashSet(); - Set range2=index.getRangeObjProp4Identifier(ident2); - - boolean same_domain=false; - boolean same_range=false; - - if (domain1.isEmpty() && domain2.isEmpty() && range1.isEmpty() && range2.isEmpty()) - return EMPTY_RANGE_OR_DOMAIN; - - - //look for incompatibilities - if ( - (domain1.isEmpty() && !domain2.isEmpty()) || - (range1.isEmpty() && !range2.isEmpty()) || - (!domain1.isEmpty() && domain2.isEmpty()) || - (!range1.isEmpty() && range2.isEmpty()) - ){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; //we do not risk - } - - - //If domain or ranges are equivalent to Top - for (int ide1 : domain1){ - if (index.getDangerousClasses().contains(ide1)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - for (int ide2 : domain2){ - if (index.getDangerousClasses().contains(ide2)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - for (int ide1 : range1){ - if (index.getDangerousClasses().contains(ide1)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - for (int ide2 : range2){ - if (index.getDangerousClasses().contains(ide2)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - - - - - - - - //One side may still be empty - if (!domain1.isEmpty() && !domain2.isEmpty()){ - //Find mappings - for (int cls1 : domain1){ - if (mapping_manager.getLogMapMappings().containsKey(cls1)){ - mapped_domain1.addAll(mapping_manager.getLogMapMappings().get(cls1)); - } - } - } - - if (!range1.isEmpty() && !range2.isEmpty()){ - //Find mappings (only for object properties) - for (int cls1 : range1){ - if (mapping_manager.getLogMapMappings().containsKey(cls1)){ - mapped_range1.addAll(mapping_manager.getLogMapMappings().get(cls1)); - } - } - } - - - same_domain=haveSameDomain(mapped_domain1, domain2); - same_range=haveSameRange(mapped_range1, range2); - - - //Same sets in one of teh sides at least - if (same_domain && same_range){ - return SAME_RANGE_AND_DOMAIN; - } - else if (same_domain){ //Same domain - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : range1){ - for (int cls2 : range2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - return ONLY_SAME_RANGE_OR_DOMAIN; //one side empty or compatible - //Too dangerous Not in principle - //return INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - else if (same_range){ //same range - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : domain1){ - for (int cls2 : domain2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - return ONLY_SAME_RANGE_OR_DOMAIN; //one side empty or compatible - //Too dangerous? Not in principle - //return INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - else { //both sides compatible?? - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : domain1){ - for (int cls2 : domain2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : range1){ - for (int cls2 : range2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - //Compatible ranges/domains - //return COMPATIBLE_RANGE_DOMAIN; - //Too dangerous (always) - //Different but compatible - return PROBABLY_INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - - - - - } - - /** - * Less aggressive method - * @param ident1 - * @param ident2 - * @return - */ - protected int arePropertiesCompatibleLight(int ident1, int ident2) { - - Set domain1=index.getDomainObjProp4Identifier(ident1); - Set mapped_domain1=new HashSet(); - Set domain2=index.getDomainObjProp4Identifier(ident2); - - - Set range1=index.getRangeObjProp4Identifier(ident1); - Set mapped_range1=new HashSet(); - Set range2=index.getRangeObjProp4Identifier(ident2); - - boolean same_domain=false; - boolean same_range=false; - - if (domain1.isEmpty() && domain2.isEmpty() && range1.isEmpty() && range2.isEmpty()) - return EMPTY_RANGE_OR_DOMAIN; - - - //look for incompatibilities -> Too aggressive in some cases - /*if ( - (domain1.isEmpty() && !domain2.isEmpty()) || - (range1.isEmpty() && !range2.isEmpty()) || - (!domain1.isEmpty() && domain2.isEmpty()) || - (!range1.isEmpty() && range2.isEmpty()) - ){ - return EMPTY_RANGE_OR_DOMAIN; //we do not risk - }*/ - - - //If domain or ranges are equivalent to Top - for (int ide1 : domain1){ - if (index.getDangerousClasses().contains(ide1)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - for (int ide2 : domain2){ - if (index.getDangerousClasses().contains(ide2)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - for (int ide1 : range1){ - if (index.getDangerousClasses().contains(ide1)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - for (int ide2 : range2){ - if (index.getDangerousClasses().contains(ide2)) - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - - - - - - - - //One side may still be empty - if (!domain1.isEmpty() && !domain2.isEmpty()){ - //Find mappings - for (int cls1 : domain1){ - if (mapping_manager.getLogMapMappings().containsKey(cls1)){ - mapped_domain1.addAll(mapping_manager.getLogMapMappings().get(cls1)); - } - } - } - - if (!range1.isEmpty() && !range2.isEmpty()){ - //Find mappings (only for object properties) - for (int cls1 : range1){ - if (mapping_manager.getLogMapMappings().containsKey(cls1)){ - mapped_range1.addAll(mapping_manager.getLogMapMappings().get(cls1)); - } - } - } - - - same_domain=haveSameDomain(mapped_domain1, domain2); - same_range=haveSameRange(mapped_range1, range2); - - - //Same sets in one of teh sides at least - if (same_domain && same_range){ - return SAME_RANGE_AND_DOMAIN; - } - else if (same_domain){ //Same domain - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : range1){ - for (int cls2 : range2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - return ONLY_SAME_RANGE_OR_DOMAIN; //one side empty or compatible - //Too dangerous Not in principle - //return INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - else if (same_range){ //same range - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : domain1){ - for (int cls2 : domain2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - return ONLY_SAME_RANGE_OR_DOMAIN; //one side empty or compatible - //Too dangerous? Not in principle - //return INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - else { //both sides compatible?? - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : domain1){ - for (int cls2 : domain2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - //All possible mappings must be compatible (i.e. same hierarchy) - for (int cls1 : range1){ - for (int cls2 : range2){ - if (mapping_manager.isMappingInConflictWithFixedMappings(cls1, cls2)){ - return INCOMPATIBLE_RANGE_OR_DOMAIN; - } - - } - } - - //Compatible ranges/domains - //return COMPATIBLE_RANGE_DOMAIN; - //Too dangerous (always) - //Different but compatible - return PROBABLY_INCOMPATIBLE_RANGE_OR_DOMAIN; - - } - - - - - } - - - /*protected boolean haveSameRange(Set range1, Set range2){ - - if (range1.size()>0 && range2.size()>0){ - return range1.equals(range2); - } - - return false; - }*/ - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/PropertyMappingAssessment.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/PropertyMappingAssessment.java deleted file mode 100644 index 7acfc34cd1..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/SIAssessment/PropertyMappingAssessment.java +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.SIAssessment; - -import java.util.Set; - -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; - -/** - * Manages the compatibility of properties - * - * @author Ernesto - * - */ -public abstract class PropertyMappingAssessment { - - protected IndexManager index; - protected MappingManager mapping_manager; - - protected final int EMPTY_RANGE_OR_DOMAIN=0; - protected final int SAME_RANGE_AND_DOMAIN=1; - protected final int ONLY_SAME_RANGE_OR_DOMAIN=2; - protected final int COMPATIBLE_RANGE_DOMAIN=3; - protected final int INCOMPATIBLE_RANGE_OR_DOMAIN=4; - protected final int PROBABLY_INCOMPATIBLE_RANGE_OR_DOMAIN=5; - - protected abstract int arePropertiesCompatible(int ident1, int ident2); - - protected abstract int arePropertiesCompatibleLight(int ident1, int ident2); - - - /** - * This defines a minimum confidence to be a mapping accepted - * @param ident1 - * @param ident2 - * @return - */ - public double getConfidence4Compatibility(int ident1, int ident2){ - - //int compatibility = arePropertiesCompatible(ident1, ident2); - //TODO used in LogMap for RODI - int compatibility = arePropertiesCompatibleLight(ident1, ident2); - - switch (compatibility) { - case EMPTY_RANGE_OR_DOMAIN: //Both empty - return 0.90; //0.95 - case SAME_RANGE_AND_DOMAIN: - return 0.75; - case ONLY_SAME_RANGE_OR_DOMAIN: //And the other non empty and compatible - return 0.85; //0.90 - case COMPATIBLE_RANGE_DOMAIN: - return 0.90; //0.93 - case PROBABLY_INCOMPATIBLE_RANGE_OR_DOMAIN: - return 1.5; - case INCOMPATIBLE_RANGE_OR_DOMAIN: //(Also indludes the cases where the domain1/range1 is empty and the other domain2/range2 no) - return 2.0; //Max isub score is 1.0 - default: - return 2.0; //Max isub score is 1.0 - } - } - - - protected boolean haveSameRange(Set range1, Set range2){ - - if (range1.size()>0 && range2.size()>0){ - return range1.equals(range2); - } - - return false; - } - - - protected boolean haveSameDomain(Set dom1, Set dom2){ - - if (dom1.size()>0 || dom2.size()>0){ - return dom1.equals(dom2); - } - - return false; - //return intersect.size()>0 && dom1.size()==intersect.size() && dom2.size()==intersect.size(); - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/background/CategoryMappingsLoader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/background/CategoryMappingsLoader.java deleted file mode 100644 index dce28a4c48..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/background/CategoryMappingsLoader.java +++ /dev/null @@ -1,114 +0,0 @@ -package uk.ac.ox.krr.logmap2.background; - -import java.io.File; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.oaei.reader.MappingsReaderManager; - -/** - * Instances may not a rich information in terms of class types, or class types may not be very informative. - * However they may contain metainformation as annotation or as role assertions about categories - * (e.g. dbpedia categories, doremus music categories, etc.). - * - * This class loads backgound knowledge about mappings between categories which are available - * outside the ontologies to be matched - * - * @author ernesto - * - */ -public class CategoryMappingsLoader { - - - private Map> category_mappings = new HashMap>(); - - - public void loadMappings(String path){ - - File directory = new File(path); - - //This is given in OAEI distribution - if (!directory.exists()) - return; - - String filenames[] = directory.list(); - - MappingsReaderManager manager; - - for(int i=0; i mappings){ - - for (MappingObjectStr mapping : mappings){ - //A super category is compatible with subcategories - //e.g. and opera would be compatible with opera_comique - - if (mapping.getMappingDirection()==MappingObjectStr.EQ){ - addMapping(mapping.getIRIStrEnt1(), mapping.getIRIStrEnt2()); - addMapping(mapping.getIRIStrEnt2(), mapping.getIRIStrEnt1()); - } - else if (mapping.getMappingDirection()==MappingObjectStr.SUB){ - addMapping(mapping.getIRIStrEnt2(), mapping.getIRIStrEnt1()); - } - else if (mapping.getMappingDirection()==MappingObjectStr.SUP){ - addMapping(mapping.getIRIStrEnt1(), mapping.getIRIStrEnt2()); - } - - } - } - - private void addMapping(String uri1, String uri2){ - if (!category_mappings.containsKey(uri1)) - category_mappings.put(uri1, new HashSet()); - - category_mappings.get(uri1).add(uri2); - - } - - - public Map> getCategoryMappings(){ - return category_mappings; - } - - - public boolean hasMappings(String uri){ - return category_mappings.containsKey(uri); - } - - public Set getMappings(String uri){ - return category_mappings.get(uri); - } - - - public Set getMappingsWithCheck(String uri){ - if (category_mappings.containsKey(uri)) - return category_mappings.get(uri); - else - return new HashSet(); - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalAccess.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalAccess.java deleted file mode 100644 index c2030a20ab..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalAccess.java +++ /dev/null @@ -1,14 +0,0 @@ -package uk.ac.ox.krr.logmap2.bioportal; - -import java.util.Set; - -public interface BioPortalAccess { - - - public boolean isActive(); - - public Set getSynonyms4Label(String label); - - public Set getSuitableOntologiesForLabels(Set labels); - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalMapping.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalMapping.java deleted file mode 100644 index f39aa59cf8..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalMapping.java +++ /dev/null @@ -1,156 +0,0 @@ -package uk.ac.ox.krr.logmap2.bioportal; - -import java.util.HashSet; -import java.util.Set; - -public class BioPortalMapping { - - String source_onto; - String target_onto; - - String source_entity; - String target_entity; - - //http://www.bioontology.org/wiki/index.php/BioPortal_Mappings - Set mapping_sources = new HashSet(); - - double confidence; - int dir_mapping; - int typeMapping;//classes, properties, instances - - - //DIR IMPLICATION - public static final int SUB = 0; //L2R=0; //P->Q - public static final int SUP=-1; //R2L P<-Q - public static final int EQ=-2; //P<->Q - - - - //TYPE OF MAPPING - public static final int CLASSES=0; - public static final int DATAPROPERTIES=1; - public static final int OBJECTPROPERTIES=2; - public static final int INSTANCES=3; - public static final int UNKNOWN=4; - - - - - - public BioPortalMapping( - String source_entity, - String target_entity, - String source_onto, - String target_onto, - Set sources){ - - this.source_entity=source_entity; - this.target_entity=target_entity; - this.source_onto=source_onto; - this.target_onto=target_onto; - - mapping_sources.addAll(sources); - - confidence = 1.0; - dir_mapping = EQ; - typeMapping = CLASSES; - - } - - - - public String getSourceEntity(){ - return source_entity; - - } - - public String getTargetEntity(){ - return target_entity; - - } - - public String getSourceOntology(){ - return source_onto; - - } - - public String getTargetOntology(){ - return target_onto; - - } - - - public int getMappingDirection(){ - return dir_mapping; - } - - - public double getConfidence(){ - return confidence; - - } - - - public int getTypeOfMapping(){ - return typeMapping; - - } - - public void setTypeOfMapping(int type){ - typeMapping = type; - - } - - public void setConfidenceMapping(double conf){ - confidence = conf; - - } - - public void setMappingDirection(int dir){ - dir_mapping=dir; - } - - - public boolean equals(Object o){ - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof BioPortalMapping)) - return false; - - BioPortalMapping i = (BioPortalMapping)o; - - return equals(i); - - } - - - public boolean equals(BioPortalMapping m){ - - if (!source_entity.equals(m.getSourceEntity()) - || !target_entity.equals(m.getTargetEntity()) - || !source_onto.equals(m.getSourceOntology()) - || !target_onto.equals(m.getTargetOntology())){ - return false; - } - return true; - } - - public String toString(){ - return "<"+source_onto + ":" +source_entity+"=="+target_onto+":"+target_entity+">"; - } - - public int hashCode() { - int code = 10; - code = 40 * code + source_entity.hashCode(); - code = 50 * code + target_entity.hashCode(); - code = 60 * code + source_onto.hashCode(); - code = 80 * code + target_onto.hashCode(); - return code; - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalOntologyInfo.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalOntologyInfo.java deleted file mode 100644 index 42d95e6720..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/BioPortalOntologyInfo.java +++ /dev/null @@ -1,77 +0,0 @@ -package uk.ac.ox.krr.logmap2.bioportal; - -import org.semanticweb.owlapi.model.OWLOntology; - -public class BioPortalOntologyInfo { - - - private String acronym; - private int classes; - private int maxDepth; - private String ontology_language; - private OWLOntology ontology=null; - - - /** - * @param acronym - * @param classes - * @param maxDepth - */ - public BioPortalOntologyInfo(BioPortalOntologyInfo obj) { - this.acronym = obj.acronym; - this.classes = obj.classes; - this.maxDepth = obj.maxDepth; - this.ontology_language=obj.ontology_language; - } - public BioPortalOntologyInfo(String acronym, int classes, int maxDepth, String language_onto) { - - this.acronym = acronym; - this.classes = classes; - this.maxDepth = maxDepth; - this.ontology_language = language_onto; - } - - /** - * @param acronym - */ - public BioPortalOntologyInfo(String acronym) { - this(acronym, 0, 0, "UNKNOWN"); - } - - - - public String getAcronym() { - return acronym; - } - public void setAcronym(String acronym) { - this.acronym = acronym; - } - public int getNumberOfClasses() { - return classes; - } - - public void setClasses(int classes) { - this.classes = classes; - } - - - public String getOntologyLanguage(){ - return ontology_language; - } - - public int getMaxDepth() { - return maxDepth; - } - public void setMaxDepth(int maxDepth) { - this.maxDepth = maxDepth; - } - - public OWLOntology getOntology(){ - return ontology; - } - - public void setOntology(OWLOntology onto){ - ontology=onto; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/CandidateMediatingOntology.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/CandidateMediatingOntology.java deleted file mode 100644 index 918a3390c7..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/bioportal/CandidateMediatingOntology.java +++ /dev/null @@ -1,88 +0,0 @@ -package uk.ac.ox.krr.logmap2.bioportal; - -public class CandidateMediatingOntology { - - private BioPortalOntologyInfo bioportal_ontology; - - private int positive_hits; - - private int num_sysnonyms; - - //To be suitable - private final int MAX_SIZE_ONTOLOGY=100000; - private final int MIN_SIZE_ONTOLOGY=10; - - - public CandidateMediatingOntology(BioPortalOntologyInfo bio_onto, int syn_size){ - //A candidate ontology must at least have a positive hit with at least 1 provided synonym - positive_hits = 1; - num_sysnonyms = syn_size; - - bioportal_ontology=bio_onto; //data about acronym, num classes, depth, etc. - - } - - - public void increasePositiveHits(){ - positive_hits++; - } - - public void increaseNumberOfProvidedSynonyms(int syn_size){ - num_sysnonyms+=syn_size; - } - - public int getPositiveHits(){ - return positive_hits; - } - - public int getNumberOfProvidedSynonyms(){ - return num_sysnonyms; - } - - public int getNumberOfClasses(){ - return bioportal_ontology.getNumberOfClasses(); - } - - public String getOntologyLanguage(){ - return bioportal_ontology.getOntologyLanguage(); - } - - public int getSuitabilityValue(){ - //we rank bad big ontologies or very small ones. Big ontologies are time-consuming to download from BioPortal. - if (bioportal_ontology.getNumberOfClasses()>MAX_SIZE_ONTOLOGY || bioportal_ontology.getNumberOfClasses() ordered_candidate_mo = new TreeSet(new CandidateMediatingOntologyComparator()); - - //This structure will be updated wrt the results of the BioPortal calls - private Map candiateMOs = new HashMap(); - - private List selectedMediatingOntologies = new ArrayList(); - - private Set representative_labels; - - private Set acronyms = new HashSet(); - - //Ontologies producing known errors - private Set bad_ontologies = new HashSet(); - - - - private final int MAX_SIZE_ONTOLOGY=20000; - - private final int MAX_NUM_CALLS=200; - private final int MIN_NUM_CALLS=35; - - - private final int SIZE_SELECTED_ONTOS=Parameters.max_mediating_ontologies; //10 - public final int MAX_MO_FOR_MATCHING=Parameters.max_mediating_ontologies; //5 or 10 - - private int num_calls=0; - - - /** - * This class extracts the set of most suitable mediating ontologies - * for a given set of concept labels from ontology 1 and ontology 2 - * @param representative_labels_onto1 - * @param representative_labels_onto2 - */ - public MediatingOntologyExtractor( - Set representative_labels){ - - bioportal = new RESTBioPortalAccess(); - - if (bioportal.isActive()){ - - //TODO To speed up process - //This could be commented since we already ignore those ontologies giving errors or not contributing to the composed mappings - bad_ontologies.add("OPE");//gives an error - //bad_ontologies.add("SNOMEDCT"); //not available - bad_ontologies.add("NIFSTD"); //error when downloading it - bad_ontologies.add("RADLEX"); //interesting concepts only in individuals - //bad_ontologies.add("FMA"); //the download is a zip file and gives an error - bad_ontologies.add("SOPHARM");//error downloading - bad_ontologies.add("EP");//Basically it only contaisn terms from the Imported FMA, but is is imported from outside bioPortal (error downloading) - bad_ontologies.add("GO-PLUS"); //Error accessing metadata - - this.representative_labels=representative_labels; - - extractMediatingOntologies(); - - //if (Parameters.print_output_always) - printMediatingOntologies(); - - - } - else{ - System.out.println("BioPotal is not accessible. No mediating ontology has been extracted."); - } - - } - - private void printMediatingOntologies() { - - System.out.println("Necessary number of calls to BioPortal: " + num_calls); - for (int i=0; iMAX_NUM_CALLS){ - createOrderedMediatingOntologiesList(); - break; - } - //We check every 10 calls if any change in the ranking - else if (num_calls%10==0){ - - //if top 5 not changed in 10 calls then we stop (20 calls) - if (!createOrderedMediatingOntologiesList()) - break; - } - - } - - } - - private void extractSuitableOntologiesForLabel(String label){ - try { - - acronyms.clear(); - - int size_synset; - //TODO We do not require exact correspondence? - //If no exact we may get many crap and more than one page... time may is affected dramatically - JsonNode jsonConcepts = bioportal.getConcepts4Label(label, true); - - //If an ontology appears several times for a concept - for (JsonNode concept : jsonConcepts) { - - //TODO Something has change din BioPortal and no synonyms are given for UBERON - //if (concept.has(bioportal.SYNONYM)) { - - String acronym = bioportal.getOntologyAcronym(concept - .get(bioportal.LINKS).get(bioportal.ONTOLOGY).asText()); - - //Consider only one positive hit per label - //For example EHDA has 39 positive hits for only one label!! - //Also ignore ontologies that produce an error. E.g. have a wrong OWL format - if (acronyms.contains(acronym) || bad_ontologies.contains(acronym)) - continue; - - acronyms.add(acronym); - - size_synset=0; - if (concept.has(bioportal.SYNONYM)) - size_synset=concept.get(bioportal.SYNONYM).size(); - - //System.out.println("\t"+acronym); - - //Already in list - if (candiateMOs.containsKey(acronym)){ - - candiateMOs.get(acronym).increasePositiveHits(); - candiateMOs.get(acronym).increaseNumberOfProvidedSynonyms(size_synset); - - } - else{ - - //We call bioportal about metrics - - BioPortalOntologyInfo onto_bio = bioportal.getMetricInfo4Onto(acronym); - - ///if (onto_bio.getClasses()<=MAX_SIZE_ONTOLOGY){ - candiateMOs.put( - acronym, - new CandidateMediatingOntology( - onto_bio, - size_synset)); - //} - } - - - - //} - - } - - } - - - catch (JsonProcessingException e) { - // TODO Auto-generated catch block - System.out.println("Error performing the BioPortal call for: " - + label + ". Mediating ontology search."); - } catch (IOException e) { - // TODO Auto-generated catch block - System.out.println("Error performing the BioPortal call for: " - + label + ". Mediating ontology search."); - } - } - - - - - - - - /** - * Return "true" if changed top 5 OR still too early. We will call this method every X calls to bioportal - * @return - */ - private boolean createOrderedMediatingOntologiesList(){ - - //Former order - CandidateMediatingOntology[] former_order = new CandidateMediatingOntology[ordered_candidate_mo.size()]; - former_order = ordered_candidate_mo.toArray(former_order); - - //Clear and Add new elements from hashMap - ordered_candidate_mo.clear(); - - for (String key : candiateMOs.keySet()){ - ordered_candidate_mo.add(candiateMOs.get(key)); - } - - //New order - CandidateMediatingOntology[] new_order = new CandidateMediatingOntology[ordered_candidate_mo.size()]; - new_order = ordered_candidate_mo.toArray(new_order); - - - //Current selected ontologies - //printMediatingOntologies(); - selectedMediatingOntologies.clear(); - int size = (new_order.length>=SIZE_SELECTED_ONTOS) ? SIZE_SELECTED_ONTOS : new_order.length; - //int size = new_order.length; - for (int i = 0; i < size; i++) { - selectedMediatingOntologies.add(new_order[i].getOntologyAcronym()); - } - - - //Not reached minimum num of calls - if (num_calls=5 && former_order.length>=5){ - - //We require the top-5 MO to have more than 20 positive hits - if (new_order[4].getPositiveHits()<20) - return true; - - //compare arrays - for (int i = 0; i < 5; i++) { - if (!new_order[i].equals(former_order[i])){ - return true; - } - } - return false; - //return true; - } - else{ //not enough elements yet - return true; - } - - - } - - - public int getNumCallsBioPortal(){ - return num_calls; - } - - - public List getSelectedMediatingOntologies() { - return selectedMediatingOntologies; - } - - - - public OWLOntology downloadBioPortalOntology(String ontoAcronym, int attempts){ - return bioportal.downLoadOntology(ontoAcronym, attempts); - } - - - - - private class CandidateMediatingOntologyComparator implements Comparator { - - @Override - public int compare(CandidateMediatingOntology mo1, CandidateMediatingOntology mo2) { - - if (mo1.getSuitabilityValue() usefulSources = new HashSet(); - - private int numQuestionsBioPortal_searchAll = 0; - - /** - * We try to establish a simple connection with BioPortal to check if it is - * active - */ - public boolean isActive() { - - HttpURLConnection conn; - - try { - - //We perform a simple query over a small ontology. Currently it takes around half second - conn = getConnection(REST_URL + "/ontologies/BFO/metrics"); - //conn = getConnection("http://data.bioontology.org/ontologies/BFO/classes/http%3A%2F%2Fwww.ifomis.org%2Fbfo%2F1.1%2Fspan%23Occurrent"); - - if (conn.getResponseCode()==200) - return true; - - System.out.println("BioPortal is not active: " + conn.getResponseCode()); - - } - catch (Exception e) { - - } - - - return false; - - - } - - public Set getSynonyms4Label(String label) { - - Set synonyms = new HashSet(); - - try { - - JsonNode jsonConcepts = getConcepts4Label(label); - - for (JsonNode concept : jsonConcepts) { - - // System.out.println(concept.get(PREFLABEL).asText()); - if (concept.has(PREFLABEL)) { - synonyms.add(concept.get(PREFLABEL).asText()); - } - - if (concept.has(SYNONYM)) { - - // We add the ontology to trusted sources - usefulSources.add(getOntologyAcronym(concept.get(LINKS) - .get(ONTOLOGY).asText())); - // System.out.println("\t"+getOntologyAcronym(concept.get(LINKS).get(ONTOLOGY).asText())); - - for (JsonNode syn : concept.get(SYNONYM)) { - synonyms.add(processSynonym(syn.asText())); - // System.out.println("\t"+processSynonym(syn.asText())); - - } - } - - // TODO Deal with mappings - // System.out.println(concept.findValue(MAPPINGS)); - - } - - // ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter(); - // System.out.println(writer.writeValueAsString(jsonConcepts)); - - } - - catch (JsonProcessingException e) { - System.out.println("Error performing the BioPortal call for: " - + label); - } catch (IOException e) { - System.out.println("Error performing the BioPortal call for: " - + label); - } - - return synonyms; - } - - - - - //TODO To be done - public Set getSuitableOntologiesForLabels(Set labels) { - return null; - } - - - /** - * Get both synonyms and mappings from BioPortal - Added by Xi Chen - * Level 1 only - * - * @param label - * @param synonyms - * @param mappings - */ - public void getSynonymsAndMappings4Label(String label, Set synonyms, Set set) { - try { - JsonNode jsonConcepts = getConcepts4Label(label); - for (JsonNode concept : jsonConcepts) { -// synonyms.add(concept.get(PREFLABEL).asText()); -// if (concept.has(SYNONYM)) { -// // We add the ontology to trusted sources -// usefulSources.add(getOntologyAcronym(concept.get(LINKS) -// .get(ONTOLOGY).asText())); -// -// for (JsonNode syn : concept.get(SYNONYM)) { -// synonyms.add(processSynonym(syn.asText())); -// } -// } - //Deal with mappings - String idUrl = concept.findValue(ID).asText(); - set.add(idUrl); - } - } catch (IOException e) { - System.out.println("Error performing the BioPortal call for: " - + label); - } - } - - /**arg0 - * Get both synonyms and mappings from BioPortal - Added by Xi Chen - * Level 1 + level 2 - * - * @param label - * @param synonyms - * @param mappings - */ - public void getSynonymsAndMappings4Label2(String label, Set synonyms, Set set) { - Set mappingURLSet = new HashSet(); - try { - JsonNode jsonConcepts = getConcepts4Label(label); - for (JsonNode concept : jsonConcepts) { -// synonyms.add(concept.get(PREFLABEL).asText()); -// if (concept.has(SYNONYM)) { -// // We add the ontology to trusted sources -// usefulSources.add(getOntologyAcronym(concept.get(LINKS) -// .get(ONTOLOGY).asText())); -// -// for (JsonNode syn : concept.get(SYNONYM)) { -// synonyms.add(processSynonym(syn.asText())); -// } -// } - //Deal with mappings - String idUrl = concept.findValue(ID).asText(); - set.add(idUrl); - String url = concept.findValue(MAPPINGS).asText(); - mappingURLSet.add(url); - } - } catch (IOException e) { - System.out.println("Error performing the BioPortal call for: " - + label); - } - - // Find level 2 mappings - for (String url : mappingURLSet) { - try { - JsonNode jasonMapping = jsonToNode(getRequest(url)); - List selfURL = jasonMapping.findValuesAsText(ID); - set.addAll(selfURL); - } catch (IOException e) { - System.out.println("Error performing the BioPortal call for: " - + label); - } - } - } - - - - - - /* - * - */ - public BioPortalOntologyInfo getMetricInfo4Onto(String ontoAcronym) { - - int classes = 0; - int depth = 0; - String language = "UNKNOWN"; - - try { - // JsonNode test =jsonToNode(getRequest(REST_URL + - // "/ontologies/"+"UBERON"+"/metrics")); - JsonNode ontologyNode = jsonToNode(getRequest(REST_URL - + "/ontologies/" + ontoAcronym + "/metrics")); - //for test - //System.out.println(REST_URL - // + "/ontologies/" + ontoAcronym + "/metrics"); - - - //Only if - if (ontologyNode.size() != 0){ - classes = ontologyNode.get(CLASSES).asInt(); - depth = ontologyNode.get(MAXDEPTH).asInt(); - - //Only for small ontologies (we save then a call)? - //if (classes <= MAX_SIZE_ONTOLOGY){ - - JsonNode ontologyNode2 = jsonToNode(getRequest(REST_URL - + "/ontologies/" + ontoAcronym + "/submissions")); - - //http://data.bioontology.org/ontologies/EHDA/submissions/ - - if (ontologyNode2.size() != 0){ - if (ontologyNode2.isArray() && ontologyNode2.get(0).has(ONTOLOGY_LANGUAGE)){ - language = ontologyNode2.get(0).get(ONTOLOGY_LANGUAGE).asText(); - } - } - - - } - - - - - - - return new BioPortalOntologyInfo( - ontoAcronym, - classes, - depth, - language); - - } - catch (IOException e) { - //e.printStackTrace(); - LogOutput.printError("Error getting metrics from bioportal ontology."); - } - - return new BioPortalOntologyInfo(ontoAcronym); - } - - - - - - - - - - - - - - public Set getUsefulSources() { - return usefulSources; - } - - public int getNumberOfBioPortalCalls() { - return numQuestionsBioPortal_searchAll; - } - - /** - * Since we pass parameters in a GET call we cannot give unsupported - * characters or spaces - * - * @param label - * @return - */ - private String processLabel(String label) { - label = label.replaceAll("_", " "); - try { - return URLEncoder.encode(label, "UTF-8"); - } catch (UnsupportedEncodingException e) { - return label; - } - - } - - // TODO - /** - * MOdified by Xi -- "(" might appear in the first index. - * No sure if need handle the case like: - * "(Meckel's diverticulum) or (persistent omphalomesenteric duct) or (persistent vitelline duct) (disorder)" - * in http://data.bioontology.org/search?q=meckel%27s+diverticulum&exact_match=true&ontologies=RADLEX,REXO,NIFSTD,CCO,GO-EXT,MESH,GEXO,ONTOAD,NCIT,HUPSON,RETO,EFO,SNOMEDCT,UBERON,GO,ZFA,CL - * @param synonym - * @return - */ - private String processSynonym(String synonym) { - - // Remove suffixes like (morphologic abnormality) very common in - // SNOMEDCT. - if (synonym.contains("(")) { - int idx = synonym.indexOf("("); - synonym = idx != 0 ? synonym.substring(0, idx - 1) : synonym; - } -// if (synonym.contains("(")) -// synonym = synonym.substring(0, synonym.indexOf("(") - 1); - - return synonym.toLowerCase(); - - } - - public String getOntologyAcronym(String ontologyURI) { - - return ontologyURI.substring(ontologyURI.lastIndexOf("/") + 1); - - } - - /** - * Gets the sets of concepts which has an exact or not correspodence with the - * provided label - * - * @param query - * @return - * @throws JsonProcessingException - * @throws IOException - */ - public JsonNode getConcepts4Label(String label, boolean exact) - throws JsonProcessingException, IOException { - - numQuestionsBioPortal_searchAll++; - - String query = processLabel(label); - - - //TODO - //System.out.println(REST_URL + "/search?q=" + query - // + getExactMatchParameter(true)/* + getFilterByOntology()*/); - - return jsonToNode( - getRequest(REST_URL + "/search?q=" + query - + getExactMatchParameter(exact)/* + getFilterByOntology()*/)) - .get(COLLECTION); - - } - - - /** - * Gets the sets of concepts which has an exact correspodence with the - * provided label - * - * @param query - * @return - * @throws JsonProcessingException - * @throws IOException - */ - public JsonNode getConcepts4Label(String label) - throws JsonProcessingException, IOException { - - return getConcepts4Label(label, true); - - } - - - public void getMappingsForGivenOntologies(String source_onto, Set target_ontos, Set mapping_objects, WriteFile writer){ - getMappingsForGivenOntologies(source_onto, target_ontos, mapping_objects, 1, 100, writer); - } - - /** - * Given the id/acronym of two ontologies get the list of mappings between them - * @param source_onto1 - * @param onto2 - * @return - */ - public void getMappingsForGivenOntologies(String source_onto, Set target_ontos, Set mapping_objects, int starting_page, int pagesize, WriteFile writer){ - - //http://data.bioontology.org/ontologies/SNOMEDCT/mappings - try { - - //String mapping_request = REST_URL + "/ontologies/"+source_onto+"/mappings"; - String mapping_request = REST_URL + "/ontologies/"+source_onto+"/mappings?" + "pagesize="+ pagesize + "&page="+starting_page; - //String mapping_request = REST_URL + "/ontologies/"+source_onto+"/mappings?" + "page="+starting_page; - - JsonNode mappings_page = jsonToNode(getRequest(mapping_request)); - - getMappingsFromPageForGivenOntologies(mapping_request, mappings_page, source_onto, target_ontos, mapping_objects, writer); - - } catch (JsonProcessingException e) { - System.out.println("Error extracting the mappings for: " + source_onto + " and " + target_ontos); - e.printStackTrace(); - } catch (IOException e) { - System.out.println("Error extracting the mappings for: " + source_onto + " and " + target_ontos); - e.printStackTrace(); - } - - - //TODO Some mappings created by CUI or by Loom - //(Lexical OWL Ontology Matcher: http://www.bioontology.org/wiki/index.php/LOOM) - //See http://www.bioontology.org/wiki/index.php/BioPortal_Mappings - - - - } - - //Set source_names = new HashSet(); - /** - * Gets the mapping between two ontologies for a given page - * @param mappings_page - * @param source_onto - * @param onto2"@id" - * @throws JsonProcessingException - * @throws IOException - */ - private void getMappingsFromPageForGivenOntologies( - String original_request, JsonNode mappings_page, String source_onto, Set target_ontos, - Set mapping_objects, WriteFile writer) throws JsonProcessingException, IOException{ - - - - int nextPageNumber=-1; - if (!mappings_page.get(NEXTPAGE).isNull()){ - - nextPageNumber = mappings_page.get(NEXTPAGE).asInt(); - - if (nextPageNumber==1 || nextPageNumber==5 || nextPageNumber==100 || nextPageNumber==200 || nextPageNumber==500 || nextPageNumber==1000 || nextPageNumber==1500 || - nextPageNumber==2000 || nextPageNumber==2500 || nextPageNumber==2770 || nextPageNumber==3000 || nextPageNumber==3500 || nextPageNumber==4200 || nextPageNumber==4000 - || nextPageNumber==4500 || nextPageNumber==5000 || nextPageNumber==5500 || nextPageNumber==6000) - - System.out.println("Getting page: " + nextPageNumber); - - } - - JsonNode nextPage = mappings_page.get(LINKS).get(NEXTPAGE); - - - - - int numberOfPages = mappings_page.get(PAGECOUNT).asInt(); - - - - //System.out.println(nextPage + " "+ source_names); - - //List of mappings - JsonNode mappings = mappings_page.get(COLLECTION); - - Set sources; - - int numErroneous_mappings = 0; - - for (JsonNode mapping : mappings){ - - try{ - - sources = getMappingSources(mapping); - - if (mapping.get(CLASSES).isNull()){ - System.out.println("No CLASSES!!"); - } - - //List of classes in mapping (in principle only two) - //Note that order is not respected... entity from onto1 may appear in second position) - if (mapping.get(CLASSES).isNull() || mapping.get(CLASSES).size()!=2){ - //System.out.println(mapping.get(CLASSES)); - numErroneous_mappings++; - continue; - } - - - JsonNode classA = mapping.get(CLASSES).get(0); - String onto_acronymA = getOntologyAcronym(classA.get(LINKS).get(ONTOLOGY).asText()); - - JsonNode classB = mapping.get(CLASSES).get(1); - String onto_acronymB = getOntologyAcronym(classB.get(LINKS).get(ONTOLOGY).asText()); - - - String uri1; - String uri2; - String onto1acronym; - String onto2acronym; - String type1 = classA.get(TYPE).asText(); - String type2 = classB.get(TYPE).asText(); - if (!type1.equals(owl_clas) || !type2.equals(owl_clas)){ - System.out.println("MAPPING INVOLVING NO CLASSES!!"); - } - - - if (source_onto.equals(onto_acronymB)){ - uri1 = classB.get(ID).asText(); - uri2 = classA.get(ID).asText(); - onto1acronym = onto_acronymB; - onto2acronym = onto_acronymA; - } - else { //if (source_onto.equals(onto_acronymA)){ - uri1 = classA.get(ID).asText(); - uri2 = classB.get(ID).asText(); - onto1acronym = onto_acronymA; - onto2acronym = onto_acronymB; - } - - - - //Since its is rather slow we store all class mappings for future evaluation - writer.writeLine( - uri1 + "|" + - uri2 + "|" + - onto1acronym + "|" + - onto2acronym + "|" + - set2string(sources)); - - - if (filterMappingBySource(sources)) //e.g. same_uris or null or xref - continue; - - - if (!target_ontos.contains(onto_acronymA) && !target_ontos.contains(onto_acronymB)){ - continue; //Not the mapping we were looking for - } - - - mapping_objects.add( - new BioPortalMapping( - uri1, uri2, onto1acronym, onto2acronym, sources)); - - - } - catch (Exception e){ - //In case of error, continue with next one - e.printStackTrace(); - numErroneous_mappings++; - } - - }//end mapping - - if (numErroneous_mappings>0){ - System.out.println("\tNumber of mappings which led to an error: " + numErroneous_mappings + " in page brefore of " + nextPage); - } - - //Recursivity till no more pages - if (!nextPage.isNull() && nextPage.asText().length() != 0) { - - try{ - getMappingsFromPageForGivenOntologies( - original_request, - jsonToNode(getRequest(nextPage.asText())), - source_onto, target_ontos, mapping_objects, writer); - } - catch (Exception e){ - //In case of error, continue with next one - System.out.println("\tError accessing next page: " + nextPageNumber + " of " + numberOfPages +" -> "+ nextPage.asText()); - - ///try to access following one if any - /*if (numberOfPages > nextPageNumber){ - - nextPageNumber++; - - String newRequest; - if (original_request.contains("page=")) - newRequest = original_request.split("page=")[0] + "page=" + nextPageNumber; - else if (original_request.contains("pagesize=")) - newRequest = original_request + "&page=" + nextPageNumber; - else - newRequest = original_request + "?page=" + nextPageNumber; - - System.out.println("\tNew request: " + newRequest); - - try{ - getMappingsFromPageForGivenOntologies( - original_request, - jsonToNode(getRequest(newRequest)), - source_onto, target_ontos, mapping_objects, writer); - } - catch (Exception e2){ - //In case of error, continue with next one - System.out.println("\tError accessing next page (2nd attempt): " + nextPageNumber + " of " + numberOfPages +" -> " + newRequest); - } - }*/ - - - } - } - - - - } - - - - private String set2string(Set set){ - - String string=""; - - for (String s : set){ - string += s + ";"; - } - return string.substring(0, string.length()-1); //we remove the last ";" - - } - - private Set getMappingSources(JsonNode mapping){ - - //List of mappings sources - JsonNode mappings_sources = mapping.get(PROCESS); - - Set source_list= new HashSet(); - - for (JsonNode source : mappings_sources){ - - if (source.get(NAME).asText().equals(NULL)) - source_list.add(NOSOURCE); - else - source_list.add(source.get(NAME).asText()); - } - - //May 2016: Now it appears directly under "source" and in capitals - source_list.add(mapping.get(SOURCE).asText().toLowerCase()); - - //Detected a few cases without source - if (source_list.isEmpty()){ - source_list.add(NOSOURCE); - } - - return source_list; - } - - - /** - * We filter if null, sameuri or xref - * @param sources - * @return - */ - private boolean filterMappingBySource(Set sources){ - - //if (sources.isEmpty()) - // return true; - - //Ignore mappings to itself! - //Same URI appears in different ontologies, but there is no need to add a mapping since the URI is the same - if (sources.contains(SAMEURIS) || sources.contains(SAMEURI)) - return true; - - if (sources.contains(LOOM) || sources.contains(CUI) || sources.contains(MRMAP)) - return false; - - - return true; ////only XREF, NULL, NOSOURCE - - } - - - /** - * We will filter by ontologies only when we have learnt which are the most - * suitable ontologies (i.e. the ones providing synonyms). It is expected - * that filtering by ontology will speed up the process quite a lot - * - * @return - */ - private String getFilterByOntology() { - - StringBuilder filter = new StringBuilder(); - if (numQuestionsBioPortal_searchAll > LEARNING_CALLS) { - if (!usefulSources.isEmpty()) { - - filter.append("&ontologies="); - - for (String string : usefulSources) { - filter.append(string); - filter.append(","); - } - return filter.substring(0, filter.length() - 1); - } - } - - return filter.toString(); - } - - private String getExactMatchParameter(boolean exact) { - return "&exact_match=" + String.valueOf(exact).toLowerCase(); - } - - private JsonNode jsonToNode(String json) throws JsonProcessingException, - IOException { - - return mapper.readTree(json); - - } - - private String getRequest(String urlToGet) throws IOException { - - HttpURLConnection conn; - BufferedReader rd; - String line; - String result = ""; - - - //In some cases it fails the connection. Try several times - boolean success=false; - int attempts=0; - - - //TODO how many attempts? - //while(!success && attempts<25){ - while(!success && attempts<3){ - - - attempts++; - - try{ - conn = getConnection(urlToGet); - - rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); - - while ((line = rd.readLine()) != null) { - result += line; - } - rd.close(); - - if (!result.isEmpty()) - success=true; - } - - catch(IOException e){ - System.out.println("Error accessing: " + urlToGet + " Attempt: " + attempts); - } - - } - - if (!success) - throw new IOException(); //We throw error to check next page - else if (attempts>1) - System.out.println("SUCCESS accessing: " + urlToGet + " Attempt: " + attempts); - - return result; - } - - private HttpURLConnection getConnection(String urlToGet) throws IOException { - - URL url; - HttpURLConnection conn; - - url = new URL(urlToGet); - conn = (HttpURLConnection) url.openConnection(); - - conn.setRequestMethod("GET"); - conn.setRequestProperty("Authorization", "apikey token=" - + API_KEY_Ernesto); - conn.setRequestProperty("Accept", "application/json"); - - return conn; - - } - - - public OWLOntology downLoadOntology(String ontoAcronym, int attempts) { - - HttpURLConnection conn; - String urlToGet = REST_URL + "/ontologies/" + ontoAcronym + "/download"; - - System.out.println("Downloading ontology " + ontoAcronym + ". Attempt: " + attempts); - - - // Get hold of an ontology manager - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - //Very important t avoid problems with ontologies - manager.setSilentMissingImportsHandling(true); - - - OWLOntology MOOntology = null; - try { - - conn = getConnection(urlToGet); - - conn.setReadTimeout(600000);//10 min / 600 seconds as timeout - InputStream in = conn.getInputStream(); - - MOOntology = manager.loadOntologyFromOntologyDocument(in); - - //manager.setOntologyDocumentIRI(loadOntology, IRI.create("http://bioportal,ontology.org/"+ontoAcronym)); - //manager.setOntologyFormat(loadOntology, new RDFXMLOntologyFormat()); - //MOOntology = manager.createOntology(loadOntology.getAxioms(), IRI.create("http://bioportal.ontology.org/"+ontoAcronym)); - - - //System.out.println("Loaded ontology: " + loadOntology.toString()); - - /*String fileName = (conn.getHeaderField("Content-Disposition").split("="))[1] ; - fileName = fileName.split("\"")[1]; - System.out.println(fileName); - //conn.getRequestProperty("filename"); - - Files.copy(in, Paths.get("OAEI2013/"+fileName)); - //Files.copy(in, Paths.get("OAEI2013/"+ontoAcronym + ".owl")); -*/ - - } catch (IOException e) { - if (attempts<3) //we try again - return downLoadOntology(ontoAcronym, attempts+1); - else - System.err.println("Error downloading the ontology "+ ontoAcronym + " from BioPortal."); - } catch (OWLOntologyCreationException e) { - //e.printStackTrace(); - if (attempts<3) //we try again - return downLoadOntology(ontoAcronym, attempts+1); - else{ - System.err.println("Error creating BioPortal ontology "+ ontoAcronym + " from input stream."); - e.printStackTrace(); - } - } - - //return loadOntology; - return MOOntology; - - } - - - - - public static void main(String[] args) throws Exception { - RESTBioPortalAccess bioportal = new RESTBioPortalAccess(); - - long end, init; - - - - if (bioportal.isActive()) { - - System.out.println("BioPortal is active: "); - - init = Calendar.getInstance().getTimeInMillis(); - - Set mapping_set = new HashSet(); - - System.out.println("Axioms UBERON: " + bioportal.downLoadOntology("UBERON", 1).getAxiomCount()); - System.out.println("Axioms UBERON: " + bioportal.downLoadOntology("MP", 1).getAxiomCount()); - - - //bioportal.getMappingsForGivenOntologies("BP","BDO", mapping_set); - - //System.out.println("Source names: " + bioportal.source_names); - - /* - bioportal.getSynonyms4Label("malignant_melanoma"); - System.out.println(bioportal.getNumberOfBioPortalCalls() + " " - + bioportal.getUsefulSources().size()); - end = Calendar.getInstance().getTimeInMillis(); - System.out - .println((double) ((double) end - (double) init) / 1000.0); - - init = Calendar.getInstance().getTimeInMillis(); - bioportal.getSynonyms4Label("malignant_melanoma"); - // bioportal.getSynonyms4Label("ovarian follicle"); - System.out.println(bioportal.getNumberOfBioPortalCalls() + " " - + bioportal.getUsefulSources().size()); - */ - - - end = Calendar.getInstance().getTimeInMillis(); - System.out - .println("TIME: " + (double) ((double) end - (double) init) / 1000.0); - - - } - - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/AbstractDivision.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/AbstractDivision.java deleted file mode 100644 index 728800bc82..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/AbstractDivision.java +++ /dev/null @@ -1,409 +0,0 @@ -/******************************************************************************* - * Copyright 2017 by the Department of Informatics (University of Oslo) - * - * This file is part of the Ontology Services Toolkit - * - *******************************************************************************/ -package uk.ac.ox.krr.logmap2.division; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.semanticweb.owlapi.io.IRIDocumentSource; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.MissingImportHandlingStrategy; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.manchester.syntactic_locality.OntologyModuleExtractor; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.overlapping.OntologyProcessing4Overlapping; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; - -/** - * - * @author ernesto - * Created on 6 Mar 2018 - * - */ -public abstract class AbstractDivision { - - protected OntologyProcessing4Overlapping source_processing; - protected OntologyProcessing4Overlapping target_processing; - - protected boolean use_full_overlapping = true; - - protected Set> if_intersection; - - - protected Set overlapping_source; - protected Set overlapping_target; - - protected Set entities_source = new HashSet(); - protected Set entities_target = new HashSet(); - - - protected OntologyModuleExtractor module_extractor_source; - - protected OntologyModuleExtractor module_extractor_target; - - - protected double total_time=0.0; - - - protected long size_source_ontology; - protected long size_target_ontology; - - - - protected OWLOntology loadOWLOntology(String phy_iri_onto) throws OWLOntologyCreationException{ - - try { - - OWLOntologyManager managerOnto; - managerOnto = SynchronizedOWLManager.createOWLOntologyManager(); - //managerOnto.setSilentMissingImportsHandling(true); - OWLOntologyLoaderConfiguration conf = new OWLOntologyLoaderConfiguration(); - conf.setMissingImportHandlingStrategy(MissingImportHandlingStrategy.SILENT); - return managerOnto.loadOntologyFromOntologyDocument( - new IRIDocumentSource(IRI.create(phy_iri_onto)), conf); - - - } - catch(Exception e){ - System.err.println("Error loading OWL ontology: " + e.getMessage()); - //e.printStackTrace(); - throw new OWLOntologyCreationException(); - } - } - - - - - - public double getComputationTime(){ - return total_time; - } - - - public long getSizeSourceOntology(){ - return size_source_ontology; - } - - - public long getSizeTargetOntology(){ - return size_target_ontology; - } - - - - - - public void clear(){ - - try{ - source_processing.clearStructures(); - target_processing.clearStructures(); - - source_processing.clearClass2Identifier(); - target_processing.clearClass2Identifier(); - - if_intersection.clear(); - - entities_source.clear(); - entities_target.clear(); - - - module_extractor_source.clearStrutures(); - - module_extractor_target.clearStrutures(); - - overlapping_source.clear(); - overlapping_target.clear(); - } - catch (Exception e){ - //In case of error - } - } - - - - /** - * @param source - * @param target - */ - protected void setUpModuleExtractors(Set source_ax, Set target_ax) { - - module_extractor_source = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - source_ax, - true, - false, - true); - - module_extractor_target = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - target_ax, - true, - false, - true); - //Optimization very important! - - - - } - - - - - /** - * Method from naive algorithm - * @param source - * @param target - * @param list_if_entries - * @param n_task - * @param size_groups - * @return - * @throws OWLOntologyCreationException - */ - protected MatchingTask createMatchingTask(String uri_source, String uri_target, List> list_if_entries, int n_task, int size_groups) throws OWLOntologyCreationException { - - int lower_bound = n_task*size_groups; - int upper_bound = (n_task+1)*size_groups; - - if (upper_bound>list_if_entries.size()) - upper_bound=list_if_entries.size(); - - - entities_source.clear(); - entities_target.clear(); - - - //Extract entities from IFs and convert id to OWLEntity - for (int i=lower_bound; i set_words = list_if_entries.get(i); - - - for (int ide1 : source_processing.getWeakInvertedFile().get(set_words)){ - entities_source.add(source_processing.getClass4identifier(ide1)); - } - for (int ide2 : target_processing.getWeakInvertedFile().get(set_words)){ - entities_target.add(target_processing.getClass4identifier(ide2)); - } - - } - - return new MatchingTask( - module_extractor_source.extractAsOntology(entities_source, IRI.create(uri_source + "-Task-" + n_task)), - module_extractor_target.extractAsOntology(entities_target, IRI.create(uri_target + "-Task-" + n_task)) - ); - - } - - - - /** - * Method from advanced algorithm (word embeddings) - * @param source - * @param target - * @param list_if_entries - * @param n_task - * @return - * @throws OWLOntologyCreationException - */ - protected MatchingTask createMatchingTask(String uri_source, String uri_target, Set> set_if_entries, int n_task, int max_ambiguity, boolean change_ontology_uri) throws OWLOntologyCreationException { - - entities_source.clear(); - entities_target.clear(); - - - //Extract entities from IFs and convert id to OWLEntity - for (Set set_words : set_if_entries){ - - //Safety check - if (!source_processing.getWeakInvertedFile().containsKey(set_words) || - !target_processing.getWeakInvertedFile().containsKey(set_words)) - continue; - - int num_ids1 = source_processing.getWeakInvertedFile().get(set_words).size(); - int num_ids2 = target_processing.getWeakInvertedFile().get(set_words).size(); - - //To avoid highly ambiguos entries in IF - if ((num_ids1 + num_ids2) > max_ambiguity) - continue; - - - try{ - for (int ide1 : source_processing.getWeakInvertedFile().get(set_words)){ - entities_source.add(source_processing.getClass4identifier(ide1)); - } - for (int ide2 : target_processing.getWeakInvertedFile().get(set_words)){ - entities_target.add(target_processing.getClass4identifier(ide2)); - } - } - catch (Exception e){ - //System.out.println(set_words); - //for (String s : set_words) - // System.out.println(s); - //e.printStackTrace(); - continue; - } - - } - - if (change_ontology_uri) { - - return new MatchingTask( - module_extractor_source.extractAsOntology(entities_source, IRI.create(uri_source + "-Task-" + n_task)), - module_extractor_target.extractAsOntology(entities_target, IRI.create(uri_target + "-Task-" + n_task)) - //Pomap case - //module_extractor_source.extractAsOntology(entities_source, IRI.create("http://source.owl")), - //module_extractor_target.extractAsOntology(entities_target, IRI.create("http://target.owl")) - ); - } - else { - //Alod2vec does not like the change of uri. ALthough it seem to be a bug in the system - return new MatchingTask( - module_extractor_source.extractAsOntology(entities_source, IRI.create(uri_source)), - module_extractor_target.extractAsOntology(entities_target, IRI.create(uri_target)) - ); - } - } - - - - /** - * Method from advanced algorithm (concept embeddings) - * @param source - * @param target - * @param list_if_entries - * @param n_task - * @return - * @throws OWLOntologyCreationException - */ - protected MatchingTask createMatchingTask(String uri_source, String uri_target, int n_task, Set concept_ids) throws OWLOntologyCreationException { - - entities_source.clear(); - entities_target.clear(); - - - //System.out.println("Last identifier s: " + source_processing.getLastidentifier()); - //System.out.println("Last identifier t: " + target_processing.getLastidentifier()); - - //Extract entities from IFs and convert id to OWLEntity - for (int concept_id : concept_ids){ - - try{ - //Belongs to ontology 1 - if (concept_id <= source_processing.getLastidentifier()){ - entities_source.add(source_processing.getClass4identifier(concept_id)); - } - else { - - entities_target.add(target_processing.getClass4identifier(concept_id)); - } - } - catch (Exception e){ - //System.out.println(set_words); - e.printStackTrace(); - } - - } - - - //System.out.println("Entities source: " + entities_source.size()); - //System.out.println("Entities target: " + entities_target.size()); - - - return new MatchingTask( - module_extractor_source.extractAsOntology(entities_source, IRI.create(uri_source + "-Task-" + n_task)), - module_extractor_target.extractAsOntology(entities_target, IRI.create(uri_target + "-Task-" + n_task)) - ); - - } - - - - - - - - protected OntologyProcessing4Overlapping createInvertedFile( - OWLOntology ontology, - LexicalUtilities lexicalUtilities, - boolean use_full_overlapping, - int init_index){ - - OntologyProcessing4Overlapping ontology_processing = new OntologyProcessing4Overlapping(ontology, lexicalUtilities, use_full_overlapping, true, init_index); - ontology_processing.processOntologyClassLabels(); - ontology_processing.setInvertedFile4Overlapping(); - - return ontology_processing; - - } - - - - protected Set createOverlappingEstimation(OWLOntology ontology, Set entities){ - - //Module: overlapping overestimation - OntologyModuleExtractor module_extractor = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - ontology.getAxioms(), - true, - false, - true); - - Set overlapping = new HashSet(); - - overlapping.addAll(module_extractor.extract(entities)); - - module_extractor.clearStrutures(); - - //Remove original ontology - //ontology.getOWLOntologyManager().removeOntology(ontology); - //ontology=null; - - entities.clear(); - - return overlapping; - - } - - protected OWLOntology createOverlappingEstimationAsOntology(OWLOntology ontology, Set entities, String uri) throws OWLOntologyCreationException{ - - //Module: overlapping overestimation - OntologyModuleExtractor module_extractor = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - ontology.getAxioms(), - true, - false, - true); - - OWLOntology overlapping = module_extractor.extractAsOntology(entities, IRI.create(uri)); - - module_extractor.clearStrutures(); - - //Remove original ontology - //ontology.getOWLOntologyManager().removeOntology(ontology); - //ontology=null; - - entities.clear(); - - return overlapping; - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/BasicDivision.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/BasicDivision.java deleted file mode 100644 index ee32cf254a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/BasicDivision.java +++ /dev/null @@ -1,252 +0,0 @@ -package uk.ac.ox.krr.logmap2.division; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.semanticweb.owlapi.io.IRIDocumentSource; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.MissingImportHandlingStrategy; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.manchester.syntactic_locality.OntologyModuleExtractor; -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.overlapping.OntologyProcessing4Overlapping; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.statistics.StatisticsTimeMappings; - - -/** - * This class aims at implementing an efficient algorithm to produce multiple - * partitions for ontology alignment. - * The methods rely on efficient lexical indexes and locality based module extraction. - * Number of partitions or matching tasks is required as input. - * @author ernesto - * - */ -public class BasicDivision extends AbstractDivision implements OntologyAlignmentDivision { - - - int num_tasks; - int num_tasks_ouput; - - /** - * - * @param num_tasks The number of required matching tasks - */ - public BasicDivision(int num_tasks){ - this.num_tasks=num_tasks; - this.num_tasks_ouput=num_tasks; - } - - - /** - * For tests o prediction we are interested in only one task as ouput - * @param tasks_ouput - */ - public void setNumTask2Outout(int tasks_ouput){ - this.num_tasks_ouput=tasks_ouput; - } - - - @Override - public List createPartitionedMatchingTasks( - String sourceIRIStr, String targetIRIStr) - throws OWLOntologyCreationException, Exception { - - return createPartitionedMatchingTasks(loadOWLOntology(sourceIRIStr), loadOWLOntology(targetIRIStr)); - } - - - - - @Override - public List createPartitionedMatchingTasks(OWLOntology source, - OWLOntology target) throws OWLOntologyCreationException, Exception { - - - - size_source_ontology = source.getSignature(true).size(); - size_target_ontology = target.getSignature(true).size(); - - - - boolean compute_overlapping_stimation=true; - if (num_tasks==1) - compute_overlapping_stimation=false; - - StatisticsTimeMappings.setInitGlobalTime(); - StatisticsTimeMappings.setCurrentInitTime(); - - List tasks = new ArrayList(); - - - entities_source.clear(); - entities_target.clear(); - - - //1. Create IF inverted Indexes: ontologyProcessing for overlapping - - //1.1 Necessary for stemming and stopwords - LexicalUtilities lexicalUtilities = new LexicalUtilities(); - lexicalUtilities.loadStopWords(); - //lexicalUtilities.loadStopWordsExtended(); - //if (Parameters.use_umls_lexicon) - // lexicalUtilities.loadUMLSLexiconResources(); - lexicalUtilities.setStemmer(); //creates stemmer object (Paice by default) - - //1.2 Source - source_processing = createInvertedFile(source, lexicalUtilities, use_full_overlapping, 0); - //1.3 Target - target_processing = createInvertedFile(target, lexicalUtilities, use_full_overlapping, source_processing.getLastidentifier()+10); - - - //2. Intersect inverted indexes - //We perform intersection an we only keep in inverted file the intersected elements - if_intersection = source_processing.getWeakInvertedFile().keySet(); - if_intersection.retainAll(target_processing.getWeakInvertedFile().keySet()); - target_processing.getWeakInvertedFile().keySet().retainAll(if_intersection); - - - double if_file_time = StatisticsTimeMappings.getRunningTime(); - - LogOutput.print("Time computing inverted file for overlapping (s): " + if_file_time); - LogOutput.print("Number of entries IF: " + if_intersection.size()); - - - //It has a good impact specially if number of tasks > 10 - //3. Create overlapping estimation and "discard original ontologies" - //3.1. Create Entity sets in Overlapping - if (compute_overlapping_stimation){ - StatisticsTimeMappings.setCurrentInitTime(); - for (Set str_set: if_intersection){ - - for (int ide1 : source_processing.getWeakInvertedFile().get(str_set)){ - entities_source.add(source_processing.getClass4identifier(ide1)); - } - for (int ide2 : target_processing.getWeakInvertedFile().get(str_set)){ - entities_target.add(target_processing.getClass4identifier(ide2)); - } - } - - - //3.2 Overlapping Source - overlapping_source = createOverlappingEstimation(source, entities_source); - - //3.3 Overlapping Target - overlapping_target = createOverlappingEstimation(target, entities_target); - - - - double overlapping_time = StatisticsTimeMappings.getRunningTime(); - LogOutput.print("Time computing overlapping modules (overstimation) (s): " + overlapping_time); - } - - - //4. Shuffle intersection of inverted file - //Required to perform several experiments and see if order in IF has an important impact as the split is random! - StatisticsTimeMappings.setCurrentInitTime(); - - - List> list_if_entries = new ArrayList>(); - list_if_entries.addAll(if_intersection) ; - Collections.shuffle(list_if_entries); - - - double shufling_time = StatisticsTimeMappings.getRunningTime(); - LogOutput.print("Time shuffling IF (s): " + shufling_time); - - - //5. Split shuffled into X groups, being X the number of desired matching tasks - //5.1 Extract entities for each of the groups, - //5.2. then corresponding modules in source and target - //5.3. and finally create task - - StatisticsTimeMappings.setCurrentInitTime(); - - - //SOme ontologies does not include an (explicit) URI.... - String uri_onto1; - try { - uri_onto1 = source.getOntologyID().getOntologyIRI().toString(); - } - catch (Exception e){ - uri_onto1 = "http://logmap-partitioning/ontology1"; - } - String uri_onto2; - - try{ - uri_onto2 = target.getOntologyID().getOntologyIRI().toString(); - } - catch (Exception e){ - uri_onto2 = "http://logmap-partitioning/ontology2"; - } - - if (compute_overlapping_stimation) - setUpModuleExtractors(overlapping_source, overlapping_target); - else - setUpModuleExtractors(source.getAxioms(), target.getAxioms()); - - - double modules_setUp__time = StatisticsTimeMappings.getRunningTime(); - LogOutput.print("Time setting up module extractors (s): " + modules_setUp__time); - - - - - StatisticsTimeMappings.setCurrentInitTime(); - - Long size_groups = Math.round((double)list_if_entries.size() / (double)num_tasks); - - //System.out.println(size_groups); - - for (int n_task = 0; n_task createPartitionedMatchingTasks(OWLOntology source, OWLOntology target) - throws OWLOntologyCreationException, Exception { - - StatisticsTimeMappings.setInitGlobalTime(); - - - List tasks=null; - - predicted_number_tasks=-1; - - createTaskSizesList(); - - for (int n_tasks : number_tasks_list){ - BasicDivision partitioning = new BasicDivision(n_tasks); - - //We only require one - partitioning.setNumTask2Outout(1); - - tasks = partitioning.createPartitionedMatchingTasks(source, target); - - if ((tasks.get(0).getSignatureSourceOntology().size()<=required_module_size && tasks.get(0).getSignatureTargetOntology().size()<=required_module_size) || - (!strict_requirement && (tasks.get(0).getSignatureSourceOntology().size()<=required_module_size || tasks.get(0).getSignatureTargetOntology().size()<=required_module_size))){ - - predicted_number_tasks = n_tasks; - - LogOutput.print("\tPREDICTED NUMBER TASKS: " + predicted_number_tasks); - - break; - } - - - } - - if (predicted_number_tasks < 0){ - System.err.println("The required module size is too small for the maximun number of tasks set to '" + max_number_tasks + "'. The current maximum number of tasks leads to modules of size (approximately): " + - tasks.get(0).getSignatureSourceOntology().size() + " in the source ontoology, and "+ tasks.get(0).getSignatureTargetOntology().size() + " in the target ontology."); - tasks = new ArrayList(); - - } - else{ - //Return partitioning for prediction - BasicDivision partitioning = new BasicDivision(predicted_number_tasks); - - //Return tasks - tasks= partitioning.createPartitionedMatchingTasks(source, target); - - } - - total_time = StatisticsTimeMappings.getTotalRunningTime(); - LogOutput.print("Total time (s): " + total_time); - - return tasks; - } - - - - List number_tasks_list=new ArrayList(); - - /** - * @return - */ - private void createTaskSizesList() { - number_tasks_list.add(1); - number_tasks_list.add(2); - number_tasks_list.add(5); - number_tasks_list.add(10); - number_tasks_list.add(20); - number_tasks_list.add(30); - int size = 50; - int i=1; - - while ((i*size) createPartitionedMatchingTasks(String sourceIRIStr, String targetIRIStr) - throws OWLOntologyCreationException, Exception { - return createPartitionedMatchingTasks(loadOWLOntology(sourceIRIStr), loadOWLOntology(targetIRIStr)); - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/ConceptEmbeddingDivision.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/ConceptEmbeddingDivision.java deleted file mode 100644 index 539abbbd3d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/ConceptEmbeddingDivision.java +++ /dev/null @@ -1,300 +0,0 @@ -package uk.ac.ox.krr.logmap2.division; - -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.io.IRIDocumentSource; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.MissingImportHandlingStrategy; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.manchester.syntactic_locality.OntologyModuleExtractor; -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.overlapping.OntologyProcessing4Overlapping; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.statistics.StatisticsTimeMappings; - - -/** - * This class relies on concept embeddings to produce multiple - * divisions for ontology alignment. - * The methods rely on efficient lexical indexes and locality based module extraction. - * Clusters of concepts of the IF are currently computed by a neural embedding model - * Number of divisions/segments or matching tasks is required as input. - * @author ernesto - * - */ -public class ConceptEmbeddingDivision extends AbstractDivision implements OntologyAlignmentDivision { - - - //Number of clausters as ouput - int num_tasks; - int num_tasks_ouput; - - - protected String cluster_file; - - Map> identifier2cluster = new HashMap>(); - - - - /** - * - * @param num_tasks The number of required matching tasks - */ - public ConceptEmbeddingDivision(String cluster_file, int num_tasks){ - this.num_tasks=num_tasks; - this.num_tasks_ouput=num_tasks; - this.cluster_file=cluster_file; - } - - - /** - * For tests o prediction we are interested in only one task as ouput - * @param tasks_ouput - */ - public void setNumTask2Outout(int tasks_ouput){ - this.num_tasks_ouput=tasks_ouput; - } - - - @Override - public List createPartitionedMatchingTasks( - String sourceIRIStr, String targetIRIStr) - throws OWLOntologyCreationException, Exception { - - return createPartitionedMatchingTasks(loadOWLOntology(sourceIRIStr), loadOWLOntology(targetIRIStr)); - } - - - - - @Override - public List createPartitionedMatchingTasks(OWLOntology source, - OWLOntology target) throws OWLOntologyCreationException, Exception { - - - - size_source_ontology = source.getSignature(true).size(); - size_target_ontology = target.getSignature(true).size(); - - - - boolean compute_overlapping_stimation=true; - if (num_tasks==1) - compute_overlapping_stimation=false; - - StatisticsTimeMappings.setInitGlobalTime(); - StatisticsTimeMappings.setCurrentInitTime(); - - List tasks = new ArrayList(); - - - entities_source.clear(); - entities_target.clear(); - - - //1. Create IF inverted Indexes: ontologyProcessing for overlapping - - //1.1 Necessary for stemming and stopwords - LexicalUtilities lexicalUtilities = new LexicalUtilities(); - lexicalUtilities.loadStopWords(); - //lexicalUtilities.loadStopWordsExtended(); - //if (Parameters.use_umls_lexicon) - // lexicalUtilities.loadUMLSLexiconResources(); - lexicalUtilities.setStemmer(); //creates stemmer object (Paice by default) - - //1.2 Source - source_processing = createInvertedFile(source, lexicalUtilities, use_full_overlapping, 0); - //1.3 Target - target_processing = createInvertedFile(target, lexicalUtilities, use_full_overlapping, source_processing.getLastidentifier()+10); - - - //2. Intersect inverted indexes - //We perform intersection an we only keep in inverted file the intersected elements - if_intersection = source_processing.getWeakInvertedFile().keySet(); - if_intersection.retainAll(target_processing.getWeakInvertedFile().keySet()); - target_processing.getWeakInvertedFile().keySet().retainAll(if_intersection); - - - double if_file_time = StatisticsTimeMappings.getRunningTime(); - - LogOutput.print("Time computing inverted file for overlapping (s): " + if_file_time); - LogOutput.print("Number of entries IF: " + if_intersection.size()); - - - //It has a good impact specially if number of tasks > 10 - //3. Create overlapping estimation and "discard original ontologies" - //3.1. Create Entity sets in Overlapping - if (compute_overlapping_stimation){ - StatisticsTimeMappings.setCurrentInitTime(); - for (Set str_set: if_intersection){ - - for (int ide1 : source_processing.getWeakInvertedFile().get(str_set)){ - entities_source.add(source_processing.getClass4identifier(ide1)); - } - for (int ide2 : target_processing.getWeakInvertedFile().get(str_set)){ - entities_target.add(target_processing.getClass4identifier(ide2)); - } - } - - - //3.2 Overlapping Source - overlapping_source = createOverlappingEstimation(source, entities_source); - - //3.3 Overlapping Target - overlapping_target = createOverlappingEstimation(target, entities_target); - - - - double overlapping_time = StatisticsTimeMappings.getRunningTime(); - LogOutput.print("Time computing overlapping modules (overstimation) (s): " + overlapping_time); - } - - - - //OFFLINE - //4. Create embedding for words in IF - //4.1. Associate vector to IF entry. There is one vector per word. Then sum or average (most common) - //5. Apply clustering: K-Means - //OFFLINE - - - //6. Set up module extractors - StatisticsTimeMappings.setCurrentInitTime(); - - - //SOme ontologies does not include an (explicit) URI.... - String uri_onto1; - try { - uri_onto1 = source.getOntologyID().getOntologyIRI().toString(); - } - catch (Exception e){ - uri_onto1 = "http://logmap-partitioning/ontology1"; - } - String uri_onto2; - - try{ - uri_onto2 = target.getOntologyID().getOntologyIRI().toString(); - } - catch (Exception e){ - uri_onto2 = "http://logmap-partitioning/ontology2"; - } - - if (compute_overlapping_stimation) - setUpModuleExtractors(overlapping_source, overlapping_target); - else - setUpModuleExtractors(source.getAxioms(), target.getAxioms()); - - - double modules_setUp__time = StatisticsTimeMappings.getRunningTime(); - LogOutput.print("Time setting up module extractors (s): " + modules_setUp__time); - - - - //7. Read clusters and extract modules - readClusters(); - - - StatisticsTimeMappings.setCurrentInitTime(); - - for (int n_task = 0; n_task()); - - identifier2cluster.get(cluster_id).add(concept_id); - - - //if (i<10) - // System.out.println(identifier2cluster); - - line = reader.readLine(); - - } - - - - //System.out.println(i);; - - - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/MatchingTask.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/MatchingTask.java deleted file mode 100644 index 152796e7d6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/MatchingTask.java +++ /dev/null @@ -1,204 +0,0 @@ -package uk.ac.ox.krr.logmap2.division; - -import java.util.HashSet; -import java.util.Set; - -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.io.OWLFunctionalSyntaxOntologyFormat; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.model.OWLOntologyStorageException; - -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; - - - -public class MatchingTask { - - private OWLOntology sourceOntology; - private OWLOntology targetOntology; - - private Set signatureSourceOntology; - private Set signatureTargetOntology; - - - - //Default constructor - public MatchingTask(){ - - } - - - public MatchingTask(OWLOntology sourceOntology, OWLOntology targetOntology){ - this.sourceOntology=sourceOntology; - this.targetOntology=targetOntology; - - signatureSourceOntology = createSignatureStrOntology(sourceOntology); - signatureTargetOntology = createSignatureStrOntology(targetOntology); - - - //TODO only for tests! We do not need ontology. Only entities - sourceOntology.getOWLOntologyManager().removeOntology(sourceOntology); - targetOntology.getOWLOntologyManager().removeOntology(targetOntology); - sourceOntology=null; - targetOntology=null; - - - } - - - - public void clear(){ - signatureSourceOntology.clear(); - signatureTargetOntology.clear(); - - - sourceOntology.getOWLOntologyManager().removeOntology(sourceOntology); - targetOntology.getOWLOntologyManager().removeOntology(targetOntology); - sourceOntology=null; - targetOntology=null; - - - } - - - - public OWLOntology getSourceOntology() { - return sourceOntology; - } - public void setSourceOntology(OWLOntology onto1) { - this.sourceOntology = onto1; - signatureSourceOntology = createSignatureStrOntology(sourceOntology); - } - public OWLOntology getTargetOntology() { - return targetOntology; - } - public void setTargetOntology(OWLOntology onto2) { - this.targetOntology = onto2; - signatureTargetOntology = createSignatureStrOntology(targetOntology); - } - - - - /** - * @return the signatureSourceOntology - */ - public Set getSignatureSourceOntology() { - return signatureSourceOntology; - } - - /** - * @param signatureSourceOntology the signatureSourceOntology to set - */ - public void setSignatureSourceOntology(Set signatureSourceOntology) { - this.signatureSourceOntology = signatureSourceOntology; - } - - /** - * @return the signatureTargetOntology - */ - public Set getSignatureTargetOntology() { - return signatureTargetOntology; - } - - /** - * @param signatureTargetOntology the signatureTargetOntology to set - */ - public void setSignatureTargetOntology(Set signatureTargetOntology) { - this.signatureTargetOntology = signatureTargetOntology; - } - - - - - public Set createSignatureStrOntology(OWLOntology ont){ - - Set signature = new HashSet(); - - for (OWLEntity ent : ont.getSignature(true)){ - signature.add(ent.toStringID()); - } - - return signature; - } - - - - - public void saveMatchingTask(String path) throws OWLOntologyStorageException{ - - String prefix=""; - if (!path.startsWith("/")) - prefix="/"; - - String sufix=""; - if (!path.endsWith("/")) - sufix="/"; - - String uri_file1= "file:" + prefix + path + sufix + "source.owl"; - String uri_file2= "file:" + prefix + path + sufix + "target.owl"; - - - OWLOntologyManager manager = SynchronizedOWLManager.createOWLOntologyManager(); - - - //sourceOntology.getOWLOntologyManager().saveOntology(sourceOntology, new RDFXMLOntologyFormat(), IRI.create(uri_file1)); - //sourceOntology.getOWLOntologyManager().saveOntology(sourceOntology, new OWLFunctionalSyntaxOntologyFormat(), IRI.create(uri_file1)); - manager.saveOntology(sourceOntology, new RDFXMLOntologyFormat(), IRI.create(uri_file1)); - - manager.saveOntology(targetOntology, new RDFXMLOntologyFormat(), IRI.create(uri_file2)); - //targetOntology.getOWLOntologyManager().saveOntology(targetOntology, new RDFXMLOntologyFormat(), IRI.create(uri_file2)); - //targetOntology.getOWLOntologyManager().saveOntology(targetOntology, new OWLFunctionalSyntaxOntologyFormat(), IRI.create(uri_file2)); - - } - - - - public boolean equals(Object o){ - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof MatchingTask)) - return false; - - MatchingTask i = (MatchingTask)o; - - return equals(i); - - } - - - public boolean equals(MatchingTask m){ - - if (!sourceOntology.equals(m.getSourceOntology()) || !targetOntology.equals(m.getTargetOntology())){ - return false; - } - return true; - } - - - - - - public String toString(){ - - return "Matching task between : <" + sourceOntology.getOntologyID().getOntologyIRI() + "> and <" + targetOntology.getOntologyID().getOntologyIRI() + ">"; - - } - - public int hashCode() { - int code = 10; - code = 40 * code + sourceOntology.hashCode(); - code = 50 * code + targetOntology.hashCode(); - return code; - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OntologyAlignmentDivision.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OntologyAlignmentDivision.java deleted file mode 100644 index 9eff8fab35..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OntologyAlignmentDivision.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * - */ -package uk.ac.ox.krr.logmap2.division; - -import java.util.List; - -import org.semanticweb.owlapi.io.IRIDocumentSource; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.MissingImportHandlingStrategy; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; - -/** - * - * This is an abstract class to define the main methods to be implemented by a partitioning algorithm specialised in - * Ontology Alignment. The partitioning algorithm will receive as input two ontologies and will output a number of sub-matching tasks. - * A MatchingTask is composed by two subontologies or modules of the input ontologies. - * @author ernesto - * - */ -public interface OntologyAlignmentDivision { - - - public List createPartitionedMatchingTasks(OWLOntology source, OWLOntology target) throws OWLOntologyCreationException, Exception; - - - public List createPartitionedMatchingTasks(String sourceIRIStr, String targetIRIStr) throws OWLOntologyCreationException, Exception; - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OverlappingEstimation.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OverlappingEstimation.java deleted file mode 100644 index f432ec0c29..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/OverlappingEstimation.java +++ /dev/null @@ -1,79 +0,0 @@ -package uk.ac.ox.krr.logmap2.division; - -import java.util.ArrayList; -import java.util.List; - -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.overlapping.LexicalOverlappingExtractor; - -/** - * This class extract an overestimation of the overlapping of the input ontologies. Given two input ontologies it returns a matching task - * composed by a overestimated module 1 from ontology 1 (source) and a overestimated module 2 from ontology 2 (target) - * representing an overestimated overlapping of the input ontologies - * @author ernesto - * - */ -public class OverlappingEstimation implements OntologyAlignmentDivision{ - - @Override - public List createPartitionedMatchingTasks(OWLOntology source, OWLOntology target) throws OWLOntologyCreationException, Exception { - - //if (num_tasks>1) - // System.out.println("INFO: This partitioning algorithm only creates one matching task"); - - Parameters.use_overlapping=true; - Parameters.min_size_overlapping=0; - - LexicalUtilities lexicalUtilities = new LexicalUtilities(); - - LexicalOverlappingExtractor overlappingExtractor = new LexicalOverlappingExtractor(lexicalUtilities, true); - - - overlappingExtractor.createOverlapping(source, target); - - MatchingTask task = new MatchingTask(); - - task.setSourceOntology(overlappingExtractor.getOverlappingOnto1()); - task.setTargetOntology(overlappingExtractor.getOverlappingOnto2()); - - List tasks = new ArrayList(); - tasks.add(task); - - return tasks; - } - - @Override - public List createPartitionedMatchingTasks( - String sourceIRIStr, String targetIRIStr) - throws OWLOntologyCreationException, Exception { - - //if (num_tasks>1) - // System.out.println("INFO: This partitioning algorithm only creates one matching task"); - - Parameters.use_overlapping=true; - Parameters.min_size_overlapping=0; - - LexicalUtilities lexicalUtilities = new LexicalUtilities(); - - LexicalOverlappingExtractor overlappingExtractor = new LexicalOverlappingExtractor(lexicalUtilities, true); - - - overlappingExtractor.createOverlapping(sourceIRIStr, targetIRIStr); - - MatchingTask task = new MatchingTask(); - - task.setSourceOntology(overlappingExtractor.getOverlappingOnto1()); - task.setTargetOntology(overlappingExtractor.getOverlappingOnto2()); - - List tasks = new ArrayList(); - tasks.add(task); - - return tasks; - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/QualityMeasures.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/QualityMeasures.java deleted file mode 100644 index 6e29204391..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/QualityMeasures.java +++ /dev/null @@ -1,486 +0,0 @@ -/******************************************************************************* - * Copyright 2017 by the Department of Informatics (University of Oslo) - * - * This file is part of the Ontology Services Toolkit - * - *******************************************************************************/ -package uk.ac.ox.krr.logmap2.division; - -import java.util.ArrayList; -import java.util.Formatter; -import java.util.List; -import java.util.Set; - -import static java.lang.Math.*; - -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; - -/** - * - * @author ernesto - * Created on 27 Feb 2018 - * - */ -public class QualityMeasures { - - //Coverage: per matching task and total - //Number of matching tasks - //Size modules: average, max and min, balanced modules - //Overlapping among modules: bad and good overlapping - //Overlapping degree: matrix... average - - //general statistics - int number_tasks; - - - int min_size_modules_ontology1; - int max_size_modules_ontology1; - double average_size_modules_ontology1; - int min_size_modules_ontology2; - int max_size_modules_ontology2; - double average_size_modules_ontology2; - - long min_size_task; //m X n - long max_size_task; - String min_size_task_str; //m X n - String max_size_task_str; - double avg_size_task; - - //balanced/ratio modules: 01/02 -> compare with ratio of original task - double min_ratio_modules; - double max_ratio_modules; - double average_ratio_modules; - - - - //overlapping: - //aggregation of module sizes wrt to ontology size - //aggregation of (sub)task sizes wrt size original task (Sig(O1) x Sig(O2)). - int aggregation_modules_ontology1; - int aggregation_modules_ontology2; - long aggregation_task_sizes; - - double ratio_task_size; - - long size_ontology1; - long size_ontology2; - - - - //Coverage - //Local - double min_coverage_task; - double max_coverage_task; - double average_coverage_task; - //Global - double global_coverage_1; - double global_coverage_2; - - //Coverage + overlapping - //Cases where e1 from RA appears in MT but not e2 and viceversa: related to coverage? - //Cases where e1 and e2 appear in more than one MT - int positive_redundancy; - int negative_redundancy; - - - double computation_time=0.0; - - - - - List tasks; - //Set alignment; - - - - - - - public QualityMeasures(){ - - } - - - - - - public QualityMeasures(List tasks, Set alignment_1, Set alignment_2, double time, long size_ontology1, long size_ontology2){ - this(tasks, alignment_1, alignment_2, size_ontology1, size_ontology2); - - computation_time=time; - - } - - - public void clear(){ - tasks.clear(); - //alignment.clear(); - } - - - public QualityMeasures(List tasks, Set alignment_1, Set alignment_2, long size_ontology1, long size_ontology2){ - this.tasks=tasks; - //this.alignment=alignment; - - - /*for (MatchingTask task : tasks){ - System.out.println( - task.getSignatureSourceOntology().size() + "\t" + - task.getSignatureTargetOntology().size() + "\t" + getLocalCoverage(task, alignment)); - }*/ - - - - computeMetricsModuleTasks(tasks); - - computeSizeTasks(tasks, size_ontology1, size_ontology2); - - global_coverage_1 = computeCoverageTasks(tasks, alignment_1); - global_coverage_2 = computeCoverageTasks(tasks, alignment_2); - - - } - - - - public void computeMetricsModuleTasks(List tasks){ - - int aux; - double ratio; - - number_tasks = tasks.size(); - aggregation_modules_ontology1=0; - aggregation_modules_ontology2=0; - - - min_size_modules_ontology1 = tasks.get(0).getSignatureSourceOntology().size(); - max_size_modules_ontology1 = tasks.get(0).getSignatureSourceOntology().size(); - - min_size_modules_ontology2 = tasks.get(0).getSignatureTargetOntology().size(); - max_size_modules_ontology2 = tasks.get(0).getSignatureTargetOntology().size(); - - average_size_modules_ontology1=0; - average_size_modules_ontology2=0; - - min_ratio_modules = (double)tasks.get(0).getSignatureSourceOntology().size()/(double)tasks.get(0).getSignatureTargetOntology().size(); - max_ratio_modules = (double)tasks.get(0).getSignatureSourceOntology().size()/(double)tasks.get(0).getSignatureTargetOntology().size(); - average_ratio_modules = 0; - - for (int i=0; imax_size_modules_ontology1) - max_size_modules_ontology1 = aux; - - - aux = tasks.get(i).getSignatureTargetOntology().size(); - if (auxmax_size_modules_ontology2) - max_size_modules_ontology2 = aux; - - - average_size_modules_ontology1 += tasks.get(i).getSignatureSourceOntology().size(); - average_size_modules_ontology2 += tasks.get(i).getSignatureTargetOntology().size(); - - - ratio = (double)tasks.get(i).getSignatureSourceOntology().size()/(double)tasks.get(i).getSignatureTargetOntology().size(); - if (ratiomax_ratio_modules) - max_ratio_modules=ratio; - - average_ratio_modules += ratio; - - } - - average_size_modules_ontology1 = (double)average_size_modules_ontology1/(double)tasks.size(); - average_size_modules_ontology2 = (double)average_size_modules_ontology2/(double)tasks.size(); - - average_ratio_modules = (double)average_ratio_modules/(double)tasks.size(); - - } - - - - - public void computeSizeTasks(List tasks, long size_ontology1, long size_ontology2){ - - avg_size_task=0; - - aggregation_task_sizes=0; - - - //long is important for the ontology sizes otherwise the task size does not fit within "int" - long original_task_size = size_ontology1 * size_ontology2; - - - long size_task = (long)tasks.get(0).getSignatureSourceOntology().size() * (long)tasks.get(0).getSignatureTargetOntology().size(); //m X n; - String size_task_str = (long)tasks.get(0).getSignatureSourceOntology().size() + " x " + (long)tasks.get(0).getSignatureTargetOntology().size(); - - min_size_task = size_task; - min_size_task_str = size_task_str; - max_size_task = size_task; - max_size_task_str = size_task_str; - - for (int i=0; imax_size_task) { - max_size_task=size_task; - max_size_task_str=size_task_str; - } - - aggregation_task_sizes+=size_task; - - //System.out.println(size_task); - - } - - avg_size_task = (double)aggregation_task_sizes/(double)tasks.size(); - - - //System.out.println(tasks.get(0).getSignatureSourceOntology().size() + " "+ tasks.get(0).getSignatureTargetOntology().size()); - //System.out.println(size_ontology1 + " " + size_ontology2); - // - //System.out.println(aggregation_task_sizes); - //System.out.println(original_task_size); - ratio_task_size = (double)aggregation_task_sizes / (double)(original_task_size); - - - } - - - - public double getLocalCoverage(MatchingTask task, Set alignment){ - - int positive_hits=0; - - for (MappingObjectStr mapping : alignment){ - //if (task.getSignatureSourceOntology().contains(mapping.getIRIStrEnt1()) && task.getSignatureTargetOntology().contains(mapping.getIRIStrEnt2())){ - if (isMappingAvailableInTask(task, mapping)){ - positive_hits++; - } - } - - return (double)positive_hits/(double)alignment.size(); - - } - - - /** - * Computes global coverage and also local values - * @param tasks - * @param alignment - * @return global coverage - */ - public double computeCoverageTasks(List tasks, Set alignment){ - - int positive_hits=0; - - negative_redundancy=0; - - //Each entry is associated to one mapping - List positive_hits_list = new ArrayList(); - - //Each entry associated to a task - List positive_hits_task = new ArrayList(); - for (int i = 0; i < tasks.size(); i++) { - positive_hits_task.add(0); - } - - - for (MappingObjectStr mapping : alignment){ - - positive_hits=0; - - for (int i=0; imax_coverage_task) - max_coverage_task=positive_hits_task.get(i); - else if (positive_hits_task.get(i) < min_coverage_task) - min_coverage_task=positive_hits_task.get(i); - - average_coverage_task+=positive_hits_task.get(i); - - } - - - average_coverage_task = (double)average_coverage_task/(double)tasks.size(); - average_coverage_task = (double)average_coverage_task/(double)alignment.size(); - - max_coverage_task = (double)max_coverage_task/(double)alignment.size(); - min_coverage_task = (double)min_coverage_task/(double)alignment.size(); - - - - - //Global coverage - positive_hits=0; - for (int hits : positive_hits_list){ - - if (hits>0) - positive_hits++; - - if (hits>1) - positive_redundancy++; - - } - - //global_coverage = (double)positive_hits/(double)alignment.size(); - - //return global_coverage; - - return (double)positive_hits/(double)alignment.size(); - - } - - - public boolean isMappingAvailableInTask(MatchingTask task, MappingObjectStr mapping){ - - if (task.getSignatureSourceOntology().contains(mapping.getIRIStrEnt1()) && task.getSignatureTargetOntology().contains(mapping.getIRIStrEnt2())) - return true; - - return false; - } - - - //Negative redundancy - public boolean isPartialMappingAvailableInTask(MatchingTask task, MappingObjectStr mapping){ - - if (task.getSignatureSourceOntology().contains(mapping.getIRIStrEnt1()) || task.getSignatureTargetOntology().contains(mapping.getIRIStrEnt2())) - return true; - - return false; - } - - - public static String toStringHeader(){ - - - StringBuilder sb = new StringBuilder(); - - //sb.append("\n"); - - sb.append("number_tasks").append("\t") - .append("min_modules_O1").append("\t") - .append("max_modules_O1").append("\t") - .append("avg_modules_O1").append("\t") - .append("min_modules_O2").append("\t") - .append("max_modules_O2").append("\t") - .append("avg_modules_O2").append("\t") - .append("min_task").append("\t") - .append("max_task").append("\t") - //.append("min_size_task").append("\t") - //.append("max_size_task").append("\t") - //.append("avg_size_task").append("\t") - //.append("min_ratio_modules").append("\t") - //.append("max_ratio_modules").append("\t") - //.append("average_ratio_modules").append("\t") - //.append("aggregation_modules_ontology1").append("\t") - //.append("aggregation_modules_ontology2").append("\t") - //.append("task_size").append("\t") - .append("ratio_tasks_size").append("\t") - //.append("positive_redundancy").append("\t") - //.append("negative_redundancy").append("\t") - //.append("min_coverage_task").append("\t") - //.append("max_coverage_task").append("\t") - //.append("average_coverage_task").append("\t") - .append("coverage1").append("\t") - .append("coverage2").append("\t") - .append("time"); - - return sb.toString(); - } - - - - - public String toString(){ - - - StringBuilder sb = new StringBuilder(); - //StringBuilder sb_formattter = new StringBuilder(); - //=Formatter formatter = new Formatter(sb_formattter); - //formatter.format("%,d", - - - sb.append(number_tasks).append("\t") - .append(min_size_modules_ontology1).append("\t") - .append(max_size_modules_ontology1).append("\t") - .append(average_size_modules_ontology1).append("\t") - .append(min_size_modules_ontology2).append("\t") - .append(max_size_modules_ontology2).append("\t") - .append(average_size_modules_ontology2).append("\t") - .append(min_size_task_str).append("\t") - .append(max_size_task_str).append("\t") - //.append(min_size_task).append("\t") - //.append(max_size_task).append("\t") - //.append(avg_size_task).append("\t") - //.append(min_ratio_modules).append("\t") - //.append(max_ratio_modules).append("\t") - //.append(average_ratio_modules).append("\t") - //.append(aggregation_modules_ontology1).append("\t") - //.append(aggregation_modules_ontology2).append("\t") - //.append(aggregation_task_sizes).append("\t") - .append(ratio_task_size).append("\t") - //.append(positive_redundancy).append("\t") - //.append(negative_redundancy).append("\t") - //.append(min_coverage_task).append("\t") - //.append(max_coverage_task).append("\t") - //.append(average_coverage_task).append("\t") - .append(global_coverage_1).append("\t") - .append(global_coverage_2).append("\t") - .append(computation_time); - - - - - return sb.toString(); - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/WordEmbeddingDivision.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/WordEmbeddingDivision.java deleted file mode 100644 index 823f156d7b..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/division/WordEmbeddingDivision.java +++ /dev/null @@ -1,310 +0,0 @@ -package uk.ac.ox.krr.logmap2.division; - -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.io.IRIDocumentSource; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.MissingImportHandlingStrategy; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.manchester.syntactic_locality.OntologyModuleExtractor; -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.overlapping.OntologyProcessing4Overlapping; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.statistics.StatisticsTimeMappings; - - -/** - * This class relies on word embeddings to produce multiple - * divisions for ontology alignment. - * The methods rely on efficient lexical indexes and locality based module extraction. - * Clusters of words of the IF are currently computed by a neural embedding model - * Number of divisions/segments or matching tasks is required as input. - * @author ernesto - * - */ -public class WordEmbeddingDivision extends AbstractDivision implements OntologyAlignmentDivision { - - - //Number of clausters as ouput - int num_tasks; - int num_tasks_ouput; - int max_ambiguity; - boolean change_original_uris; - - - protected String cluster_file; - - Map>> identifier2cluster = new HashMap>>(); - - - - /** - * - * @param num_tasks The number of required matching tasks - */ - public WordEmbeddingDivision(String cluster_file, int num_tasks, int max_ambiguity, boolean change_original_uris){ - this.num_tasks=num_tasks; - this.num_tasks_ouput=num_tasks; - this.cluster_file=cluster_file; - this.max_ambiguity=max_ambiguity; - this.change_original_uris=change_original_uris; - } - - - /** - * For tests o prediction we are interested in only one task as ouput - * @param tasks_ouput - */ - public void setNumTask2Outout(int tasks_ouput){ - this.num_tasks_ouput=tasks_ouput; - } - - - @Override - public List createPartitionedMatchingTasks( - String sourceIRIStr, String targetIRIStr) - throws OWLOntologyCreationException, Exception { - - return createPartitionedMatchingTasks(loadOWLOntology(sourceIRIStr), loadOWLOntology(targetIRIStr)); - } - - - - - @Override - public List createPartitionedMatchingTasks(OWLOntology source, - OWLOntology target) throws OWLOntologyCreationException, Exception { - - - - size_source_ontology = source.getSignature(true).size(); - size_target_ontology = target.getSignature(true).size(); - - - - boolean compute_overlapping_stimation=true; - if (num_tasks==1) - compute_overlapping_stimation=false; - - StatisticsTimeMappings.setInitGlobalTime(); - StatisticsTimeMappings.setCurrentInitTime(); - - List tasks = new ArrayList(); - - - entities_source.clear(); - entities_target.clear(); - - - //1. Create IF inverted Indexes: ontologyProcessing for overlapping - - //1.1 Necessary for stemming and stopwords - LexicalUtilities lexicalUtilities = new LexicalUtilities(); - lexicalUtilities.loadStopWords(); - //lexicalUtilities.loadStopWordsExtended(); - //if (Parameters.use_umls_lexicon) - // lexicalUtilities.loadUMLSLexiconResources(); - lexicalUtilities.setStemmer(); //creates stemmer object (Paice by default) - - //1.2 Source - source_processing = createInvertedFile(source, lexicalUtilities, use_full_overlapping, 0); - //1.3 Target - target_processing = createInvertedFile(target, lexicalUtilities, use_full_overlapping, source_processing.getLastidentifier()+10); - - - //2. Intersect inverted indexes - //We perform intersection an we only keep in inverted file the intersected elements - if_intersection = source_processing.getWeakInvertedFile().keySet(); - if_intersection.retainAll(target_processing.getWeakInvertedFile().keySet()); - target_processing.getWeakInvertedFile().keySet().retainAll(if_intersection); - - - double if_file_time = StatisticsTimeMappings.getRunningTime(); - - LogOutput.print("Time computing inverted file for overlapping (s): " + if_file_time); - LogOutput.print("Number of entries IF: " + if_intersection.size()); - - - //It has a good impact specially if number of tasks > 10 - //3. Create overlapping estimation and "discard original ontologies" - //3.1. Create Entity sets in Overlapping - if (compute_overlapping_stimation){ - StatisticsTimeMappings.setCurrentInitTime(); - for (Set str_set: if_intersection){ - - for (int ide1 : source_processing.getWeakInvertedFile().get(str_set)){ - entities_source.add(source_processing.getClass4identifier(ide1)); - } - for (int ide2 : target_processing.getWeakInvertedFile().get(str_set)){ - entities_target.add(target_processing.getClass4identifier(ide2)); - } - } - - - //3.2 Overlapping Source - overlapping_source = createOverlappingEstimation(source, entities_source); - - //3.3 Overlapping Target - overlapping_target = createOverlappingEstimation(target, entities_target); - - - - double overlapping_time = StatisticsTimeMappings.getRunningTime(); - LogOutput.print("Time computing overlapping modules (overstimation) (s): " + overlapping_time); - } - - - - //OFFLINE - //4. Create embedding for words in IF - //4.1. Associate vector to IF entry. There is one vector per word. Then sum or average (most common) - //5. Apply clustering: K-Means - //OFFLINE - - - //6. Set up module extractors - StatisticsTimeMappings.setCurrentInitTime(); - - - //SOme ontologies does not include an (explicit) URI.... - String uri_onto1; - try { - uri_onto1 = source.getOntologyID().getOntologyIRI().toString(); - } - catch (Exception e){ - uri_onto1 = "http://logmap-partitioning/ontology1"; - } - String uri_onto2; - - try{ - uri_onto2 = target.getOntologyID().getOntologyIRI().toString(); - } - catch (Exception e){ - uri_onto2 = "http://logmap-partitioning/ontology2"; - } - - if (compute_overlapping_stimation) - setUpModuleExtractors(overlapping_source, overlapping_target); - else - setUpModuleExtractors(source.getAxioms(), target.getAxioms()); - - - double modules_setUp__time = StatisticsTimeMappings.getRunningTime(); - LogOutput.print("Time setting up module extractors (s): " + modules_setUp__time); - - - - //7. Read clusters and extract modules - readClusters(); - - - StatisticsTimeMappings.setCurrentInitTime(); - - //QualityMeasures.toStringHeader(); - - for (int n_task = 0; n_task words_set= new HashSet(); - - int i=0; - - while (line!=null) { - - i++; - - //"word1, word2,...:cluster_index" - String[] elements = line.split(":"); - - String cluster_id = elements[1]; - - String[] words = elements[0].split(","); - - for (String word: words) - words_set.add(word); - - - if (!identifier2cluster.containsKey(cluster_id)) - identifier2cluster.put(cluster_id, new HashSet>()); - - identifier2cluster.get(cluster_id).add(new HashSet(words_set)); - - words_set.clear(); - - - //if (i<10) - // System.out.println(identifier2cluster); - - line = reader.readLine(); - - } - - - - //System.out.println(i);; - - - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ExtractStringFromAnnotationAssertionAxiom.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ExtractStringFromAnnotationAssertionAxiom.java deleted file mode 100644 index 86a14c3a4f..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ExtractStringFromAnnotationAssertionAxiom.java +++ /dev/null @@ -1,305 +0,0 @@ -package uk.ac.ox.krr.logmap2.indexing; - -import java.util.HashSet; -import java.util.Set; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; -import org.semanticweb.owlapi.model.OWLAnonymousIndividual; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLOntology; - -import uk.ac.ox.krr.logmap2.Parameters; - - -/** - * - * This class manages the annotation that LogMap currently accepts. - * These annotation may appear as direct strings, anonymous/named individulas or even as data assertions. - * - * @author Ernesto - * - */ -public class ExtractStringFromAnnotationAssertionAxiom { - - - private OWLAnonymousIndividual geneid_value; - private OWLNamedIndividual namedIndiv; - private IRI namedIndivIRI; - - //IRIS of alternative labels annotations - private String rdf_label_uri = "http://www.w3.org/2000/01/rdf-schema#label"; - //private String hasRelatedSynonym_uri = "http://www.geneontology.org/formats/oboInOwl#hasRelatedSynonym"; - //private String hasExactSynonym_uri = "http://www.geneontology.org/formats/oboInOwl#hasExactSynonym"; - //private String nci_synonym_uri = "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#Synonym"; - //private String nci_umls_cui_uri = "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#UMLS_CUI"; - //private String fma_synonym_uri="http://bioontology.org/projects/ontologies/fma/fmaOwlDlComponent_2_0#Synonym"; - private String fma_name_uri="http://bioontology.org/projects/ontologies/fma/fmaOwlDlComponent_2_0#name"; - - //IRIS 2 Ignore - //private String oboinowl = "http://www.geneontology.org/formats/oboInOwl"; - - //OWLDataFactory datafactory; - //OWLOntology onto; - - public ExtractStringFromAnnotationAssertionAxiom(){ - - } - - - public String getAnntotationLanguage(OWLAnnotationAssertionAxiom entityAnnAx){ - - String lang; - - try{ - lang = ((OWLLiteral)entityAnnAx.getAnnotation().getValue()).getLang(); - } - catch (Exception e){ - System.err.println("Error accessing object."); - lang=""; - } - - return lang; - - - } - - - - public String getSingleLabel(OWLAnnotationAssertionAxiom entityAnnAx, OWLOntology onto, OWLDataFactory datafactory){ - - String label_value=""; - - String uri_ann = entityAnnAx.getAnnotation().getProperty().getIRI().toString(); - - //Accepted URIs - if (Parameters.accepted_annotation_URIs_for_classes.contains(uri_ann)){ - - if (!(label_value=asDirectValue(entityAnnAx)).equals("")){ - return label_value; - } - if (!(label_value=asAnonymousIndividual(entityAnnAx, onto)).equals("")){ - return label_value; - } - if (!(label_value=asNamedIndividual(entityAnnAx, onto, datafactory)).equals("")){ - return label_value; - } - if (!(label_value=asNamedIndividualFMA(entityAnnAx, onto, datafactory)).equals("")){ - return label_value; - } - } - - //Empty value otherwise - return label_value; - - } - - - public Set getAnntotationString( - OWLAnnotationAssertionAxiom entityAnnAx, OWLOntology onto, OWLDataFactory datafactory){ - - String label_value=""; - - String uri_ann = entityAnnAx.getAnnotation().getProperty().getIRI().toString(); - - //TODO Perform translation when direct annotation value - - //System.err.println(uri_ann); - - - //Accepted URIs - if (Parameters.accepted_annotation_URIs_for_classes.contains(uri_ann)){ - - if (!(label_value=asDirectValue(entityAnnAx)).equals("")){ - return processLongLabels(label_value); - } - if (!(label_value=asAnonymousIndividual(entityAnnAx, onto)).equals("")){ - return processLongLabels(label_value); - } - if (!(label_value=asNamedIndividual(entityAnnAx, onto, datafactory)).equals("")){ - return processLongLabels(label_value); - } - if (!(label_value=asNamedIndividualFMA(entityAnnAx, onto, datafactory)).equals("")){ - return processLongLabels(label_value); - } - - } - - - return new HashSet(); //empty value - - - - - - - - } - - - private String asDirectValue(OWLAnnotationAssertionAxiom entityAnnAx){ - try { - //LogOutput.print(((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral()); - - String label = ((OWLLiteral)entityAnnAx.getAnnotation().getValue()).getLiteral().toLowerCase(); - - //System.err.println(entityAnnAx + " " + label); - - if (label==null || label.equals("null") || label.equals("")){ - //System.err.println("NULL LABEL: " + entityAnnAx); - return ""; - } - - - return label; - - - } - catch (Exception e){ - //In case of error. Accessing an object in an expected way - return ""; - } - } - - - /** - * As in Mouse and NCI anatomy. Annotations al rdf:labels in anonymous individuals - * It seems also GO ontology (to be checked) - * @param entityAnnAx - * @return - */ - private String asAnonymousIndividual(OWLAnnotationAssertionAxiom entityAnnAx, OWLOntology onto){ - try { - geneid_value=((OWLAnonymousIndividual)entityAnnAx.getAnnotation().getValue()).asOWLAnonymousIndividual();//.getID() - for (OWLAnnotationAssertionAxiom annGeneidAx : onto.getAnnotationAssertionAxioms(geneid_value)){ - - if (annGeneidAx.getAnnotation().getProperty().getIRI().toString().equals(rdf_label_uri)){ - - return ((OWLLiteral)annGeneidAx.getAnnotation().getValue()).getLiteral().toLowerCase(); - } - } - return ""; - } - catch (Exception e){ - //In case of error. Accessing an object in an expected way - return ""; - } - } - - - /** - * In some OBO like ontologies - * @param entityAnnAx - * @return - */ - private String asNamedIndividual(OWLAnnotationAssertionAxiom entityAnnAx, OWLOntology onto, OWLDataFactory datafactory){ - try { - //It is an individual - namedIndivIRI=(IRI)entityAnnAx.getAnnotation().getValue(); - namedIndiv=datafactory.getOWLNamedIndividual(namedIndivIRI); - - - for (OWLAnnotationAssertionAxiom annIdiv : namedIndiv.getAnnotationAssertionAxioms(onto)){ - - - if (annIdiv.getAnnotation().getProperty().getIRI().toString().equals(rdf_label_uri)){ - - return ((OWLLiteral)annIdiv.getAnnotation().getValue()).getLiteral().toLowerCase(); - } - } - return ""; - - - } - catch (Exception e){ - //In case of error. Accessing an object in an expected way - return ""; - } - - } - - /** - * FMA originalannotations annotations appear as datatype assertions - * @param entityAnnAx - * @return - */ - private String asNamedIndividualFMA(OWLAnnotationAssertionAxiom entityAnnAx, OWLOntology onto, OWLDataFactory datafactory){ - - try{ - //It is an individual - namedIndivIRI=(IRI)entityAnnAx.getAnnotation().getValue(); - - namedIndiv=datafactory.getOWLNamedIndividual(namedIndivIRI); - - //for (OWLAnnotation indivAnn : namedIndiv.getAnnotations(onto)){ - for (OWLLiteral literal_syn : namedIndiv.getDataPropertyValues(datafactory.getOWLDataProperty(IRI.create(fma_name_uri)), onto)){ - - return literal_syn.getLiteral().toLowerCase(); - } - - return ""; - - } - catch (Exception e){ - //In case of error. Accessing an object in an expected way - return ""; - } - - } - - - /** - * We deal with some definitions. Long ones are discarded. - * We also process translated annotations - * @param def - * @return - */ - private Set processLongLabels(String label){ - - Set annotation_labels = new HashSet(); - - String words[]; - - if (label.length()<2){ - return annotation_labels; - } - - //For translated labels: used now in ontology processing tranlateLabel method (Sept 2017) - //Label is: trans1|trans2|...|transx - if (label.indexOf("|")>=0){ - String[] elements = label.split("\\|"); - for (String e : elements){ - annotation_labels.add(e); - } - return annotation_labels; - } - - if (label.indexOf(".")<0 || label.length()<15){ //It is not a definition - annotation_labels.add(label); - return annotation_labels; - } - - //LogOutput.print("\nDEF 1: " + label); - - label = label.split("\\.")[0]; //we keep first sentence - - //LogOutput.print("\nDEF 2: " + label); - - words = label.split(" "); - - if (words.length>12){ - return annotation_labels; //empty set - } - - //LogOutput.print("\nDEF 3: " + label); - - annotation_labels.add(label); - return annotation_labels; - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/IndexManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/IndexManager.java deleted file mode 100644 index e624c52948..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/IndexManager.java +++ /dev/null @@ -1,1823 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing; - -import java.io.*; - - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.reasoning.ReasonerAccess; -import uk.ac.ox.krr.logmap2.indexing.entities.*; -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.Interval; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.utilities.Lib; -import uk.ac.ox.krr.logmap2.utilities.Pair; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -public abstract class IndexManager { - - /**To get the frequency and co-occurrence */ - //TODO Yujiao - something with stop word - protected Map> singleWordInvertedIndex = new HashMap>(); - //protected Map frequency4words = new HashMap(); - - protected int calls_tax_question=0; - protected int calls_disj_question=0; - protected int unknown_disj_question=0; - - protected double time_tax_question=0.0; - protected double time_disj_question=0.0; - - protected long init, fin; - - - public int getNumberOfTaxCalls(){ - return calls_tax_question; - } - - public int getNumberOfDisjCalls(){ - return calls_disj_question; - } - - public int getNumberOfUnknownDisjCalls(){ - return unknown_disj_question; - } - - public double getTime4TaxCalls(){ - return time_tax_question; - } - - public double getTime4DisjCalls(){ - return time_disj_question; - } - - public double getAvgTime4TaxCalls(){ - return Utilities.getRoundValue( - (time_tax_question/(double)calls_tax_question), 4); - } - - public double getAvgTime4DisjCalls(){ - return Utilities.getRoundValue( - (time_disj_question/(double)calls_tax_question), 4); - } - - - public void addWordOccurrence(String word, int ident) { - Set temp; - - if (singleWordInvertedIndex.containsKey(word)) - temp = singleWordInvertedIndex.get(word); - else - singleWordInvertedIndex.put(word, temp = new HashSet()); - - temp.add(ident); - } - - public void printWordDistribution() - { - ArrayList> word2frequency = new ArrayList>(); - int frequency; - - for (String word : singleWordInvertedIndex.keySet()) - { - frequency = singleWordInvertedIndex.get(word).size(); - word2frequency.add(new Pair(word, frequency)); - } - - Collections.sort(word2frequency, new Comparator4String2Int()); - - try - { - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream("/auto/users/yzhou/word_distribution.txt"))); - - writer.write(identifier2ClassIndex.size() + "\n"); - for (Pair pair : word2frequency) - writer.write(pair.getKey() + " " + pair.getValue() + "\n"); - - writer.close(); - } - catch (IOException e) - { - e.printStackTrace(); - } - - Lib.debuginfo("finished word distribution"); - } - - public Set getCooccurrenceOfWords(Set words) - { - Set classList = null; - Set classList_temp = null; - - for (String word : words) - if (singleWordInvertedIndex.containsKey(word)) - if (classList == null) - { - classList = new HashSet(); - for (Integer ind : singleWordInvertedIndex.get(word)) - classList.add(ind); - } - else - { - classList_temp = singleWordInvertedIndex.get(word); - classList = intersectSet(classList, classList_temp); - } - - return classList; - } - - public Set intersectSet(Set list1, Set list2) - { - if (list1 == null) return list2; - if (list2 == null) return list1; - - Set list = new HashSet(); - - for (Integer i : list1) - if (list2.contains(i)) - list.add(i); - - return list; - } - - - - public void clearSingleWordInvertedIndex(){ - singleWordInvertedIndex.clear(); - } - - - protected Map identifier2ClassIndex = new HashMap(); - - protected Map identifier2DataPropIndex = new HashMap(); - - protected Map identifier2ObjPropIndex = new HashMap(); - - protected Map identifier2IndividualIndex = new HashMap(); - - - /**For projections*/ - protected Set identifiersInModule = new HashSet(); - - - //protected Map> Root2IndependentRoots= new HashMap>(); - - /**Used to extract upper hierarchy - * @deprecated ??**/ - protected Map preOrderAnc2Identifier= new HashMap(); - - /**Used to get unsarisfiavle clases if unsat intervals has non empty intersection - * So far only used if not solved cases were found**/ - protected Map preOrderDesc2Identifier= new HashMap(); - - - - /**We store disjointness as a interval of disjoint classes*/ - protected Map> interval2disjointIntervals = new HashMap>(); - - - /**Unsat classes ILS*/ - protected Set unsatisfiableClassesILS = new HashSet(); - - - - /** We need to know the iri of an entity */ - protected Map identifier2IRIOnto = new HashMap(); - - //NOT NECESSARY - /* Identifier of ontology toi number of classes. Important to know which ids belong to one onto or other */ - //protected Map identifier2NumOfClasses = new HashMap(); - - - //protected Set RootAncPreorder = new HashSet(); - - - //Logical iri (ending in #) - //protected String iri_onto; - - //protected OWLOntologyManager managerOnto = OWLManager.createOWLOntologyManager(); - //protected OWLDataFactory factory = managerOnto.getOWLDataFactory(); - protected OWLDataFactory factory = SynchronizedOWLManager.createOWLDataFactory(); - //protected OWLOntology onto; - - - /** Importnat for a ordered assessment */ - protected Set RootIdentifiers = new HashSet(); - - /**This set will be used to propagate equivalences (entities store equivalents)*/ - //This set will need to be enriched with anchors... or at leats considered after indexing - protected Set representativeNodes = new HashSet(); - - - /* *A^B->C axiom*/ - protected Map, Integer> generalHornAxioms= new HashMap, Integer>(); - - public Set dangerousClasses = new HashSet();//equivalnet to TOP - - - - private Set allowedInstanceTypes = new HashSet(); - - - - private int class_indiv_ident=0; //shared by both - - private int dprop_ident=0; - - private int oprop_ident=0; - - private int onto_ident=0; - - //private int indiv_ident=0; - - - public void clearAlternativeLabels4Classes(){ - - for (int ident : identifier2ClassIndex.keySet()){ - - if (identifier2ClassIndex.get(ident).hasAlternativeLabels()){ - identifier2ClassIndex.get(ident).deleteAltLabels(); - } - } - } - - - public void clearStemmedAlternativeLabels4Classes(){ - - for (int ident : identifier2ClassIndex.keySet()){ - - if (identifier2ClassIndex.get(ident).hasStemmedAlternativeLabels()){ - identifier2ClassIndex.get(ident).deleteAltStemmedLabels(); - } - - } - } - - - public void clearTaxonomicalStructures(){ - - identifier2ClassIndex.clear(); - identifier2DataPropIndex.clear(); - identifier2ObjPropIndex.clear(); - identifier2IndividualIndex.clear(); - - identifiersInModule.clear(); - - interval2disjointIntervals.clear(); - unsatisfiableClassesILS.clear(); - - preOrderAnc2Identifier.clear(); - preOrderDesc2Identifier.clear(); - - RootIdentifiers.clear(); - generalHornAxioms.clear(); - - representativeNodes.clear(); - - - ident2disjointclasses.clear(); - ident2equivalents.clear(); - ident2subclasses.clear(); - ident2subclasses_module.clear(); - ident2superclasses.clear(); - ident2superclasses_module.clear(); - - ident2DirectSubClasses_integration.clear(); - - individual2classTypes.clear(); - - - } - - - protected HashMap> ident2DirectSubClasses_integration; - - protected Set representativesFromMappings; - - - - public HashMap> getIdent2DirectSubClasses_Integration(){ - return ident2DirectSubClasses_integration; - } - - public Set getRepresentativesFromMappings(){ - return representativesFromMappings; - } - - - - public void clearAuxStructuresforLabellingSchema(){ - ident2DirectSubClasses_integration.clear(); - representativesFromMappings.clear(); - } - - - public Set getDangerousClasses(){ - return dangerousClasses; - } - - public void addDangerousClasses(int ide){ - dangerousClasses.add(ide); - } - - - public Set getAllowedInstanceTypes() { - return allowedInstanceTypes; - } - - public void setAllowedInstanceTypes(Set allowedInstanceTypes) { - this.allowedInstanceTypes = allowedInstanceTypes; - } - - - public void addAllowedInstanceType(int type_id) { - this.allowedInstanceTypes.add(type_id); - } - - - /** - * Debugging method - */ - public void printDirectDisjointness(){ - - for (int icls : identifier2ClassIndex.keySet()){ - - if (identifier2ClassIndex.get(icls).hasDirectDisjointClasses()){ - - LogOutput.print(identifier2ClassIndex.get(icls).getEntityName() + ": " +identifier2ClassIndex.get(icls).getNode().getDescIntervals()); - - //We create list of disjoint intervals - for (int disjcls : identifier2ClassIndex.get(icls).getDisjointClasses()){ - - LogOutput.print("\t" + identifier2ClassIndex.get(disjcls).getEntityName()+ ": " +identifier2ClassIndex.get(disjcls).getNode().getDescIntervals()); - - //for (Interval disjcls_interval : identifier2ClassIndex.get(disjcls).getNode().getDescIntervals()){ - - // LogOutput.print("\t\t" + disjcls_interval); - - //} - } - - } - - } - - } - - - - public abstract void setIntervalLabellingIndex(Map> exact_mappings); - - - public void setJointReasoner(ReasonerAccess jointreasoner){ - - } - - - - public String getIRIStrOnto4Id(int id){ - return identifier2IRIOnto.get(id); - } - - - public OWLDataFactory getFactory(){ - return factory; - } - - - public int addNewOntologyEntry(String iristr){ - - identifier2IRIOnto.put(onto_ident, iristr); - - onto_ident++; - - return (onto_ident-1); - - } - - - public int addNewClassEntry(){ - identifier2ClassIndex.put(class_indiv_ident, new ClassIndex(class_indiv_ident)); - class_indiv_ident++; - return (class_indiv_ident-1); - } - - - - - public void setOntologyId4Class(int ident, int id){ - identifier2ClassIndex.get(ident).setOntologyId(id); - } - - public void setClassName(int ident, String name){ - identifier2ClassIndex.get(ident).setEntityName(name); - } - - public void setClassNamespace(int ident, String ns_ent){ - identifier2ClassIndex.get(ident).setNamespace(ns_ent); - } - - public void setClassLabel(int ident, String label){ - identifier2ClassIndex.get(ident).setLabel(label); - } - - public void addAlternativeClassLabel(int ident, String altlabel){ - identifier2ClassIndex.get(ident).addAlternativeLabel(altlabel); - } - - public void addStemmedAltClassLabel(int ident, String label) - { - identifier2ClassIndex.get(ident).addStemmedAltLabel(label); - } - - public void addRoot2Structure(int ide_root){ - RootIdentifiers.add(ide_root); - } - - public Set getRootIdentifiers(){ - return RootIdentifiers; - } - - public void addRepresentativeNode(int ide_rep){ - representativeNodes.add(ide_rep); - } - - public Set getRepresentativeNodes(){ - return representativeNodes; - } - - - //TODO same set of class could intersect to different heads... - public void addGeneralHornAxiom2Structure(Set body, int head){ - if (!generalHornAxioms.containsKey(body)){ - generalHornAxioms.put(new HashSet(body), head); - } - } - - public Map, Integer> getGeneralHornAxiom(){ - return generalHornAxioms; - } - - - - - - - public int addNewIndividualEntry(){ - identifier2IndividualIndex.put(class_indiv_ident, new IndividualIndex(class_indiv_ident)); - class_indiv_ident++; - return (class_indiv_ident-1); - } - - - - - public void setOntologyId4Individual(int ident, int id){ - identifier2IndividualIndex.get(ident).setOntologyId(id); - } - - public void setIndividualName(int ident, String name){ - identifier2IndividualIndex.get(ident).setEntityName(name); - } - - public void setIndividualNamespace(int ident, String ns_ent){ - identifier2IndividualIndex.get(ident).setNamespace(ns_ent); - } - - //will be equal to name - public void setIndividualLabel(int ident, String label){ - identifier2IndividualIndex.get(ident).setLabel(label); - } - - public void addAlternativeIndividualLabel(int ident, String altlabel){ - identifier2IndividualIndex.get(ident).addAlternativeLabel(altlabel); - } - - - - - - - - public int addNewDataPropertyEntry(){ - identifier2DataPropIndex.put(dprop_ident, new DataPropertyIndex(dprop_ident)); - dprop_ident++; - return (dprop_ident-1); - } - - - public void setOntologyId4DataProp(int ident, int id){ - identifier2DataPropIndex.get(ident).setOntologyId(id); - } - - public void setDataPropName(int ident, String name){ - identifier2DataPropIndex.get(ident).setEntityName(name); - } - - public void setDataPropNamespace(int ident, String ns_ent){ - identifier2DataPropIndex.get(ident).setNamespace(ns_ent); - } - - - public void setDataPropLabel(int ident, String label){ - identifier2DataPropIndex.get(ident).setLabel(label); - } - - - public void addDomainClass4DataProperty(int ident, int domain_ident){ - identifier2DataPropIndex.get(ident).addDomainClassIndex(domain_ident); - } - - public void addRangeType4DataProperty(int ident, String range){ - identifier2DataPropIndex.get(ident).addRangeType(range); - } - - - public void addAlternativeDataPropertyLabel(int ident, String altlabel){ - identifier2DataPropIndex.get(ident).addAlternativeLabel(altlabel); - } - - - - public void addType4Individual(int ident, int type_class){ - identifier2IndividualIndex.get(ident).addClassTypeIndex(type_class); - } - - - public void addCategory4Individual(int ident, String cat){ - identifier2IndividualIndex.get(ident).addCategory(cat); - } - - - public void setShowInOutput4Individual(int ident, boolean showInOutput){ - identifier2IndividualIndex.get(ident).setShowInOutput(showInOutput); - } - - - public void addReferencedIndividual4Individual(int ident, int ref_ident){ - identifier2IndividualIndex.get(ident).addReferencedIndividuals(ref_ident); - } - - - - public Set getReferencedIndividuals4Individual(int ident){ - return identifier2IndividualIndex.get(ident).getReferencedIndividuals(); - } - - - public List getCharactersitics4Individual(int ident){ - return identifier2IndividualIndex.get(ident).getCharacteristics(); - } - - public void addCharactersitic4Individual(int ident, int value){ - identifier2IndividualIndex.get(ident).addCharacteristic(value); - } - - - - - - - - - - public int addNewObjectPropertyEntry(){ - identifier2ObjPropIndex.put(oprop_ident, new ObjectPropertyIndex(oprop_ident)); - oprop_ident++; - return (oprop_ident-1); - } - - - public void setOntologyId4ObjectProp(int ident, int id){ - identifier2ObjPropIndex.get(ident).setOntologyId(id); - } - - public void setObjectPropName(int ident, String name){ - identifier2ObjPropIndex.get(ident).setEntityName(name); - } - - public void setObjectPropNamespace(int ident, String ns_ent){ - identifier2ObjPropIndex.get(ident).setNamespace(ns_ent); - } - - public void setObjectPropLabel(int ident, String label){ - identifier2ObjPropIndex.get(ident).setLabel(label); - } - - public void addDomainClass4ObjectProperty(int ident, int domain_ident){ - identifier2ObjPropIndex.get(ident).addDomainClassIndex(domain_ident); - } - - public void addRangeClass4ObjectProperty(int ident, int range_ident){ - identifier2ObjPropIndex.get(ident).addRangeClassIndex(range_ident); - } - - public void addAlternativeObjectPropertyLabel(int ident, String altlabel){ - identifier2ObjPropIndex.get(ident).addAlternativeLabel(altlabel); - } - - - - public Map getIdentifier2ClassIndexMap(){ - return identifier2ClassIndex; - } - - - public Map getIdentifier2DataPropIndexMap(){ - return identifier2DataPropIndex; - } - - - public Map getIdentifier2ObjectPropIndexMap(){ - return identifier2ObjPropIndex; - } - - public Map getIdentifier2IndividualIndexMap(){ - return identifier2IndividualIndex; - } - - - public ClassIndex getClassIndex(int ident){ - return identifier2ClassIndex.get(ident); - } - - - public DataPropertyIndex getDataPropertyIndex(int ident){ - return identifier2DataPropIndex.get(ident); - } - - - public ObjectPropertyIndex getObjectPropertyIndex(int ident){ - return identifier2ObjPropIndex.get(ident); - } - - public IndividualIndex getIndividualIndex(int ident){ - return identifier2IndividualIndex.get(ident); - } - - public int getSizeIndexClasses(){ - return identifier2ClassIndex.size(); - } - - - - - public int getSizeDataProperties(){ - return identifier2DataPropIndex.size(); - } - - - public int getSizeObjectProperties(){ - return identifier2ObjPropIndex.size(); - } - - - public int getSizeIndexIndividuals(){ - return identifier2IndividualIndex.size(); - } - - - public Set getDomainDataProp4Identifier(int index){ - return identifier2DataPropIndex.get(index).getDomainClassIndexes(); - } - - public Set getDomainObjProp4Identifier(int index){ - return identifier2ObjPropIndex.get(index).getDomainClassIndexes(); - } - - public Set getRangeDataProp4Identifier(int index){ - return identifier2DataPropIndex.get(index).getRangeTypes(); - } - - public Set getRangeObjProp4Identifier(int index){ - return identifier2ObjPropIndex.get(index).getRangeClassIndexes(); - } - - - public Set getIndividualClassTypes4Identifier(int ident){ - return identifier2IndividualIndex.get(ident).getClassTypes(); - } - - public Set getIndividualCategory4Identifier(int ident){ - return identifier2IndividualIndex.get(ident).getCategories(); - } - - - - - public Set getClassIdentifierSet(){ - return identifier2ClassIndex.keySet(); - } - - - public Set getDataPropIdentifierSet(){ - return identifier2DataPropIndex.keySet(); - } - - public Set getObjectPropIdentifierSet(){ - return identifier2ObjPropIndex.keySet(); - } - - - public Set getIndividuaIdentifierSet(){ - return identifier2IndividualIndex.keySet(); - } - - /*public String getLabel4ConceptName(String name){ //useful if onto contains codes as concept names - - return getLabel4ConceptIndex( - getIdentifier4ConceptName(name)); - - - - }*/ - - - - - /** - * Returns -1 if preorder does not contain ident - * @param preDesc - * @return - */ - public int getIdentifier4PreorderDesc(int preDesc){ - if (preOrderDesc2Identifier.containsKey(preDesc)) - return preOrderDesc2Identifier.get(preDesc); - else - return -1; - - - } - - - public int getIdentifier4PreorderAnc(int preAnc){ - - if (preOrderAnc2Identifier.containsKey(preAnc)) - return preOrderAnc2Identifier.get(preAnc); - else - return -1; - - } - - - public String getProcessedName4ConceptIndex(int index){ - String name = getName4ConceptIndex(index).toLowerCase(); - - if (name.indexOf("_")>0){ - return name.replaceAll("_", ""); - } - else if (name.indexOf(" ")>0){ - return name.replaceAll(" ", ""); - } - - return name; - - } - - - public String getName4ConceptIndex(int index){ - return identifier2ClassIndex.get(index).getEntityName(); - } - - public String getName4DataPropIndex(int index){ - return identifier2DataPropIndex.get(index).getEntityName(); - } - - public String getName4ObjPropIndex(int index){ - return identifier2ObjPropIndex.get(index).getEntityName(); - } - - public String getName4IndividualIndex(int index){ - return identifier2IndividualIndex.get(index).getEntityName(); - } - - - public String getIRIStr4ConceptIndex(int index){ - - int onto_id = identifier2ClassIndex.get(index).getOntologyId(); - - return identifier2ClassIndex.get(index).getIRI(getIRIStrOnto4Id(onto_id)); - } - - public String getNameSpace4ConceptIndex(int index){ - - int onto_id = identifier2ClassIndex.get(index).getOntologyId(); - - //if different from IRI onto - if (identifier2ClassIndex.get(index).hasDifferentNamespace()){ - return identifier2ClassIndex.get(index).getNamespace(); - } - else{ - //return getIRIStrOnto4Id(onto_id); - return ""; - } - } - - - public String getIRIStr4DataPropIndex(int index){ - - int onto_id = identifier2DataPropIndex.get(index).getOntologyId(); - - return identifier2DataPropIndex.get(index).getIRI(getIRIStrOnto4Id(onto_id)); - } - - public String getIRIStr4ObjPropIndex(int index){ - - int onto_id = identifier2ObjPropIndex.get(index).getOntologyId(); - - return identifier2ObjPropIndex.get(index).getIRI(getIRIStrOnto4Id(onto_id)); - } - - - public String getIRIStr4IndividualIndex(int index){ - - int onto_id = identifier2IndividualIndex.get(index).getOntologyId(); - - return identifier2IndividualIndex.get(index).getIRI(getIRIStrOnto4Id(onto_id)); - } - - - - - public IRI getIRI4ConceptIndex(int index){ - return IRI.create(getIRIStr4ConceptIndex(index)); - } - - public IRI getIRI4DataProptIndex(int index){ - return IRI.create(getIRIStr4DataPropIndex(index)); - } - - public IRI getIRI4ObjPropIndex(int index){ - return IRI.create(getIRIStr4ObjPropIndex(index)); - } - - public IRI getIRI4IndividualIndex(int index){ - return IRI.create(getIRIStr4IndividualIndex(index)); - } - - - - public String getLabel4ConceptIndex(int index){ - return identifier2ClassIndex.get(index).getLabel(); - } - - public String getLabel4DataPropIndex(int index){ - return identifier2DataPropIndex.get(index).getLabel(); - } - - public String getLabel4ObjPropIndex(int index){ - return identifier2ObjPropIndex.get(index).getLabel(); - } - - - public String getLabel4IndividualIndex(int index){ - return identifier2IndividualIndex.get(index).getLabel(); - } - - - - public Set getAlternativeLabels4ConceptIndex(int index){ - - if (identifier2ClassIndex.get(index).hasAlternativeLabels()) - return identifier2ClassIndex.get(index).getAlternativeLabels(); - - HashSet set = new HashSet(); - set.add(getLabel4ConceptIndex(index)); - return set; - - } - - public Set getAlternativeLabels4IndividualIndex(int index){ - - if (identifier2IndividualIndex.get(index).hasAlternativeLabels()) - return identifier2IndividualIndex.get(index).getAlternativeLabels(); - - HashSet set = new HashSet(); - set.add(getLabel4IndividualIndex(index)); - return set; - - } - - public Set getAlternativeLabels4ObjectPropertyIndex(int index){ - - if (identifier2ObjPropIndex.get(index).hasAlternativeLabels()) - return identifier2ObjPropIndex.get(index).getAlternativeLabels(); - - HashSet set = new HashSet(); - set.add(getLabel4ObjPropIndex(index)); - return set; - - } - - - - public Set getAlternativeLabels4DataPropertyIndex(int index){ - - if (identifier2DataPropIndex.get(index).hasAlternativeLabels()) - return identifier2DataPropIndex.get(index).getAlternativeLabels(); - - HashSet set = new HashSet(); - set.add(getLabel4DataPropIndex(index)); - return set; - - } - - - public boolean hasObjectPropertyAlternativeLabels(int index){ - - return identifier2ObjPropIndex.get(index).hasAlternativeLabels(); - - } - - - public boolean hasDataPropertyAlternativeLabels(int index){ - - return identifier2DataPropIndex.get(index).hasAlternativeLabels(); - - } - - - - public boolean hasIndividualAlternativeLabels(int index){ - - return identifier2IndividualIndex.get(index).hasAlternativeLabels(); - - } - - - public OWLClass getOWLClass4ConceptIndex(int index){ - return factory.getOWLClass(getIRI4ConceptIndex(index)); - } - - - - public OWLDataProperty getOWLDataProperty4PropertyIndex(int index){ - return factory.getOWLDataProperty(getIRI4DataProptIndex(index)); - } - - public OWLObjectProperty getOWLObjectProperty4PropertyIndex(int index){ - return factory.getOWLObjectProperty(getIRI4ObjPropIndex(index)); - } - - public OWLNamedIndividual getOWLNamedIndividual4IndividualIndex(int index){ - return factory.getOWLNamedIndividual(getIRI4IndividualIndex(index)); - } - - - - - - - - - - - /*public Map> getInvertedFileSingle(){ - return invertedFileSingle; - }*/ - - public int getPreOrderNumber(int conceptIdentifier){ - return identifier2ClassIndex.get(conceptIdentifier).getNode().getDescOrder(); - } - - - public int getPreOrderNumberReversed(int conceptIdentifier){ - return identifier2ClassIndex.get(conceptIdentifier).getNode().getAscOrder(); - } - - - public int getTopologicalOrder(int conceptIdentifier){ - //return identifier2ClassIndex.get(conceptIdentifier).getNode().getTopolicalOrder(); - return identifier2ClassIndex.get(conceptIdentifier).getHierarchyLevel(); - } - - - - public Set getIntervalsDescendants(int conceptIdentifier){ - return identifier2ClassIndex.get(conceptIdentifier).getNode().getDescIntervals(); - } - - public Set getIntervalsAncestors(int conceptIdentifier){ - return identifier2ClassIndex.get(conceptIdentifier).getNode().getAscIntervals(); - } - - - - public Set getDirectDisjointClasses4Identifier(int conceptIdentifier){ - - if (identifier2ClassIndex.get(conceptIdentifier).hasDirectDisjointClasses()) - return identifier2ClassIndex.get(conceptIdentifier).getDisjointClasses(); - else - return Collections.emptySet(); - } - - - - - public Set getDirectSuperClasses4Identifier(int conceptIdentifier, boolean module){ - - if (module) - return getDirectSuperClassesModule4Identifier(conceptIdentifier); - else - return getDirectSuperClassesOnto4Identifier(conceptIdentifier); - } - - - public Set getDirectSubClasses4Identifier(int conceptIdentifier, boolean module){ - if (module) - return getDirectSubClassesModule4Identifier(conceptIdentifier); - else - return getDirectSubClassesOnto4Identifier(conceptIdentifier); - } - - - private Set getDirectSubClassesOnto4Identifier(int conceptIdentifier){ - - - if (identifier2ClassIndex.get(conceptIdentifier).hasDirectSubClasses()){ - return identifier2ClassIndex.get(conceptIdentifier).getDirectSubclasses(); - } - else - return Collections.emptySet(); - } - - - private Set getDirectSuperClassesOnto4Identifier(int conceptIdentifier){ - - if (identifier2ClassIndex.get(conceptIdentifier).hasDirectSuperClasses()){ - return identifier2ClassIndex.get(conceptIdentifier).getDirectSuperclasses(); - } - else - return Collections.emptySet(); - } - - - private Set getDirectSubClassesModule4Identifier(int conceptIdentifier){ - - if (identifiersInModule.contains(conceptIdentifier)){ - return getDirectSubClassesOnto4Identifier(conceptIdentifier); - } - else - return Collections.emptySet(); - } - - - private Set getDirectSuperClassesModule4Identifier(int conceptIdentifier){ - - if (identifiersInModule.contains(conceptIdentifier)){ - return getDirectSuperClassesOnto4Identifier(conceptIdentifier); - } - else - return Collections.emptySet(); - - } - - - public Set getRoots4Identifier(int conceptIdentifier){ - if (identifier2ClassIndex.get(conceptIdentifier).hasRoots()){ - return identifier2ClassIndex.get(conceptIdentifier).getRoots(); - } - else{ - return Collections.emptySet(); - } - - } - - - private Map> ident2equivalents = new HashMap>(); - - public Map> getEquivalentClasses(){ - - if (ident2equivalents.size()>0) - return ident2equivalents; - - for (int ident : identifier2ClassIndex.keySet()){ - if (identifier2ClassIndex.get(ident).hasEquivalentClasses()){ - ident2equivalents.put(ident, identifier2ClassIndex.get(ident).getEquivalentClasses()); - } - } - - return ident2equivalents; - } - - - - private Map> ident2subclasses_module = new HashMap>(); - - private Map> getDirectSubClassesModule(){ - - if (ident2subclasses_module.size()>0) - return ident2subclasses_module; - - for (int ident : identifiersInModule){ - if (identifier2ClassIndex.get(ident).hasDirectSubClasses()){ - ident2subclasses_module.put(ident, identifier2ClassIndex.get(ident).getDirectSubclasses()); - } - } - - return ident2subclasses_module; - } - - - private Map> ident2superclasses_module = new HashMap>(); - - private Map> getDirectSuperClassesModule(){ - if (ident2superclasses_module.size()>0) - return ident2superclasses_module; - - for (int ident : identifiersInModule){ - if (identifier2ClassIndex.get(ident).hasDirectSuperClasses()){ - ident2superclasses_module.put(ident, identifier2ClassIndex.get(ident).getDirectSuperclasses()); - } - } - - return ident2superclasses_module; - } - - - - - private Map> ident2subclasses = new HashMap>(); - - private Map> getDirectSubClassesOnto(){ - - if (ident2subclasses.size()>0) - return ident2subclasses; - - for (int ident : identifier2ClassIndex.keySet()){ - if (identifier2ClassIndex.get(ident).hasDirectSubClasses()){ - ident2subclasses.put(ident, identifier2ClassIndex.get(ident).getDirectSubclasses()); - } - } - - - return ident2subclasses; - } - - - private Map> ident2superclasses = new HashMap>(); - - private Map> getDirectSuperClassesOnto(){ - if (ident2superclasses.size()>0) - return ident2superclasses; - - for (int ident : identifier2ClassIndex.keySet()){ - if (identifier2ClassIndex.get(ident).hasDirectSuperClasses()){ - ident2superclasses.put(ident, identifier2ClassIndex.get(ident).getDirectSuperclasses()); - } - } - - - return ident2superclasses; - } - - - - - private Map> individual2classTypes = new HashMap>(); - - public Map> getDirectIndividualClassTypes(){ - - if (individual2classTypes.size()>0) - return individual2classTypes; - - for (int ident : identifier2IndividualIndex.keySet()){ - if (identifier2IndividualIndex.get(ident).hasDirectClassTypes()){ - individual2classTypes.put(ident, identifier2IndividualIndex.get(ident).getClassTypes()); - } - } - - - return individual2classTypes; - } - - - - - - public Map> getDirectSubClasses(boolean module){ - if (module) - return getDirectSubClassesModule(); - else - return getDirectSubClassesOnto(); - } - - - public Map> getDirectSuperClasses(boolean module){ - if (module) - return getDirectSuperClassesModule(); - else - return getDirectSuperClassesOnto(); - } - - - private Map> ident2disjointclasses = new HashMap>(); - - public Map> getDirectDisjointClasses(){ - if (ident2disjointclasses.size()>0) - return ident2disjointclasses; - - for (int ident : identifier2ClassIndex.keySet()){ - if (identifier2ClassIndex.get(ident).hasDirectDisjointClasses()){ - ident2disjointclasses.put(ident, identifier2ClassIndex.get(ident).getDisjointClasses()); - } - } - - - return ident2disjointclasses; - } - - - - - - //public int getIdentifier4ClassName(String name){ - // return className2Identifier.get(name); - //} - - - /*public int getIdentifier4PreOrderDesc(int predesc){ - return preOrderDesc2Identifier.get(predesc); - } - - - public int getIdentifier4PreOrderAnc(int preanc){ - return preOrderAnc2Identifier.get(preanc); - }*/ - - - //FOR the MODULE of mapped entities - /** - * Sets projection (i.e. modules) for mapped entities - * @param mapped_entities - * @deprecated Now we use the whole onto since we have already extracted overlapping - * - */ - public void setBigProjection4entities(Set mapped_entities_identifiers){ - - - //This is not a module.. - - identifiersInModule.clear(); - identifiersInModule.addAll(mapped_entities_identifiers); - //Set entities = new HashSet(mapped_entities_identifiers); - - - - //Either we extract a limited level of subclasses or only from level topo_max/3 - int topo_max=0; - float topo2extract; - int maxsubclasses2extract; - - - for (int ent_ident : mapped_entities_identifiers){ - if (getTopologicalOrder(ent_ident) > topo_max){ - topo_max=getTopologicalOrder(ent_ident); - } - } - - //topo2extract=(topo_max/3)+1; - //maxsubclasses2extract=50; - topo2extract=(topo_max/3); - maxsubclasses2extract=75; - - - - for (int ent_ident : mapped_entities_identifiers){ - - for (Interval interv : getIntervalsAncestors(ent_ident)){ - for (int pre=interv.getLeftBound(); pre<=interv.getRightBound(); pre++){ - - //Get ide from preorder - identifiersInModule.add(getIdentifier4PreorderAnc(pre)); //we add all parents! - - } - } - - - //All children for an specific level onwards or if the number of subclasses is small - if (getTopologicalOrder(ent_ident)>=topo2extract || getNumOfSubClasses4identifier(ent_ident) mapped_entities_identifiers){ - - - //This is not a module.. - - - //Set entities = new HashSet(mapped_entities_identifiers); - identifiersInModule.clear(); - identifiersInModule.addAll(mapped_entities_identifiers); - - int ident_parent; - - for (int ent_ident : mapped_entities_identifiers){ - - for (Interval interv : getIntervalsAncestors(ent_ident)){ - for (int pre=interv.getLeftBound(); pre<=interv.getRightBound(); pre++){ - - ident_parent = getIdentifier4PreorderAnc(pre); - - //Get ide from preorder - if (ident_parent>-1){ //Root node. It has a preorder but not identifier - - identifiersInModule.add(ident_parent); //we add all parents except the root - } - - - } - } - - //Add 1 level of Subclasses - for (int ide : getDirectSubClasses4Identifier(ent_ident, false)){ - identifiersInModule.add(ide); //we add 1 level of children - } - - } - - LogOutput.print("\tProjection size: " + identifiersInModule.size()); - - } - - - - - - public int getNumOfSubClasses4identifier(int cIdent){ - - int numsubclasses=0; - - for (Interval i : getIntervalsDescendants(cIdent)){ - numsubclasses+=i.getRightBound()-i.getLeftBound(); - } - return numsubclasses; - } - - - - - /** - * Preorder of class 1 must be included in one of the class 2 intervals - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean isSubClassOf(int cIdent1, int cIdent2){ - - calls_tax_question++; - init = Calendar.getInstance().getTimeInMillis(); - - int preorder1 = getPreOrderNumber(cIdent1); - - for (Interval i2 : getIntervalsDescendants(cIdent2)){ - if (i2.containsIndex(preorder1)){ - - fin = Calendar.getInstance().getTimeInMillis(); - time_tax_question+=(float)((double)fin-(double)init)/1000.0; - - return true; - } - } - - fin = Calendar.getInstance().getTimeInMillis(); - time_tax_question+=(float)((double)fin-(double)init)/1000.0; - - return false; - - } - - - /** - * Preorder of class 1 must be included in one of the class 2 intervals - * @param cIdent1 - * @param cIdent2 - * @return - */ - private boolean isSubClassOfInverseTax(int cIdent1, int cIdent2){ - - calls_tax_question++; - init = Calendar.getInstance().getTimeInMillis(); - - int preorder1 = getPreOrderNumberReversed(cIdent1); - - for (Interval i2 : getIntervalsAncestors(cIdent2)){ - if (i2.containsIndex(preorder1)){ - - fin = Calendar.getInstance().getTimeInMillis(); - time_tax_question+=(float)((double)fin-(double)init)/1000.0; - - return true; - } - } - - fin = Calendar.getInstance().getTimeInMillis(); - time_tax_question+=(float)((double)fin-(double)init)/1000.0; - - return false; - - } - - - public boolean isSuperClassOf(int cIdent1, int cIdent2){ - return isSubClassOfInverseTax(cIdent1, cIdent2); - } - - - - - - /** - * Given two class identifiers checks if they have same pr-eorder. - * (See indexes propagation for equivalences) - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean areEquivalentClasses(int cIdent1, int cIdent2){ - - if (getPreOrderNumber(cIdent1)==getPreOrderNumber(cIdent2)){ - return true; - } - - return false; - } - - - /** - * - * Given two class identifiers checks if they same direct parents - * - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean areSiblings(int cIdent1, int cIdent2){ - - //Do not performs intersections since we need to delete - - for (int parent1 : getDirectSuperClassesOnto4Identifier(cIdent1)){ - if (getDirectSuperClassesOnto4Identifier(cIdent2).contains(parent1)){ - return true; - } - } - - return false; - - } - - - /** - * Given two identifiers checks if they are disjoint. - * That is, their pre-order index are included in disjoint intervals, respectively. - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean areDisjoint(int cIdent1, int cIdent2){ - - calls_disj_question++; - init = Calendar.getInstance().getTimeInMillis(); - - //it will only be necessary to compare one of the intervals for each entity - int preorder1 = getPreOrderNumber(cIdent1); - int preorder2 = getPreOrderNumber(cIdent2); - - - for (Interval disj_int1 : interval2disjointIntervals.keySet()){ - - if (disj_int1.containsIndex(preorder1)){ - - for (Interval disj_int2 : interval2disjointIntervals.get(disj_int1)){ - - if (disj_int2.containsIndex(preorder2)){ - - fin = Calendar.getInstance().getTimeInMillis(); - time_disj_question+=(float)((double)fin-(double)init)/1000.0; - - return true; - } - } - } - } - - fin = Calendar.getInstance().getTimeInMillis(); - time_disj_question+=(float)((double)fin-(double)init)/1000.0; - - return false; - } - - - /** - * Checks if concept 1 (cIdent1) is disjoint with any of the descendants of concept 2 (cIdent2) - * - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean isDisjointWithDescendants(int cIdent1, int cIdent2){ - - calls_disj_question++; - init = Calendar.getInstance().getTimeInMillis(); - - - int preorder1 = getPreOrderNumber(cIdent1); - Set descendants = getIntervalsDescendants(cIdent2); - - - - for (Interval disj_int1 : interval2disjointIntervals.keySet()){ - - for (Interval desc : descendants){ - - //SOme descendants involve in disjointness - if (disj_int1.hasNonEmptyIntersectionWith(desc)){ - - for (Interval disj_int2 : interval2disjointIntervals.get(disj_int1)){ - - //Our concepts is inconflict with some of the descendants - //Thus cIdent1 and cIdent2 cannot be matched!! - if (disj_int2.containsIndex(preorder1)){ - - fin = Calendar.getInstance().getTimeInMillis(); - time_disj_question+=(float)((double)fin-(double)init)/1000.0; - - return true; - - } - - } - - //break; //we do not need to check next desc1 since no desc2 intersects with disj_int2 - - } - - } - } - - - //Necessary to check both sides!! - for (Interval disj_int1 : interval2disjointIntervals.keySet()){ - - if (disj_int1.containsIndex(preorder1)){ - - for (Interval disj_int2 : interval2disjointIntervals.get(disj_int1)){ - - //Our concepts is inconflict with some of the descendants - //Thus cIdent1 and cIdent2 cannot be matched!! - for (Interval desc : descendants){ - - //SOme descendants involve in disjointness - if (disj_int2.hasNonEmptyIntersectionWith(desc)){ - - - fin = Calendar.getInstance().getTimeInMillis(); - time_disj_question+=(float)((double)fin-(double)init)/1000.0; - - return true; - - } - - } - - } - - } - } - - - - - - - - - - - fin = Calendar.getInstance().getTimeInMillis(); - time_disj_question+=(float)((double)fin-(double)init)/1000.0; - - return false; - } - - - /** - * Given two identifiers checks if they are partially disjoint. - * - * Very aggressive. Since the concepts may still be matcheable. - * - * Cases that are not directly disjoint but their intervals intersects with disjoint intervals - * - * - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean arePartiallyDisjoint(int cIdent1, int cIdent2){ - - calls_disj_question++; - init = Calendar.getInstance().getTimeInMillis(); - - - Set descendants1 = getIntervalsDescendants(cIdent1); - Set descendants2 = getIntervalsDescendants(cIdent2); - - - - for (Interval disj_int1 : interval2disjointIntervals.keySet()){ - - for (Interval desc1 : descendants1){ - - if (disj_int1.hasNonEmptyIntersectionWith(desc1)){ - - for (Interval disj_int2 : interval2disjointIntervals.get(disj_int1)){ - - for (Interval desc2 : descendants2){ - - if (disj_int2.hasNonEmptyIntersectionWith(desc2)){ - - return true; - - } - - - } - - } - - break; //we do not need to check next desc1 since no desc2 intersects with disj_int2 - - } - - } - } - - - fin = Calendar.getInstance().getTimeInMillis(); - time_disj_question+=(float)((double)fin-(double)init)/1000.0; - - return false; - } - - - - public Set getUnsatisfiableClassesILS(){ - return unsatisfiableClassesILS; - } - - - - - - - - - - - - - - - - - - - - /** - * True if their desc intervals intersects - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean areConceptsSharingDescendants(int cIdent1, int cIdent2){ - - for (Interval i1 : getIntervalsDescendants(cIdent1)){ - for (Interval i2 : getIntervalsDescendants(cIdent2)){ - - if (i1.hasNonEmptyIntersectionWith(i2)){ - return true; - } - } - } - return false; - } - - - /** - * True if their anc intervals intersects - * @param cIdent1 - * @param cIdent2 - * @return - */ - public boolean areConceptsSharingAncestors(int cIdent1, int cIdent2){ - - for (Interval i1 : getIntervalsAncestors(cIdent1)){ - for (Interval i2 : getIntervalsAncestors(cIdent2)){ - - if (i1.hasNonEmptyIntersectionWith(i2)){ - return true; - } - } - } - return false; - } - - - public abstract Set getScope4Identifier_Big(int ide); - - public abstract Set getScope4Identifier_Condifence(int ide); - - public abstract Set getScope4Identifier_Expansion(int ide); - - public abstract void setSmallProjection4MappedEntities(Set mapped_entities_identifiers); - - public abstract Set getSubsetOfSuperClasses4Identifier(int ide); - - public abstract Set getSubsetOfSubClasses4Identifier(int ide); - - - //Not used anymore - //public abstract boolean belong2IndependentBranches(int cIdent1, int cIdent2); - //public abstract boolean areConceptsSharingRoots(int cIdent1, int cIdent2); - - - -} - - -class Comparator4String2Int implements Comparator> -{ - @Override - public int compare(Pair o1, Pair o2) { - return o2.getValue() - o1.getValue(); - } - -} - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/JointIndexManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/JointIndexManager.java deleted file mode 100644 index a328ed46a6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/JointIndexManager.java +++ /dev/null @@ -1,841 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing; - -import java.util.ArrayList; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.HashMap; -import java.util.Set; -import java.util.Map.Entry; - -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.Interval; -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.IntervalLabelledHierarchy; -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.PreIntervalLabelledHierarchy; -import uk.ac.ox.krr.logmap2.io.LogOutput; - - -/** - * This class will gather the indexes of both ontologies - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 12, 2011 - * - */ -public class JointIndexManager extends IndexManager { - - - - - /** - * Scope to know if the entities in a mppings share scopes, or have somethin in common - * @param ide - * @return - */ - public Set getScope4Identifier_Big(int ide){ - - //We extract a big scope, still with a limit - return getScope4Identifier(ide, 10, 10, 1000); - - } - - - /** - * Scope to discover new mappings - * @param ide - * @return - */ - public Set getScope4Identifier_Condifence(int ide){ - - //TODO Store scope?? Better not... - //3 levels of subclasses and 10 of superclasses - return getScope4Identifier(ide, 3, 10, 50); - - } - - - /** - * Scope to extract confidence in mappings - * @param ide - * @return - */ - public Set getScope4Identifier_Expansion(int ide){ - return getScope4Identifier(ide, 2, 2, 50); - - } - - - public Set getSubsetOfSuperClasses4Identifier(int ide){ - return getScope4Identifier(ide, 0, 3, 10); - - } - - public Set getSubsetOfSubClasses4Identifier(int ide){ - return getScope4Identifier(ide, 3, 0, 10); - - } - - - - public Set getScope4Identifier(int ide, int sub_levels, int super_levels, int max_size_subclasses){ - - Set scope = new HashSet(); - - allSuperClasses.clear(); - allSubClasses.clear(); - - if (sub_levels>0){ - getSubclasses4Identifiers(getDirectSubClasses4Identifier(ide, false), sub_levels, max_size_subclasses); - scope.addAll(allSubClasses); - } - - if (super_levels>0){ - getSuperclasses4Identifiers(getDirectSuperClasses4Identifier(ide, false), super_levels); - scope.addAll(allSuperClasses); - } - //ide is not in scope - - return scope; - - } - - - Set allSuperClasses = new HashSet(); - Set allSubClasses = new HashSet(); - - private void getSubclasses4Identifiers(Set classes, int level, int max_size_subclasses){ - - allSubClasses.addAll(classes); - - if (level<1 || classes.size()<1 || allSubClasses.size() > max_size_subclasses) //exit condition - return; - - Set subClasses = new HashSet(); - - for (int ide : classes){ - subClasses.addAll(getDirectSubClasses4Identifier(ide, false)); - } - - - getSubclasses4Identifiers(subClasses, level-1, max_size_subclasses); - - - } - - - private void getSuperclasses4Identifiers(Set classes, int level){ - - allSuperClasses.addAll(classes); - - if (level<1 || classes.size()<1) //exit condition - return; - - Set superClasses = new HashSet(); - - for (int ide : classes){ - superClasses.addAll(getDirectSuperClasses4Identifier(ide, false)); - } - - - getSuperclasses4Identifiers(superClasses, level-1); - - - } - - - /** - * We set the small projection, that is we create a set of identifiers to consider (module) - * Note that currently all identifiers for all ontologies are treated from same structure, that is - * we have only one index - * @param mapped_entities_identifiers - */ - public void setSmallProjection4MappedEntities(Set mapped_entities_identifiers){ - - //Set entities = new HashSet(mapped_entities_identifiers); - identifiersInModule.clear(); - identifiersInModule.addAll(mapped_entities_identifiers); - - /*Set superClasses = new HashSet(); - - for (int ide : mapped_entities_identifiers){ - superClasses.addAll(getDirectSuperClasses4Identifier(ide, false)); - }*/ - - - //We get all superclasses - getSuperclasses4Identifiers(mapped_entities_identifiers, 500);//We want to extract everything - - identifiersInModule.addAll(allSuperClasses); - - LogOutput.print("Size projection: " + identifiersInModule.size()); - - } - - - - - - private void duplicateDirectSubClasses(){ - - ident2DirectSubClasses_integration = new HashMap>(); - - for (int parent: getDirectSubClasses(false).keySet()){ - - if (!ident2DirectSubClasses_integration.containsKey(parent)){ - ident2DirectSubClasses_integration.put(parent, new HashSet()); - } - - for (int kid : getDirectSubClasses(false).get(parent)){ - ident2DirectSubClasses_integration.get(parent).add(kid); - } - - } - - } - - - - /** - * - * Returns the adapted map iden2direct subclasses considering the given mappings. - * We want to consider an integrated hierarchy - */ - private void setAdaptedMap4DirectSubclasses(Map> exact_mappings){//we have only exact mappings and equiv! - - //ident2DirectSubClasses_integration = new HashMap>(getDirectSubClasses(false)); - //TODO we need to create a completely new object. Sets in map are not duplicated - duplicateDirectSubClasses(); - - - representativesFromMappings = new HashSet(); - - LogOutput.print("Original entries DirectSubclasses: " + ident2DirectSubClasses_integration.size()); - LogOutput.print("Original entries DirectSubclasses: " + getDirectSubClasses(false).size()); - - - for (int ide_rep : exact_mappings.keySet()){ - for (int ide_equiv : exact_mappings.get(ide_rep)){ - - if (ide_rep > ide_equiv){ //we only consider one of the sides (Note that there are only exact mappings for indexing) - break; - } - - - /*if (!ident2DirectSubClasses_integration.containsKey(ide_equiv) || - ident2DirectSubClasses_integration.get(ide_equiv).size()<1){ - continue;//In case there is nothing to add - }*/ - - - //Keep representatives - representativesFromMappings.add(ide_rep); - - //LogOutput.print("Size before: " + ident2DirectSubClasses_integration.get(ide_rep).size()); - //LogOutput.print("Size equiv: " + ident2DirectSubClasses_integration.get(ide_equiv).size()); - - - //Deal with parents - for (int ide_parent : getDirectSuperClasses4Identifier(ide_equiv, false)){ - if (ident2DirectSubClasses_integration.containsKey(ide_parent)){//just in case - ident2DirectSubClasses_integration.get(ide_parent).add(ide_rep); - ident2DirectSubClasses_integration.get(ide_parent).remove(ide_equiv); - } - - } - - - //Deal with kids - if (ident2DirectSubClasses_integration.containsKey(ide_equiv)){ - - if (!ident2DirectSubClasses_integration.containsKey(ide_rep)){ - ident2DirectSubClasses_integration.put(ide_rep, new HashSet()); - } - - /*if (ident2DirectSubClasses_integration.get(ide_equiv).size()>0){ - LogOutput.print("Original entries DirectSubclasses new: " + ident2DirectSubClasses_integration.get(ide_rep).size()); - LogOutput.print("Original entries DirectSubclasses base: " + getDirectSubClasses(false).get(ide_rep).size()); - }*/ - - //We add all direc subclasses of equivalent class to representative - ident2DirectSubClasses_integration.get(ide_rep).addAll(ident2DirectSubClasses_integration.get(ide_equiv)); - - /*if (ident2DirectSubClasses_integration.get(ide_equiv).size()>0){ - LogOutput.print("Adapted entries DirectSubclasses new: " + ident2DirectSubClasses_integration.get(ide_rep).size()); - LogOutput.print("Adapted entries DirectSubclasses base: " + getDirectSubClasses(false).get(ide_rep).size()); - }*/ - //We remove occurrence of equivalente (we only want to consider representatives) - ident2DirectSubClasses_integration.get(ide_equiv).clear(); - ident2DirectSubClasses_integration.remove(ide_equiv); - } - - //LogOutput.print("Size after: " + ident2DirectSubClasses_integration.get(ide_rep).size()); - - - } - } - - LogOutput.print("Adapted entries DirectSubclasses: " + ident2DirectSubClasses_integration.size()); - LogOutput.print("Adapted entries DirectSubclasses: " + getDirectSubClasses(false).size()); - - LogOutput.print("Representatives from Mappings: " + representativesFromMappings.size()); - LogOutput.print("Mapping entries (sub mappings): " + exact_mappings.keySet().size()); - - } - - - - - - - - /** - * This method will set up the interval labelling index. To the end it will adapt the - * ident2directkids structure in order to take into account equivalence mappings - * - */ - public void setIntervalLabellingIndex(Map> exact_mappings) { - - - //TODO we need to create new identifier2directkids with both ontologies + anchors + representatives - setAdaptedMap4DirectSubclasses(exact_mappings); - - - //Create interval labelling - //Fixed bug about cycles detected by Alessandro Solimando (August 2014) - IntervalLabelledHierarchy interval_schema = - new PreIntervalLabelledHierarchy( - dealWithCyclesIntervalLabellingSchema(true)); - - //Old version - //IntervalLabelledHierarchy interval_schema = - // new PreIntervalLabelledHierarchy( - // getIdent2DirectSubClasses_Integration()); - // - - - - //Structures - for (int ident : interval_schema.getClassesToNodesMap().keySet()){ - - identifier2ClassIndex.get(ident).setNode(interval_schema.getClassesToNodesMap().get(ident)); - - //Uncomment for unsatisfiability tests (see disjoint intervals) - //preOrderDesc2Identifier.put(interval_schema.getClassesToNodesMap().get(ident).getDescOrder(), ident); - - //Not used... - //preOrderAnc2Identifier.put(interval_schema.getClassesToNodesMap().get(ident).getAscOrder(), ident); - } - - - - //Propagate preoreder (anc and desc) to equivalences equivalences - //PROPAGATION of labels for EQUIVALENCES - for (int iRep : getRepresentativeNodes()){ - if (identifier2ClassIndex.get(iRep).hasEquivalentClasses()){ - for (int iEquiv : identifier2ClassIndex.get(iRep).getEquivalentClasses()){ - identifier2ClassIndex.get(iEquiv).setNode(identifier2ClassIndex.get(iRep).getNode()); - } - } - } - - //Propagation to equivalent entities from mappings - for (int iRep : getRepresentativesFromMappings()){ - - if (exact_mappings.containsKey(iRep)){//Just in case... - for (int iEquiv : exact_mappings.get(iRep)){ - identifier2ClassIndex.get(iEquiv).setNode(identifier2ClassIndex.get(iRep).getNode()); - - //LogOutput.print("REP: " + identifier2ClassIndex.get(iEquiv).getNode().getDescIntervals().toString()); - //LogOutput.print("\tEQUIV: " + identifier2ClassIndex.get(iEquiv).getNode().getDescIntervals().toString()); - - } - } - - } - - - //Create disjoint intervals - //setDisjointIntervals(); - createDisjointIntervalsStructure(); - - //Create independent roots - //createIdependentRootsStructure(); - - //Fast check - checkBasicSatisfiability(); - - } - - - - /** - * Fixed a source of StackOverflow when computing the indexes: added "LightTarjan" class for identifying cycles. - * It also encodes equivalences detected by the light tarjan - * (details about tarjan: http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm) - * @param fixCycles - * @author Alessandro solimando - * @return - */ - private HashMap> dealWithCyclesIntervalLabellingSchema(boolean fixCycles){ - - HashMap> ontoHierarchy = null; - Set> nonTrivialSCCs = new HashSet<>(); - - - if (fixCycles){ - ontoHierarchy = getIdent2DirectSubClasses_Integration(); - Map> sccs = - new LightTarjan().executeTarjan(ontoHierarchy); - - for (Set scc : sccs.values()) { - if(scc.size() > 1){ - nonTrivialSCCs.add(scc); - - // System.out.println("SCC: " + scc); - // choose a representing node - Integer represId = scc.iterator().next(); - Set sccMinusRepr = new HashSet<>(scc); - sccMinusRepr.remove(represId); - - // System.out.println("ReprNode: " + represId); - // System.out.println("Repr: " + ontoHierarchy.get(represId)); - - // OUT-ARCS: preserve nodes different from repr and reachable from scc - for (Integer id : sccMinusRepr){ - ontoHierarchy.get(id).removeAll(scc); - ontoHierarchy.get(represId).addAll(ontoHierarchy.get(id)); - // System.out.println(id + ": " + ontoHierarchy.get(id)); - } - - // the other nodes must disappear - ontoHierarchy.get(represId).removeAll(sccMinusRepr); - - // System.out.println("Repr: " + ontoHierarchy.get(represId)); - - // IN-ARCS: for each node not in the scc remove the other - // nodes from the children and add repr - for (Entry> e : ontoHierarchy.entrySet()) { - if(!scc.contains(e.getKey())){ - int pre = e.getValue().size(); - e.getValue().removeAll(sccMinusRepr); - - if(e.getValue().size() != pre){ - e.getValue().add(represId); - // System.out.println(e.getKey() + " removed " + - // (pre - e.getValue().size())); - // System.out.println(e.getKey() + " " + e.getValue()); - } - } - } - } - } - if(!nonTrivialSCCs.isEmpty()){ - LogOutput.printAlways("Fixed " + nonTrivialSCCs.size() + " cycle(s)"); - // check if no more cycles exists - sccs = new LightTarjan().executeTarjan(ontoHierarchy); - int unsolved = 0; - for (Set scc : sccs.values()) - if(scc.size() > 1){ - ++unsolved; - for (Integer i : scc) - System.out.println(i + ": " + ontoHierarchy.get(i)); - } - if(unsolved > 0) - throw new Error(unsolved + " unsolved SCCs"); - } - - - // set as equivalent all the elements in the nontrivial SCCs - for (Set scc : nonTrivialSCCs) { - for (Integer i : scc) { - Set sccMinusSelf = new HashSet<>(scc); - sccMinusSelf.remove(i); - if(identifier2ClassIndex.get(i).getEquivalentClasses() == null) - identifier2ClassIndex.get(i).setEquivalentClasses(new HashSet<>(sccMinusSelf)); - else - identifier2ClassIndex.get(i).getEquivalentClasses().addAll(sccMinusSelf); - } - } - } - - - if (ontoHierarchy == null) - return getIdent2DirectSubClasses_Integration(); - else - return ontoHierarchy; - - - - - } - - - - - - - - /** - * Creates disjoint intervals structure. - * Note that adjacent intervals are merged - */ - private void createDisjointIntervalsStructure(){ - - //ORIGINAL no MERGED - /*init = Calendar.getInstance().getTimeInMillis(); - for (int icls : Class2DisjointClasses.keySet()){ - for (Interval cls_interval : Identifier2DescIntervals.get(icls)){ - interval2disjointness.put(cls_interval, new ArrayList()); - - for (int disjcls : Class2DisjointClasses.get(icls)){ - for (Interval disjcls_interval : Identifier2DescIntervals.get(disjcls)){ - interval2disjointness.get(cls_interval).add(disjcls_interval); - } - } - } - } - - LogOutput.print(interval2disjointness); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time Getting Disjoint Intervals (s): " + (float)((double)fin-(double)init)/1000.0); - */ - - - long init1, fin1; - init1 = Calendar.getInstance().getTimeInMillis(); - List list_intervals = new ArrayList(); - Interval[] array_intervals; - Interval current_interval; - - interval2disjointIntervals.clear(); - - - int wrong_preorder=0; - int wrong_desc_intervals=0; - - for (int icls : identifier2ClassIndex.keySet()){ - - //Check for classes with preorder -1 - if (identifier2ClassIndex.get(icls).getNode().getDescOrder()<0){ - //LogOutput.print("Class with wrong preorder: " + icls + " - " + getName4ConceptIndex(icls) + " " + identifier2ClassIndex.get(icls).getNode().getDescOrder()); - //LogOutput.print("\t Intervals: " + identifier2ClassIndex.get(icls).getNode().getDescIntervals()); - wrong_preorder++; - continue; //Do not add to disjoint intervals - } - - //Check if a class with good preorder has a wrong descendant interval - for (Interval cls_interval : identifier2ClassIndex.get(icls).getNode().getDescIntervals()){ - if (cls_interval.getLeftBound()<0 || cls_interval.getRightBound()<0){ - //LogOutput.print("Class with wrong interval descendant: " + icls + " - " + getName4ConceptIndex(icls)); - //LogOutput.print("\t Intervals: " + identifier2ClassIndex.get(icls).getNode().getDescIntervals()); - wrong_desc_intervals++; - } - } - - - - //August 2014 - //Bug detected and corrected thanks to Alessandro Solimando - //there was a bug that was overwriting disjointness intervals for children classes when propagating that of the parent class. - //Now it correctly merges the two set of intervals. - if (identifier2ClassIndex.get(icls).hasDirectDisjointClasses()){ - - - //We create list of disjoint intervals - for (int disjcls : identifier2ClassIndex.get(icls).getDisjointClasses()){ - for (Interval disjcls_interval : identifier2ClassIndex.get(disjcls).getNode().getDescIntervals()){ - - //Only correct intervals - //Do not add negative intervals <-1,-1> or <-id, -id> - if (disjcls_interval.getLeftBound()>=0 && disjcls_interval.getRightBound()>=0){ - list_intervals.add(disjcls_interval); - } - - } - } - - if (list_intervals.size()>=3){ - - //First Sort - array_intervals = new Interval[list_intervals.size()]; - array_intervals = list_intervals.toArray(array_intervals); - - _Quicksort(array_intervals, 0, array_intervals.length-1); - - - //Merge - - list_intervals.clear(); //we already have our sorted array - - current_interval=array_intervals[0]; - - for (int i=1; i< array_intervals.length; i++){ - - if (current_interval.isAdjacentTo(array_intervals[i])){ - current_interval = current_interval.getUnionWith(array_intervals[i]); - } - else { - list_intervals.add(current_interval); - current_interval=array_intervals[i]; - } - } - list_intervals.add(current_interval); - - for (Interval cls_interval : identifier2ClassIndex.get(icls).getNode().getDescIntervals()){ - List tmpList = new LinkedList<>(list_intervals); - - if(interval2disjointIntervals.containsKey(cls_interval)){ - tmpList.addAll(interval2disjointIntervals.get(cls_interval)); - tmpList = mergeIntervals(tmpList); - //continue; - } - interval2disjointIntervals.put(cls_interval, - new HashSet(tmpList)); - } - } - - else if (list_intervals.size()==2){ - List originalList = list_intervals.get(0).getUnionWithList(list_intervals.get(1)); - for (Interval cls_interval : identifier2ClassIndex.get(icls).getNode().getDescIntervals()){ - List tmpList = new LinkedList<>(originalList); - if(interval2disjointIntervals.containsKey(cls_interval)){ - tmpList.addAll(interval2disjointIntervals.get(cls_interval)); - tmpList = mergeIntervals(tmpList); - //continue; - } - interval2disjointIntervals.put(cls_interval, - new HashSet(tmpList)); - } - } - - else if (list_intervals.size()==1){ //Only one - for (Interval cls_interval : identifier2ClassIndex.get(icls).getNode().getDescIntervals()){ - - List originalList = new LinkedList<>(list_intervals); - - if(interval2disjointIntervals.containsKey(cls_interval)){ - originalList.addAll(interval2disjointIntervals.get(cls_interval)); - originalList = mergeIntervals(originalList); - //continue; - } - interval2disjointIntervals.put(cls_interval, - new HashSet(originalList)); - } - } - //else if list_intervals.size()==o do nothing - - - //Empty structure - list_intervals.clear(); - } - - } - - LogOutput.print("Classes with wrong/negative preorder (-1 or -d): " + wrong_preorder); - LogOutput.print("Classes with wrong/negative descendants intervals (<-1,-1> or <-id,-id>): " + wrong_desc_intervals); - - //LogOutput.print(interval2disjointIntervals.toString()); - - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time Getting Disjoint Intervals (merged) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - } - - /** - * - * @param list_intervals - * @author Alessandro Solimando - * @return - */ - public List mergeIntervals(List list_intervals){ - // List mergedList = new ArrayList<>(); - // for (Interval i : list_intervals) - // mergedList.add(new Interval(i.getLeftBound(),i.getRightBound())); - - if (list_intervals.size()>=3){ - //First Sort - Interval [] array_intervals = new Interval[list_intervals.size()]; - array_intervals = list_intervals.toArray(array_intervals); - - _Quicksort(array_intervals, 0, array_intervals.length-1); - - //Merge - list_intervals.clear(); //we already have our sorted array - - Interval current_interval=array_intervals[0]; - - for (int i=1; i< array_intervals.length; i++){ - - if (current_interval.isAdjacentTo(array_intervals[i])){ - current_interval = current_interval.getUnionWith(array_intervals[i]); - } - else { - list_intervals.add(current_interval); - current_interval=array_intervals[i]; - } - } - list_intervals.add(current_interval); - } - - else if (list_intervals.size()==2){ - list_intervals = - list_intervals.get(0).getUnionWithList( - list_intervals.get(1)); - } - - //else if list_intervals.size()<=1 do nothing - return list_intervals; - } - - - /** - * Checks basic unsatisfiability - */ - private void checkBasicSatisfiability(){ - - boolean sat=true; - unsatisfiableClassesILS.clear(); - - for (Interval interv1 : interval2disjointIntervals.keySet()){ - - for (Interval disj_interv : interval2disjointIntervals.get(interv1)){ - - if (interv1.hasNonEmptyIntersectionWith(disj_interv)){ - - LogOutput.print( - "Classes in '" + - interv1.getIntersectionWith(disj_interv) + - "' are unsatisfiable"); - LogOutput.print("Involved intervals: " + interv1 + " " + disj_interv);// + " " + interval2disjointIntervals.get(interv1)); - - - for (int pre = interv1.getIntersectionWith(disj_interv).getLeftBound(); - pre<=interv1.getIntersectionWith(disj_interv).getRightBound(); - pre++){ - - if (getIdentifier4PreorderDesc(pre)>0){ - unsatisfiableClassesILS.add(getIdentifier4PreorderDesc(pre)); - } - else{ - LogOutput.print("\tPreorder has not identifier"); - } - - } - - LogOutput.print("\t" + interv1 + " " + disj_interv); - - sat=false; - - - } - } - } - - if (sat){ - LogOutput.print("There are non unsatisfiable clases (non-empty intersection of disjoint intervals))"); - } - - - } - - - - - - /** - * Given an identifier gets its disjoint intervals - * - * @param cIdent - * @return - */ - public List getDisjointIntervals4Identifier(int cIdent){ - - List disj_intervals=new ArrayList(); - - //it will only be necessary to compare one of the intervals for each entity - int preorder = getPreOrderNumber(cIdent); - - - //It may appear in several entries - for (Interval disj_int1 : interval2disjointIntervals.keySet()){ - - if (disj_int1.containsIndex(preorder)){ - - for (Interval disj_int2 : interval2disjointIntervals.get(disj_int1)){ - - disj_intervals.add(disj_int2); - - } - } - } - return disj_intervals; - } - - - - - - - - - //private Interval sorted_intervals[]; - private void _Quicksort(Interval matrix[], int a, int b) - { - //sorted_intervals = new Interval[matrix.length]; - Interval buf; - int from = a; - int to = b; - Interval pivot = matrix[(from+to)/2]; - do { - - while(from <= b && matrix[from].hasLowerLeftBoundThan(pivot)){ - from++; - } - while(to >= a && matrix[to].hasGreaterLeftBoundThan(pivot)){ - to--; - } - if(from <= to){ - buf = matrix[from]; - matrix[from] = matrix[to]; - matrix[to] = buf; - from++; to--; - } - }while(from <= to); - - if(a < to) { - _Quicksort(matrix, a, to); - } - if(from < b){ - _Quicksort(matrix, from, b); - } - - //sorted_intervals = matrix; - - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/LightTarjan.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/LightTarjan.java deleted file mode 100644 index 9b96bab5f6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/LightTarjan.java +++ /dev/null @@ -1,81 +0,0 @@ -package uk.ac.ox.krr.logmap2.indexing; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class LightTarjan implements Serializable { - - private static final long serialVersionUID = -3317618668787472814L; - private int index = 0; - private ArrayList stack = new ArrayList<>(); - private Map> SCCs = new HashMap<>(); - private int [] idx; - private int [] lowlink; - - private Map> tarjan(Integer v, - HashMap> graph){ - - idx[v] = index; - lowlink[v] = index; - - ++index; - stack.add(0, v); - - if(graph.containsKey(v)){ - for(Integer n : graph.get(v)){ - if(idx[n] == -1){ - tarjan(n, graph); - lowlink[v] = Math.min(lowlink[v], lowlink[n]); - } - else if(stack.contains(n)) - lowlink[v] = Math.min(lowlink[v], idx[n]); - } - } -// else -// throw new RuntimeException("Unknown node " + v); - - if(lowlink[v] == idx[v]){ - Integer n; - Set component = new HashSet<>(); - do{ - n = stack.remove(0); - component.add(n); - } while(n != v); - for (Integer i : component) - SCCs.put(i,component); - } - return SCCs; - } - - public Map> executeTarjan(HashMap> graph) { - SCCs.clear(); - index = 0; - stack.clear(); - assert graph != null && !graph.isEmpty(); - - Set nodeList = new HashSet<>(graph.keySet()); - for (Set children : graph.values()) - nodeList.addAll(children); - assert !nodeList.isEmpty(); - int maxId = nodeList.isEmpty() ? 0 : Collections.max(nodeList) + 1; - - idx = new int[maxId]; - Arrays.fill(idx, -1); - lowlink = new int[maxId]; - Arrays.fill(lowlink, -1); - - for (Integer node : nodeList) - if(idx[node] == -1) - tarjan(node, graph); - - return SCCs; - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/OntologyProcessing.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/OntologyProcessing.java deleted file mode 100644 index d9cffce3bc..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/OntologyProcessing.java +++ /dev/null @@ -1,4382 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.ArrayList; - - -import java.util.HashSet; - - -import java.util.Calendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Queue; -import java.util.Set; -import java.util.Map.Entry; - -//import org.apache.commons.lang3.StringUtils; - - -import org.semanticweb.owlapi.model.*; -import org.semanticweb.owlapi.reasoner.Node; -import org.semanticweb.owlapi.reasoner.NodeSet; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.impl.OWLClassNodeSet; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.indexing.entities.ClassIndex; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.WriteFile; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.lexicon.NormalizeDate; -import uk.ac.ox.krr.logmap2.lexicon.NormalizeNumbers; -import uk.ac.ox.krr.logmap2.multilingual.TranslatorManager; -import uk.ac.ox.krr.logmap2.oaei.OAEI2015InstanceProcessing; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.reasoning.ELKAccess; -import uk.ac.ox.krr.logmap2.reasoning.HermiTAccess; -import uk.ac.ox.krr.logmap2.reasoning.StructuralReasonerExtended; -import uk.ac.ox.krr.logmap2.reasoning.profiles.CheckOWL2Profile; -import uk.ac.ox.krr.logmap2.utilities.Lib; -import uk.ac.ox.krr.logmap2.utilities.PrecomputeIndexCombination; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * This class will extract the lexicon and structure of the given ontology - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 12, 2011 - * - */ -public class OntologyProcessing { - - long init, fin; - - private OWLOntology onto; - - private IndexManager index; - - /*Exact match entries*/ - //protected Map extact_occurrence_entries = new HashMap(); - - - /**Exact match inverted file*/ - protected Map, Set> invertedFileExact = new HashMap, Set>(); - - /**Exact match inverted file for data properties*/ - protected Map, Integer> invertedFileExactDataProp = new HashMap, Integer>(); - - /**Exact match inverted file for object properties*/ - protected Map, Integer> invertedFileExactObjProp = new HashMap, Integer>(); - - protected Map, Set> invertedFileIndividuals = new HashMap, Set>(); - //Only one word IF weak - protected Map> invertedFileWeakIndividuals = new HashMap>(); - - - //Will contain a lexicon of the role assertions in indiv - protected Map> invertedFileRoleassertions = new HashMap>(); - - - protected Map, Set> invertedFileWeakLabelsStemming = new HashMap, Set>(); - - protected Map, Set> invertedFileWeakLabels = new HashMap, Set>(); - //protected Map, Set> invertedFileWeakLabelsL2 = new HashMap, Set>(); - //protected Map, Set> invertedFileWeakLabelsL3 = new HashMap, Set>(); - - - - /**To index class names: necessary when loading GS and repairing mappings*/ - protected Map className2Identifier = new HashMap(); - - /**To index data prop names: necessary when loading GS and repairing mappings*/ - protected Map dataPropName2Identifier = new HashMap(); - - /**To index object prop names: necessary when loading GS and repairing mappings*/ - protected Map objectPropName2Identifier = new HashMap(); - - /**To index instance names: necessary when loading GS and repairing mappings*/ - protected Map individualName2Identifier = new HashMap(); - - - /**USed when extracting taxonomy*/ - private Map class2identifier = new HashMap(); - private Map classIri2identifier = new HashMap(); - - //For lexicon extraction. Indiv are related one to the other - private Map inidividual2identifier = new HashMap(); - - private Map identifier2class = new HashMap(); - - //In this set we should include those classes we should not map - //e.g. classes that are equivalent to Top (see cocus ontology) - private Set dangerousClasses = new HashSet(); - - - private Set alternative_labels_tmp = new HashSet(); - - - //private HashMap> identifier2directkids= new HashMap>(); - //private Map> identifier2directparents= new HashMap>(); - - /**This set will be used to propagate equivalences (entities store equivalents)*/ - //TODO this set will need to be enriched with anchors... or at leats considered after indexing - //In index - //private Set representativeNodes = new HashSet(); - - /* Importnat for a ordered assessment Now in index*/ - //protected Set RootIdentifiers = new HashSet(); - - - /*A^B->C axioms Now in Index*/ - //private Map, Integer> generalHornAxioms= new HashMap, Integer>(); - - - - /** We use this structure to create weak labels*/ - //private Map> identifier2stemmedlabel = new HashMap>(); - //We also consider alternative labels - private Map>> identifier2stemmedlabels = new HashMap>>(); - //Must be kept outside index to be removed after use and to attached to onto (i.e ontoprocessing object) - - /** - * Meaningful roots - * @deprecated - */ - protected Set MeaningfulRootIdentifiers = new HashSet(); - /**Real roots - * @deprecated - */ - protected Set TaxRootIdentifiers = new HashSet(); //The real ones - - - //IRI labels annotations - private String rdf_label_uri = "http://www.w3.org/2000/01/rdf-schema#label"; - public static String deprecated_uri = "http://www.w3.org/2002/07/owl#deprecated"; - - - protected Set obsolete_classes = new HashSet(); - - - - private String iri_onto = "http://krono.act.uji.es/ontology.owl"; - - public String getOntoIRI() {return iri_onto; } - - private int id_onto; - - - int num_syn=0; - int toohigh_synset_cases=0; - - - - private OWLReasoner reasoner; - private int reasonerIdentifier; - - - //TODO Ernesto: to avoid using all labels for weak mappings - boolean use_all_labels_for_weak_mappings=false; - - - private LexicalUtilities lexicalUtilities; - - private PrecomputeIndexCombination precomputeIndexCombination = new PrecomputeIndexCombination(); - - private ExtractStringFromAnnotationAssertionAxiom annotationExtractor = new ExtractStringFromAnnotationAssertionAxiom(); - - public ExtractAcceptedLabelsFromRoleAssertions roleAssertionLabelsExtractor = new ExtractAcceptedLabelsFromRoleAssertions(); - - private ExtractCategoriesForIndividual categoryExtractor = new ExtractCategoriesForIndividual(); - - - //For multilingual module - //private Translator translator = TranslatorManager.getCurrentTranslatorObject(); - private TranslatorManager translator = new TranslatorManager(Parameters.translator_id); //use all available translators - - - - /** - * - * @param onto - * @param index - * @param lexicalUtilities - */ - public OntologyProcessing(OWLOntology onto, IndexManager index, LexicalUtilities lexicalUtilities){ - - this.onto=onto; - this.index=index; - - this.lexicalUtilities=lexicalUtilities; - - - //We precompute indexes - //precomputeIndexCombination.clearCombinations(); //Old calls - precomputeIndexCombination.preComputeIdentifierCombination(); - - - //The preclassification with condor has no ontology id - if (onto.getOntologyID().getOntologyIRI()!=null){ - iri_onto=onto.getOntologyID().getOntologyIRI().toString(); - } - //System.out.println(onto.getOntologyID()); - - this.id_onto = this.index.addNewOntologyEntry(iri_onto); - - - - } - - public void clearOntologyRelatedInfo(){ - //TODO After extracting tax - onto=null; - class2identifier.clear(); - clearReasoner(); - } - - public Map getClass2Identifier(){ - return class2identifier; - } - - - public int getIdentifier4ConceptIRI(String iri){ - if (classIri2identifier.containsKey(iri)) - return classIri2identifier.get(iri); - else - return -1; - } - - - public void clearInvertedFilesExact(){ - invertedFileExact.clear(); - //invertedFileExactDataProp.clear(); - //invertedFileExactObjProp.clear(); - } - - public void clearInvertedFileStemming(){ - - invertedFileWeakLabelsStemming.clear(); - } - - public void clearInvertedFileWeak(){ - - invertedFileWeakLabels.clear(); - - } - - - public void clearInvertedFilesStemmingAndWeak(){ - - invertedFileWeakLabels.clear(); - invertedFileWeakLabelsStemming.clear(); - } - - public void clearStemmedLabels(){ - //identifier2stemmedlabel.clear(); - identifier2stemmedlabels.clear(); - } - - public void clearInvertedFiles4properties(){ - invertedFileExactDataProp.clear(); - invertedFileExactObjProp.clear(); - } - - public void clearInvertedFiles4Individuals(){ - invertedFileIndividuals.clear(); - invertedFileWeakIndividuals.clear(); - invertedFileRoleassertions.clear(); - } - - - - - - - - - - /** - * @deprecated - * - */ - private void clearTaxonomy(){ - //TODO after indexing or the global id2kids has been created - //identifier2directkids.clear(); - //identifier2directparents.clear(); - //representativeNodes.clear(); - //generalHornAxioms.clear(); - } - - - public void clearReasoner(){ - //TODO after extracting tax! - reasoner.dispose(); - reasoner=null; - } - - - - public void precessLexicon() { - precessLexicon(true); - } - - /** - * We create a class identifier for each class, we also create inverted files - * - */ - public void precessLexicon(boolean extractLabels) { - - - init=Calendar.getInstance().getTimeInMillis(); - - - - //LogOutput.print(onto.getClassesInSignature().size()); - - //CLASSES - LogOutput.print("\nCLASSES: " + onto.getClassesInSignature(true).size()); - - //TODO - //We need to add something - //Was already fixed in a different place? - //if (onto.getClassesInSignature(true).size()==0){ - // OWLClass cls = SynchronizedOWLManager.createOWLDataFactory().getOWLClass(IRI.create("http://logmap.cs.ox.ac.uk/ontologies#TopClass")); - // precessLexiconClasses(cls, extractLabels); - //} - //else { - - //TODO For the OAEI campaign we do not translate bigger ontologies - //We have a limit in our google translate account - if (onto.getClassesInSignature(true).size()>300){ - Parameters.allow_multilingual=false; - } - - - //TODO Identify language and load local dictionary if any - //Useful for the multifarm task where we need to translate each ontology servarl times. - //Thus we translate for the first occurrence and we keep (locally) the translation for the next cases. - //We assume that each ontology is in only one language - String lang=""; - if (Parameters.allow_multilingual){ - lang = identifyLanguageOfOntologyLabels(); - - //System.out.println("LANGUAGE: " + lang); - - if (!lang.equals("") && !lang.equals(Parameters.target_lang)){ - //load dictionary - try { - translator.loadDictionary(lang); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - LogOutput.printError("Dictionary file for '" + lang + "' not found.");// + e.getLocalizedMessage()); - //e.printStackTrace(); - } - } - - - } - - - - - for (OWLClass cls : onto.getClassesInSignature(true)){ //we also add imports - - - if (!cls.isTopEntity() && !cls.isBottomEntity()){// && !ns_ent.equals(oboinowl)){ - - processLexiconClasses(cls, extractLabels); - - } - - }//end For classes - - - //DETECT HIGH REDUNDANCY ON EXACT IF - //Added August 30 - if (Parameters.avoid_redundant_labels){ - Set redundant_ids = new HashSet(); - for (Set entry : invertedFileExact.keySet()){ - if (invertedFileExact.get(entry).size()>Parameters.max_redundancy_labels){ - //Keep only entries for which only 1 alternative label exists - for (int ident: invertedFileExact.get(entry)){ - if (index.getAlternativeLabels4ConceptIndex(ident).size()>1){//has lower case - redundant_ids.add(ident); - } - } - invertedFileExact.get(entry).removeAll(redundant_ids); - redundant_ids.clear(); - } - } - } - - //System.out.println("NUM RDF LABEL: "+num_labels); - - - //}//end If size classes - - - //DATA PROPERTIES - processLexiconDataProperties(extractLabels); - - - - //OBJECT PROPERTIES - processLexiconObjectProperties(extractLabels); - - - - //INDIVIDUALS - if (Parameters.perform_instance_matching){ - processNamedIndividuals(extractLabels); - - //DETECT HIGH REDUNDANCY ON EXACT IF - //Added August 30 - - if (Parameters.avoid_redundant_labels){ - Set redundant_ids = new HashSet(); - for (Set entry : invertedFileIndividuals.keySet()){ - if (invertedFileIndividuals.get(entry).size()>Parameters.max_redundancy_labels){ - - //if (entry.contains("sonates")){ - // System.out.println("Redundancey: " + entry + " " + invertedFileIndividuals.get(entry).size()); - //} - - //Keep only entries for which only 1 alternative label exists - for (int ident: invertedFileIndividuals.get(entry)){ - - //if (entry.contains("sonates")){ - // System.out.println("\t" + ident + " " + index.getAlternativeLabels4IndividualIndex(ident).size() + " " + index.getAlternativeLabels4IndividualIndex(ident) + " " + index.getIRIStr4IndividualIndex(ident)); - //} - - if (index.getAlternativeLabels4IndividualIndex(ident).size()>1){ - redundant_ids.add(ident); - } - } - invertedFileIndividuals.get(entry).removeAll(redundant_ids); - redundant_ids.clear(); - } - } - } - - } - - - //Store local dictionary: es-en.txt - //Add note that the dictionary is automatically extracted. - if (Parameters.allow_multilingual){ - - if (!lang.equals("") && !lang.equals(Parameters.target_lang)){ - - //TODO we also store new translations if not in local or local is not allowed - //store dictionary - translator.storeDictionary(lang); - //} - - //TODO REMOVE if not testing!!! - /*if (Parameters.is_test_mode_multilingual){ - WriteFile writer = new WriteFile( - "/home/ernesto/Documents/OAEI_OM_2015/EVAL_2015/error_multilingual/total_characters_reduced.txt", true); - //System.out.println("Num translated characters: " + translator.getNumberOfTranslatedCharacters()); - //System.out.println("Num calls to google: " + translator.getNumberOfGoogleTranslateCalls()); - writer.writeLine(String.valueOf(translator.getNumberOfTranslatedCharacters())); - writer.closeBuffer(); - }*/ - - } - - } - - - - - - - LogOutput.print("Number of classes/labels: " + index.getSizeIndexClasses()); //Ojo it is a total - LogOutput.print("\tNumber of labels + syn: " + num_syn); - LogOutput.print("\tCases with huge combination of synonyms: " + toohigh_synset_cases); - LogOutput.print("\tNumber of entries inverted file (exact): " + invertedFileExact.size()); - - LogOutput.print("Number of dProp: " + index.getSizeDataProperties()); //Ojo it is a total - LogOutput.print("\tNumber of dProp inverted file: " + invertedFileExactDataProp.size()); - - LogOutput.print("Number of oProp: " + index.getSizeObjectProperties()); //Ojo it is a total - LogOutput.print("\tNumber of oProp inverted file: " + invertedFileExactObjProp.size()); - - LogOutput.print("Number of Indiv: " + index.getSizeIndexIndividuals()); //Ojo it is a total - LogOutput.print("\tNumber of Indiv inverted file: " + invertedFileIndividuals.size()); - LogOutput.print("\tNumber of Indiv weak inverted file: " + invertedFileWeakIndividuals.size()); - LogOutput.print("\tNumber of Indiv Role assertions inverted file: " + invertedFileRoleassertions.size()); - - - - - /*int exactIFAmb=0; - for (Set setstr : invertedFileExact.keySet()){ - //LogOutput.print(setstr); - if (invertedFileExact.get(setstr).size()>1) - exactIFAmb++; - } - LogOutput.print("Ambiguity IF exact: " + exactIFAmb);*/ - - - //Labels are already indexed so we can safely remove annotations form onto - //managerOnto.applyChanges(listchanges); - - - /*for (int i=1900; i<2000; i++){ - if (identifier2ClassIndex.get(i).getAlternativeLabels().size()>1){ - LogOutput.print(i); - LogOutput.print("\t"+identifier2ClassIndex.get(i).getLabel()); - LogOutput.print("\t"+identifier2ClassIndex.get(i).getEntityName()); - LogOutput.print("\t"+identifier2ClassIndex.get(i).getAlternativeLabels()); - } - }*/ - - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time setting labels and inverted files (s): " + (float)((double)fin-(double)init)/1000.0); - - - - - } - - - - private String identifyLanguageOfOntologyLabels(){ - - //We check a subset of classes - int num_tests=0; - - String lang=""; - - for (OWLClass cls : onto.getClassesInSignature(true)){ //we also add imports - if (!cls.isTopEntity() && !cls.isBottomEntity()){ - - for (OWLAnnotationAssertionAxiom clsAnnAx : cls.getAnnotationAssertionAxioms(onto)){ - - lang = annotationExtractor.getAnntotationLanguage(clsAnnAx); - - if (lang!=null && !lang.equals("")){ - - //To fix misuses of ISO codes - if (lang.equals("cn")) - return "zh"; - if (lang.equals("cz")) - return "cs"; - - return lang; - } - - } - num_tests++; - if (num_tests>100) //to put a limit! - return lang; - } - } - - return lang; - } - - - - - private Set translateLabel(OWLAnnotationAssertionAxiom entityAnnAx, String label){ - - Set translation_labels = new HashSet(); - - //We only translate if lang is provided in a direct label - String lang = annotationExtractor.getAnntotationLanguage(entityAnnAx); - - if (!lang.equals(Parameters.target_lang) && !lang.equals("")){ - - //Call the translation module - label = translator.getTranslation(label, lang); - //LogOutput.printAlways(label + ": " + translation); - - - //For translated labels (case with many translations) - //Label is: trans1|trans2|...|transx - if (label.indexOf("|")>=0){ - String[] elements = label.split("\\|"); - for (String e : elements){ - translation_labels.add(e); - } - return translation_labels; - } - - } - - translation_labels.add(label); //Original label or single translation - - return translation_labels; - } - - - - - private void processLexiconClasses(OWLClass cls, boolean extractLabels) { - - int ident; - - String ns_ent; - String name; - - - - //TODO Added on Sept 7, 2018 - //Avoid deprecated cases. Possibly extend the ways a class is declared as deprecated - if (isDeprecatedClass(cls)){ - //System.out.println("Filtering deprecated cls: " + cls.getIRI()); - return; - } - - - ns_ent=Utilities.getNameSpaceFromURI(cls.getIRI().toString()); - - - ident = index.addNewClassEntry(); - - index.setOntologyId4Class(ident, id_onto); - - name = Utilities.getEntityLabelFromURI(cls.getIRI().toString()); - - //if (name.equals("Mouse_Coccyx")) - // LogOutput.print("Here"); - - index.setClassName(ident, name); - - //We store ns only if it is different to the ontology ns - if (!ns_ent.equals("") && !ns_ent.equals(iri_onto)){ - index.setClassNamespace(ident, ns_ent); - } - - - /*LogOutput.print("\nENT:"); - LogOutput.print(iri_onto); - LogOutput.print(cls.getIRI().toString()); - LogOutput.print(identifier2ClassIndex.get(ident).getNamespace()); - LogOutput.print(identifier2ClassIndex.get(ident).getEntityName());*/ - - - //We may need this structure for the taxonomy extraction... - class2identifier.put(cls, ident); - identifier2class.put(ident, cls); - className2Identifier.put(name, ident); - - // Alessandro 21 April 2014 - //Useful for composed mappinsg as well - classIri2identifier.put(cls.getIRI().toString(), ident); - - - //Extract labels and alternative labels and create IFs - if (extractLabels) - createEntryInLexicalInvertedFiles4ClassLabels(cls, ident); - - //if (ident>30) - // break; - - - } - - - private void processLexiconDataProperties() { - processLexiconDataProperties(true); - } - - - private void processLexiconDataProperties(boolean extractLabels) { - - - List cleanWords; - String label; - - int ident; - - String ns_ent; - String name; - - //DATA PROPERTIES - for (OWLDataProperty dProp : onto.getDataPropertiesInSignature(true)){ //also imports - - ns_ent=Utilities.getNameSpaceFromURI(dProp.getIRI().toString()); - - - ident = index.addNewDataPropertyEntry(); - - index.setOntologyId4DataProp(ident, id_onto); - - name = Utilities.getEntityLabelFromURI(dProp.getIRI().toString()); - - index.setDataPropName(ident, name); - - dataPropName2Identifier.put(name, ident); - - - //LogOutput.print(name); - - //We store ns only if it is different to the ontology ns - if (!ns_ent.equals("") && !ns_ent.equals(iri_onto)){ - index.setDataPropNamespace(ident, ns_ent); - } - - - //Extract labels and alternative labels and create IFs - cleanWords = processLabel(name); - if (cleanWords.size()>0){ - if (extractLabels){ - invertedFileExactDataProp.put(new HashSet(cleanWords), ident); - } - } - - label=""; - for (String word : cleanWords){ - label=label + word; - } - //label without spaces - index.setDataPropLabel(ident, label); - index.addAlternativeDataPropertyLabel(ident, label); - cleanWords.clear(); - - - //Create alternative labels - //-------------------------------- - List cleanWordsAlternative = createAlternativeLabel(name); - if (cleanWordsAlternative.size()>0){ - - //Note that we do not add alternative label to inverted file - //Inverted file only contains exact entries from main labels - - label=""; //label without spaces - for (String word : cleanWordsAlternative){ - label=label + word; - } - index.addAlternativeDataPropertyLabel(ident, label); - } - cleanWordsAlternative.clear(); - - //---------------------------- - //Use rdf:label and others as alternative labels - //---------------------------- - //TODO: labels might be in an annotation - - - - for (OWLAnnotationAssertionAxiom dPropAnnAx : dProp.getAnnotationAssertionAxioms(onto)){ - - //String label_value = annotationExtractor.getAnntotationString(dPropAnnAx); - - LogOutput.print(name); - - - //TODO Perform translation if necessary - for (String label_value : annotationExtractor.getAnntotationString(dPropAnnAx, onto, index.getFactory())){ - - if (Parameters.allow_multilingual){ - alternative_labels_tmp.addAll(translateLabel(dPropAnnAx, label_value)); - } - else{ - alternative_labels_tmp.add(label_value); - } - - } - - - //Cleaning and Indexing - for (String label_value : alternative_labels_tmp){ - - - LogOutput.print("\t " + label_value); - - cleanWords = processLabel(label_value); - - if (cleanWords.size()>0){ - label=""; //label without spaces - for (String word : cleanWords){ - - if (label.length()==0) - label= word; - else{ - label+= "_" + word; - } - - } - index.addAlternativeDataPropertyLabel(ident, label); - - } - } - alternative_labels_tmp.clear(); - } - - - - //LogOutput.print(name); - - //Process domain - //-------------------------------- - for (OWLClassExpression clsexp : dProp.getDomains(onto)){ - if (!clsexp.isAnonymous()){ - if (class2identifier.containsKey(clsexp.asOWLClass())){ - index.addDomainClass4DataProperty(ident, class2identifier.get(clsexp.asOWLClass())); - } - } - else if (clsexp.getClassExpressionType()==ClassExpressionType.OBJECT_UNION_OF){ - for (OWLClassExpression clsexpunion : clsexp.asDisjunctSet()){ - if (!clsexpunion.isAnonymous()){ - if (class2identifier.containsKey(clsexpunion.asOWLClass())){ - index.addDomainClass4DataProperty(ident, class2identifier.get(clsexpunion.asOWLClass())); - } - } - } - } - } - - String range_type; - - //Process data ranges - //-------------------------------- - for (OWLDataRange type : dProp.getRanges(onto)){ - if (type.isDatatype()){ - //LogOutput.print(type.asOWLDatatype() + " " + type.asOWLDatatype().getIRI() + " " + type.asOWLDatatype().isBuiltIn() +" " + - // Utilities.getEntityLabelFromURI(type.asOWLDatatype().getIRI().toString())); - - try{ - if (type.asOWLDatatype().isBuiltIn()){ - range_type = type.asOWLDatatype().getBuiltInDatatype().getShortName(); - } - else{//we extract name from iri - //range_type = Utilities.getEntityLabelFromURI(Utilities.getEntityLabelFromURI(type.asOWLDatatype().getIRI().toString())); - range_type = Utilities.getEntityLabelFromURI(type.asOWLDatatype().getIRI().toString()); - } - } - catch (Exception e){ //In some cases the datatype is not built in an rises an error - //range_type = Utilities.getEntityLabelFromURI(Utilities.getEntityLabelFromURI(type.asOWLDatatype().getIRI().toString())); - range_type = Utilities.getEntityLabelFromURI(type.asOWLDatatype().getIRI().toString()); - } - index.addRangeType4DataProperty(ident, range_type); - } - - } - - - //LogOutput.print("\tDOMAINS: " + identifier2DataPropIndex.get(ident).getDomainClassIndexes()); - //LogOutput.print("\tRANGES: " + identifier2DataPropIndex.get(ident).getRangeTypes()); - - - ident++; - - } - - - } - - private void processLexiconObjectProperties(){ - processLexiconObjectProperties(true); - } - - private void processLexiconObjectProperties(boolean extractLabels){ - - List cleanWords; - String label; - - int ident; - - String ns_ent; - String name; - - - //OBJECT PROPERTIES - for (OWLObjectProperty oProp : onto.getObjectPropertiesInSignature(true)){//also imports - - ns_ent=Utilities.getNameSpaceFromURI(oProp.getIRI().toString()); - - - - ident = index.addNewObjectPropertyEntry(); - - index.setOntologyId4ObjectProp(ident, id_onto); - - name = Utilities.getEntityLabelFromURI(oProp.getIRI().toString()); - - index.setObjectPropName(ident, name); - - objectPropName2Identifier.put(name, ident); - - - //identifier2ObjPropIndex.get(ident).setLabel(name); - - //LogOutput.print(name); - - - //We store ns only if it is different to the ontology ns - if (!ns_ent.equals("") && !ns_ent.equals(iri_onto)){ - index.setObjectPropNamespace(ident, ns_ent); - } - - //Extract labels and alternative labels and create IFs - cleanWords = processLabel(name); - if (cleanWords.size()>0){ - if (extractLabels){ - invertedFileExactObjProp.put(new HashSet(cleanWords), ident); - } - } - - label=""; //label without spaces - for (String word : cleanWords){ - label=label + word; - } - index.setObjectPropLabel(ident, label); - index.addAlternativeObjectPropertyLabel(ident, label); - cleanWords.clear(); - - - - //Create alternative labels - //-------------------------------- - List cleanWordsAlternative = createAlternativeLabel(name); - if (cleanWordsAlternative.size()>0){ - - //Note that we do not add alternative label to inverted file - //Inverted file only contains exact entries from main labels - - label=""; //label without spaces - for (String word : cleanWordsAlternative){ - label=label + word; - } - index.addAlternativeObjectPropertyLabel(ident, label); - } - cleanWordsAlternative.clear(); - - - - //---------------------------- - //Use rdf:label and others as alternative labels - //---------------------------- - //TODO: labels might be in an annotation - for (OWLAnnotationAssertionAxiom oPropAnnAx : oProp.getAnnotationAssertionAxioms(onto)){ - - //String label_value = annotationExtractor.getAnntotationString(oPropAnnAx); - - LogOutput.print(name); - - - //TODO Perform translation if necessary - for (String label_value : annotationExtractor.getAnntotationString(oPropAnnAx, onto, index.getFactory())){ - - if (Parameters.allow_multilingual){ - alternative_labels_tmp.addAll(translateLabel(oPropAnnAx, label_value)); - } - else{ - alternative_labels_tmp.add(label_value); - } - - } - - - //Cleaning and indexing - for (String label_value : alternative_labels_tmp){ - - - LogOutput.print("\t " + label_value); - - cleanWords = processLabel(label_value); - - if (cleanWords.size()>0){ - label=""; //label without spaces - for (String word : cleanWords){ - - if (label.length()==0) - label= word; - else{ - label+= "_" + word; - } - - } - //System.out.println(ident + " " + label); - index.addAlternativeObjectPropertyLabel(ident, label); - - } - } - alternative_labels_tmp.clear(); - } - - - - - //Process Inverse properties and extend labels - //-------------------------------------------- - String inverse_name; - List cleanWordsInverse; - for (OWLObjectPropertyExpression propexp : oProp.getInverses(onto)){ - if (!propexp.isAnonymous()){ - inverse_name = Utilities.getEntityLabelFromURI( - propexp.asOWLObjectProperty().getIRI().toString()); - - //Reuse name of inverse property to create an alternative label for the property - cleanWordsInverse = processInverseLabel(inverse_name); - - if (cleanWordsInverse.size()>0){ - - //Note that we do not add alternative label to inverted file - //Inverted file only contains exact entries from main labels - - - label=""; //label without spaces - for (String word : cleanWordsInverse){ - label=label + word; - } - index.addAlternativeObjectPropertyLabel(ident, label); - } - cleanWordsInverse.clear(); - } - } - - - //Process domains - //-------------------------------------------- - for (OWLClassExpression clsexp : oProp.getDomains(onto)){ - - if (!clsexp.isAnonymous()){ - if (class2identifier.containsKey(clsexp.asOWLClass())){ - index.addDomainClass4ObjectProperty(ident, class2identifier.get(clsexp.asOWLClass())); - } - } - else if (clsexp.getClassExpressionType()==ClassExpressionType.OBJECT_UNION_OF){ - for (OWLClassExpression clsexpunion : clsexp.asDisjunctSet()){ - if (!clsexpunion.isAnonymous()){ - if (class2identifier.containsKey(clsexpunion.asOWLClass())){ - index.addDomainClass4ObjectProperty(ident, class2identifier.get(clsexpunion.asOWLClass())); - } - } - } - } - - } - - - //Process ranges - //-------------------------------------------- - for (OWLClassExpression clsexp : oProp.getRanges(onto)){ - if (!clsexp.isAnonymous()){ - if (class2identifier.containsKey(clsexp.asOWLClass())){ - index.addRangeClass4ObjectProperty(ident, class2identifier.get(clsexp.asOWLClass())); - } - } - else if (clsexp.getClassExpressionType()==ClassExpressionType.OBJECT_UNION_OF){ - for (OWLClassExpression clsexpunion : clsexp.asDisjunctSet()){ - if (!clsexpunion.isAnonymous()){ - if (class2identifier.containsKey(clsexpunion.asOWLClass())){ - index.addRangeClass4ObjectProperty(ident, class2identifier.get(clsexpunion.asOWLClass())); - } - } - } - } - } - - //LogOutput.print(name); - //LogOutput.print("\tDOMAINS: " + identifier2ObjPropIndex.get(ident).getDomainClassIndexes()); - //LogOutput.print("\tRANGES: " + identifier2ObjPropIndex.get(ident).getRangeClassIndexes()); - - ident++; //Is it necessary? - - } - - } - - - private void processNamedIndividuals(){ - processNamedIndividuals(true); - } - - private void processNamedIndividuals(boolean extractLabels){ - - Set cleanWords = new HashSet(); - List cleanWordsList; - - String label; - - int ident; - - String ns_ent; - String name; - - - Set altLabels = new HashSet(); - - - String longestALabel; - - - int num_dummy_indiv = 0; - Set dummyIndividualsSet = new HashSet(); - - - - for (OWLNamedIndividual indiv : onto.getIndividualsInSignature(true)){//also imports - - ns_ent=Utilities.getNameSpaceFromURI(indiv.getIRI().toString()); - - ident = index.addNewIndividualEntry(); - - index.setOntologyId4Individual(ident, id_onto); - - inidividual2identifier.put(indiv, ident); - - - //Name in URI - name = Utilities.getEntityLabelFromURI(indiv.getIRI().toString()); - index.setIndividualName(ident, name); - //We add a better label below if there are alternative labels - index.setIndividualLabel(ident, name); - - individualName2Identifier.put(name, ident); - - //We store ns only if it is different to the ontology ns - if (!ns_ent.equals("") && !ns_ent.equals(iri_onto)){ - index.setIndividualNamespace(ident, ns_ent); - } - - - //IF DUMMY INDIVIDUAL THEN DO NOT ADD ALTERNATIVE LABELS - //In OAEI 2013 the ones that are referenced from property "http://www.instancematching.org/label" - if (roleAssertionLabelsExtractor.isDummyIndividual(indiv)){ - //LogOutput.print("DUMMY individual: " + indiv.getIRI().toString()); - num_dummy_indiv++; - dummyIndividualsSet.add(indiv); - continue; - } - - - - - //EXTRACT ALTERNATIVE LABELS FOR INDIVIDUAL - ///------------------------------------------- - //altLabels.add(name); - - - //We add accepted assertions associated to the individual - //altLabels.addAll(extractNameFromDataAssertion(indiv)); - altLabels.addAll(roleAssertionLabelsExtractor.extractLexiconFromRoleAssertions(indiv)); //new - - - //We add accepted annotations associated to the individual - altLabels.addAll(extractAnnotations4Infividual(indiv)); - - - //TODO EXTRACT CATEGORIES - //From annotations and (data and object) role assertions - categoryExtractor.extract(indiv, ident); - - - //add weak entries - - longestALabel=""; - - //We treat Alt labels for individual: so far datatype assertion name and URI - for (String alabel : altLabels){ - - if (!isLabelAnIdentifier(alabel)){ - - if (alabel.length()>longestALabel.length()){ - longestALabel=alabel; - } - - index.addAlternativeIndividualLabel(ident, alabel.toLowerCase()); //lower case? I guess it is the same... - - cleanWordsList = processLabel(alabel, true); //sopwords!! //and lowecase - - //Add altlabels with order changed - changeOrderAltLabelWords(ident, cleanWordsList); - - //wE do not want order in IFs entries - cleanWords.addAll(cleanWordsList); - - - //Weak IF - String stemmedWord; - for (String word : cleanWords){ - - if (extractLabels){ - - if (!invertedFileWeakIndividuals.containsKey(word)) - invertedFileWeakIndividuals.put(word, new HashSet()); - - invertedFileWeakIndividuals.get(word).add(ident); - - //Add stemmed word - stemmedWord = lexicalUtilities.getStemming4Word(word); - if (stemmedWord.length()>2){ //minimum 3 characters - - if (!invertedFileWeakIndividuals.containsKey(stemmedWord)) - invertedFileWeakIndividuals.put(stemmedWord, new HashSet()); - - invertedFileWeakIndividuals.get(stemmedWord).add(ident); - - } - } - - } - - - //Exact IF - if (cleanWords.size()>0){ - - if (extractLabels){ - if (!invertedFileIndividuals.containsKey(cleanWords)) - invertedFileIndividuals.put(new HashSet(cleanWords), new HashSet()); - - //LogOutput.print(invertedFileExactIndividuals.get(cleanWords) + " "+cleanWords + " "+ ident); - invertedFileIndividuals.get(cleanWords).add(ident); - } - - cleanWords.clear(); - cleanWordsList.clear();//not really necessary - - } - - }//if ident - - }//end for alabels - - - - - - - - - //Deprecated: seems to be wrong - //We add an alternative label including all alternative labels - //This will only be used to extract isub score - //------------------------------- - /*String new_alabel=""; - for (String altLabel : index.getAlternativeLabels4IndividualIndex(ident)){ - new_alabel += altLabel + " "; - } - new_alabel = new_alabel.trim(); - if (new_alabel.length()>3) - index.addAlternativeIndividualLabel(ident, new_alabel); - */ - - - - //We add a better label - if (!longestALabel.equals("")){ - index.setIndividualLabel(ident, longestALabel); - } - - - //altLabels.clear(); - - - //***** - //Deprecated (August 28, 2017): check LogMapCore.createAndAssessInstanceMappings and MappingManager.addInstanceMapping - //***** - - //Extract class types. - //We only extract direct types. Inferred types will be extracted later when setting up the taxonomic data. - //TODO: No ancestors considered at this stage - - - /*boolean showIndividualInOutput=false; - - for (OWLClassExpression clsexp : indiv.getTypes(onto)){ - - if (!clsexp.isAnonymous()){ - if (class2identifier.containsKey(clsexp.asOWLClass())){ - index.addType4Individual(ident, class2identifier.get(clsexp.asOWLClass())); - - - - if (Parameters.allowed_instance_types.contains(clsexp.asOWLClass().getIRI().toString())) - showIndividualInOutput=true; - } - } - else if (clsexp.getClassExpressionType()==ClassExpressionType.OBJECT_UNION_OF){ - for (OWLClassExpression clsexpunion : clsexp.asDisjunctSet()){ - if (!clsexpunion.isAnonymous()){ - if (class2identifier.containsKey(clsexpunion.asOWLClass())){ - index.addType4Individual(ident, class2identifier.get(clsexpunion.asOWLClass())); - if (Parameters.allowed_instance_types.contains(clsexp.asOWLClass().getIRI().toString())) - showIndividualInOutput=true; - } - } - } - } - //other not considered yet - - } - - //IN SOME INSTANCE MATCHING TASKS ONLY IT IS REQUIRED TO DISCOVER INDIVIDUAL OF CERTAIN CLASSES - index.setShowInOutput4Individual(ident, showIndividualInOutput); - */ - //Deprecated - - - - - - //In main extract instances and assess.... - - //LogOutput.print("INDIVIDUALS " + id_onto + ", " +ident); - /* - //LogOutput.print("\t" + indiv.getIRI().toString()); - //LogOutput.print("\t" + index.getName4IndividualIndex(ident)); - //LogOutput.print("\t" + index.getLabel4IndividualIndex(ident)); - LogOutput.print("\t" + index.getIRIStr4IndividualIndex(ident)); - LogOutput.print("\t" + altLabels); - - LogOutput.print("\tTYPES: " + index.getIndividualClassTypes4Identifier(ident)); - LogOutput.print("\tIF size: " + invertedFileExactIndividuals.size()); - if (invertedFileExactIndividuals.size()<5){ - LogOutput.print("\tIF size: " + invertedFileExactIndividuals); - }*/ - - altLabels.clear(); - - - }//end for individuals - - - - - //Another for to extract lexicon from other labels (relationships with other indiv or data) - //Must be after wars since we require "inidividual2identifier" - - if (extractLabels){ - - OAEI2015InstanceProcessing oaei2015extractor = new OAEI2015InstanceProcessing(); - - for (OWLNamedIndividual indiv : onto.getIndividualsInSignature(true)){//also imports - - //We do not want to match dummy individuals! - if (dummyIndividualsSet.contains(indiv)) - continue; - - for (String str_label : roleAssertionLabelsExtractor.extractExtendedLexiconFromRoleAssertions(indiv)){ - - - if (!invertedFileRoleassertions.containsKey(str_label)) - invertedFileRoleassertions.put(str_label, new HashSet()); - - invertedFileRoleassertions.get(str_label).add(inidividual2identifier.get(indiv)); - - } - - - - - //ADD REFERENCED INDIVIDUALS - //We extract the set of referenced individuals: Cities for lives_in, Paper for author_of, etc - Map> objProp2values = indiv.getObjectPropertyValues(onto); - - for (OWLObjectPropertyExpression objprop : objProp2values.keySet()){ - - for (OWLIndividual indiv_deep2 : objProp2values.get(objprop)){ - - if (indiv_deep2.isAnonymous()) - continue; - - index.addReferencedIndividual4Individual( - inidividual2identifier.get(indiv), inidividual2identifier.get(indiv_deep2)); - } - }//for obj prop - - - ///CHARACTERISTICS - //Add charactersitics for Authors: e.g. num publications and citations - //Characteristic 1: publication count - index.addCharactersitic4Individual(inidividual2identifier.get(indiv), oaei2015extractor.getPublicationCount(onto, indiv)); - //Characteristic 2: Number of citations - index.addCharactersitic4Individual(inidividual2identifier.get(indiv), oaei2015extractor.getNumberOfCitations(onto, indiv)); - //Characteristic 3: active from - index.addCharactersitic4Individual(inidividual2identifier.get(indiv), oaei2015extractor.getActiveFromYear(onto, indiv)); - - - //if (index.getIdentifier2IndividualIndexMap().get(inidividual2identifier.get(indiv)).showInOutput()) - // LogOutput.printAlways(indiv.getIRI() + " referred: " + index.getReferencedIndividuals4Individual(inidividual2identifier.get(indiv)).size()); - - - - - - - - - - } - - - - - - } - - //not necessary any more - inidividual2identifier.clear(); - dummyIndividualsSet.clear(); - - - LogOutput.print("NUMBER OF DUMMY INDIVIDUALS: " + num_dummy_indiv); - - - LogOutput.print("MAX SIZE ANNOTATIONS: " + roleAssertionLabelsExtractor.max_size_name_label); - LogOutput.print("MIN SIZE ANNOTATIONS: " + roleAssertionLabelsExtractor.min_size_name_label); - - } - - - /** - * Changes order of alternative words labels - */ - private void changeOrderAltLabelWords(int ident, List cleanWordsList){ - - String original=""; - String changed=""; - - //Add same altlabel without - if (cleanWordsList.size()>0){ - - original = cleanWordsList.get(0); - for (int i=1; i-1; i--) { - changed += " " + cleanWordsList.get(i); - } - - index.addAlternativeIndividualLabel(ident, original); - index.addAlternativeIndividualLabel(ident, changed); - - } - - - } - - - - - Set lexiconValues4individual = new HashSet(); - - /** - * See Class @ExtractAcceptedLabelsFromRoleAssertions - * @deprecated - */ - private Set extractNameFromDataAssertion(OWLNamedIndividual indiv){ - - lexiconValues4individual.clear(); - - String label_value; - - - //roleAsserationExtractor - - //TODO - //ceate class - - for (String uri_indiv_ann : Parameters.accepted_data_assertion_URIs_for_individuals){ - - for (OWLLiteral assertion_value : indiv.getDataPropertyValues( - index.getFactory().getOWLDataProperty(IRI.create(uri_indiv_ann)), onto)){ - - label_value = assertion_value.getLiteral().toLowerCase(); - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - } - } - - return lexiconValues4individual; - - - } - - - private Set extractAnnotations4Infividual(OWLNamedIndividual indiv){ - - lexiconValues4individual.clear(); - - //System.out.println(indiv.getIRI()); - - //for (OWLAnnotation ann : indiv.getAnnotations(onto)){ - // System.out.println(ann); - //} - - for (OWLAnnotationAssertionAxiom indivAnnAx : indiv.getAnnotationAssertionAxioms(onto)){ - - //label_value = annotationExtractor.getAnntotationString(indivAnnAx); - //String uri_ann = indivAnnAx.getAnnotation().getProperty().getIRI().toString(); - //System.out.println("\tIndiv label: '" + uri_ann + "' " + label_value); - - - - //TODO Perform translation if necessary - for (String label_value : annotationExtractor.getAnntotationString(indivAnnAx, onto, index.getFactory())){ - - if (Parameters.allow_multilingual){ - alternative_labels_tmp.addAll(translateLabel(indivAnnAx, label_value)); - } - else{ - alternative_labels_tmp.add(label_value); - } - - } - - //Cleaning and indexing - for (String label_value : alternative_labels_tmp){ - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - } - alternative_labels_tmp.clear(); - - }//end class ann axioms - - return lexiconValues4individual; - } - - - - - private List processLabel(String label){ - return processLabel(label, false); - } - - - /** - * This processes the property label and alternative labels, and create inverted files - * Used for properties and individuals. Classes have a more sophisticated processing - * @param label - * @param ident - */ - private List processLabel(String label, boolean filterStopwords){ - - String label_value; - List cleanWords = new ArrayList(); - String[] words; - - label_value=label.replace(",", ""); - label_value=label.replace("-", ""); - - if (label_value.indexOf("_")>0){ - words=label_value.split("_"); - } - else if (label_value.indexOf(" ")>0){ - words=label_value.split(" "); - } - //Split capitals... - else{ - words=Utilities.splitStringByCapitalLetter(label_value); - } - - //shift=1; - - label_value=""; - - for (int i=0; i0 && (!filterStopwords || !lexicalUtilities.getStopwordsSet().contains(words[i]))){ - //if (words[i].length()>0 && (!filterStopwords || !lexicalUtilities.getStopwordsSetExtended().contains(words[i]))){ - cleanWords.add(words[i]); - } - } - - - - - - - return cleanWords; - - } - - /** - * This class processes the label of P2 (an inverse property of P1) and - * returns a candidate alternative label for P1. - * e.g: hasPart -> partOf - * e.g: authorOf -> hasAuthor - * e.g. writtenBy -> written (would be similar to writes) - * e.g. isGivenBy ->given (would be closer to gives) - * @param label - * @return - */ - private List processInverseLabel(String label){ - - List words = processLabel(label); - - int lastIndex = words.size()-1; - - String firstWord = words.get(0).toLowerCase(); - String lastWord = words.get(lastIndex).toLowerCase(); - - //LogOutput.printAlways(words.toString()); - - if (firstWord.equals("has")){ - words.remove(0); - words.add("of"); - } - else if (lastWord.equals("of")){ - words.remove(lastIndex); - words.add(0, "has"); - } - else if (lastWord.equals("by")){ - words.remove(lastIndex); - if (firstWord.equals("is")){ - words.remove(0); - } - } - else{ - words.clear(); - } - - //LogOutput.printAlways(words.toString()); - - return words; - - } - - - /** - * Create alternative label for a given property - * e.g. hasName -> name - * e.g. isReviewedBy - > hasReviewer - * @param label - * @return - */ - private List createAlternativeLabel(String label){ - - List words = processLabel(label); - - int lastIndex = words.size()-1; - - String firstWord = words.get(0).toLowerCase(); - String lastWord = words.get(lastIndex).toLowerCase(); - - //LogOutput.printAlways(words.toString()); - - if (firstWord.equals("has")){ - words.remove(0); - } - else if (lastWord.equals("by")){ - words.remove(lastIndex); - if (firstWord.equals("is")){ - words.remove(0); - } - words.add(0, "has"); - } - else{ - words.clear(); - } - - //LogOutput.printAlways(words.toString()); - - return words; - - - - } - - - - - - - - /** - * This methid extracts and processes the class label and alternative labels, and create inverted files - * @param cls - */ - private void createEntryInLexicalInvertedFiles4ClassLabels(OWLClass cls, int ident){ - - - Set cleanWords = extractCleanLabel4OWLCls(cls, ident); - Set stemmed_words=new HashSet(); - - - String[] words; - - String cleanAltLabel; - - String cleanReverseAltLabel; - - String stemmedWord; - - - - //From label - //we also add cases one word in case they should be matched to combo - if (cleanWords.size()>0){ - if (!invertedFileExact.containsKey(cleanWords)) - invertedFileExact.put(new HashSet(cleanWords), new HashSet()); - - invertedFileExact.get(cleanWords).add(ident); - - } - - //lala - - for (String str : cleanWords){ - - stemmedWord = lexicalUtilities.getStemming4Word(str); - if (!stemmedWord.isEmpty()){ - stemmed_words.add(stemmedWord); - } - //if (lexicalUtilities.getStemming4Word(str).equals("")){ - // LogOutput.print(str + "-> stemming: '" + lexicalUtilities.getStemming4Word(str) +"'"); - //} - - } - - if (!invertedFileWeakLabelsStemming.containsKey(stemmed_words)) - invertedFileWeakLabelsStemming.put(new HashSet(stemmed_words), new HashSet()); - - invertedFileWeakLabelsStemming.get(stemmed_words).add(ident); - - //We add to internal structure - //identifier2stemmedlabel.put(ident, new ArrayList(stemmed_words)); - identifier2stemmedlabels.put(ident, new HashSet>()); - identifier2stemmedlabels.get(ident).add(new ArrayList(stemmed_words)); - - stemmed_words.clear(); - cleanWords.clear(); - - String stemmedAltLabel; - - Set temp; - - //ALTERNATE LABELS - for (String altlabel_value : extractAlternateLabels4OWLCls(cls, ident)){ - - //TODO Lower case altlabel_value?? And not to lower case in annotation extraction?? - //TODO REvise this with time... - - - cleanAltLabel = ""; - cleanReverseAltLabel = ""; - stemmedAltLabel = ""; - - if (altlabel_value.length()>2){ - - words=altlabel_value.split("_"); //Already pre-processed to be '_' - - for (int i=0; i0){ //words[i].length()>2 && Not for exact if: it may contain important numbers - - cleanWords.add(words[i]); - - if (cleanAltLabel.length()==0){ - cleanAltLabel = words[i]; - cleanReverseAltLabel = words[i]; - } - else { - cleanAltLabel+= "_" + words[i]; - cleanReverseAltLabel = words[i] + "_" + cleanReverseAltLabel; - } - - stemmedWord = lexicalUtilities.getStemming4Word(words[i]); - if (stemmedWord.isEmpty()) - continue; - - stemmedAltLabel += "_" + stemmedWord; - /* - if (frequency4words.containsKey(words[i])) - frequency4words.put(words[i], 1); - else - frequency4words.put(words[i], frequency4words.get(words[i]) + 1); - */ - - index.addWordOccurrence(stemmedWord, ident); - - } - }//end words - - if (cleanWords.size()>0){ - if (!invertedFileExact.containsKey(cleanWords)) - invertedFileExact.put(new HashSet(cleanWords), new HashSet()); - - invertedFileExact.get(cleanWords).add(ident); - - - - //We add to altrnative labels - index.addAlternativeClassLabel(ident, cleanAltLabel); - if (Parameters.reverse_labels){ //isub score slightly changes if labels are reversed - index.addAlternativeClassLabel(ident, cleanReverseAltLabel); - } - if (!stemmedAltLabel.isEmpty()){ - //System.out.println(stemmedAltLabel); - index.addStemmedAltClassLabel(ident, (stemmedAltLabel = stemmedAltLabel.substring(1))); - } - } - - - //STEMMING - for (String str : cleanWords){ - - stemmedWord = lexicalUtilities.getStemming4Word(str); - if (!stemmedWord.isEmpty()){ - stemmed_words.add(stemmedWord); - } - //if (lexicalUtilities.getStemming4Word(str).equals("")){ - // LogOutput.print(str + "-> stemming: '" + lexicalUtilities.getStemming4Word(str) + "'" + stemmedWord.isEmpty()); - //} - - } - - if (!invertedFileWeakLabelsStemming.containsKey(stemmed_words)) - invertedFileWeakLabelsStemming.put(new HashSet(stemmed_words), new HashSet()); - - invertedFileWeakLabelsStemming.get(stemmed_words).add(ident); - - //We add stemmin also for weak - if (use_all_labels_for_weak_mappings) - identifier2stemmedlabels.get(ident).add(new ArrayList(stemmed_words)); - - - stemmed_words.clear(); - cleanWords.clear(); - } - - }//Alt labels - - - - - } - - - - - private boolean isDeprecatedClass(OWLClass cls){ - - //if (obsolete_classes.contains(cls)) - // return true; - - for (OWLAnnotationAssertionAxiom annAx : cls.getAnnotationAssertionAxioms(onto)){ - - if (annAx.getAnnotation().getProperty().getIRI().toString().equals(deprecated_uri)){ - - String ann_label=((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral().toLowerCase(); - - if (ann_label!=null && ann_label.equals("true")){ - //obsolete_classes.add(cls); - return true; - } - } - } - return false; - } - - - /** - * Do not consider class names if they are identifiers - * @return - */ - private boolean isLabelAnIdentifier(String label_value){ - - return label_value.matches(".+[0-9][0-9][0-9]+") - || label_value.matches("[0-9][0-9][0-9][0-9][0-9]+-[0-9]+") //library ontologies - //|| label_value.matches("[0-9]+\\.[0-9]+(\\.[0-9]+)+");//library ontologies - || label_value.matches("[0-9]+(\\.[0-9]+)+") - || label_value.matches(".+[0-9]+.+[0-9]+.+[0-9]+.+") //instance matching ontologies - || label_value.matches("[a-zA-Z][0-9]+"); //PROCES MODEL MATCHING; - - } - - - /** - * Creates entry in exact occurrences map and adds label to class index - * @param cls - * @param ident - * @return - */ - private Set extractCleanLabel4OWLCls(OWLClass cls, int ident){ - - String label_value=""; - - String entry4ifexact; - Set cleanWords=new HashSet(); - - String[] words; - - int ambiguity_ident=1; - - //System.out.println(cls); - //System.out.println(cls.getIRI().toString()); - - String ann_label; - - //Check if concept name is meaningful (not an ID) - label_value = index.getIdentifier2ClassIndexMap().get(ident).getEntityName(); - //if (label_value.matches(".+[0-9][0-9][0-9]+")){ - - if (isLabelAnIdentifier(label_value)){ - - //Otherwise We look for first non empty label (if no label we keepID) - //--------------------------------------------------------------------- - for (OWLAnnotationAssertionAxiom annAx : cls.getAnnotationAssertionAxioms(onto)){ - - //listchanges.add(new RemoveAxiom(onto, annAx)); //We remove all annotations - - if (annAx.getAnnotation().getProperty().getIRI().toString().equals(rdf_label_uri)){ - - //LogOutput.print(((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral()); - ann_label=((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral();//.toLowerCase(); - - if (ann_label!=null && !ann_label.equals("") && !ann_label.equals("null")){ - label_value=ann_label; - } - - //LogOutput.print("Label: " + label_value); - break; - - } - - } - - } - - - - - //If it doesn't exist then we use entity name - //if (label_value.equals("")){ - // label_value=index.getIdentifier2ClassIndexMap().get(ident).getEntityName(); - //} - - - //System.out.println(label_value); - - label_value=label_value.replace(",", ""); - - - if (label_value.startsWith("_")){ - label_value = label_value.substring(1, label_value.length()); - } - if (label_value.endsWith("_")){ - label_value = label_value.substring(0, label_value.length()-1); - } - - - if (label_value.indexOf("_")>0){ //NCI and SNOMED - words=label_value.split("_"); - } - else if (label_value.indexOf(" ")>0){ //FMA - words=label_value.split(" "); - } - //Split capitals... - else{ - //label_value = Utilities.capitalPrepositions(label_value); - words=Utilities.splitStringByCapitalLetter(label_value); - } - //else { - // words=new String[1]; - // words[0]=label_value; - //} - - //To lowercase - - - - - //shift=1; - - label_value=""; - entry4ifexact=""; - for (int i=0; i0){ - - //For IF - entry4ifexact+=words[i]; - - //For label - label_value+=words[i] + "_"; - - if (!lexicalUtilities.getStopwordsSet().contains(words[i])){ - //words[i].length()>2 && Not for exact IF: it may contain important numbers - cleanWords.add(words[i]); - } - } - } - - - //Check length!! or if it contains "_" - if (label_value.length()>0){ - - label_value = label_value.substring(0, label_value.length()-1); - - //Add to class index - index.setClassLabel(ident, label_value); - } - else{ - //we add the whole IRI - index.setClassLabel(ident, cls.getIRI().toString()); - } - - //System.out.println(cls.getIRI()); - //System.out.println(label_value); - //System.out.println(cleanWords); - - return cleanWords; - - //Add to IF: not used any more - /*if (entry4ifexact.length()>2){//Min 3 characteres - - //Ambiguity in labels of ontology (use concept name) - if (extact_occurrence_entries.containsKey(entry4ifexact)){ - - ambiguity_ident=extact_occurrence_entries.get(entry4ifexact); - //We remove previous one - extact_occurrence_entries.remove(entry4ifexact); - - //We create two news - extact_occurrence_entries.put(getProcessedName4ConceptIndex(ambiguity_ident), ambiguity_ident); - extact_occurrence_entries.put(getProcessedName4ConceptIndex(ident), ident); - - - - } - else{ - extact_occurrence_entries.put(entry4ifexact, ident); - } - }*/ - - - - } - - - - - - - - private Set labels_set = new HashSet(); - - private void considerLabel(String label_value){ - - labels_set.addAll(extendAlternativeLabel(label_value)); - - //Expand with UMLS Lex Spelling variants - if (lexicalUtilities.hasSpellingVariants(label_value)){ - //if (spelling_variants_map.containsKey(label_value)){ - for (String variant : lexicalUtilities.getSpellingVariants(label_value)){ - //for (String variant : spelling_variants_map.get(label_value)){ - labels_set.addAll(extendAlternativeLabel(variant)); - } - } - } - - - - - - /** - * Return alternate labels - * They could be represented using different annotation properties - * @param cls - * @return - */ - private Set extractAlternateLabels4OWLCls(OWLClass cls, int ident){ - - - String label_value=""; - OWLAnonymousIndividual geneid_value; - - OWLNamedIndividual namedIndiv=null; - IRI namedIndivIRI; - - - //REINIT for each label - labels_set.clear(); - - - //Use concept name as well!! Some times it is different to label - //Avoid identifiers as concept names - label_value = index.getIdentifier2ClassIndexMap().get(ident).getEntityName().toLowerCase(); - - //if (!label_value.matches(".+[0-9][0-9][0-9]+")){ - if (!isLabelAnIdentifier(label_value)){ - - //And extend with variants - considerLabel(label_value); - - //LogOutput.print("name2Label: " + labels_set); - - } - - - - //LogOutput.print("GENIEID"); - - for (OWLAnnotationAssertionAxiom clsAnnAx : cls.getAnnotationAssertionAxioms(onto)){ - - //listchanges.add(new RemoveAxiom(onto, clsAnnAx)); //We remove all annotations - - //label_value = annotationExtractor.getAnntotationString(clsAnnAx); - - //LogOutput.printError(clsAnnAx.toString()); - - - //TODO Perform translation if necessary - for (String l_value : annotationExtractor.getAnntotationString(clsAnnAx, onto, index.getFactory())){ - - if (Parameters.allow_multilingual){ - alternative_labels_tmp.addAll(translateLabel(clsAnnAx, l_value)); - } - else{ - alternative_labels_tmp.add(l_value); - } - - } - - //Cleaning and indexing - for (String l_value : alternative_labels_tmp){ - - //LogOutput.print("\t " + l_value); - - if (l_value.length()>2){ - considerLabel(l_value); - } - } - alternative_labels_tmp.clear(); - - }//end class ann axioms - - //LogOutput.print("\t" + labels_set.size()); - num_syn=num_syn+labels_set.size(); - - return labels_set; - - - - } - - - //int num_labels=0; - - - - - - - - /** - * Process given label (synonym) and extendes with wordnet synonyms - * @param label_value - */ - private Set extendAlternativeLabel(String label_value){ - - Set set_syn = new HashSet(); - - List> wordi2syn = new ArrayList>(); - - String[] words; - int shift=1; - - String roman; - - //Replace "/" by _ - label_value=label_value.replaceAll("/", "_"); - - if (label_value.indexOf(" ")>0){ //Synonyms - words=label_value.split(" "); - } - else if (label_value.indexOf("_")>0){ //just in case - words=label_value.split("_"); - } - //Split capitals... - else{ - words=Utilities.splitStringByCapitalLetter(label_value); //quite unlikely for alt labels - } - //else { - // words=new String[1]; - // words[0]=label_value; - //} - - - shift=1; - - for (int i=0; i(set_syn)); - set_syn.clear(); - } - - - long comb=1; - - //Too many combinations.... (max=50) - for (Set set : wordi2syn){ - comb=comb*set.size(); - } - - //LogOutput.print(comb); - - String label; - if (comb>50 || comb<0){ - - toohigh_synset_cases++; - - label=""; - for (int i=0; i combineWordSynonyms(List> wordi2syn, Set currentSet, int index){ - - Set newSet = new HashSet(); - - for (String clabel: currentSet){ - - for (String syn: wordi2syn.get(index)){ - - newSet.add(clabel+ "_"+syn); - //LogOutput.print(clabel+ "_"+syn); - - } - } - - if (wordi2syn.size()<=index+1){ - return newSet; - } - else{ - return combineWordSynonyms(wordi2syn, newSet, index+1); - } - - - } - - - - /** - * Entries not matched in IF for stemmed labels - * @param entries - */ - public void addEntries2InvertedFileWeakLabels(Map, Set> entries){ - - invertedFileWeakLabels.putAll(entries); - - - } - - - public void setInvertedFileWeakLabels(){ - - //List list_words; - - //TODO: Default values - int max_size_labels=8; - int max_size_list_words_missing=3; - - - //for (int ident : identifier2stemmedlabel.keySet()){ - for (int ident : identifier2stemmedlabels.keySet()){ - - //list_words = identifier2stemmedlabel.get(ident); - for (List list_words : identifier2stemmedlabels.get(ident)){ - - if (list_words.size()>max_size_labels) - continue; - - if (list_words.size()>1){ //Smaller case 1 out of 2 - - createWeakLabels4Identifier(list_words, ident, 1);// 1 missing word - - if (list_words.size()>3 && max_size_list_words_missing>1){ //Smaller case 2 out of 4 - - createWeakLabels4Identifier(list_words, ident, 2); - - if (list_words.size()>5 && max_size_list_words_missing>2){ //Smaller case 3 out of 6 - - createWeakLabels4Identifier(list_words, ident, 3); - - if (list_words.size()>7 && max_size_list_words_missing>3){ //Smaller case 4 out of 8 - - createWeakLabels4Identifier(list_words, ident, 4); - } - } - } - } - } - } - } - - - /** - * Considers all labels from IF stemmed - * @deprecated review... something is wrong... - */ - public void setFullInvertedFileWeakLabels(){ - - List list_words = new ArrayList(); - Set identifiers; - - - //TODO: Default values - int max_size_labels=8; - int max_size_list_words_missing=3; - - - for (Set stemmed_set : invertedFileWeakLabelsStemming.keySet()){ - - if (stemmed_set.size()>max_size_labels) - continue; - - list_words.addAll(stemmed_set); - - identifiers=invertedFileWeakLabelsStemming.get(stemmed_set); - - if (list_words.size()>1){ //Smaller case 1 out of 2 - - createWeakLabels4Identifier(list_words, identifiers, 1);// 1 missing word - - if (list_words.size()>3 && max_size_list_words_missing>1){ //Smaller case 2 out of 4 - - createWeakLabels4Identifier(list_words, identifiers, 2); - - if (list_words.size()>5 && max_size_list_words_missing>2){ //Smaller case 3 out of 6 - - createWeakLabels4Identifier(list_words, identifiers, 3); - - if (list_words.size()>7 && max_size_list_words_missing>3){ //Smaller case 4 out of 8 - - createWeakLabels4Identifier(list_words, identifiers, 4); - } - } - } - } - list_words.clear(); - } - } - - - - /** - * Combines the words in given list with 'x' missing words and stores the results in IF - * - * @param cleanWords Clean label of concept - * @param ident Identifier of concepts - * @param missing_words Number of words to be discarded - */ - private void createWeakLabels4Identifier(List cleanWords, int ident, int missing_words){ - - Set combo = new HashSet(); - - //Fills identifierCombination - - //Set> combination_set = getIdentifierCombination(cleanWords.size(), missing_words); - Set> combination_set = precomputeIndexCombination.getIdentifierCombination(cleanWords.size(), missing_words); - - for(Set toExclude : combination_set){ - - for (int pos=0; pos(combo), new HashSet()); - - invertedFileWeakLabels.get(combo).add(ident); - - combo.clear(); - - } - - - } - - - /** - * Combines the words in given list with 'x' missing words and stores the results in IF - * - * @param cleanWords Clean label of concept - * @param ident Identifier of concepts - * @param missing_words Number of words to be discarded - */ - private void createWeakLabels4Identifier(List cleanWords, Set identifiers, int missing_words){ - - Set combo = new HashSet(); - - //Fills identifierCombination - - //Set> combination_set = getIdentifierCombination(cleanWords.size(), missing_words); - Set> combination_set = precomputeIndexCombination.getIdentifierCombination(cleanWords.size(), missing_words); - - for(Set toExclude : combination_set){ - - for (int pos=0; pos(combo), new HashSet()); - - invertedFileWeakLabels.get(combo).addAll(identifiers); - - combo.clear(); - - } - - - } - - - - - public int getIdentifier4ConceptName(String name){ - if (className2Identifier.containsKey(name)) - return className2Identifier.get(name); - else - return -1; - - } - - - public int getIdentifier4ObjectPropName(String name){ - if (objectPropName2Identifier.containsKey(name)) - return objectPropName2Identifier.get(name); - else - return -1; - } - - public int getIdentifier4DataPropName(String name){ - if (dataPropName2Identifier.containsKey(name)) - return dataPropName2Identifier.get(name); - else - return -1; - } - - public int getIdentifier4InstanceName(String name){ - if (individualName2Identifier.containsKey(name)) - return individualName2Identifier.get(name); - else - return -1; - } - - - - public Map, Set> getInvertedFileExactMatching(){ - return invertedFileExact; - } - - public Map, Integer> getInvertedFileExactMatching4DataProp(){ - return invertedFileExactDataProp; - } - - public Map, Integer> getInvertedFileExactMatching4ObjProp(){ - return invertedFileExactObjProp; - } - - - public Map, Set> getInvertedFileMatching4Individuals(){ - return invertedFileIndividuals; - } - - public Map> getInvertedFileRoleAssertions(){ - return invertedFileRoleassertions; - } - - //Weak IF - public Map> getInvertedFileWeakMatching4Individuals(){ - return invertedFileWeakIndividuals; - } - - - public Map, Set> getInvertedFileWeakLabelsStemming(){ - return invertedFileWeakLabelsStemming; - } - - public Map, Set> getInvertedFileWeakLabels(){ - return invertedFileWeakLabels; - } - - - - /** - * Extract taxonomies - */ - public void setTaxonomicData() { - - //TODO - //Only SNOMED has been pre-classified with Condor - //Note that in the classification we just have information about the hierarchy - /*if (isOntoPreclassified){ - init=Calendar.getInstance().getTimeInMillis(); - unloadOntology(); - loadOWLOntology(physical_iri_class); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time unloading Ontology and loading pre-classified ontology (s): " + (float)((double)fin-(double)init)/1000.0); - }*/ - - - //init=Calendar.getInstance().getTimeInMillis(); - if (Parameters.reasoner.equals(Parameters.hermit)){ - setUpReasoner_HermiT(); - } - //else if (Parameters.reasoner.equals(Parameters.more)){ //MORe - // setUpReasoner_MORe(); - // - else if (Parameters.reasoner.equals(Parameters.elk)){ //eld - setUpReasoner_ELK(); - } - else{ - setUpStructuralReasoner(); - } - - //fin = Calendar.getInstance().getTimeInMillis(); - //LogOutput.print("Time classifying ontology (s): " + (float)((double)fin-(double)init)/1000.0); - - extractDangerousClasses(); - - //init=Calendar.getInstance().getTimeInMillis(); - extractStringTaxonomiesAndDisjointness(); - //fin = Calendar.getInstance().getTimeInMillis(); - //LogOutput.print("Time Extracting Taxonomy (s): " + (float)((double)fin-(double)init)/1000.0); - - init = Calendar.getInstance().getTimeInMillis(); - extractGeneralHornAxioms(); //A^...^B->C - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Extracting General Axioms: " + (float)((double)fin-(double)init)/1000.0); - - - - //Extract - if (Parameters.perform_instance_matching){ - //We need the inferred types - extractInferredTypes4Individuals(); - - } - - } - - - - /** - * Structurla resoner - */ - private void setUpStructuralReasoner(){ - - try { - reasoner = getIncompleteReasoner(); - } - catch(Exception e){ - System.err.println("Error setting up Structural reasoner: " + e.getMessage()); - e.printStackTrace(); - } - } - - - - /* - * MORe or Structural reasoner - private void setUpReasoner_MORe() { - - MOReAccess moreAccess=null; - - //Try first with Hermit if classifies in more than x seconds or error then structural - - try { - - - moreAccess = new MOReAccess( - SynchronizedOWLManager.createOWLOntologyManager(), - onto, false); //with factory i got problems - - - //Timeout is not properly handled with MORe - //moreAccess.classifyOntology_withTimeout_throws_Exception(17); - //We then do the timeout internally in MORe only over HermiT (or the OWL 2 reasoner) - //MORe access invokes a version or MORe with timeout - //moreAccess.classifyOntology(false); //no props - moreAccess.classifyOntology_withTimeout_throws_Exception(Parameters.timeout); //in case of error or timeout - - - if (moreAccess.isOntologyClassified()){ - reasoner = moreAccess.getReasoner(); - } - else { - LogOutput.print("Onto not classified with MORe. Using 'structural' reasoner instead."); - reasoner = getIncompleteReasoner(); - } - - if (reasoner==null){ - LogOutput.print("Reasoner was null. Using 'structural' reasoner instead."); - reasoner = getIncompleteReasoner(); - } - - - } - catch(Exception e){ - - try { - LogOutput.print("Error/timeout setting up MORe reasoner. Using 'structural' reasoner instead.");//\n\n" + e.getMessage() + "\n"); - - reasoner = getIncompleteReasoner(); - } - catch(Exception e2){ - System.err.println("Error setting up Structural reasoner: " + e2.getMessage()); - e2.printStackTrace(); - } - - } - - //if (reasoner.getReasonerName()!=null){ - //LogOutput.print("Reasoner name: " + reasoner.isConsistent() + ".\n"); - //LogOutput.print("Reasoner name: " + reasoner + ".\n"); - //LogOutput.print("Reasoner name: " + reasoner.getReasonerName() + ".\n"); - //} - }*/ - - - - /** - * HermiT or Structural reasoner - */ - private void setUpReasoner_HermiT() { - - HermiTAccess hermitAccess; - - //Try first with Hermit if classifies in more than x seconds or error then ELK - - try { - - if (Parameters.reason_datatypes || onto.getDatatypesInSignature(true).size()==0){ - //if (true){ - //hermitAccess = new HermiTReasonerAccess(onto, false); - hermitAccess = new HermiTAccess( - SynchronizedOWLManager.createOWLOntologyManager(), - onto, false); //with factory i got problems - - hermitAccess.classifyOntology_withTimeout_throws_Exception(Parameters.timeout); //in case of error or timeout - - if (hermitAccess.isOntologyClassified()){ - reasoner = hermitAccess.getReasoner(); - } - else { - LogOutput.print("Onto not classified with HermT. Using 'ELK' reasoner instead."); - setUpReasoner_ELK(); - } - } - else { //With OMT client gives an error :-( - LogOutput.print("Ontology with datatypes. Using 'ELK' reasoner instead."); - setUpReasoner_ELK(); - } - - if (reasoner==null){ - LogOutput.print("Reasoner was null. Using 'ELK' reasoner instead."); - setUpReasoner_ELK(); - } - - - } - catch(Exception e){ - - try { - LogOutput.print("Error/timeout setting up HermiT reasoner. Using 'structural' reasoner instead.");//\n\n" + e.getMessage() + "\n"); - //e.printStackTrace(); - setUpReasoner_ELK(); - } - catch(Exception e2){ - System.err.println("Error setting up Structural reasoner: " + e2.getMessage()); - } - - } - - //if (reasoner.getReasonerName()!=null){ - //LogOutput.print("Reasoner name: " + reasoner.isConsistent() + ".\n"); - //LogOutput.print("Reasoner name: " + reasoner + ".\n"); - //LogOutput.print("Reasoner name: " + reasoner.getReasonerName() + ".\n"); - //} - } - - - - /** - * ELK or Structural reasoner - */ - private void setUpReasoner_ELK() { - - CheckOWL2Profile profileChecker = new CheckOWL2Profile(); - - //We identified some logical errors when using ELK, it seems the classification that provides is less complete than the structural reasoner - //when the ontology is not EL!!! - if (!profileChecker.isInOWL2ELProfile(onto)){ - LogOutput.printAlways(onto.getOntologyID().getOntologyIRI() + " NOT in OWL 2 EL profile. Using structural reasoner."); - setUpStructuralReasoner(); - return; - } - - LogOutput.printAlways(onto.getOntologyID().getOntologyIRI() + " in OWL 2 EL profile. Using ELK reasoner."); - - ELKAccess elkAccess; - - //Try first with ELK if classifies in more than x seconds or error then structural - - - - try { - - elkAccess = new ELKAccess( - SynchronizedOWLManager.createOWLOntologyManager(), - onto, false); //with factory i got problems - - elkAccess.classifyOntologyNoProperties(); - - if (elkAccess.isOntologyClassified()){ - reasoner = elkAccess.getReasoner(); - } - else { - LogOutput.print("Onto not classified with ELK. Using 'structural' reasoner instead."); - //reasoner = new StructuralReasonerExtended(onto); - reasoner = getIncompleteReasoner(); - } - - if (reasoner==null){ - LogOutput.print("Reasoner was null. Using 'structural' reasoner instead."); - //reasoner = new StructuralReasonerExtended(onto); - reasoner = getIncompleteReasoner(); - } - - - } - catch(Exception e){ - - try { - LogOutput.print("Error/timeout setting up ELK reasoner. Using 'structural' reasoner instead.");//\n\n" + e.getMessage() + "\n"); - //reasoner = new StructuralReasonerExtended(onto); - reasoner = getIncompleteReasoner(); - } - catch(Exception e2){ - System.err.println("Error setting up Structural reasoner: " + e2.getMessage()); - } - - } - - //if (reasoner.getReasonerName()!=null){ - //LogOutput.print("Reasoner name: " + reasoner.isConsistent() + ".\n"); - //LogOutput.print("Reasoner name: " + reasoner + ".\n"); - //LogOutput.print("Reasoner name: " + reasoner.getReasonerName() + ".\n"); - //} - } - - - private OWLReasoner getIncompleteReasoner() throws Exception{ - return new StructuralReasonerExtended(onto); - /*ELKAccess elk = new ELKAccess( - SynchronizedOWLManager.createOWLOntologyManager(), - onto, false); - return elk.getReasoner();*/ - } - - - - /** - * Dangerous class such that the ones equivalent to Top - */ - private void extractDangerousClasses(){ - - for (OWLClass cls : reasoner.getTopClassNode().getEntitiesMinusTop()){ - //System.out.println(cls.toString()); - dangerousClasses.add(class2identifier.get(cls)); - index.addDangerousClasses(class2identifier.get(cls)); - } - - for (int ide : dangerousClasses){ - LogOutput.print("DANGEROUS CLASS == TOP: "+ index.getName4ConceptIndex(ide)); - } - } - - public Set getDangerousClasses(){ - return dangerousClasses; - } - - - - /** - * Create taxonomy (for interval labeling), and disjointness and equivalence (for internal control) - * @throws Exception - */ - private void extractStringTaxonomiesAndDisjointness() { - - - //onto. - - int bignode=0; - - int equiv=0; - int disj=0; - - //For all nodes - Map,Integer> node2identifier = new HashMap,Integer>(); - - int identRepresentative; - int ident1; - int ident2; - //String identRepresentativeStr; - OWLClass clsRepresentative; - - - - //TOP CONCEPTS - NodeSet topClasses = reasoner.getSubClasses(reasoner.getTopClassNode().getRepresentativeElement(), true); - //Real root nodes - //RootIdentifiers.clear(); - for (OWLClass cls : topClasses.getFlattened()){ - if (class2identifier.containsKey(cls)){ - //RootIdentifiers.add(class2identifier.get(cls)); - index.addRoot2Structure(class2identifier.get(cls)); - } - } - - - //All Subclasses - NodeSet nodeSet = reasoner.getSubClasses(reasoner.getTopClassNode().getRepresentativeElement(), false); - - - - //LogOutput.print(reasoner.getTopClassNode().getRepresentativeElement() + " " + nodeSet.getNodes().size()); - - - //We first check node size - for (Node node : nodeSet){ - - if (node.isBottomNode() || node.isTopNode()) - continue; - - clsRepresentative=node.getRepresentativeElement(); - - //Important to avoid non-class nodes like "DIRECTED-BINARY-RELATION" - if (!class2identifier.containsKey(clsRepresentative)){ - //LogOutput.print("NO: " + clsRepresentative); - continue; - } - - identRepresentative=class2identifier.get(clsRepresentative); - //WE WANT TO GUARANTEE THAT REPRESENTATIVE IS ALWAYS THE SAME - node2identifier.put(node,identRepresentative); - - //Only for 'big' nodes - if (node.getEntities().size()>1){ - bignode++; - //representativeNodes.add(identRepresentative); - index.addRepresentativeNode(identRepresentative); - } - } - - - - - //TODO Meaningful roots and level are candidates to be deprecated - //MEANINGFUL ROOTS: to avoid cases like SNOMED where there is an unique root apart from THING - //This method should be used only for big ontologies!! - //extractMeaningfulRoots(); - //LogOutput.print("Number of roots: " + MeaningfulRootIdentifiers.size()); - - - //HIERARCHY LEVELS FOR ENTITIES - //extractHierarchyLevel(reasoner.getSubClasses(reasoner.getTopClassNode().getRepresentativeElement(), true), 1); - - - for (Node node : nodeSet){ - - if (node.isBottomNode() || node.isTopNode()) - continue; - - if (!node2identifier.containsKey(node)) - continue; - - - - - identRepresentative = node2identifier.get(node); - //clsRepresentative = identifier2class.get(identRepresentative); - clsRepresentative = node.getRepresentativeElement(); - - - //Add root to class index (only representative?) Deprecated - //index.getClassIndex(identRepresentative).setRoots(getMeaningfulRootsForIdentifier(identRepresentative)); - - - - - //SUBCLASSES: TAXONOMY - if (!reasoner.getSubClasses(clsRepresentative, true).isEmpty()){ - - //identifier2directkids.put(identRepresentative, new HashSet()); - //Only representatives?? - index.getClassIndex(identRepresentative).setEmptyDirectSubClasses(); - - for (Node nodeSub : reasoner.getSubClasses(clsRepresentative, true).getNodes()){ - if (nodeSub.isBottomNode() || nodeSub.isTopNode()) - continue; - - //Required if filtered obsolete classes - if (!node2identifier.containsKey(nodeSub)) - continue; - - //identifier2directkids.get(identRepresentative).add(node2identifier.get(nodeSub));//will give us direct kid identifiers - //System.err.println(nodeSub); - index.getClassIndex(identRepresentative).addDirectSubClass(node2identifier.get(nodeSub)); - - - } - } - - - //SUPERCLASSES: REVERSE TAXONOMY - if (!reasoner.getSuperClasses(clsRepresentative, true).isEmpty()){ - - //identifier2directparents.put(identRepresentative, new HashSet()); - index.getClassIndex(identRepresentative).setEmptyDirectSuperClasses(); - - for (Node nodeSup : reasoner.getSuperClasses(clsRepresentative, true).getNodes()){ - if (nodeSup.isTopNode() || nodeSup.isBottomNode()) - continue; - - //identifier2directparents.get(identRepresentative).add(node2identifier.get(nodeSup)); //direct parents - //System.out.println(identRepresentative + " " + nodeSup + " " + node2identifier.get(nodeSup)); - index.getClassIndex(identRepresentative).addDirectSuperClass(node2identifier.get(nodeSup)); - - - } - } - - - //WE STORE DISJ AND EQUIVALENCES FOR ALL NODE ENTITIES - - //DISJOINTNESS - for (OWLClass nodeClass : node.getEntities()){ //for all node classes - - //Avoid top or nothing - if (nodeClass.isTopEntity() || nodeClass.isBottomEntity()) - continue; - - //We check for each class. differnt disjoint axioms may affect different classes of same node - //The reasoner has been adapted to extract only explicit disjointness - //since implicit (all) disjointness is time conuming - if (!reasoner.getDisjointClasses(nodeClass).isEmpty()){ - - ident1=class2identifier.get(nodeClass); - - index.getClassIndex(ident1).setEmptyDisjointClasses(); - disj++; - - //LogOutput.print(nodeClass); - //LogOutput.print("\t" + reasoner.getDisjointClasses(nodeClass).getNodes()); - - for (Node nodeDisj : reasoner.getDisjointClasses(nodeClass).getNodes()){ - - for (OWLClass disjcls : nodeDisj.getEntities()){ //We add all - - //Avoid top or nothing - if (disjcls.isTopEntity() || disjcls.isBottomEntity()) - continue; - - //TODO To avoid classes being disjoint with themselves - if (ident1!=class2identifier.get(disjcls)){ - index.getClassIndex(ident1).addDisjointClass(class2identifier.get(disjcls)); - //Add both sides?? - //TODO: //Not sure if neccessary - index.getClassIndex(class2identifier.get(disjcls)).addDisjointClass(ident1); - } - } - } - } - } - - //EQUIVELNCE - if (node.getEntities().size()>1){ - OWLClass[] nodeClasses= new OWLClass[node.getEntities().size()]; - nodeClasses = node.getEntities().toArray(nodeClasses); - //LogOutput.print(nodeClasses[0]); - - for (int i=0; i C - * from subclassof or equivalence axioms - */ - - Set ausxSetOfClasses = new HashSet(); - - private void extractGeneralHornAxioms(){ - - int idecls; - - //for (OWLClass cls: onto.getClassesInSignature()){ - for (OWLClass cls: class2identifier.keySet()){ - //LogOutput.print(cls.getIRI().toString()); - - idecls=class2identifier.get(cls); - - for (OWLEquivalentClassesAxiom ax: onto.getEquivalentClassesAxioms(cls)){ - - for (OWLClassExpression exp_equiv : ax.getClassExpressions()){ - - addOWLClassExpresion2GeneralHornAxiom(idecls, exp_equiv); - - }//For expressions - - }//For equiv axioms - - for (OWLSubClassOfAxiom ax: onto.getSubClassAxiomsForSuperClass(cls)){ - - addOWLClassExpresion2GeneralHornAxiom(idecls, ax.getSubClass()); - - }//For subclass axioms - - }//For classes - - - LogOutput.print("->General HORN Axioms: " + index.getGeneralHornAxiom().size()); - - /*int i=0; - String horn=""; - for (Set body : generalHornAxioms.keySet()){ - i++; - - - for (int b : body){ - horn+=index.getClassIndex(b).getLabel() + " ^ "; - } - - horn+=" -> " + index.getClassIndex(generalHornAxioms.get(body)).getLabel(); - - LogOutput.print(body + "->" + generalHornAxioms.get(body)); - LogOutput.print(horn); - - horn=""; - - if (i>10){ - break; - } - - }*/ - - } - - - /** - * We extract inferred class types for the individuals - */ - private void extractInferredTypes4Individuals(){ - - for (int identIndiv : index.getIndividuaIdentifierSet()){ - - for (Node node_cls : reasoner.getTypes( - index.getOWLNamedIndividual4IndividualIndex(identIndiv), true)){ - - for (OWLClass cls : node_cls.getEntitiesMinusTop()){ - - index.addType4Individual(identIndiv, class2identifier.get(cls)); - - } - } - } - } - - - - - - /** - * Checks if the expresion is valid for general HORN axioms - */ - private void addOWLClassExpresion2GeneralHornAxiom(int idecls, OWLClassExpression exp){ - - - ausxSetOfClasses.clear(); - - //if (exp.isClassExpressionLiteral()){ - // return; - //} - if (exp instanceof OWLObjectIntersectionOf){ - - for (OWLClassExpression exp_intersect : ((OWLObjectIntersectionOf) exp).getOperands()){ - - //if (exp_intersect.isClassExpressionLiteral()){ //A and notA are considered class expression literals - if (!exp_intersect.isAnonymous()){ - ausxSetOfClasses.add(class2identifier.get(exp_intersect.asOWLClass())); - } - else{ - ausxSetOfClasses.clear(); - return;//do nothing - } - - } - - } - else{ - return; //do nothing - } - - if (ausxSetOfClasses.size()>1){ //At least Two in the intersection - //class2identifier - - //if (!generalHornAxioms.containsKey(ausxSetOfClasses)){ - // generalHornAxioms.put(new HashSet(ausxSetOfClasses), idecls); - //} - index.addGeneralHornAxiom2Structure(ausxSetOfClasses, idecls); - } - - } - - - /* - * Set with representative for equivalence nodes - * Will be required after interval labelling indexing - * @return - - public Set getRepresentativeNodes(){ - return representativeNodes; - }*/ - - - /* - * Important for the cleaning process - * @return - * - public Set getRootNodes(){ - return RootIdentifiers; - }*/ - - - - - - - /*private Set getMeaningfulRootsForIdentifier(int ident){ - - Set set = new HashSet(); - - for (int ideroot : MeaningfulRootIdentifiers){ - if (isSubClassOf(ident, ideroot)){ - set.add(ideroot); - } - } - - return set; - - }*/ - - - - - int minNumberOfRoots=0; - - /** - * @deprecated - */ - private void extractMeaningfulRoots(){ - - //TOP CONCEPTS - //(avoids possible top elements like in snomed) - //Create here roots and discard Top concepts! - //By name or by number? --> if == 1 then split - NodeSet topClasses = reasoner.getSubClasses(reasoner.getTopClassNode().getRepresentativeElement(), true); - - - //Real root nodes - TaxRootIdentifiers.clear(); - for (Node node : topClasses.getNodes()){ - if (class2identifier.containsKey(node.getRepresentativeElement())){ - TaxRootIdentifiers.add(class2identifier.get(node.getRepresentativeElement())); - } - } - - - - //Meaningful roots. Might be different to the real ones - if (onto.getClassesInSignature(true).size()<500) - minNumberOfRoots=4; - else - minNumberOfRoots=8; - - if (topClasses.getNodes().size()topClasses.getNodes().size()) - return; - } - - //Level 0 roots - MeaningfulRootIdentifiers.clear(); - for (Node node : topClasses.getNodes()){ - if (class2identifier.containsKey(node.getRepresentativeElement())){ - MeaningfulRootIdentifiers.add(class2identifier.get(node.getRepresentativeElement())); - } - } - - - - //LogOutput.print("Number of roots: " + RootIdentifiers.size()); - - - } - - /** - * @deprecated - */ - private Set extractMeaningfulRoots(NodeSet nodes, int level){ - - Set mroots=new HashSet(); - OWLClassNodeSet mrootsClass = new OWLClassNodeSet(); - - for (Node node : nodes.getNodes()){ - - for (Node topNode : reasoner.getSubClasses(node.getRepresentativeElement(), true)){ - mrootsClass.addNode(topNode); - if (class2identifier.containsKey(topNode.getRepresentativeElement())){ - mroots.add(class2identifier.get(topNode.getRepresentativeElement())); - } - } - } - if (mroots.size()>=minNumberOfRoots || level==3){ //we want to avoid infinite recursion - return mroots; - - } - else { - return extractMeaningfulRoots(mrootsClass, level+1); - } - - } - - - /** - * @deprecated - */ - private void extractHierarchyLevel(NodeSet classes, int level){ - - //TOP CONCEPTS - //NodeSet topClasses = reasoner.getSubClasses(reasoner.getTopClassNode().getRepresentativeElement(), true); - - int ident; - - for (Node node : classes.getNodes()){ - if (class2identifier.containsKey(node.getRepresentativeElement())){ - ident = class2identifier.get(node.getRepresentativeElement()); - //We add the deeper level - if (index.getClassIndex(ident).getHierarchyLevel() getMeaningfulRoots(){ - return MeaningfulRootIdentifiers; - } - - public Set getRaelRoots(){ - return TaxRootIdentifiers; - } - - - - public void clearFrequencyRelatedStructures(){ - singleWordInvertedIndex.clear(); - filteredInvertedIndex.clear(); - } - - - private Map> singleWordInvertedIndex = new HashMap>(); - - public Integer getFrequency(String word) - { - if (singleWordInvertedIndex.containsKey(word)) - return singleWordInvertedIndex.get(word).size(); - return 0; - } - - private Map, Set> filteredInvertedIndex = new HashMap, Set>(); - - public Map, Set> getFilteredInvertedIndex() - { - return filteredInvertedIndex; - } - - public void clearFilteredInvertedIndex() - { - filteredInvertedIndex.clear(); - } - - public void buildFilteredInvertedIndex(Set stopWords) - { - ClassIndex cls; - String [] words; - Set key, labels; - -/* - Set specialKey = new HashSet(); - specialKey.add("vas"); - specialKey.add("va"); - specialKey.add("def"); -*/ - - for (Integer id : className2Identifier.values()) - { - cls = index.getClassIndex(id); - labels = cls.getStemmedAltLabels(); - - if (labels == null) - { - Lib.debuginfo("A class named " + cls.getEntityName() + " has no labels!"); - continue; - } - - for (String lab : labels) - { - key = new HashSet(); - words = lab.split("_"); - for (String word : words) - if (!stopWords.contains(word)) - key.add(word); - - if (!filteredInvertedIndex.containsKey(key)) - { - filteredInvertedIndex.put(key, new HashSet()); - } - - filteredInvertedIndex.get(key).add(id); - } - } -/* - Set,Set>> temp = filteredInvertedIndex.entrySet(); - - LogOutput.print(filteredInvertedIndex.size() + " " + temp.size()); - - Entry, Set> key1 = null, key2; - for (Entry, Set> entry : temp) - { - Lib.logInfo("- " + entry.getKey().toString()); - if (entry.getKey().equals(specialKey)) - { - if (key1 == null) - LogOutput.print(key1 = entry); - else - { - LogOutput.print(key2 = entry); - LogOutput.print(key1.equals(key2) + " " + key1.hashCode() + " " + key2.hashCode()); - LogOutput.print(key1 + " "+ key2); - } - } - - } - - Lib.closeLog(); -*/ } - - public Set getSuperClass(int id, int TOTAL) - { - Set ret = new HashSet(); - Set superclasses; - Set visited = new HashSet(); - ClassIndex cls; - - Queue q = new LinkedList(); - q.add(index.getClassIndex(id)); - visited.add(id); - - while (!q.isEmpty() && ret.size() < TOTAL) - { - superclasses = q.remove().getDirectSuperclasses(); - //TODO: Yujiao - check the OWLClassExpression - - for (int i: superclasses) - if (!visited.contains(i)) - { - q.add(cls = index.getClassIndex(i)); - visited.add(i); - addStemmedAltLabels(ret, cls); - } - } - - return ret; - } - - private void addStemmedAltLabels(Set labels, ClassIndex cls) - { - Set newLabs = cls.getStemmedAltLabels(); - - if (newLabs == null) return ; - for (String lab : newLabs) - labels.add(lab); - } - - - - - - - /** - * Manages the extraction of categories from annotations and role assetions - * @author ernesto - * - */ - private class ExtractCategoriesForIndividual{ - - - //Set categories4individual = new HashSet(); - - ExtractCategoriesForIndividual(){ - - } - - - protected void extract(OWLNamedIndividual indiv, int ident){ - - //categories4individual.clear(); - - - String category_value; - - for (OWLAnnotationAssertionAxiom entityAnnAx : indiv.getAnnotationAssertionAxioms(onto)){ - - String uri_ann = entityAnnAx.getAnnotation().getProperty().getIRI().toString(); - - if (Parameters.accepted_property_URIs_for_instance_categories.contains(uri_ann)){ - - if (!(category_value=asDirectValue(entityAnnAx)).equals("")){ - //categories4individual.add(category_value); - index.addCategory4Individual(ident, category_value); - } - else if (!(category_value=asNamedIndividual(entityAnnAx)).equals("")){ - index.addCategory4Individual(ident, category_value); - - //Mappinsg obtained from doremuss datasets - //Cross terminologies - //if (category_value.equals("http://data.doremus.org/vocabulary/diabolo/genre/lied")) - // index.addCategory4Individual(ident, "http://data.doremus.org/vocabulary/iaml/genre/li"); - //Narrower-broader relationships - //if (category_value.equals("http://data.doremus.org/vocabulary/iaml/genre/opc")) - // index.addCategory4Individual(ident, "http://data.doremus.org/vocabulary/iaml/genre/op"); - } - - - } - - - } - - - for (String uri_for_categories : Parameters.accepted_property_URIs_for_instance_categories){ - - try{ - for (OWLLiteral assertion_value : indiv.getDataPropertyValues( - index.getFactory().getOWLDataProperty(IRI.create(uri_for_categories)), onto)){ - - - category_value = assertion_value.getLiteral().toLowerCase(); - if (category_value!=null && !category_value.equals("null") && !category_value.equals("")){ - index.addCategory4Individual(ident, category_value); - continue; - } - //categories4individual.add(assertion_value.getLiteral().toLowerCase()); - - - } - } - catch(Exception e){ - //do nothing - } - - try{ - for (OWLIndividual assertion_value_indiv : indiv.getObjectPropertyValues( - index.getFactory().getOWLObjectProperty(IRI.create(uri_for_categories)), onto)){ - - if (assertion_value_indiv.isNamed()){ - - category_value = assertion_value_indiv.asOWLNamedIndividual().getIRI().toString(); - if (category_value!=null && !category_value.equals("null") && !category_value.equals("")){ - index.addCategory4Individual(ident, category_value); - continue; - } - - //categories4individual.add(assertion_value_indiv.asOWLNamedIndividual().getIRI().toString()); - } - - } - } - catch(Exception e){ - //do nothing - } - - } - - - } - - - private String asDirectValue(OWLAnnotationAssertionAxiom entityAnnAx){ - try { - //LogOutput.print(((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral()); - - String label = ((OWLLiteral)entityAnnAx.getAnnotation().getValue()).getLiteral().toLowerCase(); - - //System.err.println(entityAnnAx + " " + label); - - if (label==null || label.equals("null") || label.equals("")){ - //System.err.println("NULL LABEL: " + entityAnnAx); - return ""; - } - - - return label; - - - } - catch (Exception e){ - //In case of error. Accessing an object in an expected way - return ""; - } - } - - - /** - * - * @param entityAnnAx - * @return - */ - private String asNamedIndividual(OWLAnnotationAssertionAxiom entityAnnAx){ - try { - //It is an individual - String namedIndivIRI=((IRI)entityAnnAx.getAnnotation().getValue()).toString(); - - if (namedIndivIRI==null || namedIndivIRI.equals("null") || namedIndivIRI.equals("")){ - //System.err.println("NULL LABEL: " + entityAnnAx); - return ""; - } - - - return namedIndivIRI; - - - } - catch (Exception e){ - //In case of error. Accessing an object in an unexpected way - return ""; - } - - } - - - - } - - - - - - - - /** - * - * Manages the extraction of the lexicon associated to an Individual that is presented as data asserion axioms - * or object asssertion axioms. Currently is based on the IM track of the OAEI 2012 - * - * @author Ernesto - * - */ - private class ExtractAcceptedLabelsFromRoleAssertions{ - - - Set lexiconValues4individual = new HashSet(); - String label_value; - - int max_size_name_label=0; - int min_size_name_label=5000; - - - ExtractAcceptedLabelsFromRoleAssertions(){ - - } - - - protected boolean isDummyIndividual(OWLNamedIndividual indiv){ - - OWLObjectPropertyAssertionAxiom opaa; - String prop_uri; - - - //Check for oject property assertions deep 1 referenceing given individual - //------------------------------------------------------------------------- - //If referenced it is a dummy individual which should not be considered in the matching - for (OWLAxiom refAx : onto.getReferencingAxioms(indiv, true)){ - - if (refAx instanceof OWLObjectPropertyAssertionAxiom){ - - opaa = (OWLObjectPropertyAssertionAxiom)refAx; - - //Not the searched individual - if (opaa.getObject().isAnonymous()) - continue; - - //Not the searched individual as assertion object - if (!indiv.equals(opaa.getObject().asOWLNamedIndividual())) - continue; //with next axiom - - //Check if object property is the used for dummy individuals - if (!opaa.getProperty().isAnonymous()){ - - prop_uri = opaa.getProperty().asOWLObjectProperty().getIRI().toString(); - - for (String op4indiv : Parameters.accepted_object_assertion_URIs_for_individuals){ - - //The property is the one - if (prop_uri.equals(op4indiv)){ - return true; - } - - } - - } - - - } - - } - - return false; - - - - } - - protected Set extractLexiconFromRoleAssertions(OWLNamedIndividual indiv){ - - lexiconValues4individual.clear(); - - - - //We also add from rdfs:comments - //----------------------------------------- - //Since the comments may be long we need to pre-process them - for (OWLAnnotationAssertionAxiom indivAnnAx : indiv.getAnnotationAssertionAxioms(onto)){ - - - String uri_ann = indivAnnAx.getAnnotation().getProperty().getIRI().toString(); - - - if (Parameters.rdf_comment_uri.equals(uri_ann)){ - - try{ - label_value = processLabel( - ((OWLLiteral)indivAnnAx.getAnnotation().getValue()).getLiteral().toLowerCase()); - } - catch (Exception e){ - //In case of error. - label_value = ""; - } - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>0 && label_value.length() < min_size_name_label){ - min_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - - } - - }//end extraction of comments - - - - - //Datatype assertion - for (String uri_indiv_ann : Parameters.accepted_data_assertion_URIs_for_individuals){ - - for (OWLLiteral assertion_value : indiv.getDataPropertyValues( - index.getFactory().getOWLDataProperty(IRI.create(uri_indiv_ann)), onto)){ - - - //LogOutput.print(indiv.getIRI().toString()); - - label_value = processLabel( - assertion_value.getLiteral().toLowerCase()); - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>0 && label_value.length() < min_size_name_label){ - min_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - } - } - - - - - //OBject property assertions deep 1 (level 1 references a dummy individual) - //------------------------------------- - for (String uri_indiv_ann_deep1 : Parameters.accepted_object_assertion_URIs_for_individuals){ - - for (OWLIndividual assertion_value_indiv : indiv.getObjectPropertyValues( - index.getFactory().getOWLObjectProperty(IRI.create(uri_indiv_ann_deep1)), onto)){ - - //We only consider named individuals - if (assertion_value_indiv.isNamed()){ - - ////DBPedia references - //if (assertion_value_indiv.asOWLNamedIndividual().getIRI().toString().contains("dbpedia.org")){ - // label_value = processLabel(Utilities.getEntityLabelFromURI(assertion_value_indiv.asOWLNamedIndividual().getIRI().toString())); - //} - //else{ - //Datatype assertion deep 2: has_value and others - //---------------------------------------- - for (String uri_indiv_ann_deep2 : Parameters.accepted_data_assertion_URIs_for_individuals_deep2){ - - for (OWLLiteral assertion_value_deep2 : assertion_value_indiv.asOWLNamedIndividual().getDataPropertyValues( - index.getFactory().getOWLDataProperty(IRI.create(uri_indiv_ann_deep2)), onto)){ - - - label_value = processLabel( - assertion_value_deep2.getLiteral().toLowerCase()); - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - } - }//end for data assertion level 2 - - - //Extract comment or label! level 2 - //--------------------- - for (OWLAnnotationAssertionAxiom indivAnnAx_level2 : assertion_value_indiv.asOWLNamedIndividual().getAnnotationAssertionAxioms(onto)){ - - - String uri_ann = indivAnnAx_level2.getAnnotation().getProperty().getIRI().toString(); - - - if (Parameters.rdf_comment_uri.equals(uri_ann) || Parameters.rdf_label_uri.equals(uri_ann)){ - - try{ - label_value = processLabel( - ((OWLLiteral)indivAnnAx_level2.getAnnotation().getValue()).getLiteral().toLowerCase()); - } - catch (Exception e){ - //In case of error. - label_value = ""; - } - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>0 && label_value.length() < min_size_name_label){ - min_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - - } - - }//end extraction of comments - //}//iff dbpedia - - } - - } - } - - - return lexiconValues4individual; - } - - - /** - * This method extracts lexicon from other properties. Like "lives in X". - * In the end we will only keep those relationships that uniquely identifies an instance - * @param indiv - * @return - */ - protected Set extractExtendedLexiconFromRoleAssertions(OWLNamedIndividual indiv){ - - lexiconValues4individual.clear(); - - //look forclean lexicon in data prop - - String label_name; - - Map> dataProp2values = indiv.getDataPropertyValues(onto); - - - //We estract a data props lecicon like "date_12_12_2012", "age_18", etc... - for (OWLDataPropertyExpression dataprop : dataProp2values.keySet()){ - - if (dataprop.isAnonymous()) - continue; - - //we avoid properties already extracted - if (Parameters.accepted_data_assertion_URIs_for_individuals.contains( - dataprop.asOWLDataProperty().getIRI().toString()) - || - Parameters.accepted_data_assertion_URIs_for_individuals_deep2.contains( //hasv_alue - dataprop.asOWLDataProperty().getIRI().toString())) - continue; - - - //Init label with name of the property - label_name = Utilities.getEntityLabelFromURI(dataprop.asOWLDataProperty().getIRI().toString()); - - for (OWLLiteral literal : dataProp2values.get(dataprop)){ - - //if (isGoodLabel(literal.getLiteral().toString())) //not useful in this case - //We also normalize dates in case the give string is within one of the acceptred date formats - lexiconValues4individual.add(label_name + "_" + NormalizeDate.normalize(literal.getLiteral().toString())); - - } - - }//for dtata prop - - Map> objProp2values = indiv.getObjectPropertyValues(onto); - int ident; - - //We estract a data props lexicon like "lives_in_city", "spoken_in_lesotho" - for (OWLObjectPropertyExpression objprop : objProp2values.keySet()){ - - if (objprop.isAnonymous()) - continue; - - //we avoid properties already extracted - //if (Parameters.accepted_object_assertion_URIs_for_individuals.contains( - // objprop.asOWLObjectProperty().getIRI().toString())) - // continue; - - //Init label with name of the property - label_name = Utilities.getEntityLabelFromURI(objprop.asOWLObjectProperty().getIRI().toString()); - - for (OWLIndividual indiv_deep2 : objProp2values.get(objprop)){ - - if (indiv_deep2.isAnonymous()) - continue; - - - if (!inidividual2identifier.containsKey(indiv_deep2.asOWLNamedIndividual())){ - continue; - } - - ident = inidividual2identifier.get(indiv_deep2.asOWLNamedIndividual()); - - //If has alternative labels, otherwise we cannot do much (since label will probably be a "randomly" generated identifier) - //Dummy indiv has not alternative labels!! - if (index.hasIndividualAlternativeLabels(ident)){ - //we know it is a good label - lexiconValues4individual.add(label_name + "_" + index.getLabel4IndividualIndex(ident)); - } - else{ - - //Deep 2 - /// - dataProp2values = indiv_deep2.getDataPropertyValues(onto); - - //We estract a data props lecicon like "date_12_12_2012", "age_18", etc... - //in OAEI 2013 I this is not used much... since deep2 obj properties substitute another obj propertyes - for (OWLDataPropertyExpression dataprop : dataProp2values.keySet()){ - - if (dataprop.isAnonymous()) - continue; - - label_name = Utilities.getEntityLabelFromURI(dataprop.asOWLDataProperty().getIRI().toString()); - - for (OWLLiteral literal : dataProp2values.get(dataprop)){ - - //if (isGoodLabel(literal.getLiteral().toString())) - lexiconValues4individual.add(label_name + "_" + NormalizeDate.normalize(literal.getLiteral().toString())); - - } - - } - - Map> objProp2values_deep2 = indiv_deep2.getObjectPropertyValues(onto); - - for (OWLObjectPropertyExpression objectprop2 : objProp2values_deep2.keySet()){ - - if (objectprop2.isAnonymous()) - continue; - - label_name = Utilities.getEntityLabelFromURI(objectprop2.asOWLObjectProperty().getIRI().toString()); - - for (OWLIndividual indiv_deep3 : objProp2values_deep2.get(objectprop2)){ - - if (indiv_deep3.isAnonymous()) - continue; - - int ident2 = inidividual2identifier.get(indiv_deep3.asOWLNamedIndividual()); - - if (index.hasIndividualAlternativeLabels(ident2)){ - lexiconValues4individual.add(label_name + "_" + index.getLabel4IndividualIndex(ident2)); - } - } - - } - - } - - - - - } - - - }//for obj prop - - return lexiconValues4individual; - - - } - - - - - - - /** - * - * @param value - * @return Empty string if it is not valid - */ - public String processLabel(String value){ - - String processedLabel=""; - - //Reg expression to split text: //Split up to "&", ".", "(", "," ";", is, was, are, were, est/fut (french) - //In this way we split long comments and we only get the important part as synonym - //String reg_ex_split = "[&\\.,;(]"; - String reg_ex_split="[&\\,;(/\\[]|(\\s)is(\\s)|(\\s)are(\\s)|(\\s)was(\\s)|(\\s)were(\\s)|(\\s)est(\\s)|(\\s)fut(\\s)|(\\s)un(\\s)|(\\s)a(\\s)|(\\s)an(\\s)"; - //No filter by point : St. Georges or St. John - - //Removing annoying acronyms - //order of the British empire - //Never inside a word - processedLabel = value.replaceAll(" obe ", ""); - processedLabel = processedLabel.replaceAll(" obe", ""); - processedLabel = processedLabel.replaceAll("obe ", ""); - //fellow royal society - processedLabel = processedLabel.replaceAll(" frs ", ""); - processedLabel = processedLabel.replaceAll(" frs", ""); - processedLabel = processedLabel.replaceAll("frs ", ""); - - int manegeable_lenght = 65; - - //To remove non ascii spaces - processedLabel = processedLabel.replaceAll(String.valueOf((char) 160), " "); - - //short data assertion strings - if (processedLabel.length()<=manegeable_lenght && !processedLabel.contains("

") && !processedLabel.contains("

")){ - - //We still want to split and trim - //we keep/split string up to the given character (twice in case mroe than one character) - processedLabel = processedLabel.split(reg_ex_split)[0]; - processedLabel = processedLabel.split(reg_ex_split)[0]; - //we remove white spaces at the end and begining of label - processedLabel = processedLabel.trim(); - //processedLabel = StringUtils.trim(processedLabel); - - - - return processedLabel; - - //In IM 2015 we may not want to filter in that way - /*if (!isGoodLabel(processedLabel)){ - //LogOutput.printAlways("Filtered: "+ processedLabel); - return ""; //bad label - } - else{ - //LogOutput.print("GOOD: "+ processedLabel); - }*/ - - } - //Text with several paragraphs -> filter - else { - - //Detect if it starts with

if not then it has been split - //For iimb - if (processedLabel.startsWith("

")){ - - processedLabel = processedLabel.split("

")[1]; - - //we keep/split string up to the given character (twice in case mroe than one character) - processedLabel = processedLabel.split(reg_ex_split)[0]; - processedLabel = processedLabel.split(reg_ex_split)[0]; - - //we remove white spaces ate the endand beginning oflabel - processedLabel = processedLabel.trim(); - //processedLabel = StringUtils.trim(processedLabel); - - if (processedLabel.length()<=manegeable_lenght){ - - if (isGoodLabel(processedLabel)){ - //LogOutput.print("GOOD: "+ processedLabel); - return processedLabel; - } - } - - LogOutput.print("Filtered: "+ processedLabel); - return ""; - - } - else { - - //For comments in RDFT oaei 2013. They do not contain

- - //we keep/split string up to the given character (twice in case mroe than one character) - processedLabel = processedLabel.split(reg_ex_split)[0]; - processedLabel = processedLabel.split(reg_ex_split)[0]; - - //we remove white spaces at the end and begining of label - //System.out.println("'" + processedLabel + "'"); - processedLabel = processedLabel.trim(); - //processedLabel = StringUtils.trim(processedLabel); - //System.out.println("'" + processedLabel + "'"); - - - if (processedLabel.length()<=manegeable_lenght){ - - if (isGoodLabel(processedLabel)){ - //LogOutput.printAlways("GOOD: "+ processedLabel); - return processedLabel; - } - else{ - //LogOutput.printAlways("BAD: "+ processedLabel); - } - } - else{ - - processedLabel = processedLabel.substring(0, manegeable_lenght); - - if (isGoodLabel(processedLabel)){ - //LogOutput.print("REDUCED label 0-"+manegeable_lenght+": "+ processedLabel); - return processedLabel; - } - - } - - LogOutput.print("Filtered: "+ processedLabel); - - - - return ""; - } - - - }//if lenght - - - } - - - - - - - - - private boolean isGoodLabel(String label){ - - //REGULAR EXPRESSIONS - - //we do not consider "y" as consonant for filtering purposes. After all "y" may have vowel phonetics. - String consonant_regex = "[b-df-hj-np-tv-xz]"; - String more3_consonants_regex = consonant_regex + consonant_regex + consonant_regex + consonant_regex + "+"; - String more5_consonants_regex = consonant_regex + consonant_regex + consonant_regex + consonant_regex + consonant_regex + consonant_regex + "+"; - String vowel_regex = "[aeiou]"; //accented?? so far we are considering only "english" - String more3_vowels_regex = vowel_regex + vowel_regex + vowel_regex + vowel_regex + "+"; - String same_character_3_times = ".*(.)\\1\\1.*"; - //String space_character_3_times = ".*([ \t])\\1\\1.*"; - String space_character_3_times = ".*(\\s)\\1\\1.*"; - - - String[] words; - - //Detect if label has been randomly generated - - if (label.length()<3){ //very short strings - return false; - } - - if (label.contains("!") || label.contains("?")) - return false; - - - if (label.matches(space_character_3_times)) - return false; - - - - //Split in words - words = label.split(" "); - - //At least one word with size >1 - boolean has_min_size_word = false; - - //has_min_size_word=true; - - for (String word : words){ - - word = word.toLowerCase(); - - //Accept roman numbers - if (NormalizeNumbers.getRomanNumbers10().contains(word)){ - continue; - } - - //to also avoid : or other characteres after a rman number - if (word.length()>1 && NormalizeNumbers.getRomanNumbers10().contains(word.substring(0, word.length()-1))){ - //LogOutput.print(word + " " + word.substring(0, word.length()-1) + " " + word.substring(0, word.length()-2)); - continue; - } - - if (word.equals("st") || word.equals("dr")) //st johns dr john - continue; - - //if (word.equals("f")) //st johns - // continue; - - //Single characters different from "a" - //A bit comflictive depending on the case - //We now accept single letetrs in labels. Specially for names: i,e, "v carapella" - - if (word.length()<2){ //if any of the contained words is a single character - if (word.equals("a")){ - //LogOutput.print(word); - continue; - } - return false; - - } - else{ - has_min_size_word=true; - } - - - - if (word.matches(same_character_3_times)){ //Any character occurring three or more times together - return false; - } - - - - //Strange words - //In english it is very rare to have more than 4 consonant together (e.g. angsts). In compounds words 5 it is possible (e.g. handspring) - //Starting the word cluster is three consonants is the maximum number, as in "split". - //More than 3 vowels together is also strange - if (!word.startsWith("mc") && word.matches(more3_consonants_regex + ".*")){ //Starting with more thn 3 cons. //Mc surname like McGregor include - return false; - } - if (word.matches(".*" + more5_consonants_regex + ".*")){ //more than 5 inside word - return false; - } - if (word.matches(".*" + more3_vowels_regex + ".*")){ //more than three vowels - return false; - } - //only consonants or only vowels - if (word.matches(consonant_regex + "+") || word.matches(vowel_regex + "+")){ - return false; - } - } - - if (!has_min_size_word) - return false; - - - return true; - - } - - - - }//end class - - - - - - - - - - - - OntologyProcessing(){ - - } - - public static void main(String[] args) { - - OntologyProcessing p = new OntologyProcessing(); - p.roleAssertionLabelsExtractor.processLabel("Vicenza , a city in north-eastern Italy, is the capital of the eponymous province in the Veneto region, at the northern base of the Monte Berico, straddling the Bacchiglione. Vicenza is approximately 60 km west of Venice and 200 km east of Milan. Vicenza is a thriving and cosmopolitan city, with a rich history and culture, and many museums, art galleries, piazzas, villas, churches and elegant Renaissance palazzi."); - - //System.out.println(StringUtils.trim("Vicenza ")+"'"); - System.out.println("Vicenza ".trim()+"'"); - System.out.println("Vicenza , a city in north-eastern Italy, is the capital of the eponymous province in the Veneto region, at the northern base of the Monte Berico, straddling the Bacchiglione. Vicenza is approximately 60 km west of Venice and 200 km east of Milan. Vicenza is a thriving and cosmopolitan city, with a rich history and culture, and many museums, art galleries, piazzas, villas, churches and elegant Renaissance palazzi.".trim()); - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ReasonerBasedIndexManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ReasonerBasedIndexManager.java deleted file mode 100644 index 3347013bdb..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/ReasonerBasedIndexManager.java +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing; - -import java.util.Calendar; - - -import org.semanticweb.owlapi.apibinding.OWLManager; -//import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLDataFactory; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.reasoning.ReasonerAccess; - - -/** - * - * This class uses a DL reasoner to answer taxonomy related queries - * - * @author Ernesto - * - */ -public class ReasonerBasedIndexManager extends JointIndexManager { - - private ReasonerAccess jointreasoner; - private OWLDataFactory dataFactory; - - public ReasonerBasedIndexManager(){ - - //dataFactory = OWLManager.getOWLDataFactory(); - dataFactory = SynchronizedOWLManager.createOWLDataFactory(); - - } - - - public void setJointReasoner(ReasonerAccess jointreasoner){ - this.jointreasoner=jointreasoner; - } - - - - public boolean isSubClassOf(int cIdent1, int cIdent2){ - - calls_tax_question++; - init = Calendar.getInstance().getTimeInMillis(); - - //System.out.println("hello"); - - boolean answer; - - answer = isSubClassOf( - getOWLClass4ConceptIndex(cIdent1), - getOWLClass4ConceptIndex(cIdent2) - //OWLManager.getOWLDataFactory().getOWLClass(getIRI4ConceptIndex(cIdent1)), - //OWLManager.getOWLDataFactory().getOWLClass(getIRI4ConceptIndex(cIdent2)) - ); - - fin = Calendar.getInstance().getTimeInMillis(); - time_tax_question += (float)((double)fin-(double)init)/1000.0; - - return answer; - - } - - public boolean isSubClassOf(OWLClass cls1, OWLClass cls2){ - return jointreasoner.isEntailed( - dataFactory.getOWLSubClassOfAxiom(cls1, cls2)); - - } - - - public boolean isSuperClassOf(int cIdent1, int cIdent2){ - return isSubClassOf(cIdent2, cIdent1); - } - - - - public boolean areEquivalentClasses(int cIdent1, int cIdent2){ - return areEquivalent( - getOWLClass4ConceptIndex(cIdent1), - getOWLClass4ConceptIndex(cIdent2) - //OWLManager.getOWLDataFactory().getOWLClass(getIRI4ConceptIndex(cIdent1)), - //OWLManager.getOWLDataFactory().getOWLClass(getIRI4ConceptIndex(cIdent2)) - ); - } - - - public boolean areEquivalent(OWLClass cls1, OWLClass cls2){ - return jointreasoner.isEntailed( - dataFactory.getOWLEquivalentClassesAxiom(cls1, cls2)); - } - - - public boolean areDisjoint(int cIdent1, int cIdent2){ - - calls_disj_question++; - init = Calendar.getInstance().getTimeInMillis(); - - boolean answer; - - answer = areDisjoint( - getOWLClass4ConceptIndex(cIdent1), - getOWLClass4ConceptIndex(cIdent2) - //OWLManager.getOWLDataFactory().getOWLClass(getIRI4ConceptIndex(cIdent1)), - //OWLManager.getOWLDataFactory().getOWLClass(getIRI4ConceptIndex(cIdent2)) - ); - - fin = Calendar.getInstance().getTimeInMillis(); - time_disj_question += (float)((double)fin-(double)init)/1000.0; - - return answer; - - } - - public boolean areDisjoint(OWLClass cls1, OWLClass cls2){ - //return !jointreasoner.isSatisfiable( - // OWLManager.getOWLDataFactory().getOWLObjectIntersectionOf(cls1, cls2)); - - - int state = jointreasoner.isSatisfiable_withTimeout( - dataFactory.getOWLObjectIntersectionOf(cls1, cls2), - 10); - - if (state == ReasonerAccess.UNSAT){ - return true; - } - else if (state == ReasonerAccess.UNKNOWN){ - unknown_disj_question++; - LogOutput.printAlways("\tUNKNOWN DISJ call. Test: " + calls_disj_question); - } - - return false; //sat or unknown - - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ClassIndex.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ClassIndex.java deleted file mode 100644 index a092a778f6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ClassIndex.java +++ /dev/null @@ -1,545 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.entities; - - -import java.util.Collections; - - -import java.util.List; -import java.util.Set; -import java.util.HashSet; - -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.Node; -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.PreNode; -import uk.ac.ox.krr.logmap2.mappings.I_Sub; -import uk.ac.ox.krr.logmap2.utilities.Lib; - - -public class ClassIndex extends EntityIndex{ - - - private Set alternativeLabels;// = new HashSet(); - - //private List stemmed_label_list; - - //Structural Indexing - private Set disjointClasses; - private Set equivalentClasses; - private Set directSubclasses; - private Set directSuperclasses; - private int hierarchyLevel=-1; - - - - //Scope - private Set scope4Score; - private Set scope4Exploration; - - //Root classes for the class - private Set roots; - - - - - public ClassIndex(int i){ - - index=i; - node = new PreNode(i); - - } - - public void addAlternativeLabel(String altLabel){ - - if (alternativeLabels==null) - alternativeLabels=new HashSet(); - - alternativeLabels.add(altLabel); - - } - - public void setAlternativeLabels(Set altLabels){ - - alternativeLabels=new HashSet(altLabels); - - } - - - public void setEmptyAlternativeLabels(){ - - alternativeLabels=new HashSet(); - - } - - - - - /** - * Set of alternative labels or synonyms - * @return - */ - public Set getAlternativeLabels(){ - if (alternativeLabels==null) - return Collections.emptySet(); - - return alternativeLabels; - } - - public boolean hasAlternativeLabels(){ - if (alternativeLabels==null) - return false; - return true; - } - - - - /** - * @param node the node to set - */ - public void setNode(Node node) { - this.node = node; - } - - - /** - * @return the node - */ - public Node getNode() { - return node; - } - - - - public boolean hasDirectDisjointClasses(){ - if (disjointClasses==null) - return false; - return true; - } - - - /** - * @param disjointClasses the disjointClasses to set - */ - public void setDisjointClasses(Set disjointClasses) { - this.disjointClasses = disjointClasses; - } - - - /** - * - */ - public void setEmptyDisjointClasses() { - if (disjointClasses==null) - this.disjointClasses = new HashSet(); - else - this.disjointClasses.clear(); - } - - - /** - * Add disjoint class - */ - public void addDisjointClass(int disjident) { - if (disjointClasses==null) - this.disjointClasses = new HashSet(); - - this.disjointClasses.add(disjident); - - } - - /** - * Add all disjoint classes - */ - public void addAllDisjointClasses(Set disjclasses) { - if (disjointClasses==null) - this.disjointClasses = new HashSet(); - - this.disjointClasses.addAll(disjclasses); - - } - - /** - * @return the disjointClasses - */ - public Set getDisjointClasses() { - return disjointClasses; - } - - - public boolean hasEquivalentClasses(){ - if (equivalentClasses==null) - return false; - return true; - } - - /** - * @param equivalentClasses the equivalentClasses to set - */ - public void setEquivalentClasses(Set equivalentClasses) { - this.equivalentClasses = equivalentClasses; - } - - - /** - * - */ - public void setEmptyEquivalentClasses() { - if (equivalentClasses==null) - this.equivalentClasses = new HashSet(); - else - this.equivalentClasses.clear(); - } - - - /** - * Add equivalent class - */ - public void addEquivalentClass(int disjident) { - if (equivalentClasses==null) - this.equivalentClasses = new HashSet(); - - this.equivalentClasses.add(disjident); - - } - - - /** - * @return the equivalentClasses - */ - public Set getEquivalentClasses() { - return equivalentClasses; - } - - - public boolean hasDirectSubClasses(){ - if (directSubclasses==null) - return false; - return true; - } - - - /** - * - */ - public void setEmptyDirectSubClasses() { - if (directSubclasses==null) - this.directSubclasses = new HashSet(); - else - this.directSubclasses.clear(); - } - - - /** - * Add direct sub class - */ - public void addDirectSubClass(int disjident) { - if (directSubclasses==null) - this.directSubclasses = new HashSet(); - - this.directSubclasses.add(disjident); - - } - - /** - * @param directSubclasses the directSubclasses to set - */ - public void setDirectSubclasses(Set directSubclasses) { - this.directSubclasses = directSubclasses; - } - - - /** - * @return the directSubclasses - */ - public Set getDirectSubclasses() { - return directSubclasses; - } - - - - - public boolean hasDirectSuperClasses(){ - if (directSuperclasses==null) - return false; - return true; - } - - - /** - * - */ - public void setEmptyDirectSuperClasses() { - if (directSuperclasses==null) - this.directSuperclasses = new HashSet(); - else - this.directSuperclasses.clear(); - } - - - /** - * Add direct super class - */ - public void addDirectSuperClass(int disjident) { - if (directSuperclasses==null) - this.directSuperclasses = new HashSet(); - - this.directSuperclasses.add(disjident); - - } - - - /** - * @param directSuperclasses the directSuperclasses to set - */ - public void setDirectSuperclasses(Set directSuperclasses) { - this.directSuperclasses = directSuperclasses; - } - - - /** - * @return the directSuperclasses - */ - public Set getDirectSuperclasses() { - return directSuperclasses; - } - - - - - public boolean hasScope4Scores(){ - if (scope4Score==null) - return false; - return true; - } - - - /** - * @param scope the scope to set - */ - public void setScope4Scores(Set scope) { - //this.scope4Score = new HashSet(scope); - this.scope4Score = scope; - } - - - /** - * @return the scope - */ - public Set getScope4Scores() { - return scope4Score; - } - - - - public boolean hasScope4Exploration(){ - if (scope4Exploration==null) - return false; - return true; - } - - - /** - * @param scope the scope to set - */ - public void setScope4Exploration(Set scope) { - this.scope4Exploration = scope; - //this.scope4Exploration = new HashSet(scope); - } - - - /** - * @return the scope - */ - public Set getScope4Exploration() { - return scope4Exploration; - } - - - - public boolean hasRoots(){ - if (roots==null) - return false; - return true; - } - - - /** - * @param roots the roots to set - */ - public void setRoots(Set roots) { - this.roots = roots; - } - - - /** - * @return the roots - */ - public Set getRoots() { - return roots; - } - - - /** - * @param hierarchyLevel the hierarchyLevel to set - */ - public void setHierarchyLevel(int hierarchyLevel) { - this.hierarchyLevel = hierarchyLevel; - } - - - /** - * @return the hierarchyLevel - */ - public int getHierarchyLevel() { - return hierarchyLevel; - } - - - - - /* - * @param stemmed_label_list the stemmed_label_list to set - * - public void setStemmedLabelList(List stemmed_label_list) { - this.stemmed_label_list = stemmed_label_list; - }*/ - - - - - - - /** - * @return the stemmed_label_list - * - public List getStemmedLabelList() { - return stemmed_label_list; - }*/ - - private Set stemmedAltLabels; - - public String findSimilarStemmedAltLable(ClassIndex that) - { - if (stemmedAltLabels == null || that.stemmedAltLabels == null) - return null; - - int combo = -1, left = -1, temp_c, temp_l; - String ret = null; - String[] words2; - - for (String lab1 : stemmedAltLabels) - for (String lab2 : that.stemmedAltLabels) - { - temp_l = -1; - if (((temp_c = getCommonWordsNumber(lab1, (words2 = lab2.split("_")))) > combo) || - temp_c == combo && (temp_l = lab1.split("_").length + words2.length) < left) - { - combo = temp_c; - left = temp_l == -1 ? lab1.split("_").length + words2.length : temp_l; - ret = lab1 + " " + lab2; - } - } - - words2 = null; - return ret; - } - - private int getCommonWordsNumber(String str, String[] words) - { - int ret = 0; - for (String word : words) - if (!word.isEmpty() && str.contains(word)) //word is stemmed - ++ret; - return ret; - } - - public String findStemmedAltLabel(Set words) - { - if (stemmedAltLabels == null) - { - Lib.debuginfo("The class named " + name4Entitity + " has no stemmed alt labels."); - return null; - } - - String label = ""; - int maxScore = 0, score; - for (String l : stemmedAltLabels) - if (maxScore < (score = getCommonWordsNumber(l, words))) - { - maxScore = score; - label = l; - } - else if (maxScore == score && l.length() < label.length()) - label = l; - - return label; - } - - private int getCommonWordsNumber(String str, Set words) - { - int ret = 0; - for (String word : words) - if (str.contains(word)) //word is stemmed - ++ret; - return ret; - } - - public void addStemmedAltLabel(String label) - { - if (stemmedAltLabels == null) - stemmedAltLabels = new HashSet(); -/* - boolean sub = false; - for (String lab : stemmedAltLabels) - { - sub = true; - for (String word : label.split("_")) - if (!lab.contains(word)) - { - sub = false; - break; - } - } - - if (!sub) -*/ stemmedAltLabels.add(label); - } - - public Set getStemmedAltLabels() - { - return stemmedAltLabels; - } - - - public boolean hasStemmedAlternativeLabels(){ - if (stemmedAltLabels==null) - return false; - return true; - } - - - public void deleteAltStemmedLabels(){ - stemmedAltLabels.clear(); - } - - public void deleteAltLabels(){ - alternativeLabels.clear(); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/DataPropertyIndex.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/DataPropertyIndex.java deleted file mode 100644 index 4ea0a3bf78..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/DataPropertyIndex.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.entities; - -import java.util.Set; - -import java.util.HashSet; - - -public class DataPropertyIndex extends PropertyIndex { - - Set range = new HashSet(); - - public DataPropertyIndex(int index){ - super(index, PropertyIndex.DATAPROPERTY); - } - - public Set getRangeTypes(){ - return range; - } - - - public void addRangeType(String dtype){ - range.add(dtype); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/EntityIndex.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/EntityIndex.java deleted file mode 100644 index a1fc0f3a06..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/EntityIndex.java +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.entities; - -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.Node; - -public abstract class EntityIndex { - - - protected int onto_index; - - protected int index; - - //Interval labelling index - protected Node node; - - protected String namespace; - - - //Lexical Indexation - protected String name4Entitity; - protected String label4Entity; - - - /** - * In order to identify ontology of entity - * @param entityName - */ - public void setOntologyId(int ontoindex){ - onto_index=ontoindex; - } - - public int getOntologyId(){ - return onto_index; - } - - public boolean equals(String entityname) - { - return name4Entitity.equals(entityname); - } - - public void setEntityName(String entityName){ - name4Entitity=entityName; - } - - /** - * The class name in the URI - * @return - */ - public String getEntityName(){ - return name4Entitity; - } - - - public void setLabel(String label){ - label4Entity=label; - } - - /** - * Usually represents the preferred class name - * @return - */ - public String getLabel(){ - return label4Entity; - } - - - /** - * Given IRI within the ontology - * @param baseIRI - * @return - */ - public String getIRI(String baseIRI){ - if (hasDifferentNamespace()){ - if (namespace.equals(name4Entitity)){ - return namespace; //Cases in which uri has not '#' - } - else { - //For URIS like http://ontology.dumontierlab.com/hasReference - if (namespace.endsWith("/")) - return namespace + name4Entitity; - else - return namespace + "#" + name4Entitity; - } - } - // - if (baseIRI.endsWith("/")){ - return baseIRI + name4Entitity; - } - else { - return baseIRI + "#" + name4Entitity; - } - } - - - /** - * @param namespace the namespace to set - */ - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - - - - /** - * @return the namespace of the entity if it has one - */ - public String getNamespace() { - if (hasDifferentNamespace()) - return namespace; - else - return ""; - } - - - /** - * If the namespace of the entity is different from the ontology namespace we store ir - * @return - */ - public boolean hasDifferentNamespace(){ - if (namespace==null || namespace.equals("")) - return false; - return true; - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/IndividualIndex.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/IndividualIndex.java deleted file mode 100644 index c9c072d87f..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/IndividualIndex.java +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.entities; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class IndividualIndex extends EntityIndex{ - - protected Set class_types = new HashSet(); - - protected Set categories = new HashSet(); - - private Set alternativeLabels; - - private boolean showInOutput=true; - - //THis list will identify characteristics of an individual, e.g.: num plublications, num awards, ... - protected List characteristics = new ArrayList(); - - - private Set referencedIndividuals = new HashSet(); - - - public IndividualIndex(int i){ - index=i; - } - - - public Set getClassTypes(){ - return class_types; - } - - public void addClassTypeIndex(int icls){ - class_types.add(icls); - } - - - public Set getCategories(){ - return categories; - } - - public void addCategory(String cat){ - categories.add(cat); - } - - - /** - @deprectaed - **/ - public boolean showInOutput(){ - return showInOutput; - } - - public void setShowInOutput(boolean showInOutput){ - this.showInOutput=showInOutput; - } - - - public boolean hasDirectClassTypes(){ - return !class_types.isEmpty(); - } - - - - public void addAlternativeLabel(String altLabel){ - - if (alternativeLabels==null) - alternativeLabels=new HashSet(); - - alternativeLabels.add(altLabel); - - } - - public void setAlternativeLabels(Set altLabels){ - - alternativeLabels=new HashSet(altLabels); - - } - - - public void setEmptyAlternativeLabels(){ - alternativeLabels=new HashSet(); - } - - - public List getCharacteristics(){ - return characteristics; - } - - - - - /** - * Set of alternative labels or synonyms - * @return - */ - public Set getAlternativeLabels(){ - if (alternativeLabels==null) - return Collections.emptySet(); - - return alternativeLabels; - } - - public boolean hasAlternativeLabels(){ - if (alternativeLabels==null) - return false; - return true; - } - - - public Set getReferencedIndividuals() { - return referencedIndividuals; - } - - - public void setReferencedIndividuals(Set referencedIndividuals) { - this.referencedIndividuals = referencedIndividuals; - } - - - public void addReferencedIndividuals(int index) { - this.referencedIndividuals.add(index); - } - - - public void addCharacteristic(int value) { - this.characteristics.add(value); - - } - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ObjectPropertyIndex.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ObjectPropertyIndex.java deleted file mode 100644 index c712d17b70..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/ObjectPropertyIndex.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.entities; - -import java.util.Collections; -import java.util.Set; - -import java.util.HashSet; - -public class ObjectPropertyIndex extends PropertyIndex { - - - - - Set range = new HashSet(); - - - - public ObjectPropertyIndex(int index){ - super(index, PropertyIndex.OBJECTPROPERTY); - } - - - public Set getRangeClassIndexes(){ - return range; - } - - public void addRangeClassIndex(int icls){ - range.add(icls); - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/PropertyIndex.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/PropertyIndex.java deleted file mode 100644 index 0a4776f53c..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/entities/PropertyIndex.java +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.entities; - - -import java.util.Collections; -import java.util.Set; - -import java.util.HashSet; - - -public abstract class PropertyIndex extends EntityIndex { - - - public static int DATAPROPERTY=0; - public static int OBJECTPROPERTY=1; - - protected int type_property; - - protected Set domain = new HashSet(); - - private Set alternativeLabels; - - - public PropertyIndex(int i, int atype){ - - index=i; - - type_property=atype; - - } - - public int getPropertyType(){ - return type_property; - } - - public boolean isObjectProperty(){ - return (type_property==OBJECTPROPERTY); - } - - public boolean isDataProperty(){ - return (type_property==DATAPROPERTY); - } - - - public Set getDomainClassIndexes(){ - return domain; - } - - public void addDomainClassIndex(int icls){ - domain.add(icls); - } - - - -public void addAlternativeLabel(String altLabel){ - - if (alternativeLabels==null) - alternativeLabels=new HashSet(); - - alternativeLabels.add(altLabel); - - } - - public void setAlternativeLabels(Set altLabels){ - - alternativeLabels=new HashSet(altLabels); - - } - - - public void setEmptyAlternativeLabels(){ - - alternativeLabels=new HashSet(); - - } - - - - - /** - * Set of alternative labels or synonyms - * @return - */ - public Set getAlternativeLabels(){ - if (alternativeLabels==null) - return Collections.emptySet(); - - return alternativeLabels; - } - - public boolean hasAlternativeLabels(){ - if (alternativeLabels==null) - return false; - return true; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Interval.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Interval.java deleted file mode 100644 index ddfb41ca14..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Interval.java +++ /dev/null @@ -1,293 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - -import java.util.List; -import java.util.ArrayList; - -public class Interval{ - - int leftbound; - int rightbound; - - - public Interval (int leftb, int rightb){ - leftbound=leftb; - rightbound=rightb; - - } - - - public Interval (String serialized_interval){ - - if (serialized_interval.indexOf(",")>0){ - leftbound=Integer.valueOf(serialized_interval.split(",")[0]); - rightbound=Integer.valueOf(serialized_interval.split(",")[1]); - } - else{ - leftbound=-1; - rightbound=-1; - } - } - - - - public int getLeftBound(){ - return leftbound; - } - - public int getRightBound(){ - return rightbound; - } - - public void setLeftBound(int leftbound) { - this.leftbound = leftbound; - } - - public void setRightBound(int rightbound) { - this.rightbound = rightbound; - } - - - public boolean equals(Object o){ - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof Interval)) - return false; - - Interval i = (Interval)o; - - return equals(i); - - } - - public boolean equals(Interval i){ - - if (leftbound!=i.getLeftBound()) - return false; - - if (rightbound!=i.getRightBound()) - return false; - - return true; - - } - - /** - * True if given i is included in the interval - * @param i - * @return - */ - public boolean isSuperIntervalOf(Interval i){ - - if(i.getLeftBound()rightbound) - return false; - - return true; - - } - - - /** - * True if interval is included in given i - * @param i - * @return - */ - public boolean isSubIntervalOf(Interval i){ - - if(i.getLeftBound()>leftbound) - return false; - if(i.getRightBound()rightbound || index [3,3] - * @param i - * @return - */ - public boolean hasNonEmptyIntersectionWith(Interval i){ - - if (rightbound < i.leftbound) - return false; - - if (i.rightbound < leftbound) - return false; - - return true; - - } - - - private int min(int a, int b){ - if (ab) - return a; - return b; - - } - - - public Interval getIntersectionWith(Interval i){ - - if (hasNonEmptyIntersectionWith(i)){ - return new Interval( - max(leftbound, i.getLeftBound()), - min(rightbound, i.getRightBound()) - ); - } - return new Interval(-1,-1); - - } - - - public boolean isAdjacentTo(Interval i){ - if (hasNonEmptyIntersectionWith(i)) - return true; - - if (i.rightbound==leftbound-1) - return true; - - if (rightbound==i.leftbound-1) - return true; - - return false; - - } - - - /** - * Assumes that are adjacent a returns an Interval - * @param i - * @return - */ - public Interval getUnionWith(Interval i){ - - //Assumes that are adjacent - return new Interval( - min(leftbound, i.getLeftBound()), - max(rightbound, i.getRightBound()) - ); - - - } - - /** - * Returns a list with one interval if the were adjacent or with the two intervals if they were not - * @param i - * @return - */ - public List getUnionWithList(Interval i){ - - List unionList = new ArrayList(); - - if (isAdjacentTo(i)){ - unionList.add(new Interval( - min(leftbound, i.getLeftBound()), - max(rightbound, i.getRightBound()) - )); - } - else{ - unionList.add(this); - unionList.add(i); - } - - return unionList; - - } - - - - public boolean hasLowerLeftBoundThan(Interval i){ - if (leftbound < i.getLeftBound()) - return true; - return false; - } - - - public boolean hasGreaterLeftBoundThan(Interval i){ - if (leftbound > i.getLeftBound()) - return true; - return false; - } - - - /** - * What we consider empty interval - * @return - */ - public boolean isEmptyInterval(){ - if (leftbound<0) - return false; - - return true; - } - - - public String toString(){ - return "<" + leftbound + ", " +rightbound + ">"; - } - - public String serialize(){ - return leftbound + "," +rightbound; - } - - - public int hashCode() { - int code = 10; - code = 40 * code + leftbound; - code = 40 * code + rightbound; - return code; - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/IntervalLabelledHierarchy.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/IntervalLabelledHierarchy.java deleted file mode 100644 index 33acfecc64..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/IntervalLabelledHierarchy.java +++ /dev/null @@ -1,289 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - -import java.util.HashMap; - -import java.util.HashSet; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.io.LogOutput; - - -/** - * - * @author Anton Morant - */ -public abstract class IntervalLabelledHierarchy { - - public static final int ROOT_LABEL = -100; - public static final int LEAF_LABEL = -99; - - protected HashMap> ontoHierarchy; - protected HashMap classesToNodesMap; - protected Node root; - protected Node leaf; //Inverted root for ancestors - protected List topoSortedNodes; - - public IntervalLabelledHierarchy(HashMap> ontoHierarchy, boolean clearStructures) { - this.ontoHierarchy = ontoHierarchy; - createClassesToNodesMap(); //Create nodes and map classId:Node - createHierarchy(); //Link parents to children (and converse) - // Check DAG? - obtainRoot(); //Add artificial root if needed - obtainLeaf(); //Add artificial inverse root if needed (so there is only one leaf) - - if(leaf.getClassId().equals(LEAF_LABEL)) - leaf.unattach(); //Saves time and memory - - obtainDescSpanningTree(); - walkDescendant(); //Perform preorder/postorder walk, assigning one "tree interval" to each node - computeDescIntervals(); //Compute each node's inherited intervals - - if(root.getClassId().equals(ROOT_LABEL)) - root.unattach(); //Saves time and memory - if(leaf.getClassId().equals(LEAF_LABEL)) - leaf.reattach(); - - obtainAscSpanningTree(); - walkAscendant(); //Perform preorder/postorder walk, assigning one "tree interval" to each node - computeAscIntervals(); //Compute each node's inherited intervals - - if(leaf.getClassId().equals(LEAF_LABEL)) - leaf.unattach(); - - if(clearStructures) - clearNodeStructures(); //Clear all data structures except node intervals. - } - - public IntervalLabelledHierarchy(HashMap> ontoHierarchy) { - this(ontoHierarchy, true); - } - - - // ABSTRACT METHODS - // To be implemented depending on whether a preorder or postorder policy is being used. - - - /** - * Create PreNode or PostNode for the given class. - */ - protected abstract Node createNode(int classId); - - /** - * Perform preorder or postorder walk. - */ - protected abstract void walkDescendant(); - - /** - * Perform preorder or postorder walk. - */ - protected abstract void walkAscendant(); - - - //PUBLIC METHODS - - public Map getClassesToNodesMap() { - return classesToNodesMap; - } - - public boolean hasDescendant(int parentClassId, int childClassId) { - Node parent = classesToNodesMap.get(parentClassId); - Node child = classesToNodesMap.get(childClassId); - if(parent == null) - throw new IllegalArgumentException("Parent class not found"); - if(child == null) - throw new IllegalArgumentException("Child class not found"); - - int index = child.getDescOrder(); - - for(Interval interval : parent.getDescIntervals()) - if(interval.containsIndex(index)) - return true; - - return false; - } - - public boolean hasAncestor(int childClassId, int parentClassId) { - Node child = classesToNodesMap.get(childClassId); - Node parent = classesToNodesMap.get(parentClassId); - if(parent == null) - throw new IllegalArgumentException("Parent class not found"); - if(child == null) - throw new IllegalArgumentException("Child class not found"); - - int index = parent.getAscOrder(); - - for(Interval interval : child.getAscIntervals()) - if(interval.containsIndex(index)) - return true; - - return false; - } - - - //PRIVATE METHODS - BUILDING HIERARCHY - - private void createClassesToNodesMap() { - classesToNodesMap = new HashMap(); - assert ontoHierarchy != null; - //Map nodes with children - for(int classId : ontoHierarchy.keySet()) - classesToNodesMap.put(classId, createNode(classId)); - //Map leaf nodes - for(Set children : ontoHierarchy.values()) - for(int childId : children) - if(!classesToNodesMap.containsKey(childId)) - classesToNodesMap.put(childId, createNode(childId)); - } - - private void createHierarchy() { - for(Entry> entry : ontoHierarchy.entrySet()) { - int classId = entry.getKey(); - Set childrenIds = entry.getValue(); - Node node = classesToNodesMap.get(classId); - for(int childId : childrenIds) { - Node child = classesToNodesMap.get(childId); - assert child != null; - node.addChild(child); - } - } - } - - private void obtainRoot() { - Set roots = new HashSet(); - for(Node node : classesToNodesMap.values()) { - if(node.isRoot()) - roots.add(node); - } - if(roots.size()>1) { - //We assume DAG, so roots.size() > 0 - root = createNode(ROOT_LABEL); //TOP - for(Node node : roots) - root.addChild(node); - } else { - root = roots.iterator().next(); - } - } - - private void obtainLeaf() { - Set leaves = new HashSet(); - for(Node node : classesToNodesMap.values()) { - if(node.isLeaf()) - leaves.add(node); - } - if(leaves.size()>1) { - //We assume DAG, so leaves.size() > 0 - leaf = createNode(LEAF_LABEL); //BOTTOM - for(Node node : leaves) - node.addChild(leaf); - } else { - leaf = leaves.iterator().next(); - } - } - - private void obtainDescSpanningTree() { - doTopologicalSort(); - for(Node node : topoSortedNodes) { - Node maxPredsParent = null; - int maxPreds = -1; - for(Node parent : node.getParents()) { - if(parent.getParents().size() > maxPreds) { - maxPredsParent = parent; - maxPreds = parent.getParents().size(); - } - } - node.setDescTreeParent(maxPredsParent); - } - } - - private void obtainAscSpanningTree() { - doTopologicalSort(); - - ListIterator iter = topoSortedNodes.listIterator(topoSortedNodes.size()); - - while(iter.hasPrevious()) { - Node node = iter.previous(); - Node maxPredsParent = null; - int maxPreds = -1; - for(Node parent : node.getChildren()) { //Inverting edges! - if(parent.getChildren().size() > maxPreds) { - maxPredsParent = parent; - maxPreds = parent.getChildren().size(); - } - } - node.setAscTreeParent(maxPredsParent); - } - } - - private void computeDescIntervals() { - doTopologicalSort(); - ListIterator iter = topoSortedNodes.listIterator(topoSortedNodes.size()); - while(iter.hasPrevious()) { - Node node = iter.previous(); - for(Node child : node.getChildren()) { - //TODO Revise> Concurrent modification otherwise - if (node.equals(child)){ - LogOutput.print("Same node as children: computeDescIntervals"); - continue; - } - for(Interval interval : child.getDescIntervals()) { - node.addDescInterval(interval); - } - } - } - } - - private void computeAscIntervals() { - doTopologicalSort(); - for(Node node : topoSortedNodes) { - for(Node child : node.getParents()) { //Inverting edges! - if (node.equals(child)){ - LogOutput.print("Same node as children: computeAscIntervals"); - continue; - } - for(Interval interval : child.getAscIntervals()) { - node.addAscInterval(interval); - } - } - } - } - - private void clearNodeStructures() { - for(Node node : classesToNodesMap.values()) - node.clearAuxiliarStructures(); - ontoHierarchy.clear(); - ontoHierarchy = null; - } - - - //PRIVATE METHODS - USEFUL - - protected void doTopologicalSort() { - //Obtain topologically ordered list of nodes (for several uses) - if(topoSortedNodes == null) - topoSortedNodes = new TopologicalSorting().sort(root); - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Node.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Node.java deleted file mode 100644 index b138d29a32..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Node.java +++ /dev/null @@ -1,281 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - -import java.util.HashSet; - -import java.util.Set; - - -/** - * - * @author Anton Morant - */ -public abstract class Node { - //Contained ontology class - protected int classId; - //Ontology hierarchy subsumption structure - protected Set parents; - protected Set children; - //Minimum spanning tree structure for descendants - protected Node descTreeParent; - protected Set descTreeChildren; - //Minimum spanning tree structure for ascendants - protected Node ascTreeParent; - protected Set ascTreeChildren; - //Computed intervals - protected Set descIntervals; - protected Set ascIntervals; - - public abstract void setDescOrder(int orderIndex); - public abstract int getDescOrder(); - public abstract void setAscOrder(int orderIndex); - public abstract int getAscOrder(); - public abstract void setDescChildOrder(int childOrderIndex); - public abstract int getDescChildOrder(); - public abstract void setAscChildOrder(int childOrderIndex); - public abstract int getAscChildOrder(); - public abstract Interval getDescOrderInterval(); - public abstract Interval getAscOrderInterval(); - - public Node(Integer classId) { - this.classId = classId; - parents = new HashSet(); - children = new HashSet(); - descTreeChildren = new HashSet(); - ascTreeChildren = new HashSet(); - descIntervals = new HashSet(); - ascIntervals = new HashSet(); - } - - /** - * This method should be called after finishing building the index - * in order to free all reserved memory except for the intervals. - */ - public void clearAuxiliarStructures() { - parents.clear(); - parents = null; - children.clear(); - children = null; - descTreeParent = null; - descTreeChildren.clear(); - descTreeChildren = null; - ascTreeParent = null; - ascTreeChildren.clear(); - ascTreeChildren = null; - } - - - /** - * Removes interval structures only - */ - public void clearIntervalStructures(){ - - descIntervals.clear(); - //descIntervals=null; - ascIntervals.clear(); - //ascIntervals=null; - - - } - - //PUBLIC GETTERS - - public Integer getClassId() { - return classId; - } - - public Set getDescIntervals() { - return descIntervals; - } - - public Set getAscIntervals() { - return ascIntervals; - } - - - //Setters (ernesto): need when intervals are loaded from files - public Set setDescIntervals(Set intervals) { - return descIntervals=intervals; - } - - public Set setAncIntervals(Set intervals) { - return ascIntervals=intervals; - } - - //PACKAGE GETTERS - - /* - * This structures are to be used only during the construction of the interval-labelled schema, - * and are the structures that can be freed with clearStructures(). - * The getters' visibility has therefore been reduced to package, since they are not to be - * used by external classes. - */ - - - Set getChildren() { - return children; - } - - Set getParents() { - return parents; - } - - Node getDescTreeParent() { - return descTreeParent; - } - - Set getDescTreeChildren() { - return descTreeChildren; - } - - Node getAscTreeParent() { - return ascTreeParent; - } - - Set getAscTreeChildren() { - return ascTreeChildren; - } - - - - - //Edge manipulation - - public void addChild(Node child) { - children.add(child); - //To be removed later if needed by setDescTreeParent: - descTreeChildren.add(child); - child.parents.add(this); - //To be removed later if needed by setAscTreeParent: - child.ascTreeChildren.add(this); //Inverting edges! - } - - public void setDescTreeParent(Node node) { - assert parents.contains(node); - descTreeParent = node; - for(Node parent : parents) - if(parent!=descTreeParent) - parent.getDescTreeChildren().remove(this); - } - - public void setAscTreeParent(Node node) { - assert children.contains(node); //Inverting edges! - ascTreeParent = node; - for(Node parent : children) //Inverting edges! - if(parent != ascTreeParent) - parent.getAscTreeChildren().remove(this); - } - - //Interval manipulation - - public void addDescInterval(Interval interval) { - for(Interval ownInterval : descIntervals) { - if(ownInterval.isSuperIntervalOf(interval)) - return; //No need to add - if(interval.isSuperIntervalOf(ownInterval)) { - //Replace smaller interval with new one - descIntervals.remove(ownInterval); - descIntervals.add(interval); - return; - } - } - //Do not add negative intervals <-1,-1> or <-id,-id> - if (interval.leftbound>=0 && interval.rightbound>=0) - descIntervals.add(interval); //Need to add - } - - public void addAscInterval(Interval interval) { - for(Interval ownInterval : ascIntervals) { - if(ownInterval.isSuperIntervalOf(interval)) - return; //No need to add - if(interval.isSuperIntervalOf(ownInterval)) { - //Replace smaller interval with new one - ascIntervals.remove(ownInterval); - ascIntervals.add(interval); - return; - } else if(ownInterval.isAdjacentTo(interval)) { - //Replace interval for its union with adjacent one - Interval unionInterval = new Interval( - Math.min(ownInterval.getLeftBound(), interval.getLeftBound()), - Math.max(ownInterval.getRightBound(), interval.getRightBound())); - ascIntervals.remove(ownInterval); - ascIntervals.add(unionInterval); - return; - } - } - ascIntervals.add(interval); //Need to add - } - - //Others - - public boolean isRoot() { - return parents.size() == 0; - } - - public boolean isLeaf() { - return children.size() == 0; - } - - /** - * Remove links from other nodes to this one (keep the other direction for reattachment). - */ - public void unattach() { - for(Node parent : parents) { - parent.children.remove(this); - parent.descTreeChildren.remove(this); //In case treeParent does not belong to parents - } - for(Node child : children) { - child.parents.remove(this); - if(child.descTreeParent.equals(this)) - child.descTreeParent = null; //In case treeChildren is not contained in children - } - if(descTreeParent != null) - descTreeParent.descTreeChildren.remove(this); - for(Node descTreeChild : descTreeChildren) - descTreeChild.descTreeParent = null; - if(ascTreeParent != null) - ascTreeParent.ascTreeChildren.remove(this); - for(Node ascTreeChild : ascTreeChildren) - ascTreeChild.ascTreeParent = null; - } - - /** - * Restore links from other nodes to this one (from kept links at unattachment). - */ - public void reattach() { - for(Node parent : parents) - parent.children.add(this); - for(Node child : children) - child.parents.add(this); - if(descTreeParent != null) - descTreeParent.descTreeChildren.add(this); - for(Node descTreeChild : descTreeChildren) - descTreeChild.descTreeParent = this; - if(ascTreeParent != null) - ascTreeParent.ascTreeChildren.add(this); - for(Node ascTreeChild : ascTreeChildren) - ascTreeChild.ascTreeParent = this; - } - - @Override - public String toString() { - return String.valueOf(getClassId()); - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostIntervalLabelledHierarchy.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostIntervalLabelledHierarchy.java deleted file mode 100644 index 51421d7b82..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostIntervalLabelledHierarchy.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - -import java.util.HashMap; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.io.LogOutput; - -/** - * - * @author Anton Morant - */ -public class PostIntervalLabelledHierarchy extends IntervalLabelledHierarchy { - - public final static int BASE_INDEX = 1; //First leaf node gets postorder 1 - public final static int INDEX_INCREMENT = 1; - - public PostIntervalLabelledHierarchy(HashMap> ontoHierarchy, boolean clearStructures) { - super(ontoHierarchy, clearStructures); - } - - public PostIntervalLabelledHierarchy(HashMap> ontoHierarchy) { - super(ontoHierarchy); - } - - /* (non-Javadoc) - * @see intervallabelling.IntervalLabelledHierarchy#createNode(java.lang.String) - */ - @Override - protected Node createNode(int classId) { - return new PostNode(classId); - } - - /* (non-Javadoc) - * @see intervallabelling.IntervalLabelledHierarchy#walkOrder() - */ - @Override - protected void walkDescendant() { - walkDescNode(root, BASE_INDEX); - } - - private int walkDescNode(Node node, int orderIndex) { - node.setDescChildOrder(orderIndex); - for(Node child : node.getDescTreeChildren()) { - if (node.equals(child)){ - LogOutput.print("Same node as children: walkDescNode"); - continue; - } - orderIndex = walkDescNode(child, orderIndex); - } - node.setDescOrder(orderIndex); - orderIndex++; - return orderIndex; - } - - @Override - protected void walkAscendant() { - walkAscNode(leaf, BASE_INDEX); - } - - private int walkAscNode(Node node, int orderIndex) { - node.setAscChildOrder(orderIndex); - for(Node child : node.getAscTreeChildren()) { - if (node.equals(child)){ - LogOutput.print("Same node as children: walkAscNode"); - continue; - } - orderIndex = walkAscNode(child, orderIndex); - } - node.setAscOrder(orderIndex); - orderIndex++; - return orderIndex; - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostNode.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostNode.java deleted file mode 100644 index 5a9a941dc2..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PostNode.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - - -/** - * - * @author Anton Morant - */ -public class PostNode extends Node { - - private Interval descOrderInterval; - private Interval ascOrderInterval; - - public PostNode(int classId) { - super(classId); - descOrderInterval = new Interval(-1,-1); - descIntervals.add(descOrderInterval); - ascOrderInterval = new Interval(-1,-1); - ascIntervals.add(ascOrderInterval); - } - - @Override - public void setDescOrder(int postorder) { - descOrderInterval.setRightBound(postorder); - } - - @Override - public void setDescChildOrder(int minPostorder) { - descOrderInterval.setLeftBound(minPostorder); - } - - @Override - public int getDescOrder() { - return descOrderInterval.getRightBound(); - } - - @Override - public int getDescChildOrder() { - return descOrderInterval.getLeftBound(); - } - - @Override - public Interval getDescOrderInterval() { - return descOrderInterval; - } - - @Override - public void setAscOrder(int postorder) { - ascOrderInterval.setRightBound(postorder); - } - - @Override - public void setAscChildOrder(int minPostorder) { - ascOrderInterval.setLeftBound(minPostorder); - } - - @Override - public int getAscOrder() { - return ascOrderInterval.getRightBound(); - } - - @Override - public int getAscChildOrder() { - return ascOrderInterval.getLeftBound(); - } - - @Override - public Interval getAscOrderInterval() { - return ascOrderInterval; - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreIntervalLabelledHierarchy.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreIntervalLabelledHierarchy.java deleted file mode 100644 index 0a1653594c..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreIntervalLabelledHierarchy.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - -import java.util.HashMap; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.io.LogOutput; - -/** - * - * @author Anton Morant - */ -public class PreIntervalLabelledHierarchy extends IntervalLabelledHierarchy { - - public final static int BASE_INDEX = 1-1; //Root node gets preorder 1 - public final static int INDEX_INCREMENT = 1; - - public PreIntervalLabelledHierarchy(HashMap> ontoHierarchy, boolean clearStructures) { - super(ontoHierarchy, clearStructures); - } - - public PreIntervalLabelledHierarchy(HashMap> ontoHierarchy) { - super(ontoHierarchy); - } - - /* (non-Javadoc) - * @see intervallabelling.IntervalLabelledHierarchy#createNode(java.lang.String) - */ - @Override - protected Node createNode(int classId) { - return new PreNode(classId); - } - - /* (non-Javadoc) - * @see intervallabelling.IntervalLabelledHierarchy#walkOrder() - */ - @Override - protected void walkDescendant() { - walkDescNode(root, BASE_INDEX); - } - - private int walkDescNode(Node node, int orderIndex) { - orderIndex++; - node.setDescOrder(orderIndex); - for(Node child : node.getDescTreeChildren()) { - if (node.equals(child)){ - LogOutput.print("Same node as children: walkDescNode"); - continue; - } - orderIndex = walkDescNode(child, orderIndex); - } - node.setDescChildOrder(orderIndex); - return orderIndex; - } - - @Override - protected void walkAscendant() { - walkAscNode(leaf, BASE_INDEX); - } - - private int walkAscNode(Node node, int orderIndex) { - orderIndex++; - node.setAscOrder(orderIndex); - for(Node child : node.getAscTreeChildren()) { - if (node.equals(child)){ - LogOutput.print("Same node as children: walkAscNode"); - continue; - } - orderIndex = walkAscNode(child, orderIndex); - } - node.setAscChildOrder(orderIndex); - return orderIndex; - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreNode.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreNode.java deleted file mode 100644 index 0123115336..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/PreNode.java +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - - -/** - * - * @author Anton Morant - */ -public class PreNode extends Node { - - private Interval descOrderInterval; - private Interval ascOrderInterval; - - public PreNode(int classId) { - super(classId); - //descOrderInterval = new Interval(-1,-1); - descOrderInterval = new Interval(-classId,-classId); //We avoid wrong preorders in case not given - descIntervals.add(descOrderInterval); - ascOrderInterval = new Interval(-1,-1); - ascIntervals.add(ascOrderInterval); - } - - @Override - public void setDescOrder(int preorder) { - descOrderInterval.setLeftBound(preorder); - } - - @Override - public void setDescChildOrder(int maxPreorder) { - descOrderInterval.setRightBound(maxPreorder); - } - - @Override - public int getDescOrder() { - return descOrderInterval.getLeftBound(); - } - - @Override - public int getDescChildOrder() { - return descOrderInterval.getRightBound(); - } - - @Override - public Interval getDescOrderInterval() { - return descOrderInterval; - } - - @Override - public void setAscOrder(int preorder) { - ascOrderInterval.setLeftBound(preorder); - } - - @Override - public void setAscChildOrder(int maxPreorder) { - ascOrderInterval.setRightBound(maxPreorder); - } - - @Override - public int getAscOrder() { - return ascOrderInterval.getLeftBound(); - } - - @Override - public int getAscChildOrder() { - return ascOrderInterval.getRightBound(); - } - - @Override - public Interval getAscOrderInterval() { - return ascOrderInterval; - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Test.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Test.java deleted file mode 100644 index ecd911db50..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/indexing/labelling_schema/Test.java +++ /dev/null @@ -1,181 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; - -/** - * - * - * @author Anton Morant - */ -public class Test { - - private IntervalLabelledHierarchy preHierarchy; - private IntervalLabelledHierarchy postHierarchy; - private int[] classes = {1,2,3,4,5,6,7,8}; - - public static void main(String[] args) { - new Test().run(); - } - - public Test() { - HashMap> map = new HashMap>(); - HashSet bc = new HashSet(); bc.add(2); bc.add(3); - HashSet de = new HashSet(); de.add(4); de.add(5); - HashSet eg = new HashSet(); eg.add(5); eg.add(7); - HashSet f = new HashSet(); f.add(6); - HashSet h = new HashSet(); h.add(8); - - map.put(1, bc); - map.put(2, de); - map.put(3, eg); - map.put(4, f); - map.put(5, f); - map.put(3, eg); - map.put(7, h); - - preHierarchy = new PreIntervalLabelledHierarchy(map, false); - postHierarchy = new PostIntervalLabelledHierarchy(map, false); - } - - public void run() { - testHierarchy(preHierarchy); - //testHierarchy(postHierarchy); - checkPrePostConsistency(preHierarchy, postHierarchy); - } - - public void printHierarchy(IntervalLabelledHierarchy hierarchy) { - System.out.println(); - Node root = hierarchy.root; - printHierarchyNode(root, 0, new HashSet()); - } - - private void testHierarchy(IntervalLabelledHierarchy hierarchy) { - printHierarchy(hierarchy); - System.out.println(new TopologicalSorting().sort(hierarchy.root)); - printTree(hierarchy); - printChildrenAnswers(hierarchy); - checkDescAncConsistency(hierarchy); - } - - private void printHierarchyNode(Node node, int indent, Set visited) { - for(int i=0; i()); - } - - private void printTreeNode(Node node, int indent, Set visited) { - for(int i=0; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.indexing.labelling_schema; - -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; - -/** - * - * - * @author Anton Morant - */ -public class TopologicalSorting { - private LinkedList nodes; - private Set visited; - - public TopologicalSorting() { - reset(); - } - - public void reset() { - nodes = new LinkedList(); - visited = new HashSet(); - } - - public List sort(Node root) { - visit(root); - return nodes; - } - - private void visit(Node node) { - if(!visited.contains(node)) { - visited.add(node); - - for(Node child : node.getChildren()) - visit(child); - - nodes.addFirst(node); - } - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcess.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcess.java deleted file mode 100644 index 7eecc6dc29..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcess.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.interactive; - -import java.util.TreeSet; - -import uk.ac.ox.krr.logmap2.interactive.objects.MappingObjectInteractivity; - -public abstract class InteractiveProcess { - - - protected TreeSet orderedMappings2Ask; - - protected double precision; - protected double recall; - protected double Fmeasure; - - - - public abstract void startInteractiveProcess(); - - - - public abstract void endInteractiveProcess(boolean filter); - - - - - /** - * @return the orderedMappings2Ask - */ - public TreeSet getOrderedMappings2Ask() { - return orderedMappings2Ask; - } - - - - public abstract void endInteractiveProcess(); - // TODO Auto-generated method stub - - - - - - - //protected abstract void getPrecisionAndRecall(); - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessAmbiguity.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessAmbiguity.java deleted file mode 100644 index 037bc61a95..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessAmbiguity.java +++ /dev/null @@ -1,1197 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.interactive; - -import java.util.Comparator; - - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.ArrayList; -import java.util.List; -import java.util.TreeSet; -import java.util.Stack; -import java.util.Random; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.interactive.objects.MappingObjectInteractivity; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.WriteFile; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.repair.AnchorAssessment; -import uk.ac.ox.krr.logmap2.statistics.StatisticsManager; -import uk.ac.ox.krr.logmap2.utilities.PrecomputeIndexCombination; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * - * This class will perform the ordering for the interactive process based on the ambiguity and the confidence - * - * @author Ernesto - * - */ -public class InteractiveProcessAmbiguity extends InteractiveProcess { - - - private IndexManager index; - - private MappingManager mapping_manager; - - private AnchorAssessment mapping_assessment; - - private boolean useHeuristics; - - private int error_user; - - private boolean record_process; - - /**New mappings (to process) added in interactivity (by user or heuristic)*/ - private Stack new2Add; - /**New mappings (to process) deleted in interactivity (by user or heuristic)*/ - private Stack new2Del; - - String interactivityFile; - - - private Random generator; - - - public InteractiveProcessAmbiguity( - IndexManager index, - MappingManager mapping_manager, - boolean useHeuristics, - boolean orderQuestions, - int error_user, //user error - boolean ask_everything, - boolean record_process, - String interactivityFile){ - - this.interactivityFile=interactivityFile; - - this.index = index; - this.mapping_manager = mapping_manager; - mapping_assessment = new AnchorAssessment(index, mapping_manager); - this.useHeuristics = useHeuristics; - this.error_user = error_user; - - this.record_process=record_process; - - generator = new Random(Calendar.getInstance().getTimeInMillis()); - - new2Add = new Stack(); - new2Del = new Stack(); - - //We use specific comparator - if (orderQuestions) - orderedMappings2Ask = - new TreeSet(new MappingInteractivityComparator()); - else //No comparator - orderedMappings2Ask = - new TreeSet(new NoComparator()); - - - int ambiguity; - - - //TODO: we ask everything. This will be used in experiments - //We ask even anchors!!! - if (ask_everything){ - for (int ide1 : mapping_manager.getLogMapMappings().keySet()){ - for (int ide2 : mapping_manager.getLogMapMappings().get(ide1)){ - if (mapping_manager.isId1SmallerThanId2(ide1, ide2)){ - mapping_manager.addMappingObject2AskUserList(ide1, ide2); //we add equivalence - } - } - } - - mapping_manager.getLogMapMappings().clear(); - - //mapping_manager.setExactAsFixed(false); - - } - - - //input: getListOfMappingsToAskUser - for (MappingObjectInteractivity mapping : mapping_manager.getListOfMappingsToAskUser()){ - - - ambiguity = mapping_manager.getEntityAmbiguity_UserMappings(mapping.getIdentifierOnto1()) + - mapping_manager.getEntityAmbiguity_UserMappings(mapping.getIdentifierOnto2()); - - - //First similarity value is ambiguity - mapping.addSimilarityValue2List((double)ambiguity);//2, 3, 4 - - //Second is confidence (it is already in mapping manager) - //mapping.addSimilarityValue2List(getConfidence4Mapping(mapping)); - - - //Add to ordered list - orderedMappings2Ask.add(mapping); - - - } - - if (record_process) - printOrdering(); - - - - } - - - private void printOrdering(){ - - WriteFile writer = new WriteFile("/usr/local/data/DataUMLS/InteractiveProcess/ambiguityOrdering.txt"); - - Iterator it = orderedMappings2Ask.descendingIterator(); - - MappingObjectInteractivity mapping; - - int num=0; - - while (it.hasNext()){ - - mapping = it.next(); - - writer.writeLine(mapping + " -> " + - getAmbiguityScore(mapping) + " " + - getConfidence4Mapping(mapping) + " " + - mapping_manager.isMappingInGoldStandard(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()) - + ", isub: " + mapping_manager.extractISUB4Mapping(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()) - + ", scope all: " + mapping_manager.extractScopeAll4Mapping(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()) - + ", scope anc: " + mapping_manager.extractScopeAnchors4Mapping(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()) - + ", Sim weak: " + mapping_manager.getSimWeak4Mapping2(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()) - //+ ", removed flag: " + mapping.isRemovedFlagActive() - ); - - num++; - - } - - writer.closeBuffer(); - LogOutput.print("Num entries: " + num); - - - } - - - private double getConfidence4Mapping(MappingObjectInteractivity mapping){ - return mapping_manager.getConfidence4Mapping( - mapping.getIdentifierOnto1(), - mapping.getIdentifierOnto2()); - } - - - - - - /** - * Start simulation interactive process - */ - public void startInteractiveProcess() { - - try { - - WriteFile writer = null; - List recordResultsPoints = new ArrayList(); - recordResultsPoints.add(3000); - int num_user_int=0; - int point=0; - - - int max_user_int=4000; - - long init, fin; - double time=0.0; - - MappingObjectInteractivity selected_mapping; - - good_marked=0; - bad_marked=0; - - - if (record_process){ - //Should be an input parameter - //WriteFile writer = new WriteFile("/usr/local/data/DataUMLS/InteractiveProcess/" + interactivityFile); - writer = new WriteFile(interactivityFile); - writer.writeLine("User Actions\tGood\tBad\tStill to ask\tPrecision\tRecall\tFMeasure\tTime Uuser"); - - writer.writeLine(num_user_int + "\t" + good_marked + "\t" + bad_marked + "\t" + orderedMappings2Ask.size() - + "\t" + precision + "\t" + recall + "\t" + Fmeasure + "\t" + 0.0); - - recordResultsPoints.clear(); - recordResultsPoints.add(5); - recordResultsPoints.add(10); - recordResultsPoints.add(20); - recordResultsPoints.add(30); - recordResultsPoints.add(40); - recordResultsPoints.add(50); - recordResultsPoints.add(75); - recordResultsPoints.add(100); - recordResultsPoints.add(125); - recordResultsPoints.add(150); - recordResultsPoints.add(200); - recordResultsPoints.add(250); - recordResultsPoints.add(300); - recordResultsPoints.add(350); - recordResultsPoints.add(400); - recordResultsPoints.add(450); - recordResultsPoints.add(500); - recordResultsPoints.add(600); - recordResultsPoints.add(700); - recordResultsPoints.add(800); - recordResultsPoints.add(900); - recordResultsPoints.add(1000); - recordResultsPoints.add(1250); - recordResultsPoints.add(1500); - recordResultsPoints.add(1750); - recordResultsPoints.add(2000); - recordResultsPoints.add(2500); - recordResultsPoints.add(3000); - } - - - - - //precision and recall with no user - //getPrecisionAndRecall(); - cleanMappingsAndRecordPrecisionAndRecall(); - - - - - - - if (useHeuristics){ - - while (orderedMappings2Ask.size()>0 && num_user_int0 || new2Del.size()>0){ - - if (new2Add.size()>0){ - - mapping = new2Add.pop(); - - //Marks them as deleted and add them to new2Del stack - removeMappingsInConflictWithAddition(mapping); - - } - - - - if (new2Del.size()>0){ - - mapping = new2Del.pop(); - - //Marks them as added and adds them to new2Add stack - addMappingsAmbiguousWithDeletion(mapping); - - } - - - } - - - - } - - - private void reOrderMappings2ask(){ - - //we may not need this method currently - //However for the user interface we will only show mappings in orderedMappings2Ask - - orderedMappings2Ask.clear(); - - //We add mappings to order - for (MappingObjectInteractivity mapping : mapping_manager.getListOfMappingsToAskUser()){ - - //For the GUI we should only order by impact - if (mapping.isRemovedFlagActive() || mapping.isAddedFlagActive()) - continue; - - - orderedMappings2Ask.add(mapping); - - } - - } - - - public void endInteractiveProcess() { - endInteractiveProcess(false); - } - - - @Override - public void endInteractiveProcess(boolean filter) { - - //Add mappings with flag "toadd" and apply heuristics - //Set added mappings or (with scope and confidence>0.5) - for (MappingObjectInteractivity mapping : mapping_manager.getListOfMappingsToAskUser()){ - - if (!filter || //In case we do not want to apply further filtering - mapping.isAddedFlagActive() //User - || (hasScopeAll(mapping) && hasGoodConfidence(mapping) && !mapping.isRemovedFlagActive()) //LogMap heuristics for not remove mappings - ){ - - //SOME MAPPINGS MAY REPRESENT ONLY ONE SIDE - //EITHER THE USER DECIDED TO SPLIT IT or IT WAS D&G - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.L2R) - mapping_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.R2L) - mapping_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - - } - else{ - - mapping_manager.addEquivMapping2DiscardedAnchors(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - - } - } - - - //TODO Clear structures - //mapping_manager.getListOfMappingsToAskUser().clear(); - orderedMappings2Ask.clear(); - mapping_manager.setStringAnchors(); - - } - - - private void setStringMappings(){ - - //Sets anchors (it also clears structure) - mapping_manager.setStringAnchors(); - - - //Set mappings to review - for (int ide1 : mapping_manager.getMappings2Review().keySet()){ - - for (int ide2 : mapping_manager.getMappings2Review().get(ide1)){ - - mapping_manager.addStringAnchor(ide1, ide2); - - } - - } - - //Do not add them - //TODO Add Weakened mappings (only for P&R) - //Note that removed ones are not added - /*for (int ide1 : mapping_manager.getWeakenedDandGAnchors().keySet()){ - - for (int ide2 : mapping_manager.getWeakenedDandGAnchors().get(ide1)){ - - if (mapping_manager.isMappingInConflictWithFixedMappings(ide1, ide2) || - mapping_manager.isMappingInferred(ide1, ide2) || - mapping_manager.isMappingInConflictiveSet(ide1, ide2)){ - continue; - } - - mapping_manager.addStringAnchor(ide1, ide2); - - } - }*/ - - - - - } - - - - - - private void getPrecisionAndRecall() { - - Set intersection; - - //We set current mappings to get provisional P&R - setStringMappings(); - - - intersection=new HashSet(mapping_manager.getStringLogMapMappings()); - intersection.retainAll(mapping_manager.getStringGoldStandardAnchors()); - - precision=((double)intersection.size())/((double)mapping_manager.getStringLogMapMappings().size()); - recall=((double)intersection.size())/((double)mapping_manager.getStringGoldStandardAnchors().size()); - - Fmeasure = (2*recall*precision)/(precision+recall); - - //Sets anchors (it also clears structure) - mapping_manager.setStringAnchors(); - - - } - - - - private void cleanMappingsAndRecordPrecisionAndRecall() throws Exception{ - - - //We add mappings from current interactivity status - for (MappingObjectInteractivity mapping : mapping_manager.getListOfMappingsToAskUser()){ - - if ( - mapping.isAddedFlagActive() //User - || (hasScopeAll(mapping) && hasGoodConfidence(mapping) && !mapping.isRemovedFlagActive()) //LogMap heuristics for not remove mappings - ){ - - mapping_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - mapping_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - - } - } - - //TODO We also add weakened mappings in initial list "assesMappings2AskUser" - //mapping_manager.assesWeakenedMappingsDandG(false, false); - - - //Clean "Mappings2Review" mappings D&G - mapping_assessment.CheckSatisfiabilityOfIntegration_DandG(mapping_manager.getMappings2Review()); //With Fixed mappings! - - - - //With Anchors and clean mappinsg 2 review - getPrecisionAndRecall(); - - ///We clear them - mapping_manager.getMappings2Review().clear(); - - - } - - - - - - - private boolean areMappingsAmbiguous(int ideA, int ideB, int ideAA, int ideBB){ - - - //We have already checked they are not equivalent - if (ideA==ideAA || ideB==ideBB){ - - return true; - - } - - return false; - - } - - - - //private double getConfidence(MappingObjectInteractivity m){ - //return m.getSimilarityList().get(1); - //} - - - - private boolean areMappingsInConflict(int ideA, int ideB, int ideAA, int ideBB){ - - boolean AequivAA=false; - boolean BequivBB=false; - - boolean AcontAA=false; - boolean AAcontA=false; - boolean BcontBB=false; - boolean BBcontB=false; - - boolean AdisjAA=false; - boolean BdisjBB=false; - - boolean conflict=false; - - - AequivAA = index.areEquivalentClasses(ideA, ideAA); - - BequivBB = index.areEquivalentClasses(ideB, ideBB); - - AcontAA = AequivAA || index.isSubClassOf(ideA, ideAA); - - AAcontA = AequivAA || index.isSubClassOf(ideAA, ideA); - - BcontBB = BequivBB || index.isSubClassOf(ideB, ideBB); - - BBcontB = BequivBB || index.isSubClassOf(ideBB, ideB); - - AdisjAA = !AcontAA && !AAcontA && index.areDisjoint(ideA, ideAA); - - BdisjBB = !BcontBB && !BBcontB && index.areDisjoint(ideB, ideBB); - - - conflict = ((AcontAA || AAcontA) && BdisjBB) || ((BcontBB || BBcontB) && AdisjAA); - - return conflict; - - } - - - private boolean isMappingGood(MappingObjectInteractivity m){ - - //TODO we just check link occurrence not dir of mapping - if (mapping_manager.isMappingInGoldStandard( - m.getIdentifierOnto1(), - m.getIdentifierOnto2())) - return true; - - return false; - - } - - - private double getAmbiguityScore(MappingObjectInteractivity m){ - - return m.getSimilarityList().get(0); - - } - - - private void setAmbiguityScore(MappingObjectInteractivity m, double ambiguity){ - - m.getSimilarityList().set(0, ambiguity); - - } - - - private boolean hasGoodConfidence(MappingObjectInteractivity m){ - - return (mapping_manager.getConfidence4Mapping(m.getIdentifierOnto1(), m.getIdentifierOnto2())>Parameters.good_confidence); - - } - - - private boolean hasScopeAll(MappingObjectInteractivity m){ - - return (mapping_manager.extractScopeAll4Mapping(m.getIdentifierOnto1(), m.getIdentifierOnto2())>Parameters.bad_score_scope); - - } - - - private boolean hasScopeAnchors(MappingObjectInteractivity m){ - - return (mapping_manager.extractScopeAnchors4Mapping(m.getIdentifierOnto1(), m.getIdentifierOnto2())>Parameters.bad_score_scope); - - } - - - private double getScopeAll(MappingObjectInteractivity m){ - - return (mapping_manager.extractScopeAll4Mapping(m.getIdentifierOnto1(), m.getIdentifierOnto2())); - - } - - - private double getScopeAnchors(MappingObjectInteractivity m){ - - return (mapping_manager.extractScopeAnchors4Mapping(m.getIdentifierOnto1(), m.getIdentifierOnto2())); - - } - - - - - - - - - - - - - - - - /* - * @deprecated - private void removeAmbiguousMappingsWith(MappingObjectInteractivity added_mapping){ - - - //TODO Check that conf<0.50 and no scope? - - - MappingObjectInteractivity mapping_amb = new MappingObjectInteractivity(-1, -1); - int index_list; - - - - for (int ide2 : mapping_manager.getToAskUserMappings().get(added_mapping.getIdentifierOnto1())){ - - mapping_amb.setIdentifierOnto1(added_mapping.getIdentifierOnto1()); - mapping_amb.setIdentifierOnto2(ide2); - - index_list = mapping_manager.getListOfMappingsToAskUser().indexOf(mapping_amb); - - //Alredy added or removed - if (mapping_manager.getListOfMappingsToAskUser().get(index_list).isAddedFlagActive() || mapping_manager.getListOfMappingsToAskUser().get(index_list).isRemovedFlagActive()) - continue; - - mapping_manager.getListOfMappingsToAskUser().get(index_list).setRemovedFlag(true); - new2Del.push(mapping_manager.getListOfMappingsToAskUser().get(index_list)); - - - } - - for (int ide1 : mapping_manager.getToAskUserMappings().get(added_mapping.getIdentifierOnto2())){ - - mapping_amb.setIdentifierOnto1(ide1); - mapping_amb.setIdentifierOnto2(added_mapping.getIdentifierOnto2()); - - index_list = mapping_manager.getListOfMappingsToAskUser().indexOf(mapping_amb); - - //Alredy added or removed - if (mapping_manager.getListOfMappingsToAskUser().get(index_list).isAddedFlagActive() || mapping_manager.getListOfMappingsToAskUser().get(index_list).isRemovedFlagActive()) - continue; - - mapping_manager.getListOfMappingsToAskUser().get(index_list).setRemovedFlag(true); - new2Del.push(mapping_manager.getListOfMappingsToAskUser().get(index_list)); - - - } - - - - - - }*/ - - - /** - * @deprecated - */ - private void removeConflictiveMappingsWith(MappingObjectInteractivity added_mapping){ - - - //Check mappings in conflict - for (MappingObjectInteractivity mapping_conf : mapping_manager.getListOfMappingsToAskUser()){ - - if (mapping_conf.equals(added_mapping)) - continue; - - //Already removed - if (mapping_conf.isRemovedFlagActive()) - continue; - - - if (areMappingsInConflict( - added_mapping.getIdentifierOnto1(), - added_mapping.getIdentifierOnto2(), - mapping_conf.getIdentifierOnto1(), - mapping_conf.getIdentifierOnto2())){ - - //Alredy removed - if (mapping_conf.isAddedFlagActive()){ - System.err.println("Conflict between added mappings. Shoudl be solved later"); - } - else { - mapping_conf.setRemovedFlag(true); - new2Del.push(mapping_conf); - } - - - } - - } - - - - } - - - /* - * @deprecated - private void addAmbiguousMappingsWith(MappingObjectInteractivity del_mapping){ - - - - MappingObjectInteractivity mapping_amb = new MappingObjectInteractivity(-1, -1); - int index_list; - - //We remove ambiguous mappings - - - for (int ide2 : mapping_manager.getToAskUserMappings().get(del_mapping.getIdentifierOnto1())){ - - mapping_amb.setIdentifierOnto1(del_mapping.getIdentifierOnto1()); - mapping_amb.setIdentifierOnto2(ide2); - - index_list = mapping_manager.getListOfMappingsToAskUser().indexOf(mapping_amb); - - //Alredy added or removed - if (mapping_manager.getListOfMappingsToAskUser().get(index_list).isAddedFlagActive() || mapping_manager.getListOfMappingsToAskUser().get(index_list).isRemovedFlagActive()) - continue; - - //We remove ambiguity index - setAmbiguityScore( - mapping_manager.getListOfMappingsToAskUser().get(index_list), - getAmbiguityScore(mapping_manager.getListOfMappingsToAskUser().get(index_list))-1); - - //No ambiguity any more, scope and good confidence - if (getAmbiguityScore(mapping_manager.getListOfMappingsToAskUser().get(index_list))<=2 && - hasScopeAll(mapping_manager.getListOfMappingsToAskUser().get(index_list)) && - hasGoodConfidence(mapping_manager.getListOfMappingsToAskUser().get(index_list))){ - - mapping_manager.getListOfMappingsToAskUser().get(index_list).setAddedFlag(true); - new2Add.push(mapping_manager.getListOfMappingsToAskUser().get(index_list)); - } - - - } - - for (int ide1 : mapping_manager.getToAskUserMappings().get(del_mapping.getIdentifierOnto2())){ - - mapping_amb.setIdentifierOnto1(ide1); - mapping_amb.setIdentifierOnto2(del_mapping.getIdentifierOnto2()); - - index_list = mapping_manager.getListOfMappingsToAskUser().indexOf(mapping_amb); - - - //Alredy added or removed - if (mapping_manager.getListOfMappingsToAskUser().get(index_list).isAddedFlagActive() || mapping_manager.getListOfMappingsToAskUser().get(index_list).isRemovedFlagActive()) - continue; - - - //We remove ambiguity index - setAmbiguityScore( - mapping_manager.getListOfMappingsToAskUser().get(index_list), - getAmbiguityScore(mapping_manager.getListOfMappingsToAskUser().get(index_list))-1); - - - - //No ambiguity any more, scope and good confidence - if (getAmbiguityScore(mapping_manager.getListOfMappingsToAskUser().get(index_list))<=2 && - hasScopeAll(mapping_manager.getListOfMappingsToAskUser().get(index_list)) && - hasGoodConfidence(mapping_manager.getListOfMappingsToAskUser().get(index_list))){ - - mapping_manager.getListOfMappingsToAskUser().get(index_list).setAddedFlag(true); - new2Add.push(mapping_manager.getListOfMappingsToAskUser().get(index_list)); - } - - - } - - - }*/ - - - - - - - - - /** - * No comparator. for no order of mappings to ask - * @author Ernesto - * - */ - private class NoComparator implements Comparator { - - public int compare(MappingObjectInteractivity m1, MappingObjectInteractivity m2) { - - return -1; - - } - - } - - - - /** - * Comparator - * @author Ernesto - * - */ - private class MappingInteractivityComparator implements Comparator {//extends MappingInteractivityComparator { - - - /** - * @deprecated - * @param m1 - * @param m2 - * @return - */ - public int compare2(MappingObjectInteractivity m1, MappingObjectInteractivity m2) { - - //Ambiguity first - //if (getAmbiguityScore(m1) listOrderedMappings2Ask = - new ArrayList(); - - private IndexManager index; - private MappingManager mapping_manager; - - //private int numberAssessedMappings=0; //directly - //private int remainingMappings=0; - - private boolean apply_heuristics; - private boolean ask_everything; - - /**New mappings (to process) added in interactivity (by user or heuristic)*/ - private Stack new2Add; - /**New mappings (to process) deleted in interactivity (by user or heuristic)*/ - private Stack new2Del; - - - public InteractiveProcessOAEI( - IndexManager index, - MappingManager mapping_manager, - boolean ask_everything, - boolean apply_heuristics){ - - this.index=index; - this.mapping_manager = mapping_manager; - - this.apply_heuristics=apply_heuristics; - this.ask_everything = ask_everything; - - LogOutput.printAlways("Creating ordered mappings to ask to the (simulated) user..."); - createOrderedMappings(); - - if (!ask_everything){ - if (apply_heuristics) - extractAmbiguities(); - - extractConflicts(); - } - - } - - - - - - @Override - public void startInteractiveProcess() { - - new2Add = new Stack(); - new2Del = new Stack(); - - //applyFeedback - //For all elements in the list of mappings to ask! - //Ask oarculo is not decission yet in mapping - //Count assessed directly and by means of conflict - //Exploit method! - for (MappingObjectInteractivity mapping : listOrderedMappings2Ask) { - - if (!mapping.hasDecision()){ - - LogOutput.printAlways("Asking mapping..."); - - if (OracleManager.isMappingValid( - index.getIRIStr4ConceptIndex(mapping.getIdentifierOnto1()), - index.getIRIStr4ConceptIndex(mapping.getIdentifierOnto2()))){ - - mapping.setAddedFlag(true); - mapping.setAssessedFlag(true); - if (!ask_everything) - new2Add.add(mapping); - } - else{ - mapping.setRemovedFlag(true); - mapping.setAssessedFlag(true); - if (!ask_everything) - new2Del.add(mapping); - } - - //Apply automatic decisions - if (!ask_everything) - exploitImpactUserFeedback(); - - - } - - } - - - } - - @Override - public void endInteractiveProcess() { - - for (MappingObjectInteractivity mapping : listOrderedMappings2Ask) { - - if (mapping.isAddedFlagActive()){ - - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.L2R) - mapping_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.R2L) - mapping_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - } - else{ - - //Add them as conflictive - //TODO remaining mappings then apply automatic heuristics... - - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.L2R) - mapping_manager.addSubMapping2ConflictiveAnchors(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.R2L) - mapping_manager.addSubMapping2ConflictiveAnchors(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - - - } - } - - } - - - @Override - public void endInteractiveProcess(boolean filter) { - // TODO Auto-generated method stub - - //not used filter - endInteractiveProcess(); - - } - - - private void createOrderedMappings() { - - TreeSet orderedSet = - new TreeSet(new MappingInteractivityComparator()); - - - for (MappingObjectInteractivity mapping : mapping_manager.getListOfMappingsToAskUser()){ - - orderedSet.add(mapping); - - } - - - //Create ordered list - Iterator it = orderedSet.iterator(); - - while (it.hasNext()){ - listOrderedMappings2Ask.add(it.next()); - } - - - orderedSet.clear(); - - } - - - private void extractAmbiguities(){ - - - for (int i=0; i0 || new2Del.size()>0){ - - if (new2Add.size()>0){ - - mapping = new2Add.pop(); - - //Marks them as deleted and add them to new2Del stack - //removeMappingsInConflictWithAddition(mapping); - - for (int m_ide : mapping.getMappingsInconflict()){ - - listOrderedMappings2Ask.get(m_ide).setRemovedFlag(true); - new2Del.push(listOrderedMappings2Ask.get(m_ide)); - } - - if (apply_heuristics){ - - for (int m_ide : mapping.getAmbiguousMappings()){ - //Only if not decision yet - if (!listOrderedMappings2Ask.get(m_ide).hasDecision()){ - listOrderedMappings2Ask.get(m_ide).setRemovedFlag(true); - new2Del.push(listOrderedMappings2Ask.get(m_ide)); - } - } - } - - - } - - - - if (new2Del.size()>0){ - - mapping = new2Del.pop(); - - if (apply_heuristics){ - - for (int m_ide : mapping.getAmbiguousMappings()){ - //Only if not decision yet - if (!listOrderedMappings2Ask.get(m_ide).hasDecision()){ - listOrderedMappings2Ask.get(m_ide).setAddedFlag(true); - new2Add.push(listOrderedMappings2Ask.get(m_ide)); - } - } - } - - } - - - } - - - - } - - - - - - private boolean areMappingsAmbiguous(int ideA, int ideB, int ideAA, int ideBB){ - - - //We have already checked they are not equivalent - if (ideA==ideAA || ideB==ideBB){ - - return true; - - } - - return false; - - } - - - - //private double getConfidence(MappingObjectInteractivity m){ - //return m.getSimilarityList().get(1); - //} - - - - private boolean areMappingsInConflict(int ideA, int ideB, int ideAA, int ideBB){ - - boolean AequivAA=false; - boolean BequivBB=false; - - boolean AcontAA=false; - boolean AAcontA=false; - boolean BcontBB=false; - boolean BBcontB=false; - - boolean AdisjAA=false; - boolean BdisjBB=false; - - boolean conflict=false; - - - AequivAA = index.areEquivalentClasses(ideA, ideAA); - - BequivBB = index.areEquivalentClasses(ideB, ideBB); - - AcontAA = AequivAA || index.isSubClassOf(ideA, ideAA); - - AAcontA = AequivAA || index.isSubClassOf(ideAA, ideA); - - BcontBB = BequivBB || index.isSubClassOf(ideB, ideBB); - - BBcontB = BequivBB || index.isSubClassOf(ideBB, ideB); - - //over same ontology - AdisjAA = !AcontAA && !AAcontA && (index.areDisjoint(ideA, ideAA));// || index.isDisjointWithDescendants(ideA, ideAA) || index.isDisjointWithDescendants(ideAA, ideA)); - - BdisjBB = !BcontBB && !BBcontB && (index.areDisjoint(ideB, ideBB));// || index.isDisjointWithDescendants(ideB, ideBB) || index.isDisjointWithDescendants(ideBB, ideB)); - - - conflict = ((AcontAA || AAcontA) && BdisjBB) || ((BcontBB || BBcontB) && AdisjAA); - - return conflict; - - } - - - - - - - /** - * No comparator. for no order of mappings to ask - * @author Ernesto - * - */ - private class NoComparator implements Comparator { - - public int compare(MappingObjectInteractivity m1, MappingObjectInteractivity m2) { - - return -1; - - } - - } - - - //Order by.... - - /** - * Comparator - * @author Ernesto - * - */ - private class MappingInteractivityComparator implements Comparator { - - - /** - - * @param m1 - * @param m2 - * @return - */ - public int compare(MappingObjectInteractivity m1, MappingObjectInteractivity m2) { - - return orderByScopeAndLex(m1, m2); - } - - - - - public int orderByScopeAndLex(MappingObjectInteractivity m1, MappingObjectInteractivity m2){ - if (m1.getScope()< m2.getScope()){ - return 1; - } - else if (m1.getScope()==m2.getScope()){ - - if (m1.getLexSim()< m2.getLexSim()){ - return 1; - } - else{ - return -1; - } - - - } - else{ - return -1; - } - } - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessThreshold.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessThreshold.java deleted file mode 100644 index 439da9ac2a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/InteractiveProcessThreshold.java +++ /dev/null @@ -1,349 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.interactive; - -import java.io.BufferedWriter; - -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.util.*; - -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.repair.AnchorAssessment; -import uk.ac.ox.krr.logmap2.utilities.Lib; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.interactive.objects.MappingObjectInteractivity; -import uk.ac.ox.krr.logmap2.io.*; - - - -/** - * - * This method must be integrated within iLogmap with GUI. - * Currently it is not used in LogMap 2 - * @author Yujiao Zhou - * @deprecated - * - */ -public class InteractiveProcessThreshold extends InteractiveProcess -{ - - - boolean considerDiscarded = false; - - int left, right; - private MappingManager m_manager; - private AnchorAssessment m_assessment; - - private List mappings2ask = new ArrayList(); - private Set mappingsAsked = new HashSet(); - - - public InteractiveProcessThreshold(IndexManager index, MappingManager mapping_manager){ - - m_manager = mapping_manager; - m_assessment = new AnchorAssessment(index, m_manager); - - setScore2mappings(); - - int goodcandidate = 0; - for (MappingObjectInteractivity mapping : mappings2ask) - { - if (m_manager.isMappingInGoldStandard( - mapping.getIdentifierOnto1(), - mapping.getIdentifierOnto2())){ - - mapping.setInGSMappings(); - ++goodcandidate; - } - } - - LogOutput.print("total number of good candidates in 2ASK set: " + goodcandidate); - - Collections.sort(mappings2ask, new MappingInteractivityComparator4Similarity()); - - MappingObjectInteractivity mapping; - - try - { - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/auto/users/yzhou/2ask.txt"))); - for (int i = 0; i < mappings2ask.size(); ++i) - { - mapping = mappings2ask.get(i); - writer.write(mapping.getIdentifierOnto1() + " " + mapping.getIdentifierOnto2() + " " - + mapping.getScore() + " " + mapping.isInGSMappings() + "\n"); - } - writer.close(); - } - catch (java.io.IOException e) - { - e.printStackTrace(); - } - - } - - @Override - public void startInteractiveProcess() - { - boundaryDecision(); - - cleanMappingsAndRecordPrecisionAndRecall(); - - LogOutput.print((right - left) + "\t" + (left + 1) + "\t" + right + "\n" - + mappingsAsked.size() + "\t" + mappings2ask.size() + "\n" - + precision + "\n" + recall + "\n" + Fmeasure); - } - - private void boundaryDecision() - { - left = 0; - right = mappings2ask.size() - 1; - int mid; - - while (left < right) - { - mid = (left + right + 1) / 2; - if (review(mid)) - left = mid; - else - right = mid - 1; - } - - int temp = left; - - LogOutput.print("finished 1"); - - right = left; - left = 0; - while (left < right) - { - mid = (left + right) / 2; - if (!review(mid)) - left = mid + 1; - else - right = mid; - } - - right = temp; - LogOutput.print("finished 2"); - - } - - private void markMappingAndAdd2List(MappingObjectInteractivity mapping, boolean inGSMappings) - { - if (inGSMappings){ - mapping.setAddedFlag(true); -// new2Add.add(m); - -// good_marked++; - - //User additions - m_manager.addMappingAddedByUser2Structure(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - m_manager.addMappingAddedByUser2Structure(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - - } - else { - mapping.setRemovedFlag(true); -// new2Del.add(mapping); -// bad_marked++; - } - - } - - private void cleanMappingsAndRecordPrecisionAndRecall() - { - MappingObjectInteractivity mapping; - //We add mappings from current interactivity status - for (int i = left + 1; i <= right; ++i) { - - mapping = mappings2ask.get(i); - if (!mapping.isRemovedFlagActive()) { - - //m_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - //m_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.L2R) - m_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2()); - - if (mapping.getDirMapping()==Utilities.EQ || mapping.getDirMapping()==Utilities.R2L) - m_manager.addSubMapping2Mappings2Review(mapping.getIdentifierOnto2(), mapping.getIdentifierOnto1()); - - } - } - - //We also add weakened mappings - //They are already in initial list - //m_manager.assesWeakenedMappingsDandG(false, false); - - - //Clean "Mappings2Review" mappings D&G - try { - m_assessment.CheckSatisfiabilityOfIntegration_DandG(m_manager.getMappings2Review()); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } //With Fixed mappings! - - - - //With Anchors and clean mappinsg 2 review - getPrecisionAndRecall(); - - ///We clear them - m_manager.getMappings2Review().clear(); - - - } - - private void getPrecisionAndRecall() - { - Set intersection; - - //We set current mappings to get provisional P&R - setStringMappings(); - - - intersection=new HashSet(m_manager.getStringLogMapMappings()); - intersection.retainAll(m_manager.getStringGoldStandardAnchors()); - - precision=((double)intersection.size())/((double)m_manager.getStringLogMapMappings().size()); - recall=((double)intersection.size())/((double)m_manager.getStringGoldStandardAnchors().size()); - - Fmeasure = (2*recall*precision)/(precision+recall); - - //Sets anchors (it also clears structure) - m_manager.setStringAnchors(); - } - - private void setStringMappings() - { - //Sets anchors (it also clears structure) - m_manager.setStringAnchors(); - - - //Set mappings to review - for (int ide1 : m_manager.getMappings2Review().keySet()){ - - for (int ide2 : m_manager.getMappings2Review().get(ide1)){ - - m_manager.addStringAnchor(ide1, ide2); - - } - - } - - - //TODO Add Weakened mappings (only for P&R) - //Note that removed ones are not added - for (int ide1 : m_manager.getWeakenedDandGMappings().keySet()){ - - for (int ide2 : m_manager.getWeakenedDandGMappings().get(ide1)){ - - if (m_manager.isMappingInConflictWithFixedMappings(ide1, ide2) || - m_manager.isMappingInferred(ide1, ide2) || - m_manager.isMappingInConflictiveSet(ide1, ide2)){ - continue; - } - - m_manager.addStringAnchor(ide1, ide2); - - } - } - } - - private boolean review(int index) - { - int mark = 2; - mark = review(index, mark); - - if (index > 0) mark = review(index - 1, mark); - if (mark == 0) return true; - else if (mark == 2) return false; - - if (index + 1 < mappings2ask.size()) mark = review(index + 1, mark); - if (mark == 0) return true; - else return false; - } - - private int review(int index, int mark) - { - MappingObjectInteractivity mapping = mappings2ask.get(index); - boolean flag = mapping.isInGSMappings(); - if (!mappingsAsked.contains(index)) - markMappingAndAdd2List(mapping, flag); - mappingsAsked.add(index); - - return flag ? mark - 1 : mark; - } - - private void setScore2mappings() - { - ; - //Consider mappings 2 ask and discarded as well! - for (MappingObjectInteractivity mapping : m_manager.getListOfMappingsToAskUser()) - { - mapping.setScore(m_manager); - mappings2ask.add(mapping); - } - - if (considerDiscarded){ - MappingObjectInteractivity m; - - for (int ideA : m_manager.getDiscardedMappings().keySet()){ - for (int ideB : m_manager.getDiscardedMappings().get(ideA)){ - - if (ideA -{ - - @Override - public int compare(MappingObjectInteractivity o1, MappingObjectInteractivity o2) - { - return Lib.dcmp(o2.getScore() - o1.getScore()); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/objects/MappingObjectInteractivity.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/objects/MappingObjectInteractivity.java deleted file mode 100644 index ad9dcdd69a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/interactive/objects/MappingObjectInteractivity.java +++ /dev/null @@ -1,211 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.interactive.objects; - -import uk.ac.ox.krr.logmap2.mappings.MappingManager; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObject; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -import java.util.*; - -public class MappingObjectInteractivity extends MappingObject{ - - - private boolean removedFlag=false; //used in heuristics and interactivity - private boolean addedFlag=false; //used in interactivity only - //Important to assess weakened mappings by DandG - //Moreover the user may also decide to split the mapping - private int dirMapping; - - private boolean assessedDirectlyFlag=false; - - //private boolean disjointFlag=false; //used in automatic-interactivity only - //private boolean inGSFlag=false; //used in automatic-interactivity only - - protected List similarityList=new ArrayList(); - - private double m_score; - - private double scope = 0.0; - private double lexSim = 0.0; - - - //They will point to the "list" of mappings - //For precomputed conflicts - private Set mappingsInConflict = new HashSet(); - private Set ambiguousMappings = new HashSet(); - - - - public MappingObjectInteractivity(int ide1, int ide2){ - - this(ide1, ide2, Utilities.EQ); - - } - - public MappingObjectInteractivity(int ide1, int ide2, int dirMapping){ - - ident_onto1 = ide1; - ident_onto2 = ide2; - this.setDirMapping(dirMapping); - - } - - public MappingObjectInteractivity(int ide1, int ide2, int dirMapping, double scope, double lexSim){ - - ident_onto1 = ide1; - ident_onto2 = ide2; - this.setDirMapping(dirMapping); - this.scope = scope; - this.lexSim = lexSim; - - } - - - - public double getScope(){ - return scope; - } - - - public double getLexSim(){ - return lexSim; - } - - - - - public boolean isRemovedFlagActive() { - return removedFlag; - } - - - public void setRemovedFlag(boolean removedFlag) { - this.removedFlag = removedFlag; - if (removedFlag) - this.addedFlag = !removedFlag; - } - - - public boolean isAddedFlagActive() { - return addedFlag; - } - - - public void setAddedFlag(boolean addedFlag) { - this.addedFlag = addedFlag; - if (addedFlag) - this.removedFlag = !addedFlag; - } - - - public boolean hasDecision() { - return addedFlag || removedFlag; - } - - - public boolean isAssessedFlagActive() { - return assessedDirectlyFlag; - } - - public void setAssessedFlag(boolean assessedFlag) { - this.assessedDirectlyFlag = assessedFlag; - } - - - /** - * @return the similarity - */ - public List getSimilarityList() { - return similarityList; - } - - - /** - * @return the similarity - */ - public void addSimilarityValue2List(double value) { - similarityList.add(value); - } - - - public void setScore(MappingManager manager) - { - m_score = manager.getSimWeak4Mapping(ident_onto1, ident_onto2); - - } - - - - - - - public double getScore() - { - return m_score; - } - - private boolean inGSMappings = false; - - public void setInGSMappings() - { - inGSMappings = true; - } - - public boolean isInGSMappings() - { - return inGSMappings; - } - - /** - * @return the dirMapping - */ - public int getDirMapping() { - return dirMapping; - } - - /** - * @param dirMapping the dirMapping to set - */ - public void setDirMapping(int dirMapping) { - this.dirMapping = dirMapping; - } - - - - public Set getMappingsInconflict(){ - return mappingsInConflict; - } - - public Set getAmbiguousMappings(){ - return ambiguousMappings; - } - - - - public void addConflictiveMapping(int mapping_id){ - mappingsInConflict.add(mapping_id); - } - - public void addAmbiguousMapping(int mapping_id){ - ambiguousMappings.add(mapping_id); - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/CopyUtils.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/CopyUtils.java deleted file mode 100644 index b1cc6cd839..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/CopyUtils.java +++ /dev/null @@ -1,286 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -/* - * Copyright 2001-2004 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.StringReader; -import java.io.Writer; - -/** - * - * This class provides static utility methods for buffered - * copying between sources (InputStream, Reader, String and - * byte[]) and destinations (OutputStream, Writer, - * String and byte[]). - * - * - * Unless otherwise noted, these copy methods do not flush or close the - * streams. Often doing so would require making non-portable assumptions about the streams' origin - * and further use. This means that both streams' close() methods must be called after - * copying. if one omits this step, then the stream resources (sockets, file descriptors) are - * released when the associated Stream is garbage-collected. It is not a good idea to rely on this - * mechanism. For a good overview of the distinction between "memory management" and "resource - * management", see this - * UnixReview article. - * - * For byte-to-char methods, a copy variant allows the encoding - * to be selected (otherwise the platform default is used). We would like to - * encourage you to always specify the encoding because relying on the platform - * default can lead to unexpected results. - * - * We don't provide special variants for the copy methods that - * let you specify the buffer size because in modern VMs the impact on speed - * seems to be minimal. We're using a default buffer size of 4 KB. - * - * The copy methods use an internal buffer when copying. It is therefore advisable - * not to deliberately wrap the stream arguments to the copy methods in - * Buffered* streams. For example, don't do the - * following: - * - * copy( new BufferedInputStream( in ), new BufferedOutputStream( out ) ); - * - * The rationale is as follows: - * - * Imagine that an InputStream's read() is a very expensive operation, which would usually suggest - * wrapping in a BufferedInputStream. The BufferedInputStream works by issuing infrequent - * {@link java.io.InputStream#read(byte[] b, int off, int len)} requests on the underlying InputStream, to - * fill an internal buffer, from which further read requests can inexpensively get - * their data (until the buffer runs out). - * However, the copy methods do the same thing, keeping an internal buffer, - * populated by {@link InputStream#read(byte[] b, int off, int len)} requests. Having two buffers - * (or three if the destination stream is also buffered) is pointless, and the unnecessary buffer - * management hurts performance slightly (about 3%, according to some simple experiments). - * - * Behold, intrepid explorers; a map of this class: - *

- *       Method      Input               Output          Dependency
- *       ------      -----               ------          -------
- * 1     copy        InputStream         OutputStream    (primitive)
- * 2     copy        Reader              Writer          (primitive)
- *
- * 3     copy        InputStream         Writer          2
- *
- * 4     copy        Reader              OutputStream    2
- *
- * 5     copy        String              OutputStream    2
- * 6     copy        String              Writer          (trivial)
- *
- * 7     copy        byte[]              Writer          3
- * 8     copy        byte[]              OutputStream    (trivial)
- * 
- * - * Note that only the first two methods shuffle bytes; the rest use these - * two, or (if possible) copy using native Java copy methods. As there are - * method variants to specify the encoding, each row may - * correspond to up to 2 methods. - * - * Origin of code: Apache Avalon (Excalibur) - * - * @author Peter Donald - * @author Jeff Turner - * @author Matthew Hawthorne - */ -public class CopyUtils -{ - /** - * Instances should NOT be constructed in standard programming. - */ - private CopyUtils() - { - } - - /** - * Copy bytes from a byte[] to an OutputStream. - * @param input the byte array to read from - * @param output the OutputStream to write to - * @throws IOException In case of an I/O problem - */ - public static void copy(byte[] input, OutputStream output) throws IOException - { - output.write(input); - } - - /** - * Copy and convert bytes from a byte[] to chars on a - * Writer. - * The platform's default encoding is used for the byte-to-char conversion. - * @param input the byte array to read from - * @param output the Writer to write to - * @throws IOException In case of an I/O problem - */ - public static void copy(byte[] input, Writer output) throws IOException - { - ByteArrayInputStream in = new ByteArrayInputStream(input); - copy(in, output); - } - - /** - * Copy and convert bytes from a byte[] to chars on a - * Writer, using the specified encoding. - * @param input the byte array to read from - * @param output the Writer to write to - * @param encoding The name of a supported character encoding. See the - * IANA - * Charset Registry for a list of valid encoding types. - * @throws IOException In case of an I/O problem - */ - public static void copy(byte[] input, Writer output, String encoding) throws IOException - { - ByteArrayInputStream in = new ByteArrayInputStream(input); - copy(in, output, encoding); - } - - /** - * Copy bytes from an InputStream to an OutputStream. - * @param input the InputStream to read from - * @param output the OutputStream to write to - * @return the number of bytes copied - * @throws IOException In case of an I/O problem - */ - public static int copy(InputStream input, OutputStream output) throws IOException - { - byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; - int count = 0; - int n = 0; - while (-1 != (n = input.read(buffer))) - { - output.write(buffer, 0, n); - count += n; - } - return count; - } - - /** - * Copy chars from a Reader to a Writer. - * @param input the Reader to read from - * @param output the Writer to write to - * @return the number of characters copied - * @throws IOException In case of an I/O problem - */ - public static int copy(Reader input, Writer output) throws IOException - { - char[] buffer = new char[DEFAULT_BUFFER_SIZE]; - int count = 0; - int n = 0; - while (-1 != (n = input.read(buffer))) - { - output.write(buffer, 0, n); - count += n; - } - return count; - } - - /** - * Copy and convert bytes from an InputStream to chars on a - * Writer. - * The platform's default encoding is used for the byte-to-char conversion. - * @param input the InputStream to read from - * @param output the Writer to write to - * @throws IOException In case of an I/O problem - */ - public static void copy(InputStream input, Writer output) throws IOException - { - InputStreamReader in = new InputStreamReader(input); - copy(in, output); - } - - /** - * Copy and convert bytes from an InputStream to chars on a - * Writer, using the specified encoding. - * @param input the InputStream to read from - * @param output the Writer to write to - * @param encoding The name of a supported character encoding. See the - * IANA - * Charset Registry for a list of valid encoding types. - * @throws IOException In case of an I/O problem - */ - public static void copy(InputStream input, Writer output, String encoding) throws IOException - { - InputStreamReader in = new InputStreamReader(input, encoding); - copy(in, output); - } - - /** - * Serialize chars from a Reader to bytes on an - * OutputStream, and flush the OutputStream. - * @param input the Reader to read from - * @param output the OutputStream to write to - * @throws IOException In case of an I/O problem - */ - public static void copy(Reader input, OutputStream output) throws IOException - { - OutputStreamWriter out = new OutputStreamWriter(output); - copy(input, out); - // XXX Unless anyone is planning on rewriting OutputStreamWriter, we have to flush here. - out.flush(); - } - - /** - * Serialize chars from a String to bytes on an OutputStream, and - * flush the OutputStream. - * @param input the String to read from - * @param output the OutputStream to write to - * @throws IOException In case of an I/O problem - */ - public static void copy(String input, OutputStream output) throws IOException - { - StringReader in = new StringReader(input); - OutputStreamWriter out = new OutputStreamWriter(output); - copy(in, out); - // XXX Unless anyone is planning on rewriting OutputStreamWriter, we have to flush here. - out.flush(); - } - - /** - * Copy chars from a String to a Writer. - * @param input the String to read from - * @param output the Writer to write to - * @throws IOException In case of an I/O problem - */ - public static void copy(String input, Writer output) throws IOException - { - output.write(input); - } - - /** - * The name says it all. - */ - private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatAlignmentFormat.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatAlignmentFormat.java deleted file mode 100644 index 4eed3704f5..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatAlignmentFormat.java +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.io.WriteFile; - -public class FlatAlignmentFormat extends OutputMappingsFormat { - - WriteFile writer; - - - public FlatAlignmentFormat(String output_file_str) throws Exception{ - super(output_file_str); - - setOutput(); - - } - - protected void setOutput() throws Exception { - - //System.out.println("lala"); - writer = new WriteFile(output_file); - - - } - - - public void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf, Utilities.CLASSES_STR); - } - - public void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf, Utilities.DATAPROPERTIES_STR); - } - - public void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf, Utilities.OBJECTPROPERTIES_STR); - } - - public void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, Utilities.EQ, conf, Utilities.INSTANCES_STR); - } - - - /** - * only for statistics - */ - public void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf, String inGS) throws Exception { - - //double rounded_conf = (double)Math.round(conf*100.0)/100.0; - - String line = iri_str1 + "|" + iri_str2; - - if (dir_mapping==Utilities.EQ){ - line=line+"|="; - } - else if (dir_mapping==Utilities.L2R){ - line=line+"|<"; - } - else{ //if (dir_mapping==Utilities.R2L){ - line=line+"|>"; - } - - line=line+"|"+getRoundConfidence(conf); - - line=line+"|"+inGS; - - writer.writeLine(line); - } - - - /** - * only for instance statistics - */ - public void addInstanceMapping2Output(String iri_str1, String iri_str2, - String rel_mapping, double lex_sim, double comp_factor, double scope) throws Exception { - - //double rounded_conf = (double)Math.round(conf*100.0)/100.0; - - String line = iri_str1 + "|" + iri_str2 + "|" + lex_sim + "|" + comp_factor + "|" + scope; - - writer.writeLine(line); - - } - - - - private void addMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf, String typeMapping) throws Exception{ - - //double rounded_conf = (double)Math.round(conf*100.0)/100.0; - - String line = iri_str1 + "|" + iri_str2; - - if (dir_mapping==Utilities.EQ){ - line=line+"|="; - } - else if (dir_mapping==Utilities.L2R){ - line=line+"|<"; - } - else{ //if (dir_mapping==Utilities.R2L){ - line=line+"|>"; - } - - line=line+"|"+getRoundConfidence(conf); - - line=line+"|"+typeMapping; - - writer.writeLine(line); - - } - - - public void saveOutputFile() throws Exception { - - writer.closeBuffer(); - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatFormat2OAEIRDFAlignment.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatFormat2OAEIRDFAlignment.java deleted file mode 100644 index ff3f1b74d9..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatFormat2OAEIRDFAlignment.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -public class FlatFormat2OAEIRDFAlignment { - - - public FlatFormat2OAEIRDFAlignment(){ - - - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatTSVAlignmentFormat.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatTSVAlignmentFormat.java deleted file mode 100644 index b2f5bf236e..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/FlatTSVAlignmentFormat.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.io.WriteFile; - -/** - * Used in the IM track - * @author ernesto - * - */ -public class FlatTSVAlignmentFormat extends OutputMappingsFormat { - - WriteFile writer; - - - public FlatTSVAlignmentFormat(String output_file_str) throws Exception{ - super(output_file_str); - - setOutput(); - - } - - protected void setOutput() throws Exception { - - //System.out.println("lala"); - writer = new WriteFile(output_file); - - - } - - - public void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf, Utilities.CLASSES_STR); - } - - public void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf, Utilities.DATAPROPERTIES_STR); - } - - public void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf, Utilities.OBJECTPROPERTIES_STR); - } - - public void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, Utilities.EQ, conf, Utilities.INSTANCES_STR); - } - - - - private void addMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf, String typeMapping) throws Exception{ - - String line = iri_str1 + "\t" + iri_str2 + "\t" + getRoundConfidence(conf); - - writer.writeLine(line); - - } - - - public void saveOutputFile() throws Exception { - - writer.closeBuffer(); - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/LogOutput.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/LogOutput.java deleted file mode 100644 index 143dd314c6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/LogOutput.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import java.util.logging.Level; -import java.util.logging.Logger; - - - -public class LogOutput { - - //assumes the current class is called logger - private final static Logger LOGGER = Logger.getLogger(LogOutput.class.getName()); - - - private static boolean show_output=false; - private static boolean show_output_always=false; - - - public static void setLoggerLevel(Level level){ - LOGGER.setLevel(level); - } - - - - public static void print(double d){ - if (show_output) - print(String.valueOf(d)); - } - - public static void print(int i){ - if (show_output) - print(String.valueOf(i)); - } - - - public static void print(String str){ - - if (show_output) - System.out.println(str); - - } - - public static void printError(String str){ - - if (show_output || show_output_always) - System.err.println(str); - - } - - - public static void printStatistics(String str){ - LOGGER.log(Level.INFO, str); - } - - - - public static void showOutpuLog(boolean show){ - show_output=show; - } - - public static void showOutpuLogAlways(boolean show){ - show_output_always=show; - } - - public static void printAlways(String str){ - if (show_output_always) - System.out.println(str); - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIAlignmentOutput.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIAlignmentOutput.java deleted file mode 100644 index 603eeb345c..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIAlignmentOutput.java +++ /dev/null @@ -1,158 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import java.io.File; - -import java.io.FileWriter; -import java.net.URL; - -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * Class used as ouptut for the OAEI challenge - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 11, 2011 - * - */ -public class OAEIAlignmentOutput extends OutputMappingsFormat { - - - File alignmentFile; - FileWriter fw; - - /** - * Same format than OAEIRDFAlignmentFormat, but with different ouput. - * SEALS requires the creation of a temporal file and returning its URL - * @param name - */ - public OAEIAlignmentOutput(String name, String oiri1, String oiri2) throws Exception{ - super(name); - - setOutput(); - - printHeader(oiri1, oiri2); - - } - - - protected void setOutput() throws Exception { - - alignmentFile = File.createTempFile(output_file, ".rdf"); - fw = new FileWriter(alignmentFile); - - - } - - - private void printHeader(String oiri1, String oiri2) throws Exception{ - fw.write("\n"); - - fw.write("\n"); - - fw.write("\n"); - - fw.write("\n"); - fw.write("yes\n"); - fw.write("0\n"); - fw.write("??\n"); - - fw.write("" + oiri1 +"\n"); - fw.write("" + oiri2 +"\n"); - fw.write("" + oiri1 +"\n"); - fw.write("" + oiri2 +"\n"); - - } - - private void printTail() throws Exception{ - - fw.write("\n"); - fw.write("\n"); - - } - - - - public void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, Utilities.EQ, conf); - } - - - - private void addMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - - fw.write("\n"); - fw.write("\t\n"); - - fw.write("\t\t\n"); - fw.write("\t\t\n"); - - fw.write("\t\t" + getRoundConfidence(conf) + "\n"); - - if (dir_mapping==Utilities.EQ){ - - fw.write("\t\t=\n"); - - } - else if (dir_mapping==Utilities.L2R){ //Subclass - - fw.write("\t\t<\n"); - } - - else{ //if (dir_mapping==Utilities.R2L){ //Superclass - - fw.write("\t\t>\n"); - - } - - fw.write("\t\n"); - fw.write("\n"); - - } - - - public void saveOutputFile() throws Exception{ - - printTail(); - - fw.flush(); - fw.close(); - - } - - public URL returnAlignmentFile() throws Exception{ - return alignmentFile.toURI().toURL(); - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIRDFAlignmentFormat.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIRDFAlignmentFormat.java deleted file mode 100644 index 44c2162a71..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OAEIRDFAlignmentFormat.java +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.io.WriteFile; - - -/** - * RDF Alignment format - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 11, 2011 - * - */ -public class OAEIRDFAlignmentFormat extends OutputMappingsFormat { - - WriteFile writer; - - - public OAEIRDFAlignmentFormat(String output_file_str, String oiri1, String oiri2) throws Exception{ - super(output_file_str); - - setOutput(); - - printHeader(oiri1, oiri2); - - } - - - protected void setOutput() throws Exception { - - writer = new WriteFile(output_file); - - - } - - - private void printHeader(String oiri1, String oiri2){ - writer.writeLine(""); - - writer.writeLine(""); - - writer.writeLine(""); - - writer.writeLine(""); - writer.writeLine("yes"); - writer.writeLine("0"); - writer.writeLine("??"); - - writer.writeLine("" + oiri1 +""); - writer.writeLine("" + oiri2 +""); - writer.writeLine("" + oiri1 +""); - writer.writeLine("" + oiri2 +""); - - } - - private void printTail(){ - - writer.writeLine(""); - writer.writeLine(""); - - } - - - public void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, Utilities.EQ, conf); - } - - - - private void addMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) { - - writer.writeLine(""); - writer.writeLine("\t"); - - writer.writeLine("\t\t"); - writer.writeLine("\t\t"); - - writer.writeLine("\t\t" + getRoundConfidence(conf) + ""); - - if (dir_mapping==Utilities.EQ){ - - writer.writeLine("\t\t="); - - } - else if (dir_mapping==Utilities.L2R){ //Subclass - - writer.writeLine("\t\t<"); - } - - else{ //if (dir_mapping==Utilities.R2L){ //Superclass - - writer.writeLine("\t\t>"); - - } - - writer.writeLine("\t"); - writer.writeLine(""); - - } - - - public void saveOutputFile() throws Exception { - - printTail(); - - writer.closeBuffer(); - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWL2RDFAlignment.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWL2RDFAlignment.java deleted file mode 100644 index 2d35d8ac92..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWL2RDFAlignment.java +++ /dev/null @@ -1,464 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import org.semanticweb.owlapi.apibinding.OWLManager; - -import org.semanticweb.owlapi.model.*; - - -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * - * This class transforms mappings files in OWL format to the OAEI RDF Alignment - * - * @author Ernesto Jimenez-Ruiz - * - */ -public class OWL2RDFAlignment { - - protected OWLOntologyManager managerOnto; - protected OWLOntology onto; - - protected String iri_onto1; - protected String iri_onto2; - - protected double conf = 100.0; - - - OutPutFilesManager outPutFilesManager = new OutPutFilesManager(); - - - public OWL2RDFAlignment( - String owl_file_path, - String oaei_file_path, - String iri_onto1, - String iri_onto2) throws Exception { - - - this.iri_onto1 = iri_onto1; - this.iri_onto2 = iri_onto2; - - - - - outPutFilesManager.createOutFiles( - oaei_file_path, - OutPutFilesManager.OAEIFormat, - iri_onto1, - iri_onto2); - - System.out.println("Load ontology: "); - loadOWLMappings(owl_file_path); - - outPutFilesManager.closeAndSaveFiles(); - - } - - - - private void loadOWLMappings(String phy_iri_onto) throws Exception{ - - managerOnto = OWLManager.createOWLOntologyManager(); - - //If import cannot be loaded - managerOnto.setSilentMissingImportsHandling(true); - - onto = managerOnto.loadOntology(IRI.create(phy_iri_onto)); - - OWLAxiomVisitor mVisitor = new MappingVisitor(); - - for (OWLAxiom ax : onto.getAxioms()){ - - ax.accept(mVisitor); - } - - - - } - - - - - - - /** - * @param args - */ - public static void main(String[] args) { - //TODO - //System.out.println("Hola"); - //System.err.println("Hola"); - - String pair_path; - String pair_path_out; - - String rootPath = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/"; - String irirootPath = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/"; - - String fma = "http://bioontology.org/projects/ontologies/fma/fmaOwlDlComponent_2_0"; - String nci = "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl"; - String snmd = "http://www.ihtsdo.org/snomed"; - - - try{ - - //FMA 2 NCI - pair_path = irirootPath + "FMA2NCI/UMLS_debugging/FMA2NCI_original_UMLS_mappings.owl"; - pair_path_out = rootPath + "FMA2NCI/UMLS_debugging/FMA2NCI_original_UMLS_mappings"; - new OWL2RDFAlignment(pair_path, pair_path_out, fma, nci); - - - pair_path = irirootPath + "FMA2SNOMED/UMLS_debugging/FMA2SNMD_original_UMLS_mappings.owl"; - pair_path_out = rootPath + "FMA2SNOMED/UMLS_debugging/FMA2SNMD_original_UMLS_mappings"; - new OWL2RDFAlignment(pair_path, pair_path_out, fma, snmd); - - pair_path = irirootPath + "SNOMED2NCI/UMLS_debugging/SNMD2NCI_original_UMLS_mappings.owl"; - pair_path_out = rootPath + "SNOMED2NCI/UMLS_debugging/SNMD2NCI_original_UMLS_mappings"; - new OWL2RDFAlignment(pair_path, pair_path_out, snmd, nci); - - - pair_path = irirootPath + "FMA2NCI/UMLS_debugging/FMA2NCI_repaired_UMLS_mappings.owl"; - pair_path_out = rootPath + "FMA2NCI/UMLS_debugging/FMA2NCI_repaired_UMLS_mappings"; - new OWL2RDFAlignment(pair_path, pair_path_out, fma, nci); - - pair_path = irirootPath + "FMA2SNOMED/UMLS_debugging/FMA2SNMD_repaired_UMLS_mappings.owl"; - pair_path_out = rootPath + "FMA2SNOMED/UMLS_debugging/FMA2SNMD_repaired_UMLS_mappings"; - new OWL2RDFAlignment(pair_path, pair_path_out, fma, snmd); - - pair_path = irirootPath + "SNOMED2NCI/UMLS_debugging/SNMD2NCI_repaired_UMLS_mappings.owl"; - pair_path_out = rootPath + "SNOMED2NCI/UMLS_debugging/SNMD2NCI_repaired_UMLS_mappings"; - new OWL2RDFAlignment(pair_path, pair_path_out, snmd, nci); - - } - catch (Exception e){ - e.printStackTrace(); - } - - - - - } - - - - public class MappingVisitor implements OWLAxiomVisitor { - - - - private boolean isFromOnto1(String iri1){ - if (Utilities.getNameSpaceFromURI(iri1).equals(iri_onto1)){ - return true; - } - return false; - } - - - - - public void visit(OWLSubClassOfAxiom axiom) { - - String iri1 = axiom.getSubClass().asOWLClass().getIRI().toString(); - String iri2 = axiom.getSuperClass().asOWLClass().getIRI().toString(); - - try{ - if (isFromOnto1(iri1)){ - - outPutFilesManager.addClassMapping2Files( - iri1, - iri2, - Utilities.L2R, - conf); - } - else { - outPutFilesManager.addClassMapping2Files( - iri2, - iri1, - Utilities.R2L, - conf); - } - - } - catch (Exception e){ - e.printStackTrace(); - } - - - } - - - public void visit(OWLEquivalentClassesAxiom axiom) { - - - String iri1 = axiom.getClassExpressionsAsList().get(0).asOWLClass().getIRI().toString(); - String iri2 = axiom.getClassExpressionsAsList().get(1).asOWLClass().getIRI().toString(); - - try{ - if (isFromOnto1(iri1)){ - - outPutFilesManager.addClassMapping2Files( - iri1, - iri2, - Utilities.EQ, - conf); - } - else { - outPutFilesManager.addClassMapping2Files( - iri2, - iri1, - Utilities.EQ, - conf); - } - - } - catch (Exception e){ - e.printStackTrace(); - } - - } - - - public void visit(OWLEquivalentObjectPropertiesAxiom axiom) { - - } - - public void visit(OWLSubObjectPropertyOfAxiom axiom) { - - } - - public void visit(OWLSubDataPropertyOfAxiom axiom) { - - } - - public void visit(OWLEquivalentDataPropertiesAxiom axiom) { - - } - - @Override - public void visit(OWLAnnotationAssertionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLSubAnnotationPropertyOfAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLAnnotationPropertyDomainAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLAnnotationPropertyRangeAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDeclarationAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLNegativeObjectPropertyAssertionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLAsymmetricObjectPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLReflexiveObjectPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDisjointClassesAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDataPropertyDomainAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLObjectPropertyDomainAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLNegativeDataPropertyAssertionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDifferentIndividualsAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDisjointDataPropertiesAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDisjointObjectPropertiesAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLObjectPropertyRangeAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLObjectPropertyAssertionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLFunctionalObjectPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDisjointUnionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLSymmetricObjectPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDataPropertyRangeAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLFunctionalDataPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLClassAssertionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDataPropertyAssertionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLTransitiveObjectPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLIrreflexiveObjectPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLInverseFunctionalObjectPropertyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLSameIndividualAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLSubPropertyChainOfAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLInverseObjectPropertiesAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLHasKeyAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(OWLDatatypeDefinitionAxiom arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void visit(SWRLRule arg0) { - // TODO Auto-generated method stub - - } - - - - - } - - -} - - - - - - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWLAlignmentFormat.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWLAlignmentFormat.java deleted file mode 100644 index 47244da586..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OWLAlignmentFormat.java +++ /dev/null @@ -1,342 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; - - -import java.util.List; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.AddAxiom; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAnnotation; -import org.semanticweb.owlapi.model.OWLAnnotationProperty; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - - -public class OWLAlignmentFormat extends OutputMappingsFormat { - - - List listAxioms2Add= new ArrayList(); - - - - OWLOntologyManager managerMappingsOnto; - OWLOntology mappingsOnto; - OWLDataFactory factory; - - String logical_iri="http://www.cs.ox.ac.uk/isg/projects/LogMap/mappings.owl"; - - Set indivSet = new HashSet(); - - Set annSet = new HashSet(); - //String mappings_IRI="http://www.cs.ox.ac.uk/ontologies/oaei/owl/mappings.owl"; - String iri_measure_str = logical_iri + "#measure"; - String iri_entity1_str = logical_iri + "#entity1"; - String iri_entity2_str = logical_iri + "#entity2"; - String iri_relation_str = logical_iri + "#relation"; - - - - public OWLAlignmentFormat(String output_file_str) throws Exception{ - super(output_file_str); - - setOutput(); - - //TODO: add annotation with confidence - } - - /** - * Sets the manager and onto for OWL ontology - */ - protected void setOutput() throws Exception{ - - //managerMappingsOnto = OWLManager.createOWLOntologyManager(); - managerMappingsOnto = SynchronizedOWLManager.createOWLOntologyManager(); - mappingsOnto = managerMappingsOnto.createOntology(IRI.create(logical_iri)); - - factory = managerMappingsOnto.getOWLDataFactory(); - - } - - - private OWLAxiom createEquivalenceMapping(OWLClass cls1, OWLClass cls2, Set annotations){ - - return factory.getOWLEquivalentClassesAxiom(cls1, cls2, annotations); - - } - - - private OWLAxiom createDataPropertyEquivalenceMapping(OWLDataProperty dprop1, OWLDataProperty dprop2, Set annotations){ - - return factory.getOWLEquivalentDataPropertiesAxiom(dprop1, dprop2, annotations); - - } - - private OWLAxiom createObjectPropertyEquivalenceMapping(OWLObjectProperty oprop1, OWLObjectProperty oprop2, Set annotations){ - - return factory.getOWLEquivalentObjectPropertiesAxiom(oprop1, oprop2, annotations); - - } - - - private OWLAxiom createSubClassOfMapping(OWLClass cls1, OWLClass cls2, Set annotations){ - - return factory.getOWLSubClassOfAxiom(cls1, cls2, annotations); - - } - - - private OWLAxiom createSubDataPropertyMapping(OWLDataProperty dprop1, OWLDataProperty dprop2, Set annotations){ - - return factory.getOWLSubDataPropertyOfAxiom(dprop1, dprop2, annotations); - - } - - private OWLAxiom createSubObjectPropertyMapping(OWLObjectProperty oprop1, OWLObjectProperty oprop2, Set annotations){ - - return factory.getOWLSubObjectPropertyOfAxiom(oprop1, oprop2, annotations); - - } - - - private OWLAxiom createSuperClassOfMapping(OWLClass cls1, OWLClass cls2, Set annotations){ - - return factory.getOWLSubClassOfAxiom(cls2, cls1, annotations); - - } - - private OWLAxiom createSuperDataPropertyMapping(OWLDataProperty dprop1, OWLDataProperty dprop2, Set annotations){ - - return factory.getOWLSubDataPropertyOfAxiom(dprop2, dprop1, annotations); - - } - - private OWLAxiom createSuperObjectPropertyMapping(OWLObjectProperty oprop1, OWLObjectProperty oprop2, Set annotations){ - - return factory.getOWLSubObjectPropertyOfAxiom(oprop2, oprop1, annotations); - - } - - private OWLAxiom createSameIndividualMapping(OWLNamedIndividual indiv1, OWLNamedIndividual indiv2, Set annotations){ - - indivSet.clear(); - indivSet.add(indiv1); - indivSet.add(indiv2); - - return factory.getOWLSameIndividualAxiom(indivSet, annotations); - } - - - - private Set getAnnotations4Axiom(String iri1, String iri2, double confidence, String relation){ - - OWLLiteral confidence_literal; - OWLAnnotation ann_measure; - OWLAnnotationProperty ann_property; - - OWLLiteral ent1_literal; - OWLAnnotation ann_ent1; - OWLAnnotationProperty ann_property_ent1; - - OWLLiteral ent2_literal; - OWLAnnotation ann_ent2; - OWLAnnotationProperty ann_property_ent2; - - OWLLiteral relation_literal; - OWLAnnotation ann_relation; - OWLAnnotationProperty ann_property_relation; - - ann_property = factory.getOWLAnnotationProperty(IRI.create(iri_measure_str)); - confidence_literal = factory.getOWLLiteral(confidence); - ann_measure = factory.getOWLAnnotation(ann_property, confidence_literal); - - ann_property_ent1 = factory.getOWLAnnotationProperty(IRI.create(iri_entity1_str)); - ent1_literal = factory.getOWLLiteral(iri1); - ann_ent1 = factory.getOWLAnnotation(ann_property_ent1, ent1_literal); - - ann_property_ent2 = factory.getOWLAnnotationProperty(IRI.create(iri_entity2_str)); - ent2_literal = factory.getOWLLiteral(iri2); - ann_ent2 = factory.getOWLAnnotation(ann_property_ent2, ent2_literal); - - ann_property_relation = factory.getOWLAnnotationProperty(IRI.create(iri_relation_str)); - relation_literal = factory.getOWLLiteral(relation); - ann_relation = factory.getOWLAnnotation(ann_property_relation, relation_literal); - - - //Annotations are added to the axiom - annSet.clear(); - annSet.add(ann_measure); - annSet.add(ann_ent1); - annSet.add(ann_ent2); - annSet.add(ann_relation); - - - return annSet; - - - - } - - - /** - * Creates OWL axioms for mapping and adds it to the list - */ - public void addClassMapping2Output(String iri1, String iri2, int dir_mapping, double conf) { - - if (dir_mapping==Utilities.EQ){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createEquivalenceMapping( - factory.getOWLClass(IRI.create(iri1)), - factory.getOWLClass(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, "=")))); - } - else if (dir_mapping==Utilities.L2R){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSubClassOfMapping( - factory.getOWLClass(IRI.create(iri1)), - factory.getOWLClass(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, "<")))); - } - else{ //if (dir_mapping==Utilities.R2L){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSuperClassOfMapping( - factory.getOWLClass(IRI.create(iri1)), - factory.getOWLClass(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, ">")))); - } - } - - - /** - * Creates OWL axioms for mapping and adds it to the list - */ - public void addDataPropMapping2Output(String iri1, String iri2, int dir_mapping, double conf) { - - if (dir_mapping==Utilities.EQ){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createDataPropertyEquivalenceMapping( - factory.getOWLDataProperty(IRI.create(iri1)), - factory.getOWLDataProperty(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, "=")))); - } - else if (dir_mapping==Utilities.L2R){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSubDataPropertyMapping( - factory.getOWLDataProperty(IRI.create(iri1)), - factory.getOWLDataProperty(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, "<")))); - } - else{ //if (dir_mapping==Utilities.R2L){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSuperDataPropertyMapping( - factory.getOWLDataProperty(IRI.create(iri1)), - factory.getOWLDataProperty(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, ">")))); - } - } - - - - /** - * Creates OWL axioms for mapping and adds it to the list - */ - public void addObjPropMapping2Output(String iri1, String iri2, int dir_mapping, double conf) { - - if (dir_mapping==Utilities.EQ){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createObjectPropertyEquivalenceMapping( - factory.getOWLObjectProperty(IRI.create(iri1)), - factory.getOWLObjectProperty(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, "=")))); - } - else if (dir_mapping==Utilities.L2R){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSubObjectPropertyMapping( - factory.getOWLObjectProperty(IRI.create(iri1)), - factory.getOWLObjectProperty(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, "<")))); - } - else{ //if (dir_mapping==Utilities.R2L){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSuperObjectPropertyMapping( - factory.getOWLObjectProperty(IRI.create(iri1)), - factory.getOWLObjectProperty(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, ">")))); - } - } - - - public void addInstanceMapping2Output(String iri1, String iri2, double conf) throws Exception { - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSameIndividualMapping( - factory.getOWLNamedIndividual(IRI.create(iri1)), - factory.getOWLNamedIndividual(IRI.create(iri2)), - getAnnotations4Axiom(iri1, iri2, conf, "=")))); - } - - - - - /** - * Saves owl ontology with mappings - */ - public void saveOutputFile() throws Exception{ - - managerMappingsOnto.applyChanges(listAxioms2Add); - managerMappingsOnto.saveOntology(mappingsOnto, new RDFXMLOntologyFormat(), IRI.create(output_file)); - - } - - public OWLOntology getOWLOntology() throws Exception{ - managerMappingsOnto.applyChanges(listAxioms2Add); - return mappingsOnto; - - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OutPutFilesManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OutPutFilesManager.java deleted file mode 100644 index 35daca0612..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/OutPutFilesManager.java +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import java.util.Vector; - -/** - * - * Manages the output mapping file formats: OWL, TXT, RDF alignment - * - * @author Ernesto - * - */ -public class OutPutFilesManager { - - public static final int OWLFormat=0; - public static final int OAEIFormat=1; - public static final int FlatFormat=2; - public static final int FlatTSVFormat=3; - public static final int AllFormats=4; - - private Vector file_formats = new Vector(); - - - public void createOutFiles(String output_file, int file_type, String oiri1, String oiri2) throws Exception{ - - file_formats.clear(); - - if (file_type==OWLFormat){ - file_formats.add(new OWLAlignmentFormat("file:"+output_file+".owl")); - } - else if (file_type==OAEIFormat){ - file_formats.add(new OAEIRDFAlignmentFormat(output_file+".rdf", oiri1, oiri2)); - } - else if (file_type==FlatFormat){ - file_formats.add(new FlatAlignmentFormat(output_file+".txt")); - } - else if (file_type==FlatTSVFormat){ - file_formats.add(new FlatAlignmentFormat(output_file+".tsv")); - } - else { //if (file_type==AllFormat){ - file_formats.add(new OWLAlignmentFormat("file:"+output_file+".owl")); - file_formats.add(new OAEIRDFAlignmentFormat(output_file+".rdf", oiri1, oiri2)); - file_formats.add(new FlatAlignmentFormat(output_file+".txt")); - file_formats.add(new FlatTSVAlignmentFormat(output_file+".tsv")); - } - - //Already in constructor - //for (int i=0; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import java.util.Vector; - -/** - * Static Class: not recommended for LogMap web service - * Manages the output - * - * @author Ernesto - * - */ -public class OutPutFilesManagerStatic { - - public static final int OWLFormat=0; - public static final int OAEIFormat=1; - public static final int FlatFormat=2; - public static final int AllFormats=3; - - private static Vector file_formats = new Vector(); - - - public static void createOutFiles(String output_file, int file_type, String oiri1, String oiri2) throws Exception{ - - file_formats.clear(); - - if (file_type==OWLFormat){ - file_formats.add(new OWLAlignmentFormat("file:"+output_file+".owl")); - } - else if (file_type==OAEIFormat){ - file_formats.add(new OAEIRDFAlignmentFormat(output_file+".rdf", oiri1, oiri2)); - } - else if (file_type==FlatFormat){ - file_formats.add(new FlatAlignmentFormat(output_file+".txt")); - } - else { //if (file_type==AllFormat){ - file_formats.add(new OWLAlignmentFormat("file:"+output_file+".owl")); - file_formats.add(new OAEIRDFAlignmentFormat(output_file+".rdf", oiri1, oiri2)); - file_formats.add(new FlatAlignmentFormat(output_file+".txt")); - } - - //Already in constructor - //for (int i=0; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - - -public abstract class OutputMappingsFormat { - - protected String output_file; - - - protected OutputMappingsFormat(String output_file_str){ - - output_file=output_file_str; - - } - - - protected abstract void setOutput() throws Exception; - - - //Only for flat file format to give statistics - protected void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf, String inGS) throws Exception { - - } - - protected abstract void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception; - - protected abstract void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception; - - protected abstract void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception; - - protected abstract void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception; - - protected abstract void saveOutputFile() throws Exception; - - - /** - * Rounded and shifted to [0-1] interval - * @param conf - * @return - */ - protected double getRoundConfidence(double conf){ - return (double)Math.round(conf*100.0)/100.0; //Only two decimals - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/ReadFile.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/ReadFile.java deleted file mode 100644 index 86cf74ea96..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/ReadFile.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import java.io.BufferedReader; - -import java.io.File; -import java.io.FileReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.InputStream; - - - -/** - * This program reads a text file line by line, using a BufferedReader - * - */ -public class ReadFile { - - private BufferedReader rBuffer=null; - - - public ReadFile (InputStream isr_file) throws Exception { - - //try { - rBuffer = new BufferedReader(new InputStreamReader(isr_file)); - //} - //catch (Exception e) { - // e.printStackTrace(); - //} - } - - public ReadFile (String fstring) throws FileNotFoundException{ - - //System.err.println(fstring); - - File file = new File(fstring); - //System.out.print("File " + file.exists()); - - if (file.exists()){ - try { - rBuffer = new BufferedReader(new FileReader(fstring)); - - } - catch (IOException e) { - e.printStackTrace(); - } - } - else { - throw new FileNotFoundException("The file '"+ fstring + "' doesn't exist."); - //new Exception("The file '"+ fstring + "' doesn't exist."); - - } - } - - - - public ReadFile (File file) throws FileNotFoundException{ - - if (file.exists()){ - try { - rBuffer = new BufferedReader(new FileReader(file)); - - } - catch (IOException e) { - e.printStackTrace(); - } - } - else { - throw new FileNotFoundException("The file '"+ file.getAbsolutePath() + "' doesn't exist."); - } - } - - - - - public String readLine(){ - try { - return rBuffer.readLine(); - - } - catch (Exception e) { - System.err.println("An error occurred reading the file: " + e.getMessage()); - e.printStackTrace(); - } - return ""; - - - - } - - public void closeBuffer(){ - try { - rBuffer.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/WriteFile.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/WriteFile.java deleted file mode 100644 index 9248c5167f..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/io/WriteFile.java +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.io; - -import java.io.BufferedWriter; - - -//import java.io.File; -import java.io.FileWriter; -import java.io.File; -//import java.io.FileNotFoundException; -import java.io.IOException; - -/** - * This program writes a text file line by line, using a BufferedWritter - * - */ -public class WriteFile { - - private BufferedWriter wBuffer=null; - - public WriteFile (String fstring){ - - this(fstring, false); - } - - public WriteFile (File file){ - - this(file, false); - } - - - - public WriteFile (String fstring, boolean append){ - - //System.err.println(fstring); - File file = new File(fstring); - if (!file.exists()){ - append=false; - } - - try { - wBuffer = new BufferedWriter(new FileWriter(fstring, append)); - - } - catch (IOException e) { - e.printStackTrace(); - } - //} - //else { - // new FileNotFoundException("The file '"+ fstring + "' doesn't exist."); - //} - - } - - - public WriteFile (File file, boolean append){ - - //System.err.println(fstring); - - if (!file.exists()){ - append=false; - } - - try { - wBuffer = new BufferedWriter(new FileWriter(file, append)); - - } - catch (IOException e) { - e.printStackTrace(); - } - //} - //else { - // new FileNotFoundException("The file '"+ fstring + "' doesn't exist."); - //} - - } - - - public void writeLine(String line){ - try { - wBuffer.write(line+"\n"); - - } - catch (IOException e) { - System.err.println("An error occurred writing the file: " + e.getLocalizedMessage() + " " +e.getMessage()); - e.printStackTrace(); - } - return; - - - - } - - - public void writeEmptyLine(){ - try { - wBuffer.write("\n"); - } - catch (IOException e) { - System.err.println("An error occurred writing the file: " + e.getLocalizedMessage() + " " +e.getMessage()); - e.printStackTrace(); - } - return; - - - - } - - public void closeBuffer(){ - try { - wBuffer.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/Lex_norm_LRNOM.gz b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/Lex_norm_LRNOM.gz deleted file mode 100644 index 3e62fadefa1ae998f0cb74cb9697ec04ba4316f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190109 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�$kFnQPH}nm=}Hjk3iR+*-~vMz78A z`{=iaJ+5mN;3vUT{~@tnOST4UGHl$W$nVMl6|wR)3v;4u=R-pk$7{Kyea0_F3~8^Jdkfoa9QEvF0h zIK2lzsN`WkKrYj;JWl)p;NPbJeSjSONJ?WB23WUamV+*-<*tIC#I>CBzM)v3=V%|k zKqm=#;8M@i_ZBr(z!~uoJI(8YL-N>u)~d znHay)?-+6Pcb@LowL9@uxs*0|5_eaL;wluAXcNl(W29vD``$jLFWn=%7SZ0dfusGZ zWrj+kpks$**k`R0ySVEtNI&^#jC^d6(PEk}7B%B^gLU%8(KuQULvSBRfV zM<{G^tWE|;?LL%S%@pE!DE3d&v|4Tlc?sQOe8j2P0o5x+PlFrL$LDbQE1o>z(Y8XS z5-8tV94Q#UnjN#8PRoB=(XI|f=3#IbC(7CFJRj!4o14Hv4B7|b^e(WK4Djix);Szp z3<6ao@Gy^wpdkUjjR|WPg#93xYKM7ZKoiG1vIB#P$++!EO}3)4#73(JQuq*RpBnyZ zk5BKxE9FHW%B^gzvKKEZJ8~3T$xe%ICg7bEV$#+^+wI_Q^!S|PlqZ1d4YCZ`I7;!; zdJ^N|N_~pIY_qmyy^6+N6xUHZNENgzkm#nZw%CSR9%jAITNLvJNV_2R)w>K2aGS9^ z{N|`nm45FPqOQ{A?F!iq3V?b8n1L1G(|Qe|tX;~CU=Q8q^ZPc(*PQ_C9i-pyyM^|c z|4eR4?sZtL*#7c)hUH{(YAuR;6n|Su*>64~vo-`#XhOM_#jXYiOvV%sztC%`dFUKD zIHl}i#qg{svSLtar$pc)K-mV_N9c=C9KBj!2Ee`?vSdo3TPbtIY1Cp8twWjn-K1=b z$M)$-P@aWyBa8fxk138P4y4`?`^EDDo07>#c|&==l(TpxPbkx_@8vC~zzpV@IJlk%fYwbK!H>uEu^A$%n z{2}4kz5wP|D~!JR<`pCA{hYOnm zpj!Z|0p^vq+l`VLLAc*aZR<5C=66F!o$Z0SlwruukEn^YS3J0Zp{UPKW2uP{DA`hG zezS(Yk3v6M;o+`;9j!3ddc-SL4v+c=FH<=zz8=>52t|D;vJar2#?PBMjGg?H3EvNt zec;5(iEDE&kfFf2T1u^gV?Qhv1G4escn%shG1>2F{D`;30ND>lUb za#!sHzrN&fs@PGk2{WxgcV|)pQokY0sFw0r=NGWFAXU}ks{uRsn@7R&%wl#5YO|hb z-~W^6A50Yym9{$}fhANuelFC%|e4iPfyl!MEU`^c%tzHOosyIf;SQ24mLJ zxRY;)HroK|5>3AozW)tj8Ei5yTj^zR-Y5Q~>qwFnJ@HBV+@SnP*8vqN3Gj4Z5pJ-4 z`7%;Vyf(u}!=jG5G{VUn76I!FMl{$n1?cH^Z@KE)8)VzB%L+^S{&%E&A)Tj>=+(MB zw;(@aUar_Z3h4~EvM_xD)$cdV)!41jgKO)z@`qEVe&iJE)6XBb_#O-bg%$W_^7@QV ze^{6!%)p9`|B9q1l7+#TRxS^!e*gS#>kO$7eYkak45aUWNvbU37XN?ZEhFIiIpg2k zx3?C_yR|o45%-#_#1!|mvfnT!t&{WhB)W1u(qWxvaqejA^c_H7=ejB=%9XB9gK(jS zQD>&y64psygYNr!erB!D?u|2mRU5_)(kxZo6YJmddv5vb)(L+J&uhYn1FS7*Td!$} z#_j$Ow59Q)(5}F`9ivBV7a(Z~tX}4=7vN@Tms+34sQtTag^1FJ6&xwsci}#$7nH|c zO0@;Y)Kb%HD~-`Q)9b5Bxod(R$H6E!zhCH84~Fq4IXDBzH^2>qc&!0_e<1ZkPQA&U>ci0V}Tme%e1lDhVE%azlxT zkZ=mQqW}S#1+Yf}1ssEU*E(TVfwwAQ-s;Ee%8Ri2%Qm!7;$bfR=^c@w`NVOMp}>V&qlbdEVZl7eRl~auP0= zLjT)IX)FcL+lT+@21m_WPQu+P9CeK*?>CITnw}gy@As1(t9o=03auz+kKco_5`$#F zl#!q`pjw$3L3~v$vx3+L{T4OXm{g!N-%5?J?$^Gr3GKGfZ5|-2*A|_uG|#u`zt1?j z9s-T_1~jdR{m24*|2z5e_5AP$$5LFO_?slV*Yk9Uwp9i46)pfZIN~C}+Fo-=iPr9X z1naDXFFi}}56Bi=;rHp}4t`~|>GNzyxvk;#pwQPepXfVwZBEGkdVMA>bQun-5vFSp z#M!d2Wy&T=pbI+>qP$tkxycb}LCU{|=@cm`1$-$skgKVHAQbm`zQl$Cf)|Vvw+R?R zn?$^N$1JDS`sTCzoTs$q23bZIic{&mfEE_Dygpat=|Zsr$yQ{SFEefMqh_!QuAdvD zM3#2O_I`nUUj$M={@9p4;E%>AF%829nrcC zB1)An<+G1`p^AA&C_iYuynKj1*?`U<8XJAV~J1^3Yh7!#I2eXB0iH7M{=|U zvGSO{F5{OoFNS!(03=;3h4HO&315pHB$htYAJ}mFd$|(H*LKjd3Ow2SFx?_Xw*Vwv zgu;aSSi%cq2Z>cFaF*}KQC)$R2D7A6f%$ZFT?|3&0${&iuA}7rHjS5~U*H7ncaXlL zcJ$A|$KM9hEC|b^mwb-HDN?xw>o$xyEy_iixrLJfxBV%x7h{~rc=CiEQNq~m$@w@? zSZg5yz;Gp9wF2hX3!TfR%NGK>x@InP`dl#EV+#G6({(=iZ&~QK42UI^=whOdxMj9P zcDDdn=}Mo8e^|fY#61_`L!?lxv0RhF{A`1WQW}a^Jj+6-#SNzU0kJ=xm(w`NIPrrE zu|hV?R@b5lPt#w~U42>TM_1^Z82U?4F5+6WA1#>W^!Vl%b?Nd$5Xoygv?#6gCIiHRRwz44;A(TV$g-0$1z{MDqi7 zxz8I%Nx9`Oo*=m-no2=e>)xC`SP8s+qnVQnUb z)|{!tg)LuBmM~dE(LW1e*xlo^h!U5>0kAb=i<8Jy3Zz^SE04AMo`|dosM;W6bXt6k zS`On506jf6CP?fXXG#Z{SA2-)J*pG)|+dRE!yHXlyB7NS6aw}V+4EYA!qx9Ow3h z?X~S~L_aB$$t$%FLePR}3zQVrEndHrvv`NcbJH9`P=C>uzl3Yc*WgXWO8CHN@h)27 z9z@H0vn6HmwAVQb4*{rHA^XHqj&F5~7i&Sf1+kNs6!%*(Khlqkya>f~&@aX1Qv4v{ zHkA73*Uo?Yre`lIl|8^IHGbowHYmSzxj^oeTY!88=nbmysBUQJjZ3{DTtyvTI+|!I z1Rq}zTSbE(x<~oZfK(eogk~qiFWPxx(efY17Ug@?u72Mvm*oqbn%A$kY3h~bufF7kNL%F-RuF4KZxGO>o*}LHQ zVe*r7g$>V&P$h77kv}?rDk*N4V(y3tfDZQT-CQc{1{Q?mi>1{4{twbzSBmXk zp+X{suf)`fbi7}Fnym4*(_7Se5YaA_(`SXJ_E#b{fFM}jC;wgH@%@F7dyZ!dgq&M3 zt_009eM~1ecO!cDQf@yOJYA3s+CLDMDsFeA)kQk#M6=_XOd)D@IEH^su`fB0dP7F0 z^a~Js!U@E`1gX>4R`TO?@f#Q~O`{=NpMR77`2=KfN_^&8qh=3R}(>+>l zv5(Pm>Zz@cn%ID@YV{L1)42-PrBa$mJOQlOFnW79?a1QiXZ02f(nRLw6*d`C7HK4{ zjsb6VQ*{}>{3AJQbx^hxqrMHpKq=OkQ=XyCxJ6ZB0pb_X!Gw@Ohe*EJ5Msz~>uWxwz8Ust3&bysPBcr`O0*KTV=KfY z49^)lV6@e(VC=SG_Vs16`=t|r>m40-2mu&LzS-pCx53tI1^Ll1fzKyoCHZw6uaQZ5 zg)3AqV25M}1t-p52A~W8KW3+o`AkGr16Uc*u=-qv=p1Pey2YDg?V-n)c%BZ4{VJHDD45!f_4wq6_9~r~q6Nw(b?KWmk+E4Dkzo4}ZmHDi!iY zFUT%mi$*J@?v|-WD7WAC)S|}ap_DxQZEuZOYyq&+GKKw)-1%$7eg93K{55VCrD!`k zLD;I->v<*7R?Gd5)@AqwE7@t03A>(_>rnaq6M^fEV3%vD`4&=!y6=>YM@sul zOGgsz%TO47f*QViD`Xx6{&K&E$05EVt8qKHLY7hEhrWFK=GyFEwtaJ1Gk%ZKd#z=Q zlr~ywpF0-mbbN*+h0WnOuaO=7y)7VVkwQMv>HBoJ7`&jviy;7jhx6@ zZe`JrM$Kmt4Y3-jhc}Qu7M%KjyGT+fMa2*M^S#J@j^p3a`(nHSu&;~o;=ezq^F4CE zs}W;-gDj;fQSNOiYxwqQxs{b2!|%`8tE@FF|Fqo5!f*HYbok3(7SuQd2!NF?rDdlh zjT@XA{YDgGBPKJ`@97l%q|B8lCP^)dJ2rg%0$`;vL?;c_<;Bsn17hXTjiC>FX>?^N zx8DT8vVOxG+luv}$aIJbZ983J3sOPa6|q0t<2UZd*&P1X@ZtMC**#>9@aa+%-_O^$ zAXpHRN9p79cpHA32yy_r4X_UmqsHHfoN0m-{fgKML?!<{&pxa!fMx-#G!~E92mL{L zr{&)y+iF?rQ7~E-$S@jF(4_bjUBn}6_=4CPu&qg1u_6!g%NwvFVR9%;JP0ak0+ld96+-GR$6}HTSWXXBP^AclWdPNnt)Pr zeU=Bg`2Bj>&#%zVXmA|*_xA_w=4x0YcUo)}Ld?3a!+@lo{(w%PYKLr-V+sf2DY>dx z3t&1+17lg~4d=<{T9qN*%HUkFH(N<7)5u{yUx(Wxj!=qhkBx*;K6yAZz-FS29BQr`zDHX_QO+pyEFGHGK30U5KBNb@Z%_rbdLJOzGq{=-*FWQ*cb`)e zk)-l!LzvR^ulMK8f9DogAfcSZ5#smb^c@GRK#ZXkV1_IqpR#X!xGTdFQ{jd%r7vDG z=M2YaLMqy(C^yVbNG+}p1i&qdnrX8UcU~hk593rPg6DpIU&q^Z`iLepQBh&yYjL}H zwm45$@ID@7O5uvJ7cwB%x?<7!o~{U`0qwfb!VO2DHRO>WYb}E1TAVADPY&=gdnb<; zQFAxQ)+a0HbbhMxGri0?_MW`C+hv(^Vn`PSa7h&=;GLkGxOg!Lpcsy^; zRkVc{NkCj>ZPC3hgM(6k=> zQ|7lQdOU!71*jez0wXx9thP6Q_S#~RHlXDp7!=HI2h8~Mc@LD67r6`|1GyJN3{fOD ze*8Vg3uN2N#&Ab1v4atSbmj4nR|G2=H%+x+M1qC(Z5+;5=Q|EtXc;#f#3boxa3*~W z2l4`dxwFimE5sC(ABIyRr#aAKL%*4Z#~Y8&1f|;$ez*cP!8ODum<5&@jA;lRK0FVJ zM(=PewPH*{Z0N&~xQW0SK)qn}Mu?DkA7zU&!i9*_5Y(_@G@zNqx}s>8)ay4*4EwP! z0@9}ogHdf&$RQo6OM-M8Lhn>)5}r3TjedGk+ZxPHOI@kKFUIRTy~FH@%ts z;bLdMHiJp3t^{*3KEEDPL;?@<0|?K4oN)_&8vj_c4+Lebc4&XRRzo(F(&KRF#DBj|+tgr9~F!9Xwhdt_ejOxlxc8G+9=K@*`E#Z9#ITKlC|sq^MdE z!^mN`|8^SK4x-3P=`*2xZ>1c@|8Gy{6)v*K@rCkll9ipp?fLP`CtVhK48RQ|4)o$M zcYe7Cst^Ki2Z`0~fEmpH%;`gmAHOfdc^Ya6fHJr5S| z(;cZ!=bP)wb*0`_M&O&+3cAE1%IX$?q;XU@pH5L7IIRP~zg;aSVJ?ZO5Ng>>Z5VOX zRrKQ{k$?qFp>6{^Ow4A_&Engz2{|5Dlp9bM3@lf-=u*4LJM4ruka~1g6t9ol@a+?{ z0?AjzRMX2+i*V~Bv`(8FI}<%cM#qlrqyn~(r%852xA|%*Ws9B3h7hF{UG7u%QRhK) z{D)!Hts1OYkcsu{dKzcskg#=C9ReS(2+jol1xwlhc2OHbl%Q>XAMmzR5f11!#8NaP z(wa%bP<~E)Ash|8s$fBGG1$Z zJ5k0?|MMmz$xUj4)&V_z2YhE1NT#K`D$(@k!#5?{kk1SMKZf@%i-0Of=_8Yfo3-l< z`B1c+#Gwu7vf+YoRb}4vg@GRC39EJCmytGKtjuDPf^!-v;BWjdFiS`k}E34Qg14X@O2 z{Txo;cEn1zx7gl^{)t#ORbMlaI#Y>@wgJf{{`ZaFVXa z>+x0zAF0~VZ~HEAS~e2z?|NO&#X*+cVPUG6eq1ckpDt6OP9bsz8)@j;NJ)GVkq> zrN}5h+$QuBuBLCLv#y9C^tkDHhC_6}7cMfrnKJNrwA4a&E90jIlJTEe;d+PZJHrg= zINtyJ9L^D`YZB6cwUig!0i!mogWhu``WEdQoRZvx49BdZN6I&&yL9P&$X{*aaL1cgWV$ zV!wuvB=L08Z3s0YeAPdY)7b6q;IDvkGsRU1y8Rh87XDimGI%$LDk!kClRxs{g!g{F zl$#pLTvp~;+Akd|u*MB!<|J%oF#rGj{GqY z#mE0atc&N}dCOvkD-32y4X$P`Q)rdw5UFWef(;WI=M|+F69TA^zAk#xUT$6uTF!O; zEo!~jj9`gd@0h6sI?fd*#4ZA^LiGyK90LpL|G#YU#-R1sW~i}b?U<>jm;LttnLh_n zMvmNen42wTNz&lyXY1?!m3Xwi!CC$x&V8#`zG2M4S?@bGP$ti5ffE!hCfOFh|33YR zmKRxg7GPvTrI!n`Kl6{%)*C{M4vh046Q(uQtqb&&0DQB&7SC^y89czg*g<}<9@SiL zvnah$8or|IENZ8%8ji7u3GsNG*fd6VfOWA!rY^N7-g4|vzm!P>HzGd&j&N`Xg+zd3 zq<7Itik~7b0HQ4$g+Uk;sz)UMwL{-W8!&{_q@^3 zN!4}b4iTq;5%tO2uOXF}rlvIy)xhBSkvNsDf~B%k4%9IAaPtXu6{rGW-x;_@LoIhKTa+7O3CIpUT<6%}PQhjc?L3CCsxMLKPh&)om1_Y;A~e;KfBu|EDUJ|w zJ4!^E-mrFf`wB(+6(K^Y_t$Z{bH$1U`({cRif_Yo-`5pIsvY6yD)C&Rp8wvBN4209F52)A@T8nnDdjwk-b0ih9*x$pHF{t}(9>&HVj)e6Wwn2Q8nHR9LUlB`bLu~9NXUdm< zy1wrTWoq8Mmf)H^-!wR32nfr!C_Q1j>KQO+T`_L;7G6&R&Ce?@&VY(ygDeHg7h(-1 zd=^SLPHfoTi-gm^-sX=FH#fJ~DWcp=%`Fm4!k`!Xdw=%WVWrqX!@~Xf=lH;lN_r=( zm(+PAW8VxRna0a$IQXVOK&Ak&c=H->&o>_-8A!V$MyYK@DU*r$^BJEu=zJ~!)ez

Ltaet7j3U~1L2YIFu=s#h*?-Vk`Q&iyFNcYlTWP%u7(<;)fh-q2bmCDyR z47dNe`&6E|#ahT4vq9w4+HC!sDmMGZ5lb}1+EezO>MsW(LV!^!QAnMdoJW;I<-v1$wM zvUo=Z8In zg9&w+TkK(I$TtENYQ9F6R&AN@kZncX)n7*Z)Lx4`o9y30sa5NdX;0fhQ^|SlF4rCS zj+!x)*SV&+yNv&H9EW!r6~M|JGaO_a)Q3h;LqF;CD|EE4Q)8}>C1<{k$7iG!!*IQC z9L{vvYwF59JpYX5`d6WDhwPO@-XI#%fK22zd{^D8>rE)P!c7w%-PzAU(^Zqd1seYi zNfxJ~s&|MeZLlzjDnj#>2D79#$DR0fy1SIyGN!{ldVu)hejw@bs)1}vH+f&nZtD=a z#>fsq*6$Ueda&L5{FXuM4=EIDHjL^Cik#?)|9wWBvfUvfX)@y5^f6yj*Jqlw#(*?L zS_I2@o91vq#TOkoP$Y1tbuiVzyqE~)q-aT~ecBE#(OB!oA#v1(Bv`$L9kp1m(yq=+ zp~T^FLnu@A)bjln+lFD9YRVlni(QAig~N>F(Th$L{#o0~!1hcBSg*!RKjqhw!N$T8-d7B4$@w&=GOl`+T?{eb@-WuWLbwqC22# z;#^Eg?S?s0j*HKSw+{!W?smwLR$ryq%}t%4N`@U7PC|*yXeA8gR)`rjd~H%M*5Iyr z#auPb>pa}NK@cdiU0V@HX+;4$Md!83=~l>5q@xJ6OyJCeLrGJTT`;mB`GH;MH zY)6@xhkLqk*5mIyVCS{?qHF@phQcp1$}_IDLtMKJ-@WfWZ@3tK2>>H78lJboBiEv>Y4BvIH8 z3>PaZ%LtN{e%j1LDv1-F)0HG;xyiJYBxNZ5wVX?Bk_{qT|7BCWsbu}~%}_RozZEq= z*GSp@lOr+kZDr=`}BD5*b)S#^hn4B`b|TiDX_7WLh4zF29LS@0_U!O2jMOAj?7Kv$va?MDWbpBktsi(4!%iJ{CvzEJu>1A<0NAbJM4nfyf#BPE9iPFHG z_6&$Ji~LMNJRa$h3(3DpzXSi41BYJOR-d9HROrqt!Y!bN<5zDHQD@j3YB|4sO1#7! zYrl$mjm?^h-HQmmwC&{1$cD zqSzsRu%bop@g~&(niXJzjLAFV>hXJbuucf&^h_z~y6q8HY>}pKP-+gS>0Q&kyC|3? zR!@&}W%wqicf>6Ck4sBeNvF#*hTVJhug923S(3pUZb58imHNw^f59wnayQXshVB0f zvylgGsb%^do(Fg3tv}kYh?R%O@+`{z#b1(FT`jBkhFOl@<{dP;s9nOs;lF!z`HktO z$LxnVd0i>rwj-R{q0MlyKm5(%s1&Fdz)H(^KYYqwYP$3F6rgg0?9;V5thvW8K2Jq? zwUpc6m+pL&*2X8X+1!w~HD3_=@u~}<6279)#P1Ni1OZaxki%U-2rxg74JZ>O&7 zmvVX*%mRn`c6FJ3^B#`(D`4Lj!AB8c$S+oPRd&^ea2*A9Odq({i{{lH{ZO%g#gOqW zJ4A!Iituc4HsQK!+cw)FCgFq!R|@a2MDUMS);q{7Y#lXSfvc)RG>Z-5s$@PJz3+)E zc%tE;m}O!2{^vd&4$(8U)rK%dK0We}+Fm6JawA*yP;7e&QhDQ$9XVp$#u%CA@)a@* z($AElgelHO*&nLF<4p-{y^X5i+og;L^Qf`|RUd6J=J$>~Z*OaVmAd&Z6i|Kb|Cb%DN zPno`W+C==!c7yo$gJq`gr5Uo^g>rsfnNU|t0P^n#)a{UctP)BZK`vy6CaFN<(yOZkK4W%hw%qBpTE^s;G#ETvcu|D;*| zGajP%FW2M04W|m#w&E~y#qcG^UZb33{D{nLOlmN+UMo2*EdmH)V;yz;X>q{F%vQb?Q`vBEoP9e!f@) zDS7s=n1gl>Gw;lZu>*2D!?(QBP&c+kTUl{cj!7#gUa=jmFmZ3S@D%&#Wo`KBuoE=_@+bFgkOwGzr6TsB%cFpOtbD2pJA}%{Iv@8FHMMy^Hq-T1l`7%gSs}q_;H9Ksn zoPu5w2=|S3Je%OXEBpPv`-}NcUiZXpy?#-fHAA!YzAZeyzTw5ZK?x$?kDGn8-4*-f z-}>^^+n3CmBaoJ={HW%JgSK~h-j;0&pH{yHcL$UL^#$;l(u>MD`Gcku`I|)WZcsdJ z9~r%Q#y29={4^%StNzjrJVc#j;31<$E}oOqCK%((PKcCTFKuD!e^!Du8^9 z(?EayeB6p#>4Eo;f6h`boNvjIdl6LmDgAO;C_Av)l|@%_aTmdVn5-&{JX$A9K?a$achMSqx?0*ZyM%+1*4xhkL z68w9L!$t%(DOQpl7gOKm-kXNt)F4Bb&0Xbat&cpKLYr00U(}1=Hvf<{moRg$r^wj~ zC@y1}{SSG3*pF8@M*LU~A=x(s95i@BF+6n|?Jq5FjBsGUHFJnLlNXLp6CQIpZc1Wg z^;|h%P*Al$}B)!*H%8 z|0mom>B9Kebi;K_efoZ>I&{)dAVJvTlLS8!VXO-)YBG42r)!!cQE`>}dJP3z8t>Pt zxI*!fguY6BJ$0+#s7B$7v2Jz$P|)E4pPPuJOFMPvi=$zr)Orolr~nD;-yJ!*uoo~? z0x!&aPDzh%?r}jCL9aY5`1qJ>FbGCLMrf1DOw;y0a>SzU5rYiOrtnp#18za$^QCH3 zkOrHx94sV6r6!f5UW>@au@pG=HV>{bkp0V*AJ&xXfvwI&K#7)1ek@sOEjOm}$)O}F z*uf)dHxFt>U!X>#rUGffZ^SH~B`#pBBc^OG$iN|Mw9#lAH-Bb?`*IvBkG%ia7i8bj zr*j8nSBv+Vr}WrwlTLKwT-aLH_=P}!gv6tm7+7ui%q{Py6;+>!LzG& z=V$V$=!kDebF@pQ1_=@m{1BX^JaD5nXev(cfT{0%ePq7OaIy&u`=-j|XMB(`(?F43 z{?r$QhfjK9-FJLF{zM0TsuL>wttPJFH?szrk7$FAiA8YuVUq_)zuZHC4jl6Qy&&s> zE7YgmI9!B-7Rn_1IN(C0Cgo3#QjO(_4GpxW$+aB4XFa6?SSFH&Lq*z@EjuEyjcuTsS~l#~Ut za>>y?`q$}x)54J4HVik^Qi&#LEB(YYouK5jloA}DaEpzw)UFz@cMkm=0e87}Nz*#@1= z9)zHSHgEJvB~~e@Bvztg7L3mzv0rxhH^g$?q~IExn7Fa6r1xdXKkg0&p}Sk#AT-8rq=@jyKEVmYl-UXFYUQbn7%!e<1TSM8d;a+Q zEAH4Sw78z>(+j-fMk4i#mVt0KtHS`5?$<2P^yU%5F@wW09a~z5L+;nE!YVW3b^FWb zd)3^g_KB2rg^t4xF;#V6tUUVs*Yar2$KfCUvNZW5%h630C@E-F%&JUOsN5q4geX8>kl4rL!jLV};j=@&av9+g45Wtm{_D9p?GU z8=C%PRk+&Z;Sp=U8A-RAbDn=Z@bAkEX|HL9VwJ7tt%{%5Um;G+F16t8VBP4W;?x+4 zYDA?)qc(BQR63Y&P!&4=tUY>*QpJ`w;Zk|D*qM&5 zcAe`5iVqi%eGZ@hR<>l zzQO%Qo4ymm@K*B#mv@-OHCp>+_KhqqTw^(xyD#Spm8LgdoWKlK77N4DEtjS# zqc7c3bN$4y!LeSGtwj4h{!jS)Kh0j=gtNj4M z%tDBo9p!-E{o{lzrt1+rwf9QeWn1|s`{$`$cBP4TcXEt?LG+b@+%MSc9>uQ}U*NV% z+ybk!)fCwpmWfGMcxzgyX78(+WbBkQ#y3#0y8Jhf2kv2;>htna)|%kRkR z%o{`X)}23RTP^b`9Au*g;)9%^Arb+QcLj8q7cOBQe26gS4Fs3y|CLv)h|7Ii(l zDpSs`eji_sRn=hEs@tCj&Z2O{OOsKb;noJNQoR6`mTQtH8u8xq1`SIG?{Rb^#T`DW z%=|b&Axg039zUwNdp#(H#djG9GfUMXZJL#Z9l?s?OX(P9!shmI%NOT~MWPvGt7z-B zB9w$Ws#`_*6EC1w`!lj81#c2vAx(jP&w!Oc7Pq>CK(1HBnxzu!m6@+@dN1vQqIRZ7+FW9L)KE6V0+u{Zx*AnqYX4q_%IiHjmu6=3iUviECJ-L%(B>`DJsrH%#(bCd8kI4AR$Fwg@gnVwN_|*M-#KHp%HtoIJy_OVXyZ`XVXX5W`pqa^!5$iR(WyNXk zq!gVpONX(NT)|i-pf{n#B(Y)Bk+a$>E1S4}Dyvkh9v+>zTl#>R!;BiJS!1s+H zu_Pz3*iLu(nEmZfv2RcL9gNJhw1v zZ>D#b=l)va#WXTj7s@vNY^EjX9^21Lx1s@R_MCp;@{XHMzk13i0#}dUqXp9@4U%lW zvXd0-L{ovSM3h!WL20;;rgDI_AiTO+bmUU!s`SVob2OZC#U4z%Pr4r-^Ew+r`Q12O z#tMVcCFsOC4VK3Hj4%Da<9ZLl#6?O;_6HokeYB}vnd+ro@#5bR8@n{=dN^)*i-_>6?;^ypu>)D!J|T5}?#Z83roB)QZrJyMzuQ}umi zqGgweP;r|KTeE!0CpUN%CzQZibrS6Kp z5ncB)oBF@-Nd3<4@RwchDB-URn`%o2(Ky(rj3o=8DihCKYz4^KLkLBw_1m)~ybKhw z1-I(G#H>U|J5>t!hi;aIP291DZnAC)Sg;5ccj`pMq3ZM{O%g8=T)WBd-ii^Mw!=A@eL5NNDoB7gN(;FaC=q`ZSk>K&Ss9ywROJ9-VtjG&6T^ z@|ct`r}xPZI*Q4!T^?vwOeT@k;uv|SpCZK+oFVKBaoEhI?m)g=b0{`4^BgWKaWnbI zv8zgzIl7bt24&i6fFYkGH&J3cp$h)qb*N!rMjv>gBFl5br@jbW(qx_*YT?W*Dn71= zZkMZhyNmJCiasqrFzwpf4LmYR$K|o8W8vuMmT=P{PkDCE|D}gfe+33sH(hFS=Di&d2jn1uKk6wc_MfxH#DH;tpvR#_m zq2(*o1)4Pr)m*sjMU&q~$xR7;P50{((oVXjAsey#a|iMxYU2qcNJ#KWf=UTn$U42$ z?s0kKPQF8+bNGG)2P}0TLk=*>(^1E#>>mOn8qZ3eL6O*jFO$?wS(kM++10=Np)7K8 zpK7qw4}RzMfbi63I>>1hB7=5c#QSv=NNbR=%a{Lge<&mdE`{RM`F&~l{MLwiJnthJ zBN+UM+0vr-X?kvWSfPVP1}Wp&*RhPxekTeG`iKHJJVxEAD2u90jWmT%Jurufsa2Jl z^DF`lI`z4Vyj((1dS_McnElZFc;`UcD zJ&1rqJ2vl#iEqlPO?wYKH4MzT*j`({TvQ=`9h{7#)c5Wecur2wP$adO{ryU^M^jQM zxJspl<%wFWhskg($r?=6?b#W-2Rd;onS{MNdY{wE5Sz0oEXn8BV_*NfPyeyQxGh z-^53cYxW;4|A=Z*^cXccQH~T7RT2vP$gfo+0$u(?%FJz|e7s z`S4W*%7jvwc(@cynzarBI<!HYM%!2!n8t&M z-^If1Ce$1P$QX|z=E3ww=7L#a&^B*qQq9SHDmGWkyH-`Nyo%=<)+`c39_R+g1y3Uw z_&2JsX8t5;CQc57KUnzL%Ix^Qqnrrn%$p@lf*@9hz1!#odY&S}A~ZwqZ(P$Y=6I@Y z;p$Pcr(gJ{uGg1+<U#WKlAWP1EaQ|{~^#cmJ;K+ve?&pLK>X5oW0Nl%zi3Y&uR)l z8ZwvN+bLV&)r=hvb7#A*>al%?QaljT=iwF)xZl-Tt4`MWZOxkY?-TWj1FnBFGBzi5 zsi}vWC9%Ia<%+$xVOVf)jd0XWqFY~L*vYtO{EB~hrJGlfEl1BE4iY2PA7Fj61rsedr-$pnmVRZf#pUfQs z4*IFDN}&?2gOv==JbK;rLW}L=D{RFi5?w(IEuCRv`sC#!P-k|+4gNdo+{1tjZ)>cXU^swLay3V2_ z_)=Ec*qY+!9alSEy_%s#v@LhXJ0BNpcaEW(@+yt0a70ufI>d!LsYiF}OMdV`RS#$o6Y0S!cbG8LV1eRdw`f^g_ZSnMooq zKyf_r&wm1ox8iV>l!zRs9KkoZqW0+UGkK7C!R4}M{KHn%Anzph_3_+CmU$DrRVb0Y z@}|;5E#f5gC<<4w_s>dN0(#@>HcwpWLDO0Gs0hhO#*jDvUykvilu-53dMRFN+SSWK zQ95)3VUlKAoO-hq=6EaBm3)rl7&vy3x;XtMGoRk2)$n)wz<+NE8GZW$PwL^RY>K2s zs7Bl4*T8gq#n6$(>b~#ED2c0mL>xcAOY)|^;x|qmPY&PVaDAexlkw|}+u!|!f~qT^ zOX-oITP&yK1KAaKu3RTd(9KMg(Jte*jU{W*5RtDOMD^^yy{6%)Hf4tau1a28dechz zNMLbLiT}fjSpLt^EYE_Vu@Yg4kGlJJR&g}W^AH9O>oWUY`agZ;I!TB`!O5MQw_KI6 ziJi5CnHG^_nab<}fTdoZU-BBoAwOBk%6F&Dd8>@<*E0f|9g8PT%s0N!^6e@8-!(e* zv6CF{yNMaG)pa`%Jhu_(jnzsV?@kZ8O}E_JNev~(&+f-LZQ=_ZF zj2x^h0)PPMTAKAAvWF&3I}5yIy4&rXH%HoOxKLQB+c&#zYB%)-F)k8g>Vd$)YreB( zloV8nIUv+iCO@J>DuX7ox4d!)Y6(6V>28#OB)H$y+;|p*dq7vZQKaU#O7|*w02nmH zOn}Y@OYQ&#yU_owTRE)<=Lemi86d{E;kqo7Ev$TJM4X_@GtQ=RkQ;U<3%nUb=$25G z7>HkA6UP$Rlp~7B;J3VxEDXIeWm|BnmPO6>uZGIUy9_>k8{t(CfTSE{;z{rubJ5-$ zNHDpD-;d|k7V)7&Tjko*tVy^VDZ?B|h849M1cy*nf#peAS^7Nw>jQ^Oit(dF1TChN zg94AxX;oe_wM6{nb_@T5Ea`Laxz#*f=AKAtMUpv@%8^<4$(M!qOUn0zTD21S7c5VI zZ&?pKoe#%m6ht;I_|96mDKV1Vl~Ml$19tBey}uHuqO?6P zI1o7}aC)?%TByJ({t0z=3mMPd^~&DsPHwW*ZZU%-W;l0~`z1Krm&s!5Qk(JC)O-mq zSkB8TPY$yN1~}(-op-~iG}>^#3&^oCL15iyE|<=E(*_f@Ym~}{Z6BH_5)vEmw!*bf z^$cfiS7>Hd`-Oq?^{n5UfyKR+CMOZlj{MaJIi?Aivjxw)C!_RyV_0G3TU2KE z8lSC$RfbCw0!@P0V3{4=3>o=hHW9F4Bk?c--Y6U#FsV8UfG1J!TeXWiDV>IEMkI8g z%Ahg(cMO8W=QNeOB_X|3UR!?qd(P4L)ZRoT6e|0@$oQEBIyD}$@)T*J^OLe`(xK|a zd(ck|Pud~GFN<|k*!#AU^2W`7fB(C!I%7E)7nywbJHIGKD80!my#rdA?NhalJ&k)~ zVY-K=e!^LgbAH~D&Mv5M7RA9zs`;i^`@N=ql!6xpc5^50F7Fim)gA-X0Kh;p@BjYm zy-x5&j=lgO%PYPex3huK;}c9&saqe5d%>rMqGnxa*4Q1ac=?|d21PKP9f6DBf4gMkcdtv5_rMaX-_Pv9$&vFHfudvYsNQY)wLZ>2 z&)e0rIk9COoWvxiT0FYX`Tk!s7{4GW+>0Z0up5Rq(@BS~3-lXNv_K9au&6jfCGB+g zSi%bpkik~8fPTaU8883AB7g0KmR?G6NjP7OTSntWwB#*uB}=sy8r{PUMItDX6rNp| z78-5djhc&9w*I_(HaBL5@BL3HfITL)Dcj=3$@pMMSBHa9NxOMGL2cMh8(u|l%lFrn z#oW8-D}JnO5jJplKM{}Z4#sI2a07OoU+1%>>@twWV*lXtn)@omsL@@JPG_0dHX-yA zjhvmnjUamYfCbd<&0O-1s_3nbs8Ze1;%T#X zTFVJHmW!YPc2b1o>}8e+Y6>Ac!`f^L_ah8ZrusCM89^sg9l=e*k4{g2 zvo${bWCs^o@6_)4r~5va;PkZaeER zE{Tvh`&nsU-91+>8E$02`BJbF8*k*O-=8Yxtak=hv?FV8uqmFWk{}-KU4)>(UM7=cK174+VF2h;kAANSLk%Lfzl(cFQbpks+`Vsbr488l7V4ndlIOZ6ihYH@(eB(A6> zrgJRYwTYh|dVIobGBu(yI*1a|_-Mz} zc-<9Go5&pDuMJX~r)qDh`NtZ9U^j^G#ye~B6?273NAv84WWzq*{66TMK#z!EMBPb4 zq%VbPDiayqr;n@*#nkX^eP`Z-^?>ON;@`IKAW}m8Ei;H5Um-Ste)W?@RjP<7`)ekn zIBSUdg2;(=>t!p*h-_Jlbr0$7{L$%=J+SyI1uK=3b;I&CcV=^KA(kHpRb0aU)B@s< z;UDF`m{GnUy3iWGK91T5pA%#HBFIg4CsY-2dmqEJ(;X47kPzEec!eM z^dE{H`6m*w=AWIjwhF$`jJrO7R@Fckd?_QpPSYsaQBa?LtdBS7F9&zf$!vZC2Ijh)zvi19bcfr$Q zP?7Fb$EDZiZ3gt8jS1hQFBowQY^5@EBh=t-E?~}cfq~OYi1?Cg8g=h&L2`W6hnl~syqp29pt;UwyP2fPmn)+ z??k2KOlnBy1BEmydUebK5SK5=-FRc$xhM*UD)`**qJ(ff)|O2bG{Z;}@Xa-nnG+7& zfCoIW3K9SOvwCHGno-)P!7;u?=|=|q}ZCwZFOKoegXqFnL~fK`l;^}m^W^# zF;j?8?yD%=vaovD7^6mXJVAh2KimD@^Q&!vEpT&cAzz?)%p*38Tx)YRZhD~$GmZq< zhfcQfSAo2cq#tbLb{cDPt)m2N=046&@Jl3LvP8L`Nq1dvTuD~g z0e)ydU~kiAt;{$30W0cN{KR3SN2>bZB8rv~wuuF)E{`Nf;=R`4Yu%KJP5ImA&Yz+U zgXG?ygug7W>aM7#K|QsqgB`-P^30(@*L?S4QY-Y$omIj%_FP|gcr{Kk5(k7}TRUtEF1 zd*o(B@FMWv_Pil_efp$+?V!DYjg9sN!P?ea*8dsZjn{Cev`#HJd<2nogtrwf9E`)P z-v;bdU01gBnP&gn5GT)r@+?Nn*U(*yFi`Ai2JJ$MZc!mA45%QQQ*Mr^r#RsP1o9yy zr3HeN3n*dzha~0){!Z1?c{{jm8fZ{Nc_$sNvXeoGFb(e(RxZ2j1^SrGq(V%WjIUIo zlY=RU-8f)qoUFRhp9rtuj}P&CB1Y7Vm-aG}-QfJ*kU6~IhI$3E3FWkavft@`Am2(m zaeA4kVUP1|&d$SAxX@gZ3|77sZsM>^o&|J)r)_+ZDM88br?Hb#94$K2H6)v5X^ox5 zXl@^vA~$!MS2S;~iYGGOE4hM2;U>5yoGV1z-hoqI=hRb#U1gZt$xsL8T)$3l=d$SmcBEhw+don=wyXN%DdoqeFL*opyWUF#Q0HS^m z8)^;5U9ll)WkWkw&UoqIdbaoOFAY|=Nl_$X4UHoRuokUq#CgrD*ChwdqFzVJ$D_ln zRxt%Q7!AsGwcm8sU)UPK5Uya)zNUfcu93DW!pQRfi!2ct#)E&sx6p`f5&qKir9J`i zyCiv)_nXq0F*8c=cFgfEqef4D9D(nM<0*q?WD*@2`PtXZC8j+{J~bKF%6zs%M8=BL ze}a(8%4(jBF`bx>6gHY~k*bwy*i_~4$m_p9DLwZye_e?9FS|=0y1a&ym#^v~l2o6xvdsl^XEWa`B$=;!wC*Z1iu=~^;Ob%z+JT2<@v`ZX{5RIWuhzOr3-8kI@~9I>_@Q3v1HuktQUMLK!|`C7VR@cTN62 zCib`GI4LigcNUztYY%H?Ezp39<@;jhW?7sA_&A9?OwruPYL4BAMeMvi2upU=^x zBt_p77fCI=UhRx?i6K6eAGFLZKXbsEv~pK(WFUhYk6v-3$LD`y-!$->5S%MSBKq(c~KuB=;zBzuKxdmg95n6|dz5 z^r}w^k!bg+I0Tj6QQ1PAo)vLdl^84H@*S^{{8Z56YnX?mlRlZNE)1Bin8mFiOv}<8 zn_7j@aia;_exEDIjK9Z3{%Qb8k+`A**Gk5Vf^zzlCS7!Ac5%MmowdCy3CMvGwq z{_LFEJaRQ6KC#==0~c#)_S)jd@dtG(s9A{7A}$~OMw_R+C8hOc+v*I>>lxPdbIrB2 zg#~44O&on}fUhxm{+kZy26YlKg?>7xFZypGv2}aX+gb@F$Q@`<>g6X0bR#D*}*9ylEezd`78WEmk~aT!e9Y7A&?gF!E91 zp3`%JkY2x#b|6Heuv<6zlxe^si95ReTc@QmV*2glRR8iHSq(>=V)P0MlK{7XKHc7{ z=*HBq!h2Xs43(L!f>cHWaib~Ix&)HE72%{nKM2NgisuF9NAXIh|8m&MB6Z$M zpGPzgTwa`1EHb=@m?~MaN}8su(UEgOg``VTTF+c4!-|@GL?lyFQ2K&x2{JL(y|EVT z_eON?6bj>CjN(8D@0f{IkP>0h;xHX6-Rzk)M)r{m$^(~4PT&_aJuUODfq zbq>Kbn?h!N>C@uj$|Pel$>|6T3y#0<`RRw+uW;>^a<6t&#vp6ggnuJd_^j@ZaLR~{ zD%4a#4hUGZ?qYw(U`p_I8V1wOmoU*Cr++<5{1b%@Y9Zlx02A^a`6FghS+x0}y%o0!=gNpWwmOKFJ@TNS(4CcctVd8T)N= zI_;{uMO-pL766bWsoaSSXWD)1Hism3eYgq_zLkXbyaGkUl5gn>9d$wv618436Czx% zf_0x*=1Z@+^Aot+B_V;v_c6n~W<^Jnz)!I(>1Nr-OQbjcQeUOv-yiRaS~WWLf1@_j zq=xbhhQS;~r;W2Vm>&4XT`X-C0T84CK@OH61%#Hji9m?dyT`v&#%IO&2{;6L3SVf) z2Hop8X+13vrLUGhjlXa2Wyl%*#ctqYIMiDvNzi>d=gIy`W{6jV#f`!o=kq<% z*Njx^_VAo%OCuisr`0exB(JCE8X1L5QwL1c)GiIK#z{`_87hF-?J#FppR_OkQfmA} z@F=rg#+x;Uf(=`z%#qfLsEO`U=1Amx@Vf*QJZD*7T9shQi{#HmXWS!goCH|ChRSf% zQx4kM0J?*q<*kY~OM=~lE??;~>5e<^LKn!-bW^?@@JqfsHLq{l4G?+kaTxGikgiY& z>3|D8ST;d-W{02p;hCVj0`jHPyQA=BM(?BBB9m5K#z?ZA-G8jyx|sw~X!W&o47epEQt+)SgA6fJ_h zk8vy$w9M-|Gh`6Go@yImr;iQO#YZk;2(Eb_v66}G_cBL8; zXAb$PDLQp05F@yVV=Kyl&n3DoX|@}FluEKxa3}x_4}EV6zzZc?Z37^6`F$QnJlF%( zN{<-9=qH!pkTSmkFmCo7PP}%1zu5p9W13N~<0)y+UKmK*Aq1N-?G}ByTWY6`Mk*Q|^E1 z)xVfuD!S*H{IvsDc*cEc(C>zihsofRu1)t8TMr5Po@`y09ySUrvRl1MKg1YqZl3s^ zYdr?-0EEmGR<7vKM{#ML$DvJ-Ns=r0{0@iSMblwg(AnALU+bi}v-Eo&Iio}I_u=1P zS;$ql%Sfj%a2rr_ZI^`gP9ZvjtW4m5iOdMe#%_nbCDBOBSDfVll1w`i>_u>Tlr^rVKx zrBlRp>s*Gx^CrZtqL>^3A!ZLi%{)w4C9*I^tJ&&p?ma5njoq3P**yO*LS2Xp23|A6 zLe{*V*WuWpzn-nxf4=16S9nf1Iq5yzbpF02dIVdy0h_eJ+<&&2lDfBmdXQA)#$F-f z;2Ak>+{Dxztr*TWjwAyAgp0+~3rV$W0kV&t3$UeRax;xJ7OQmtxdwg^uc$a7{4sto zQI0kA@(bRf-GymZw^S-M>+)SDNlL2>AnL|xf}3u?#j{OiCNV5uWnaq>zuaiNly?5( zU))?6b0J{&0Vi909kQGDu{>&fNUByE$<*;3Pz71es?gCu%SboD+H^7@-&qEs7`(!z zqFB|z< zR^o6fY+7h)s(AV56lACtUlz3Z7tV14CoQAq{Pc;hkHNhLL!ujoc67Ps&IzmdEXaFv zOh=^G{lI7OwM3g0aeVZ_Ru~FXnkksDvBbUQ2{s|m9{PgsGg6ZZzbEUrG;$A${OsbJ z*j#OXR+fL!)D6_X;N-`j z98F`Dxb=G{ndb60IqgOowCYRV^pl@&H;7mfz?#EYV^M&V`*v@Fx(HX^2+pdJnRj7s z^P-+NX&|lguO`?ua78F;sG8*kBZ+s`@acJ^C5c-wk&bSJm4_b{ty6NB8Y+%xu3lud zl!$-PgM@Zb{!ACLj*Si0pe{ExWe-*;zrJjPqm4c9COKn~JAw^1{(%X21R0ZAuA^O; zt#OD2qR+FpAV;j->I?W%v0m9o#i#nM z??I{&^pQ|cp<{~-7nAyj>>G`jS|kE8ss;(Nx6T4w*4eF7YSJHHI8A%3uV*H!jJQrR zW&B{~)|YuY#06jP-|8xORNfD9Lvib4wx6-tc?(Xa(o1uXSv$5pxSCN$iPqX+YsAgqF#=}6~5 z981*dTQ0u~f}#G3`oj;)fS*X?P_1>fh5d9FJmg2McdQ$F>19SEH8<4e``LN@;@%PD zO&fLTy1FyiSy-2hrVq%C{H3%W30%g8GXckc8e^7eXs_)-amXZ59_AM}_M5*%mcjx;mYfy338_7OmE5 zAYIc^(WL{gY?}*&^Ye`(gj=@1?LAmXqj)Jfa@MF9;y9QdDm{8^aN!EgWRM>qTULR_ z%n5@hO2)CAXvC+b+9VZ6Gb!3LS(Y0IZiY5fz$N2OYPzqn_$r|2unSkr3_#17%f2yw z1c3{vdq}o!7hPjeZotdZRz+Q?Vc%=a=p(E0_lp@Ni>}>Yr2^SL1S+TQr!QP!C0kf_ zDE(Qdz}0#{aBaNh`^fQP)Vr2y!~GTm-(x1#L>*VaK~Ec;Dw}N;LH0!;r(o;Ztq8?~ zz`_jk z??U>9it@Fo6yL4!icgI4*8sgfsG@VI?jugvtVg0-*m{349Gh8Z;AMbzmhFe}|KP+Y z9C;-_9kZHN9ON$@@@$!gxByqIUyxw2o_8VqZ~V=UqG1pxA^!2fez)Ht}J za}*U;nB*eWF~T}HLfLis2hgEPuXmEG2#cAvak znJ-RX%y-jQJOK3bVb`8Y5;7}kq@P|^-~k*fexL5JRu+H72P_hr%Mne8@AJ&S@NWU; zPG-2h@X!lNk@va6|M0Y(t0s)Xk#eELYul#CfWgxesXjOuyOMb16RbWJ& zgb%8n-k23M*8mv(_klh~)Tg~fDrOkoEQ*3{Ykwc%sm@qO$#On?JnQd&<$O%Q`uAb~ zK39x}k=Ku)^l^zYb3g@cm0%K6rmz*`vs;9ec59CZY%?@dv-+GKu-}Y(W~4$vbNQX@-dzP1mVSzaLT;!onQDgy6#rd!IsIvOd}X9Bf=U*lOI! z5PD_v+$yTNKPAy;6iw0<2nN8h5sp()SaJlh)D9L$adL=j?iAYcd8V!ss4X11Blvo_ zmS-Crf)AB6<$QSWbi~{mlT=+#Mfa`qy=VXW^!>}8d|)ys)R#1BWw*0&9d}0wv&BE> z@g-daHBv&O9*Q2TDl;^R$R&JR&LD&t2fTSfgdU}c zk3=Jfu@Ro}UBXM*6GEp6f0DQXzFc%+89pAS8;g760MVmw|E~PIlgd2*|M+!x@x8U( z-f{&<^mgX($;qzWA^}(y&1df?=!*(W4uFZ9IF8Yj-PX<XWmQ`#-`=0$zz!|yWDz^RpbqF7gRiO$T?WFhHQ<1j{NxJ; z{TG%Mw-E?QTKw-BS3qwy+$HJKxw`0>Z#IN_%0#Z#lICvj?k^wNko@ndo!$BnNRpOs z67yKbm;JfsZwZb`oV+uv*}d7O?um8^GlATozm?PbH@r9Ny~S)$Z0KJvrk{8>$e=TB zJz|9Te5r-nJYCr5!_n{=cSM%{sfJAc6?wTi3eSp_-| z18BOYwV|o3~BLGtG2PIFkx$l~Lo#>VfFj1n@td)=L*o+VYi?NrF++H6d z)#|Yew$9yvr4}rZ17Cc!M?WUjH>&S4B>T&$}d1`Db+v?So{bD#vLb3;AV| zh&OlCOAV>57D)b3zbX7^2$}dl08c@%zS1;RzhuRVJ4xGZ7;_dY(={Af+zMUhB#7VX zaZd7!b;SxXqkLVSkGQ*u=7@5Z#iiBhk$9*k04%*_q5A2IcAb-8K4LQ5;|9kbOv*{N z*R9BXk}dl<#P2Rsgn^lm3P2j?qY}kZ#7{%&lMF z^C=n>m28(#&a&7aJSdQ%Ml*4?Ln4S|w0L|I#jZw794RHiT<>OX^KTN(u?~iEmX=nZ z9^)?@W+C)7$1cWI7Qyz>MTZ{_-zVl|Z6QA?<%g4#?lrM#vLeK2$r-lP0=J#0=YorA zrsi#{c_|G{R9x6Do|No=Q6V+!ju8olx6}RXS_4b{3Xr%gE;xn1C7!Or}yU$;pY(PayEn z6``dOxy=89>=>~sdkOl1et{3eE%gxc6II_OWbBWWAsKn1$z*4+WFt>B8gdYQ$DArh zI@1*)0;0Gg-t#T-q(bY9NPy@Xr2P395-*vB?ac}j4Pg>4GNoSKfXcDs*dU_Rujw%R z=WAg)70OAtducMPMC&!UwKE{mWScfTGz(UOS=UwLa7(U`G5I{-ewZn0(Rdgqvc{=N z&t^4ps9ThXg?!dg=6PwcKmMcFh(l>mB9lN&Y>^U6pTAYq!vM%=S1ttd>NcDca(?-4ty8L`?+OJmCI(w zfJEzG3{!5F+?62g!Jc(T{4WJ zvIoE_taT0J`?rCmVPMyXau$X$TnNm<@;M@gt`JjT2zPlNUBeQ*V`?9; zTTLfch$(9Lh8V>@D;i#Tg_r`}4yTt)sBxDY02bG8gZRJhwQF4QuMkl*$HsZ|Z&6no zDHi~X<1Y7krn_W$bWy{-uy>^ zQfx3LH5$?HYjlh@TLBh_DXE4(WBDEjGYi6mK6p?KhtFx`TGW_@VWMg%LjScD$QOXc zHGJZA$-@_MN{ceF3eatE3Ho3SU0RT7>Zfv-EsbvuMH`DUu~q2q`wc=s?hsRYjWl(d zysue_?b`|wrOU&ihW}DUr4b_)VS;9=PRRH90TELHU5v*ms<45%;)0A!33nkU zXS6QU5|S1#5L0Bw`SyJHY%l<-6>tR1qQmLi+uvdhUl2!tfrV@b-7|G{U+oA}a3?n& zH7|7Rtyvk&-nJmU&UL!D6c1GkAE!`G(lCon#LiZz-yqBAWlC0+Z~h@V6=d>QhJK@1 zVodzQPn3}e{X+GckR$7#exZ&;=ogyZmhp!lXuSmSaf>p1P5;2}y@cVn(oeAe_>ta9 z&u0N*2eZR}V3$sS*p+TA{()UP0b++33NVHEj7+&ypmhSoUbM&K_#PXPsX*@pEE}7m zr>NnyC{D>>gOU8*CEJ}YkcWv|9!r#OUTi(sh)T-eHT!Af0#3j#} zM&XMp>@Sv6d zXZZL?NOuchrJFFAWfkCXF^ZKt#!7zIB4`Y9{mik=HSEN2?;h}93A1aBGWwXVS9>7e z>d}dVS3kHCLE&55;s-uE~T!J{{+P>ihJ$z8#f%XmZ6j-ah6QA=bDO43f*&R zAY)EmB}(gB?1ZuVa=$CPxV#C)R=CQb5Y2ZIEkzwcp%X+#g6ZTgh{{Y$S+bBfy&T>9 zx22Y{WT_#=`LiNrElOEZW_Ve1xW`n;pQ*(xs~RS?KYlcnx|eEJ#}j%4#0CuIEG@eF zbfLzoOQcsosr%t2n9p_A?a6jRSs<6?iZ}{P_hnV4&R7>&8;VI5{^?h}zA}%}!h%hU z>4)JUv{+@>4}wE|EoNER0r-o+qJ;(1yT1sm;0p9Pa^sa5a*LysC0C75H@!qCk?qZZ z%##^pynG<48z*jqspyI@1AEE&>L!b#ZP#*^ZZUpOZd7CAE~VUzZHULrpQl;hZi7)dqx;mz-)DwtF6 z7}uj~*>%$Aih1=8S{Am9cUjc_M!v@F!^kc?@5>z^W48(s>BDa4GCtLJ%$#Z#IV?5^ zCaNe1Z^8A&?Du5w!JokQb_9MO-?8QA(^hSw6>!g{fptP$<*Rd%D>dKV5_6f_4h!=g zhm7uR;OT+euobcu)wVLYmW@00ih~twevpd35HFnt&y}=genNWy)vH1I}G~}q84;p^&;AzN3w_(I8*YPx6hA0cIjBLb~b^=^&Rq5UwX~4(fZL&SQ z&h@;@z}C9ALg41b+wkJupUAcvI(*juWQjcq8d5#=*0p=@cPk-yh=@G{{@9(rVZZZwQWk6~@n zCU@MbfksxuQQ%2S+b=DJ|LlbXu_K$O)9_*9Og3<-K`BdiIE}i_Puk=v(rySbWV`r# zxLxgU%XpMI1Ep3HmUm%=i4X7*IA;Z^J!Lzy9?T{b4Ror?;pPigP;8#EBRKkmya-jl zB1EWP^Yx(toyfESdH5E9#Fvb#@3ZSuRjz47HjGH^7Jtw(G9<=c021%Q?;NLd2zMIQ zBwyD{&=0^30%0qdShR@cx+0c|~DEz!TG8$36}hN0L#EgfR=` zD7XUG^Icbw?7F&U!yKu3!Qan6n`p1H)Ca^7WF{ZqZce;KMz2uL((tiI>`cF;XGJGN zY6l&y*GO2=%hz?DEeI22R{sczwiA?M!yE~rb%U;#U{yQlXqY3vW-P!Fsoo*x!1xz4 zR^oeB*@ijNVpQ&Xj$*yRh*gC2c3-~1ap7IAkfY!z@p>8#(O0UAPJeF!9SzpAkH^Wg z6e~B(kruNzuBLCL|AcauhSv8H|9TUONmh*~m%J}*{@JO~Wt0*IRwJSfJRhQNdv(7? z@7y4o3XmgW8SRgUOicShujcq!5Mp#{Uo)OfN_rgbiE-~KDNQCCY4$+|WI!(A7y3a>Z>#hC_U-J#HHEHIb`}6(X>7c#FMB5;)Mdr`j zfDI?FtkT19NU6{_6RL0*J$zh5QQJ=ZWjI&rnYTh*4FaX9P1$wk^-ICVg65TQbGSO0 zyZ(>4eS>U+w$d85jNS{wjE#qWNvQj!yr|5w~jv%*X5Da)N_{q`^k59*7pEx{yCbx^48~alTyD z8{{~m?%pD0PZY74HA&d)25oNHs(K|1p#z)%(TjkFNZ$TZHHSkX<3ujihe6gbe$=Yy zU~;%)MACksi#c{~j0oNt6o{?b?GRD)-W^W0qz8K)$Rxp)L<<78Z|EFHiQVc_CGwHH$VOgoJVdD zQR)!Wd5Jtg=FXi)tTQMP8#U%l_UocXd@X{BiYv^^aY}Tw4kuv-BpUp{#?#4f4YQ{0 ziX9?~&WQLxm(g{a3_*PiXlXTu!r|net^(9=2odry^ClATNbkgDv_Xl8C2qaH;eLmX zQ4>nUGR%n4Q)0*4b`~UB^*X^;*dOu0oN@t3ycUH@6O#E_iUxYS0f~kqfo zl#{S*>7d`ZQP&_C>jIFt=sieu>pDT%K-X9iBB1#2yhQS7ivU=0T$@P8Jv#*seOdrx1De;@xmT{~r%iY-b+wd^@80SQU#gLA@;5eY^Tvj0dN zs%W-{1tJQ<8=bzB>p_8wqTb;|hOv4y3#kUP0wk{Pami62GXg9Y2qvn`32!r^`#Byg zi)(`s3C04Nz$EUXd1Ek3YN5c~{o!bp<2H8zNF2cw-h6{20#3aGB(90s{0f>i2y4C} zM8HkvBjrXW@6h!YB${e^=lS+Vw^CWvw;Enzfrzpi2NFXq)`|@w0yZC)kLmF|MiWhk z2=o>uqV8W)>q3(^VcVNp7utR~aZ8*U=7>dPQA^xx2oB$mlv^EAL^=VY=da`UJ*_bn zRe=LB3lmlC_TIyNw;%qvR<%aA`Lvx>i2U;D1w-raXqrhi|^R zC>SIfW{wc@+D$4*o4i3pLC^TOc%>VbZ+W&uMA2+%n9vZB*3S)H@ZH&AqV_L%K{*u| zaXi}S{3}Rj-E{2|xV$i-3%!1&LN`kSE^g#i5^S7^;Pxm{-H0E>^h(i6&ouy7)`d7AF6p zoP@CfID|a7d_|o%*$xq)e2bgJk$AYigpM(`E?c~n#PCu;k2WGwE@9I-Oe)NCaH6S5oy_D z<8;T@SBfUyFiceBYl}_-S5pmtIK}6Bvoz@o0a7Dv7kqcFh;^8maS+_$(DUpgkHS|mDVt0&4 zGVV|FjdjJMD`YAOvZxrBq5sR zf)GKkIud)Sx_u=Uj}WRN^(u%!R~Lj@VhC$^_j(5+;kO2|l&;m?8N6O8YbQ2trGXwq z>bFyWb0hb|sec2D=|?jEQUep|N1T7D$@SJW&L-3>ZX4cIM!s+?y7!mM&sz znYD6*Sr!aij)EO87aYxf5n*AnZtfcWtzh>dcOxC5_-#w zgC|kNDPwA0X1ej)K_V8}egtdZO3&x^!&#!_hBE#;3Ow{>G5okaDX}clT;>KM5~5$? z;u#lzzRw{>kpZbkz#jZC-44(5<>~Lt8(5JWkcqiwBtt?dV~N#dZP!#5uoUU!q7vg~ z(rU_Z%2|p@xo%{68xZZ69}3$35P|@k-)>~3LNb@=>bAl4c0laCZPS%~u**iLa#e&B zrYlDEz{KaTF_k1vpmv2UrOl9_TXu-v)2&6aw*c(V)xw)bI$&ZV09G5!){*NK8{Duw zqhHEdx()}y$lSv6$Y;0O2@|7#A;RRZB?GBvb%YWVkvyg$Xst`07CVd7d8ujFy~t?W zq}ApB9y%y5a9v*wc%L<=D04^;;eE-tu;jpog*Bi9W~{EZO(E#g#%{WvB+Vye2Lzy zZrZxt5qdM2=7|2l=E6-^YpNcUQw1TDIIf$X2U@=y;dD8HR86y_E!Lbne4SqAFhH;< zwL}YB97IZzN5P$+Z^E{AI1Nt3W7n^fu)3`^_RS8{7f`3e@$~*H?PlE~ehJ~`ZDCyZ zd%pekE2I~SsV%|8gj4gM5#eoPzv322qb+Qiy-b7G@$yU7-ULyNKQ@$jh=ewretgfq zWSqEb8>~Ssyhpi+RFMe%LhE4qxbUPR*nT0kw>!y~A8zk3wx%!_O_5oUcvTsGbU2r5nxuY6Z+I%UFE<|GpCoObdIbfKV4kEP)Uk zWV+v;&S|Ap?a83T#8JMC`XzyjHDPH`*^bd?h4T)wGbd9~w(z^RC_gJ);+~IrIA0@m zqlFuf0f~rA-oJ<2`PbWNp5y)ta~TVpr^QL8rcJtP&iBZfy~T+*3+(I;*+OqHHN3r@ z$h#XDJRUa8K5kbd_!8_DbRv#EWml`s-HtO^({+ze(UT*6SmDCKru%e=(*ke!U76>a znPr2JO-z1M(G(5M;<52?6s@Dhg!_S4a^9UTakxMmgfbUd4-tNs$C*1lMwoT zxX{j6+NfsOz8BhDvHRzAB~rBjTvLHk_xnu~3XOS&%7*cO_Ai1g9t+@JBg_fc&*4Ka z4ZZ1T?qFiqJyH$c-MX$ou>wSZ)$NjA!1{FKOQYC|;!@>slEzm{%lT~@c8#ShaJ*qb z(+D|o*&vL?gFWf<7Dnm|U~0;d!S^snSIn~c&6|EhOa;h(dANPg-cPhDx~$kBTLqF{ zqS$-?)=dEgYlB82^_pF0Ivjl8N0y}(Aqrx>|DNZ+IoAWqOD+F4Z=n&kWv?qrv%I(I zT>>=44p~aIsP4`~5;;+2hqOWTOwg&YIhQ_k!jy`P;+xvqXIoF``Hh zh%+9_sWQZdk_A~fnkuUj=&0# zJiNYd>fHHvG=HgwaKLOOFr!-5pAc%%w3civaTaO7(R?16W@Ryby6_z(%p0WCR)LA; zei*K!XqNOQnZC&eSq}U{?%&dO2U!xlQ)J&GRDpr%joQ`NH06OPZ-orCj5~Vu`ZHc; z6$wfuFSeL4EABZgq-a7%BIU+(@n z9682BT|;pRz?l9dB_9(n!%!HfjiTEWq@72`ZTO%2kQVNw^=_@?gYH;EJ~nXZjjAB4s0=uMsDl zmApdBQzgvu6)qWOvS9Hy^{H&~$kLdt*|FFOX`RA{<+% z+9hPzla4a@X*$nVfaS|jyjbyiQb8y)^#PBgTD!Xk%)1Ta$1BuTN7f2ihg^^ng-e2o zTIvg=c0J1M4a#)}-{;i$SUjKO(NUCD0HWP%0lj#Gm=m1IZ?Jreo-a5etsqxc>9a2x zKI2!bItw#3tjftlK85og{$`@SV0siFo3sJBMhqZbg;RZ|&U*O9IsxK~ZV?h_#xL4d zE5uc*i6pXDrJhyoJ~ohv8mu*a)}nA`V5=Ad(-65IA2&^I>v)C1T#XtB_vE!ig{mDQ zQmNP7u=M*jTM(U6iWT_VF+xDyyNidcoN|Mh(uH!_*1J)M?c@p(MeS{*9L^N(ZIDuP z$N1qiV8~%O`JJm`jlr0v_n-#^rGLctr+Bf7a7R|tM_eeybrzMum{w|?^Z5+b!#7K? zP*^~w6#?-lO^W3k=1BU8utd3?V^+0;%xVL0i6)}5Y<7q^l|I7l`>y#2qH%_lfEMS+ ztTZq;44a~Lr&K4G6>~I=Ad^}QkcBU`79d|8$`gl4%IXd3h((ASp5#qx0uxK5R)`6cUWfKe1()isTH`? z2;8#DK7Au=FC66lXOA9kIG{j@co9=kE0bPxuIUb4b(6>88 zq$&%I@&y$mT3(UH&7zK~4RfEP)~wX*Hz1CJ=Qzt^;MZLYVxdzSiO5JEgtW`h6Zq zL4LA_UWj$187UTsIp`zLI3AW_^@h2M&`e*Vm&X04Rt0Irmg_Til;-;r9|mJ)<``lSN;7%%{{@M*|y{069t_<@dOW z)k7)(j-Y<)&vSHas$jK)Ow;s4Q*iw8tR^!U(O{?Yyu3X%ruse>q{*{p1(+berPdM& zm8ccH$71}12ym!qdK|$<*ua(=0vrF)>%J&5Py?^w4Kyd)ptVaB!JjtPO<6bzuD8&v zv$3;*s4Q){L$=NW-lg+ny7*)k((#MRV6LWcahgyXGnfHeka>ud!ZEycOI*J=gtu(F zG;e??{d3$94H6Eln0>IOs}}pG#55~lZ9%)-G+nK2cYj8KVwKoi&=HG(-M(NYX<5Ng zJ0N&rLkfqDCDQk~6e`tp%AFEXKZYJrTD_n_18i5ffH5&G@LM z!JW&Be$zLQi4L(WSAVAH>vdhh0{jVKoP)#&kCE;KWu<{%@CI29VwcR%$1yS>g1TOA zka@RWdKWq=_PsKe{3F7Vmf(@A>lV9#ukkcr-4{gKQ-gA~d0@&fKK=2IfUO0&%A#5l zbVR0Eiq?c$Y6qVHQNDdVUc~sQ`vrM(40T?QEju;QS+`+KLY!VTJW7PQsbs5FcZ54K z?nf?@JBJi)rO@1`0dbTbL3rmknP7d~M%nWbRn-c(%3$+|bZAR7gS|0DH7z%6`eItMWHS1IVrV{F)x$GEpkD!FQu!Lx5HYcU z)NNnN0J6BNQNF?Fc%Fxc506`xg{A;DC^K74qI!wui6-lDGroY|L~8ZM{CRqJBcT#? zsH+UdPuU{7Ttd}{+gxTbN2_GnO_`_Q)4|I1Ps%z4#P;=ZdOn7;TOpgOKv?!2V_KKJ zK1K2IBS_b-Ite7wU) z-cdKrqXujJ_+n6|qOPzY^Kd^l z+=g@F^jYED!j6jTk_q-szI)cV_})QBTh4r?!$&Gem**{^j*4yP68Z(PF- z{q6dBttL|&>K;+%+6hze>~;1Akt}jTnW`>mGJ~A`S8sEKZdfr#%8`=vHb?f8NHkzE zM}zg=A)H@D-@9sdkXbl{xT-7V^zhY%W2_x@6|V8=Qfr?E%PU!c=`iOz-o}gC>Kva@ z0RIYMFua7-?K=3My^WW@quCqh_0GI7Zd!G2sF^Qmt+rQv5NeCSi>Nw&RX0 z`~49voPIds<5wHTB&@2lXj9Qx4C%e*Xdw2gN+lL1oi2I{IwC&zJzfoUEM*(!NTMx0 z2dL{Vb0u~+rNJDnUo`GSeg#p;tBheH!)*wwYr-_TX)4WtZcs->c%|490imt&t50Wz z(7`eW=KL`Oaka_?V+z*k`Sks~#G5{uRj`dFnC28@n|^!V#^HImMcP+U<_J+`aeg}) zUx&{rHg>ApESF8;ia8ScQJf`2baKSUULax=m{gD|H{Fi?hH|?Um}^883y}d5(OX-> z`6&zZYH7DAHf>V4wy>ijexmN|Tpz{8BO}le@jzdxudisgq3%7g6a5;)?jrH5WkxvH zsV>5|drE79nb3+k(q=^WIlWCh<}+LrS(KTn_ZZQ#9fhF7zAdAqKGc1$M212AQfFs~^ z>iRjnCG3$q7{Bc(6MGp)qL-&g#ez5jt~PME`wv_GLgQyUA@?&_5Kk%1FPNO4BK-}f zbLv47={XI8niLjv#8NYOoZM%u$_`Nm7KjVsXVMX6V7w=ma@Y)hoSuj0Ej4?>IuPi5i)K&Q*L@CG^@vIE>K$~n*2cR@FgwDT zj9B70Jn-))t7_k^kfSs&*wD^v%zSr%)?-~UxFgHJN3P>o&B2na4w)dbdeQvBn*R;0a=G|+Z)83J{Xs93gZ&)mHCPsxf+D~KI``1 z*HRT5Vpnt6_+4Y0EX4X+tgpRMRtGyd#EC>C63fArg5KvX5LKf_clYQ0${e-q*r6lW z1ExO_&h;HqMFhM;upQm?M0c;Tiz~c2{On-Cs3mv>E zR){I#ayw!3peD5&#-w0Vow#Q2sxsR#B9(ZT`=|WYXT+&Dh$*Tn$%_uI#juCScZ^9o z&acC_OGMm;IM@P^cvXZcBiRB~X+WmoZK4K1pwg^g5hjEryN}^Oua5{WYD^d)qSR_y zqUpW9*xtEp+Qx$RaH?u>EO!;jqw8gzhU8I%>d|3;nlAr+`h3qa&8tEF3NlSP`B~F+ z`DVj5E+9;(bySR(!>1oGh^V|kOlgAFH=X>5soE7`f((rF+sLn8R0w>k z4Kj*PkBCyK&~b$Z>5t>amAJ;cp)DF_)RT|OtqRNAb9fy3@^$I-x1*6FH z8gm8gqgAT42g8u&g;OJ0-)!7D_kQu^hg)?1_{6=a(q~&y) z)gy<-A?*a(!*unKJiX}~HH9CMor}xtn zJ?uax@ZAZs$&cj^t{0(cd9I1h2Z4l|T_HS0-UFxItR zu6P-0&tBdDxtbSeRv)~LK>MUfkTsr8uu9-O06na}R%9a-xKn#Mr&vVA=<*kP#1!E2lV@pX5zG7 zQ?p9*^CptYBiN~|4fnt3%F5UOeTl=pC{*l_r67#kC~Mqfa&^FeAt2vI z9+^C0#RFUar~wfqXalJM>jpU^?w`JrI;8sev{fL2{d|^RQEyr^lmO)hdRP($%XIk5 zSAaByD7O{BK3XET!wnHOvG>`{&8kEQrxwV#ZGqZ`jn#%u> z=@__fc~g0gl?>(f2CD&j`5b193Vd5>S^03CK2Vp=5nwPBQ&Y7Ve3$VS^*Mp+6*|$Y zcL-?ycJsgA6-zPwzHG4<;qU)lxL-o0%lzcubPbkHQ&*0wroYGG6cZ3%bU}WyC;4tXp=FOU6ufD`L1rauE(THb`%D>t8iwL`S94Wg=6bN;&zOs-&KK}&<# z*c|zPD5u{LBJ?i}*F<65TO_Vs%8hVctBv+u){rM}5Sp^u5bn*`ugDi>od?B5C??TT z&%u3gefgT*3K;RO)^u;8Yq_%&#hM+ny3)@qJ%K3=M%@@TRaZ3u8aW(hAw9DX@6J`5U>_k?G2W(uPg{hS^VDASH$< zS0NJxg#s*)BXY+q2R043B68V~73z10o-WVIEyJlDmpCvfR)h#0!lO%P_?$yzG0G%e zHn7bl*z}rzB#TCc)+N|>PsB&mWRZ8(bm>`}JYSLhSrGyew{Yj@?PjKD>APhfidh!% z=%)udx_6_%9(e~xqV?TtxXKoIIDGn@kf;Zu)ab zqIiX>6>>E-Yv@SIghFk-S9Cv)l+6SB*fc6%hF(Uar(6a`7JiY5^DU?ebk)iWJ(8@h!vp;CnVubcv>PW zlAge<7_l^ur^fJGx+X2&p;-+~T%=m;MyaN61B4!HBpDt$4^AOPE^^|J4m&`SS6&OACHsGA|#Vs z)*Facsd|YuA6sUt-E*~rG{ovP17;$8Wr!HRqeMg)ea&BYU(Bi9GzL>^#?3unnZZjn z7(1vPubUH)9^In0V))!VFYkOLhD>o~7RpU6T~@7$Ed-&^s&&^OxHX}c+9Ny8`T9A@ zKPRu?HFaabot7hC-S|hhNlM=T+SJ;Qy_AY@Ka%Wz$? zgO*h+E-pt{4m)><-eUGkYkpA#T7Nul(;LTO0+?Blh_XLi7lvT0E}L3$3goQ?b)jXVS)G$<40X+CcAlVjs*fOsvYC(~mH`83FRZf^rL zgo=e8wg#Ct0~G1IWsU=W16o>#%Ki)=Q9ixAZn_;J%39MgIk-ijVgdemqBVVLd?4Gq z5GSM8@^4#JkDJQVky;Jzb6RSDwOm3u#|x{1r3LMWDRH_x-clNP4(qTLJ29yO@bKHE zrh*N~idaHlg^NpQL(v6H-q$)|>^Rj{Wns>ORbKp%I0xKOCdw2%yd9r(v5BXI7j!7M zJ*aAmki{c*s6g;;htfAiKYkkye~D6h9X=veP==aCnc8aFtT=qH%pI9pKF>aUuaLS% zjlaSwN9$&eBs?2NB)DtezW2-0xGmx7O%l|eb&WeW7-)M(U4gnCqW8lk=<}ix_@a{p z0ka+Cx^x+v5~;qSk6VmLO;~plW1#L@gKq$L8v9`K7<=OL}}X;%y*FA zsb3b&aANIRa7`5zKwDk2bn)BA>H84HdxC{tTX}(ze?ah)ECbhP!W{~DZSZfR<`{fy zkO{XWHZqqnY~Hp(BGFrPMxscwAw)p1`b0`!LAnjGgr*6%Y3gT8yHnlA^n}{CLTIXB znG>ILz@@wI9cV^c%sbmU^qRW(IfXYl8I#v!q_HO+q-yc(n9=ZebcPz2=&A zi+Pj7M*qRJ6v*_thE{ub&jup`3tC#UWOn-p-x5d_2`Sr_MTP)#i%C!Pk_Ez&?5KUm zLc@C?DI^W7TK0K$D7UgQ?JO^mr~|=3R*yP26r!N-C_NNTHSV$n=FpT`UH47B z0OpZ!ixEZhL~-@ZbKXetv(#+`m^Z}GVw}wjv@-J<0FxcR(b~< zpFVstT5vjShb~jn89;RL9iys5!+8xi9~Thi-BQltIQ?GZaPzWRG)UpJVfNV&)(xNN za2kg%^TnaJH02IaRY(W}|9$Q%j;W8{gK^; ztcGu~_EVtOy-h#e+vv6~V*wf}h-D{eq=r^Vf3P4{2`#z~(J zY$?+a`GJAJ7_!7oD>Qo2 z^#7XF!Ol9~4WPHL0KJQbok|7z2UZ)5t5Ls}pF-jTZwYtg-q?D3hfzdC_Bhc?jH-D} zee7#4F|Z8ksBN&Io#X2Vg&PYqH7|7ZE%Q^%%}c_WT(k>FPD5>%_bZ9S^|t8pKGHot zTy)lQlGcRM7X&XP>88uqa{l#7?Hr`!gEOkj^tL0+K)ZxclU@xgOHDYnfOdW@m)kn; zV5PTp<%V!gY6x^i=p5g^O}8OT(cXeI1nF<817d@T3X@vBAB*1#!G9Kr-U)s}I53F4 zWPsH>M)fq+3mFe#d%$7Lft3dPSFAd(aF1iKhkZf~u$0QQQtIM+OohlOOGNU9m-fX4 zbX2I^A>tI_0{rbZU84N5(i(MJI-ILiYZcL8zI-&EPNsmuV2*|$C^+4X^gY2^gE6fF z?L3}gG#T-#+Ja21)p|xpQev+oct$w&m%0s+U>=%%&)3@47UWvnCDe;gr2weiA>wp+ zl2npFTmWe7m^e!yXc}f|NW|O%*zF+GLQcu?Ivuf3@bMx_WOcK+BkRvT-<@&`hZ%Ug ztq_r5Z@%R>iM|64jdqm20*-qGdY+xn2U5~knSmbvg4Fby@nwVP2{o?khx6U25C}b6 z0eY~XwNP>Q#Twpgd zmKsTLgKYbVc96qpPxD?ToSS5VC)D)y3f*(OeLt{Ch}%|1Ld&qF!bkAW{4qe$@Dp-{ zq}&$e2W}C`CXt2{K871)88}&apKhF973UyQNI#v+)=*Q)r<4Lg3xhIITK;`@*F3TV zt*cOM-Wbi2Ms~xT6*tYs+`El$bV-w8^Hsy@l zx|=qDKR7GatKCt`T~Xk6sarn##arnE&KV}^Vq%rP!>XXuSo}my);25X1I~6ej-U)k zZPhIgln4c>aKSJ)bhk7lwhjJiyUJknsNM3YmnY8cq8e*LxxyZ!;5sBmGQ2c5$kf(| z%KnJ}**|>GrszFxzh|>X?B-KoIHVK{V5Hj&FMYf%yJ$B~HH#L(mMSClG(P`A&R=KS zA&b2z(FUY8X=S9IW&{>v2#_{1uIgtH7F5r;09B> zuSwRSk*s|CBG?VCm~HkhUt@cQOqy{}^0wcigDxW9RBxkK3KJ(umfntdzbGf+7A}Vg z+epRg4dXY%P0SRjHB#P(a{D^CoBEvR2d9#Tp{N$q@AftFOW(Xvoj;&FpSzUDMwQ2>ZO8BU$d3DsRy=I^c7`Lltpu{O>(hjNWHNxbMJMxlYaJU^t ze~4Q3bw((4t-h}`W^9~t30Q3~ORI7Gi-1>CtThYR^gC!Dv_|yW>2h}}ZzkQX$X0;r zK?GT~VT?^{s~*p=VN^}Xgz*@B$Y-3Z7CXdMX-sh4Ts|IjY=+~J++q)^t0mg_Z)x2M z{dt&^a%I&UL=V{Yp^Xw#+w z@d9+(u28;1_Itq+`aB$Dv64=Dy+_N12y|Y6o)`8(h*&m!4flwvEwf@oQ_eKN=F#w$RYZOAss#Hp25|jr>N8n^tMsOfw^C@PufPH85%4 z(GwHZ+V*{bd!ADZ8|V!Nw6sFqI-h)KtU$d1=Jgtcd^=6oC-&XR?-5bp%EC+y$+FUF zben}NTL~q)&4Pn%93WY-#$dMn+C10#uqW^VH38-pbi^&TOuX8+@Uz=ddeA)didc(7 z^!7407}wWU0ZKMZ9AkdDr7e>zeUYoBL&=>Z*#=o6a_Of z?Ll(V1u#F2Jg4u^+s)l-_lO07@^35K7E6XWY5MckKaGsA9py*rLaw${ntGrWp^myl z7mSTPTU;aT7_pF04~Tags^R}%TkK(9P`Zw$ag-0>Pla0S!41ey*@t(Zup@|gmBE#pe z3BAtG#O&6|b|N552+8$!f(?)1=J-*lxdVd^DTth~zD4kvloy&m4YeP)c$X8Xd z+F-=$^%2vSJT0Q1Z72^STvjb>mQN_9XhkT!VJ}_LE_ZQz_Q*m;64b6ZJx~o?RNKU% zeTxGK#w}SE72IE>^VsDJ_Dv6r%ow=xpyf&W$x=+RE$SX_vhhinbVH!&BLOpkc2HcG zOk>gZxsoAQ5;|I@C<90YfPINiPKu;(q5~P&ev%F$JAfrq7AoF5oasotF`Q(>9JvIj zCDV>s?WjYzxHXNs?*p2`Z3FG+*VJjhMP2&^t29pBTI8^^-9ci>#`#B5xnq`7)vtBJ zbv011<4V&>vQiU#d~l@bm$y@Opz%+an2*^r4APcWYgTwb;rc`omqi zUHoA13Sdwd2B6sy%SI`p|h$+3M(MseR238u3-W}dt zxAB=eTUjDWKiydF5Sds5ChIbJMc7T|ZSj^@fsyH*LE}}p3)$w3z#H@P<=107YE7=R zV@xZ`5CT1wF}>6{%m#MUdW)X!y)zYVEKJODi<4!)VJc2mso|4v(?=@ZOQ`{r7mz=O z2Je0N0M&IF5*73qZV<8E8<+Tr}1eG@v-^q4PW@+0)E zlb|1{b#`%QWm?{Zau(LEFkOA_KtSCNaSa-b`!xJRwcbiCpnK{N zZ_#Bu0nn|0t4F`zY5anXL=*1Em~l-Al>BkhKuPm$3}g|p1w;Z!FcdAL1-4PxAp zb#2;lZXnI=vig<#A=Ks;q!(@RO*CxXpD9vYa8_nft`aY!*^%6xk4#}zXCV46Sa5(u zTT0pKtv~3tlWO9rz!JbHI!)?o4NOWBhTmXE|9zW|^B=cd;h+tBi5;X@Y>-~%c||yC z0KGs$zt=Jiw&n}sD6-$WkI!Rb)7;@|%7FVL_95)bb-p@trL2K#><$qHj^cV2>3eq% zHFw2q$L^t9zexoTckGG`&iRTMd5j~O=vB$$cF z#5CTLam(AX`uiXAgQ--oj-8A;wF0*;$SWkLH% ziZTo7N8*Th$Uai;*j`zIUFP#L{2p#`oPrH8@;LPTe4gihkSLmA< z2!VkE92fQ(<17G18ipnz#sOc)i3}#^x8d>^ zCDAE647LE+pU3X|@p+5dr&6b-fY|22F8g_b-Q(pHG4wkqW*CiV`G?Q>a!lA#0c|$a zjU638@7oG zQF==Y+Io78ma}>^8&#|+a3!^4hJ=Ye?Vty&ekI)V1gJzM82=!=J3kz(vKGLKL%ooF zbsVk$SiWJ@QyRqYkE2%sC<4HbgsA@N%95x9>8=-y>S!}0*Pah2bn^p$Qp5q-F?yf2 zge7fC6Bnr2A+D>2q08|ZZIT75`W0ddY(j1ynwvdp1_XEBK+_a8GOWp>GQoP3t|jZO ze6OU=Vcz?nS$^TpL!#FBjtjE?x=c|>hH!fSh47vyiVIP9dUI#d(N=}q2n8ekSHaqV zrovWs5emdcYlz$<+NnjULfA^npoF7f+%Ev<7Piz%qu-zYiZf4VGOuqCQJN)0;5M`K zem^fYD4fCfm#h%?<~|}0>EO(TWOacLz=C~SPOSz3!*M=2t6tG8aNuphhb1=sx-XNu z>{Cfp&yaW5S6*L!cxMST!|T$*^h6 z8nKyhDSy8XcNfSd>ouy*4qBS*oX+ELkMAeTK35OefZ4%TYiiWXLs~gz)n%}04VLscpqWAKo3%)- zc^i@2Vyi+_s$x+Y53zTpfsG$irH16#qp3@7fv^~2LV>@nBm|=6~T~v zLK=mN6{5F*5#w}AZjKQ0qTfNHwYeG%4#%_RbiDb`)8?JUttp#;$eB6B`8a^&3&OQ& z+T}My9ZYaEVeXU1 zXcU>)i(jE?h3GY~Qoo<3k589N6iBlm=G$qS-n&jKEZt<2l)tjD8@O-CrQEr z^`uEGIQyP#F5nHeVZ;&5aM(U5SAi?81+(>_(+{Wk5MOlf0`V75?hIcTG6B3HOPxDf z0@AIBmG2uVJq~~Wed41(K=lUMPk^(v!*IJyU-4mlE}C9rQBxJHhNX2+NB3-5-r&%7 zg)Bq1NwRnPeTm-&3f2l)hDJPkAhNB0ovto6h+e1GTx{d{ZT>x;e2)6IF(A=e#O!}h zJQ)I@C}5wfFN2vi`lnwVdiXXQ)bM&4ReH6N7*)t`ykVAuDPWX6L3~xx=2^XCmV+D@ z8YRb{Cus$GVQ#7z< z!?-F0hWmWpqE7%Q-ymB}mu*R=rjN^DJ%<6eorS5c4uSvv9xpbIF^)UBP)xEtCI<-d z_d}jR4NMjwrc@ewEV@MnRBn)cm0mYZ*LiYtNdfoA1+i5iS;}!*0}8uJ@+>!?sRjdC z1Ngh$20Sp9@&}1)+VQvH<~lBti3Nb4Ns~~Hs@F|CHWcm%CaSCsM@;^{jZ1977la6+ zK^~Dx!oRxggS6bfhV=L`K5j&&O{sR|TYnKpY^d|wE&3J}94r=u2{LzIjq}*h{C5jN^0k&miv$SW z1`(r2>f6*K>AwHuo~X!>ujS(-mM>&PE(poXuSlznzo+-nX>gig&!FFyhfojako3T9 zg&IvZxq+vVX#I-NCsDV86|vu>(DSz~Pv=gk&>2?5*0Ag^&Uy;#7X7MU;y)}X@pO;* zyt?%O35P;CJ(lbQrL#Q}%`Dr%1+l+g!L;U$1OFhreVec4+;tJCLTz*s6*MbiS#8)J$LS@JTTteJ1*G{035(8}5{TXOa1V}h>LwvO*F-BlfB(-R*B9!tXppx+;KT0jzYDy{@C*GU4Q-*K+#hx>i>$d3oQOidGi2 zyf%3Ear|vPtVaEot(U1>FOcK49)3|b^v7sB3M}6+ zCe?bo@QC9pDOj%{^@~chpxe{Gj4T>Gtc;)jRp6%-?zULG!4i3Qw_Z(FBP7xMNQ}4| z@rVLq<#Qy~(9mWw3mn-Pw9l%-qV_eg=H8!gxPFZ_7Z}^`pslXx!w<&3K>)iQe500z z+3rKuYoC=@p>Bh0P0}^~79}O_G_Z_a5GyZ(|7(68KJUXjcbcX`Y>o}1$Lf(^OJ>(- zZil;eK=|`$uA3RIYSH2hhwKeA95^=LFVQgufGz-bP{LRFetM>Q01gjVh#2+%L)oA0 z$c`jk+t{u24Qzn(aQI95C4B-Ud5Mn9asIRZ~pR~GUc1KV4T7UxxM*=>LnZKZv}0n7G2 zIt6I9Q|2-*;7>vJTlCcFV^ z&lwQCZ^(DC#O89nW*6?ko%~cpfHjKS5P5Ke)C=K@SMQ#$$xT3O1WsFk{eAdo%eN*K z4Hq!qAc>M5fzpL^9xO5xt1T3N5w51D6$br!bVOL|0 zUM?6^%3=EXCX;U9^o)0>o2u(}W;8lpl@p2Aq=4EDnG?!$^+Nd={BtOR1u%du9wKhv zklMyQg**i6UJ!|3i}C?L%i67c=CkFvX&FVX!RRk2Jv`>yKGp6*>VbvW8j4;$M#7-Y zofl%j8pg6l{T&X7x2K-q>^QY^>s-ea_CH^PcK96wD7iwN+FxI4q;N3qlVh^398 ztW(dE!@r(b>y56hGmvD#kK=L~|3q~K#}Ob_w5#XG)q6jHHbnW_x@?7Z0|u&o15Tmm zaQk?2>lTnNz?Iiqixo(&pextou6z?bXW}@vfVG7zRNK}8Mjv;t>Q{1PMZO+?{8z=R z?YLcsQB)XYrd?&0=~+GeCXtHz4VijM1U%5=QSMo=(y)i+>;cMF}RJ0RNQ4 zM+wQvE#@<->Xl9J&yQGIS z)Wkb5KDpooC|$H(b|kBaI%%`QtJ*la8=4oT8tU2-?gtjjrhh$=fx}kYZs0}=?KCv% z=^;MZF0+uU>XtKkz>U^w3UizU%f)@UXg@&pj!2`gwM;h0NTOXwAgt*0_z9Uwze&*S zz$)@AxOqmA7oh2P#G2r>=~JM9lpA416Z|}#^}eEdN2Jky0iFQyspaab9oWdCd;_+> z|2xIvo%)!f;XV?0?~qj52OV$2Z|)~@?SOEcN~>S;FLg}vqvJByE@y#u7*yu!vHWY) zAWM8+`XYevZC3x}U%?T8yL&Y-+!%{G1(#*hgETE8D^pM8Us!bh9aYtDh$Z1lFXQba z?k)4GFqEHB6)yMkF?@`^vZ~q{i<$-8kR6AfQdRHBiIyuq$uo~?>UTz>dbuuaAb3$- z?2JXrd8fweWnPz-vM^lNzn;@IQq>z`NqEG!s3Xbib|a){!qdHDqb}0)hVi*I;Z7i@ zX(Ve3!6VBJsing*@A{2W-%x0O?($^l@nShnCst_h z`yqqsix+5T9tbONUZ2C|!*eL)ou&@A_T^oW;q^xL<{{| zD00<=up+Q)b{$Mnwi_Zz6{4fVvM_OK{SH~B=d9sUy+%I<3t~;ZfGHZV6(P=rGQOfJ zoVLatj8)AJS=B87DX4?{QQVZOJ}$(SFOlOP^ec?g7m zUdQRDNrvg~L)0X+KMjy8>Ow`Azl>Ri9?zEJTsnmQNr%n=Z;A5>>Kr@@A)ut(h?Ag! zz|QDvh+d6SN8bx1S@3dS$bT==eW>B5##(B3zH=69=RLnI2_RUg-FIM4gkOaD`<2%u z)N*+t->j%MMO4dA5tG?`KllSm@YkJXk38I$}}(BW1cOSemQF`vAAYr%W9Z zv9dIJp9t`d`L68|NAEtLFT>dfmZ-Z9-va~p)2(2K*{;q%B&%eKBx8{cv8XLxr|

G{?;W`b5{ZUvI%%A4e|c^{MP(9!(M?- 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 z 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

j0-q1F?9@ zL(5{lMY|Qm{g>dkN_V`bY4rcIYyiHy8GQ516EEx~q;LeF$!t4od-GgJ-O%}*W+AWi81)q}zG^o82Ze zw1E4c4}m4>GUV+}Uw1zIGpLY%){;IdSK9S!9{qpv(QTe-b8~uG zmY-m?TFt5?1ge&hhArez9?@667E{{@0NnDKVsYY;Fh=3i zM>xQ1SX@uFZo|FcsD&Lp)G(tzuqwYs)r$@NTRa)~J~vug8YT<*xyXPA<;<7WJ*BM$ zKBwbL1lGFTd|-APA1tClut#w9$>&$oOfUMlyNCb|cTcpS<*lZ3yaD&pgj6Ed#uoy! z{p1|JZ861oXsO%7-51(b5cvo(g(iD3QfrqI7sb!Q>r`>?!} zboDg4H>4Y#sYIFl4OSc@x#6AiECE#Iwrr zih2weu=_ZjojcE2^`WUu;_I6V>igMEe8&QK=U!dX@%`A@S3eheHqxDT5C_n{0lnWa z4N+XFJJ}=qzbLlJ^dgaXr;`>Mqr!cBKujm4&Z?<&vR(&OP{g*BGU0CRa}rvI{x`+* zFLx(X{Wj`(+LI^}A&Ivv=Z0YkkCO5Sw?^T|8nYK@}j}K8c*t^4-<%h`-^?jN4VB1)5sehKSrNPCa!hTG$jIO!DS1 zvx;p!N7NGZL#5I#WJ0N3dJl*&?(>f;B_k7OV$>JoR=hsITrzI6istZ$M9FK|OSo{z zl722BxHELI|8x(4BeWtED=$mUxVs)EsGx0K3!09Whs~kz@#PPrPV5G`F>SBXxukn; zytltXRcH51m11lAC}g55*Yy5~gU`RjV6^{rD{~FkZrCSiyAcw8{rN`%6cK+esj7P) z^w*Q6pT2~L`h8E9ZDPi~yOc5DMEZ_(oHjJj^JN;J$HdlTduezg2$@s=x7AVE}Kg+`JJ=a00+TRec4g3?%P8|IjLwG&A zEU1*a)w19V|efNL}13m=knmiqKujR-lEHhbVLJf5J423jZRec;Vp$flmsC6p@+v+ z6rU#Jd>2|}20=|IT;h~mrGo_Ag zTM!8hG=ZM#(oN08bg_+49pF!JZ&^L}edkE$v)p=hmB2maS@0N_GCME>Y_^}@9Foei ztwYe(EKmqT^?^y)H?mSz+X}*4=^G=B+zCrzXT^g*9|;vIUT&2Mu1b7RR6V|C7zmMd z^~S@rxgQNx=3(%tut9W#`_61A-2omfl-?foQr@Y}-7C5e8IFJb?W zsJ9M?vU}c#MG!G9tySux)OOWpFR7$#}yIDG=K_q_n@_fGU`=9HwyXQV< z&crp>%n$>F;v=gMUA%rKNPbU1>vkaFtMDxq6!8u$0ZSP(;luu%=Oh;`W~=ja5&z!m z9XC=|U9E`{I*LTWaU_pIe1;jLGMhn$(pvBIBQf=B3NtwI#~pg*>5W4oK9+T7chvE@ zRDxfG0PK@TrA#K_Scn>(Y<+vG_jS2=eAqfWB`Z5&!TL(8+XDgoNm3`2p(e}akS36H z=+SeYvDI1D=46E@y6L70C~hi26nzJ9J>0$^ZsUr+Wz#lZ@I2qagT3e_{LE`Q@OV3r z3X-#}bxhk_2JB)!IT@R)oK_8c(z1^OZ&BR}Z^YYq)@%;@$nh{3{M?Ko+bjU<$;itqhG zZ3(tYAWM$WwrJTG-uK5JGaada7)CehkCvA+lVwmVKTey$Sa=GFbBE`LDrJicnYn{) zR&6!Rmx+k&k3dA$G0W4oUb*jEjMWF4;K$ryU!e9@5%7u*B1oyr+(31x`WVV#6=yb% zufAf`-j#9F+z&%d0G^TKbfDulus#xeZ200agF@lOT6$7_coUhTZVeuxleIe{vC%-N zI*S?2T3PJzLL#BGA3a!PP9qOTczgXx&*vI-4k!$OB=`sKut98ZJYkw~0{4`aN(d?z zQv^d8G^n{um5=YaMSHpPz)*YXkM+Y(AK!mmu8_%G=MV&XynlJJTgMCes}K5s$GCqS z+fdewg!r;A3}jZ`-Gl*UQgM1&h-U;ky3S0}S|p?^_kE)(BivQ6D*Q22Fj4cE0!KIT zvCx@R1gN)`897x|m;bE``_Xqy99xB};?;1WzLMe8f#*|ROERaeQ2TEwKV4;jQf`{- z^5=!G{kYF|5Xg|f>H0F5ahznaDRz&a7i zM+x9AS>s;iFC^he3dK#*XyAz%#T&Qlnnz{Y%L zfN_Y=BgDN9e^2>d3i6>BnphAc1My-K(1q3xSD*SY4vq5Iow|F1Mw7$i|%8uj}tqS$I^a33s~UesoT@$ zg>y(niOEraCtSU?ck-*2&c7|>^U;n3VBu8FlNwVcpIOZE2h$)hOgydXT|j7VNqn37 zmesPBB5dVPO^1IQ5ms93c}CUX?&&)Fkrf!~gcYv5mR#u)0`3CLSHaNzayQWMmh*3}bMho&6hWx{TYFlRy4-yrP&y;w@ya+9^z`wT{Bx&6+WT6}ZmgC1Pgt=B(1! zM$b&qlf49*au68Z577yzpX#uJa~?<~RaU6P6P#d;+hggA#E7e%0UI6Xu75 z05MNfT>v}MF*uQ;Cg9bGX1k2(_K?WQC2tVH-}?LcQ`n&Hi46B0xC&)ToFEN{BY&c3 z^7##<#J`zW$PC|kf7kj$#YmRr{XlQosibe$gU%TVZS!OG!Db=2EgFn?-L(398Fo-R zKz^0mX=*C&4WI%q?tZjN4G8**dS&qdpaYF3FAI14}6BBLPTm zLPhrkBQArSWZm{{OOBfS=)o;xD_U-iqP z7@n9-ljg`^cpPH_T!w^2*hI+qgw0sfSka{l)5iu|w8q_evG-NL2Q{*vxBAfi- zY z09Nh<-(eQ(O4wtA7vlfw9Ev~jaXfg~KavUG$G%ZcXVtA%rD|`$HA66ezHY&V|GgPy zoZeg~S*7Y3i@2}qGN%$qpa+wFwycR_UQky502@qGr+?ynttc5S0xUD`Q*{#3Lx(vdD(e?SV6`*ixHc$$a^8ljVM30oqBLuj>9245aITHdz;vbGHT7~e@w=5c^W|R`CZ~z-Y;qWeSWuh1*Z3%#Xvy{1CUN!$Ul8!hQOJnKC z-S*j&u_MJNB6F#lnTUz@|JJ_kY?>NBw38`KbdxL;p90F6gY*Wv12+UE|5U0%P(tIN zLuJr`#HjNQ@TRx|-bFyzl~Mm9kj?+FryD^?lz}dG?aI4XgrB&Dqkd$KQ_-azU`-97 zgZeK5F3NC6SMV1RueS9m2dBC?&dWVQ4_k4M7b3%va#C)C^{D@O)4RpF_YRdJq=*EF zw+l@lCl_$6%N?cXic~tFiGdH=Ab!@)swc4$40=~n{$WcmNhGh1#eVd*+VOKvHLJrk z_Hx~GXXmJ$SEF*~fviCsps!}&E&2M$i!BFfuYdh>OW z%MOaQFp`c)ADGp-wLGgXXbaGmVPg4?CC(&{`os>?+MBF|LOQkZQxtyNkROhTmLo)- zvD4%`u{EOzmZe+4UtPiW`cp>K2u>`HnA~0dc=MM{E&f*J}pQr9x6|ewrk=g5Ueu+0(3IVFyDQ zlEuQNLzW<47ZNvi>u?k+Yo}usjwlu;R(!w|#Gkrvh#2psxlS*cxBdIQPBPR*-k%XV zIQX4b@IljX4tZ3HxZ!*7()Kns4|)aGo8~E$uWO!Zd<~N+ki8CshQS2EG{Mhl)!JfT zhg~W%KV2vhwNo|=)t{l@ZH}q8VOAUjq=Y^|BrP8=BJeI;5FO2UIQdEi2gd~Aow#Nx z^g4xq`Aa3eW}`Fen-xhVFY%CD!gB%{$F;2XOqhLk*yJtwdgv1`?Ik?={jU>ER8xl` z4U0gC;6ME6CGVI@fUA3Wdo27Ekfupz;&PpJAR6M?27eW|7s-`TltEO#df`374E90f7SP%kIxc+gPj)h zSF(XKtFC_^d!<4kGJpZ+AWK&lcuWwUM#0N{cG#{%S|Kdo<4_`q|JLa-SX;HA$Ju8Gvt%pa z9qs7i{>z*DZlBPA>b2+WHQ}+S|J86M`Q`Fe;CWN|<;?$1-+tR}1Ui$Ewuepf9pW=t z^89dKSoBdy(~KRJLtNxR%Cmdw;%Q`S8dD?n-cKTp0M^vK>+nN7Z<4ujEXl+VT{@oM z8M?v)lFsZ-+I?>&N1!j%mRkV?!8Gt%)$YORk0ti2Vdd1ot2cD%lwanA@xK z%TGcx^8|l?BRjC|F4}|??lhp+q6jixM*dtzi`#8%$)2)1*H}eifw1<3)Ru!){3BHS zC{67_Gi(wb*vjU2bEyt96}%6eoZ!p(P&Lq{D=3TV}nCBU%qMVwu3ZeB_TtW~}td2EFEGjL6G!6CGIF z2-SepLKi=>yjvsI0V!ZU~;v_unk=!F%(*vfx?| zm_YWm`E#C}uQIH)Mj5`$39ma5!_pRVq=0TAt4olkMwi6rgg$EtD*+YD(73g;9nESR zZ3T(Vv$4ViT=JwDF&x0TYZiv(db9?6eN5g^@_CN*g$tB^;dLN&`;h-SAoQC4ggmDU zqIzI!hx3k^O5&8S%knI$ruMUg1#9;homXt?in&#%y4$fpI)qyc7}wDE+Nx>p^Cz=4lR3jLs=XP&s%eC(Z$ zG8`?Y*L0wD8QsF0WhgtuRY~uq{f;C&*k8yc?SHE)yQtrh$@sfNRu{IE(!my`Rw$OADu0`Zu* z>NfA){rO@yzw-dhO?hm5e3-qc()J2&s9sY2oE<$KQZ6HzV8!J^v(p1<`+boEsbx?@I?ghc6!p zEDM)h^&+4vvbI*L?8%0}{WNq&SOc zLgp;|d-@HH0e*g9{7=QES<@7~rfRe@Eg@)LvUGOz3=n^`k;iRh(Z6l|$nM2u^L}X~c$UH!q@oK^N zmC=)vTPc`~23FCy8R3&T4Ox}U3AhOD_umYS2 zKh4(_{SXO7JkEFum;ftW>2tL&JSC8HHHgB?c0waoP|;fSwelhiyUcAt(Ty(Avor>+ z0X+Fnan34X6{v_{^(5xY#Sar^4%Yp5Zd7%_-*Lv!PFJ@I-!y7&k28IefoEy(5mYLM z8+-NYd#k8DK2OA!UM(4lqSOVL=@M7`js@W4wBF_9oO;=sP^{Znn5Mv(tYQ|YwmK94 z6#tdYO?1+?63z%q-w&rJc1Jj`*GRFU^^}5urmP!ao!l?h(Osla>M3`XqJCt+Ei}{n zL5iAE#+cBz%Q_kw5N!kcXt>4^Gg3EZNtgoisL}um<%uv?T5?jfeAE=h>=rrIPoizg zTs$0m*m|JSsmwC?E?0a#AA2PdWt`LmdI`hH)Sj=_h+mgv%Fe*`57=adgsK%+Nw$wPjL1iC+st0Z-JP6O+2 z-Ja&LG4l5Cnp{W++a!%&?SWBGbbaWiA`~+)u6?Af7~RH0gUVhuZLfom_{k62mxXvr z1WFg5^#WAxK)zH57-p~dJ1rQANT75KkT6`rk9Ug;C}ZspLB8$ES@gNy9M}QYNj+NV ztB~3HO{+MWKYAx16e`p{oSsI}xHw{;kkm0mgtFxL&_N6Gtz>*q89^#mIM*`g}4vGs*9Rnvfh5y6RfN{ z01cgHs$u^m&vw<09)`Pwo0yB!CDiN+zj$BNfR>x5-= zpcgJ-RO<K%8P-<#tD>hl7J zQNAwisQW@spJC}tcowEIj=^_DD~e$W;;+tV^WJjbanKLLB<)|ueq+*ZIz^W_!QZSe zk!ij@xH!Eg!U4y+w4`xoDE!~%$lmrL#8dHcr8ge~=#-?k^KB+n&f3=k>2NZ*(b^dk4 zg`z8CHjyRWHv7*O&d7c3k!*XU?GF+kj+K{>5L0c+l&=2#Kr8|JMX~9Pb8r8VKLMnL zL!m)HST{F6Df#YeFz(~0TUL5er&jMeCy)Pm4cCY533CIaS z;Sz^LUF<`Gch(()Q{(t*c=XG-claSyDLkn7G87V8aF-&=P22X~7~7e?pOhb@FU8+~ zh}c5b2(iASlGzpsJV+`Xx*+EKJb8|uL0TVvQURS<&enTT+|P#YVi?av8Z|K5F?WJa zYO|w`IfszErsQMOovv|*K#P7Z0&IPCKPHzGgpwiBsE7xIlIE(#ivytfzvRb89@OLj zhXoR83DKz zLN)WsP?R+zI$zo^6Qa%>rq|n9BYQ%Su~#^g-cP0a2k;Fh94Z-vrzdw|JbMv952uZeR*_3(UsicG!rMGefd*I7UspfC3^*;ja?G2|A5f%A<+7-aPG>( zgT{kV&B~QsLUyRu^VA=We!b|g=#KK~tbMR^HJS$5rQ#N9EcGcpYIJK895dRj&8(i~ z-BkK3+FEY?P+;h|H{bX6KDh! zVXjAVOzSWgDn-he@L-C%d2Ksuow0d?=mu*2eIGDi6ZiYN-@Fs`_dhXpM~_G2Qyjo? zpmks$Qn;7(TO5h_Wx(!UfuC|2)fD++;_|(gX)D?h-Op5WwhQW|#7pEQ%;L~|XeUWK z1*dj)o1?6!I8htQjr7H)EPUw}q;LpIxL8E*h_$ixsHz9t8XYGSI2*v|>IT|K5S^ee z3BvwaEU;+can`2ZtaVx~c4%cDf-UMrSz;x?#=T6+j@}*g=jQOUT|Z5Ck|x}Bey>f8 zNzir06$$pSM7EKxFqd^H7}J>{0N}*o$Hx28wvN;WwO_2G+q^GDZ$}PRMpG6~+3aJJk$2mcj4k}2-?x=uERFA7%(6Pn;&dA$dlQQf z&vxtt{_Xn7$fmLh`!C8d2-!@K9lYC#&lV6C}W6N`*#@m#Lse z7}pWAv;KTb6c*0c4w*#&!?S&=1WTV3FsYf*x(z$)od9_4-uCMGY1X+&wRo~XL`T)0 zYd@bfz&QqisQM{h)lC7(usB?K`S1hT-fn#Gm^KR7gup70xl3_RmG5~HE#3!nH^TJeq1Y$}hsfS;$E{U5oHzy>V z@#=&rUpm`hZapq7&N>Nj1|~%f0e@u4+9X{RSxZ3eC*Wy1m67hg8)&D^RL+4uuX+pF z?J%6V;)p!`Ccb+UAzi*99sT9)sz+Qd=HSQxqQi=liFv{<3%X?bN@zU~Wz`N5lr;(i zO98n(nTm7_ow{Tf87xCng#l%j4+cxw@*Lj%Jx1Tif3o5RL{`e6du7Y2WP8~KfD-_x zJFc4D%dmY4ay$5k5X!1{xDFrupq8n(Z6RzA(06Q5Qk=i*O!v(kkL5p7i z%n>h5fx>!k{Iql{?+}PqWV~qhxO8WD87niwk3v#rlw<{bX)EDc1TGO;`O9$UjBvTg z(J*74n$=Oj~W3^XhupQ8fa|ku9HtvWx~j8^1e$UL{0(P zD!+n_t)o8>yb=^Yh!nDsE9lUpp6}}bx}*hfC2mQFc?BA}&;&!=v=~L3W7r*A^1rTk zj2KNIbAWHqFl$Daw@lReI|vWPf$yCIRX*LG_iCY zojF$}RimW#HTf<5Z;=}joNq~Pp zi7V%WPh)3SR)am{YRR5-mXpvpYE09QPtFY~1>B0$iw{I7c=bqQ<@4$jnth%vLrcuzNNw$d{5m zS%Nv%e~i|Gd#Upa5?K#-42*X)>ceIw)a>ckfZZMb9caioADRP}>3LtC+#y(fI z_a8Kzw1dmM9jW?qHDfmcF2=V>Ooyaho4$0x#0?=2cFR+hDxJD;U+nhJ0vD8!WD!F6 zkw@rS45~Nx?3`nzz|l3$xKTCC?)h2DJ6MO7>L2$IkTj8^z1!WDvUKWQIN8#X2?0x* zQ9X*)`C^iqD;!g1f5Q)= zJ#XL}+Jb%_KQb@-8yu@2o!$g0K^IJ4q2!EXOx?WMRpQ7uTm3H(CxyGMyjZISE?iE} zSV9jRMZh!f^=W%Tyd5@W?_-|bg(5s=5RTd`r5NId;e}s}?)!2iYLb6ylnuw1Ad;s1 zkBP0O$T_wX0GvFtM2qx(asQJlGyqz%YWocYXWC+WG`%foH=c8SM;YUB?hFhm*r+=} z{LP@Pg-X{w%G>>NDL0iItrU&^UAF*{?rPWw(MH0GM4%hAQh(tk0a+c4p8|WbRj8Aq zr2yYO6vY{Q zJb}#LLDGs3M4z}T6+E<?I(PaN7Bi_eCK3 zQ383_rGrnO`Vl23;rzkG@oxXifa>&v7%C9V5AX}NsBC@7J0*1jpz+LBQG$)0VjUTh zDY3;+Fv9)}0ksR|`t)!3J%Ib*IZ!=1=NU)eWp?iVO4W{LrrQ;a-Fob#2Vd}i*;)pk zX<3fjQ&UmX1X7{4btIU@?4)i>a5m?3@nrr%Z;H>T9^KS+Xr4!ZkLz?tyW806#fif2 zp?@L)k^b*>PvTOi$16Q!_>=zCK_E#z%;n2-eAUH2!o5kzAwzZP%a@_oflsdw-Mf>J z;zsJAXZh}iUV&$7e*#VvxYzYu{muH(EoEFnLbxGAwA`+j-qGNx z6b?|Iw;H|<@C!S2xWn)ClA})cN`1Xbx!SCJ4N|QD{B58|lD>YPhmn{bz#WT%A8vLi z?sCPzE}q1L75~s=0e06imRgYy>cDP`y9$LPw4Mk3s7JSN;6%Y}*S z1D%o(F2lose~hHw`*M3y{)zZ)O|*EQz6-qE1pdaK0)Gyt3t8ahF|sr35WIYZ&B)vr zgGq!o@N*h2UN=ANsXuU#-Z>H*9wp<(>R0s_KRm(wQ;;m(aHAx_;<+57csUn+b3r*f z^!=Y7;_zpp!SP?c17)q>)1~~Kn&5x$@>X^GeCzZ!n?&R`{CD0yh9&;7cq%?V^v_n< z!(|`gDIL^*AA1V9WO*fj`$`GU7K`Vr%f-#5WXQKSFMfYIpU)L&Fcm$TTSX+xtPd@H zS#-}`(!uk!+SxJQzUY5_d>KPJB})LS88Jpg(Bh7IOGwoJ7Nr0DIFvql3ex>A=Lbna z{jVpN;(x%|fPMF6G5_0(P{J0_y?m}8Xm|R*9m4GP_q(TBI@^4&(D{(v|zCe<;`gwP(VLCfjQ@ zzn=xe`lG)gT-bk~46nEpr^K%d#Rfl{DHNn#=jQvxZ4Tc0?q$@<%lZqpthxAZAHz-0 zx7D-mFzQEI=NUwTpKbag_~Bu1-TN+JsTC9sLn@*|3bFt_C*aVV$mrqFa}PJjM>gI=8~mLw>{(6d(XI{9S^Y7ZlX+Px)fkhH zzUV~ytCP2s^T3l!Yw^G>C}mKK%Pa%0@Uj9%KVD|QbnGL=n&cs2F>2!Y0^W2xm+X^1 zsWJu8S=@ukS-_3n&;qB8-_y>%^ZFKU`ru*doK-XZOAFl_bGO7M;8SwVH2OVgFc zcE&+0*M4i_5N{P8O^48NXHb9*#4rn}ioKiTMGU*y@uY*%asFu5$3r*jafxcJX8PBkxm1CSlzm~Eb z`xCYC`xCMol?VyyJz3tVei6b%DaVFB!mZWi$O`e%fKG`Yb#gtrg;5~!ea;qXr(S!pTsfyX^FfwF!q?Opw2Pb4 zF{Cp48{!lOWkfs;rDmVY4-`kYqqbDVJ~NklT8#H^FV9q@Wc}j!@mm34D7p!>=1C$C9(lMxzL1bTFt#+P=w2(9q2*XX?ctc|HkLTNqIF&1R90 zP}Zn8vB_O$%%{VOTa}gBzR!7a`3vEinqIU?!5XVcK<)3Y)!%gbRaH%euT}mCs3mOZ zN${3;NYbm#@{(dWN@>k8`M(F@`fE~=DmIi}qeBjr@|^YvN^TA>HYfK2Id&ru+(Vru z+*qCGG#gZ^!t9r|BdBRH$ua8L@Be^~zo2{k7!Fl|0Nuw-lf8gC7YIym9!VaZxiX=sXeh9z_?_=u%A_{%T)L>|a=7-v zbk3Wp(%~0KQk6kk)ED)CTiPjt#hHt-7u8N-yy^%waa{M!EBauBDO-V0fweAW+fpvs z1P$mb#*hqaiZCKPz|8e8DEY=~Z;t0OGpBL3Xmys6*uX{}5Hks{>Z@z*9GNl~X$&l< zKd^E$C#lMw57nblu$my`S$sBZ_hJt=KHRCZumVdmLn^w%Dj~4DauY|hml#4 zs7C*L+T-7)?ggS-Tkw!T z{szzx`50FduEKt#71ll11UndQ-n+4@xb(C<+ku-^@tAs6Ifoi=N|zhf7@J7v)2)MA z+!x+yiQf{ExAfVM`O}3PySy(O>SEObx_*MXd$;ZvP;&G?rW3s5vB~eQTGX6w%0X{Z zS+4V_N46Y-8TJ3|LczFy7uoy+W;f|{&aR51L z!F6znpG>@|`@RSv_~4CsN1cSk`(YtWG7-8Cb<4rmieuWPKu?U-gZ@b*>ub$ij6kmG zQM*xFRNy$bQad!@M|`sQS;$O_GNlpu$~w|+W%oDau}uC}B&7#uC;D;^t50cgwGgzV z{i}`ujUz?tu=qe&qSt#FJHueLYUng|8P;a;m)4N23H0^_Ua|`kwNeXIx}+`zi8LwF zY52$N89&Gx5bNVsVnGXONU70{V#}2{iZ}63tE@~aQK;M~UnZHJ`CNKnUi`N)5l;Qa zFMXC{Lxi2hL0t%KfTjzd!#pQe$u9*#9DG#U*dZ1rVKXL6XMR37p!UsiiN+!?GO$qx zBum4KPI+jcngX94StwIR-Lt|$!aX{1%?WgJ|PHPx%N$ zOXGnN4HbzYjcdWJ0f$n9-k+X>;}Z7@?@+!8DrI*zRg{ z1lH7TE4k!dv{vSJoCz)8Jxq*SMoJ^d8ikOFgmF1h^GOmKr7%-?rL~j7@U~yC3dS)J z?iSt*+&6?kcO35OE7q63oS~HC6}JHjYnWn8XO7zo?WrIcCbi=@fOm_eAH3y}Dv!nO6?4?wm%>UzOvY`+HQ|ohf3ZM%8+G7(` zr(m5@(<*hiGH$bzo>;3DY%^4?Z2#MvgAxLt&-e+2yZrn-0y(KTYAa(N9@TL*WIVjg zn==IK^{%Gj_hmn`Dp6g!i|+Fs(DnqJYQL8S$5S9nrv);m}GPSVhYPgDt=8K+D=Dh zq|IQAUCMU%k-_+bKR<=YQj^E_e8qDmN8W2Tax#LIL3(mK?L<4T8UmM>xK;yawDf%Z zAF&e@MfBes`koaR3FqVeay+2cK$4sbyN`ziCcEfSXU5*loV-JGKPp3`LZ~0mG$k7` zBI#wezq7M-j$u_{*{b9R#nK7}8LoFeQ}FmBVkmOaA`ue9;S<$no6x?%0ik~|(9jZ@Bc z%|aIc$9`-P{%L-?f;rdzimK32x4=5NX;h;mM#{xwT_{q@t$><=S~^cTj8sd@{AJo?osQT4vanZYtWj5YJxhavqH$wkR~9s(LDp*W}DtNfl>UEX)*W zkE>nSvbW^s8v>fuwERywFWZiMnNeWD+E1{K+e@P^_IVP=k`!)#IxUw)KAF`Ti8$tV zYikGp{UW!Ol5{cI4|YlWIc&x0U-#c3ol>&g6X&85anyQ2Ys#rH_(5MuSCX^F339d+ zvl2=zaipaB=E0k3RDaSgl_R#v9`)5biAMq68{f;5XIyGWu zyfvkBd!8(@_ksz^D^X}0lv$1O)$0Yutw4;tA!lH*KRry&4dT@7O^$LoE)9>I>w=>g z-q~tdA$~%vdTRCiS@KhdNTh2$%DwVlksqj~5RQ?*NC+74X4W}Nt+w1Q_D>G8;YCJ7 z%Lk$cWS*ym5C~TTv|^Ujilayxhwf`g2&`zvQUQY=J(}*KmX*1aBHtMnk*r`bs|q$d z>kKNrJLa0LtX!sH*=D+c9o|JtCvU&#EJr5YS`$+;QXnR+Q=&4tm-PJ$kDS_kL=BkI zqtT(d2k%~Y?BC4LR2Almg9thi-M@#>tbYO~#1P@R=$Wq=TYI*sYIdVzbGhvDpi5did11eMQ$2D$z;Us*0RP z9&^?ye5TyLQOdtb9&Pn?mA6(PD5SO2uz+*925^e&ZdRmyFT@-iYjXUN7m;du@R2Fn zr;pV49x@ntOJsyr|NEl_S>KCO9Kbit4znFX=B^DkqQ>l!r#)J;l{`34bwT82NUIll ztsm6DzJGTQ_%Z$nqlb8p=rC9EI753*OdoKak{@8G;K}N8CZBh(II9uIXB*8$sRm&O zkIJ)t(wBCAU_J=s2y zT4e6X2DYdff3LArlBYsKK`NzGPNM;wR?KxS%dl`NE~3hv7{>n;x_7>r#dimB)Zbd9 zQP@+>vd&K+9=(Ony4uo}(}H_Pb1{UbRT`=lcQtQXyjW7wZx6)KFpv=TPg4d~^bmg7 zCas`d75jxH1_}&jXM4zAspph;n$>!)Hb2n7(N2|SHIdAy`2>&Y{62=`Q4IY+sjP+n z@;Td(P(??NKmI2i{1}#&BM0UtePMVeb<|4I)cao3ROeT;$D1@PX?%i=o5CrvrUYjg zaxG$jWJt}j-@q;Z4PLN*%dF;fG)W3@SiAAey!YHz(W>5vWs$|j#y)X~Jr9GVMXh|JgpC>dOT{M6A4IL6iG{VSwb9Ek9h-yxsp`Nb zUXvS4+4(0zjdCVw$3QOEW@Wj4q_$W=R-Re_lc{3W0!eWwGi@NVOE$yhdoM@EKwx zYW*fw;tA!MCsHqcwJdQdZ~Uq44!%k9POtgL-G*sp^nT zOPA?!?{p ziwva%e=S)Gy~d9Xja10qETx+=&<+$Yq0mHHS&Bx?O2e`c#b(0TypRNA6tsc<_L+vC zC0)e>4_&qWkYO$VnJc+sF3X;jlKe832FW)~u(ud{iF$xC@|{EdO?M`Vw!>cU;iL)Z z)}R1iLPJ488T73nN2##o>mvD4aSUB<1Mid@Ncid9NEKzK{iZ6A(Qvgb6niy)j{1hm zdN0Y~TVQ!Y=Zl8_T0^l?ST=5=k_oBV2+7Q?7e?J|R0K*fi!$6138gG;^vQ zIbtm@-Y`@vZ`K7uIK!jP?_L)++(hCdd@$Z`ZV31A1J2Jx8A}M~a=GF5W~A(ga@Yk*j;d0yu97}_U4n#x4$6_j$Ry$RLtUlvL~*hifHWoCCy zLu)1@_7FFjHCtk2wdFdn-RqY{_B}z>{Z1MjpApSOyK~%6!*6;xT-^?=;u)`{%kZBO&`q?TvGb3)I9v z<`sG3Ig_p}B z)^ePEG%Kxf!j}{@r><`a#@NKI_NTvvJ`9m$RD z9BaJ{rI1wArfbsw^q0z7m}_yW>2`sHoBM>dNqjn0lG$ekFGlfFE=To~8osYxH_96J zy}>3Y7`=CZTbl(D6ad_5*4uYTjvg~E(QcJBG%+Q=1wYr3QGL16Xu)$EdTFT#g)ggrtni@li23|0H!@ z;C>%p`d1^ppR^oQT9u^CReU*G%1ulkc=;MCeI{=}u`{;+7e!+XOm?Je+=%#hSguC4 zV@ILBUV{YE+dq1U?+7c7X%!!sE{)UB9YEkEHO-dw;EnhYwz^h?PQhw`y%7Ax1V+_K zrgWTg8%6hf(IVEWV65MhXaf+EJi3VMQ;(fYuP?cXh_Vx!gm(01l3>ujx-P|F@p`JV z{|K%Gi{F`PNDXa+xG6ZX*y7CKb|Vy8gehlp*u({ZHdJSMz><xb))qiMexcX~u?%&|oCrN+@i{~bQnY+>HKO`j$2E?b~Js1Z{?*)9#X5als%dkTF zCE&NU_xd0NFr;Xo>OSZC`Mq9ps1bqz;247{q9@{%VHnB37ZQ9%}LV;JaLrDHUrpm(qq3sU2K2M3S_Wy(X`ye0p;QVE$!1XJvkm}~IN9*!BC|gND z`aE)7_;8j-@9!)R7>U0aPu_uvj`CZ>z6EqZ$p7419QYsX%m*dlzr82m zuL#b3Y~uG%3Uqr<@@M{sP(z0MygViPvi>4_%aVj&{e2c!!}fVY>J|7O|FZc1%lnTw zM&|d@yZQX~gRq+-D3fd=fmYT~&oX zsmV1qTh-ChppNjpmGPp=jTc{BUu!1`Cu7EtqDC_Za4H%WNe>RRuZ5VuaT)5zsyw8N>jm>3&x3QtnrI%MZh;WD<&Yf ztQ0d9Fd>ZBc$I^0Tj#pm=OSFxgw{5WNB25l?W(|h3grt_$q?70qcQr8)cq9GVqyl? zCI0+)vPjr2#n8?(cjo2!S)ka{(}d;o4w#g)@LBcO^K-M5a*i#SBZGUX940~qc?4v@ zs9((5(Q{}1omxBXTFHPJJa%p%>5TNv%N>(fBHAk)5te)B%i9@{e{YEuIOD6`mi{_w zrav0>8jt^~kF81X8}K`c!=ZYNyPbS9L%BM;X|d^9O=rwov%Gb&?2aS+;G2{?Ooo5p z7;pURl!fJr*9kKID!G+qd;v_v&v?Q186eUvY@D(Aj_TdRrB9Q?I3UoZ zlOlJzd2~32OPC%7F4|>qXkImfFmE6ZqaV{<=XYX0`{APL!40d^FMF;$G$1Y_aGRU1 zyUNJz#L7YvOdRtXj>7Z-5!<;8ntOrfaZZ6$4Wkj5Q3}(xaNC?Edt$n;%(Uyy!~%e3 zea8;O$KKrKed*GyciOc#hu?>Z?=Rqsac4qDD8I=62Xl@LH^9PEw1A5jVk>&Gq{?V8Zy%(m ziH(-_JU;3$nV!X5dO{Wb@mpdUUZ=u;Wn8ii`ih%$oXXZ( zrN)c*Ck{*&B7We=Iv>i7*>B~6ApYn>)1#995Nu-^7cXme`CQDK%S61>HG=+au+j>g zP-t;AX>A}_mEWiXu(^cazLVq~l&pY1W`16eSBZvt4k3Lj!W@V{A^bo^mGpzQ0d;Xr z5V$-xZ6fxj8ymB;Kv4*ovcAN1W$h;K(FNpfL1(SFj#SYNy`vcSp21IXWXs+_?1OIA zg4s2GP6SjXEqoagn+lv)=YtPjyXvY$s}gxw^CNr8c~_jSnaFRM0bSDZ8OWFK zG@Ezv91m}b5&o@v_;}XYrki)jEj@8SOLP*fG8MuN;CzO~w_2nMVZMlRCI{fM2pbI0 zjFAxiKLRCy8u6LRb{l?yGlC9*&+&~Tvf9b1N|!bCeRR~Lo?b?*%}^h}|Ap;2Fb|sS zu1ZTjl>?lzvO<@iUnQ_V7dE3=DkAbW0*r6_PMlw*LwmOtrw5=Jo#a57+0esxB&fU? z@yj%gX@3Stn@sXQfQtp7x=>(NVBg9pgC#1Q9D2gT^QUkN(Rf+-Th)*1P>zYjIj}V{ zTgv4AM8(QyCtUDHfm3R5AZ@!|G(?XMQnp1Inwtdvg{!hJn zQ>g%p;j{J;*=DXoc2dAMB$PJzdW7~j^p+-(RUz@K`eFY+BJ3t&eIRy|fc+#R=}Oy& zP8kiZpv#F?Rvwd=6+*`p$>$KG`W6aEQE}{WRI(NY2kG7$=}Bv-&3t91s#uf*7b10v z6$!%xVCf_es^QIos__nE_633POi&hwh8^;cJ<=>JA7v;*Ui6VV&?^ehBXxGwe8-xZ ze;#&ud_~^CCu6?&jv~Nw#o3L}%HdjQeXCI8V*HUv&ZZO(b#Q>2mpS{@<3LPq#`k2N zFQT-nrZ1N2tqQ=dc;$WVo@d#@D^UJPJm0*7yPP;e_M;^&4X$KDZyS{T|A_j^fU35( zTWOJQkd|(x8w3RbB_yRAk?sbOZprPTK@bH&y1S(XB%~XpyWy_6@%`>UJcrF*G3OKG z8DmT|ePd!e&A`V9n#@ubFU-w8Gkw?2@`#qJb$ne)<~!rgiRPFoO9QbsZ&8(NOG=m2 zEE;(h-_FTUZhy2c|2uX$*Qpe_syy>-_y(ErCEB{O7l9!A{Ow@xe7qgP@RsPAHf^d$ zb-g$i^AnglnRPrQ+obo$GPUx6+WGAkY)E(-$<8QSukvm;==EG3wFE`3|G3fw~ z*TovS@GS~`uP!J#$y*8;NU}gl&kqfw0xnmT(M`EZ?@u3j`j2c5^(pZvwnV3xFzq&0WlNHv_Zn~RuL*9O zX48$vi@-|b-YxYx=_4!D%q8fykmRv=3K)d1)0rChhn_%CTtd+LQ>rr zs-M<8f#8A0>s7oee^i!RwqZu8&)eGtXXgh53DKwMXP_Ib(q!BBS-YwyE5s zkK;cDbGkSas*4^40HSck9a^24~b@W~6z1Y>yOs4#xYx7#wHO@GCP5<13 z%C9|{{xrt%bIj}bT1Rq+KKts?qiA!nD_gb44JEg7I1(RciJA89S#C)YRPTE$3%oG) z`mHP0XvbKRus|_8EAvX(+k}Xzo|&Uiv+Tc<7=dZO=t5r<;wNZ-P9Q>jPJ%tR6!SHX zkA*$0Zzdbh==Rig`w&|o_3O=_KN7I32y%F_7g@yeREcAp+)W#gH=-MSC}uzJ7;~nV zwrHq9;urnTDT(NniynRY|0TYcs=6BDxj3qMW+HOC-V>3=cs<6|fCpPnf=!;eg|*R@ zX}WFUiPTfgG<4gC7kUoAB!&W$1A3&GYsR0H=6AGzkGy!yp72YLXk@Ifcd|n(dS)Rc zspb5$C}v=7ysTx`{WRMD8sf*+eNWqYdceR|Uri&RXN1KL@wOBL@9b5iwWgUC{a63q zhK$moFeV_8Zq^}X^?36hBA})4YAC1t*q!iua-`%=O2&;~z%0eYPRDi~5V9osc<2Yb z`1yLP9X(7cE`|39j-N6w@}4te zo~GscbhQ*+)M!=B%Fn^l(r)QT_HKWapd zz8^*?F#DLc)c&9)ITfykX7XCYnnO+V%0K1&2u~wc_22X6BgTPno!`BE&s71n^d6G` z`wG28quAokF?t@y3NM9`QVS*cG_Yx1{{vYXSX&c={d9ZD&qSFXJaenUb}2W`K~2yo zEjbld4n72RMPb_6{;R=cXv9rq5 z>#wXIla?YVL1{tKoX+XY@kKX~L^Bq=_JoZ4d(tBCJ(V5uo-wRsj~cgQE9TS5j#oeX z?0cG!_u#O0^ITUq?noQEsif|)!$u%whhWQ#28LGx!2}M-N5afv4xi93pt#m%%$8{M zWdR=IbIR4LE)9ccAWgQM(jZ@ap0rSo6eN1r>T}4{BoKZGVjR~BO+$BG0Z#s-%iRaB zV@Rm88nRhd_v=yTo&ZtvYxRIfJyvJ>@X~9cqOdFrF$zxKbmSbC8gO)7(e!~6_)Bw9 zN;7#g7r@d=5(LJ=vU&5_xMdXRI0cza@IIwx)n4a8Oqv&-ETKL{m5 zm;YiTGkijh`~rtVDk-gELk^R54{TdqzJ;RQ=QMpnNM7k_(pJ_<6r= zLrCKIdV59Fog0<&-qXhrVFPR~+PdFqBVLZRfd&Y~bQxj<_Cb%FgH2Bs_4(EDgj*m+ zDLoCF@WSOVV)NE)5*m5e@S78J&hS-zGlWW@tS#|;ML@bY!~QlHsf*s9=;H(H_Mg%Z zp|bW-E?-pm{W+aLpuT2C70pKyuq2Veo2mN^Rg>6%e|=95$or0=iYK;aGkzS1Om~F+ zh-GJT>(eML9}b-~<2=Umb!4+jCw2y;O$ts`0w}qdgz2G{?fFBr^tgL!0rSro@;-h5 z+HNh?t?sHaMhI->FGYvR40o?xZvg7rZyc{DmkXW*Iq*-hI@faGUI|2YF< zqCi36)4sIo3Uzd|?1#R}E_QFCII*93W?#5Wy_j)TKFzEfLPf^9_qM2z;RHhvW4!df z9O-*evoXf7TtV}5hHtanH>o7V)}xKhq_Q|IH%7@~L087S^6U*n=f?(PFCd>HIrmiNwf1^MNy z9WG`Md@TzSNE~P+kEQ9IamSB@e)gKAkNPj|OG@qrS4<;Xv3s2NVOR=?qjf&wPDo-) zEh$R;@rf1H9L%1NoqD5B$HtULMQ_uF49x~~Go zu9(RpJ(H#(;a7XbD~E5tz1&rFsDoluAt_PGK7}HO2Eh)@e&Fz4!XRm`OuAL!KC1$)YUF zpYhxU$U?n&YH0C?#lnMa<#7Uy(~6U(y3wtAo!$g0!k*55b41Gdz|+u5;LK4lHAFYj zBG(bZJggVSDr8~i+Q8p2r0)LggR&j{H@jy(0mGgtgQEn!@@|GSStgK;fqANF;37h= zevK}*=+%{rVgArq*spA5J?{aB{SL-1K8_D&A!sz+pQ=NQ0}3eED01uk*RtNrYp!po z_@1wmsvf%O&?>bu6zsk^W7%4i%wdw>q$1AGnh#zg*p(Y-Vh|;4WT0uqy8NKx`NUDs z>{Za@ADuU-=~Ot#M?gz>)X$?^bRem9up206%e0A{SMJ%bxFC#dJV{&rw4sBoA*xuUnboENDK*p8w1 z5vtJ0473c7O*>e2b-=YBA<5Lq=pj!fEV{o9nRjqhwl`|ZQV_QCbG-x8Lmm4~uUzv_ zIMA7RA&)n{{bY|5`C$s=OJ5Isxe5rB7(tRIo)p4LLjnlBAk*U;9^Re=^*t3Fqv3$X z7ml^2{$-ZX2ev3pi`RyXKI)Kp;JAhM6=xl(YP2L&Og((o@jH+FKa`&}sguFpIHOqa zN`6zMoLL-msE<^jH9ioe!4#%df;ul{OWK~x=8<;@MRJG=%#lxbNJQJ9=0*-F-{d_8 z>qp3Oqk;IH<0p%B2r!dFB>%OHtJCHMkpgT<^w$u^38eFN_LCDm);*s1c0J-BrO%+% z!JKgg@vfNUBh#uG^Jy8Vhml;3I?k)@qw&NsDuEtntQ2iq%$)-Md$`p2y7;kckd_*c zyazgAR2`|R8boIFx+~oua{8z{JaB)6V9`~5)Bz?i6~J0yJ6#rX<`w}D&n6MA_e+c4 zH@LrnVj_!aKRfdT#6JH>pCFy-oSz^4^e5-mlMnPIb;zS1_m`gHS5re3;n$ALN4ge+ zVeqWM9K8Ot2y)TL@q?r#DWzjR z=1DYY$(#o{NKQKwm3Qu(6?yg6kGso%|ydGDCd+CQLmHuZ21N#5M2TFWXv z`s2qTtetk$v&Zp6{t_Rk+F=kzEWn6j{}WKnr7RCdWLHVS|JhjM7N&E=9@_5;tmfR|(#aR7N1WE9Cdne70U}wM_d^jGLAH*J zQE%q?aVUsW9`uqb%rE$?5A7cY11BdT3dHmQLd@h49zPM?jc(7@45 zsI#-M24Xn0AEH;(jzcYRB>l@@0;h*knhVk&tSnHUm5$(KK%D(9qpZ|p$NCb1$$dtE zy4S(B7nRqWm1bFBNbaPVlkb@z4S&+){B($BMWf^V6u9E#pr;xNUnjVuCft)KUHK7niv+(U7OyHaC))$4%F*MH}B;-4+waHU;oWTtY!R2 zqrpv(4h-M$h(I~SW^ws-%X$fPYwTvoCT!6boIy)uVCC8ikTl)=B$jH1&t~d|DXA|H|Cpa1wW5)@X1-;p9}|X9>H`rJ>W|(v z5^tOm6e0Jj*Fd7wuqr&VlWJoRxH}d`<4ervx~e_u-K6uzOzFb~SCYOf5Ah)NaQkdT zp2dm6C=c}bndhHgUB=Bsl$#B~g+mF6M+f@8gNOw>%upJ*%&dJmIAD3+zyV1tliY6T zoVheQT(KaoVoZ(js_G*T9QXdrk4<93?T|BH9BUiN)-O#*2R}OKes!5vEjm?w}O?q(+jH) z)eTh$Cx&YS=y_eANI%~X(#S7qV2A9)964W9_+I+SA1BkO1(+Jll|*#|PdfcdH9;`qxC!iamrG9WCxgU_a)xZq zCBCk~wLNL-8=1^6ThO3^6hcW_b#72%Ih-LP0&IvvT z#I8$j!#KpaoxOepp9-QN3%0COaBSuXCyocQae$Jhz)k7qzj=K%Gmi|tk(^JzZ!Pgp ze5OEFUPi!p?tT6(3A{7C!6#GR@=B+{V)BqU4__;kYxh6bx6bo}0i{0*#36?wj#)qR zrqTD{0w`RO(DtLR?eBv<`4{s} zt!?3oGKYz4-TKSxQ;A7C4*2L8%OFCcvAD4DZZ(Oqw_o1&`(d8X-9WZ%Yl!a zT&Pol2k%FoC_dBVea$1|$RK{(J&X6hP+>43dJ2;O3Fn?bM9o>NEB)EQ-KId*Q8tLb zn$Vq$-vI6NUPW)!lLSq0!xJm=^_T6ggQ)OO#7?++{vE!&mx`4U&yRw9QsGemJ7RNR zZ#cVelhJRO?VhAB`6t{goWAF$^dERMyYd!4qs9539xHhx5Z&zzo$79Dx`$xLbQ!r} z_)C}9B!?bta6HjiY*RA$WR7JI-o!S8&-@E^#c+{=-N_0v1LgfsdBcD1_=bvC;+LCU z858m(!X3NS8;@o1Zjw>rBrUj1C}4^GZxAV{NbqqL3LF z-=2#P*QBceWZ_kgnb3Z7(VEWmuLMeWvx@f6h|v{p1LFuy!K#TU%J2V%>kVfIi8iZ9 z@EhCmPOX@@CU!}#F$ z)V8CU-MAv>P)len!31{Z#9wu$16~ig^nmz0{9xih~E(Lqp4JY?Jmc= zDVwrcNE~Jy=Bi$umz~Sok(%813ywRBH;a4}_}Xyq*Ivb0`}onnR7c`>)y)6)E-VmF zp`EvM-`%uc*pJ;wy1Om1rRcrlwGEG56s|S6)VC2Fqqig=^<*aFYE8(F{@s7YhWyoeB6aP_aRa>cc8zy~@~yaK7?he0-J!vJTGnpuxC`Om_; zV(2O9Wxt&7b|?1R`X>){`~xQCw??{RjF_HnCg)_%Ch~|F*{s`G8Wm!SJT>4_w0&WN zgVI9Sq=cN@2D}&>656ImuV(yL)k)~OMv_5c%0p8| zKxReQ6SuhI&dNSy1Sh&KaPQV|n|!kQB(>8m!cUj2C>t&s%%i^`CcCn5bCW)UQj0$y zd^G2Y9+}^FNdIyFt>mWGGlK|{$#*`BB9oB+KwLAbMXdLeY(I&|#R9zMeWFUvQ_RfV5 z9*Dcy>_-)CE#{ zAiAooTz}|RjPVP>%uPM`xjWY6+kPLsr?5Y`-b}^PChqIu0LzG?@&Yw8{AMrt} zEj}#|-GG1wLL?rnxZ(Dtr<9m@078c+?hm=BhKF(flZD<|Y;B4|;}P-XYC2y_ol*I? z8wdXJ2Cc)6BtR;Od<=U8V>@UAnTdPMq{mMXOYLU_&9DCH8SPfg_F%Sd} zXHmHHq8l|Fg+Jd^JSt-HNj)b4fDiwTcT#%_z_8M7q@%6DWkU)-hxCw{nx zB86)eKJ|H$?Z2o=vRH*IQN&{p43?7?O?pTUa+U1D5UN%P+|K6G;h9cgan3sau*t6# zYJ!kNza!sf?T6sBdJC&TC9zEXbvkGlVmc}&AXGBmS zbFLkBNL}@%-(=kV1zpZ(uKfc)$vJB~l*CN|H%N=tKU}fpRaiDu|J7HVVJ2P;DeD0E zcDFJv3jniSs5BLMyOXBX` zv;W})Qo#E^n*E9g|H`PVPcS_@Z?6Q160*9Tgs55hP#+}+4x(syuXOpsQ#YJfcjoc@ zE<4nbH07cc9dtLy0~ed!;*aqPsef{q9lReJr0u}%2I#~OXI}mLWmv@0^pwt9JW6LB zX%!OXhR&M&9pyl-rjSies_(yz2)6!q{KWcJXu2sh9oVw!x&gmEjOn`Zz>KoKJEyi@ zmYSuwT3w%^GfIWBEbj9af=gD!yFBcu7*Vp&UG#e3Anm7zWHoyM^);zM{+Xok%2(%} zYG?cM*AA^;9`DRBH@w=`!kG>>s1TK$3wJ`b>&qT!#Tui^-$t$Y^NzFeDy3om7T(QH zFHt;Mnb2Q`pz$0RT_aWgLg9CRYeh+jUo@(u(S2%`Unu zj~z?VmHqlHOB)@IJ=tH4929Vw;`G;4W_nL$h2M?le3!$e_r}!_d(X9(87^C&ff$C=qU(!i z$^z9a*|xO#?u`jV8Ofl}_wp}rFDoxqCjUT9bCyiSQ_1@hN)>;Nu~qE+1wH{+yQIbB zdB-gOzc9ennLmmieEy%sw6_-ALz0x})BGD?#(?$A(1Lh}5RljHBH|TV{m~e+o`HXa zJhABJn3Ow&eD0zM{PSH#5S^jCHNRoKAHi5>sw9H|q zU<%wwIqFu4$Q0PQD`*8xJuwJhkf4YG`Dv-o%_MDh*D4i*Lla8}S(CvT^t zUYCk})dge$`yUCXy|H%TbRdiiyo#rGNM`oE*KkxdMziyjaAP~pQOMtMSTTOgNyU^! zMU{KD^z$YZ0OZ!nLdwH%FhYP+ks)4@|Z!Bst^428ZgyOv!%7QJW%sB8B1gU_Kj6Cp2iY~@)@)ENGX9zd6Ks@D`3f6S<`Z!397ZdVjL!`zPlUo5W-7?6cf`ly&wM4;}Eia@>-E7$p`1v z<0PN18lRQf+(aY&NriUwf%(E-rAOcDph z*Ao?x+C(qjJgM6&lYlHZ6gG6*C_DDr^=GL}cH}x&4gqo!;Efc{Ro0wm3oW3-#1x1@ zssER1NB#Tbyi*Y!b%3HHbibFUu*bcSx|^+%Ubg1pK<^24x||{7bHb;z1b(i`wpW@- z7B|N7z`V7CG0JLe&nGq)f@nfMZ*aRldJFJ^ttYzENSkS7O{H&tafd*buDLxmQHm{= zQHq{2pW_dQh2};39jPAPgvV!mxB4SZz08A%5qTwoMO_0hG#F_}#)Jo_C-flg2Y+vG zw5r#Fck^dGbpEX*hNW1_vr1uNkte7OxX=vXUX`iS@~3{4oBJ52s_|4#CvyqF`sf`t ztlYzM@gZ5c(rzsUf0j7D?!{`)%P>xmm?x2I?W=i8*Vz32Yepye+EFNNDV=Zne3v;u)+g(KrBe& zPUqTZ&C5x_{nBBO!hGL85MND-$JW!&86ruyG9Gm| z4}QrL7aUN&sKi7N)GhqTfbSdoy;&o!3Wcw+n{u64t=Uv7F;K4dNGV&`Nt?&{Ha^n z-}Q&Rm(vR6%9&~yI_yJQ_B2Qj3mX%*_N~CIt5U_}7DWcncJkmTu9C%x`H$Qs+QU<> z$D-9rqob78jX5)8G_2E)84_wI|CXL4`@l~9Zgy$*Z?EQXUb>@C$Ej)ykX;Vb0zY12 zk(a@p`R|~xjBl-2qby&KxWY`jG^b=G{G z`|(^{z{g5{pRlJW`uFscPY+y|ns(r@L(kVqfvsx_W41uZCm#dzKuCC&UAo$C`$rOkM0m{lj$(Bsy5h;l6Sb+uP zRqsBZZ0Nz-7)NCPgn1>S$*?JaOAQHqfQC?J3ErkB?kR?-#MUL;l^5FyPuE15i*@}w zM`%t^la zkt66T?o#|Syn|ZC(z(6|uQS(QU(KjlXUX1uQylVYzZ$qcI{nN?&McEm$pC4>&i<2) z`H~lawe@11h9(plIgX!cPpNobZmm$Z_XhdAfg%g9HxCKd-hoJ-<93)hsz=m*_cFf8 zHw+4ybBgsxilCuq`JBE-j*-C$tSB|Oxh<$4f>2XPyGnk_@&I~F_SHtoJeuWFP>DrR z|LD?Wzi{^M}qP$=;!Px5cdVvpfC| z)dAH9tf^==5F)DkhmofcqrJ<%!|9d*B9D9?OuNimA15)}OXLiqOR!}hRhH9@J)lcJ zm*WKw8|@T9k(&Iw4Rm$_V^pE;y40UH7Brz>*X#P)hp>A}!VppzJ!E5#pFH33jz-j+GW(U3qw{KbWi6)wpRIBSH7TC z3z%oQ0wxD!|a*H_*L<< z6=?B0B)mP2n|09EtNd>wX#IUDkigfY>MOf;qk_bsLxzdTr3ylYe$PdE$%rQ?uyMK~ zXU`SYKo`{dG?hiMuw5zJ3S1CM=gQV8F}z0>Y<;rOMGis$j;yV|!iiM`$b61l%RC9} zNNg@|p`whO^SSo;n^y5CuwJKn`6L{h4c&y2tU>ObUw=lC{wBe{B_BF@qFw*1AT#rx z3wyv4g+9ly_@(_^fNNc4x>A^d?c77N=W zO+Cvi=_-1q1g)FGjcq9tv-5VhCn|W_tM73Mj49;aVB^nYStLu=d&z$epckIR(S>Mn z^_T$cu?6P&+WYLR&p^U^7;>+yYz~wH*n`hJ9=?6y1R8R|$m$pQ1Sy5g&|TUwnEX}# znRc(x1kb0i^Csz(Uun?Wch?wD%9f(D6!C`cac%bt(1uJR-yrpSnA(|9m_MQAAE-3J zTHJY@zpAqh-w{=&Z%{nxn4y}+rTM=2w|r%Cthv4?q=LNXtDI>hr>MJa`Ku8|Aj>R7 zX`)=VlY-)wL2W!C^;Xyd&^X+YW_PV+MgF;z?L79CS969Mi7M{yLE|i$B;6SV#*`?E z1MHy6gC0M9H*gzhL|#ke9Z+e{>s6P4@e6HC9F7RV@I;!6>mL+oIVxa^${s5`SRwEh zc*2WezpanXzfs(&*eO-=cu&dduDm`Cw8@0m1G;&Y^9t{w1e}3Kb9Oc(PbkQsX-HoR zcJnx{rj%vSwLCD2btzyJ{*>nEIuH9lx&E%&G{bo(pDo;apKAQJI=Hqd4kR%tHN(t2 zuzc7enGp{=K>`k9Q)_HM8I}ea67Tt8pHfFQ6r=HVKL+bzqAc#oY6)Irr4CDuiy!C& zRC}pVm3a}6qJF+E6jB^X=aIE8-rJ85PApC`PyP0AL1+Sxp~1P_b>1YX4? z(jdO;sFYT40wXoIY;Vux->^6d)`QQvm@%TwW?$`DGS9?{JQ>LxKdV(bRkMyi5;=&k ze^)grfh)^1p8dU=9S!6iK?%Xx!ucLtcrV~p-*X1pql1IGBFDU898lffuhlHq96jGB ztG_)`#~JeKOAPX<&tYd03BZ_2@K>y~k^c&TOtn(Zu@c3V$L3~r@@%??w7U>VwebZg z^Hi$|{cXqK^VW72_52}1h|hV_uJiL#t*M2BGKfci+9N&p1cgL@|5nI+2{MbiVq)8% z&JU2;6cyzO*6F0-|1qgefRc@Ao7XZ3wnn90w8uHlQlG*#G4&gmFvvY?E0JaIlD{Ni5o+UuK!6%mD7m+05-4ab3315r^h#ni$Nk({v^ zYaeoV>@Oas{z);D2c-dxMgKP?1`&rwc&>HuO!MlPdk2;_hiUuJM`yt5$Jf`Zwp8+l zAp@9espFSZ(!Alo)e#e`f1WNKeFpf>d$^WY4kLd3T z6?X1vo1R<#NYb`1Q1U$TcYkiQMxQ(e9IAnF=ca>QB8W(!Bwxd#aUm#3@a9D9aR&O? z5r6V8*Zb~OjSVHwg+YdxKj}NK=jpQMsS;uwPzuJ#EoD*wFh@n?yiQ;R7|gePawT3* zw742}%y4}L!SAY7+z%{r?koQS3Hot((>+iFH}^;IJm;ZIsDO84|B2&ImkP3;`?4#X zB*4v!`9#Qi`=Ij8^HHgCT`a&?y5DpU6Zl!Ng227@sMo1Jnc|hOgIx%VAg_4My&sqi zn!#`VmoMC{oM@IxU#_l?Gn$v{&i%46eM#`C9v*;oBCU{qORs>2h)z>qwb~=R8BvZH zoP*OfK|X-qKA4;bbzWNm;cPwkh*Ha;;dh+(@UJs1RVPL&tHHvXV-k;`wDTB z06q`Uml?}rU1GCC1xCvuJOzpFh-LF{pTU<_>bYbz$Kksah27O^QSW5k81H?^1N!M` zRG;mKTb^?$l{jj5NiLOxqJ>zoV0Dse&quLTse$vKNZ>tk+s0rn5qVe!0dDE8w*OY4{2YNg7CvRF3)$f++H}T;Ik9xvw zZ0^_%tjsI3Y>l;V!3K{?)^l-{&!>|h$V2*7R>FE`+cqJ^o{H7DoeD3zKfkLKfPrKo z=wp-l@q23dNKQY+qn)y5`kiH&w*NZxc-q?asT4n5YG`D+GC`g7h_@*y^%~lLS}IM% zvh$vQ^Dj?-^+*tBM`-Wq8+cO^iO!1vFJ+k8#7q*?*RlZYqPm#ADI)PF0Qy$efe;MY zK^PG@J7k9Q@!v#=s(EPlvAei0|M?mt#dcr9?0Ke1$q59>aq5re&6lUcr%S5WZeb?s z9+f9hZrrzC+oF+#lRnfwH5CI~ay!X!b&>v~>{}4wEr|cpTKh%6iRX`&2O2rWo2>AC?YaXhf+NSKWh3k>U*%kz5F!Fe+3<{`3_kf1#V7c2TlBT8sl4 z1DsmHoE0j2*WL(EzY^>_rF;hAxhIrxyxTO-kq<7%icCdeoaXVh6e`=n130W+FS9Od zXc~V!v|g<1Ep7P-eG#pALnOCPBd_%>G`iS1&cw88oCL zcDgT+chos3S^yx4*=KXD0v7^4RlZKP8Xl{}ltDxiXWzmCamOKmzWKGaKi^(LIQC&I1O=ae@QOpw4&%T*~nUojH zI7fH%mJJQ~D<2-oq*sa;Rw&Q$pIMTD*A%5$x5x%B*KJsgw-!#{E+lqUDy%+b0=oMx z|I@>h>WP*TOkFE*BpD8=3oF45=Wpn(vvS(TGLld%b*bip+R0EYvpOGSsP4!1KV@&U zlpJSpD(LVzNgY01ASg}|8sY;+FiDJIfeqXz&>joj_r?U2Cwr``r&YKZ;Is9ClQU$%v`WF(AWn6^$x51F?t87#913Ftvi1`9%-4dIe zS*$#wPKY>6n2#gIRpc@os3HViA6E5C7;nSxs{|bYfk$mZ>X)sc&DH$W?p}RwMe@b+ zhE!e%SIoc;lui(rS??b1qH9}GDP1ZFWEB{s13CvzztZfY^vg0oMw<44La$g^GC0bs2PIAZ%UXfsH=B@V2=i3NkO<;-1}jD2 z-LE_^Lk>aE-aBOFnFOgim#zhYy`sCr5+Y^Vsjmor&0+G3sEC<=#T2+CaYG8uqP8Ez zxzl4qqiu+=bXLS$;DAkE?bS1tTc6}TlL&${7AK+$wN4n^h^Sgyz}*T(To-tU$+Nwb19l!n#nCzN^6 z+3j^a0{_8gto2=+S6`7)og0YWH!5HX zoTR`5pjr@ijAAWYU~eJc70+1e@8EehB8va4HBszpzbwL5;y_JTK%48P#SNu7%w-? zd=9cP?njpwb}@V^1VUSzSofOgdMvrru02-0Nl%kgBJ^EMB$EY5r+Ehu3}A$z?9}#V zW`}G_waulj$a11sI{_+Aw#Uy@uvGi$$@ ztH~U=cUy7<(4bYhh@&1H9q@u{<5g&9_3XlENfzqOt^M5L-~5=d*xn+G|6ya72r5a# zN_;H%-X5q`(&TomPFQ2;FfzV6WdohSgh`GrcAU*O=%8eJ1l^i)Q?EIw+?4M$#^zJs zv)JPJ?(Hd?${*#7h8G<2YGm)Hrz$v!4LrCpGehWM?@Q@92wBJU3UDZ`5gl4x z0gSL_vm~2+|Bwu@0joQ&%B`Uwj1`iC)Xk zqSna(e8#_;Qc$o5-MsUQ3}2-8ugO+JdKx{zSIsm>7oOiW3GL(KMQe7|Fx5OSeX0)mq9 zJg?tX@urS{H4hFGtMAwC3`D&T2UYwXhzxkZ6cT;saMjCmwKsNHp^npv5S=Req+KaG z7r+hEh1(pWKEWUpSgX-vpPKFRAc3`l&iuYq7pmoATEuUM$Bnk0tC}+T`k+Beu79fN zxs%8jYrf~8Ho$tOJG`9e69peBKq!Z?*1t`lg4SpSUaTFhe*D^Uw^HE?=wZ2Fsi;%B zn=r$>e-mFV`aH=Rh;N{Zv9*T#=1`gx^sXOnc@+k*rpVOqz;sR5K<~_&lf%ey()Q^O z#B&chL13f|E_*nj(dN1j-!Wd1D-vg*<=?nx!P^Vja}|IFbk8{nL577ax9$BUL&3RJ zIarG1k@s;77y;|5i$J@~#~HvA{&~A1A`DsJBiM^Ni1_}oyHF|*$4bl3`W2jxB*xJTWD19t|>HscjL)7gNgAXcz^MA zLb3=lwt2qA(LSRDYhIoNMRV{J-75ogisH8rg&zuLd!)2P!Qj)fqL?Mqa+5Wr+VL!$-?O((0rumce{ zap*jO_STJ#%$zR82$TU0yRb)VLHYSfVuydQEM~NmBgIzZ?Ub(MX@;kUqqPL<&!)E0 z7uWHk`Qtg#AfCul@Hb2+rbgWf7(M(k|K6-w9G`_mV#C&3rL(#}uFwQQY_)mSS3STQ zIjz|JT=;_+SvgeF`h1*AE|RtO?wvFf5d-ICX0o2-dU&!raT>rebE$dLDQ~Lp4b^U? zhR-odJzwZF|Gt`M0Hu&ULgZq4-`{2DTFLDIA8A)3)>d>k!X-!*yG*j?)hS>CUhXc9 zJ;RAkrb#9Ml%!uhX)trd+gywDxepz3MMEZ(<>`afzZeZdJanWPGg^J3(yI=BK5)LY zX_E5h#V3ue-j|@$!SFv!V-VP4X`Xoj0SENOc%_=svHV1H8ap6l&!c};Xk3ed&ocDq zRCjbE~wUjq)Cf_l*fUTVCP0NX}C$cf2 zV*NWhDpM2n&(BS8Tt;JMsNOC+6s=H*or*}9K&OxqmsBmTv9s*Fa#>9N46kiTBw*)c z;Uv>dPoYR~oSAeITs?0+3O|@hAvK?)#W%%YZiN!~q{!Escd^zS7SsV8m4DQu@#<*Y zZ)rAB;`&Zag1akz+k^g(`p+PKeHKdq=hX_bCyYv%R(JDD*tUWt>g7-{vZ_1qcU5by zpxN}A@>6v2LXmOmeDN$o6OPI6^xNo2a0IeY!~*-ZFOuBJVQ@e*3&Kxl$aq2u(JQ`n zJ!~uVi@Fc6vwt+I6265k#Hxnh>lEDEV83>OkY_v{8VwzN9l5Nyy1MorI_DKaUd|Ah z^q13d!3%d?6eA>xNY!(D4~ov~*H=mEd`+y{fUK2g@?W9U)o+TlA(29&0Y63vdmty!=+dF61OCImxpj& z8lo+9UZ3CA|JN*q&4ju6UAL$IX!3*WVt5_2>K(wdmR2Q<;Xe2Vfp!)6pey zrn?XWxQyU5m^K{h$pdC^C{0%@bhyoa8`qYD-`R8c$${9(Fk<^*~F73{nFPX12?#*Y6!i*XAY_ z&d=T88isA%`Z{m(IX>7R{2p{-nUwPreIzEw^bw)txV0ck|1yJeBbJ={dd}m_?{pt+ z|Cs4Za|HI4hw={L@rR{ik*_v>s|H;ecgN%Gj4NN68Fbxozr{i`=CQ>O=@6jVx!@IIybM}D68Xh4CJ3SapKT{vX1Ps0L z0cL%~LQnW~R9Q!-T5e#A$WF{4!bD@BXyaIGpOQ`YK5FFlH_QlRKK{kXwv1>Nk&KxA z{}H@q!lCngA5`PdIkZyn%bqCP2)uZQHrZz|I!Pcg3YFE6GpA#CQQLs5uw+t&jSM1NiXQTth8?R4&cg{ps(;z?aD5w{Fe3wp8QIs7JV z`kcl4BC|Frb7@vhS5{2lyZ)rlO_uU}YMqXn7&4i_%Ujl%zcTiJYD7Hj$se}WF5<3t zXpjh%n|yY4!BTn-A*VX=CJQS<3nCIO{)Gge=`Pevo`>)*@Kzi*r1GghILaD1zGtHj ziQj)k!yu!+et(I!NR%QGgSU>4Gc~lQ5+Ti7#8wB%*Sfhm!Nvn9U7@)bF#VVm`uG?@ zyKDI9TDMuf-SgedDo?jvJX?mrF-@8v!EYwYLJGS2_7$O(R6~Ck(L^XUalmdG@)!tL z=CcMrx#fje7U3AZo_HY3 zt=t$Y8iR5w13T6@3>ZVJGtTm*SG1lIUJT;U=|X<`XW;ZJY>c1@3E!JTkOekUhiwS)ld47IILATd;p@vrcdY{g#?4Ju{VIK2? ziX|a1s*j3J`?elSa9^nJ*U!9$#1Pls|H4?|+1?7; z|8%2X`Tg?YZ@T z;u3<>)t<@{sBOE5WPD~ROu?+Qy1^j=6JV|^Ga!Q32&wbfOs5NRNdOyQh*oD?3o)VQ zg13L6R`GLXUkuTv$eK)8PFx#t4KgNR9Cz;$w#ar%{7>8=b9E)6^AhEbjx5DLl3|hc zG>(|&m0JS+e#kn77mM$Ct2ypnVAG4pdEw|9&AXDL2OBN6nf^1wu+zcSRP1smh;5T9 zxvk===l+)nl+_n6L;i8o#bB>SR|q7CvOuL{@@D6n+F;_ly72!a>MO&dYPfc#L_k0q z>F$v3R=T7cBqfyYmXz*J1?leYmTsiGyFoa6kI(y^Um_PUGdtE^>t1&N{-JL>G&-QF zr2bS8kU}g5nk`#M+-3ja}r$yB_3xQZEweV|IIT{*pN#uqJwQ{K*O)9`kAFv*t%gPa9g(@<=Ydv-=N)&5Tw8#%Q%F5~ z`VAP^*KUVEacIj*vhMe;-@Hc>nXaTekJ+PY`afBLV#3{DHurc49UBD+E>poo?ShyM zvVOxjX?sjPX?wE%r&+}HT;mh?ucx9HeEN+D`I^9~DY}bW#*2gqB(~OX>)UrrTOi&E zB{FIP)}_cU*3Vb;f8dG!6SD%IU>*aA|7E4Q^#)z&n83BMhWiPp$|?Xk1|%z|zSYfpiN zwKL6Zn*7^INvju%PZ!V>l{myJ6`7nXKws(K12^_OnN#){A_tMG%6n*pbec=uqP8>r zU(P)K*)er(FWkQ-E&W!DQ!3srToAIe*83i*Kd-R(@2-dsC3=ay)>?p7Z!Lc!pi}iX zD50el{LsY4zx3Gi_>oo5J>I-bkIDlw7IOTNG;#+jilK+NV!=-nUlTyrGuYWbpU5!E zBIV57>S5ew|DVVdY3rAJuc-^95Qo@ncgf9d{*<7u2mPzfs8eQ&{ z7_PEb?i4oY&F^S~Q)NA;ik@H<1~vrQ(Tg3}x1f zQf+-=eHY!M4tp*6naG!JFm!LXcd)l$on&|0f#(;Nb0!4H_|EL=YEde23|9#5;aiAU z?01H`Hk}!Umw)$UV#!C3=wgBcVoCXz>x{fdMSjR`U*pUkTO%+WMCIi_*tAfpo>Gc| z`6^Q5P z_`ws^XOMVtr`F7u$iu~42maXgx@U$8^CBYv-b_;DTM`c$rNiGF0~H<3omO5d!>n*e zD0SWqq!z2a(ND{EaM;Pqwga&#ZGzu=X6pTT&@yBI^B71&+i9F{W6(=&-rn&($Wm!) zMgC{Y)rhy4HWZR+Iu2r~fUQwqFK2b7d?AKVdkK=y6ed^I?jwIx1|U8y zK5lw}2O@0GK91Tlv8Yj}l*}+)egj{^CFl}m>~zwmZeWYaBUFs^;{bkF3UZ|6`EP8^ z@mx+k6po}zFLQgZ5K?fa#)q2UsxW*K+Vd-tbT=;9zPJ;8RI0UV&;ZADnKM#>&Vz9J zb_i0&yy-Adb-722TE-l`4quj8JqYWQ&bbKshyAkdDES1lCAl^IpX+HQ5 zG$ux7%MO6qU#>u-HHIT#ysnP#dsOEk^ah0Mw24WmO0v3b>8uayU_k>@U%%AID}+Q1 zyem{l0792kg)JJdlTWo1z$kK-lsoxCl(M}DP6Iw^xIvDAzvMVUk%5*ovP@_@1u}N_ zy({fxA}%1?L%GK-9TwxJ=Kv+lA z{a)A$Tet(+&!ZIjmRpSPr~*&FoOpl{@2xsC65-Ct5Gi|6-qdKsh88sY6X_Yi3VP=) zch}K@S*@hJyY~;jCyK7rmNjr{7{%l3D9T-`K-7}J*tlFf9VlUp61ao`tY^$$BQMP8`Rj=oR2`R07YDxalMlYVU;TEpiD=QTfxg zr`~E`yv#>c&wI;q*FFK1xo^)^h1tg)oDSf48ekW~aHu~)*Kqb6)dR{fSLM9hy1bJs z(ZQY3F-xH|bdNGnM243|&R!7xer>UsEju9$5CGBoDYN?B*Ae%@A-lvlL0~Av-hSO$ z8UBC14aoVQiDLO_U7)~gO(yu;b78^U*#!tQE(aSSx(cQigX$OUV3!fZR(f&}qDXI7 zwW(};L_vL_jRSEMJPObWI!RGk^tT0nO;C7IAi0C>h3lZD+L`Ba6ZhM-K+gfmo>v`R zN{>-$t_FKA!I$DLBaMjIX2S$4pY>Mvca4tGKV#1FFdaS>0)WGzPp{JGxr=;e);@a5 z=11}|s>xVfl~=D;pIMp`b_|}3Ng3yQ9XJ9hMG^V#;Be_b&5p%oLy#aOergf4tsH@I zlB)ipNtsS(Z&nb?PxEV*s;C{xghu{M7`l7foVaplQXCJe&WR6F>7o>*fPJKYX2w@L zS{hA8)ZrJVAHmu7`~u_Qy9jurasSnD3~bU$Fbp&$Js{C0-0F1*`02P|eB*#wb7+oM ze8^8CH5a~zC~+V@P`YiWS$*!#=RSbwb;U#cUWCwXEF>C{ZXjT((k`F29j+$*jno>l z4%WQo+uP*=P=nF@i9U@b&T<0~FtIy^e;M7YNfT+TPvQ}(aKrgUmS!UXF?$Aru|{-5 z!=bDqVTiW^R;={K$K69G+>v%m#$#JIAG-@7rwzd+x@%Z*r2L1{_7*E`ekHWZ@WW71Pg|MukthyuS*mys_|(2F!OtFrx` zH<45dq+>>v9$MLdxpfu-yEw%^0`XV`-N-R(_;LK8{_4CMInl)94Xk?ztJ1%$8Vz%f zre9J91C=NtotPd`p-T8~x=7!e?{caF*dtN1Na|xR^HK?zVAK@AotLLL4RT2K_0nXD zS1#yhfya^gwHIYp;Q)0JxcUlgbP=S!(v`m*@I3VdeOvbBg|P*$s~UdfmtgZUl;cYe z;G{r$QY`cMv?}G*Mr}|EEwZa{!w>A0fFy9gu6pIJT6hR`7v;g-t!2yVBM{{>Hq|4o zQ$EZzRS2;NvkczsbCLp=kK~(&yUgZp8?F%6mik|bwRt3VUm)f?%On9w*OU;?cNuh> zM6K+_)ZToH1$nY+{JO=a>-JDKNwk({g%AFWSc)bN3ZKiz7`ir=Ed@l8?(kZc?3&N+ zymSO#>4(bqPlF+4T87_tiV;1_oZlGWPsRgRIl`(XOJCr6JN?Ip8WWl91VWloyb*Hz zpm5>jruv|!ORZoaVL;Vu-$GZ&<>C$nj5dQDZg5>U4yHjopHQWOO`{l6*YNLN%$hvm(QTu@kge1K z97N1E8mzv$u8zlo=Piw1N5@P}AHDVbGunSMKUTZ)ii%2D{$P?G00bwJO0B8+X`)h=yT>b;#`ndc9D+9n* zvz9aXuLRZ}PDn0HmJoD^?-VNPH5^BqO|`C8?A zT>arRK#@Q*rzRiN)DnQ_Gj~*^v+^SZY+poJ4qG2pw%@Ku0tR%s^NPtTTR#kjDgr=y zlih9~f_wdQP`dCqWFtKOGVd2k*jPEl9VVc=2Xlxwic%B2knr{wRuCV>v8;~IMOZ(J zwE_;VQ87fD0}6iu8Yv(fi6AeRe!BPt!f%SX0$hdF8L+M4_n_TM0<>M=y_3{@Eg@Lw z$_lnfnf-F_kGNM^>K60X423b0UE2Cl7__d|&woWW?Bveb>6W9=i&KrCgn zRDV?9Y|gRf$vAw8S>E-{V@+ve7wrFNSBeDAYczXmfp0nTU*h92ge>6E%tZtD8YZ7h zLFJYs@n*=hxjN|FTCKAWd+@9GT-xck=*o(Fc}d7&x8tTne&m}(GblcyrD=&DKBXU| z1||YMDriceX!GOs7x47PVOAn_75^YaPbnGC9um0(fW58mfeFJjEVf^$K6;p1o9ts^ z^E9B0SNgLCl^I)iE+nTGw-Vc)RUu)ZkBM+H;M!)K{iF;rfkWB!Rk=k8gSgqJ280Vq zn5XkunCV+f?WkP`Z&%6zj70NXM#fk=J}RLP#c>wCUld*s5LH{}tGmNry_s=q;&CD2 ziqeF7NCAwCeT-LU=(Bc{3z8M*yr)1qpg&TlXb1IaCZG~xzbcO{>QYmnU8xuYmV*dZ zSyQ$^v<5MAK3H%<1HzJXIrLA;UjR$09n^82Ypvc-JIm;$vUdXIuZ?j)+dmg3Ivty2 zW_IB0Tlj7vlBGVFTrW~!sh2qX59xJ4)GWWRir+ zxB|kxzU8ub7p*k|xx=VFP7{IEoD`h3@8TBX(nPRc>1%AJV5{jzeW|UPVPE?Q5{jGS zZvzj$RkH7aOsaMK5uCWZDkCBqyIT^({V_kaFcn2}`c}%f`o<826Fiy=Ei^kQ=U7vs zEHfX;)^C4@qArE-29=V6ud|{s7 zv@w@8JBXZg=Zs*bjz3K8FF(;OM_Ri5oPttDAjTvNb$_K;CL*Bou~zQl)FASoLk|a) z|I%6KT|VmmODU_3$I-`UGYEGBel>e}i2nK69I|7E=kO*>ahwI5H-rz0v47CEcEsb) zYL)T0<<+bTEMs0FJPnXPw@iY)_8j5Vqbm3N)!%J7z%w}~{#phL^?8DaFFb8+(#Q=; zNxxt>Ibx^ihi($J*})HSNJCK)+k5w+Pkv^f#YFfIAz*$6wHN*rS@{FE9*P|#`^;px z)(=%~^q+jxWlc9BJj^*)Kz}Q1l!y9De)OkMk*n-g8ch>95LZXik~fvQ|6RXoyz4U| z;qEKYm)C0MoPSR!p1)6}v0g<&c`>FKaj689vdq-E3)+ST)UPJFd51wKO3Z=dR zpJeWD)n|NpTmZsVO8A9N23_$xF|<%(vmL`M{sn}X871C*ZR{ldVX#^klVUd&zhsK45&{(d-o;_Qp(7$%n8`e07XHkn)_NkdnCaV~@ zex@6=>3)(U1L6AS>R?>FnhkyW)}?%&qH90I=VX32YHpCs?lXLu}P(Rmi z<4{<9T>9V74rv$p4Ggt6qe6x!qNGQ-%IF;`T4-x%oS&kY|4x<@Za7c4TZe(Wy>Kzi zVJO+BG@L_9+QF<0a0Oz$v;X;QIA};hOdu^iuqhOXgHTQT#@Mv}#xHs@j~2|7%Z+L5 zP~Bc>0oo-km>rKn`@`cfg?5C4z^s8iVy%zig7zZ>1!$yEW_Jkl!xX>qA-`ykk( zSJYsH@i>wk&k=z}d(u&G-8A+j88aJdc)%m?cd>&mj-b?z1G*y;IB4YwV@>mHaP z|1R|2Y!1H#B{(gRW#8C2Te=Ekr>HM9a(pJ1bff=lZ0(0WBl|aq-;naOiBO&f?x#d2 zJ5VuZU@lqeW!EWB+F>I98gSR9^o04;8@WVvYhG4uw2b((s<`L|GS<<;F#sk84707 z_m%XZF&3KB)9gY${E)nTF>K zZM{T(!u3zyg|mtAL3-QY`l!7LWN5AGG7 z1!2<0R(M7+xT(b6ER8!J7y*!dy0B3#Tp;7bsl`70$(7goYxnNVrO z7NtIgM@!_sbK>=gG>5S^FT0<{^bWj$Tjae9@GXAU`R z8E0ehlMaSKBU~G;?&jjk)htuc7(!!%A{#*k4Z1H2oYQzbcUT${j{MCzb$;QD?Q^FR z!GJ7X zPj1k;AAd*UN!Oe^SPTY2#I#mcQ6D~ZjS?LHA9R;n(~3Q6{#%s)-BP`oZf*$hQszLtgF3~A<`|lqoo`q4q+Dv3SfT^9FUK1 zvDY{_Z?_qMM4mP7gq`->sw_1ikxM-U4e_AZ_|m>dfgM6HtKn5SByg7Mn)YW>B#gva zE9wpDHUBydHDzN48>tALQ^1f3+O_aeG8Kuq#0F`nx|i<@9rWIvlTY;ppIn{!FGnnt zIiw~2qyhyM@VV|ocMA5{B*Uqb5z?S-!?GchHg%nLe0zkD3($R0{3LeKsicT9$Mxq$ z8oY!gwRoi2r4io->_Fs{KO>kKM>^uGJ)>SPM3sSijvQjM{9|_Yr*xAy`_(icfVc{G zDMqL>vLKRwIH@_hAPL4B+iB zia~bxzQFP>?Casw6@UVDy2?Z#LTG@>*mDalaOy8>&2|zH%nZ;R;GD(fZskLVL~XK9^M%S?`-5;yLmO0 zL06)xlmo#HNbpr`*Y99%C$b}WH|pNY+dU~OtGpi)yqR;^8%UW{$onsAa51;zV0LcS z4(d>TUBTp3&5YkzoJL`S-D=>}P&0C5jtc}JQd?b(1Xu6bFADqe;A`B+t@v}RW`mVk z9S(`W=^K78`ftVoXWucYFHwRg@LXnW%apl!owwV`11r{vP2tD6X$ef%w2V_CiECwP z|6c5ew%0B~1!_Ki1>3znbH z>4BZuNA-(%mj|j@m-I7L8+ei05_djyKg6(ht>*Z{7w5PyqcN4E!3D@d%mV#haLVRhrie-fr+do7X!ViZLv6(HwfP`}(BT1)SKdV3aPKit z4q@tvH?K3KW2GX4$U*@5sKsx2@s{i0pH5nqY(c@=c)W;vz?zJa zosX4j9L^+K#7uac?l4SL?!nmD&T*4g7qb?@(3sND@3B>7-Kwd>s|P6cNBE z2jNK`%xf73kx96uE-`V#y(RwyRk}pqK_sqWL|u-aMhH)xzMq7 z^@g+nYLBCiTGp8LMJavaX^G%Ii$0k?`Y!TV{*8Kx);J?T4FEgCUZK+&u>&TjH)8C( z4k?$y()p=Ct~E;$03*I0m%GDS-kbqpNA0RUg|wya_-E=3LZ*yOY42>4RM1djy$#CQ z+2#%nK+Uv_8pbNvIJ$$ZIgUCV{E?lpHelhe)bjI81Cw%nw`GZqzZFat?pgFm!o|(d zlS=F));GflQD#A=K!9ts@`NuT=nWcveqRcHU%QNTSeONQkS>K9*|{aJ5&VAr=QfuT zITLh8I^M>O--4N><4c-BjT%A!al(Ceubi;Gh+sp?n{`+^SpKT4;@e!KDPI_9-{tV8 z?+|dOWQeNc1+^PdXPGus*}VLc-H=@a!3%`ke&}@=RZ57ul*!t|O{yrah#XX~FNt7c z2CR+`iOWxJp2|~dmO_%8N(CZ_^R>OgTA?7I#1wjqZ*DQ*=!9kMXOAmDoegCRGL3BM ziraq(Lui7e>q!|h3I4z;I3~><9*Jbs#2}Cq8u;ZX`;C4nm%{e2auBh#9jhogeE%ln zuY?gVX-W0Ms;6J9NJSqcD$|liC>O4Yw;aT5XK(}e4+{qTkYHWF2PsPZJ5io$k}^p0 zk7=ZoEZ+I?8KQUj!^gQ7<6WUHA zBS##I(U)iogZ1)pWrWOxWzA|qtb2n^@5}iTy^h2qu(utZHBhCXkwyO*$h82Ghq31V7VsAT|1tL1NC7YQV+nM+B&1QyeTm*`L$ zaY^rd8*(&5-#ZGNr5ReUAXKL8E=aqDsw$>&+|H=XEAuHWkT!Bkov2vpV#6T0K|(nQ zi>a&ggF^TGtI?-Mj#nx#l1~Z&U!ylyB&(`+sKb3p$Sx^5EV;@+*Cd~g1cqGYE5Atmi;tOEg z_i`EPRTh;ANJ1_V{v%RgV+N%~kCV$u@lq9*0J%fKwiE>B6pdRGS3>S%mbia_8gd(L z5jdoS$f=wJxJH~y151p(UV*_##Yn6m_v;D6)Tx{EZf{@u__Jyshen&#Jq*%UJQ5;Ipsj--+bR6k62uAsg=ezgHhH4a~L5`W7WXk)8APst7v z9c6mq(tF0KtQ?Sx9%nzek8(Fq&l<6v52Tv|GBA_Hx>#CV2c&sBjAPBd$WU{l1fudBYuG1f*P1{f z7n(K>%{0l$roXOY5>GX;&2SBuJnac7U&69|@5t%DOcpVMs%Q4oQhcGZq`ph&9F&tn zY<0e}I}0Fs7@)0IsDw?vD~IUj)+i@+hUhlbRoDTd`{5S4wPQU(3cq4t`K!_6N!++y z)pk5#cbRg}o0QXdC7}HWLRr!XxV*l>gPQ=~WJx;(y6t7q#x5{Gt{5rpn373si0T+j zoQiS$A>1LwYn~@%shR28Nye)X3(nG!{P@R62avwthf$#Yr}NAOLf8dkH{clv*Fcb zr#1ru231-87PphIvQ3uVqCjIvAb(H-k@!-Gt*h*0r#9hECu?sF>d(HUP$|8TsDPG7 zo#HYc6H$DetYtb`0>*R852Ws#|lp&rpXFf(zAn!jPjvnr8;IzlS3;^7Ceo zJPSx-?7SC{mZ0xLAnxa(*?q+W{m>BBZCaM)1G0(x>k73dKMQw34qh^bia30N!(Zs$7z6y@K%7 zx9cCgv`>?;k8>SmF_xA zqCu|b>$C$*ySF-x+%^>ifchdiJ?z&2{(LVX4w%&`GQ~K;{U+nrZwR()mG~ySs1V-W zNDF9ED4;+1QVf|X@I2?n{?A!j`Q}z=;4a^fjj<`K7Gpw5QMc$%5uUGxAbi|wNFR)T zRd?vM-c|=;3&<=i+Jx_#d8Ae#+d#JB4+6Xs7F1?#tMRY0txTLKUSetZ!sNE!1ed>H zG~g4$eR|W9>DjI%eA`+-DQ9zY9JuAt+TJWb11%P>2$;f4n#yP{HQ?zG=EKk9ODrVC zhcO8cD8RNS{sF;h>sL~q0=aO@s8o2 z0UEs{jDhvlLA1U?-@i4uuCs?+VHmR-&@x;2Vi{A)JyB3E^?u`gzynA{b1y*?C|koi znW+xfa?%d&7LkT{JN}(vgeHP>@r}<3%+qyPAQA^MW%uqccj_ zr!5{~H%!Rp6`n8fjqWT_VS_xSdalRK2H4M(`gla{!M|;`#I#l>l&>+puA1^|@uw^- zT^UQ~Z`yMvK*T>w{=F;jmRuIgP?tgfOMZY?36G~ibf}bcIC60jLKkZ|<1iQ~iLb4$gDlb@H%%r zWiPBvdYm~R(nOiCk_kI1ci{l4V6XN)TG4QvE)4TrKs}{h@iXK_VS<2C(^cDjmpT(x1KmMMw<@|I|0qP`S`l59wH9e*0 zXpI!Gn2#PE+|lBO6SC^zD3;zpkG+2(l|>cb*iAxR?1Q5ITFsF z?SefgEV1~8hGM>$as00&9j0TKSzC>2|DR3ea%dS&Ef1Ei#m}{-nnrl)xM@P79 z#-GfkTLSyXvyE6+F)y*zDxyxnO}deWp`-}q*=QsgLkHb1_IGXcTjpwgj+Yd9QxIEm zcm^l+WE~?q{`hEAOX5z7U=zH<3;0C7hBH5QPcQ;jZxYi$#6Qwp`+Y#?n==;5+vAvc$(0Gk^d+&}XT{njQxn- zmE`GVZXIl)zi-nLh@)QS?P`{XrhlOMv!`nYAUxc@xlikCp=q5B#Kk`z%xr5x@r5yB zC5_JS{Z%(^fF^6<%tG)J$YdSUVD!g}^*~V}f~Zyyed_goFgU=u``^*vI|ZfPxpjzG z=?do6*(nie)7b>82_D4~>8{!UC#I5EjOX1*7sx%lc4>&=8!2?^j94j0x=cFpy_N{v znistMdBsvhGoqO_9`&eEQ1NTK>}+J@PMjB%oqpLAf_p2UMJEq5I97)-8HREkV-@0H z_v;s96oN8AEkRt=VtQ0@udWwKfaKXf;ch6Rb&4)Kr^g8#6gl4CCN~K`S|Y3s>iAiY z(vNo|zJ91{Cel5$R?0_%x7tVqpD@MmSgSWFz`t2@CG@L1P|@nl{(UyBU9TUB_J z#PTG(!YbaI^L3S#oU43Nb1otqnl<%+caGeHlk^NCiXJW(y{1=t^ z4^X3@)cC`R4i5jf1Z=K;qzftPjQB-ge&=?XzD|J^`WvKIDXw{ zaQRss5G2Ws2K3)^&u0Ka55y~Ovr zp-@IzrobtWRQ4FL7I_qv#^lnpbf za|PT?ws$1Xl5x9qgRR{El%A+7=f zW+YdsBC63_oN93Ro*VpGHdyV3;yrW<3d+`mV)Ht(gCL7qHOYI~dZUC+g7Np_f7SYk8$^JTeM6JUvdg;LS88pHZzpl5^il*0<`<75L71JQ2#OsI(=Et~*cgHypB^ey(X9s@>^^4w@m z8?tQdKG?Hj(>eXp;!d9VfCCMO`j$OAVxn9zEkcUvHZz&)9aLaq6+#TcbSc-Z^8rw}I7rH)o-cS0h$Ip-6 zxTPB>pOi7Z;a;L9XZI4aiAC`2Qn{q0wzJs(c7~!Vc&VVmJ-+&VKbwhVhcN{~;E+L1 zdpkCTocCHLJy#&4l=SO_*#{XJUgBqh@iPhOYWQ)iR-`SvmJN4wAXofGCQ`^y<}g+d zv7x%C*yoh~FE>c3x_#MVR<(K8APsY|c1!ZMnp7X4>;Xx^=ziauCL*bpBCUdW81zYG0~wOOpH*Az+RSGE9B?e;$ej5N$>;1ESE#G^p+=1JjSH} zz;EJGV3Dj&c9{P%{V3)T?6KQFE)HJY_Nm5hE(^*~aNVO#=R_=iB3<^pzd(wu`6=-g z(~U34@~5edheaU;H~c0Hn0vo|P{6Aj6Gz`5Nv&tX8eE_7QInB+1F4)tRAw$}ro*hX zu@-QKrqTno1+y-%=A>;qvo{toXPDj-`QuQ~((G z0^dEzTxoseOWoqv)z{N`V-pyIx~T$aT)4`HlX5-va5WK|VNV)w?}o!DdB&DC95nD&(&hx}+^qj}Z>{tkPcjX<4G8F6zo#bPdte zabP+IU9G)r8d}=AosM=69;)`O^ST=6NgFy;)i2uRcTFc_G@l_GZwcee8|BWNa?vDf ztWD5kFgZM=q`w_C`2PTXdRQ?t!XJw-ATl%5z$?gMZOFFeWm}J1O)3ON&?`c_D0r#M zosrjY4B_UyiafW()_|7>9Jq2_{>J*w#YRxQ3H{i0pr!(D!P+TQ-v9i7Qp?meIQ+gm#`v$|B)29I}94 zY$%WjA!)tCd#zOY^CM)K%tp;@`x~Y|p3Wx^W-6)ZIB78zC<*3b>1*GB(``u@Oi(hM zyg$hIs-8JR#$57aeFePPc1ztfzac73ANHlz%5GpnJX}IqFI=S%Us%x+v%hhnpEf_^ zs#8e-mmAjrf(XpIYApaMec})%CndwOe_gW_^h$X*-Rx>=A-a&~tc#L5MUF5#5j~`k zR&~y&ALR&A&QR#IB4`z?A8)Dv0$=e}RyU=<7p5JP^REBm-x$nfqL})1)_2qAimiVFkrfO zgO5p6ZXV_NoBs{$QdAMJ`^ty?kVRa{-!~$-ct_R75!}@4H#}tI(yIv%bEj(hMV(5N zlBUv^fQH^o!4;#PZXq&(mH+%jB2YHy*h%TY_V2Mx#szOPj*UMRqUE@=9{9mB)2x7; z+2Cl4yCLE7BRVBI20r2GoRo3u;xy$p^iVyYfLbQo@>~tfE=@|K+Qp%*?tR1O8Dw~ zHS^DE0w7cUbW|+aE|2Cf07(177pY+9Pew|GU+>>CaWJ{Fb7DP=DZEXB1@`kFwwpa<~c-Liy$zmzqjz)hvRO|F}oG*rq0>gD&-za8)n zYCyD4S`6j`FwbF?gB!`W{b8~EQCJXz_rBoQ@OO53Q{btCe+$n{qcfk{QV(H@Mrn$A zWULvWa&p;%S1vpj5^NMo$md{`)sQp+RytmqpUIxA^pBAtu#<+AKtym#V=uky5H$G| zxK#Q2WvU(>KCix`>0&1B*6Rxh?Iq$)6V2DuhJ((Uf*%7BDe>~-sb&%We$x428GEVM zn@~A@Zw-7J*z>>iV;>|zF=i=2;7Q31yT?HLPXFFJEniiC$vx5F2H zqx*Z9wjQ4^<|+rDXOtFP3Ya?hZ^|$8z`*1)c5+BT5icUr>E63*(8yc@DPI)dQQ1cv zk?sVJMMIdtLUNtN$gyMRWO+OgPdLB+NhKH>Ox41D8?UBT&eM~>fpFk&jFNQGjPhH@ z9L$}9UKHQKDJ6kpI(zD}7Uafz$iVShfsg3(G6?m0zSv z(e=OMDhDpKk2v=I?AzXJ;pQ%6gb*{EW;Ksu9@0SRwtT}J6o z>WXL})&tT0skwL)y3uNs8RrKyWdJX)iNE4owT0c=28^l9VH7F%X4J+NO!9TgeJH1mpr*vOkuDd&#P-2GL{SOmSz?WbF0Ir=WFYrWp#l%Q*l z?1+}(hP05)1rmeJ`2_lg0=v8VH?fC{Nt4y?>kSwpX=H2eJ7iLB{X{SuU1}MjL+|n* z_vZqK1`*sm!our&(Vw&OM7m$U2HKl?wBaw!8QZ&r=3g9PFPN`lowk$e**b{$7I##y zF}Z^v4i}OIngWgN=H{R0eM!XaQ;f^j?HHBnokt6gzBhF-wLK^CruUF`CFe({qmybe+-P}0zpmguOZBp+Mv0NNH2D-o-PB07zBvD9mfip z=2_tfEcq4qXSS&H zfXs48Bz8}Kg{R-&Rn!*0PULUj%CD@B;}_FqQRJucDbAxG0u0AAuRqCic++&LK6ZLC z?YdJ>G53@T;gZ+1-zuUSgU>0AkKAj7NkLx;LBLkL=5f`>-Q~rdsSb{xDCa8Thuzl$ z`M;8idF3?ZyN%ZG1B{#2V{5u5&I@=|8I4EoZs!MibtHX6t-a8nNdoF&O-qf=pHH!` zgk(QE;mI1DWDaG|@DuNvyD@7P;M4QTJI>gO6CC}?|4C@!AEu%^?6~oVwqbfQLq0Jy z+>~>Z3Iq(~U)V3s$Le^CJ1!GG2-Pnt?*%SWJc%H7A@uX}RsX3237EzT{a;;c=$qeghf*VjfjHb-wAE$nLhjQPa zor~>jWW-*uN2;qa7=7*uu;S~Irs+j;Ij((IO2(iVcO)5b97nJq!9ATw0QwSSirjfbGZitw*uHO-0Rocb#w1 zi}LQg!Su!^wdSRdRKgJPj|;2j=rUKl{PHZoN-Bmq)zUTNx|ge4*<4oLwa`WqNBIRtbzrkAJ;m$L$F+qV;BIZ%iUdB&lX>%qiVN5Jz zYbhJ0XY4rK(HwmKGvJf-T()cYoc|PANeoOPoXbO;RbZM2;$i?s#itRwjUZyc@hsS1 z!h`;Tlh%e^KZ`mp((P4j#%~K_Z#l1DBJjSv#*M(LjTCDBNinw}jNn<5dA8BGp%Oz? zbNomzGu)Dg)QoERIkH+v(~eN87H)jBfG&C+>w5TIW7zLlw70fK659=qR0_iA@?-@5 zEaUao^>gsk@mz&c;l~U+C#e~Q$%Pyw)5311n}G%M6E!d3q5Q5)k2^lpR2)*Pe)!1N z|0Cgsr{ET)?2L^oj%kqb$*Yc@}HZZN&SH83I#GiPyEknSOBKczzDPmA*&dFlsF zrfH_-bh>Ed$K#wuRZm3+*-8E?W=sDik`$9zZ_d8n> zQ*vD#$0A6SetFD`<-#??9u1wZyrfTB7k_6Uv~7&)XEGwry~BKrTlVDn{bHf}Td;p) zll{S+oz!?lycgaU_{XCt6EQA&R*g|HU8D>VG{=P-OpD=Mm$?ZosO3nV&wCr?3yod z8v8Sdl}&gs%dz>{>Pe(Oj+$Tn}D1F1&?2Re_7=reBbE#4y>q%UO`-2~8xmU9I+`g7sX;bbO%Ir_Y8_^~;| z$xb!kQJp0sfrIS)m3meuSDsKD_ow$i&<~M+mCD8pMnu_C*maDVy)nwI!Sd$Cr-(ri zI?rC5gd-qB-r~G2ywOcf*+Q@HMoXAq*tGZhvV~@qEkp1rnULChSlo02b@3~PB)XZ) zl9jqV<2MZanJCx@cY!?8h2HlmB%9#dbS;W zcPJYC<-sj1T<6O1&=SBgSrEFibTeVO-W7|*;=E5%o#$YitUN)rymT>O^@jiMI6rVS z02o>3|DmPe@T4vy>ni6;YV^;MCkpXwWqN~$a!+SQWvSc;Yh_hIY@w{L?AmiU zsQK^mmL@yh1CXc$_@)Oc(mF!;s!~$icrUcXdUrz-fi$oa7t zL3jPtP}20N4U=(UEk+}7oLRWC-r%s*kifrB8Ge`jn`zd}`=!i!)E0KqHv!t=*ehrS z;8UmQ=Z`QeD2Uv!TUXEs{>GqTn$F9Ui6uQt(!L;%j1!{g|HWrpklC~z8BOn{$DM1* zdj5zAm*31F$kMnPh`e)p*75zR`)gvAjv0Kx{;Ab$SDk$v{R1IwDQ2E`VH#o96msvlW z@%DoTVJ7w=-Lpz`FNRoZ?l8uLs?+L!`BpYa+y(j(lc=69oyO2k?x z=n@()k&JdqJ?!*p))m{eZadgpM(xfzI+qRhLt@HMeYfhjoPOKeCc0yO-$gug>eqv!Wte_t* z{g=<0D=4W3v7(#cE7}V#PF!r|x_GrUC*gGq`eX1v?*~jZQO~V1{(Zj!7t3wT^SEU@ z*GoCgi4L9^&1B=IlirI+Mc`G7BZLH-)x9@IORbO1fg9~YhNFjKDGldtPGd1*$De3S zYQVrxR1e2mF;xoXOIW%NJ6;TK2&DuU%A9${dNe&fQFA5uPjBh#HW3aK3aNfv;NHC%Kh|)%gb3w11ob%t02*gSh*|Pr{6E3$;o8Y_BBMAvcSC2I7{z%ap%+-gB2~w_^B?lJrW~UxpT#C!2_q zJWCemv7R=?b{1;)Mg+{w6S%zRG&eBs{?)0Bx+s&-|MZpMgtFo^Mr833EB;=Fzn`w^+l2G^7`)&raa0e18_Ki;?|QjGoqP< z=z~~8&=k=dHsa+_O?I}LKf;@A!4(r>3Q&<|>a97~FB=`36CLz#-Mmzi`IRS-pw|Ze z;N0@w*y(XVJ`kUC&^x2uv-o5 z{=g|i{Qo2Ct;4E{y6s^R1?iIR?(UZE5ReAx?ruc7yGy!TN7DbJGuf3n}J_Yrfu7F~CDA8H;Vs1qqEizY=-u7Vi= zHe7;M$%bq?xK~Gsbla(J1t(n9JC&!KP0seZ!`3mKq7wi6LB@7+%fq8D@J5Hk44wh@ z5|1^+Tl%c>jUwq~xNaa*Dt~L+YQZOEdOn-@T$n5Dwn5Wp_njzSmaZ!>KxfV`-<@); z?#@x^W`Qg5i+e?zUT3x~N}2h@Hzt!+m|n#N+CW5_*7CW|Ln=kDHcXNhuED(;Ts}vR zC#3dSauv9uyT^jc~sgtbz){G7*c4QyXBwpgz&xl0EcTae6foWGY&*>!p4*ij3tmS#!72-VxvcxRv zUkM=0Rnj}h+kQm$%{fgs;vI0dTR3Bw5mYO6>~BTSL?k1|-yHm~2bG;PVr7+R9lR1| z6fOjSAWgW7jBB5djEYIJ9BjRcJv5PBViUWGV${D`DBp`Al4&QnhJK%6ULeg)x{w-O z@23kqg^8DHaW6Ye_k%Dq+Nrq44OoXVafx1kFx92VtNSvIH!yC-lc_UmL0;pBW796(@nUU7A`~tOU9aF`yj~RLhG(SJrZ{?)8>z)?J-@=?U;O3?t z{Cp<>gu$If4$95UDn-iovxO*-@o01(pVHg3wH6`)IC$(h#=Zw75I=k^#QXUU)^dlg zXO)Bw`8CbGc!7dFo~_rMMMK|j*y+K-SKGyJOFfJ_kq_9;{&p8%EFTfZSuo?Zw7!Y? zLnlPVlMfJNI&bV6rb^WLxCK;)IMo>*WIoBbtWT*VzX|A=9H>@I5qNjnA);%u%;j&J zE-2{Vc{xIv>~|`e@~^O*g73z%tc{|!4!3#1JdTQq{+RHp&fSb;JQnVXHURSvyQ{*# zk=cN!*T2+>E(i9|y$K`ycTyE0z(zyuyMFi?z;IHbndRhRz=}WQ`q191XwQmqj+`g+ zT26I0aCs{ZkAvVP<0;qk6vcrcSw;rQZJBzZpS)fRTGlC4g){sIR@bTl-82$%`ElQF zlrlCt3PLS24{ImlUku1-QLGJCz+p(NALD67H;76@@;xjMTAlt*cCV5gz?7zT(9M{b zhy@K+lvuQrf5r9&<`lhE>Mr7;vFmM(Z_E()xZPQY4^rMNX)PqF$T6z^bHE^dit?(j_;b073yWIl+Rc5-1aoD=QsSBcJ5Ph z9FFmF#0!!pyxG-`s#(59E6@Nonr5UjMC0*=S}lnsFNE%MmF`zk%KsMuoYqNa?6@CdWmw&}m#;1=e*Wvo81_U~K#k@XLT$uY=e$Km5&ne-U<{f~+)~}G-4;Cy7cbP8^LO<3N6D6vm>@zBO6D>3H<8e=9?fSy7s%sm2)x+j( z69sV{iD)X$oz?mYzW?M-gHcfx0{nB+lr-I9E ziyE{!!+S8_UB?K0J-fI;tB9+pzgp_^c&!9R8$@GkZXn_NG zU;{66cP=q=s>Rs6#~(Xr7Tsz&teBO}#p@5p%@4b}SolFA??}hd^e+H{YDfCHiZWkE z38XTDp~%vDiuw*(WfUUmEOLle_I=U^YJcEF*`#q4J?{swUcnDGs$HJ zq5ZA#)x!~CA-wNzYM0-=@jD{;F|6iD9mro9L(2j#9V~n5v zzH+%)DG*&5`>1}kz!z1r62Vm4Q^Kp{AVJ(38b(mLkNtf9$a?R44bNZpjqfpiyIw56 z;U6)Utg!E|*BgTSRma_`!2n)AdfQi57oOt~d9!N3ps4jrpyS=X>)0-{3IWd8g0-wS z7e57hC`EH%R>et#+l9&yGc@njtf+A(5&56>(K_kXWYe59{XO7(a0%3`yuH~?{__DW zmNj8c%gJNx<8mo?Q8O4=oWqr#5J#L~=tccP62-S+{K2Ev_@t^q&!4l+Gy^oUUBLWR z^J0i5??BwYY!xzvC=}sb!+gv$FgJ%K*fMiI1^!EIr#Pisi%uLg6(cE>4)UUQJiKG+Qr z#X8ezAAJe-4OlCj8CTG04U){`i)Sy`ANC@WdtD%Oaa=Y!_rzuG>{6W4Z*c1pI!r$& zeog5m9X>wN`!3hth3|qH8n$w~B18I#ff`R9!oJ!8fR4^dDyknL1VG#_hIP1#J}uz> z`O9+?`?68V-r;xe6tvUmxjs6AJ>zX7PqFYM0Q4ngHETm$e0osAO&`f~MWT||n#zjz zYx?xJ(0!{P-OQIIvY~N;Q}5vQ56QM6<{`RoT6zUny!s zGG{-sDsQ+~ug&+pm0ae#e3Pu#Dhp+xBvpKL6-(upYLG{KiWa20Y-n&-VZBwhiM91b zhTZpoIZmsn2?_b-+guM-P3u-ue%*f?X`Da$p04Yt+IpfR+x_`DW*bpm*DzrS z*^~a)S71Xm^e+~t)Lgux05&*9ExUh8exIue)FH6j4W1+D-xsk2V*mLv55Rv`pTY`b z+Mk_4KgKT{5PH~=9i_QYJY&aAf{`dP{!;WZM4zqVkF1EIs|6>vxxB38t*ogNd+u9a zl1UpY^lAyF(P9Vi0GLfuou=z<-yrw<++@=7J>lpX*>fl`DwsmQJ7f=rVpnJ%%N)~m zVr%M|?5v?K^Qb9OJ{ReNy&`Jw46Qk>8}{Bi*f}$ww)YHN!j|_e)IC7fmXn9W;KxBmjq$fm6A0j}MT|w< zDm^Sct1Wr55|SbIWjmRl+mq6#{f0pplD5dNwzCi^FeB)~iq>SD>=>Wazg%dP4U_ZR zc{R+rAjB?fZG$@^7B1#sVPNLFaZzCn2Ev;W^X}sBo8zsbRB~cpWb%M< zXubkAdT*vjT0GBEk1gXMT?$mM59VrS3cD&2`L=8>b!;ZEbem+B(U_}i)*;?wN>78& zdq*RU;zaJ7OKrU@$LddTf2I0T?>SHFLiazZxPVWy;92>BYV32LQz!^Z4rvSjLL!=b zCg2Z8#EI77r-S`|54H1Tc%p9P5(2zjLO_Js#|~2-W2GTzLL$wSX#TEbE&ty$m{zXt z5SVIw8ct8^5B(hL)3n#>sdr@-L-MP55FjJ z<7)l1VIT;^sXA~{Jy+Ml&uzZj)|cw>(^xetsv_q0NnasuaKQA74L4V{YogMSa|+PfeAHp5lQ;O-Qb zjyMrI9hx4QZVK_mc}v@>*=&AM@?%NEm5}z8`&T-) zwjB0_Ae)*vXZsH?WRDl?O(|Dvoc`W4iV=eZF$sU_ovOxRsbiF4ZRTRi>!mbC?hp^` zh@fM2eN$cW*|d)bnmVnQ`$Sz}BTlDDiezq=_{Y zy#PL;GXZ_<-%qBPi}{>@Ifbmh>OlncKa^aEy|5$N7YCJhTy=LiNgIl`xE?ZYqX!F6 z6x2IQwym$VIovQ3)Tq$fR;c1A+)^=T994EEd1ykS0}MyxF;35FKbKf6PODgg5T(aH zPxkF6cE^MtJyk`^k1kR~>#If83X^ZFg5%J_88hNz!&{{puD&R$n8BT9{4mg`af1ih zawZlT!bs?9yX*~bFpsEnb+o12X`BzZ5aoGRC=VLrCBWk+hGG7tIv08aZtW&F9H)B2 z9?z>h8F;fVIbOM?iUcc4wX7^r>6ROUMA!x-r+n`*pA;Z$QSNOD29U;9eqI4bYTj6* zSRoD>LqX2)#EFFrXl9IG>4gv{l(Oi^^i;{2KK+TO6}U!#$r$yLd(imqsZ#?OAAb#k8{E*ABxne1=ZLOL~EU z#0iwm=mI%BKYXzjDO2K)E1L2IKNU+6!b6Mb8|Jq52HWPr@49@ozaFTSVXM&>6Z$Z! z!j>CkM|yIY`cvQKodVXp(-hyV(@3=)xoq9;3dig!?|TjYK}qde`z()drqv(l^A{2UM!^zxBg>z^Wz9g`sd! z3y-$yRr($$(%xHyo8_->$S444{Q|Wa*oQ<&Eox}aU zE+jW`i>32l{is}JlKsVUdAj+&|IS-!WxQ)adi2Uf?S)N1p%Wr$$(I`&5<6ERP(i9~ zj=4$D^sp6a$Vr{wJqCGHE*ImWM}@3BR1eLi3}|2lKE7JDuT+`;tJBwZtb0EQyzARm z-aVlvz`&j*`8u1v9GhmEx~-EOWK1Wn9WVwf9F2;3?k(0NddPKOt|)Cj<@%RgOgWrD zC1FgIBXCUeUpq=Q<|%8mV?Hn zP5}@LAKyzga1`B7OBO>-ED+xb?khz}IQDu^nq>_KjpmF{!P*6ACy8nI4ZIK zoJEC_$?DfZGasW@X|74DNbtf1zx^#$^BA2z_PQQQaJSL5DadSMs@7;N-Ue6xy+;Pu zuMbQGg<4d|+$pR^7w>L_T&puH1aMXiTul03Z@Pt3q??`td>A@YmyKrXNEbPAjD)B0 zx1YhJs#&X2Dy%`!dS-*=y*#er^WmLjPY@aaTZWfJ zhggNxJ;`T%vc(M0eEB&wf{MQNzReUx#}P3MPqW<6Tb1Wd_WDEb`P&=>+q)u*&cED5 zT@39;wj5GY*{+cLzpIZB7swqIVg51SXiE9NYc_SQ3E#$T4`i(of#lp7y99LfRK6#Q zgfmHUG8;mk<(T~F z*${5>j6A*r@Sjffii_0~QK_yedFGcsyN+#I*sI{u#8=aGy81QrfD%BK9 zUx-mihsgAu>|D#dAro`s4#*>FZ+@4P7S75YE)w{y!|)^cyUf&#z2|c!&D0lzXyr@i zgs&S$5i;enBV8bY&7`06v=jzn(sZ44L!E=mUtfx#y72M< zpie3BkVQ~`aAz%!-a@>bNz!@*y`6BgM61Sc~ING^^mF*=}$aXTmsTpfsw zlGY;nat513%uaeuKC4~usjfmP)RO^l+$2+n zg?G^S6^`WQnj{q~u(JmOt-i*qeWEvC2?$+J#FdGnqj=MQGh^KT}; zy(vc>;F2H5~r>2&^l_pem2n&k{t@4PXah3*JSJSf)l6Gcx7N@4eQ= zaIFiNY*AK$A%!miMBywN99G`O)8| zt@b$iYz#1+PE>gBZMwnKqWxyT^~Afu!#0=vW%mc`cV+&%yho6Q7Rd-WjfqH2nV zW_*M~k)k&z2Dbsf`~h9^A_>nKNRW-uxU#X~(Ou_TaFEcUg7hNiF1t~r`I8N=Lucd1 z7$l{0`z%u5uarff$ASeQ3@+j13=R2PFhg>-@ukp+D|Q%~P70{+6DLuS`2ZTrh9};Q zMmjQXibd84-{);Lr*7fCaKd3nyoPX8J)S_2a^-L}Bw9lZlr_#=)L?0ny5MA61&9EG zrt8Uh?8^NXYHB&i};b(+i&L%Wk)Ir0dc8zOL6L5J2g8BnWMB5|D)wd(lhtnwIk8lo z-Bl^r+>u`lq09% zg89jD-LA?tTDDkb$$#1b`oy>>o9Th7)jb|8yu>ZU2TUA!;IK|wZs9{g0LzsYRkbH^P@Djs z{h>z+<5N8_jKK)aeV+OFB!)N$70<=~5B5D)()24s5#+Qtt*q6-&VB#X3lXWoLpaYw z;?Fdrue+22mhdGF7ha=OHJ%kz57oyQ-ukQOh?BaLg8QM##28P{|AbNW&c=^PCk8l( zz8f1`j{>>%&OKtay~)8pSWNm6XY?u8QjZ6n4^k*@JPD{f_oebs&YwF>t4;yB+Jf zhPF^CGK}+KMW~G{H~kx*$sdaG^px*$ot)l3Z zV^#OusVVa^e5i<08%>{KtFQadW%SOya?y$<-a5FYbQ4I7#D>^40}_Y`L{)w8!I=#_ ztcOr@r4AKMf%9bqFT8JGe-7Nw4x@)q5mF8jX}S87c=;*i><&{%y6MYvS|a(kpg-~j zXOSXW55C;0Rq?XWZ4huS*k$rn-+mY*#}vg@#WUkq!Nr!b0<0y-EYh@qwT8jl6yGPK zr?r#uD@K*%XfQeP5DF=RiBP|(kO{7{@S0hP#2^q7I@MAZo#TBCG_*HDJiu~jc4y98 z)s)(<{)lj#f_?)~S-9LZIF9coqbrZmUJ@`Pr<%gIru(qfXmfw&@Z@!~%`@Zkf7}2_ z+&Dnk8PRGzMUUiJ;aim>TfdVvW_t`Om$9kkJ;N2(vX<+dno<+|FL`cRp5sOiFgf3w zQf|Cop7WUpMJgpAFpu;sWov(lR9_wH{`0O`et)PbO?R4AE;=Qw-3uScN%Labmb5fY zdiMmMpR0+qe$Y4_+HWwlO#2W2sVPrcM0)2+dOmyR)``^f&-uaWLfSZEiwXK#?eI?i zd3i=lA9Fxnvxlz}I`IynV{FMrbQ5!ET4EKr;QH>1-)zuFM`tX9 zdEZUk)Iq(K(Re&@&0Vmw1C!F{I@UsgMRp_d5ba$8*ZnaWbs z-!mKaO~AS}kt`#}S;YrxmLcCOG)1{^2*aTyRCV}e8T{8knz(jIb;sB9`0zx*jv@lY zErGv?h>>x= zMkS9jpTSA{SiA%~{Kh){OrfKOeS7WL<|!nqO~j6x@W1V#wAPQTdd^N)CHfm+(fBe& zRicLjd!SY5mnS8X!hmEc?IbkwNxewD2AGH`pPg9y54JdO<~bZ2EG)95KFju3@G0%qOR7DsAfpYVFTbIBf= zw_R`MVQVR}QytUA|0z-l32Kw?1jfzS6L3D^V63rIoD2rek~kCg(}Q*#lUL)IX2;R#3q%$KR2db=M_E|Cs*(YCq`jKdm*a zYoM9L0NcM75phWfLsGC}PcEL#M{0 z-MUH$>ZN(Vs_XQoF0yU`?&9(1>VTLRF`S^!5BXfBmDJG6>TT0QJHYQ)dk{mEUssnJ zuVG&h*p;ey1WZ1fwu{*JuH!HQ!>AI*D8x#Y+z1+gcSt^Z^?^fqip%er%Q6W(S9-Nj zhyyEsz6wLwBV3o@*5L~)a_?FyLP@Y!x}4U^;e{X%(4`i`C(T1I0oE9}krAK#eA@=u zW#e8@jXOik3SWrr-^%0}^D{|M-C9N{>rut=xLBh#+AUE$AHgLOgi?adNL!#UDEM#+ z`b9$SMmVm_wyl5U{ozadm^>SCYwQv)I9Ib!JaVsnd-2q&+oWKNE+0+B@nh%*OY$0aX%c1z@&vH@9Q_FFPZ0y{f! zuT6OPw~%w@M(;pMyI|K3iIrhM{j2o-?u?o^-jrNaQt+dg1ZL}hpc9f05IRj70XzbWlqvG{_xI6* z7|mX7`y(Wc0(2vQ1`CLuX~kHcY3(=vOXddjqGw7R^W-_ZCAg2_+&3$wcI4np7@L*hq`cJjoM4(uI6`7*h!qz z{-n9_qdKwhXO&f@oQ+f$pc}!sm%k5G0S+AlODo^bx$dSn2}S2;W|ke}Udpj1Iv#Or%$C z>ZJCJkgW#>Z<+XzLgO!(PZ?U90;R`1jpQ_U&pA0xX$JijRSd3h6&>FQQ2edB;NjB+Kgp#OS}3_C%^5V;f30_yuSs6DZag2O@n zhx?Fjh)r&^2e2{$2q70khh6ds#tE!NkhpPt4Xh{GV&bB-@CGXlljb0A?eW-CXuqG* zgz0q|<0(gu{rQ0*z*%;Uu?qkZ!-Kzl=XYL64Ot=)I*(6;pNGU9-;d`&o26fO^(r%n z>Pfd}>lM@;)NX6}xQby%@qmdxo|8+JW_;5?#Kx9?XQQ|$FEX44JJNM}3yShI=|A4$ zU6R;Xm?)`#E4a`tta1q(xFgrmldAY&=&RhLbKEZB<0PPT!IRXovGvDng$oC@DPvA0 z(|Aq%IdAc6JtR+gS?wS{3lH{$o7d+6e-nesri5X)uTA+3gmkoeP#%GcE>hq;3>nVd z05LPAx6XDGsi>Yuk6hLR(b(hbDn|Nnqzyo5CQW}^#U==$lTP{5Fh0=F!v=^g)U*vd z&W7Rjn3)2`)Cn6eksOV(P5HKDc72DlWrZ4H>xitaoL z-uKo*^Us`03U%zW81W}~exRhS|8_}niqxG#_=t(1D3g7MY_G6lp?t+QOciE5hO}Z+ zqlFs#o*2VN+@7DigemgilN}1;e>0HuyZMbV$_FuhydcN#m1uxa``XpoHMu=7rUyx@ z70D${pu0n9WufFX9jsGLsyj=tgtf#Y>yOTy-$x5IxJ+Dnx)^^-<`FgxIT8R3K-b3Z zVXsEPp9fn@r^LB#{P(+%bLn$dfU`VeSKak5lspS&!f|vfWMfL0)EwF4P{^5q^_0k+ zhtRcZ76M7D6um=r+Az+mYOt@J$VLiy$THD{9UWEK&lD+<dLFiEe3U0g-yczLY@#t+-<4VVk3^ z!f{c@8iNR0Y=_S1aFtc}C1+P^nJA2p1BO}#TVS%OI#dP*lKJj+30G@HfIioC-0b}YIQ+RguDB|Uq7;8X1EiK4wS8N zSgZ++TZ)azor@USDDS`)>%la&XlS{d&)q|puM=I5nU%30rYj+!%>Z#Fy_W~>E5O}F z`^HF)o{SRYxN?`w5a~;Xu!t*i-J?evooUBPN7FFw1;Ks_yGwGeEv|zB_nUs=ZJB!Z z_g2?6LtATP3Q0_HDE$g(cv;&Cw*p~>HFMSOpn$!=3>0Z52ZDUwXW|w&s|)z((8em> zIGj(YZ*OrG6;BZKY$&o;b^+@PI^HnNXS>d-Fwa3toh^5u zZG`{_lv5@GBkIx2Edgt^rg*vxc ziD;K~(l1JNwr!hT!+lao4&LDxDlIg?5L%o1{q9l+*^N*`Iyy z{_C3BWK`GgXkT->nhYERMQv>h*P}d=89Dh#(05@w%aUp0+QghNyt#V2ki=q0a{q0I zJVALgc+p%PqFN3b_px2}<317|Zczl{3umHJAp+)PA899{ZYx_muy{t(k$X4rg8>?1mM?#dpk8Ft=qsNSEtMn9s!vQ?%74&;S_H<2~-t$mwpij#s0VxsDHt9%KuY13QnL?CnW z>aU-xZDgc?36SYfU4@F|?;|qxC>k6$|MxWAJGMeoGIqcCT7L&=9FzGUf&r*2bT{K) zLn1yb_=8CJSw?1G>6Xzu-m3tKD@t8EU$&`wsbT}<6&gbpVs^mc=AdSe#9eGR#v`Eq zzP^^*uFPoon|n)9PgT`Jth|jKDNybP#tMw02#>>j-6(@D@k1pq``yjOL|AL(>B&Wn zkd9->j|FtF$l^u#0Zx*)+9*}audzXP7-m6kZewS1?s0!vfaL3Mv%*I$LoIiHPHIJ0 z9A1K|+UBr9a@_zv_8)Uc3ytN32#6SxUvnqh=tGrs)v=u*u`hnm-<1jl$bFZe|E5{v zY3MNs_5E@Tsl%u|cHK(X9liKp)uRft8NtPG;~EXkmd$v33_kJ)zm?yBFO*{L1B7s9 z89AmGX!BC4n8HBFMIlhTdThk_?+1r}(0gyNjU7;HM8kVnXw$#AUS&^JvNIKkbAD-( z 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�nnBWJ(z*3rWa;p|b6JjW*5s)K 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 z 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 z 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 m_SQ$c zo{PVz6u`Mk3d&lbu$-YaNHcd4|BlKw0-d%c!dJ`w=4T`4|4SQdJ0apJy*EGsVA4gS zctGAfh|EY%Gxz5X)`tH5PO+M$zyHLUCU0+~PyP4y>yl!xxp3Ee{Lj1t!@FE7&v#?6 z=pHm{uxq6T7<8W&^VKJQpkEw;hfIdL z&TquNir+D6JSA^SnxVr?gmuAn++E7CQvV>8$BR*$L)6^PS)rJ|XiuR2}?ecLYX_JY(^GRxYF=;;vn3wh2yA`x9^GgFtD%A>O1pR7&zOmCPj@`=}H1%D!RB) z`BL`Q2MfEJnzNIySX`(~07LBrU*oU9eJ@3hl_q`OSCmrd8UqC2lG!G#;O@3d?2#*X zImCV5x{`X8z?E7``-yZU5)^cbnK9bM5Q^Z(1l_Wy)+r{rlhVWcU&X0?UrL!HnP8Ku zHv}S|mwN@yeOF(f2?5IM7@4U_Awb=7B*OW)=>weIi}rDP8RP>sLE73|>{P>v1S=$# zDx!E+f$g7xE-`(KqWq}fxQMou^)D-TK=h}6`q4yp}k4aw-~+yf651 zmXV?DQc0L{}p z0x}zV?c6Z*rbvl95OZe%O_4SD))8y}^%|d0m{@>i#NMaKdP^clLC^)*SG$PE6R`^0VwU_3YL_lz}L z&Zhcb?q+igvXdlQkCIg131gOl%6Q}D81)<~dQ6M7CVOJU_^=kp{J1nPrrT@UA^`s_ zy8Pi%Rw=_1FzRHdU;xZRLe-jW_rwm{J!_~$iRFELi}DMT#02}b%#1=nnt+yw-?C{g zr3Y!=CXQo_E;t_wMo}mt*$GpIO^IeozCP@?8ONP;Dzl%Wzq!){7kBiV5kR#=@z`cl zTCmUH0+MGJ1Xei_veoFU^*<(_@>XO=ki5>GkGMjnw-OW6q440HIl~+SkG>nmAL(I` zz_(xxp^H@)xS@>wuihdJv;_i1G{N$L$y*de`g^cxoz-Lbj#Us<=anjM9VA;oO_!a^ zGa;(-x4UZVix#$P|fR@2iBJzwQ&pF)<&b zd#`c*Kzu1(;e=E19bbN`)7}T+CXLD=4BHf72orwt2+ZTr%gZ*oYhJ6KBP_%7rP(Id z$XMUMts38wMPca;E^6GlXg+>;f<@V8pG$a3Eb=l`6Mi{ReNHIME^Rf%48=s5ZuPZd zooqtCVP|!LHqVUuV0o?v8*$7Lo!)Yz79TN8d5zJ!j4GsYs(vD*m?8Gq#s-Vqqh+d-=MajfyT`Nd zQGrgFlI)>#opo+Z75ey$s2xJK}w!BCq z-!wz25BmgG<;TyklX-*ZM3H`ML?&gfl}6U=>45VM+vYM7swDF$4B`X6H%DbaS0Ne$Agx&XsKe!I430&m=mio zI*N-U89fqIt2&eBo1_xXA$3_a>%Q2h$kd}O71AT1jaxFkT_~Y$0Ze8Vd(4--2wu*4 zXLWWR{0|-O%HaJLQAVR~JbU5(K$0-;E7`val~lj5G=fPjsK1@#xsD`Gh%Vl7_=gS# zG!-DB07v;cVH{)dzw6ksd&tj2@2lz>|2ANy~m zIuuA< z`C@Qga@n9KXsqcS2jLcK7T(<}dYlT!fW-CFW$D1u@?QA=xe54~^q}~+-?_v}d;(*- z6{h5mdMy#nK6`?O8*C^?D7>(VT;ss=6Cx>;*MJ!aTewb>p$u{dV$|oUU{AaKL6>)L z`-5-b2@rDDx?7*V0$?G&sL`i}exj7ZSx*DZK&I`2N?QFr7~rt4YKoM~89h^v0r`p! zj?I0{gtUyDu~u9H>F% zrqiP$sP}vp)y10^8{QU`obr#RWYB;6+!JHMp;mLkcl|CK!7@-Wc_eUzr#($$ z$I$#FvCP=fc-6i!sHT*}_Y;>^LL7b!8@0-f-zr8Pg0Y6^?pagOyQ5^o$5!o#{aLz>u_Mq1G?!LSra$}iqcL>I zUj$^n+9GA}f*sUZkHd)#rH;%59D`S+=!T?V&7qb3xVF6S9Qa_bOTp%H=}`OkU7fai zpaCTtj6^C4-y5$A2`!<@`Mm*WjBIa&r+RA&^z9xErWjcLliZfBK3{XA8Tok;J1Bb3;Um|-%%iIzLrCKz?Qwqt)4nQLf5HC~ zsJ7?W2WwhakEUlrnkg`yDikDe};A&PnbH%)8b$$Qj)G8=d#NHso} zY!YC_X&1B$JdBVDPSiNd5I^cJ?k!q&zmZy22v26sHp#uqt8vEL3-+f^MIom^ zLURI88)IGss5FoB7$eZbUnwkil{#GX*E>%17ZUUt}A{u53N5a z1d-Yhp&W1b+KjPc%=C5=kQZ@i17y1fLsk_4u3aW9S)|do9;^k>zNv2-e^8Nhz;OR# zuvt}fbK^__fl{@3)V$0sI>E4OFrl-(`P4osUBE-qO|(v};4bDur!7^7AT%~Q_XI(e z{5y?@QS;~iXJANbs+IqNzqJ;Pk+eQWTVnJiR|g3Q&L)%OV-ceHxIz9LWTp@<_zK)w z9YuJ_e;M77iy;O?377N~Ge^xs*WZsVRY#yDJq@W_Bv}(cXMFnFB`8y?nQZDV7&xC=Q}EHjl0(kIGrX+O zn#HlMZ5bNX5u!W~eu4BjI?5E3uQ3&od?VL7MP;>Mf70M!`hcQaoYOF-veqZ1ixF#u zEB>AC+1*z?2q{Qve=pnOe}y0S70~r}Jo!?+g&y`FtoMX1QL@{7YD-}Uac-hi1J|fL z5}6RHbD|+g=tn7D$1T(YrG9w#N_X612cMSvEax$Pqb7u8$71W#g6sx=Og&~Fgkf5v zW>-ZXye<>tui~X+9Jn7dCOPh{m1Ci0*%I@ymV3w zCX+x-XsoqTB90^Y@a_Dca#BcMBlZdt|Hb(>u$+1z|FwuA-@%p;+o-U8JdxYHoJsd# z(O!ov1E?_Wdp=xfxH z6VE^5x3m`z7b=&%zBN5liYH8`%TV@!spTDHz1-@c z*a@=})jQx!rQfcld%cg`vHz&@^J>ZoUJcDDGcF6km;$EOtYK=?1r60;bT9x8fmV}I z+d9yF7I&_CkQ|l0n(M!ub2`c#Nsq+0YM7J40h3-l6h4iE-Ts09T=-rr@$av0$JN8e zMqB2j_N>^G+B9_L`h&kXw8Oa}pDAc&scq@Xo`j^6SmA_s^3j3-<`=ziT^{S2s-eF^ zBR4e5p3mB70n&2iIYvkm*q)CTG&EPHDD!gxOyLDoUj@W&nUutxQ^nPSuAif%5S{j9 ze@Z0rcR$Wf|5W7Rs;nLmN?46z2YtJ+#_pC0U}hG@M7y-_!!?WIj)T#O)$y}!p|t(VyIbArHWKLO=xX^O_VO_h=#rdwmrmcLpy1G}f^ zr=A%#%;~SzvjPzhpai%^4W()54g*wn$TqO@#FXhYzUeH@ubtx_wy3nwX7HhNMcnck z>Lo+WMk`LR*>Y=~g*z&jQQ4w3P2Wy_y3`gHPHVL+kt)@-B3clPC#Dg~^HMp5(*d#8 z>v-soA^i`cG-Y<@@xJ`QYbFWX?TB`S%TYs*szy5Kw{?fgXruA=-bo%kOBO}G#fB~Z zc$GC}x)atGS*0=ufd50s*{CL>_glnE-f+wx@$h*{qp3%|%wzeWB+-r|3=G>YF-bTP zPmWHKz%DUr$9fZ6SPCrC&Y`91FE@lDuwiI{G?OsO0-;6RD&c-ovdV8m$fl(m<3GXy zqpxAOVzCix-WAEINbz^)GJ>J}jtC%HT8_>$Y{-ShtdrFo$`?Q0lX#B=R%eMSH)pL2PI4HvmjG3SX z55Wh`)e>?6PKs=v{v#=6ByXL=WVBwNg4{u>0k zy*p#f_&2o2a20iO(55jg{@MYF)@G$>zK(q1*_WhSP%QW3)10`O;{m`hc`hW;s^KtZ z;_&Lv(adqu+IKtz3^JR--rVLnI5vn_cr?uogQx(Q2`BMC=DFY%0fkvyMFG;D<&_e2 zcc37AH>^Ek;?XEzJCL*7Pu?vz{red(sZ|jxPtyJsxByvyN^QXhs3qZ#_87;CQSlQbi>RnupS4Z-?O2vXXqtzx_FcjRa7_6{DE{t9yinJ3Pq$m}W z>}4Sn94`;kJm`X(cs+in@x$U+>O_K!kP9%(NI(yLGQ$f3=-2i7QsE`cnVJfguVAI<6#%=L3_kdGl9cyWF)uphZ6OQ8{1drLjB@EUVqu zMy;qo=ukDjEeImuiV{YgqPJjkVV{iL>;ql|5g!=!H?3LpBlbIBO%3So*wvfSr+n-AP~ z(1tCigiK{&rKM5sc*V&S9jyjDWp3IZIU3Y{QguV7BbH%vsg+_J>$sHh_(Rf}8n54> zDG-isgKw5a(L!FzC8i(N2=HE1CBcQGuiEC{ewhq(V3L`qK+)~snCb==GUxMEF30LC zw%s`|)wGVHR`fQL6ogn~;_|>lWpH=l)9+{i`MGMvct7gV+y6KL^13ySht0T|9Ai_f z;r2FZofE0-d%8hSaCOhKu?vt|*u^!ikpU#wX6Q{v2HIB-;-I#8XiclehOgb>v`w0Q zbwqm@u(SKmB}+w6iTm?|!Rk;r`;5mWvTHZsPTvd%YX=nF^~n6{psRahc!W?{fPOIL z5>7QZ1~Iru%K!b*s>;xDo~1%n>qpcAz~PkAudU&T`^NP2yk-nddbVIPeWSRv#0|=% z?JLXAt@JKc+*z>9uiyp8b@DSezB)lx_X;gn!L>EPA3_KFT=b@Xs0U7dV|atds_9b^ z2Io_VBKJ*4QtM%1^(hUR$s|}rl0e+iTMpBl4gvNM7Jm6L!JD*6qDkDNIq70KyOU+r zP0)1l%!yuOF_TcQ4LeFbj7`E9`pI_4g2!4m8~|fqLh#}wWL2j6Hca_hHP>ekL+RC_ zma>s#FaeAC7kExc{f}S)WF2`*2kPc$^{y_OrO6Q&$n4BTFgIyDmtuhBw1Ljkm{#5l z}v|Om|L~onxFf0(bF0-;0ck2{AQ`U-du`AdI`v zjJ`!?2|*56$Pv&X+szFbTiAn6-(!&Q>r?d@bgz`lpPhb1=aMbayUUmKE=b^0)LMMB zQs0VnmpqR6R5s1}eTz@4#STxPQKU09-1GJkKlZ+nPa zLS9#H>iYxavIan`i<}q|kOq#wDK)Rd%x!~#?D-r@F6DVwoOpJ~cKA4hG&$|C45-+e z+2JE6i~p3vd)p}+KsQ94GqTr<;5ET6VxD!!4idRXsmAajv)$Y=ducmr7a(ye|L#(x z`$pReBT7**-6^X|28EQ*u;onFp-6V$nHL@_APJzMaG2#Us?06X$rB|u`q|MOiIQP zYpDUve$)p2vkMMS#tspMnzCB=cytwRy1go3AT%;U1$8%Z2k6$!$N!j=)OK>0bSefF zzrr3qSC6KjAypUa!?s+jNxWt5=fE8(U;@HoKNuk5gHPMXLcvN4g`TmcabgexoAo^g9MsijMReB`L`W zWTQZn!}kZTbB20sH{2?odzfNXREyN;zH>0cKTkxmsPH1^oueEQR)vDbcX#nB3f8Op z4n1Y_2b1KK;SzA_RfP`~L6Y9|slrRL#U~}~zrUq1Y>jbi?@WYJaJGL?8Gq`$}u)ZlrAo^1~&m%$$YP%JVQ3w zkhCSj-s$;7Zs_TtLPO2F3faZNTqTTw<11V6Wh>MAa=Y6K+-Ca&f3(}-F=`EW5e_ND);yMDESCO{C1y)d6%3#?2qJ`V<%Q*O0lrde%pn~% zbDKkKu*_w3O#J_2=^Uf$?7pra+iq;*#A<9dwryJt8#|3{+iI-FXl$dgb-!2t&-*DS z86#(moa}4wwbz>SH#wlP2kxsaVly~h2Nn}W6 z@%yG{S7e1z-BP$Bh{NXvxP89K;tR+3S?QNr8j5DG+x6A>)ZdbfBGB|Il&}*-0lY99d*EI2*Ai~ zk9LGq60x+df=Md=s58?L-}=pT)e@vOu{b{+WG!o!#wK13aVNf?|B`|DZe9%@PHfeM zlz6WF&1Tq2Py$tmNjK*j5LJs<=rb!9Hg49oX6KOuO%lWM=>Z?}XIV8Y>DOzw|3sd} zmP}=3su-&6U5fPX;wA6TS;nyaO3O9_x!52m9l`7}$4Th2MnJ%Gu*TTP`;yTDAS*rW z;EA**48wr0`x$brX%=EyID5u8m2{hMb?rGM~!JI9%(|EJ3t4-C8Si{mdf z*ia;(OCy39e!CalDZCIhowk#`lM#RBJ#h{*4N=HLN3Qsq6Y9Y|GO+I{_Zoe=1v=>OWngN+mQHTyEf;kRL?L@&z7zB&jkAdPlYxE=w% zR3Cmrko%AWf2@E!K%SBTpI?jQ|?% z?5u3%VbjJ#uQ(qAjSEH?3tC3Io3jV6okYkRX~DRfTiMVX^pOpiOUiy=AEh`|Ki7hn zwIp7qVC|o76B9H*a0wT~O1{4FxVGmJAq=MCx^p@b+nO!U~Q1irU#XjmTSIlmy>LL)j2=424IQ5m7)aI#*soU`NEG%^8 zfg-f2-g$HQrbN=+#p24>^r|2A_e?AEgI=_LCBNHXY5oUUfsIyzJ&p=xqAaY+vnm^> z2_;T|)TP1>Og^X-Y#J2Ya)}d~N(#I(76MZs35=t}%gIu)%^pjLFBqp#imk$xWDDG( zZv;O+`7O9$B5ubKfpEl+nK|IpI%Tij1Ny&Hh4UND)PIT@TZB*mec)jB_cUm39ml&v zS@J}XvIDjMMg_riIWs;mhOGsvgT0Oi{wEL@BzD2+-){sq=)4#DFSD{2UT>0eYK%Aw z14Fk8fj49dGCiE<;g+7sPl%ygq=Nq)%9je|Z?^-1-^TUgsSG=&Zi9qpIlhj|g02dO z?fdo;hYQ7ttweF2iv=+7vFx0tg47b0X2CI?2uxN`iv}G=QW>&+QYXm!D z7i8K$Wvnn7A;S`Ua`zpNAYB5em_Vv-##6b^HaLqH(x{OUE!=B-3My~g#a)Al5z zU+Z93XWJTW^!|`e--M1Au~^_xy}&C{DsUYutxKR<5c4C8ca%X>WbbE$L#H_^mAFz; zg%I(hWQ6PaDcK~|z(MBczB(ox>MnjG)oj{cdeo+-JEwJ%VR4xM^H8GE1!R6!V!>VX zxfT~M4#2j)649+>Bq9PEq2hBPpE#MK9gkLjvdmpU^p_I-`6h(ysSW5&H_f`0tWQ3x zTQD~Vz?2Bn&3d>ufj4%U2nhi?6@x^w%$9<-!54{E@8>u9ck$4vG6q#K*)m51teG+d z)R6W11NyZor=z5WITL9;rCekp86=0u6XS6mY=Ut2YVexK_d)nP#3{@bmxjIVp_z2; zeXLf(cAe>#I-2^*jJdsY`SbR|dpS|X9issyYKa|U=Pko$y|#eVC+unf8#VoS3%D0fS6tZC+ZSQdYeVWzFVr)G8;_uLbS9SX#OgTV{VWe zXO%4ADATe&&mImA=e7*{E;Y9U48NEfVYDc9%8!-mY@%CO{1A_&2Ag-^v&(hoD7}HVy^cxsL zUO=iVntuzEoj#&HN5IBaMbfAmQ(pdVPP9e&Zt&-Y$m)ia!@o`EjC)=6RTPu__4jvq z*50yoVdoKLPhY+_%q!lb5}Hg3G7cx-B*3mCMrGUmh*kS=gm~7jn>)Kcw67hlbkbh@h4P;#>R=Uy2#AUCGNO?PskC5@FBMvZ~a)jV;c*Q~u4)=1~z%hg9Z z_JhYWCq#KYiy}p)gfS>*)?35-nxq|6ViU3v@&i=@fdpACW4T5=LAiP#nMWck5&PF(DqHRdeNjWafU(=%<5btcI*cJ(>KA&*L%k&Wlu#^T0LnF2L|L~Rs>?l`vJ zKtG11bXW zf(Cnpjfs49CxNcS3N>i85ce?_eV_c)RN^_!D85Ft`qv(*lma!P_%d`-I07T(1K}+q z(P|a35}<@V=8z^dPewQONw`;-6+JI#Y0nbitA&-_4mxFQlIXle)Kx=ZMx$L+D9x@a zGnXATG$Gaojw%5Sp zr}`HeEWzgOzk{tS+1ob=L>J8(gGK2&1z%7o+vR1M zi*&cyeL9M5Gj%wUjvDA|;HSS4QJ%EV3g+{GpWK+0yS8#WD|5QVN%fjOvO`q;LwFkdnKFs{Q)!k~}E?ElA_f|lt-%tHw( zOQDZ3(=aP^hlNFFZ0AdNnmu#2dWG|-)q?WZM`S7ne?B&4sHSnbMWD{wYcF~Fr|g5YE7e{Tu)k^3loN6Jfsv6hDwn^3R9+~3gE7RFg)>Dzap zzoTcnm}6xzpl_|H$jI-|UD7DFJiTt08ymO|q|Qe~v|f=*MWu-4%`AHUJsd^r1X={9 zOpOfdoEP!!X%K=~cv@RxGI{HPz;?_IqqV45SOk_!VK!*i*RiRmH5E!v1F5V7rgBnb zR1Ecnt++7lxsM3T8K6-|h`^qm5CMqxB;8FQ+;wwxLKrGX}^+ny1d}*X<2d2RQH*ZTfd;BcA$ib201+uKlDI^);Dw2fMf4 zp?-zSRCfd=8&i|TL1xHEDs-wd5AXx?YIy|-FgsF&s1#M7q$c(E${SrE>w%47b!d8& z#tE5b@V$G}jjJ{WAWdow@jR<(n_EqAjhk`@FRFUw@62_l&-fX#0Ts6QIOkVyC`F-T zy%acHfSipPDUFvaAuf@m^pQx8st3c4Gvrd|XZNm071Y;<38_0uNkaIWJP|v;OhFEt zTauM1PT7KXi2FP?-YM(zt38xZ8%blU`29Phb{mb)BqP9MGjS~AIna{ZyN~^!3|UH{ zXN!h%x!QVMzRGWPrNo-ozYqJk-4@jo>ri>*GjPX092W@!w}L2Zu$6O$j=o%yUA6GF+%9eA z>N%li6N?M^!TC3@9@P}>OXV;!KQZq=@oXS6A{}s~NoYaKy7r1cOl6mv*OXYmJ}YEj z4f&SOO9+vv`3bGu3ZFvF8_G3>O~(E5gAho*D{s9*pmpkBk;` zrb5rHbk2!vaPC;tBQpZH6767rm&@w~7cSG&{MO+SBoC`kniO$MJHni1M>Ytl4WO)< zA7*f*jP}@n>}Gn8BA~&uX0dHw+`8o%E9Ymk!4z81A;uPi(YMp^c#;wlvx#eT68z6n zyJ;QLPIcPLlT+y~>6)NI38c_o#_q$?vglkh?kbXjv7>1pw+!(b{o~Ur_i$8vBWUpj zUkK#_p(J&K7c32Cgowg!#@;A+3`@f z80YQEKkp`^uLe^rYU-@;313FjCox!lKCF8f?O;S&}hRgzf)J95R*_j zC1`1~Kg{LXZG9Yy%d*JUt+nK)V(!q)?MoK=fZ&opuaBuez>ZQG4cE{>ekw_NXk6wE^}X2 zUN4|&g21eid0cm{R2u&YObsm^G%b<`=}1yh=mC)|%e#gA()y4LWa5A&g+G19Cd7>E z;BV7)bOv`qiLt0zVBfHreNi;hi+HD%lvayy>5n5x=i0btSHh=t7)A-gi=#lQPgPK&9f=oMNIlf3&A z=O=%!JDFNX!f=_F876kSMY2jRc#mUaF!n$STP?9Ydv>~MGpk}kiD=x|i8c{8giH27 zYA2D(?5#)=rHRmxEBfTYE#76pyr;3Lr!7Bz)x}6USH#8#m*En$X9fcWbf8%vGU0-8 z@BkKOrT7e#=Ow8%bNt*WeJZV==+odTO2U;oZQ9k(=6h1bvj!V&eKj;o?=K3o9er^W zHMz=||6EAGWp(RAdNZLEL(xeGO0}~4G@3nGSEQQ4S|vxr>7CCEFzAu`-AgCK-Cf~_ z=X!=Iqpk!Cw|a1-tTGt0f6;;+}aCc_F8k zptAnRiv}rC?Flrhd^JORL;^}tiy&NM^*&$ce^YL`Ooi%-4`a=M{0?#L_a>%R%8B?X zWOWC6reEUeT;qr;_Ws=#G;(b{q|<6<7fW+8;Vf?cV4}m+#9-SK1jFPF*jYYc5a7~{ z&WJ*nzYWf-gEOQ$y8U|fvMb|vTm|_b?IL&{}*EZ>vOrqBeXqcR0HQsw!`|yZK$Ta>8P69S`wu*Mq!~+=Ux^z zqCh$%PVL!1h>u9uOVt@Gm<4UX8u;6rMvZWunrm5(Kl&wPfOY^P;um`GkuyEWaK1l* zIJc_yMjR%_ee_O+tcZ7mQ9g-Bq;q_+tO-8`+^9QLbo)m74*Yk5(PZq$6SnekMOV$5chgW6fdv- zYOg4hCP1T`jbA546)5fq;@dn|Zxsg90BK6gYNe|2->PEp=7vhk=zWHi3Z@k+4-Ug$ zlQW<)RYX=Q_ze(K+Mo;ZqRQTKBfnT@_qTu8@Zi)PWODiv)deF?OH`vX zE^TWjG)y8eiu>*%hqj2uswRY%sVDql%K2$r8l~|Vn;lLcYv(#n%UiVg?0+1;V`Pk&r&qMrW*Y zn?|LcrNt0vo`hgrE^Dn(H`xOqzkq4|Y3I_Snzk3O;t0K#UPgg~Wk!AMPV*eHV%cW@ znuG%;IHr`wWfN6sR=bQV=t3g0qJb!yIqzFKhSMJ2hgq1bh@3Q;%{K5IHH+l`eVLBu|5w`utuHdHbUo(&OUFOJQx zAlr$9Rt!xc2e*ARvv#J4cZ4dxWKs}u1hp4cs+v7Yh&bVm-t_xB`J2%Kb*VzFe3;{M zl3#Nww0{P^N?Sc#Z^bcIDBdqZw=~aTcT+@%$wa5~{p)z666UpHs}%=t|M6$PWr-`~ zFdeJOU2mrM^~wl{{zQEA$OTT($B9G4Zv;?6Qo*siZM4R+D5%-r1<791#m||5DAViZ z(puM#%?Cg-V=2iMfv2?pC|c&x|9!)n=29MEL}26$dD+GRq-vuLk^ zKYAa|gjuu|nOde%z9dUH_+&nk3MxKmQ-h1b(yWj9ul&6WvCEsYt>ks)UAO(ykGm5$ z5yir{`dZx43q@EKXFv%Q%D+(q(Fwvj8GY!Pn5^%L0JsL+DSe}5z|hG_1lGjj;@7OQ z%Z0Y@h?IHc<4!w!TSAtxjNyzZy_k4zCiMQ9FfqiJ3DhQ)TCRO@lio*Pau2QZ>yunV z^1F6csJ3J#5w?}Iorhk+*IVwC)VUs&B-A_?`s_h{bhh;wbP#RUFJEF%1gbyc@tE}v zzZ}ugDrlCpyQ&7fk6WdIBUT zrXA=V0@ZruL6Le{yF0eesBzmq)8POe;-vwUZBVn4(o@DM8$_1Vw$t+34~a z5uS&~g?r5ZXf8r#LnK>M0AwA{ZCZPtf6F16LwUXLaOnL>S|jRC9qMS{cYEihW>5E> z0`OD6mAZU58j@e%2#;2~d)QQ;icK4R^|9w{Z|Va!=^{Mpv^ejOTU(LsYn-bXAdmf^ z7lB1Y1aiG{cGP&%me_b+_*3x2K;iD%=Fydq`BUKTq>=>um+D=@dM=dZIBKXixiQ67 zzSVy!kVdaQImMbcJfg?w^PCVkZ0RS`gsjy5gse!0Ie4$IX^^;vHbcL_SL@C4xhEFi z*$8l*!gD~0_%%H&Tu^|a*X!#fNZl#ImQ9dB+IKw`r z68Oah?xm(Mjql~tI&THHzl>V%Z9ag+0JxdYdY-K|Sd@U(t zFs6=M(pb18gEfOtp_B7y&BD2WAt3auA^V~Q@k@_riUKWq97vsX#~CO z-T!PLGW*q};rTi6J$hNVCJEQGbO()lP3~)nv6Q{-#NJ$W#<&N)`_J}drtU6X{B~+T z*-rp(F7ritSDcc&+_X;LG1mOdw4tqxTK;mothNzt+pG0eTM9prf94KxdE&c#P^q=^ z8F^6t&zs#`F+lj*=+-h8ZyRrX^aCwn14`aYEg65vPq(8ll^=@AF>n@#1*DoU59rWNpqs6uqL{#T<`ljH zLKxn7;!9c8VH)Q5P2b4bo%3i$(9kql-Ah^Y|DGQbM$nJOJ@F$>NCqlo5Ii{H@tUz- zifHf@w1q}1u7yBZJ#<{+3bQErqn*n)0<-Z1(r4bF*Miy6g;(_wiWGh}sEGQG zs&Cs6*F8ss+5}|64{YcpqL2!ATx|YGQ9o8JUe*egFps}L$Ks&zv)fcK@A$j#dp{9P zT~z+euy?$5QEz*Bt!S^Jtp>%G67Up}4k`YQOh{2zG-lsWczD6+@nh@=cp&8QhKm{D zG3V&oz>#|S8F%-~dAeMZ9n#KaH%58ZWOf(okk{2We?)S#VGuih-(Y)a_lZl}`iZ6Z zmv_L8y5j>ab){wGIVW#dKM6#+jL!+HTg8Pzh??voTzb#0QGa*1$lX`MlVe4kh+4$r zc0w6V_WTU-d;I>ngPYK? zE?Z^hP(Op)U8|nL*ICzTvraI)z`~gOsd)IS-s={67}xRr848F-h~2KbMDYIgdf-_d za9WA0OMV%a4s;Zy4MG?nXw3`jn5Sd)bewV6gyRp6mZ~#1tK(BGgHbeLJU#&?W}p_)OC& z9WM^PG=#@>?Eh5XF}uKW%i>uZdxL--p7}a^uHfoK;O|}R(pbz5_Y_r(`cvf66c6jw zDQPM41E+47ammCLDk8`_%l>;KMdrW9Sc;h0qYwtU8i?iLw+H!n!LHkDXwx=AuxsW| z^FH=9RjnZ+eWk%Jg>s;Cys*_fo!@tfcYa_zX)`^(gfk5w44|W##J18E0F&JoWkPEy zgCm?skNp^jYdzQzY%Np83CB+Q>YFHQ;`JK#{Inw%NlKa6G5zY1-2~*IN(VM`@Zr3^ zPiFvCpE>U>aXWX!>NB!vFXf`-xx#M~a6u#Jc05uIi~$0@71N{-kis5ttY^|Ug!qR@ z9>0Tw{9&!M&sKfpaKkbmwh)nGHcnQ0_Men#pZJ(1O$A)dlD!1o?niElbGvIwgjwjafkKC3!fC&K-W-#7a3?!n>|0uQ^~xmSzp_f)tTSMUy)9cil0XT5z%8U)#Xx{a8!8BDVxv|&E7^K# z#JLXq!rtq$ZzJynqbbp7y|^O!(Px8xPzq)n_Y5_Vr^D|{#^7?;+5f)KZnV6T)%ilA zzT+Lj-1SY{pOG>Ud~d+H_L=DYw4mI9u9>lw)Mznr=_ys&z~5E5{DILrR_SJfO`vZx zDCe8n9<=7pf&O*Uk)Gj#N(}0d^)9mRE_KRD#F%kcN6ovvT z%Ugp+>rrOj+2i5+$C~i%y1)24uT{tSVtGc@zFyLG7h?<}aI~w#9E2_q)o?cbVLuV$`<-y|uZnz;ma-kfmirsrT~R5`#@-pXi1om%pH#nU z8lg3Ur|@Z-y64Cas+MQWRf6QPIg>>ze0b5K8N?6y@MU^F=D^*Kj6QA1EHyKbtnld< zOwt9K{ZiDMSaHn~%MD4roBO0wej1S3W?mE)Dw$kUtw)DNIz;}O@Z}d7b9H-jc$9SG zanI^w-5-H7PiXN{X<{htMmo zuDFn60MOU`;o>)nZ})$e@LvqtcvbrD%`)Jwu*bJp*p7J#A+UmWekIa(l<3&d>1YTv z#6?O2kdy%lQ@JLm)fd=9&kvgGR#Nm)RZ%~rxVjO*D|wP&5qK>t>*@ji)og%I(fB?I z?!xIMMjC69);=EU7Dj zH9#5JcX*R{q{k>mV=T0^iUZNk8@)W`Z7)2TmAZ6_Sh@R~D4V%WZYL@AaS$Ji4dhBK z=>!bMxLy@~+5D}leCXXw7``#j+IF8CA*mVva8dBzpYRvIsh}-^Cw_cso*S$TwZJmx zTs4Yf5?wZ~(GO`jXfbN)f!ry5`XiU5%lLs)SJi5FRf}vz99bGR|4K7eiohrAv~ZGk zGlbGn_-ON&`Ae<%e21BCPatir1dQRlK3S)CNn*gsrerUZ4sw)Mv7%K8wMG<90_2G)$hQO!~v( z{;55^Pb%ljX1Mq3KTX3Y;!ns2)HIXf?2E?2QfzvGJYq*wJ8}Ot#q6?ke+jV^(+wxi zLhW5<+h^k_NDM)GfE^0Sf_y=3GBA4AIBvxj5lA*6GO~$+NJcp(X2O>yHC>#jgs7Y* z(xdldW&ahI;7Aq*BW&g*Ao@0Y{%R9697=z@e~CG*ZR{bwsV0`p;p571Hsv_xnrb@^ zy~#Hq($ASUbr|{&hlOy?|5ATndOQPVv86J0c-IpFD2_YDDM(NvY>@twMxhX4@ad*+ z*oeHsmM3P4$V$faecn|!pPs7g`p$I@)~Ji^nQL) zRz@%SmG_is2!C0##f zcAKp4%;a(i*wn4j*e*iI{@sqp4FVdA9%os{%V5tSoSK`fKPuM5e!rHN{PD7QZ z`-ax9QW(>h_x#R2OBrW64EF>Kt|(Y6DJog#R(vaI#PLsH|rCsqP5?LW5U&vl=Wrg~*&;omadsntVoWaQl=QqiASkd3i zpL85p4$exD|Av)X2(}Ui_uLW|5TgWcF{rj;s(&9;dyREuAmtBTkoUmNH)gOU8O#bl zu%8kxlp5lBLdJ`V%Yui;bk6<-Ht>161-~v#}n%A?u8b}M^D0RvMfo2yA}@g>-`)jI;?*y*}QOxZ9w5eY7-2i zdtmu%nayD8ry_)$8Vck>b`|y$vevyAqwQOTO-kuIA6&4E*(f0Z=%5jp2H`%4r~wE} zy8=+=7U2tXI%+2pEkr~ zB6}C3v>C8Q6>jwGbPOqh5XVZV@$0jGaL3sU5#7fGCuzW|?$9SU$gcH~n9G^p!g@hl z%~yim*sP(|b?`7*x3Bkz8QQBMahdr&2R7C*@E&|fAn*gkiSx)!gaGxG=wwjiH%39o z(x)5fwx#03M=2)_Z{uzmc-)f^t z$XT%IGKTiC0rN1R_e0&M$};Vn=Dd~^{{|AKV)1{_1JE7NP~Z*ok>+Z>FB;P zu?yZ2Rq3%SnHhS8bkX9N$ZlFD%Vx-&xkhpzFLLH>tV8O5`G5XY;x4(;D_A)S*O zxs2EU68{qta;hm`#C@-g*Jt|JIXnubkpMy8mUYe6&2r5%9MeOL8_+@7AO8+%wnbN85>Kt5zHNBj7j~#FmXH2WJD0J zf`+;3hOG}kRp>@Ee!A^i6JK=HNcQU{mXD`Q@(adD&AXTFM9w5)u*^K7Ht#is_-?B1 zBPYQ^bkVfmi-0n2Ox>k4DE6NP#xzk!Oq0_!jup)xt~s~((BF6C|M-{{X$k6D zX57^^+1d+G&T|D9J*rE)M+9Mqr|K-eO_&G;B92dZkAI^qT?Vrr)sFHqG*rO5PxX3= z)qO4gEugf4(er+v~E4mBSuIjGh;Y|MIuZ0n-_3}^x@K)MZ>-zQk^Ui$lo;RoP3 z&=aU+&8Gnr5j|Yu4HkJZ*iJh+3b)OG5+Z4jF6fvNy%;zp zGKHgqsQy)B4gHCwdkF=nQLz(%o*`W~=s5fDW~i#9$e1z`E;dp{GsMI!qKuv041rs* zlAWzgDi`oL3P1cnw}l+X0_r916TJfS&+If&0Ac>3r72QYIYdVEurulVC$OzYqn`vq0|@Si2>#4;kpFux2=tD5uFktP zz|O!BbNm&KeF~TYw<@hv@M-7u2M1n>BtI3H+5(7ZwDs>8rnb4Q2Ie{$2{83J-+Y|C zkj>vlCcaEQ`rJrfcP9Ufp-{wJ)RPx3I9)NZ>)Oz@TRugp1AGfEBy0_kFdkOxaKLF} zC-xFS_`OrE3V4Z`;cK&c{ov1)U7?0-3AfGi(@X_ z>WfKR31m;F#yb#4v!>UIRpI7y9=mRJs;I@&Jskqe_130FHSLBL2sa0rIzlp~-i^$gm z(}Y6}DcSh!L9n0itX2WHbIGU&_D%R6{1=)38|G)yZ@cD_#t|U#agUI)hmi`@pKNAz z5h^|4;Y-^ni}nNl=5TZns&Q{?V&G(ok}qim_Rww{-k zG_pen#@ePmWtI|ZGeIi4k&=6x1_9WrrMXeBYPJYo=~#;*5MIGn>_>Ssyl+gwfQ7Od zzGC$0@4x24{gc}0k9gyj#suz@d9k}!UVdFwDG2EJSw$+lm+XgvYXMX7;=KNgL}clB zLi9Jm*EP)wWLgVE5W*E9GeW0K@jFEl756_Yf z{XTr9?{G++7p&Yq*Y%13vmi7TiozkL+<)ITct1vuj^8Z zX^PaSREFFJQcjEWDiG~6hpP4=CXYh>D)o9eACFBq&moRBHix?t%ef+r{ozx0Mi4&D zNNic%Us{PKh6W9-K?bFLUws<(uTDfjbd_v6ppR^Zr74u#l2nB))}6goe`B&ftP46F z96K0v7t}i>+OaZ22#D<; zSrfF4#^~qugUF#-|NOmn-Hm5g%%!EHAij{N4Vsxiwnqt3A-pyD=g)6n_!+CxY8zk( zAA&BkVT8z;u_|7%DGhb{S1!R!>$h{+fu3?3ciXh$1wTu*GmNVcp*4?lbs6Xo=_sI; zutv*%3ka{(;mUkjLZ4ewWL+Gk@kvV5p{Bf5S->YyakqsJo@YO#*00{?eHk!U{gb zu0zI9!nD1;g_#Poe?+6g3J@u{Wz8xgyN(LN+w!bi53_3`(Wb^FQ7BV6PV?AS}Y^q=7jzEqe|%~k|K*D zV4m_FTs*7tT1UW`^Wy26m+PlWX{n{^V4a=9xi*&{jAcwqF={vTrevP({eE(!P}pPA$&;lV~05v;;WfLVI3 z0s4o-@ezSBz;9=4zx7i+!XTBmA|bYmVk8*N&Y@U^$~d+8JCz7eRyF;8N0(fH*dIe^ zN~)b|&u*g;gjWG}PqWr1-RRkXgF_8LbrtwSM4=o_mE)EB`@ zf-zMe#+1cisD#iCANPTcrc<5NySnfDe=}NlaL=adLQcm{Ix5kyb_;|Y7iB;Vh+nSP zzgk$sBxpsebZxfRJ6Jh%Kd4C{gEj3yO~)+r{Ux4``pB^_(QGKX5BBFx-~n?VO4PH24==VlLt3u{S#^XD`hg^EHU~3^6|5x>^!^c-YU@*v z1)|u1B&x&R8*^s69+%xy)B=meqFP=-2MDkY#ZyI0#P!vM9vHqV<2mjAjdIO0B2@lq z`xRm(XuXLD7pc{k7B=J*jZr-$dau<=K@l_{e$Tplc2ao-qP1Arfj=Ehjz}40Nm4~P zDl!k?0m!>Mo)5L+ba%PmTHrz@qL7Yd*~S5{YY%6%S8w$p z_JJ<7c^=cY!-E|x=_sC+)qWZ~TOvARD=%3-iW`QFD!UsbK0LY8Eor*csF@tahs4N8 zljCd!at`;;#-c8XS)6V(jz&lf;K-ez0pKLp5etag)SJ7DA`r&`Z71vu9Q?BgUq2tJW;M zh3NYsMV&+B!wZ)9yG8kjJ;4Gwiy)G3oq4A(r0hKI_T%gd9~G*_xlzM!1TIX{gL9sL zk1LB&3wdc6d<;7qN1qbE2Onj@CY(~Zr=n8$=bR3@_lAWkuk8*rEeHFa%b6EL)JwNJ zVKL}5g>^RiUR`Uc?Fj z**?deqU6+X&I$ksm|=--1XS!JacQh* zv+E;HI>RhHkl3Xo>fZuT7;7jxJM2?!$TJfZLG~EX_7{~Ydl_lyC{vY17cn4aCK`@# zkI<~*d<4VNpwWU;hfGZWQG*l3dlzl^H}B{dd3@o*4{1mM&3oJB(aN{=;?7FvyH^f3TIQjfSkzquM4O(zy_FG{}Ku3dzuwwV5mD=86I#;FCDi#0bUami@PIxY#FnSoOO@sxCToAOTfiGO zYW;O=3U$gmj1%4IpunD5^_u$_z*&Fudg~KVW`jW#5ik=K5dSFi{SFx#`=ggTihj`rA=aM9r4z=6ok{w&=s zmf@IJNk)Uw|Mat_bJnAnYX;D_49Sf2Jm>Y5rOsBabk=(vVtydImILh!J7#3P_KM@t z*EL}}rBekhHEX>c&#K3#TKC42PZwU!;dAq4u5s{P)${Bl9dbsKg47JfE|O@@o?gpJ z+VNY99u`EDNS|*8?S)Nf^H>aa$Cd)x{cH>k7oW+Om(9og)~sd4?(k+3hNVr11A0P=t_}_45`w!)2x4N3C^EGcjs~|oNvLs;{Alv7p{r5(LS-JJxJ(E z8617m;NIF%_@Q*8n@>q|b;hGVV(_0i%V53a&JYy%Z?2FRzCC6SSW4HJ0k^^p{aEM6 zpnAiV?!D%1j%5io$BV0>Okrnzo}K}}Zl_oCl4O>4=jlKh)k_2sl&~$h8aOFz5)cCww&K6 zU?%tXdd1UARg$)FRY@yP(o_+M>^CnNayaPZ-L(o~gp63vgwuv*HpeVl>tpKsyBt~# zZVt~d-r^?l_Y35>=wo_YOK3!@y510ho1KyuLp@Qbr~rwG!a{enJW23GV_JB?syMKD zsDAX{i<}KC1Kh(N)WqQ{vhXT4kHdbL?0y^=F(>==L^y3oW(ntMjh|o4p@NsMsnG23 z&xxUaso(kK>l)7H@O&Pv<&WSiZQ)QX#_!+o!~noYs9Dr}{6p*J*#I~xT)*{p?Z!}b4st{@VedVn%fW&O zcW?{Fct7$NEmSZ6Yu`o?2xXcGR|euCL}ET3SEhGodLH(-(XSW+Rg-3*B_V1xR5Bec zNvWl5PxyC)L^S50=n3Hz^%88Myt6GK9;~d>Z9MKi&fX2$1gPd=DmjrO^JCao-dWQx zHC(PQFf5%{s_wG~s6$4LZuRfxq-^WmL^DHG!KW_wRAH`t!4-vjiK5N;YouFDVB{d#;IVd%l|>b)Wd?R@g2(4*|7}TpqYAJLXMz#nfVTbJ^bIRmX1zm_5_CNq^82fA zt1Qr=PgEuJu4#{aUKV7FRYMisu3RF%=+J-h9L9q@4Y6nRr4?34kxda+g(TZ<6rEojo6@09WeiuU3^K?5rLpR`ADtnB6{Szv;MXFuf!c|Crf&v=f|tSO(AQQm_PoVp9d) z=)~KKh87ZTikrF7^F$rM+O_LwcFijR>cr9TQTf#WN76Zl*U^4mJobrgn~iPTw$U_B z!^XC4t8p6JXly5qZMN?`|M%NTa<0kAWM=k#@4eP|53`9wljRs zi;|0z0`O2DUt5?$l~es|0Tu?%zyrRP)8tC2+z_H$MKr#E5NNrMQwjodQk=Ix(NjIU z-+K(7)c~Dhb!dIPPX|)z!gN+~4H6k>5I^GNU&el!2U{;tRCi!`I}tP|_3QjfMFJ&~ zgYsCA_f;XEoxo502_d5=JY}>%RC`WM^kwPQiARO=GbI)rU}tdgOpATo5IVsSNU{=b zi!BG3Lt>|PmH^#g+{1(o@_8VkHH?&-AmV%Q%tNlILGykI`+mZIRHihGP*c^B)K?WI zOeIc1-%tQ^X6vfhWul1Ih_HA>fs*S0H%H3bw5?j8EB6&c30dbC z13*dT%NvX&Fnm$vQy!&rFe~PJkH1|#7aTtlHxwjc{$5-aO)^6PJh`IxO}-sTpW{Ks zepZ+;on^vN?jI>CydldN!Rka2H#%It*L>|~ubYs0B`Y-^~s$ZF%4e9cC2 zkBxWR#+8%5%t&QRcq+zA+E?>*YAqDl1$DTkm&p2R;sc)cMJxf&OGOX2E#KsJZ3{kM zk|J|FbY{C>?$v1F$M(lJ;>trip@z{98Dka*H?Iflq+U-XLDj2kAZ5X7X0I|A&W!=}gY<)(5 z4_>FFTJ63CBEHDRrvCxY9xhEf)XXD?dpw}YOwG`Bu#5{VFS7}14oNp1J@#}U*ELED zPi2q%!-4K~j7dKWJT!t45=4Ec8^&*F9LEW@Ig6b#s}Wq8eCdYd$6VC1W}4ZYC_RP0 zrO2cBvw09P#)JGWzyJ&Hq6tg!C$mG9$#{n9e%fZ#x@)1A^T7@*u;C@{5ApzTYiZWv zAlN|^M=;>3!4oNgbZQoJ!w57&e!k@g7N?9^G_12dN4HVHG3B6IN7^p)iy z{6D25chYg8&J@p;i$WN{8!14TUvKOG?a~?w4d*@1|IK_84G<&iF^~D|(Gr5#fEa0u z$FBNml;ct-Dd7?+F_aF_I5qhG(vp(v-~99F=dIce&8_ESOSfs{I4wq?I<0BtO>pBY@g4fOrff?BaAsH0u%oc zK@|V2Ny-)spf=dubHFJaWmB7A$q23}>qfekHcsst)w4{6^st~zAAiGEAf}H1%tJP2 z_A|^=jub06K_F0Bxh4WTAZi{pF%PY+F2YQrQ&-mLKKO=z$o!I3sjkLZUV_^FTS+uv z%_pE80yTEGX;uus4}x#+q?D)aZ#ggxXCZ-&hh5%A-;F&bT_ykzy9Td`wS+bP&lTxU z@+DRKi$NtTCc^>%Y}IKx8`9(fD%%e*j^-U1*GRL4Gj?E1Q7kR;Bu|hPOApkN)y~Bf zI2(q5`QcWoz6W4-eZj8i`=5XIzHLc}Bf}>%SOXPGrw0-jv50+zu=+y z(Pa6L<-f_8{mQXInCx>H@X_LlGCE{@fKK4-AzDJqz5G)Qn9b;x7YjOEN^hti0UxpZ zs+uC(pFRVCS%wS89YH9Tb|v4=G4)rnzMby-bH>&>(kT@}9=XR*$GRFQrw1JA8ZD*2 zDLYO#j}ICotB-#;iF;Mz+`!=Xx54aGnz{9Jm1up4b%%)kQ3cqYZ&qm=*<=bzu{uD%>2wJn|PO2X}n?Yfe zHGBEqR-ui=as*5t#>du`$8ZG9wA-qhN5cbxV@)ul2c$w~d_%M$^kDf7E=_9BXn^cc zeWsHMSyc=wVxWwDwyOY?mGc3w-am0ws+Myh^?1)J8`a8|xmw(q8leD2qwA^RwgkY% zl!D=Re8_eAPry)_Z^-%RsuG^_+hw!j$iau0i~xWc1iZQJxt~8{0v7T&175c-{hV;% z9;b8FQ1dATA~`|>@64;Koq@Cv+k$`&O{NP&sA#wOW|# z5X9%A(u;xP1hW7u<;RB1`n4a(0m&H>X;Yp}#x=;F_#?&JD&1&Z=ge%>J7mu!a|xx|g=*14_;N`ru3ejMZO~iw32=H5$v& zH?T7JzSj>Oi*q6Y!eCUXy9|=(5-nZIdnHx->Lg%Z&=7PIc{3%g0#w37wp9(&M_%J4 z4_R|03m3E*?<0ul3DAldmME5!lXzb+MMt7Z|}crMdzZpyX*E3&gq)Lu&^DW{wvu35W~kX zVV_S8-n9l3CUh=TtwHh(Cr=$EBHzyK#a!{g9eMUI5oTcjGs)!9;zk}=ECd5BdsN{s z#w*O0iRR+QoCEDUo;PjZ;T*pS-GWqHCk})Eohq5^R=zVW9Y_CKemS~CY(WK?2$M-c z!1_;Sht&VZA4%qu^>+Mb9pV1lS9?@b4cM!8T-y=*6q zfcZcniLUOM&DRpJvc;cd3vrXCP}Fi}5($waJXF|<)wfiA-YZQoLt#dK>+1IP@xOR> z`WJB7zV2qFh6fySi7^l$=e!fY3-O^?tsPw2w`$g}`53NJ^pu?77;}AsRuqL@OhIRv zM4s-BM{$6?ZBC>YN-wDP;S*;b?2hZ^@G--mgmwHmEK_AAUIk~pm@0f`{iV8TBHQ(LM=;V%1D}L0 z_5XUWqhuT?CUs~w12IFxT?vB%_<-i6(7##G^~1X4mULYPdR7AuY|WXHe$!jS(nXs0 zFsXhF>_0!}oF8%)&QH@$S^^^A`r-)FwFi!74Kd9o^o1^^@_1P%T-B^79% zCZl4T5Q^v%!Jm~P7b?^;#n$ud8OcIUfxy@We8G`a0rn->AzD=)s2RNbk<`ab$dh{;1U=B5i?M&OHK@WEjD>00eeb;ji1gSa4f}Zqcg}aQHY+HSrF7P2-7G4F zHq;gY;449~ypjCX2RnoaNHvPJk(dT8K%7BlC-`_qVLHmZHL8sx3#8I+Ef=trMH{#S zJG9rsKa^ZLdgdYkT~#-e**0(3wpd>auo0};D>n7qd;bJ0{I4JtF)37gKXv*pF?eyo zWEFYAruU%aJOwy^BA3OVmCgV|Y}1KXf(f>ko#SYB6mmW;6g3eS5|QXeb*(fRB=y#G z7(~-Qv7EaJm^qIw>K691z{ZRbEQ1FN0+?vJYUJiJ;PPON)iF4neTQU5os~?zkiu3RmkNv*-CyAxY z=xz^@xkG%eT2?s-i+t(PYW>3w@I;`R));T3JDPml0^tL^z z>l2?{)avvCFXA44!Z5D$vk;ck6Ff-gaxj7$4YePKBQzrfE_=Z&KiP+JYVbqY_%2zL z=F;U=hwztzU5$YEh(gD4SHS!bz!oq~=w1h80#{L2wq2X9GM*Rp_{9Z<4^$_&zk0>L z;D6%~B#BcnoD2*hJ-cy(*b|1jOg- zLRY?(w;Y>lxnWK{)yggXB9|hJ#T$1N9gA9K(CDInluu^W1BVxN%9>t@ zY=0tt-!(380sd{Zof_It5LRVrf8fYC_47mZKT|8dU0>$ROD~g|CE7;%%c-__r7V|EB8?(%ZFMsf>P1znCpy)XR3cSx=b~e_REQL>|OL zEtO8<$n9kN;{)DcMQH5Mhk!$=nD|%Uar!kDwF$R~>v-A$eAm;dN0I-c5;Q;QggGx# zO;Uc$p|0e2(=j~lR`H0bIyR~R;?=qU9q+nWZmoc5vi+A8XlaSbLpX5XKKg_-4hY7x z^b2xQG7zf<7-1#zv?%Eau1!e+M$4cSI}aER;8K9&D6f32Obix+6EiAYl>CyCM>$=n z@7UjQ^S>m4=@PCG+HWO)61dgyAZhL1RtdIJEj$kmLMP`AzrngBu1_(x>J%lKnS6u5-p=-d)?|gh+Xg|t~ zsw#Mo1x;7yLJh4q+2RI-j!S63StWSK)W~SqvrJ~`xC(WqO4+J3G-2Cal!?04%(>h+?2$REKaD={n z6V{4Ak%^_7g>9Xlt|o2>TPo(2u<6=Eh_t!XNP%7}Z(vS$2n9pTS5J+h!KJ_?Q{OOd z*{BA?O`dcEL*4&-_@G>=3EsaJM;Cl2K~nu|^*U!s0|H^khLaSC+Nn$QIITk}=99`< z(dH#yr8KL$yn-u>QF`ouG#U5&#y6dpU)SYDx;Qq-S{iMbdTCZhG;vk^Vc>G!$pKVC zPWom2W!hYT}bm{9c+QNS}L60j}9E-mT8b%R_A=b-VI=lqd-iJ+V zeSf*FfxzMW$XVAk$_H7+1iF179Xaj(EOV2m6b%YWma(_Yk>sneuX3+^AsXAVb9=xs z=g1lebd3p0!;nSFmN~RW?&!EZHG5ZM7&dn6u5$Y~!DEWsj63G(Q5ST8f8=w_8Qt$x zAmSm22}J+RO3Pr(X>`Ek(ZqqDSQTtQ1N;%no3#NguG4lrL>Z)P%QM?Azm%;#?Y>a1b4sd#zV< zle1#NC}*CDmEjJ0w;L~qo~K#RBYhgH zENL$t2^};C0|bq88;Z$S;%Rx7snH{5fyX`oMeFcAHE!h2&hgA+^gm~9du@)WMh(j; zna=>;FDHOQzwJDu8^VosFK22@@w^OO675|jJkOcf+p;@M};$nlRjwVa0zn(h0chf9A>###n!hcs$@1tgcUr8L;W61FMv?y-P z>7lm5$0XOIbi%*yr1{HMv%GCd?RNz62cNNzy2$7+He)tj(q7n!?P~b7Jk#D`t!{w< zHsG(Hmi0&NB~X~MNq{5)B%!n_4!j~TT13%k?tx$a%y@KB>}4`YxTA;~ZVRJ=lgpo_ zE!#JLr+*9bnSGbh`^V87BHG0)Ku5K;!C6FwIz1V;Z|JT8NM{u~k7W11MtVK2b8z^* z+IIgCg@Ir`m04P-=^g*hT7Ysd(G3NIo%%g6U=Mv|wl6g=iXG#HpgM`5YOkVtgQC0o z;oF&!?u-7OeRad70k<34UWzIzD962J-(!vT&rUwuv=VR06n?++$`aQBn50n(PbPMO z(%z_`6pmfs;iy^Dr0vx^=9nE#6T0`WNmz0YLv$Y$bIj&~_f?#(XrGTzL&kjG4^Bj% zFHDUkQsaA1l&a^md|qRC4iGv%A>0xDVoE0UYF6?hle2mV|D7f*>LzWYeW%ppjwk^8 zh6cbs(R)N3*c&otW0Vm%hOYu-JpS{bH3aPz`?O|rj)<^BV`XJ20I_=x7C2MGrJ}(0 zJp{4p+sm4_5*S6lqSHOti|PgC&=DE4XGWz_PFf^~7d$-@G(z6Z@a^{3ja&{2HZcMy z6cs^wTlYU(bU3VaVP{Ci=34XsTS9bj)&;$U0)e9~fQ|EdGX?!v+zHLT&lYM*JfoM^ zksJRyCN?|C`4;z0=;jhX{qIEk=waga@Pjw3Q&Sk8(Fv(q^_HSB`hXvhOb%GLZ@he2 zyr8BjbWmBJKpJmCF(lAkaTU=se|}c}x&)Z!p0qW99|iKKKwbCW6Jtw!Vcvn*%vn>^ z|9U4g4zO!X{h6`Yt5Ev5j8l1ZMb*Ap(eO`bP(2K`C&^3XhyveKd>fr|TEo=VxfdWv zQmA-aM{Q&iio?goIJ5*I{K}VYojwIb{-BXR?mv@y+VvBhdq8Jy!U%$gX{><;Vhm-j zONeyr=X=#hwZKHEBEKFB0yQ zxPF>|()iwVkOvzP2qHn6hjaa#wg!47enVv@piGmh!|`Fh!#N+!;2P8Mt|ww*Z^2NX z2eZM*k-M(a%d24f>l}APHiAF0SG0_`QM+JA*5-EfpYnkCvCj+1-IJC0zV=&!XdUCl z79#XdHm=K4Vpw2+by#I(A44!uui_R6J6S@)#F6faa2om80vs90C zLz_?q7~&-UfNIkL62Ht`n`vfj4UR%Mo?z!_98M|z=h**-TV#wVB7cKEYVWzeH4HEP z7v3bJG}&=7=e;ew7TIiA;*I$xRcmvj_{ckbu|-WCZFE7`Hd1DTztRK?NGaTBRW}9m zBe+jE!j8~pjnjHh{}v#q`!`r zi&v;6SyKU-tPTAT%nA-7BI>XbUB{jjhe%wJrrv82+_b%4@j!G~<(d1i#6VV*Gxvt$ zyMLR8^&45C*yuL^B`{JCIcX#`<=EiKr^+EuR9H2({d3zyoMV=UYi3bMRGywGJwj zFG`jGSguZO7i>k?PY7fxnEdqtnd928#S9dH2)#^YD8GgW5%g`osUCRd-&d3S{R&k_@*rJtx74lDnjXE*c8;sH5v+z0suQq7OkY|2llI*8tlx3l*74Fxvg*~hF?lxx|y=Zk_{Ezd;u4m*!DbpTKNhW5;f!uS(x|O#sq6?=?ViZH z>v*N7+co`-)MB@{d5JSQUQrx68ud2ku;g^HccCKL1wLBTPeeXR`g>oM1D!U5ulgdR zKPO^)vV?bDT891kx3<{W6^`sSofwhU@_dGfF!9qa2(Svx{yGpb7{{k}&XR~)ub@F9 zK5|cd9F_0#NgS@%H-*}u(B^z}@FKe1=D>{HUU`q{XuOb&fYMOT++H@DQAx>mlVrI` z6aV}IlyYXtL{d*{eb^YW6U!`52L|#l%H;B!h`Ni`UXjizWdIqNba36Do}Wn-zv1`q z@52Z8ffHLC8HBq{Ew{dgx z4vzE#*PFIRF&S~B0$CDigB$6?7p9=+!x&kHIC6Vu2eBBMGa(6Q@jA)M^ABo$Rg^U@ zJlYUukG95=c)GzaP>$svpJY9T+ZaNTvl9vxS@-QF;H9fXsUsPXO04F348GzFqIxF| zGbKUsCFd4CQNQjD$$ej{rd)N3RK-=YXQNvuPeZwE@nvflLmrk8#f){OT(L_MDPd?( zijGU{UG0_ygsFAgCo_~GjS|i66!CwcOF$L&^vylZ#M`3vR@uVzlsihi<vo?Zh+X%Xu<^)sg~@X>wl%M~~Tel^qWrGaQgl-R>BCkqKm$6IoB%r%cKB9m?5vwqB-clB>_?c6vSwl2bke(@gFp{7D5avz@C zU~nB!h=S=p5Y750cOacdb@AR)NXPkzrorGXZBFz}pY#yG|FxqCwJk1DN!84$HE!Z%YNmiS?JmZ?sG;FIsC!VJ0 zW$xw+v+q$wY~w69{h)CjVJ6W8gWxlkb^`Q+~;2MXQ|O z=*T=tAk1MfAy=dJOj#VApNKMV90;*o%41n?Igd z0hQR&wwiVAJxCC(5a+4=mzkG!sQKWAMz#D%Yh?BrS0w$gXhZKImlrpjW+Y!CHAu#R zxR5tH!Pu$XJk*tP)+|GUEmn)I>(9g;id_nyca<;~6Y5V0+Q9SU<^8>e?h!VebF;b` zv?XHO!roDgo^}r1$^ROG7_O5Cjld+gGf5K?C>YL8lWg#8L)PO}0rvQAPl+pFmd(Yh zCH(_uoCWU@j}`WctPWgl&6jmF+;v@RiFeI%IJ14IiH*?@CH$)r{vD?Q@))TBa%K6O z?0!h7wLOQSG)Imrx=sN6EA~LuK>_|^W^qH(F3mz?ZrX5jUa-4+(n|V$Pa5qaq1Ayo z)q`1a#agxpu&)43fTpu1U5C4^aHB8qv$u!Ouqy0PkLj8e&?N6_`-6j5kMtNds;{WvC!GoPps-EdtuO66e((abc6usKwd}o zy~9CYp{;X7R4yoX;)AJ{pa}JkMKDZjvtA=q2yLWfSbjv(rQffTwhvu$T!h|D-`4uX zXCqtjDZXE~b1^Z47wZ4QoeusNJC10V<`Js`^;-G%*y|)=+`mF2+PAnLQ!~~z^iXid zJW`e8x!QhL8PY%89+G}fCD>VGWC_cY@S0(ao_!M|dqSQ5b>?xHV&OSKi$508?Z?G% zf|FVq=RmfXmQysDyOaBNo^hL3J1@;Y3ZE)1QR!n%TV=~XkKIbEVIiaF{?kO&JXzO% zcIOu>|JbWDbgVU%C4-lVrhooB24R7i(tIgib=%B&Ai3QU0;yv;^|F?0vISoA2Dytd z${(GdzZw_l=;4yp@s%gfzKMYwuba|nfc)@Im3h(q7OL3SZ!ga4^peXI+z5m%bvC$9 z%N=56e?+`<{Sf!6PCA@qSo*~&!BurL7^$CiiQ7O@m@}ILGf|Tt2 z9H^eD*kH6{3sh(uPF$$smo-BN>IJ=(zTTgLP6~QKp24I)X6*%&pXBO$*WYocq9I3d zDrOBya=E%IQ}xosulDoiHAR2Y(^4zQ_BIR7f6%{#P8t7p6lnE=QdmfO68U$k7E`h4 zibm@ND~UMyO-3--2juxtG9k?aPxfTZ%Nfxpc8A?Q0EXu9lP-FclN zi?M8RmA8O7;%IRtqAR|By(~uZCLEu_k0v$^_j=S(?e%kg#-Y@FsM5no#9L*nvxa?`pe|@}~BOXMsWZ zPJcbsS%y95(I7c(_l%>_GQ;hHnVAQ~NuFrD3=Fgzx0lnd_o z6JnVOv_{PXr|7GA>D7YTFM3Ez)()^(t82utK$fbososwxY%6u+b zwFLX~Ldq5fYE#)4ldN@g&~`Iu0~Jkg6;ho8qNQ4m%2E+OI%-Fo`Ei>E$d zM+Qo0n!h|aB&bTYRx}+tjZYY&VIw!6ree1!z(Brv@D9TLG;P|dbNHQ>qxQ$I0hSOrSb_(A4= z41b4yW+sMhDrJbb_I@pH5KeQx$Z`@7b3Q2;6HUBntHcd0ni^7qel5+bY4iyl!?8Fr z<;C%waGTbvyOTAS_G^UKGtJw29CYgohnLKigfa9NCXoevYtlcLy2O@qm*iFHgUJfIicAX!5rn|7&YZnl_Gl}ik1~iC2su9p+AV==U2EV zGb~t%mF-C=|1&5UMb(-EUAh$8+1PFvn@CJ?(3`It|DS@Zk44FRvgNb&Cchuu;+(eE zyTNf`2-M$jMd_`&u&rru0@(7RDdlNN30X=tf$s1hb!Uw{)WRIPK5$k6{{_l3aPQ~v z5mxrdwc&Ytppd89ydf|NmcvxuN2f1$-Zq-Q;k1f4?K516FQ_!pQ>W54zBEw5UK6%$RDMf7y>l85+`gzgAazg zX|PyHSOYK$_XbPrtVx<+2;KjF&+Z9R^dDlI`KxCEJ+ftdM?pe8$x%PW{GbK<1wTW= zit5D5_1EC-6@C)k;dE9R3w(Al(LHxd9lAgu#P(K(s>94b{|~hmTNSZ6+|C z!BDOCvJ9#fPAf^2m`&b`7)(0&br)KhLbnuGP+uf+Mj$>C?8DbYMiuTFbNltr2SmBp?36-!07slwn z|F4-z|JPj2Ys|As&GhZPUN+RaKhvq;uKAJzbUMwZNcjj+y21Fp>#RE|eyGvEl)*WW zDaYxC?sYs*jpmkOs#bjo14%wBQtqE@iWzo@thgH`YXbNx*a_&Rdw`VdqC~PeiQ$Wz zA(Np-HLZXs;Gb?I5XcD(f=H2ixpPfb-iRmYa}n~)NlD1<(`1MVnhQudsX!qdEn5pi zEU?Ku)B|1cg|gYXJ3miDeaG1_L}J#v78c%nbP#8bwpeubC!BMrHo|DrhHef;c^-Xd zm)4^Abm#!zdj(3MJ1n*ga|Z1eIY{7vI)lEuFzL=|uRuA;d+-|rrC^<{rOJE|s3!+! zuB44aFH30m`b&qQFY%7{9$jwaf{w$Vv@Orq{HnK{KJ=FT*L6>?`Q(t@%U~0|jP&}w z;&&rWGkqwG`^W7eS!IVmR#2<^P)bMX-??974w2sXM3w-?|8P;V$k|Jx!>1dv|CQNV zrldybpgu7ut~2PsFjIH2MM|FKbopdSW(5aVD?lM6=FxNMrj@5(5Bo=Qqmz8`E1VK( zxMl}Hnx`bykZw}Y;WG8p#%V|5WOaywiYlc#_FQsK|G35TiREBr&Gy!EZvNQiiO3c+ zbm3KMyL$fVg)@Hn>H0Aw9iRumqr+=x7pk^rE0DjS%|9$4vuhDj9$NN{$MD0I)0RYx z#|h-`ZW`Yx7NTs^Qz?4Oo0o>Kl-gcWz}9M)=8ni6AWLF-{7_oHely`jHn+30rL@xK zGu1<7of10a_cl}J_=vj9y|Eu9aH#=;mAZaUh%XKKZtzeVrsgV7c?&p;&gu9wEeBB; z?B_T`=;fi_a+|7NFz~1w)}bl;g)D_RP;!u#mrgNSm{_S&vhk?Z6C!#q5m0OWg^g{Y z-aXAiw@SVgC2vU9Yw&s&JU6}a8X_KzgSjww*4O)GHhE>e`ZnuJYz6ua%@uI>)Hnax zq7yxbDs|s-Z^W3=P-4w>+XYeCCSV51ax8rHynwJ9@eShM4I)@6m1`)XL@_n>x7Y9p zgifVc(g=BQyyUp-2oIK8r_j3?_mGy;9ML^zxXaLa)Yq8S!@o+yKLs07^`-vsz#VF` zv81ZW%hLN>bA^E}xM}S4J`gng>VtMvjOKgmMfY@%Na5A~J%pwqk71oM2y5(a$un{e zs=MoqdxQLC$17`3d#7APx3uiA1_KYRc*(OFmLIyt*KMxSdKM96$+N`$1I8hMj*6bz ztc(%14jWAlHf}M!wy!=KmQqjsjYQM=;up0_EXwk=NJ*`L`;D>6hdQw@uNf%*DHa2f z8u4P+D{}1IZY>utDjW*sanWojfk~b!u4(C~*c-wwdSgLAM!W~S=Jb|dBGul6a5QJ3 z7~*eA*wo9mKk!4HMzIMl?Jxdl53lZuKgNzzTKT_c1 zHFk)08`Ms5QeECy+7~H8c@8CGNuM~t3)8PMA*Fc0?_p9^ za3UoShe;zsV~io4RU+Tde&y{LOe;`~k&1lt;K56Wv!->e9(JMRr@)g*w$E9$ z9{s>~gDlo0|G7gIe(e%uj{4T@&U?0re_i#db8E$UzEhrtvWfHs+~nIqV_g*u6-F5- zz?WXvP)<#e+VE;hBzIej!Wg?eesV!G^nrMQa*7rP%`95IhiN8Q=7IL?{Fdgh^ z<$*shMLq^=^?M&(KO=+wx1o+&XY=Lnhj&CT=y4zu><=y-x++p53UoKyz;BO&X6m-c z?JRc;4cJ5Pp!6+=!5t_A=TMDLx4v8CxmQWyTe*{OK4B4&s~bV1$gSqeYkFo5+CVTX zTzfopF;9KKLmi{aZ&ZffDmliIP`S-4?}%R~9J2b?Ui?{=Cf4iK3;f>rz5Zjo9ZTMd ziVFiWq7b0%geDzC@@9-y84KxO^Xm$l9C}B^bGC;NcdL@B#07m~>((+yv)>za z(pmeFgTW_`Rm~6<8TRovCbb&}>hl|GCQFL3SjKV*xk$RC)fnB@Bh(X!sCy1`@id~s z$bYN!xlMk6{X$eA7O{gX-v4DuAg5!hUna&lRoGR&Kp%$Q4Ayx?qvx)c9xB7o4mBY6 zb687(LY@qPf3)xUeI{WCRbLeJxmeFeog`l5nxqD>*XK};2r-Fs&tMuNe1|IZT^RV> zgEt%I_>npex|aa5)Fw#qx4>(A?eO~;IK-`crR}p{n9x_E zG?h6{?>Rr?O9Gq_$SG}E+_1sm9&cDK0yp$ByqO8mD9MZDXN96ORa;SVonT}1N8HMG zmx=hvY=@z)P9!&2|87J@vNg}hJdpO;O5z%6j@2qspBLkYj2c!^1aFi3)5J|nU7EBG zM-s!_QM_j0RUfM{{fVE`J4PcC%*UD%V|Yf<3mi~SRJ`+3bZ+4HbN(_<37cCzBve>~ zoZkSewqNVka#x+`wOme5e>GHGT2bkJ&zJm5xHjEb@bB*);St^uzeBWn?Hq9zYl3a! zAIyFT9+7@_L61^)E2u9d(@qEo`Zt{U;RuBjxAg}nLGZ_d82a%r#*B;>mG;S(W2i~n z{W_udO32(UQ1Y@fy4~ad<+<0tI5hAOu%%7Drm-Ib&q@ANb<~nT?6gdVrMF+L6mkuT~qv;4}RyYbB zo;39xot*UM3HDYcR_!;l>l-MuTwdk-B*zuNvf$w6a#u2tSkHNb=i+})ejP|W5-nvu z60l8#Wc*F=CJ>Lq2##W)m^YFHmm?4*wOpBH-my$*R^-5J1fhIOVurO`53vMxePh?B7)f@N&<% zcd%4d3Zl!0)G1U--khj^uI0w&)=y(S4a|4-9dz z{7EPvZ{n$XES(i}dw3QDgi49(7;mELx5F!iv~8dt-$Qq9dnQvSYRHqR>PxYREf60jL#Ff1s6@E* z3Jr3Spr~S~_AyYT;C?6Pn|>NW^NT}>x70GJTEB3cSZk+05d7t;Z&lO|1cDTcK0lHT z9*JyJoC@yqM%j=|)bz2^JJnU|TXwBR$sW2m-lYiMqHQ<~@-8Uk4Y@GMlBCtCUbWZs zmbSJlb8ti#e$tr+KOA_e?xt=g+%+TBwi|-)5!H zv*P%m1U_QY!Y5DaBuh>N8pa-mtBO=d(aWAcCI*wn!{yGF5>bm*FR$^2LOb-aor}Tm zgcG9tY4r&Rk}tZKZf)vuU6~cU3%`uVji=D3XZT-6uOPq^zU0uLAUXKJ>~p6~eYW z@%%6!ZvC*lT{3SbI_;s#e_gxi?Ef`5NYA4Z$%}NMIqgqI8N7dHlKR45ysA>jqpZ92iQHpW(jvR(F9VCc$XXv@LH(}z>fv!I?&b45X^`~Ru=VrA&{bx0c!@lfxk>P#{nZ9VgL5w6Ch$@uEb6fK`#SDCIS5m^rOhcP*! zGQ0_40g!$P1_S0!618o*7qV4W+fupFRKGtK+=#x9GLgKo5Q}mV zcY_)o?)oxHKKi_b(&KJUhXbRvUo=I8a#ViEZ&lNF$NSchD>-^v+0SF$RowT{70CcO zf8E1yx4KmS@|Lo9Kdnvi5o@P17D0mjg4|XrQlZ*Z)X`To$fpKhJMz(~G^8gZ^G(Wp zEPAaZB1?7k^#pOILA=pB^cezbPIwSA^;5;CP6jchjEiE?bg^QiT#`1bakv3Q6zCzo zNQ%UPGaY4&$QJ_|j)aCC%epfblP8M?s7C2mZ~->%*OwEzUZs5@NT|4_` zH?maLn7-6W>4p7BJEB!_!5bIeUD(<$GRQWF!UVb2OZ0&S5*8g21*=QyMp}AHVy8`qMkO1_S1@$@SK)Dd_-%=b->Q@R6*1O4oAGr#54^e3R({=D)^2!(uh zFwf6Z>&12QmqIdP;vMbk`utP&5Ux%U?nn4z7F62~X$;8{8p|$bvfRV<25zA77Eiw^Ls{R;hRY0U+KCGB_>Tk{nF)An zZ7u5DdbJ&gD@@7?g#+kpXr=^)LtcRq2%n|w8J>e}e6(=Wf{ErNgo2ixQ?=6bnxkO& zBEVpg0uEBhUM2;snlVdfm3{xYzs3_3>)KgtnWcTl5S)Z?M}Y+L;{?o9{3E}AY4h}j zSPU0`TDuZ({%dL#i+awm>ydFa;)yXeZorafQAW`Y&Npo!_zhz^YuW4a$C+Z&)3^|U@skxG$M792OzG#^B@ zTx*i4sj`)%4W@`#JfF6Y*g?>;&Xnpk{j{Bj0K``ypo8&H-90nAL3@@dy^;UdMx13a zv=#eT`1>#8^XNJ;^UoO7VzHRU$WHs-==N&R_P!PRX77UX+}65tCf+eejDbUa6xq9^ z|5~#*Sj|zhe_pT8VXRoMk!;pPIF8SIRJgW=gQ4k2#lU6+8^+1BSpAr$`5}=x?qFNd-Gh)FL9dUVKAei;x(e=+TL-Sb zPXJyw&BoSk!lo#MHLw}^r-|hfl(X%2K=;$&N=zaOC8LTpRV~+oyU&oSv9tKG1^|QP zoXM$2ZS`T5Qej3@QcW&w5-iRy8|48)@SqnaUU)a0g&C;((S5eYyH5NA&o0p?!Dqxw zSnxVvvMY}96r9dT8`W{EV%GdO`^Ryq@30YLe&mMP+6hFPNr6;jQuv zS2WC5f^!Sp!Skg--5r{j76K?VnS$wFz@I@34>j`L>Dv4yS*LMDwk@18G$g_bb(3P#kI*nII8~)EaW-AMJg1sQ(-E6cQpFWEej#U8Sn3ts8*^$5@BV1My^Q375Y|62$#M1Y z;OYt$E_~@6mK#-n4l(~DZzJ&zFn59!?F>42-yW&u#S5`Ac{rz24muy6!0Jw`Q6*cg|vr9GBkLg=f3~*>*sp3-aeBZYKFuv;y8Hu z>!MBdr#$DlSa6|J`{V7OXb`cb3p+Kg@@b*3_`*<9&t>XItk-i>LVaG_UUf?P$s+3j zJ`l)J4k=o~^VdHUS=f?N_h0kxXuVBn9`$V@Kz4Q2pCqp8ctN3tln4b~4meh$vp_3Z~G~MQmP`rK0sPv96m|ccp#Not)eO3$b zvk(6l3WS&O53lAM8nC0YRd@X^XjB7txxxfa+6@wUi1~3a=NHVDjN)LM!gL$-cu2h* z#NkGIF548IN~J1RF|U?vr-dG;12}gn68jpYUJL12au$=VmK`|J;h$#WERcG?J7`+F zpS0R0t;S=(Pj?8Xr$0&xxMOVe6u{FC4YvTxe13OT`Fz`k5e7jl9;3ns&Ou1ZQk0J- zi5P|y3$P*s4`T`+VyS0rIXTb{W)gYklJ7tIjMQGECL0bxN zVrKjONl~2*x@Wl7!%-I3#Zedx;2`%?p5)i*yf=QwySe%ls?N?){6nh;Bs|jb z%heK{eD13{!OQH9K9a-SP2Vz(!m_&O2%XmAV54u{xX?S&L!qg?@l$w3u76x!zWSbj zNRC{h<|wgq%#AftsSe4W@MY&uv&S!NEUf_Vyk6664{_HQj9QH(<3@2Q!CADn-Xj2hKP*z z`PMv==-zI@P$!j4=c-bj3D`}OEZh{!%PE;OkanyE$+_(D0mC6e`r z&Y-_7j|_^au=V;tEFNz*%aM{m7gHFtY1Y>~wi}nOZax&=z`eyt&+^^!j(%4xB|PXk zwT4O_ZH!J#3;Q$alhkp@(`BGWDBkq^rFy55|MG#@!MctbePy3zwV?Ny|J9=cAA-o- zDDdX*cd?vc()c!nqOR?irLkXzLW5x1NRMl}xSzRE#y-I8=fcQV=@4riZ+zD-txQ{u zX*e;`DW$)V*nlrtCBwTCI}3&L%TSh;qGT)f3@)VNDVD=Z=nx#b9wZE&MWs?a2a-Lx z4PZ+1kJ``hP22npD1!`$XjmdHTd}{%mO=-q!**5hBz#*XKzHb)LkhDwzX;iZekRW% zu2J0m9z3y*c6`@`G-#|o-qAo8jZrNJ>OxskGZQ(?SI%4&4hF>jQckukC>(rgz8Q=; z02VGHBN*|1B@TUrE~2OHx)JNhf(NZLrMU*~I~uJU5aRSStXp%2KBW@+4EPgV&u-4- zA;iDw9p*l>@aA{@9{^lIqrSw#M5R^;dn%loUXvdP>o|q+PLX-QVMmaDiW4Yr(B;jc zI@@6v5#hJ6hj@Fa?_s3E#b6*7yWyln1pQgbVlav{*40GCU2kM%)Lyt+Q$HS{jWyWB zU|G8fP{J8#-u*>#9kAgFwfwG#%Ml+o!S#91xd}23GRM2Qkftn71G$wObz3Yc z(9bmain?laM^2P_nH5-c96Acus1F%T(|0@+iZtzuwb*!|08BJjJUD6rFEHp(RY5Qz z1BW7mk5suT`u7q@3_Mny9>pp!JeVcW#C~E1n~NNYDjN6uLYWqr+K)qu3yuJ$V8<(v zzVT00o$ui4!KTrh;!0qH`jS@p$W6updDk!ri8y_CrUQg?%&=l+!!&gn5K$yC_(*g? z*i0=SN)$X=b{SSN1%jMWSC#Ps$2bMi6o8XNuZkc|v?i2}Wm;e|<5mpB!Z|f(*j6uYG;9m zONEmiPG^f0BqmP}INuL6H_E0TE<6b^){Qwy)UQpEE*+bh9>`oDv?OtR6vJ*%i8t(? z4whjqjI659q1&AD2K8Qf*xy|v_Pvuhfd^Mtx<|kdR6Pyu171(72<;>uUR^66fr`I>c`@{WP@|(s~Xx8xoX3aCVHCuL>#0w0(>=0O#J_!7)S7$mDD404L zY$?#Hw?1M}WF|GvKueWVcZ#!AWRB$NElc}CEkr{Ct6!;SN7pAc7^fh5(VpP^jHDjt zJ(5c+pL&5oXQmS4C*_ne(4s3doF#FfRo;Xm&KLtN71Y4i$Uw#jXhf5?5+UZ&>KS=~ zcE~SUWJfPd17WWWX+KyZ{XmhCs%cuH;Tf6ttN|?|G4Gh--DTEs23vOD|KYEH`1udr z_kaD_gtVSOhNl$qOms;}tmh(F`wnV~(6-MA#+My+bOoP=0)@`zKCc#y@#k|DCHrzB zh11gFuhmACtM-h2D4ITmvfPAGk?J><$sZ}S7<9BQ@Cy+zX}l~U&`_4cF21zQ)^w5F z7x#*Nu+)feA}{kbQdePC#y1rT3`!#+`Yw7#SlOd5VBWI^oEXsd8Uz>ZJWLTo>`yqJ zmMq)Y7GaxnPLmB+WGJh9O08ou>gWrl6?9cMGXDkZIfIP_hGk%O_P~%g=!7*iy^|uf zITDyEdqb7p(jns}qI4q$z_EJH@^oKeD{X^>;;|-BXknb8A!=KK{URZ^F7%jJr?=I# z!u=_uSzr1;s{Qe+2K(A)kt8BXSQ4Pme~2{iVAGFdAHRp@apc=KFc~c*kISmX*YI6fEjrTCmup(+V*_JoJC)JsRu|hc$8O0+NTx(Roea7kv-YJbw_=`l;#55ugwIz(EdwWqJ)*ZX za07!M1UO@Qp!5yUYygi;%<6aL1slYtVw1RdrmVT8(89wBd^fSp#hI+&#wM1MER1DZ zWCXXKb6e*y7=(3Qfo*LO{St~4KVNiz$q&-;G)Yq(a5#fRQ$3Nu5#*?8kDTuF#8kpm zti7Y0aCWY=ZV#t?lQb{I_KcXd_!(D1Ei=Iu2NHL$G$)3H))R}#dz!X(#YY{R1Eg&J zTuK%+5k(S(&yXzs03)zGk+p2Fl0}Z4^-~XUt=Fok>-tA_Ob`#}-?OZ2y61=!6p|5W zc=T$G19&WRRgij#g0Y<e?V9f%A*bak&Z;7(W|5?YZ(=)=`y$ES0;%d2{K zB^Id_iygx9GTmnlGEdb#xf5%_$)I15{(Hj5+mq*|NVVK_$??m|3KmF238BjQ6o#N> z+Ej2uXIjY^klY8%y9>;wUpORI!bWW>2?PROA|B#ZWKU}377ZuMPWmP6ucL# z`6V0D=F-6G0iBzvt~FMC-hE%e7NZJ`(^V4NrH9yeq2syR3dDkpW}qB7mQ&6hTVzIx z^-ou7t7z%FiUj93^pQ%_xvn7=$K^g+Y%;pO9M%Yj>Q3oUX>}|*7!>~cKQsR8dP!64 zj(r8aim!-sf2z)EI0rWItm0-<|Ezt^W+w|oT3|jDyFJ9J<(wNEPTaK4)wb_iZUu3e zA*nViNf4(_Bqj`GRs_*V@x8?bM05i_GaW~Iz^}C8PGHcvQw2eJoGcJs6?hE3VB1%< ze_dTp2*v;|jYS4uYF#in2f}r-?kkA(=`}#BqQ!Yp=2gbQNRHS{TlLGPpdv-=LLMqf>b1i zovCkesvAqn8fUP14~AYO1O_!O40^7!6&e(dbcc&ddqOL;v_dp&Ri%r`7|Oz6jI#j( zM2oh4&Sh#AU8gU#Vk7rMu=hp_#S#{}_G2QM6`6H38K~f;gukhCS0dHC`$?j=P}Ab9 zgs!wkzDa~vQ`Iev7NcHB~IB3-EAi9fc>?q5C(a{zG=RIK5-}MSz_l2|Jbku!U9FDLCgpKEs zO?qxzV*O8Ci+R z@|HomPaJ*AGQF2pdIs|{Z%4231Q0R&;^U}#ll$9xt7+09`4$?5S{;!dw-G0>@nF$O zj;@4{*Els}!PvgY3M{R_io_Lsis<&YR}zH}2XXz}L2mm31&>DEH@O60kqu`ty{}vn z8Sm87!`*{v#WcI+o{49cb$dEz(mMsbA`x+u1~?A$wWj4R%ue>*->*f2$9__8fszw92QIa;)%jEjk&ElB8Vg44s|3|ZIpYBsQ-bj>ZX7XZ`Q0~fXsqC6d0CjYR{YxEjw!rX%a-dLPtZ5 zolNV4bF#?}je5nhv@g^`)MxJ7Lv}=%BhLM8j86a_gVMVwn9U)Px_U43Rd}~46bN=s zZ@grpP2q=>u1g%2s)(He6BQ|*re0`n1SEe&qyzDLJ5>cg0R%qK_=^$h9!M+2gXPTc zMfr5WFIgj%L|$tK_`Xz1EpY07D)itSX|J-ASOT9l{iAu)y@Bev+|8B)ZxoHB5gB?F z30oLgM2n^fG+KH%GSA{|aadssilbVb+omUXVkf1ni(E(cmD1^J9zg-z|+6UX0x7_92tqLuzT>&%BuCT49C9 zfY5ZNEKb$7rB3E3Yd#hxJ!!vC`jJvgnoqQ~bHv`{{Ea8)D%lQz-?L2;nx8Vj?Eta-s0TSWN_Wg`f?LnK^i6YeC#J` zj@NX?Hi4KTumM7ZNN+;4y7>Su(L0_g@zh~QT~cvFW(5|D4j$R?XFbv6gqg$`#ViLA z2Ekfjba=i*=s;}c5WVkoMnKOp6Y?aq0N}~2{%Ycbk+^U@+9|2}o>r@Y9~Dnhlb+X! z#cZ>X)Jp#~4VTTh^VqneQ<<-S{s*S=8+4FsQ&q#j$f7k>PQypf{?(cDr<;n7&v zb=mr<%rAvZos3b;bk_YqE7>ErtQ=89ygmLAEvCO-7boiH=ppagyrh1f78d#DOmEgL z4JjTd`(DxIB93n!M>SW}*wW+ptZdHY=aBW%xrG`n4p*pZv&&Dks!mRvha7C`c>zua zv+frpbAoAlvdXigvc?%~5m>w@NScI0E>3NMxJ=##{)R5DBKhrAFe?4+H}RXQNPj~W zBkIkHl7j`j!WprMS%o1?TI_-27ip0zPH*itN7S+~F1y)FAUFjLZ*U!aTdUPfr`?*w zO^V#w&=&a8RvC`wAioxCK^m|n)U9N@PD+kH%%UU`8Ghl{AKtVyT7*PmE4K8-I3byb z`}}0{DRodpeX{wChCrnJh8trv z!}Y@6gmylYz0%OfKB=}__O0zZ<2!{Foy30sN%NA^^64l=Z;7p-xaa@Ua%dR!;14*3 zO^41u1WBXVI7IzK9BU2ub*+=@=FiiSy% zdZn-OB~b+nak^^$+2;9c9wxz!W z{hQGw^`*R$vhaSPE46$_fU|4AYM!OKKLd4&?cSwP^0tkX~Q?pLxn7gF_;CBon~MHCgcDX!wx z%;5(A=N9fT2}ddPdXc6*sg)Xahf8Hkssc|v=crvep@y$(4{)Wos%SEVIQKhC;w|O+ zTWpGX3!)XyrZSJjH$xw-?!h@uP+0FC*aUD*D=s8Y2a_15py|AeT{Dvm!QT=6HuTMO zQY*IT%#spc+)W?Pn}EK%=N#wa=ZYOX?$mRwy{?4T8Vy1&?<%-z7o1JrVu=R9WqXio zgjF|^;J>abp^;~m?{Un7sBCvsu2B){DnC#+8e|3LJwD`?X-t>iRB9E=VJF^?=>2dY z>9ZxMyf5a03pnL$a_!As&@7zhbD#@Tyv7PGJD%A%fRxY(T)3f?db_5Hw2T*5Vl7B- z_#xkAX-i81rkIG8$xY<~;f3l$h4W1eA;P7O?ZMtbO}c;3ulf`EjeS|g}~!{qFLweTyud#L!_%g79xa~zIgnS6_T_Mq*AJ$&AV6Xc6coo8nt_2&uD#t zPz*mJz&t`dxa77teT}6myjLiBq!8@%*L#@4t0TPe&R5<+m!`t>aF?^|nqs{~!3&w= zZE^%7LBIi=@jFI9BjnOS9QtEUYXeYBsB(lnB%4i{r@V9!+OHx4Kyn8#9pDJAprzHB z_pWwXjr_00O{o>)Jd3nk=Fbr>io)_6v>pV2Xh_Ye8k;Ql*E`;Lv1v^o^`HzYx^u9KGq?G5|VKTTe z`gz^g(sAZBQjTN$ptu$}xXg9oyO_}gUZM}+Oy0ACoMK-Q;RKOV62=?_q9D_9?ONzQ z@F|VNb|$>e&=q9urf}!HfynT*`sSox61`7p7qxFOUCz3n*(aBMcM>#v!Qsk_?A#vi z=q{|28fKGO_rv~DmK6>SHd*~bKccu6DSS?^=@0wt*Z&J!IG}PSR5_N@9e%~p>C;3> zjBrDNV(HHRgVR`lzQ8fzKLc72@bwN52~xJxsxHO`QY}S&sD{e35P7B<4b4%T!|Cur zxClINP$YS;J{R!ZZ`g5PxKvq%jVGKqU5~AV3_|WMV2Aqk@##`la$s<7R}!H;C-M50 zn9D5(wDQIw<{xOVE?z5`(f<_C3L4G2ANPMqPHjW44ZUMO2DC!x`rrK_2rKZ1en^2O zEQx-iVdixH15GRPHSak56wm@2!#;ufm_N{}U*72NJQ+Y%ZvkdY@8uJC0hxL}=>GTz z8hXVyo?gO`GmwVYgTnxIWHPoN1I}O)VsBej9D$GjnrbOadwiq3=vGS9lfg(AC+;ZR zyJ%Lysf(N=s};h7?&$3onn?p#I?2#FRwR9M*$`ZP1pN?rCT{qm zU)9wSqnr8W>s7s2OCju$B^%`|>@XmG#${9*3ANA^yH^%4$F(&?B8eMc(H{b*k?t;d z6z-K3$8GE06)%s(R&ac4`|ak&n=8W8{p4j|G*3u0!;^o{DQc#HX9Ap@MPDP?l#(R- z3{U8+&LJd9don99XDza(sJ%IZ173mi0c%2+%!^=Sk--r_c#~I1YsDeI*08{3Q6%ZX z(+A;G`Y;>s56w&(c}EjyCUTiI(DXu3jx`vqTB@3+oZdQF_`bO^L6@pRzJ>GUlpE6V z3ZxY9iNS{ww2s4ea70XrZRdFdPTWQfQaxUF2MMIcUb!kydkQN$ z^$?w-mO&vWGC1{|+;^QYW##TwkN)_mT>CYzOhc{KfzS@8VpD7`hl)>BWY3uu1RkrM2Fj3^Q5+PHe1%RwT&+z=(nQgOjp;a@X#_;q&$g~6ER5OzpqZrsD zQ{yF@N`kMSn243>P300{(+gRG2vyjY_Hss(cQ}6FDd)D^6H1~R#Tf|Rk_sWtjC#$T zcI32Hk07EtW+Pe&Z}MzKOBN#duc^kWLXU6}t&j?s&%2tUq@c>6ImVI(%-48{Em7y2>n7scThtt=G|X@{onO@Pt60fqrEnhs@nXf3NF-i zSN|J(+@M+}B4wN3QX&W9A9*>jqI>nM0>{Jd-!rlNsDJ&hgJ-IP zK_*kN*{XIKHK`bDDXoa9MiGQ*&{6$4AP9Md(kuQAT+XWP8L>Q80j-F|sQacy*yW#o z{TH=fy)iZyPGQSo_cwYo4|w7J*2-T~jk>=T`Em8@f32T{G8f!HS>?BsGfkevJGXmB zi5k-k4)2aO!obCxV+^#AKvoi;l3E&^V+2I6TKE00|C?sLS=;2t?)%n}eZZTD_AS6@ z0c#@aVUTtH*qs8}5KFiX))@_+)X%{)PI%8Ma6C|;JH`;+vjUv)#`Kw!kvPAjTXAs+ zN+T4!&cn1NA_#be(#Q1uum8p0;`db^e3PuHZYk(nkvT5RqR%$tHAX?pMW;DNE%b-- zjujwck<%lttIwCTXewHCAg-&40*S$=U7Q!Yi&9}b*h1~gxGi0LFNh+E!IwASdLm>V zjaP+xdZ}tL8Fv49*})*4p7DPcMyYnTq`nV^)wGt&nA|I^0EAl>1MO9jVGCO+RWFe& zk0*co3(YEYBU70W!?6SJL6$TE{M&_ks}(Y2{99oZYlnl;gdwFI`+uBBE8**$Rv zihL&(@47lcVgki3$H;|(o~?D~P# zEzbIO;_@ndqP!x<14+n1OB7z-A%jz~s%Rbw;#z9ObP&?S&OdegkTKAlJ_(#Rm2Iwv z=;u5ZZS8oA;MCcMb^a-=^G^;m@9?eXCwlGEKYBX(qakLqE-P_@*Bp|+dUELWi;lzo zrY@Q^iU+}@2?K*9n01z={&k8u&1TLSeWEp=;c-?WHKT$exux)B|NDR41Uyvo%dW`* zuQOy9W+GuKR;IVLScvnwApNrv$)BBW+Wq~PV)c?;^sgzFaP&ITdh>r&$DA!7&op1= z^a?CbujNt_vq8+-{#@joY4=PcL?Gbg>Y2^FhwyIuhf@YP(+?2^5B1nvXI${YjiW#i8A-*8pmC- zhw%W-i(^P~3!?SW#8LxrS%NC0#yo~XCzB%B{5`^_fO_f_A*6R$Sf8CN31nJgIEcQ- zPvQ6YDFiujdLNU$3mSKl?v;blz#Wnk#2RNPWaL3^5?V_G13D4f5Yz7GuRl@OK>z;H z31QiPT1)WpH0{?z5=G~#F>#9zR15BNTNrX|%a=<+jbw){kd%EB{#}?xzk2Oi8(&8hx z-r@^Y|7@cVXd}6#I$JouG z8;8k9@Z(K*qd}0D1NM<;Z1lj8N8-DcT)5WF2Itl~nW(Zba> zwpt(fvoFN#Nmh>Qllqr>OBHYSeGTM*Y@-kWz-GFQtA&C5Ja+NfL_s@bp3a zJi3R!g!k|l2U>Lh{XbKVTTH#AOihea$YjKB_4ELq5vM2pI%1Qr@8IsirbzvBq)sON z2Yr_a>X=J1=rtbOP2H2~`ZXjsQD0ue z47rK8Q(f}gsv8eG>gVG=f(17|`2~IQhb-Mw7q}xL5hB#xQ7y&)ut0{@RV%^e*jq7_ zC>UwA;5W*X=%U&4+?CO>$l&8}cai;k>62kLZ{lau(^&=4_GCi;H!UWOaak|6VvFtv zniC-aIo@JSPGB2|bD`UED~JGhVqFbG0vxJy`Y;xS5{1(w^oJ~`>NINAGrig{9KIzi z-Y)b`DP%OE-kw%2!D+1*M2ns!eW?L94{`b=N5j#q`=NsG;|_DagkQ%Cn?2qTTjw-F zM5mvyWG^1> z1`-2vBnR9eg2+i$glA4@BdozDrjS5FYPw|LNGL@x3;P78e|#hj2PZidyS%8HTjF0T zYaD#~KOv4K@?6tOW}nx27Dx(}D4OPt-&8bxrZ%QE6qa(C3POp3aYSg~0Oi!du!PGQ&dSeYXp-;NxbX@csKpUxm`J($S zJJ;0)c0@?mwMIHecnHBS;;?Ja5=7=cDEA<#b3(uMJ6Z|ss)RbWRo)am)_xrpr|i&{ zH1)_!;ELn_7dK?Cz#>#4VKsfaHT8C!LN->I+=|kdB&mCvQ&nFVzom?;Skl1u z35Tv5g!*Y5U2JUVBFH3!B*o#tMpYq{gwD{4mc6vjhjBSgB5CO=8AOGDb-W^xw7W#C zT7)@j4$K&BkOik`PV?tZe)y$m=*#89rd@WRKAY2#n{)DAwR21k zs!8wRese7!xf$^g=x3NC*{!5=)5(wz@K1ZW1gN04;Q(uv8Y7vQJhDY%X#WTdQXt62 z339n%`fGfm{5A4zAk8|m@+os$%)*2-stKG5&F~;Qk;ZR+8Ee29Zx^OwQEI;)qF7>Z zU8cjI8I}y53;-(J-vwlEBNlA)1Y5o5Y{$u{ls8s^qhZG(nfSDQQ}EUcJ8WU|#cBEq zD~#={^S=MfS$6ZM!$hTc<{&#Xk|?1%?AqstJou>TJ?U3KqcD;topTy`osJ~2K*6(d z_d|iWX_@4#rg?<&#$Ex_w}J4jv>X*ag@tNI!y(PF3hW?dIW>}}9bz%CFg}|Ku{aM^ zyFxrdFRZ*!%8YUFgB1uuRW?O!{+q|_NRtz2U^LOwxWdy}_j7T+AkaM;UZ)L_C_B5E z!~_;vD?Gh5b*L3TcnPn2)C}`Cv|F#dQ%TateR(AxycL*Em&huK$VU9v6ic{ZuV^y= z%t7DVl~Sgj!?}>I_S2`Y|4qqe?Os+`EPpK#=%`Q09A(-`_m{7~Prt^$UpwJc4?=O0 zbKs0H?o7uk(w;^OkEY!@gTF>wHx=*Y@ZRrQqIQA&CSA9%`O&boYD! z1I`!)O$OqhO>@glj*)p+Y9yHSN@ztSaEpc+=dd9NdB4xO4@DAN1cbe(v`XgY->rdd z)W_R6gDoC{O$VCZSYn7?B*(Ea1{!N7E6wT5OpxE1AhSt_C^a-CTT`Q0`fwIS5{1vz z7rJgax;g(<6|xSq55=}@(Fd%n(?ukqK*2P5kvWjWzq9F&;|w-cm@F_2<~W1R)UNV) zY~}tjJR2jR8O>5T9aiOnGoYIfC2pM?fYU(tF!=4NCDk=-ekyE7=#EGp3k*EbAo8_N zYdOAr9nEoPgQG^>)!bYhT`7_nd|_V+CPvsy)$hcy3LNS?R;~2|QA*V`a*92n zc00^OT@ZW@{`lQrY0-Y>zd!u_=TJj4ms^@e_d<)7bF#{g8zGtMsna{^B|Bb(+ab*N zc1I8-xofF`Quvi{WDe>{8WzP8g(K$=&FQzAi$ELz1I}RfUeinbESdbkI!eyevgs?_mnUFN$LnG#hAsbsDO3pQt@x4LIT2HaSNsqz8S%V%!)5 zO#@p#?1?&aKes_jAo0ZIgYd$?a1n3Ng$wAF*Y+j_oWYj%5^phA*9(WN0_OtEKewCA zJ_*k#Xd$m|C3{@x@7H1bFC=0IP05f;LfBe-hu_<|zAW{}+ zBMmTo55PX}X(n;dPKX^{`-d|hsDb_(d)m}eV2n1%R3I4lXp+v1(F#F+=?k1C8}V(u zR7M(rTE5u8Gv`@%Cy5O>gN?BS>pvV0-+bf2U>nFRt&jM^_$)avzlKmnS0z#@@_`Z$ z78tQ@R)$=%=jy~+^Fjgh1|4-gF-fau4OJ$*XB9{bi>I8EW71;*70e>%<5^cUm2Rtm zRLazIwb18$0!%i3c{m?0_2q{DppZ(78Zipo=$<_eWr|=U4^8C8nSslDr^D z0Fy5kE`Zcanj$01TlY2o@xttu@ayzXec_ld3tJJf?nPoIni=P%^k{)Hy;52o*yh26 zG(X;|Ks5JDPo*KAvo*(sWzI1M;?!6PvYpZ2l^Y5cgIQO#G}6*45(NKM)ewiR`T8j( zxlkZfIo7Mfy8d$BAN0Bbt3Vo6zrzVOErNdizY;tpDo^Xv^id5&`)dW4!;#3{{FE}GOokaUp*QkCP9D*!p&HQhFN`J(^KRV%D%O%Gg0ZofWZTr1xGFNq99an^HLjk70 zsh;-ts^|)se(4SU#)=TG|Lfz1Gle97%2xHo1tvFf8jG#mNIka^!jo2VW{oYBErt z1W4ZmXkE0R=hZqb63dd8{)opx6M&8EWa|#2`LQrI0XBIT+q**Y|DP*xspNOQ!fd9d zbku(7nVwF@lano*3c{)dUZqX$L2qDgRGIufRnCWETuUSO+HZuhD3Ta_6vHE=15G;) zKJf?nPF}Ux)+~VOdqAxlM$@OVIKy;#{e&HtqkKkX7J(E{jmxW5g0P+Haf=G$Q1w zs%7eib3>yIGVU<5FJK?e#B1(uWwA83VK;3MKAuHPk+q}X2pl#44XRkmCe1cG6t;Wq zXoJjbLxnqlU{BEV23^Q}T@HSAS>+f34F?OCfsh&wA^0^tp>hUWcIy&Ltcs7&+)1Ly z(nzR9kg*sZ-s-O0u={uDy9^J~?(ej&IffydS zz#sZI7EfX+ErBH5UQ(@Tj&p`rRkcYZ1;DP`-d6<`1fcXw%4ff+f+@91gN4`e^#ZF3 z=8RF$eAL;|I=%JVT7%=7ED%|Nu`ht_5JbRKUReW9Jdkrz`7>M<$5Jacb$SE=3eRa> zb$!Kk(d2_=N3<}|C}$eY42wx>CKINS)C!H99+MG{8ioybD-#N>$k-RL+`~ZuC-U&> zhW4=n58)@W8Fp%XaCG@xorzym&>}27XJGHprwa^Jk7>cr4Ty;koi$0Lwmrdk?m7 znbSBX9TK+F43b!Qw}?5`8vt*m^-fjm->;?*-P98MJ;fp84!mSqNdX{O>pI)!Y1XD? zR-BnhvNmBR!uhb3?{}U)T6AQ_?MR!_k9WzjxJkeYuIpk z_tjA1omO%BOrufunxz?cf@tKUNJ4>v=L1RnlUB7jWC`mygN?hdk#6OXMRRYH^#@?M zXLB!=X8QMQr&*|ErGLM1nx#tC`uCG*^cZ&o!4 zziNpXais|!;dD5YL)#M~2#Rq)Cr9t=>QL#1zzj_z!}%r^KyRa zvq;mvR7=s^&zn+us&8Z2(`e!8z;;^t>rdN&xxFrhbFm@B41x6~3q@976pxWf)MbZxx*?#yU+Yel0KJ4mT z0*Od~n7TM&@s(;&UPLch?=yBg&enRkd;_1{$J>=g-H$(~KYaR;{@~wGoLr0Np`ln{ zCT0NL0bN%I(lt$?yPy$oP@3Nqh-G-b)NF_^tm6ze@BS@+rOEQv&nZ-Jz0RL4Wzys_ zs&OWWfHRnElS*S)ro@0V*jyuC>qI^8!fCr*bk5UR%|!T|?+}mzdkQ{jVIb5ZLoxcr zbXPKYscjwvsgoFZ;dJ83Mhij*b`k?GosK7N5!gu-JQ_HiraSRi6Bu;pRK?Xz6up}m zjhs$4Bf^TE#K2>x<806YRCxnVoaRJbE;hm((gX^niMJ#LOh0AE3@N59Nuc8uIT<{R zM1&k_KV+9#vqd+K9G&Y=UlA8#lO4`12UF`GEq}^a*Vd7Y7#ire-@Bfkhb%#HH{c~UZ=U6SANusImqdo1$)4wdRF&*idE#CZ^?xi~-nq15QmNx$5D3QE*-dE6|r)!I>d~ z0K`_NACs8o;YeuFocX!YOxT;FC949_lXr}j}#iSxdz@Pw(VfTbQ3MQrl|s6W17rpU4g{FQ`H?2v>$QDXd=Es z2&}>vyQ#AZX1)S7D~62~!k%TX$Z_E7xT&^k=G~tJ_#<^`TBdfr+hV#fJ?Hv1#IE-1 zKo~Mw9qsDkDgmtscqCkE+&?WAWzpva%HMz{??7n+k=44rwJ%PmwwCZ`b=DKzDv&-> z0ukEVl^Srcb6sG|LF$o2CH>lGcuh{(nN!=v3NN>!G8KJB{KxFbW}QkJV9`|vL;0ky$<3%fGK+L8AZ@?*QayiftlraWjXOEY>*zM0| zk;fP9i44x0xndxiHS9BF1+IiqkyMRAKUC;rWtQq8*kT7k_QhHk!jIG=IRx7j&AK?j zr<@u}j>RI8z?Xw@_f5Xu!_VW{S#p}>CARHU^ixmw2>Ow_|9`~&%aR+(k}V4UiqEQQ z;JX5EU>GDblRP__n?(Ylk z91aA6$t|6d4CrH-`P)p*Oigvxkd;KEZ$$fYlvDTm&Fk_DoX%W9;s2>_*VH2$?pUwU zQ2T%eA~+w11?c(~_z(-(7O)_WS3pX-hAs8-*xi%^piJ%|V-B8)p~!Z&DY>c#Er*omo~2o1@|i z$Y!f)7?5*1>l(DCwyqtb*Zhy;s;sf`hT5n93}{32pF_Zm!V*|{7Gy!hopBbZ*jR3D z=RmVI*r8N!Q;|y_xj1|w96O%7$F-0(_4Y0$ZoFjHe_-Gl16&e`eIjjwn4-3Q^**m|2zf( z=8F7VnMl$V`JNyMc!Lfs2qoWXIUR{v83ZQ9OHgt1JEOx$}L2SpKK zN1zlcg58`8EKri^dOD~xEeQhNpo1p+TBL5@2sqCehyxxWAWhJQn<$Vd99F9&CH0@R z?2l-ls3D&R>Q?3xnOFLN9c_@Azvx4`jV{`Fh0c2F0I=^a?DUVdK55JG1_ZS}W?$G$`V{c)-@=Y@;sP zENu(55Vi=?sK(C<*q$bqrfsQ~8p6R0V>z;m=EuXSvi%?|Z3|n4k{1=i`5h5~zFu(H zr$tik;laai2A;qv0CelEDsjn|xErLWksJc(A21s`5BL8*hw__(U8U)>_#a*A4?orP zA9Akg4?EfPA97Pw_mve- zd6HqtATvdJrm(VPH5{<8=F&uGl_Yi%`MKB%PO$d~C!IZEm7zY?NtHir@~9^P2_-dPhvgmQr!dwQ&LcC1gzd5xV|5=RQEPK_1U zNG?y=3JZhSfS&P$Th=MJpun!+4=Q(SvE+M?*Dm;cIo>(qqsJsq#i7bEV~*^jV$gK~ zLcLbi8#fgu#uH6%O5+uEU#JrHqG3Ot2+;x1%KCQ-MIi1gHL?0~H6xBpS=5izsqo4+ z4JnN=$RLCy+hX$=;Y4EK;Tf2Y`Gpffx67EqijFxmVp%MM?rN9s*A+JsZq8Ui=~a-{ ziGVNMs$SeBa8Vt!y4R{%{Fqu^a588Xd0gc-Qzc*EuK7j8XHqMM7|SwTv*-!)qB^Xp zH{gIjs!TeSQpc!|OfWn4Fhm=4teUqmYq)W9zgd;LzaKFn!{no%nhDicw2z(2$&Km3sd;**BXo|pTKxT(3-4J0A{X%>6rJd0!McU zErh`HdkgecPZUIffTn5%6%ZGPI3DRIOGOS)BY^U7)Wmhl1zGGScVxJ*V}gZ@MsmI|;PV7=Yn;N6j*VW|Dp_ZoG?*Es4Kiw8uj$Uf_vx+vdevKm zFYZ#w%SskQrKf150;pHk6U?fb{ThWePGQp--Suq6k!P6l8Pljm7&TuC4(?aLj{~%l zF(A1J7!R8Nqxe?r*PPOLQSopSqEky`_@T%Das1;r55UR`a)6!E=4*j8WhGoWokxaA z1U%$0-t1E$zjpJ71DPl#lY$rb`BzoLX+uNQD$Tzlnj|&N;2fi%@wB0_CYf1B8V6L! zH9(`1kX77dqOKI1?5liW>}BCNfnm>%&f7{(9htWc^6L$R-%5!pE%`Weng2`ywYwoFi&d8cJ zLRI6Q#`WZ#vvO^YR>)8nBp|njdPh6m>^^O4sKc-&b~;bP^umbnl(aGr{$L& zecMb6*#aaN0TUX;Z}JR1(xOb2QYGD)FSwl&)(~Wx1tAV6@GM4{*FB9Ro@B`bNIC#;CaTR zP_a6>pq_}Yc*+^)WRDH_fHmNtp}u|(B@;Z1X(^KnT3#%x=O<3>!tc|E7O%*eE>g0i zFxDKs$M9r|uq631t0d4PlRnVnWICQSUox^678^2Nm=sFXvz`o%yio-%wyLIgy;1Wa zt2jn18aW|UM_2KxJg%~0hiJrEo`tLpLZ>~df^*wc>td&AZG<%aSoLsNKNvz8#SBKg z3#H^e_oXBem8kQfM8Q)r7U>P!R|Pd<5=cB`4LEJ?AFwus_&fP2p$nvrI*?^fCMD4A zs0$n{2kusx6Xpz*Tm}t?4Td-fO!8&Nq)?(pc5?J2$aI|TEFtD;lNhV89u23qnq7zU zfs!f|?AHN!a@Tz2S*))o?rQ_aAhU_}`&;ezw}DEng|-SCLhlc2Y9u%kKgfCJgYt*^ z$7}leMg8!Z`iHlc@6?Y5>>jniW*gaG=ST%mk1R`c%R=%53hTHQEV&LN8~F7)Cu4wv zjPkE(rntwejQ_6e?WYkH-SKZ^Vo2u5itM-*V&P%el+&Ckq%cCWt2u_e*Ge;~0J20B zpqYJ@HLeX)dHxJ6y^f=Mg;m8uBlx>l5IriU59EGxYT~aay6z1e3@$&D~7n0>jKgURXTD7D|EVn>tblguR zOohFdC*BlqiAII@tOBXe;;d^3k^IRB(amV&ubH^Se9pdp0ifuVxY1Py~gZz zBtLmMmz*Jjnnl@^^dY(96BBeok%#0aZ1OC4de`vChP_lyLJQdfBo_fatw9o&3!}6` zW<74%c?W&5wT51{<_j-CjH=dTn57R@hTuX(3Kgr9ZZ-SS@CU_qI0v$ZaSl-=Q8*28 z{zta>J9hLoe;6S;M3`BSt-8-1^>^Vk2o*`q)}iL#{7^g1w8=S=)scrLIl@;R{U~KN z=uyi_-Og%w=V^tgS7Xsm7gC&O3z?0uA*(uZu>Au4V#1VD8l&tBxYi$zp0vtgYW#d$(73nxxuoXTRuxq7 ztwVuLlgI5A6Dd5EtIRh)uRBBfiHCesW09;_fLt1FfB|x<-7vKnuUH*(c}(X7ud6dKW=<0c;v;<6y~sG8xZ*&z}WuT4CpMZj>PDppa`@+#28Y2Z*c7wrq6* zRc_sU8MM9Tub5eF9{I0I5x%OZF&hVeU%v6ghpYn0l4bj&kT<3@O4I{-Cus1M<7K8_ zd#6bOYa(Cr99q6yZrn8w=)rziqkYXK1S%7%qv7rzDQ%wcl`)wLsrug3)#%Cu9}s>`v6mn9v-S`o;Ks@0}{bE+p z8^Mgy3KD;_{wQy*@$~UQm@NB4P}*0jTIb{xz&fPve9`~1y2!Cg=%^- zYo5!)+^lii(!IZ94%k~BIDl3roh0*~RUjG~-o%H|A{mhM5vaiP21R&-O}RzOh9416 zs5?6%3RcPs_t+7Viy+_?I^xV%%WP3#*-c0neGmG6py#LJF~LJZXbZ#&IAS%VUKe}f z0>(gN4{`vfoLo`Prp=PZfknpWMYh*V_>QMc~6 z=qT5_>-Qxy7D822j<(F?K{;A!e$hs|eoF@!Zel`a- z?jfr(@3PykF}t>Ql&G=yWQX@+&W;fv)4B7J@cK(?_O02R_B(M01f^>z*kL(tIL}C` z;cl>Z6TD{yh#VdZtn{bzW4#tKVX~#aq=r?tJ5YyQ)?_LeW!foet89+sUPhU2#yT1V zEU?z;NKyCU29d$#B_U0fJd_pk^xdCH3=NyHsv$1C1E6SeE4?)FLB}y}MX% zWYAQ=tg%kLkHiuP_DIj2vo969zaKLT{y}OQwf{sN4V>e%%!in-nh>z z+tdx<5XeN6=T-@FhJV6M&64-UhWeJO!ssJ;U2fUWG&Ais)GnOX*HT}_-Bb$=Fn=j_ zkE=3y#VIs{vsj5-Qfr=|~=arnn4m&`MS164bko&WF{qfyvm0=B* zEU)qriQFEAWXjaDK%LZx6Sejz6DXMM8X0HK%P&IBb-Ia^LwZfA`z=c{IWQH;G?NM# z(V>pJKXMvd3Gq}G=epCG4&TJFqC0~>DkIDM&HdYEnc2Bv7WqxK&FaUb!n?B!XhRGQ zA+v*qQO-~!MXB24bnPUl^G*6ducD9-HXi81i~CImAH2*pR73i3mvr~2%}s5qh2CXp;Sp`$}*!9TW60>M5nvX{tDS&L)qK=mJHL2n~aQT z{_CaiMQlmQ)Oo`mOsK&Pv`OAq`D1o69h0UXsJ_N-WkV=qn4w{g0pu7U$h3S@WGiX` z;ClUzZM7o*g3dL0RaVs5V%@)PmL60@pm_k&Iwy40VtFD9n~KS=X+|W;CEhF%F4!!o zrgzu_l9H5nnj}n!ZgMw8EEVhzNqAQ&895Q3nbp(BkmyZ`H=}fK#-u-Mu!)vMAkt7d zxVxt8Us2*EBohQfmC9x!Sh_@5p;$O%KEvO_oh$X7pAHq8tL3OLaqhLw^CNV9PO&KjC6XmBf@d5B5s7zNSDUO_Yr z6@ZOLNjVhJrhrXb=OOpaS22oE=0xm~!9bDFc2+b3E)D@W;1xO%=w3X995mt;I_pD& zwC31k=IG2d*~pOQ5sOm*S)3eZ#s@r5r^!bWf|Y~2yF0Jk>OnkXAifto>JILN@Zo(> zWE!h(fj(2~I5>VDpmK+pqOv(PlJI1&a-&o|#Eo2FKc*k?dqI4#;UL83AHfNT6VOu@{>RYqb1hiZM?=Zr}neMCDWy zr}9a5Va{&0+Lx0ii8FOiJVCA-O)enZEsB5V^ zb+iFS4A^hVlYXXYz!_-lKpxtA$IvKY-&xkjS3_J%{N#xd%i_6}y@&MuwHFyrd_wy?v2ItZ}rU7T5(Ji2{fXeEifU);r*wee?yi8< zRXm_Ab)*5t0l-!<9V}YbBrqFb^ho%FmtR#4`l8zAmA3qzR*1A)#jf7Vn`)G)2Z36v z@Qi`R3gUf=jBq;^p`NPDxiI+~9E;-{&E?V`RPftP1!w1HnxB_(_jjZ>?!w)f7sFKT4$dhmQV}8@oB=E~93W$s zQq#n*8K~U9Wm9PJC09jwXPqRzH`7Uk&LgBd;*?*;ZJy(5`9~Eqev!7tN=H>jnR@8e zdK!)v2x4d<9(ed%9Oq7e?BNJywRvPzXP+B{J^M;j`QH0X3x@{r^+!yB}%4D*}JC1jj4(i zYl@W<<91YK`M`4gielKqIa1?0FZ2sh+PxIR-ZVhituj=2w~+b|o7S>w#UHa0s+3L# zE?PVVqJ%03ch{8sO4Y}?AC3f!fu#E5e$S3CN~m&pcTFi-YUTqr0xoU_K93tV z7Efc@Xtau@Q;y_h7pKD!bA5aj#xQ1x?QOqeA48QT^_OCYFwbX#;v%@X4DR=P&HD^7 zsyM3Bu3Y9JpRhoo6NVxMz!ovUJt_JD^_81)x2mzXGGDR}2>2uv#L)B>EVWW0Ho_T( zKDf57ch;@2 z`RC!dhoacgjqI&HRb?!5$ttM;_Ab$vv*XO^ya!tFhjm*f1(1^D)4r(aNp7;F+!U*l z7YNUUBIQCOEYnIX;wS~x1#s$FwWZe9AVuyMxwDZ1(16*F|^J~jfQ%F(FyZlxj*5yOCI%3Y8 z-nxvQdeJS_Z)P;O8#i>vkgB&_tf>!zd&6$I$wk^0N+G;If1?lZGn!j!wTMoQju7eL zGGaDr;K!C#OR~M_3sEK!PC#Qak~u5}w%cSpY~Hv~8EH!>MX+4*w;HiYk^6;C5`LeX zBCodPZb_GYu5&7_fV$UxwknqyKRY4A=Qtztl6u@~vqj;9(1|h(8Q&o!IAS;8(7R-n z?8^go=^VGA_?JK|sM?y$`{2!(p9wNi7B)w^^zaf1--NR*Jl5gh_@PT zZwyPd38GLZG)OF0h`M4)SR@|NRfvm8bfvm90^eF4H5<*oI2^L(1OHViS?M3hq&i{i zbD^Zr0vM5vPEzcOpl)&RDAm%JwBO~&EhieLSHvQ%u`CivfpHJn(b!El3AVTKosYy( z3)WH0wR$frmfTiugzRwirtRQ1nOCcmvWc;Zn-16|iqrFO8pdS5rkCChaO#rBMI9o2 zY02{Yi#o*jAM@6dlU@(r5=h2-K&!u(m+eGj;$z*VDRv8Ms4o>RZYvCT)N*$~K$;rk zZS3sC;yirgSkWPuqU;M=71)!T)cXzE62uxlR2DJxg3<*Fr7FflP8fWwO2qQV{=2I5 zjDQg9-~(b`*9cdgu|KoXjF@1VW`9Czp@U?6^C~)LXtxjS&p80C2jmB;&2r z^)_Tr=2kwDIjwqe%%xKjI_#k)eV%+iAki3afiEnJMkp-3*h<0AYG*MiJ1e-L@2Cq= zWau_jbkUtPb!t2688#o+mg?x^It;5xTI#Mpt`Xyq`j}+CIUUy2W40vYq!@S0O`M@^Gxl_@I{pjstCZY6>Yj8BF0*hN!AMtzrgNEc15O z1kRVAuy;lxui~Cm*s~6o_s9HHq}10UPDXJRr1=dA_lj(nafHEoSyptDiY~F;_1SdP3ygm>`Bi&Fz(PMBm`$na`kw`!B8_d4 zeRhYl_@6up6iR@e@Xju7O>NJBF@2bXl4h}G9 zXcbDC;nrIkz#?Ypgg;F-pWTF4CKlEq=e57vHE0;NNfB z7fkwaG`QdHkH~BYW7g3Iz%X8-UGB==g^3N;?&%K{PZg11&Kgsud;c8cypMj**Ol0&A=OOLYjpH ztA&p|H9Ta}aMVlRCYk*NTR{=2iYg|9*FpVe@K@u-eHU9qFre>1ajF z=yFO#d4$9H0%4eU9Fz;9SSAJFaQ6zENKOmPrU_XuY-Vl3zIGmvz#XunSG<-zCs|nH zTxnH|!z$Lfgo`D^Au1ipt>7dqxIkXH3NJ%Y$_cs10EY1EY`Z_fRUWTQ@*v@6UyCuBsgj!qX16F|}B!Ju?qS8EH z(-$8y`V>cZ0}M^baOS{BC9DAV!Hi(y{zQ#AmY6X$3lluz%@-N5Er-p2AXe!keY2SU zvGKQb5}hjFJB%h%e9oF(l}_SgQ9mX>^N1w*bgXDdykWP<R3{F_-KL*ZAfAKU;po9L1y41$FgQg?gR=R_X05DT1ivr;9g_} zhQ5GF3a)l^4>E*$w<4^2?yX=&pIojXV2o=E^(@W0+pEb{HjraQgmL zJw2r6SNik|9!BKVp{TL0){+Q#Hb$&;?0-m+8iWISGV3^jO?r3Do8Rse2_v5FsgdF- z7cX-nD=^h4RGfwjL8vUw8!7v}MsjA*fInXfEu;ZP4GqHA$ZAc$>Dtm;Lp8QEbxUz* zKxB3nc;29s=Ha+oqByoVFk`eqX3s(fJ=r|H&%S7YfZWjr;VtIHZb{}l2ct=iHUJOd z=+0s58Im)AQQ9Cwg*=s;16;3|GsZw;*>R68MJpVNx8oaUpb3ZQ!E@f`N~UgGIRVJf zL_Ra>Y}kK-N^*KL$0=;2Vf58)M1$z3jx|`1Lo#D89u2Lz0uI<53Jf~no3qT3*HDgy zz4!rZz+v+RK0zEgZ7FoBj6r;S`Z@CZl16!B6^M}Y8w3}9py!HozhIO$2)m6?_Ya#N zC*+NPQu2ELo|hCfm_58-0@i>ddo%aPs(2{ei|JScPAw{=pSKo4JdaIKc4*m_ywQ*6 zJDCn%J@I&P(yM?=h*9$eUs$@uE<`4`x*u_PcXvl$@&l(xSR=a*NTFhNdO_VEAbWha z`&w?0QeFttal-p;_Kk){tTj^ggMsPyUcV3Y6X?lqsvys{fCQYP==~(rL%z$t6+1wT zG(8_>jx9W-0l?9Q7y(hzBhPD&+l`|-#z1m1B|JTTHbQk|^*@x=_Oy|0>%5!)p=7tC zKpu+Q1=BxS@;eG9FDyte+UCUhxLxc(WxYEPq@96?qs$2xc7SbAP8c|ox$ zUCwb)*0>Ssr^97L7K*F@I*kgW&*o?SHO-VY-#7#N&yG^WNi;*+4BF$`*0 z6o)lT@CD+qIa(0CyHT^s=JN`>IYZvc-~h3Ex2V%02jCvgG=&*&01CoFfAyB*x1cfxyCfc?7xD`e`M#!#Ng z9Aw%Y)S*8$n8CVGO4YDX-~Z3_E&jfB!ddh7ReHaozxOK>A{uDEM`m{H6npDQ z)z8dUcCkQqW*j@d4NabhvVoLu=z!aN6G-3w^!}$`BPo1r*7?`CRmxQqN)%3??_0X` zzvAy-O^8@3@b_6FczYVQVqSdSw#CJgn~P2Enl<)gQ9r-uQ9-~4t<`{3Z=Cjtr3k$Nh!4o{VHc~`;o9PvE`Uw+8+yN{WE&p{cGe8(~4f-gSg z_gv=pUuE*$$4tKepy_wt+w}WyZt~p+O}^uxGX+qW5#ovMf~8LJJnV+*lH00Fo~aJ) zHXpXw)wn=-bg&@c4XVN2#q}=}-#&cy=3q( zU<26j&aS2^H=Hv)I)KW$3Z$|2B?X>6gr53geX5Z9E5Ms5g!lN_!GDX)fm)EvF%yGQ zC%*>DuA}&Z%1aNXt%y!lil%_1ZOnI;eaV6U#BsmxumeUcvW@@vnCk$gPW~L|N>%*1 zmya}fa2R5`A;m42OOXB@OIwXVdDaFX9T^mzckaSn>&qPvyygQo_b|C7(Fb0(zwiF2 z*<{sew<~d&S^O7cpI+5sE9sk{?y67 z)bj{f1rCue5cvUNPHL(^Z&?n91CGhN%#qCmQ#KenIEe{ja2n}u0zY5%uz8pM`|@M+ z4u4EIY0PZr@mldv)(_#(jS&x50aGMp^I~Gc8WlCVYd)p#R`<;({4wFwCK0h62~(|@ zIuTJQX~UD7;AHwg;q7|LD@wvbuLvhu8=W)rTwTv+8wnR>==Cp<7YQ{fUJ^9n(l)C)Tcr8gBC-wh?Q zV~zMhJB{;LI4(jJ*Fj?}42dtEK)j5aZdCKvQ?)t?8SB@V z0F%K;_QqjZ182><=8Q4SSTHiT$B1y64_>bj!ifSon$U1y2rsfw(v44^FEDc(`0#pG z>@94P%t;jOHZ6w83#dhQ6Y9CT2955TD3;=A%9|yWQP5~Wg`dily5ALV58W^yumLcO zHP?YRR5_JnXInb;18>`5LCD9@fLSp^E7 zjP%7reznaN4|IrT3pd&=3Bqcsj&}rFvT~rAsp=cyDKS$UCvy#nZ|vX-^pj z;N*Gm2;p>Bykmx2&y`ZD9z!ju6qIo7p6Zb2?24|V+yom=ckYEVy6^xC@r(SC2hLHc z0?)Uh>9f%3lr;O|sgT)yrn7LSe?~*~I;$Qzp9`L%qhrA0M!=cAM_(JxE`#@bv8b6= zQUSba7BNgpjxx1}=Rdc?DvgC_g_0K(8n`2=v2VPw3M4Bi!|SaZ)NyySCA}dmj73^P zLNsT)Wg&UdSnoIm4g30_koiEe$=P;alRcEa3Fz^HX%C2XfF`* zdT0AXiEMD$H@Jm};#}S?ntp##LnPl{H2o7N{6orq{~3S(ZMwPS*<=0wr~2Zvy|v&( z-tPio()Wda1;!a@CLl@DDHR^7(_XuHRdr~r_{`ssy4d*d$FTyWPtv!FNV8R1E17sf z8=BsL9U0cnQIaBlM+^}fhAk1X#)#Z0Co%-gcQVL1E`&1m)YLjI z_G986{0+86`IyN-cniM`Ci4(*g0#2<7&Y&UD*sBlD*tNIKJo!>me};cMEPVN6EcBq z%MHE7MZG-EO=|RzmB9ynwCIU%b zP?kC|Y~;aK85vG<>>d>bl1@0r8MoqZgVWRg?p6c=uh3Z!Pd+dexgLmO ziNFVUcjo;jy)?gqA_)X-aB>5<-)nX>zJ%LWZ0N?)$kauMwOuYfz5F@_?!YqHANTtc zC?QNaBQ$-1o5T887a1>f{?-(Im|)KDbqmKS_2lJNv+sOi>a!t zg!ilhsXg0aN6cKl4^KP53}IDhT*bRyyuBxHCjsi}I%s^+go zsIDioj$-{SorPqqs{>EJSa3Kgd{v0nDRcyQyaE_ZNXSmhYBMnx8&D3ETmvCzJj7d_ z$5iGagv>+=L+|0CFp#kZ8{O$S@mB7Qg4RLP>>$Y%$Vh9ckW!Q#j+pms3z$3y9P2^9 zp5PQLWa0dSNslbYe8m`&d(u^am$%$;fc-tcg7j4yZIHf5*BgH60y=L&9{@r zxjTS1G6E!50Hfz>7+tNQKSIW6L>0+7V3H$MjWoIoxOOAlhNp6;p0SXMrqWR3IjF=7 z&cMk_z}hL?22NjuPHsT=`>fL57XGQHN>(UDEK(=5Qd3S{m>21xR7#R5Lpd8Z*zmvJ6?Pb-AX+a((uWlF8+q2!80;CO{1 zkxMQf$@5Ka2Nj7I7#P`wcn?5YXYg4)RE0@c0R9Y{uqwHRow|B6-Zq~bZ>$2R0NPXw zjRhCj2=7HsqVO5gwWuBcgtumXJcxxRMNXSoD#b8bVYh+BNrtaD_0XX{Jp63_S4Q5+8VgHD00po@i1U%8RqG+;6Nhg%X30n$U-$^FmbDeI2a| zI&bFH3I=!0oBZ!bgkL7K5~iE^NUJn9ekc#wS8RE6!a&whB)P4~kVCuj_ahw+PlbPz z`{v{ifmjP7g;!qd@DR-@HRm!QaNc&O9OQS&8c zX~`!W$xW;UIrmnue})*iwMsV=C_=dw9pgl0r&n4YvpKRLEhPi2u_5vn;1tQp;Nc=~ zhTPzyE-|>pjgs4-fQN3qR5cn*(UP7Jp0qsqy$Z!rdg2^wjRBxj-&s}i52`Bpb9Mc> zs%95YtL6Y1mnu@NR)bccKnK3Umj6NtQzDVu9-GL{PS+iyQ{6fSPE{U!Vy4|*7Whow z5^F&;Bvx=))Hy;EE`6auWCe!4fPJpmN+&O2`0;zW6dm(7ER7Zo17(QKf(Oqlbbwdh zTlmW&w(AjHvcar+`uAfYS4oV~9)gMZ~p~-X584aPN_q1sc=AtQoHM*SwIaSQ@G$z-(S0yB9wrn~yJOcA3_n*3u`av)BUo(rwe zKnh{i-mpe91b&#!17`BK4?LL|&<@fca8Tj$TgH0+Rn>q?S9I;Wf^beH(~R))LB(!OQuDpRQD!(Wc!?mz)&aS0GqM1CmL4Jz}P+$ zmV^QUW2dKf=&N$Gv_0A&4KNeoo`!TQxJ#RpWFS!JkavNTg|swRN-Wg+W6@K2D7U(k z)F@NVM$OL%#kIj+uX zkxsmfcnrN%0%-C)bYQirbF#9=8Ej}UG5>6`M})D=ij3?e_L?FWt5>Ip!gDt*mGifHn&$om_LJif`wN@w8cIi#7G%=^q94f7H7x zPwdL|^`krNpWk3h0`GQL$__m04SAow1S`xX4A8oAjtc}B2|(tDWl$}+SkehkZo8Ho0?$<6pBjRT#<6iljFe znVQzQHqn4>QOS;=NEKU_cEyGy2mIKQFKmV8;k33V~NI3@E{ zU*!&%GC zd;C4O$W}wd6)TX=yhN}!u9`Vz6f_w$EP$Oz53+RbI(b_jtz!)*G^Eh|?arPJdDrGm z2UF}X!^;2C5mw7|M2DxLS6M6*G52^kqDZ_z!LuIk6f3p}+krvv4t&TOQ1+{BFmR*R zkZ2pkT7J0XByX+b|jN3PtQcX@>RVh&*sQRG}MATs--4 z(pkV2qF-ZBml2Ns+~ivx;m{>Qwi*F`!% zJ|3%+7#|{1iL*aO*dVc3(*WrKaow=3@f(^#Y`GJw&WWzzufTh~<}rQq+kNwhKPH?u zkLB)<>`{IePCipXg3U8HX+{~>My0o)927BZqO>8zP1SFr1H_mJ^JvZSWys$UAsSwAflxEHU^*;8=O!xL2Ey5fIioc?JP{Z#UQ|Xr$>UvZ>DP zG$kh5V>;@OM&Z6Y9U*h$RBm(^q}zli+DIAK@~FXF!QOwyNEGCsc?w{X&dX{Q^&qD@-|sQTq>{-7>`}71lFz#u#X#AkLi`%*L~{ zEtEn7Y#QMWrn1)Nm@)hp>XDoAyZj z)1$Np6D90FR#vlZaJ-FnE0jIFZ1ah}a-qEgYfv*IQvv)|N=-Xp>HsAn%+wSi{ z@UN-3(tSMO^OA6!HX0!ZEnAEd$77c}HZ&y0cRfBF8{H)*WaYDsc!Tn7-1A0kafCcS zlQU&>Qc)F22kg&O@q*Ln;e9D#sbV~|C?1MMg7g9y0+=E_(^%ng^WXm$FD>ufu6T(b z8Os#j=jV_f^6j3JWa3v<$dZe+nc`+CQ|2P@yg~b#Ve>fWolP<4VSF$f9qi+UOH%W_ zL;R1^W}~mf*TQj%BAb0*=f@?7FUg%dhsYw47MS!Ko(iLjcVp|8z(F}DC_NmK>-2+j z)Y+9hNiNPh0qQbHE2XZUeNEwfmz3;k>G;xnUJ{T#prYF7>>6P<;Y3@k?^4e=5$Ou? z5H|Y8<+@=Dw>#85L@KRd)<^w_^v2+=d#NT9e=V4VLGqY{Yq^TF{LQm~0@UN<7Ly2lr2GP`$cO2QKC9(o^q2&pAcy|dR6;N+t`AEwOstcN^c=FxF zXI-b;b-s4Om~HAR(pkn8>Q5ROHyq&0;c1)ZFa#`c5kCj%u4SMnm+|&SwgdUA@vH&+ z3f%A#2ZJ_#wSxc_7t7k#T(_b-$MaBVg@(QmCIk%YCI`mI*r*V3ff7itYo8!v4?!nK zqhX$CG-xQZA`>e@E#NZS*QKjE5EyvcIOk5wweI{n&C64>rpNxCW4L;00lU1Nzqa9> zDyfkWWu3WG9QN($N%tpDFPLT?_be7!?$lnTcebdqE$f&trQXw$_Y}bx(F!7gf%Wc| z?5-j4eH0x@46b*U+KGdf(T#6X=3HzA^)8oor^@h7&AgI5eGK5;e#ivV+gVCjFN`9} zd4bg$fuD=5p!-D40Ybjb$Q^=UdfRxlNbk6i2H;DuwlX*7A%M(A&8PH#{&L@Z!XGcJ zyJT%3QYRjc$X=ReWJ@m!S7+R|wa^j5L+owSgrDoD2EmQDw@8qEZq?#CSxA}qfALw z>j9CqWE>%(#Z=&Uh0ey|p*Ut~O_snSK8ILtMJKJ(m#sGC*^Y8k5weL`>q3NyE5Eo%ZrvHiYBU~BuNBcaEkGs+l@u3NiNR;0!=niN zKm%Fi(>WgE{aqJ)NExB(nebbDu6Xe8a#+;dELd0>n{ z2T`)QqD;G#aGBF?jGKE7hCl;|lZ_?NIY~-Z?ZlpiX~lTxm2MU;*}W8#bl9!xe6a$3 zm)a^CT&gH??CP%U-1nMudL#VeOSe~>MT68?LCS4~L@ou7f@bitA^x>4_7(2KG zD623sshpqJbEa-pGYxS}e#0Pt8;X-qt_3G|4ey5*J+flUG+OS(k<^OeZOMvFGT&t1 z@=6$`1v2ehKVO$iI$+Xa*>q~OIGOXus+P$58d<~pK({n4=jbuQKU#TkjzN$D^X8DC3 z1W!x~rD}S-*&OS^{MVJ5-8ETJCG%{BU;IRh^h|;MSFKGv5~QlNgU1K1n)Cj`|j)!h?mm!xIxy0rZV21=s$XrthyKju{pY$@YO4Y;?I zb9LoZg?eE}DlI+jH)P?`hXxlO48mdmE3J?j;;d|nj5GMUXg@DP#L&~qG zv|bd|p2MaEQZLj(^bqq(T?^Qz5$+){a0oQ?pq+=fdyaf8)D_gnJeBV_*=L9Km+TZw zw~IcxsMngtGI5tzyddaFcc_`p?D??CY$L`&lqWDb*ZH3M*`50kxy6Yaql=KUCTZLs zHs3OIzwk`V4iV#zO8p6y{iV6*zbd717F~r!1d*gDP7o$ZA?UdI@ZtVr$`N^)6e?CH zm(&wc^GY+5LdELzf*Lz(Fge8AuVvd)z$j><``)RAv8@{LIH|RlY3V|hRxm@Wz2hC@ z+^#FB>In_DI2u7#WpiM7neIOxLzful7Tt$^8`_H=y9ut$%BxoRA$ zw$KWV+aI3|u&kTvP(OI>#cE>M_gC`LQ<;&apr&uSI_+y3&nc^%!p0NG5A@UN<76HA~~KDuHiS+pwZO%SrI z&Uvc8rqgna8`Ms*P-54;!lx=1prSyc@WIf*OQdV(Bbq3X7<|+LrxQFY;7+z)2e@XK^ml0+T*9BnvW|%P&me*HlP&pObBj zrOD>OQKp`FHJ!kNCk-$S0esMhm{s6Zd%#7xTabOt^LN|}Mgjv51dKf4dXv^MYe31K z##3XsL-Ik#w`(?R9*)$}=_L|*46ktjb0*s@(|wUIawdg})yXAwpH3}XB1+DIDJEiN z(yf$>%#i-bU1Pu*Y#70CVe6O;fE*t123&R%aMV6BKhX8L$O??5z@c={L9Z&77<_UD zx07j!tiZIZfIF!Uu@#&(LDcc!jfw;c9^AFTdR8ro!FwHWJEsn*73)i}CB_cLL!l=W zum;p`;cMYf`)d)OF+I_8iw#uVo*MlvKum&4>~b7qpc!&b()n(<8l!`1M*Zfo*tHrn zl619a7{j)}I97}fj!p*4Ih^mZV zdpNx7EW`J{mrgCe-UFwj z!RnrdjMC_zr1$oMs5^((ZH>Jj{MriTUs}xk*N1$ce#w{gG(id#tCI`r$(>quK@wCJ zw3DI|bk@|T9sGvnJ9LacnMrTl9Ln;rPUqFJUJET`3y@p_3^1pTyNDR=JADsS;spw( zZxANg^0dpg`gmZFg}flihNH{UM8=Z9m~0vvUOH(c)I!wu9iNU!R+iyTq=rSdyu(R! zqH1Yc<-fQ1uqktR$!9BMZl*T^R#40vbmpNFQfi-n_2@vP1(5xBlT*V`ZuFYLdQM@Z z2~Tv;$^Vi6fpopB6j3NqIK~OtZc*jgp;(kDsuX=7^+GE&iwYrVHuh`RJO*eLW@V_; zI;f$uw}!stVxd}_ ziYFSvV=+@|tJa0xssPaq(8>@qVL^u2yVtLOGTCs3b*9uWMiAFpnV8N-+N0tXS(Tz% zw|Ik2nol3nkMHj32Y*eBRUR5Y&NH8yoH?Iodpe_*egOw?8ny3nRYs{A`FhITfeu@2 zHq=O1`c3+4VX~o zSVFOgB?cdT4?K;Px5J;Se%idxmd7f?Pw9fv&#*IJI@%>%x{$!=Fdwi6#LRYm2&*IZtiCapua28yTc%G1 zwf)8kW1tx_3OGdBQd4L2mW_8L@Tr@(o>Ty`UGXv(y`(vPa|nT1JCT1az>SzO)tzE5iDYy=q03@I1Gob8w6r57&*`((2$Xw+9 zID=#ABHLHRzWkcl{TDX8!@Us#DeTJ-=lBRX?(;5C4^u7zO$L%%hgyjRviLaeF?a5d zG3qjC;$}MMM_ZeZByJ&Z)~AnOVztWp^QOsS)?lONGlHAd>{91QQ_}#;ZKGrlQ(1T8 zSn43No!d)!L9G>0Km9k(##_2%yfehiSm4?q3VyvH9E&ZayO z#!f$9Pgp~fsQ+z=z!7Ou0%?}jy!jQ>Cs3-L4w|2hsO=a#|l^qSb7!KQSbEv-&JqB zK=LEcH~E3}PN`Mrs`O`pv6X z>4%TM(hvT6@qFGbJqP#4O}WDux!4_=zY+C`DbjjHI7eKtqPae@w9QQ0mluue#Nrf zML}BVOanzE?<|_Wr05VnA(#YCkDD!fet;2LA=KegBgh^bt+WOz?n-tr<4vDDouQdi za&d_ZHY|5)!$rrAN|F}t&sFk*Q<>ahlkAF&#sdto1LA?wN3bM=^9j2}+1B1I(?>idPDj2zyGhx$G)Pwq)M;oaJtvZbt?xn0+Q5v)_l0Ax8Yz?Z$ulLT)|#G zLT9P;M;@W`8h+>zx=Yb5{s&&bkE_1>3H)Qv{yVEjMi4P3c&bVA9T~qUm%c?9jN8b( z4RuW_jq*8?Uh%-a4l*p!xkbDp$#h46;HAZQNa|y?%F_&yMUIF;va%M@!>*yU+G(%h z3@c@-AtkV9OeBFoz{o?0l|)VixIA(+Lg5{&K*<`O)$~7yUt;o`*Y~j&u`AN*I6pDP zgjc?Y^5YfdwSt}HMx*Apzowr*(%;W!@l6qXA^rJxZ0N4!M-(#}biOY)t18>_Y&$YL zdqy$zzKKDowCw4@e4$IIZj*+9&n)%_L$b}1ea}nI<|~>Gg%;*H5VF3J zoRKLeVr9~)L`-gc8JGzE>d4bqrysHJ$Cn(@bXK5^i~#9n0M>IV4(d{2r4}w6aHgs9 zmc-yAT^_}B-8T-Z9B~26il_B?Dd(78SYb&wqJnCx?$!lu(^UVcey#9&|X#g<<@ zqo5glK34GY-Yt-;i_G4p%?lK99LX+*Gk95Z1ai>1Fb0`Yb5c^H`LN0Bwa`Mg0Ldi) zeUw;6LC6zKk(GHC@wvT#*qxBgYZ#YXghF2K^14<@ATaPK21h^x4g2Ci@x^WtxG(Yj z>Wy5?8?0W}`B(Ur9ZvSjM=~uk9yZ5ax+vj*2m5$QY{-SMMVUSalL%K>v%~rsUQ8to zFmCqnb+Z-fOjySmY|?yL7l%A8j|ZVZm~sjqR(hwlz7`d<>zU4wWa@-Jxw~WK@2ST#)a4-xRre}3elQShjPj{rA+$OIsmx%=b5=YE z$afN-T|Y=CFJgH|N!SN3C`wHmx7y-4A{pnIcdP-2a)XxnLzXY3bvJ?W1|7xFJOa8b zol{_BU6h4m+qOEkZQHhO+qP}nw$({GX2&)lEVl9#maIq0WnA zVZAA3b&YGt`-IN~A3{w`i>~WE>(X4$$@5kj^H^cQFyyBGrsz!99)g8mlfO=gWck0H zS0MhEu9PA(Ju8aoifJ=Pzh=FMsyCPNks8Z{MA}$` z9cUdiPc2tJY@ke;1%i_oeJH4SYkp7#U>fShi^%$Gg`xiMf#k5JEF$D2N}thM3}Ra&_O5#w{XP0&UF+EH+Q&E@0P7`j=rK-yzj5)wY3FK!{R;Ji)aQ}#O~L&dB3rx zarIW=T1_6?fJsmkf9=T>)So%;^&^WcqN-*InFt&xLccdKG{F8sx*?1O>&HCoT5_T$ zev3fTF&~Gt(-^_UKwIi4T$7h)OR*Kwt?GY>gkF*U^1XBUk#HetpsphoH#fW>u;t2} zXkrDq+-+}klm#6;`I?v{CQKCIIWa)E+lDrk zW$e6`sFroBVr|07kBU{MlXwJEx^`EpH?Bk}vYGc~y8fBn@8>dL?SDK#LXf2OZsYG- zG?pNwdrv?DIkSkIkzMC$+DZecdX-vAZWBq#3=PcmajF6j^d8UG7S4G-{V-uu=#3gg z(%VBvPV&Vq@D6!dgk2AJ;WXaQ^XZ?K`=BFoyNb12+ANCJWt-_s&TIo0vR^ke+uZV)>wcDTR zQR9zFYFY2a#jSFtR9A8fR(_tPGwUQLR%z?%{p-lQclk3j?a=-dj)En`fyF(%HQi6Ii%?r3Xt)i z(&N!OtKHRY*5dRnNPOX>cQDEKheWdbKY)+W}> zAjcZ4U*GuLaMr*{9_myv7YD6~V`^r8T3rSnHdEYxG8x;)Q|UJT^`OI?B&*j5^;EMD zO6h7N)!rtai#qyAm5otmkE9DYyz)1bApxS#-g+xZc*F&`sTED4P63;#cmjHkMYO@P zNzvI)ukKTF{90LkYER`6csUJtPa3K>@((BfG1L&vKs7c=!YZ+W8lJb7WX1rN!<}SD zR}XLU@J)!SHyEx$&H}h`up%No8kCwm1^)#C2$QBg#f6k{7pjdAeAmx{Q!Wd%$s=N-2LEm3Sr->m zohh6oJxHbh=qTsWvk+xA7o+$njq7?!$aPC}EL?dSt02H?#B2FivkZ_h7MN7t>_s#~ zlyW5mTtXzTtVd`qI_b&DDgfC^?CqON&IYR%7xWKLC@GF^-VTG4u z;%xz4XOb236a+GIGV)dPu_AnS)8d5@zKjl4szF==(UIEH)QFq2voE>XeYt|BT>BG;aK`6OC4XQ4&g43e^+U$Aq#+D9OZJ5Mztwez(;YLFKr z9mR@fP0W1s{5z#@a-;F63fF?sH-nrq>;Y6OtyR1oOq}I}@)PXhS&MC*%|(F;QA za0}d`;4@pPLZp=xo$;LQG^>!CMG%J%<&%=B1tcul6n#jF1)>U%NzSzIWIO*J10p&A=;kKIyM?h$v7CV9F|@qwPb+Sa zD7fDK6W3kkkWEbH;6HuJbJ6{O?5th{-1cE=+9w8xwvpk=sQOf?yQ-4|-IECzye z?}#E_uJ0_WDP`bwZqMrGE>1uz4Ft2&T~K)Uxr|Y?jh~&$lE{Q>=(~`=9a(&B4U)AU z`QNyfao4zO^lnSuvb%e#>5t;j<+3%@-d}clOAWrE(H-{s-gPo~uN4;)1-3G#eg^k` z4nj#W`iJ&7ni%84piHQuz?0oKMbkXYR7!&n33RYEXTPbF%rMO+v27PW?LY+{>{Koq ztdPWxZ5VY%bpEh6DVnL98n-BTE;{2Od+HaN>e@A%pkw(DkBetVaGBh2(|SQnup5L& z62{2Ah{jfkK$TY1L_Tqc;-6W&f822`f&>LD1I(_NAAIucf6|c!I@KsJo22US`YtAa ztCs7~K2nhaj8k(C6BV?6RP3_6XgPvyDpOtIuwTASiW+`Uge0hwrbP6t7&yCZ0|P%g?+5{VT*S|!&&9PT++k{j&bD%Md8{bfMc5yl zy!q216x8JG`)KUN>3=;Z-KG3C@mINSALb9U zi4>=wnO=LT$K(Pw1SzfBBwI zz*+_CIuC)PQjD&PqBJaul+K)VkD|8>@kM3+S<&YbiUy|tXIArAO|a-nlBD@oy)f5&2V zo_~EHy4KXd4V34w5&A3aeGwJ_I$vtrgqDmeUQ!T(ZLN%z`E2`{lnDE^iP!33Ey44l zd16b7eq~T>UK!_HwR6{Sbt7B4j2a1v1{1^i<&Xtw zsUJgWxqE1el}ou>KF9hQlPVrygDFM+5ry5JmnXJ8iZG^ZGgjF!>lP07+~BV+1qt`C z-JMwhU6L)6k)Kkc{c~plj~3KhQcFajufK@kZSz~dg%(*L#L?^O;qXXn_W+i4kU!7h z+$M0sw}olg)nt_~`-W+;DB~ALMKQgZYWS&Mw=QcD^{S?mfZeE8SFjc71a9h~A(eNK z7t~AT!?0kv*to|X+Q@j*o`3tb2~tWKu!rTmL&pia%>llR;QVFYck{;^2G~!wGhY7Jy;r4U_8!0fu0gqiqCvQSfdv^^iFTYJ2oUqtF*Zd&27WD4&GPN9)NSR;g&~B=_SSR6 zyzjq!^6xl2dbLY1iOcya9Wfum?MkbhAFX&Fr~=R5i*%-^u(M&0iei-W0GZl)QR~Os79>vOeM8@=pEY@3P@%l;JS$XQ zH;Lr~T&i|k$G>u_6hu>BjrEDit6fe+9f=1Ss;VpObyXCR!3)D^Xtnv9Yzf!avF^Y; z(^i&LxI}%Sr%$l1(Q0lk!14Dw<=#PGEowpZZ z3j})BQpKqUd?k0yo?i3VGC`%9()+){B);C5#zfr(!DJ}%Uu}qq7wLw!L3-7XOV_rS zJ%80Cb7iT?jX%*O5+v$DD&}O(1$aHy|D*c9Q-hM8aw1WmYO##aVI4?1pUy?lt0Gkl zJqIRX(eRfP2>>Z$XMkpK=d)j^ZLQkMRoVT&*8-!s~8 zYd^O!r!GQi`t)h~zsBpIGh*B>!sBRFX&br3Jnkc@lA(M#J8ib_V&Lp$Ivd@~tLHX! z1>NMX;3_t z-v@&)y>Fm)%FZqVWS@61??$R`5z3zv z_&x|V{9ZSHCM&l5fcJdBN+nim$C#0`Ot zl2xQ0SMe%%G_=6!**JM&=vRRdV`J1}y&goaFzkYDri`zSnlxeK$$}pRO#ZC=>-vnj zQ46L}4)w`|C~3M06eek#hgZahp@EHvAN(x_8GFENc7m^My6D{=&V}`AF&FSTjd3Kf z_G4TcH#7m-8x~RP{kZHpX3Ov$|;wx2v5^EBZ1eRohtx6C6h8W2b>XTYMFLIlNHVr5jbG2>X1KeTCa^rB|N} z4)q_CXG(k1oqRAAlWfbLTv;pD>nvC^EF@fiP2}FDN!#Qwn^fn0j=b;YO`?+XrNyX1 z0zd}5Y|?1f`TT1~`dfJ2mVMc5RwV7Pn9i-q0-IA5C7he4|G4KQ5fNg*}G=?%=1-Gj9Y^d~xwy62m)e6o=n$ud~q(D>&pplQBr z6#%mcvUjFhqH_i;GH+OdMe%2>SGYn`MDh=9EpI2C(wptlkqlT5)sfpn>;UDY+!2#9 z@8H<;T=9E#rLc_=66P36BmK0k*}aAuz!V-RLrmiYNK|mE;2z;euUjXFjE31fxkY{_ z2ssHbjalUi1w;u5`Nr7I8>A|KPx5u&@zomrW z#q|M%sW)#ZT1_1g_%8(h-VkMCtni83I&!5QmXD6&^A|j2`SLQdpDQ(Kx9!!%&RH7n zwGH+&XsDWLWoJFWqV8TJHzb8KZ8t<5DJ-OTS$Y6w54`9^z;=`LCEp$i%0)3~xw>F0 zR{kAynAeCv=7fH&hDzp5E(mUpeK4 znE=2K)s3E&XqOwD?PxIr5{N4}wTFO7w&m=lf*)68hIYS7^y>hq$xIUObxP~Lb{FC- z<>xDTQd#SI@LW_+fcJl@WiX#g7Za=Ldz-GZ_8@q&B0Mg?4^|l0#)0AP6Pb3i{CK@p z1<)R5>ujHe!m}YnULy;Gjph+I<`oqP`==q*g4DdnYmaqUtByD~tSwQeU8CNXCPFfB z!>@zK*>%IONldV(v>*(MSV}Dlt9}*B%m#n6KS^0(S1NFGVz zAf3Dy2z`MQj#V>v@b{epFRo&kgb;_>`{O?i=ZBw?;Z7oGb1F{+Yd^T0Lm&dlSx|v{ zAYW+0-eC1~z41gb^|Z8o%F;LeGbQk_eR5H;k7ynZd>N-a)tXsrgA7s?ssLn{BCG;X zWnGbKAwFAf!b+PN@Tro>)p@3gFf#TD+D0AdJY)hOWz9m>-Z7EQq z&PM{4Z1or>A@UY;72YE&IZ}#uT0xpBARIJa(86V^mv7a$mx)4oZz9|-59__6$ zDuO8R0{>>KW@t1=z}TRx-OdO)LpNjkB2)78@#f!ESOBJ z832LR3m=YYoVEJUneIQxeDmxmV~rz$S%Ys&;+W607$_7Yr@l4@s+_hGuP!+-k(jL= z9SlM1?&LrLc-d>(F^sN zjM~*@k9(U69$L&}{$e z<1lFHO`dtL4*lgLmqrKM)*zj?FtmbMqPbRgQBU;sjnh8>ViS4Z$LC2mV+@c(TUiF+ z04y6ysz{-|f*&4!?tV3QMCv^Kb+bOJfgxC#5}Y6J?|k^Hw@HqA>Qzto5g?$iIHlAu z@$fHKi;-{54Kw(wZ^6={t6B`|VJcT(oAb|o&{*Kagef`TX&Q-${UZc;F=2n0nH3x^|Z@8SQ2!>y)%vz@gtw)T%7^Ee|S5=^)-LF z;;m?GD&I1+K&VLoBW_rXvZEcxXodl18NxOxbP|E2!no`WWWi<~=2;CyofnpJ;G1%X znrwkhRT-UHNM!d+vg5UT|CKw_qL)|y$TutpYY`jNNYc{)h=UWEZcU^U^o9=fg@G$v zUa+43P5l337uSdN>nKhQSmHE$;3b;Gtm{7`J-mLnMhm*PMp<$2dny2?-rc%2Il1yjh9 zpQ3~;l_Dg-`-fnH8gdiKg>9En3`MCs=SSP(QUd}k1Ar>mAR6?<@rXu^{?imx(HVQ? zmcu1qN94UYY)Q5qc&sHbMhy<<(Rc|z@%O|^SxkRjW3Z}{6_k$>ycFbx7&;ZzzZ;k( zLRSc(oae8JfiB*^u5-(O%6TPaxH*=9OtM5y;-r(CoRFo8HH3$(Dtpj<`>dHUM=MA3 z<*ZKr8^J}`5d|zWaemGwWrlG}+B3SNqj^(h!JRJ@G z13jQSB95llsc>_I%EqiJqN)4aKxw9)NU9c?a2Wh8k*zS7?lggF8y30wbnuXFQU}nJ zlr#ddS))l-G~CA~G=Svt)&Z3_iew>#|6K-d3(d=!Z{-P*+Xuv#{t^nI`EXFe<`f%b zKKCFQ4%wI0TP%lj9H&MUe(?v|gh`Y>g`F8GRPHEsjdP}N z8Q&Fszx=URalKeRBCbPM!M5wfE=bs7KFSo+JnwK*_IG*#rksJcs=4x{tj;4o$@p(% zu%#<*vcCANun@^@U4h7_4sXv>=d57~H4K(khFCI)wX589ABLe?PPXIWbRUz0G~tc8 zGJW;P%|enN^Epa;c+H76!*e%H1)h30b-Na^u3sAOtiNgUpz9LNb!OdBbfs^7|082r zVJAe)9s>S<{s{`h$93yQ=B%?uLWx0w2)Ptal*mCK&y3j^%Pa_#EwU@riQBq?v=E^w z#!|whj=C!9HL@U3C6t#&tsuqDhZq;k_a?WTX9^pv?g$@R{7KL zx1NKf=-k;wf~y&R?Hd@7WMYFdL~zR%iBBZvD>j^Y4J-?p&^kNBItVM~8CG%I^0pj- zZ1aYHag&zn=xFSu?Wm|wEtn4GFd5__y z6{R|N``o%BI?GDPk~QZ#8lLj8Xn`nVo=o1*unVqLStovna@-i8b9~2x4}N_vC54R& zIMoD2APdccM+7{noEtV2O*3ql9$?u7Ul8xj3h#HoehZ!|o~k2mTi{)WOcADxP8?Ws zg2>qc!QI(uGh_}x5)PRNlT&?SJ9u8^*U8*}#MzPK;uLF}eDNerhyl-W{jdKFbS~mF z*SuPed7X)sstY+qQKoAAN<9gnv`?Tee|CxfS77+-a7MKToQt%B&)SRbg5b3Vz2MjB zkkAb7(mtgh)U19Mz#@yGgv@wEpS@ap;aCB=Vbrd6h6`Vw7A$HaiQEmCxK%#Sk(tXu9o!A z;$$6)s^bvC&>Pg5?3D(O?xrd9Hvw;aWybzO=8dO1dc?E(z-uB0RkzAoDGD}QDK8w37Y6~17U*>0mJU7^XS-}7vU@K;NE++8_!~`g;aBWC$VK)Yl8e2Z z;7O1+AMwZ_eM~!5Afi_&!w!{_QNZ*Ex)IO0auP=Yz;Qti%A>yW2?ehErmSFYPra{c zG*FNY!;OtJwJ9d5!*3AGO{ZUAyaiQ|#vb(K2lzx{R7|v2b-w8bvG7IefhZ(TT1^_> z!{*7*pdgXlf=a4H*B=uI`eCnM4XyDp`23U{8ICx^<{;pQv!wClaFs<+py93rq_8v3 zEHL7g(NgOjK=kUYW&3`y<0;wX=q$*)*G39UK`m@f&)n%tT(5NIqdUUiWR7$FCa5z0 z9hy@d%tE-8&lW{BmfnQOhz`^w^yipI&vRU)5;tBw&(0U?0Rq3d>3UPwSo``GE2uU} z7_kd-Zuh?it}DjVx+BZo!Y?FI!)s#)&6OL5;(K_ga2odqLUoIRR|QKHR~hk=X-5 z4Y^F7sQ$o9HRSD%lMC*If0$P~E=dfRBnd)YrQDsy6aXP69A~Xb^JIq$*cAu=?&jrI zROE*ZH!p9=?yKK4HO81i_t5NF2cUtLVu=R|;7{@GklZ6U-=2j|{yq=gyUzAcYpzrx zZiMT6cf)CcI=e!3Grqqcr!lhoihIn>JJ{jl2*K<#?K}UL3k9{Pm%xzfW&sG^+ zfxjV&_)(VuZcMr73qXm9COb!k(thF?`^&4`>#~=U$X=!=ri>#4SC2Cnj-V$RB5x^F z+trkAeX`%AmwQ%>Jp^Qx0b}C_C9O>i=)diF3l<%FV;WK%N-9B|kuUL}f4V49yN*L@m zCsX*~wX*m=V}|@(8_%{MJHj9Vk&hXQL9nDj(AX`0tC_2V>9>$YLJt!{zcq`DtDhfk zG6Knj!-4k~Fc2Y%0tl0H4joJ3M32FJajYEZ9Y>H$9Y$O3VtnJ3km6X3JZ_lt*A^02 zc`A*IRkX6`)*n9gdc9|$*{l>3&{cEX$@l?~q@}87L$yS3i<(f>i`If@v-xz$V!5qe zR?{X)*h0{Zp2L%mFbBCG1A?~+?{d=nzJ z_%C4~hVzbea3p+*6Yaw+G>klja@j-}=yb2AP|3yn$VN?w%5qPo!c(wtO`c49%P!{R z%H=L6X;8jVB2FVGb&R7^YyT|HbnT`h%@J2IAC5C;SvcwXkQJ%c+R5ETGk+-I-9md< z|8AZn>*L({ZD%u?TJQrR*;V7S_hH|yXS2=AnNkBrm7rGW1JTh`T5S2-s7Ow1w!l(g zfMQkE0^*(MGd0x&O_YzTUy**V#kPlLI>fKN%0#E}h-;guKHe@E3nvpAfqr^t?oHL;JDGUPvWbd1v>-g z)k~dgEByW?tM$zbY#3Ocf_+Z?v>7WFkEnnIak3t%;g=HESpbD~>8@6KWheTmb|7zw zvs-vtYE7JR&6>P?^I}UT@TLD*Sk|Yp&-ZSn)-0`!tw@VK?t6es~Yx2qk@;7Y4qq#EBj%Wg_EZH2kq*#v; zG?0khGblbSZarR2bwbp1gU!ubDq%Lb=rH7EKL}T3rGm%PnN(K~32`gAL}~I8wHZQH z0&&affMN*1!(4`lkKGIhf}F=>RrK+j`$b>dJI8oG^&xtS&Q0dB9OD^=;CX|~ z(>eMxyWro#n5>l~B(g1>4_SHV1P9qHlT$6ST>BUb2t0zQAOPWVTIwn=w;1Z>yQV+? zF{T=yU|M&RmjtD9T$5+svSza&#XohHE;Njs@%1!9H=YzVp3kdk6&i=x1l*_R#127Y$qRK8rqic0M;I->a& z17zI1YaNp|8T-bDu#+N@c4dFvpj|}fl=9pI*{-rEu2o=?D0>RDg>5Wsc|K*N!|)E5 z@#bc3#cyP?E|?^#c1v=M!>5)stzdbp&ek-k6N5Kq`p2>p#j)ifJfFS=P-g zB0jw)pTL|j_vcx$Fa98NdmrEOzKGK=4^AN}1S{%EUjuwtCy;PJlHT-Mp5aXq{kGs* zCR8dvD9-t3e-5Y#dp>dwks)bnYi z&M>Fm0dJpa4*M}DuV^n3d9Kvltxyg0C54to@?{d0_SNZ^_Ou7vH5eg1q@cnMG^w7C z-0dkmxlV_fCZjy=G*qhm2)!D4{xDwy+ijd!3pg?vF7}K@k()icx9LHAg-yhEX&AjA zr`#cPR>jGL8AE2dH&14}r5@6lyot*iIj+|Zu5|E>ASf)Yv8{dGm=fRZlcyVVdz|uP z-tA61d_WuiN&6j!01I>Q#+$oV4v~XN(E}8pB7f`L2ty~4=*HtWXaRPt|9+8J<^f$2$i=^!a1uL zNYjiuXt_M%aEqbIxyT|NigZUzKC6k@-L3%FRRVlfxIa58cd1a#VUP<$^>oyO(pd@y$Z<+H;P5q|<`B zw84RUDc*{*X8LdDsBp;$16aBWN@qZs9e6;{tSS~74ijCD_(FOqJl2a-rEcH9X2rgL zfi+KMfj;{m=*j>JtRoT&!|zH>&3(9IH1;$*;;md;Wdh`2c+QYG9Y$tV(n1zpAJ#%` z5_y(z(cZ|(-2d{%z(d#RXx=Z}p+=E8!>g`lHEe^i=<&hdj^<&(Pqznf*(Yn@UDQ)D z4mnBgK|os|<qiN z66H5at}JA)G4)NfRV~L{NENcL#RB;4v|d-u)<)yCCGaHjvAjWNeHX&&L0?V&Q5AK5 zVL~klqs>oIM+e)O{8=xmSim2=q9iuX`CBNs&?NdrBRpH{;dV^iEDSnZAVEPs48RK6 z;1h>bD)zv&Qvk`{GD#%=ElRyPt`p~;_O#s|)ssZ_ZmG3hisf|*(S9ZT6D~QoyR>3Z zQ+>QKEGtE;xW_8+45Re>o}=U+LIqrzd zDx%##Y(nma9p7Yb>+dS6hou(x$X|Fwu$wNyU}=bAA5r+X?ugn8=X!?Y`J&`B6w8b z#o-?dbNsdN9fPp@-F0R^TK9Iu4N1`1(e>6aoMx60w`^!(UZTG;`YoVs^toO_ixi0E ze>1CDG@D~G0Wi%%ThEJ4E<%`*?yA0h#T9<)&_*Ris9<N(r`b`QR74{DdLv^)gUhRx(moPLMs+)`Vlh!i-)oRZGi%&Gzns>XC& z0`h9SXbRD)eQ!j>^{7`&<*a(vLnyM;^3Qe@}TMm6xp6PH5I`I8rLv@Rp|1rK-}rodz?T z^c1fo^h~xIQnlt$v-1}eN~n$;S#gi-HL}?td`=dzs-_MhrWj+DW5k@#nj!p(#{910 zP9+;ZBq=II#{jG=dh(_%3LL>RmZ|E7#NIW7KSYw#;P7!Jlj8NILL^)+z5r9bCT;^$c+;a3sGclP?89Hk_qbM#AC1m%KCgrM{H3dvPCTPV^Sd0c zNP2kzSs*OJEKnjad1TSOVC?{ASX8on>r#3j&4}xcB9e}P(jus1pH*E#Pu(YDd4>rhd+G%5M(qgHP{4eF+VLVqj_6nB zvA1LH5NoVT?%gl6F-og9b?GV^@V60>zxm1uy|aK(-iw(X(>D*;o(vV^ovMB^k%WnV zdWlo8A{a0&qTr3y!VQ@<_-n>c5RvW7Uy>=AXiYqlA9|L67i&^#VJW$B5dPwaasWUj z9B}JM0ZP6ziDCPP0T6{i}SMTODIw<7Ha^!he9le~|g(U+!3a>pLytKbArC>Lf z4j6juV=PAUqZ9Db9VB-wkEe(gjqY#v3Yew!?Uezpqc$nk%5KJ+-rB*|>#&W9EG?vJN=Z=dPH8{vpkIX&$RmU{jbN`j1YwlteIOhea*8InqL&qa%499ogQk9Ly$&QMZ$iU9V5fMuli*-VLy=`FS5>18Fe=W0+N$$)o@CdSz7sbl({$=Mx~=n?3cK44tV z<~uF^(B5}t9V#jr*_hv^)UC-!mJ3DeI7 zaMd6UKL8yeaf2CyRZumNfLr6l$;+TNH1wNq@ z@ioK%>lLcVER|q~Sov11RyQk}gjqc6<8595!-iXJsiaDz%DtMz;B^Sv(K1=X5)MFG zv}bq($nymIZ>Sp*o{OQvjR8(Llw*?SKh>Yxs)v=tPSXoxUi}Kea>AMff!k%VJGN>~ zI+%|njQpTMK_3?)Xn4_jk@JXr1fu|B(EA8t6ORdE%#<97m(VACtOPMTqEkOVtZxSo zJ$n~B4iez)Sun9C1lEsBA-*zts8Gc)JIGZK1xE?zJOBCM@Ez{+&WlK(K7wP1Gx7p@ zU^9{>zn&6_8WX6hC1|QQ3xx|GY|R_a5qSvE5wSf$*L$MD`QIUA)N+1zgP6E9QItMyL_B=C&cVX!Zo)iy zLgII9+lZ#=t{^eLA%LFtz7#>7a#XuY7XbqP$`;C+u-v9`9~;EFg;<55M!ZaX=Y{AM z67MAsa}c{trLz8(jh!K$eHyf8lRHgwSn(Io$vP=Fz3|e!VY-QjgJAwjAo#sI?H0pv z#u$Erytu|`<<1K90?*`ht-fJgOY35XwNIHY5jW~uxQD1E4e8(@j3#5;d2z9|cpi6m zkjG&(QgtNb61!aF|9hwt{d0qHHE`;2&|lRAu$=T!mSCW=vyL9dIay<2n9(ZULH$0e zwoBaA?0j32NEV9d&k{?^iPH6+H%!N}fKC{(W0j8*Qy(;EP0z&meXarM+Jh><>8?mB zU=@o*4RN_#f+#FKQ$1me^$Jh)o&0Jz`KF-4+yiTV#SjZaSKXt*-4jM&y1d8;&GL#Q zPPYKNXAD+~ut1;0re$Z9pLt;)$+ZKSH{^@KMt-72VgK7(lf^0GJJ6&e>){=Mw~;2hQd$@3^>GU(0lOL-`-~o*u#*8n@zI^_T9YMS__&F zdoy{A7adqPl~TL$Ie1FF-hCZR_WbuQcwe2lDUZMco;W8@Kd;C~4jW^J+#Hd^SGs%= z7R?8|*xhMc1KZ(-y|=S%a}N)0k0X4ROotDv*&ADbB3;4sJ8=t|=@xff?kKgVXys8#Bn5=Ea;B{E`Q*@7R90ELl@tIy2fzzNZ~F^?>BL@U06aNExW}qnlK%Uvq#jtY0EDJ>v3;DBRC)Y zBqpLoM?`H}D%o{9n;nE?STZl#a}`8aYO@9A>_HW)QVF{2%zZHT6)YRPn+WIs zBT{kEr)8=}5>7+?&TX8gzR{lru)F(CO!_+|JX{E8k~JmOcTOAT4s0ePt^(H=;*alM z$!|eK>&1*x?S+zQ5|vbC9_YcyZ#Nr{*fXbn)|Afe8jrBoJKezRTzEh!IzZHZ2SB9n zM#|J5BK3p+21eCskj8*Im~L(*kCFMjgq5De5p4fFd>i$%*XQ0OT0SLiIT;CHCA?A- zg+ht1RUl0OfhQNf#H~Zp+wX$GW^G=RcaQnQx_X2d5OW>7fe=m%h}N{LLqIeuGfT!y z`%Q|lUm#1V6T{TH*DoKf3hazqj21f@4ajQFRa}dj#@qouw@4DY$dzrbw(YV(nLT*8n%e$c7 z;W%&l`Y+?vUJ@8qOP-{7X41Dv4MpM`VVORQFL|6#$1%ZVTiWV_5$QdE<5~gX=nwes zTmfvjvQ6G9D^U1=`6;7#S<*kEr8R0le0IJO{{iAh-=Ii&%VX0Wtm{!w;cpE^etlJK zd{7OE{4*RxoGx{AJ?@Y;yDoQKP*e_H{c6)Cd5Fio=+ zh%*=nfqerqIGGGB*72hkSa}o)W6l``rRSat7aSQY+6$8S=dO_P@&rEeM)P9u$YF@t zLupdrgC)7ALLo>Cw3ZRR6jXT4e>Uol9H5|Qc`X{1R04dTyZ?m>1kqk2`Ez4x|D}=r zK8A9Ho5uo_k}ofzf9ub$e94{g@p_!4WB@ZMf)SQwsT1*UnE3aAG1u$twfT{*(1G ze4uqS{KZ@S(76UiAWIE|+k$+EC4|@E<4Q0MP(t;wBO#xYRQh-{_GPy~9=#DE+O&R5 z5+XIigsu@!EK1(&1q_mH5oqzE#uIk&khxfMn=#9skkuP5v$y+&{tV#l*Dk)|87}n> z{3L#(2mIi`rldP=T4vKdrVQC8%AfLM^u(^sVJGT?Y3gANptqE#{eLdOs_v49z|X2G zU>kKx86n*|CV{}Dq{xpqM}-GrTd>aJs$?bxzkA@TQMsb;bAx?E!)_7q^Zv8)ye(BJ zRbtUHrNX&-oer&kERjZ@G%Fp8Yt5*<60%oV|DAW0;5|t_pt8aQQOwYx>)brKOwlBW z;p+^m5_`~)CYnU3N)vT?+8&sA8CR?@(w*f6c4|b zac@|q}#Dhn8c;Mkt+UisAN8Yg~hOu4TB-UEtsoE z_$#{o+3&kWl}W?1^Jg!2U`BWJMbF$_!VoBnN-Gzt^D!w_#AON*h6wN%MQdR?);=44 zjei8#9nGPj`{FtAAbL7w=(9+(;9M2U5hYh{<8aI}fTr&s9=e}w4cL4hazFutvkMXo zoIagMdCvu7xsEa|(u9_qc;4_!hUHB=bwWEOoqIKqy-)M_ua)cxH7tmJQ6|CZeRk;0 zo??ioNh96v&$iV(+G$uy24+6naW95MESgQu1iU2edOA8hSTFnek~N)3%yaA5u9RM# z;wBLw*5iKwM?tv0qOK8-nuZ}lCqf%y{2XH3Z{G8AS4o3MSuWbwm>nSUpI?!I^)Hw8 zP`i3GK{}?*o@khZwK<~=GUkj72nfqH^3K6nl!(j>rNJ zhoAr5Bom~kSva?+TIlRm(fcT=XSC+o8 zwrRh4iw_Y&eaS3)Tkgp+tJ8PQ+b*FNqJiCU?h*vL#pIvZLvetH6P0Ivw1}ecZ2$4ZZnfVr`CO&}4aXps`Z&>Z*3`Y9TW&egD(@ z<_-R+aM-hP_6Aw1b)YS@LM&s_v%#ncI&R4N+vW9Xvn;&Bkjauzs72_F`#t^i{&n*^ z{-|(jTd0xK=#W)pFee!`R%+YoOnjHhDwx`AIoq>3SuV6f(DP)~6SB)}Ht_2f)^P?K zHt(~=yWOFz*PsfaOgm<85*kXL_WZ<{GsZwu8a})|{`BE*O(j2p;_Wf*R-|2;*`0M( zcum&1&wLy33Z*xEUZh|0{E?FiC}GOMHRbS{a-`4ZkK>AO6m!NHXe{pX+Z4;Ic-Bx$QYIEdH*qnfPps&Y$3@fcC`unyM^TALb6zxvRO5;!-&3?FM{S*F$LR^M zeL)?-zSO8)GfuVGvf`qn`MGe9G${0sn(~%dYgXy?f!gfije6|NUeQ} zWlfAdc~V(I=6)@Zx~3(6FtHUJHuY(TWEHyFQqGb1#R)?h7nvbrWVXzaF6{5eYzyn3 zS;rY{+OX4R2?vz|5w#vN1e9z^RoE^RYp)f7nZjx`@5pCZVC14DBAFH#$RphzkszBh z4G3lGsivIWn9nL!DMJM$)N$#$nbF325P1;S4rz^4+r3XhEr8&dQdEfr|F5 zq?YYScd~_hyoBqlIk{HiPuKjz&Ut$4-AH@4)=fyQof->j(#v#N!l{{QB^6+qz*9`A zT5wyX1=8y|$H|)au5%(Q6@?OolSNbJ^+9&GaFkhUbaw|ha%e6+n554mv^vXFBWH~q zHR1X9s2BVB{l}kEIt6OfK?-H+k(Y`0ykor!y@RFC;@}2kae|SjFy|)Gd`d9`5k?pG zwY{`dbWm9@8s-&h$0&$C-%pEmh7CQ~;fz5XCJ;=P1TrhpYvw1+7wj+@F+Uk) zYJAMwVqPv!NjUs~Fg=r6p#kd=&NyERRA~bYMVjvmIGkd=4t&5GaKws?+o6*bGR7cd z7ONAlJ7B;oa4eUy&o@tW!x*Hr0VcZg#A_=&(8a=&;}kX-G@Mvnj!>=3CBOJ7XCB&$ zv2m_Wyjtq%-#PyxcF;JQgOPCt8#E6vL&`-3XANair1Ju@XB9}ppdgIe?hph~v&DrO zvVYwG(wGEv!&Z`8EYU<82$*T^Cmem?8HiOVu^+KzliE+sMwmHS63F5bX_a>id!g33~`Xmb)0c*g% zMB{wQiVd&+AQ-1(1cauiw>guk(gql?R3bIyRYeUMqe6i~2U1tEK5l9BNLFEm0pKDYBRmK3)wwuq z4;Te9`QXQc1F~V(#cG`#$o^z1Wh&HO)1?=5y=GH>k%C0Tx`D*s@O?d*D>chnA}cU# z7ifVUkbNjEAiiw6K_5V4rsT*|&Q+1MARPd$ZLDD{kDCQnQiv4F)Cdx^E214@yq`VX z_eHQt^Vb}~71DfBEok z-u$wEH+Qm0^K(T*=xm4IoC#A+FRG@<16w_n9K+*?BsR>Zo;Tp6IqrBRF30pgJ&ofo z>@oWDDdV_<9oK zC9fA4Zo|b76X{5Bgjjp93EeV|7U;w$9r&|DJzp~YK}Sk%F8U)cD*eaazV0XW123wt zdmt@pjCi+&tN{_dsXA1r{o#at3Bnb|oui89P-&p(gduG#Hd+;1j49FKc{b?(94_^m zTY%SU95wg9zG?2wJ$HtDSZ?D7!SiaH!+JGY8py1~prgbh?d3Iv&k z8w6*Zfr$p`_R%mMJZAGI`wP zIWy^@Oqo&4^zH@>_2ksXIWZVlz%czAFc{%y2RhNshDY4lAywKCl6)&iW};lS1UuRw z;zJ;Vied@I(F&Oj%?FkGU)h);wiLG(6-hWx@O5q1f@{PFt7;Q$C} zGkXMU30-Ms$RQ;${5ab|E!$EZW1!Iupy3@n)ZzchP1{ap{V`v0CVud<7$eT6fClVv z)ccj~CDl9jUSsa&ik{V4(Ws9$75?E#c7%`ELzVyiNJD}XZ{p^QjsP9{3soiGUllfF zm7EMCKfkapO?XLTYQ!>)L@nV}>3B5sBC|{s9dau=krZ06+u-Ks?Ke0`f2e+MK79P$ zB$K{o{K}uoM|kCy2R9-_xP&vYmYWSEzqlAPiKI$RGHlMp=<7^bdX?2M4byEVl4_0J zQ$l$tmV!t&gKxj6ks8@2X^wb)<;8izL<1* zL>gl%@j&eoeXJrrlUgyv&ZZZJYh1wr9HY;?L+Bd+u|(2_X^^|nufax^w(eVdlZ&q* z{gE|%dsz+Cv%aSe={;{sNItQJ^V8SNMH_@Ny{NTH@TTP6+am!-WBXksW095^-SI%p zca2|i>M9RBjPt#z3a!kn`TXupbMP-34P7w*RW25rBUVRbZp^a=o3SEHy2`+_EUYsm zzX)oi@kCgo8(tXfIn;m^alCSdc7!mW!BuowR(1K5uX30v%%sK{s3&r_4MR}zt_*_p zMPUm9f{K?13{+eP4eYFThblO$-5~@GMZTaG*I|?~$V9~S6>q8Q6o@hkncYQ)qE;e0 zm~S-@%a2}Xc0=Xd-$=5FzX5O1zQidYBSwRSdD99lA zfYb}u`Ekkds#elyG4EIdjxEiv=3T=^a29yppfj0oJ6Lk$gwx0Gu;VZEJ73>`(JK3Q zk|`P{$-I<~P5ZlZdC=P-E5f=w)(GL6=Ln30EszH?hMTu6{tWSlKy2kkGLsqkF7M7f zmuJXcut(-x*n=C)#u&HpQ#0_!U99uPqi$nkI@rcGL;iw#4QJ3V8Qn)FnNl@>7S}= zCi{D_jIm=M%%k-9A#c!WL#AKGb{~i&umGn$*-3d=r|WV9XA)(NQ&?ZJ=%x}#kZC0q zfE*aqw9kv`unwAf=Hq5Qf~L=5N4HlydTF)k?bW6?RXdyn!FbqRTw<1zf%p|J2QG)( zsSEe53uiS?n^%AQ*Z*BT(vRCQPU4yH>8CY~e@~cve9FIaG-LWIlBW#m1-cMv47pxi z@~7&BXK8sIMSD^3)sYmtO40&ml`-SEApC`>2ldPz_LJeR^Wy3 z8}XyA^KoYMdBK*2Jsl4kjJH^blBXj3D8|6*VfjTz;TOpze7gdx#%m zHUN_17Fc-;ZrEf9$DN4UB7-?m>|W^c=?n1*pH1@80xvqF7ZzaU3$OU4=l{~vza9Uw zv$?hMQS<&&djInW`oUilj~n|Uk~*)j9^UbYx*;Lrx$43*`t!AwKeD>`egE^dednDs zKPQQqDPB%WD}=_GhvWRXDa|Db(?&Er->+r*N0jLWtyR*yjDrW#`gHLis2X`1Y=AXKtqwi$EsXyFv<+hH4P*J zMu>7=(5BHJu{S_KVXABwa4IN4pJme6F z7%MMMiR4&WChV%pp(`XNx2V%jwbe7^ser&bNF{biU@owCR8_%JxdH64c8E#yrPwU7 zODSiHiCCF*E2qyZyQ>|K+DlD3wrDLeMI#Oxe>eaAe zLgFX{yi4lS4sLq6J1%FKid9kR^v@N)fVrXgSRMX!4v0T83>>Ke(LLuRlNrk;cR zz5{vUb%k2Jf;;6_bR=5=pvA1!ZiS^XFY_WRFh28Ayy~CW<(Y^8;L+yvvor2gSYa%@ zV%hCLuZ%Pbwq;e0?{zH|D(K(Qf8tEPLRKxANLxswv{-LSPDmp&YYx(lu~>w9&=dWPgNjB5rJ%FX_eTP>9@$T8=WAek-ff z#wQPrL|R~Q*HOTw2x$wgkmUiQx5i@Xu^`|TIvlrCd`dXJFv({K7o&_`rB%+WlTTuK)?C)U;pbH?43{fx6B`CG%$s4BLoq*84(n($_?QBRxH^) z93f>>W;{p8oG}I(2Oy6y^%yY>4`kuOs3;%EtiS~95^odaX@}fOPMTm9AX!pF|Mi5N z3ml=$`n(v@h0y9IBM#GvZPDSp2gft7oa$U-#d!f8=J%2P?hct`_?vI?1TGG%Q3N!8jZht2i6n*+e5nh13Rt>WJmP)PKuYHdEoRFnDcQcaij_GQ5mb z>>hHY$}E*I<)C@{?)SvR`4Vgzux(uW3~+SUe95T0``2}`SHBeIQ_mZ+CmQ(hw83O& zpW}I>dWLXtXl9A=v_U53!Heq`58mKTm^$fJbExev^zKEU3%jE%4q|JF{-W9{(u8<0 zZ5`ECrrp{Rve2E<_QX7bIq;qdQYP(5dQ--AB(3Fz@2DbeEhW693Z!YXp>0y-57?i8 zu+e8yEbOzw3gUgGPo^$+IXsyQZ2h9QWPRH5hC;7Ry0lgc_8|w$6czhU1j`T6;>4NO zYC-z1!@67|)5a;G0dsDG)Cm*|Puq{5o7a`y0))bLqcKjqLDmb*b}vi=sTG<9db(7$ zDZ(O7rUiQaKuZ(`{Q+Dh1|9}F+t=P*yzF=_yk`wK zX#@SZJQi62i<6@LmvF`?h|Ia)?q9DzHaq_7rMt94JdHz2CD=#JQw(8jDKCwSMf&XK zV(ClEVV^0D4(WXCnURZT{M3$BEdg}5^B-kFYaIA&ped9?vO1w3&NQ&YYDMQee;l(Gzi&=htW3M zhq7-b(-PQC=_3tsa5{_==@UpEa%#7DWOY%gl^}D=5)SyA4G8{?R7sa=DytHRrJH&BBcC*Cbu-=<(AIv7 zv{uVl{Ks4sY(52*gvxI%rPhJebYyugPV{&lC0GU%)2A$5WLS6oPkRUerJM=MYqsUPAteie7X|!-l%IzaNWT2{(9&av>Y9+lmL1 zcNa}V$jgg2rXYhSUtAwzHrW#hsu?CL!5fc>!?|{x1pHRL5;1QTxeA*Qj;D(JnEKFRRIszeNgG7 z-(-kZq)~ghS0_GT6*wK3$*nt<)aEwMU{i^NlEc{KNGL+7dd6v9R@7`9ioKGc+UlfR zJ-A*PF<|gQNJMR>eQ@pm-3UABPBf-Kc*;!HpltfKB@QQVv6W^kLxycIWEf%8f_{8+ za&dN*{}#sG1rj^lc3vrgn9@iPK~rDxv)G%UeM!&8`*?G1(1kL!n4!zO-j;Q#PQn4F zumOi5{N-&^;g1Tb)8yCDJec5)fJ{g%P0yrpsegT0DKhJyiu#CI6MT703uypsgP@@? zJ$c!|DXGf5ZxF#L9%Mzyuu%o^*Urzl3@csuP1=q2P+GvPA;fN6U?ts19Vt( zut%dzJ-x1;T~$wp&AdDuHpu9-cvPCnHXykGz_#e)0d@!3%1SJng8WSN*HNC8wktm&S z$^}&XtC}fxOQw57rXwSXlt!9<)O;+DUlY>&CsQfG|FflKQCm61M$E4%wYzvX@~=vm za;p1Bd5Nx;{F^KZ1qvn;^kH+N!VjCmS3%b012#G!Xa@)j-r-eAhl*a1L&>YJXaUJO z!v;Yw1Qg=l`rT!$fB;#R3-wnB8Bs zg_~nPyoQAN`%wl(rvG+9uQiQE%`a6x&%;GX7PQwOr!>-BVI^vgyc?kAmVg6FI39e< zH|dT(ET(qu3vVU{tu&u>zajO`Biy)w-;9%|?G!gZ)4p)McGl``pFu z2}C|f&pAAO4&H0tzWsfQKk3v7`{xCcX~$_Kmx`n}l^HgF%@CO2pX#*Ess$NhNSs0A z0^U^-o~_}MXK?2=UoMgS*{Uy}bo!4w>+h_3+`N7LZ_Rq~cavbqTyE#oXi%F6kCTG) zW9;*alf>H){4ydKf5SWR^~1VZJgiMJ!eslKPc($v@}6gxbRN?5Osb{EG5`$2qsoXd zlEh%qrO(2rG!`z)Wjd#C3wikta%$+$(J#S!pYb|-c7g%Xc$qR>oTIc>>bZaakLGuK(R-N5J<+$n%jpgr2%LR|AmSA|98uT2EhUsV zM*Q$?c1#Sq2APf+An2?Pe7H2cl5LQY2xyuysq3W19y2m5vIiCHM{t!%H) zu8gpu*fV?AybT${3@m??OG+j=q@o;U01j^j@@)AN7H+GIe^t@DYxeNGgK?SsmLkZ+ zX=BmrF#d+g7(gxnuGN-&e|5d`HLjmk9jF zKB|sm#y~R(>Wmp_{2txZbgxeqm}a)-Z0MFp&2a{cpL_Vw9c1(@goe-if<96>MD1Z2 zIM1jaQhV2r#Wo>};gPA7saShKi3|craJZuCKrx}pVUJAX-3qQkNP;Ewm%`t|VgEV6 zSX?BG;S*gOIsvIgwk3LG}?$qf2SvR`lV0#o!tn0nG|Fe*w{G!)(mod~Un z$&gz>Oyw|T^`Q6ns%b+0rr(9S@5@mTEPv%8IiRQ7r~7u6);8YFT?~} z+i!lRI@j>}+7Ziz*^+%FjW^bSBT}rgz=!ap0?#Xy*X(KuM&l_vi5xwdx>UjBw^vVicl2wQg83X}u(1`~4%qxv)XruzDTP*jy{$60G z<$^iKD2NPqdYd@-FZL2)dERJ4kSTUNB;`Z0EX%3}la>#uFp8P=n)1K?ZytV?;V5i~ zBx>0P>2kRxhwBM!TNQc9IXt}uKGj6HGM-vkT3qD>H9|Nfjvi^$-i~~>(wRTL3wRuQ5W06|G=Ou`2D7){5PdlhIoA%2*bU>f;bhi& zVB(BX5ca$Jdy%z*(RXTG&oNSij{As8Gv(z0r?3ef1MM@G93_a+lxEO;%n$k}^AP3ivhxZ{>$lM_r>$F*R|br=GHt!WU979;nhQ_q@;E!Hnt zwG@&mQIBc3hWK2zbk20JbnXDfCA~K4aIVOin)~tDc#6H?2hL1k(Pc?$f$h29wk}LE zlLvwrEUNk@Y(oAjxIOXw=-(fcW0V#8{}K8_h8{HS&UR z(UZpV8-kf3;w3gm6bqN4R|1}ODdM8vQ*x~P=){kV6E_m;xE3tA4x9FxpO5ulWcnK0 zUg@U%9J7W*cD#I_Bhc|acT%{GaV)2_*ilDP8k=BhYF9ekgg)c53S0cY(rdk|J5;8z;?w5yU)qKK z(h2QJB-?z;0bmy##?~_i8a96|s@1yqmVC_j$2mT32twYVljh%!*tk_>NuBMn1&PdO z5&aR03_tBqA_fHYUR|2^qG^{dIxx?crrw$dCTzy=S1YV>2AdkpttkoLT4F*Z1_?fK z1`ni{3MDP|3(DMfpy{3LEN+(xgcpjmPwnOsw;iPCZ|}}MgK)fve4h58kdVbcDCG<` zYhG{u!js7*JI@yj`t)C)Nfb`w3s&%|z}J%m4+#Wei!~$Tsttxu#$lbYgKevnS6T7F zdGP`rAq~QEcrbQXa|W^Mh5}B%tPxt9X(1T^=l@3L)G;p;H^C&+oFtVa z{m=se#Q`rvz5ETe?RwHbS<$GkINch-`BJ{|X68Vgc(In744TjTzwot5rt>YDz>qZ{ zHZhe)Ol7#xz%)>GGB45sWXs+o?6hx#ISMtFGV%i%k&BWHGc>W+P>Dm`R_l+gH2rh6 zPMZ6_T)gPNyu9?yg?o2+t)g)}*wz>xtNIGVeqZDlsoA%IkfFf916C!g&2e#rNBvT2 z4fzf^2B3t5_)QVA4zdUXZ;-Ai>_f*G(9Dg+V3ORI|``ptC z7||EA!U`G4!B#ewi_@RDDk|~@Czq#NczD(NI zzqHWJM@qiuNXZM1gh&S2sw#6o`vx}6TeETa2w8(zdg}Ykz<@X4kTr`|ew$|rgksk7V^2)33}ulk`aQ220wY*r=GTK&yr*!jXsJJ|Ro ztv*(E9A~hRz+|RPw~IN(KobG&>9o0D+F+OCKIoD9JjU6$B!#(dJ5xqMG;(K<%RpA{ zSP=3Co$BZ)^zUTJnZu_CCpUlxWT9@dV|CgrEsZm0OvXSvS50E7gmt32R6KcEd2DII zOiL;mj!qk49oK>-S7Adm^aD+b*L!9TjRY?CtU3 z;#|cd!;kbN5PogJ!CyoW@CrpI%^Hbn#J;u31O0Hv+Ns$GM;h79(>yzRR~%=snaMen z!7h(kgJC0>)P_WAieXX#80&74b4yc<3TKRgaP|4TeArO$%L&hkFJnOng(|%jd?R*7 z=F9tkC$(<*>5pMjZ%?ZwR&CdG6Y0&_?(tQqFqB!5zAqv!ihO@X;sgdBbkv_O(5jsu zL*-U<7!>6s9~r*Eg)bKhwNM`>NrqTHVH!{swGx2>K5Sl@LpJ zg!pC!8+agW`K-@LjduBQPYvVJCTG1MoS*HFhy8}bN~T%0zzAQ$)v_p(C>-{TZ23&G zDob7)hq?9iwW6@wEZZUFVj1SYvY-lhFFLgkqP$j#NBx;9zV9@WA8;PY_n!#D7w>j1 z?oonNjCGNzFl|ZOg_0MQnpvqJj;|F7MQ!|T@Bv<;Lq5k^O2HiqGL!wmd1wMfB)6i& zj-uy<9DLG9c(!tpSAcAcPo2P^(>7Es`F4TGz@PB92LBA|O*oVaVj8K$3luD4G>iwF zO0wDKRT)YQ-Zwbn+ePR=VBmp)C5vbP4g?Aw4`slVE!TN1&BLK^jDa-%w&meNJWj?1 zyg|nb-K^vm7ebkOV(Lw~JYnHcAjTPNsxXb3C@5nLG*eK0SZ_0d2&sUH=7FY0c2#8( zINWH1^c>_+>mJ?&)D7XZf*$BL71MX{m>j6{7KtlszD>z#Uiu1fd^+sBd z2EiF)AiYl-f==#}V+^GCX@T^&WTL>!!tQBXrbVWAHib}eLag=aV6z8-z`!=&Km*FH z1%Gsmf%Nv|2w-7z5sop?@D`B1jPP07l2Lb*2OF>k92@W{ht;nzWeg-QA zVxi6oeX&70QwqVnQAwCFgNg^Huct z{5(3gQnia;+HK`3jE?>zDolT1jq-AHH2c*G0jI1ZT}P4_o~~aAzqR_ARj*Sl+8Ktt zLVNltu|uFsv#bEa78I0MN`Z*e*oj?0446Xr4*t9AhAPV>X=r5zU^I3HTV8{`x#}qE#N<7Gbjp*v&kU#U;|V`nDoB zA7zI9PzX_kWGBm{>m<7XU3K-bbay=Dya$#&!8wHzyxIaqEbl0~`2LbFJg7dsO|i;$ zV!0}50K1>XzT9&xs0F=S9HBwLXJRX;pK!1fmJ75t#`X~$6; zDm>uW0Ef(MRHF?d&xIr9MKRjbSY&X08s)r3J|s>q3qi;mRG&w=Td+HmG$Ni;*ifGa zhPLzyVDq;kLxF)Usyvbd^RT;6(g6A#T%uyVaUpNefrGL`ntt2?Ye0PtHm6MEAvwcH zVBpa?Se;&4B|@K<>2TaGcG}pIeN@hgt)PBa93X3x>pd~XK>E}^@V06Ml7n{%fT6&^ z`rPQ&FWm8!R>(-78K*(6ZFuZCgY_J2TORz&67mMs=T>F&c_9~}qyYv7Fs)bV^Qm%) zc9H3u5%LBd8Pv`taPlJc*wl4d?Kw@fU>s{ez3W&l_sxRm45s%T8=Hdb4_E{0J+Iev zkcw9yiS?YqYz@0UF6eRSTj&@A>8(8IojUkCWvb5|D!sqhET8T3qkV-TZ_uGZIgvGQ zTTpBuFtFb713Y^crQnn{$k-tJQoPOVTZ| zGWzTxE+9WM&U|ZboE^6zI*BtElR@CoK6^To6q8;@siiPl5%m4s-~V?1nf|8uVe#M& zlR_1|2w_91e=P9<8v~PPf&F3gn#K@hjUA44@@p}tE1|A~vo6($_07)JEkt>Su-eAW zg(|L>gGq;OFnU%jXg#U{QkE%H`$FtD6-gj4@T3KX!_`><6I!9^c_F-Lts?fS4UqRN zJ8Y=mDmkycF{y9{8pd)Onm(R3diK6>Ahv=d1Gs%h=Vj9_omDVCub|k~2MbSpUPY+2 zN+#!(kQwGT$(`2{skIt7o@~^kle!`}0sD-eDo+F3 zeqx!eN<`jUWk&?-h()OgwFHcIWYf)#E6%Ma&w?b8z`!E`FQ^yPt*~g*kJz~#N)(RE z0DPG*s$4VoK@jo=?F$r}-+8r%7^4j`6G$BD0iurJ4+A9NYQx)L2kj|zw=QTr!waN9 zde(q)voH(78|HWv5D2{gp~I$;?pE;inuqaOz{f6x=F1i`4OKTnuhpsvn0ZRf#ui6S znjQ`<2ED1=S>6$R;H4AKeREHC+K*8F9W-S05-K{4mAAs5s~v{oQ&zLJDmTG#{ucBx zKlQa-A(NjNCSQ^H+BgICSWf@gV*XkxW$Hew>wO^>!`ISC1B@Wtk-67X!Xg=wZfv@~ z>H4M{N?NGoG276`{w=Fym$PRTM?>HH|AQ>cZ|aRS81xa;d-0g^{z)c!5+uMDNodntuU&z{bGjdEi)pb&hb}L@{B?i5%`wSTrQC zo->%-o8*Mu@Ssj^Tl@eKS>}lUP(B=rY?mNqI_HaAAm9PUfcZ6jZks{rM27$_IV?0& zOsJAf(s@?7SNSPt)^i3M$1wE5A<*~A!@FKHFY0tzWZw|}F<&P0eD|$b!oUj@-y(&T zrNiXeHf2XgP@8jQ(y8pxTaYi)U4Fpt&L+W3k#s2N$}I_5Q6G$9+90#$^}0IM`Sw(k z*}6Dnbjq7e(Ji%CemL&iu0u_}LPJ&WnTm@py)KEATEldzu!kes3#Nrs05vIxSI1Xx z|E)Qs@+*qbbSw_9hzgDX-C&H4A?bC^s5u7<(v6Xm255& zNGVnK@1Wk~*#joi=Y>(G?p;?;Mg5d-SczX#AqNGf(dKkOgf7|$?^y*7?%Kda0|T@Q zII$J%^TEqGT8%<}O*N7P7)yQ4j50Ou3HDgf5Li-dgAZ8)P8oP8H#BVD;RckBRtWNe z6fl$b`4Yip6Ap8O;U9@Rq*kma#ddkc)e2$CzMLO>BBGn3lQY^NgXbYbfncGD!x8X- zLe_wzTY>n7ON90zd+FZO$-P6!4O?t5UC)oabhJW7a>I~zg7drbH(rLU0p%{_yA|D> zoF9>+4KmTYxI{c`d5oShkepLd%iJd)&NB)c%l+JDD~YZ|jH3-A2iqd&mK@4R15BR* zOyr@%&|l~Jig?CAawf7Hoz1DD^o)T<3gWn+9_CpEPWh0$Q62}$L(YvL##6b~y2pwk zezz5=k`sRgN-AK+jSRi($gPd9(UAg}+zlJawO;2b8Ai?sNV3hcQ+@*=k#h1)5d88QTB8+&K!SYY5@3!KMLUn>%qA?6gUI~3XG^-1=;gkmSX zP>l4&%S)xV6{B_}c=zn3xbV&eZ^&rShz%6IvH++!X^E}exFPGcT<80Py{Qo_Qnsts zI=HQ=Q*7+z)T|N8%A zuvvDC3|!$D0l^EBOk!jofG>#9LKU1qnwcKXhm{`q%-{>zW9tA1%+^Z^FQ5RvTj>WHFQ3-PT3 zVYT%y*0wsHXhhLIwWzuPV)f0Mw`9?`PTh&VwXX(IiK-k)JULvt&^~f{07xzY`Yb%G z({;I7D$QgYkaPoPXb0$BOEWYz3#Jo3+l52mP2~uU4@J&(fDyV4NiISL*5v8JZK7i! zZZl$;mKf{q+&Mgh_HY@NZEZ3=(Gpr2Tn+Y49xI(w0%weYCe5oV{rArw=m&pIJdMz4 zJTDVyx+Z02m;;k>SBdR$o2MKB0s@&6S%FDcfgl9<4>6~JuQ@gOD<2jX&1bcldJvNNA| zSCXM=fJEYx^WJ}_Uv~noR8{dqE8jd~LRSooj7N9C+IN z{+9^&mvhh*=ek??0F}yx>o$a%I#liuc1g&#fux)pS=8~gN6P?&}q>33* z2EtKNVq;tg8vzf_gJcpEYlFdwBhOc zh47oIpCCdFwS<4+knClRurvX!s2RUZ)hR8XB+YGgVoKE1v5>6B*nwNGI%mR^V~8YW zliVA}IEXgdNvM-nx&z(oHTTq@9FR?S&SehR>VhB+CNJBH^P(-tONzdY+6|F;=6_{~qUrqY65$69#+utlX zZY=Af;H#h~SNEFTsGIyJhgl`5q$6pmj!Jv2ea;LdK@v)k-~x!uVj13|U!l#~_OSby z-O-sX>*;=`_RqsT5CMQpW@a5TsWSZY&mACs0`coEWub63;74j(+3g!B$KFm3B1|pe zSY>-eVm-6iNJ68!cEvG!d173PIyF8<9s{QzHu|B{BaJbpT$_1U0_V1Mi#^(i>(NXj z1&Fd2mW}nwSjlzhvAduX4^x~uwu55`JU!-RqOyug9692uI#I=xBbsj(9~Ew)YBqLe zx_&_cCo6U0sCE(L8mY25a*E(>SPW9jrVNV&D4~YTZ>>N9RD!$!mCQB6TW-zM#IYr=Q z&O^gdkMn??yFVzoJoO$ehQ`I-H5(9j%hvJ8RYD#3)k#-R+KRpdi{1RL zUZ>oPvXuYb{;|!p{{w^5hXY!SS4fUyT~5*eqE3_z*`%3c-29VI?OKmF>#H&w+-UGyO?L>Jn5X@ zn>wNS@yviPD|KP1S)L!c#D!29^(kj`3GV5o$G#%8Op2zg1X!QW=82ykDm^t%%nZ*w zRoVr8JZ%9VSErm`Q!cJ3Cv;!1n&DsnVgI`0O-8kyMwS$3P5vdt+prprm7wuH8x!L} zN}mLDo8(Ft#s+4gO3bHd8c~Dfuj-NOi`*5JFnfkDy8}qQ9L|!RW7cre$Q70iG@{b*5jL11*DZ(CKJ_G}Ettm1$gt^_hi>vv z7V3g8RC2(00rp+kD;3I09fi~+AgV`1B?0XV2h9?9ji97~M`{>Oy>NZMe1{IpXIB!& zU~Cz@XmYheKZErV=Jk#d)~)mMVh(0{k@qejs%yT;yYsSWV&{=jAp2C&l+QEGZPbP5 zH1SwTz%aK{zV=dv{KV4xgl)cjI!#$AlZN8-PC2#8+eM10-? zs{6=c)4h;S$^OWjd9Cb3B~IEz=hXw0JPi)$ZP*G=%~xD7eSxJLC@9Z+Nug?iMpo*) zLv;u65v4DB=+dNKyTc|8?M`2c+H~$Bx2YC2G^2 zk->@dHa!zkUSH6tIS;BJGF)soeJ3g-jt+hWtELNZAF!oHg&Y5)V3t^5siU-KN>f9;pt6_tRWooAA32t_Z|(By8&4M<*(E3JyAtdxOLY}-alzM8S}lGa>S z^D~Q7c&Qw|DJzAaSme&G*n^f-&Cl$SI_7*or69@?|2piIOQfgJl$C-9`dHXy%E%hQ zk_t+i2#FpOj@QhR3QC$=I7+Z7h4U0ewzH6~BAHAQH`f^IZDG0J;WR${{^^h3zw=IL zY=0O6YG}LP6O=S)NQq;(^TnVQRZG}2#RbD9RZi+3KIFx(^$#ojt0*4NVlCqgRBFZ- zCfHxS@{)$FTDiiAu&{)!EQSYT>o1I-+)YN7;)cfB<6;wRxb`Ug!#qJq7-vWAdyaHJ z3w1SPsglno1l2~WaOpAV)|lqGfbMIrPCRfYx}Z9R$A!*Thzk{!g(tQ+*{qv79&Ukf zJe;VKybfE^EJG4HM;zUS`{yl!=`z&WqPAhw-+BWkcH5fYsQ6oijf8oGJk6=SwBS$+e4H-=+f;Y7#cLs-~a;>Vp8(> znw=@PkcTLJF7u^GnJGX4? z(c9PiM)nQPr~bS7e%w9xad__2;4K;lOvf4eoJrT`q~){c2247qJn`u5>v1Fd7U#kH zI0??$ae{Zyf4oUh&NSe3ufeo+4QAbI(0z@k9=&}HZe-u$eBL>iPeb#eZNONMiE3{) zh;Fr5^=NOjxczr@4)XG2T(|Jwe&Ti>4Uk(8hyPA{>KEADVlul6O~Ui^SfP`PwAC%N zLFYN}n=%e*=T54-0w9CY|iyJbA} z#ywVEZrjb922>lr0_6bI+WcAd!)oW(o;?kz4xfix?Z9*9wa$?LNypWkdex&=KmOai zugX>ClRjKlseS9?itgS%n`Ly2_VWt2)2P(G)6}>hb{dp` zgpctn>S(8&3hvPk&#~-8OB~*f>UDg^lz4&y{|!`8pK3v`7#88Bk{K}N4UrzSNt-Q_ z0X=Gzx6)tY-n`7cxxxMDZc-o5ST|4=yomst3OQ8$DkcTy9y_pFPT4DhT4yP*^@pT_ zl4e5sEBUKBF91z?^C40q&MoYjjRFAa_2_RJNi&9js}DJ z5otItI0!|jLi#!6x+{%wP!Kt$ zw{<8*CCG1Gr<+ZJ3>;~E(vxgsY9hbh%Nc7|4G`GI#AH0D8nAef-RLNK8_h|*sMm>! z*YWX01^ZW2lRKxf^T49_Cxu6ofhA#QTf=H3r41Q3LXo?{L7j1 zNK{nGncof3vIp7d*V0CTw&NvwlN)=*4%@2v!Hr-^yjSYH%8u63f?;vuBQAp_M z1wx4vIA`|D5!=nbA-sv3oxqdHaA@x>Rx3s81aYnj3#;9XPCARv$r}6M*Qs5| zN)KYWDpD+1u+5pcd{AEG@uEJSc%}z*oma~&;itOdWhoYj8bG*He!iSzJm%{p5S2J3 z1;)`&J7j3cIPPnRxY)14Hf`k#=-0jD(joG(lJyzzu&=?zW((6*zr^H*qs-ZaAYS81 zOf4#5;St1HBM51Rw|SFb#dn#wqMMGw77eFYFTx4^OrXfHTafqjBq~NC3U7h4#)jkc z6san5@LUUJWXO3nSB&T$#>$)XQ-yic;oWor}IwDFE%^g_$U zoibJumAh-&)u{2HZQQYO)M5D3TIbcJMb~*FRUD~0^NuT`r6J_nI>DCdL;hDvwF)*z zTf_&1Je6&rr(K$FD})B5dIen08`SLWyr@<`c7v$-^W*vt>yb;MrGD2svHRe2>RH}5 zl7XbGNrSKKwl(TSd0Y<^6S^6ne!8b`ibUyu`!?(4{cxfm0q@Qduao64VImRBihowG8a&A=Z z^7-4}oj0Nq$3jFP2&`#fNd+ZMgtR*!bKjjO3w446m)M+!)(R&(v|ADz)Oe^`%~_xG zf>vz4_NAX4YZ2hXkmYFnb#4@+7OmmQVYXSqNAZM#;|v2%K+^F+#9ks8GxtqZZN;FT zMy4ajOB#;53jFqR3#uyYrx5L?%3H&M#jop%8a!wiZO_pcQ^e;eUfL98oWStRgypjQGoS*W~clH;u-6v;ZZyGM~EFg?(zs;*ZV zxVXr=-G!r>w>o*FkGEWnnS>$l5RGH@>u+`xy~R-NwQaS!Ut!xXE)d7~J$ z4XTogTJqKAik`lW+)bs!*+SxuJEHGXy5+hxDGD#lMZ(mghOq94tI5vfgzuCnNy&Lwrj|Ejk9`Aj`QISUInO(!ci zq7c!!PRlGsdkOL8RfwDD^V7S190U?KRH$>$FBPCNC&g z14XTvic`ervf&KqxHd!;b%ShNFAnF$7w8LmLC?@OmZffI!cWkf!q%i+ER!KNm}HN( zQC@W-_v~#>qL+HX!)qffpE2fzR)XbI5CwY3<~cHkxST4-CNhblR3Q;7%xn4Xf}qo~ez zVBYMZ`PHxRFdEfA4bAsIfB%{O@*h!*=QT%CFsO45b{}62!0eu!fzm;^cW@NKYB%n;d*5&O-r3DMXLa#fw$J(Ry-vEU7rW?Q``esg zfbPRDX9gYFhi$Jd=)_tNjChjyEjiO19Ut$lBEM`s<(2gCYMt+3~x z+R|$;0(yf+>vmxDmYKQTZZz(*%S-CF6@8|n5o@jzxc)0oX|}W-WPb3QnDIWLPcN?M zMP~EZCS~^-7hp9U*Ow3e+)-z^=Vcma&0e?y1DF=`Au*VvzCkc3v(L+ul)0z`e822O z{0WnR+<)YvB`oMpt@DDz>&2w;1TyI%{pbJZIf}V~a?7EN#rs)qg1$_?ND(Df(}R#d z9dxw_6}{CW(*>geKl%t(2ieqs z2IEdV>1AaVmB`Hv4t-6n(KKJvp{l))MGh2`*-!$AF7rqFWxr`b)C)AYkH}ds$%w2J zq$Zl(Q8#E4|Lgxvmze&pVtqPh7(m>_#Xfq<3uM_uS&AXSTqaCw8#NWMEpn-)HvMW0 zLQ?A+gN)P~-=&8YLh!E7C3WJdwT@vjQJa3X`kB?=Cx0cJmg;kUqQ0AJuq$p_xLA%R z_4l9uy!0E-CI%B7Da8t)rvwR1xRw;iI7s+BO_*~0 zO1f+@0&iIPtCN*E+&gpt*~SmI zI$QP_L$-U*cJCcJ^6cJwb`67vO_TkyIP1J`#DM{t6+6+XLQ<65cAd%H5dAc zD@0K`G>?|3qki?^ZeXpCIsHPExS-0RRi3EZjCd*#w5$|*^;h{e(Z#wXm_}04g7L(T zI=j^ggtZ|tpsJ!}aBi`kZ>k%9Smn_lKjY6IKZmgCz$454JHvl>@Pvu4SdnEam>sPs)&@66WHgCx5b9^e0gEoD7GSXWNm|&IJ+xN*-CV zrcHR@NWzS@AT<~V20qhKW*#N*=J}y7ACF?tr$_#XVtmJs634HKHaViOMOk&&`e*~H z5k0AKk)53Z0%Qx)07|ACx-F<0`hov#&>uej(Lv|T9WpxfP;gr)Mu4a9b$V zn+bx@G^t=&3=_l7u%DH2^B7aTV9U1HB1D%6RJBS}(AN|vDt z=0j>Qb_UxD3)k%^mW4b-=@Um!4@fGnqDV@cwrJi-G=P$4j=axplfn+$Nt7T__UhEd zqH%H7T>{Nj3NSI5yNi0zs#V0G{-kb8K;zbrM{Fu;>}Yb-tU|mzCyS`WQH!`bhs;&u zv$@{+@#Oy|6_x0&_%SK=2{+BKrm_RNrIoY6!u>WcIjtbA1hqtVC+$VK5u_F6hRDrn zyYMIigyB+%I=z)T91ZHfC23hEh+Bu?_FJknHN>sT7by+ny1Q@d>{Y%-SAHii5aL+A zS3LTp>rVeyxO{`h>6KqjjUst2>2bU4Hl$s5{J+ZW+q|Mq=J}01ChUrH^eNsZr|+6x z1#2%UTTTMn3ti0Y2-3bn+Kr^iVimycdGWU0tyWZh{;*$Cof`d?oReagZz8N+eWF_4 z;--VECH>TQ`*+88b+SJyxS;xd|462f4jFQ*kFz>N`-;19oZJIzBV-F^FTvAaceVO< zo?dfO)Xq8BoGOUHZg+ILWH?!R#Lg}rxo|Yu=h;hAuk>j>tR+4xN=bX595oN6CVbuu+cvH8T;?S4#6|!!P(l{|Y>sNn|C-4})d^%T83{yiGhLXwnB{hQwe@kJ>Rc zF-NRJQA(noSoJ#pk{8tyOJgDXq7bKJDDYVEYI$6PMogM(V0p&Z+(f+WamGX*R=}f9 z?IPp^v2=_2pc+j)qary;NL+_CkQz)IB}V9j0~ke=%vbGeo}c7KTOsIVBfnho&kDJR zsgB+yeEC^+Vn{Te<~iasF2__ocq3upNZbeHCXO#@#CUkecLtZ}z}xZnOHNiuU4UUA$O9cEoOsylNRO4?Bc`P7P+MA z;T83q!(`KQTAEcBQ{#@ywy1=`bA+J~c1gUpMJ}m&Bx*@6W+fGrG!{~k#2ic$TfhN$ zvQj5X&Gm3xYN?|O>KS2Ym(}JF?bDS_5tXo_4_DLqB~wH^=(W|?bB=Y`Y`j4X04i)W z0Kl9>c|*lkCr&~_Vk0SSXlW;m*q0i_hmZhJ^2m}a&c@fa=%Q*im&hb}v9xItY%5nq zr7cwPXjATqsFKjecda-lh|Z6kWgI~`jELf^#C&2iN}94NHdKw;?yQS8j-BAW8nH%D zuFrqgA4>O(Q8Qq5dZ<5~9u%P-kxjz7PVJ&WSx1Eg( z$0Ip$(UwBBxunL;tn5x~%8|+-KiK4=r-VV% z2E}GRsyBH-O+I9PLn(DB;7GXu^g!phIdLg-D`%ZD>Qyc#fcEDMJ)~WV-6OJ^F%d-< zZ<|IhH62oq`#pVp-yzXJc}5cE`n@j*jk?U6BHky4rwy?0hD9eSjea0~8&6&YdnE}agkO=V@BkoJ0L?{z?J&Ezx$_kMP!lAl^{FomH zFvK6h$FRllT^7+t=9J?fegG^OU>y^4tI1?me~Ob;n&tcRDk&qP<|TDg^Af2gdsLzk z^XUXxDK`~*eMn1r@C2byPw~gE^+vA=#*}0R@M}&Vu}xD{!lI^DDDps*E_4e&7$Lfe zy{Ba~xbxJl%_5#%-!_st!aZ%Xe2L@^{9(rcUEXYnZ|ffN)@J!R#!~1gXw6{Bgcfy< zGSvTkU2l5zlg577=!ZRe^YhQw2~j^`+7P^x89Du|(T^Mb*y-nu-aDCz(=Qr*b0{-a z{phaIH-|Dar*AH6)EvspoxZs&QFAD>P(5{)kTogC%_Pdlh!W8mDUfP5 zahM0G0euuXt=&F9#JG&~rf%aTIzDn=k6zpO65(CL5NCsNZD&Hc2^6mi4*nom0JROw zjRsV;e$*^i^qN;kbT?d%sE_8NO6<96#g(Ote!>daX7Vnw>je0f3MhRHbvLPPgf#NQ z33E%3u$&kRA41j2SBd?YDqDK8*Ab_~M6=7vjVQ#4C8EySq*;vMOBi?+%!kxq;TbH8 zG(&ga(G?IfDsv(4>5B7c8a2-a^C2;q4WT@nl4`<)i?-yelk;`$MdQ(R-=nL(M^}B% zhxOmibT5`^RYuz)<@Vj*(l(;(2|Sd?2zRKUo-J0ybD-Xj4*o;nKVAIZ`D8&g(;xp% zq%R(_CCNt?c<-@k8(o4VtkLn{_2AZYdN*(tfU72)ZXyFI1lhv&)Ye5;bbTtS&=3!6 zjo@DGt=C+*kEdV)~sHO0s{ zU5uv#m$)FxIW9=C-g9zXl%jo;CwD%jH)oe1o9w|*vy~(9(#I+0rY*x!3$}JMdTkIa z%PmnwJ1$!0yi3-u74g+wt-7I8fB!voCVt|76`e3TV07S6`Xz{5$|DRYc|#4VjQW)` zYgz8%hlGo^BMVUs3NG4`s`-cNK51@nGu;Q2DkqMnTz+V{zO2-FNKMuOGilClVTm>}Fp6G`;Q5TY z5>~BU24;l)huPRZ_j$Zpp|iVdib}B0ArETr5w@E-jij`(-#gFLmnSOGK6tXOP#!u@ zQkwMkrNVb5RnM&2rAf6MPgLUE5=)*@cgOQYB`z$HHyxz*scHlvP3}BW!%+2f=xS?S z1SN8?CTfnToyeLOLyJ)JhkTt_Bnlv*&+gdIiKo%2Z-UPkG9(Jx0@Y}sM(YY&PVm`b z*@;RVDp3{)$on6;9Mqz}s8&ZKb##mmtAf5SB0Euu6D4AKm95kuswA|t| zmtq;4I9tYTFk;Z!%m?_@{21Vqi8!WhVBn}ad*}4hl5AvUjyxZB^Qe=Jx0#ffV^70} zAGUyDA2qU?TbWm!PTRks=`6N>Y`YgZ=jswmzqpCSO|?=hst^ta7v{r7*N*F~mXWKt z=A%2&8k;oai;_iB+C*vGbKG+_0E>8lkh!*F@+rY8R<5WZJ5h-^-7hg6Ixp5XHw0u) z6e1GU*>F&WR`L5i@5+ogCL9K@iEvdPxH@O%+qsIqovRMhywuYiFG!r7cGM>RineWh zJQguMK3V;f#ecH+y~EYgKHF_0}XgOtBY>6*P@85Q;s zhl&PQ(-|{z6Ib*mU@LyJ4}}#yxR{P6V!B5?D2*)uo~+ba{S!VsS%V;bwap2TM2Kh~ zOBW1_PEiqcl};xv@MX(0UI9^M-16C@;Y3h~wCVAS_&3uR;=Y;tW^Q{b9J{1j#Awx` zMk_}ibjZs#dFjZ*4tdiiZycE;THCnMyaN}+)2>3I9=jf-Hb$RB1KK)I|;( zWDE4p^MYP89xB*cLCP&kbcI5-NnVkcbyc2hkxQzcH(0bsAT1}Fy^E{W@S^943nEtg zqglqQ2Yhj%uA|E;-Z;MaHK07bve6GVSC+-o*KL3W?>I1 zOO4WUZ&>C}jNMxio?S072z1Vc(9o24U!E2>P4(ZUNo9I*D zJGGQNDkMw8*7MK2C4s(4`D#_+8mIUpH^Plg(i3ro81Te3hKtU*$v9mhHaw8j2uhmT zcge(C9^aJkAohIbyD$jZz-@5ahuj${xwj zMjf!vn+xR0O4UbcU!8)N+LM(!^{H9n@iKQgC-QMN&8~Fy7$8EQ>X{Y^o!K(g;Z0y6 zqy}SWaNtk6az#>_{;V=t6^R|>gWQNp)E`w=CB`&T_rrWZ$TPWN+!VLVU~I3i5+}RY*m(Lc5a{3)Z{$QdO@S+blr1mA@Z^|+329nb80DeVX>RbJAq|E z-eNlM*==e3hj`96n;Ov66=)s|$X{EJ#hl+;-uG!cE+lAKDGN)n5$<@slBG3b$h?_o zo+U0umbl^iUkBO=2>>PYqnO*p6W%w>dIEya&OfnwN5Kqed@q8$IWCG_F&`Aj|C>M1fT#aZ>->gLN!!H~9Hw z29x?%4Civfswl-CUV7l;Ly09@`6GR~dQRXri{8Uc1LNziFT0^{dzvM78wcJ^2wGOk z!cyoTYRRH#OQNO^JgdueyGP)^6?fE9j_&CrN*`GIBb~-U{ApP!LrdXAyqq~2Vk0SS zWN9v$Eu=8B?E)zam~<@j*!r<0QBQI5DH6af`J~g_mP9?9)TxG+O#Q%;iy@-Da4t23 zi+?~+MQ&!9cugOOCHAyPY@Qxco6~j~U1h)B*8bOFl*-CB2 zrN6OyfyM1Y<5xVZP?uxh4>c~WqKm8P;)3a^-%`eb7Fa;9hWY-OoH)Cu+IWc42aZlH zL~m!3nzT?g8}^$uKdcR_;YbbFX}m?w>U5=7*+-N8B~Hc>MytPxE)Eh|sF5x)-gy*pH>L}4z>G|Zs@WD)HNLE(`-W&_m~FL%=GIS# z_3uaI{Enjy#(2=p#Q<9XMgpqMsQ&$3i~g>cN&S?c|MvawIBM==5Cd$;Vl?1Cy4Z{G z5pxk=<(R|=7R(PSDQV0&wQrSi&qY;FuBzwu(5o}2CpFt5;gEgXRD)Q0+Ni6wUdE_b z4jV*HkY0$D(x6W=zMBiqk4bq_mWo0{RYHn_-!p7D%!}+SkdG*RpmemvZL)C-G_q2M zO5G<2UM!LbN*XDNcdj{>N=h3mjov*zC6S$|#EBA5$)1|_-U)hulBY^O#HBm5Eh}Z_ z4ovlvdlHL_BNj(RxY0k&TPOZE_@k5q>V>m}XJ)z1Ao1{+LG#-T~v zwTMH5iEprpS0P;hAd1VR+Q{8l!N(13XiTq0t;fXqXO$LEYRq6=Fwm#* zdZpv}jF+NQEwZ7yM9PNCZN^2yy#DFe=^YQeP|0Xf)YShksijoyBTO2Xr*o0W3UOWK zeL?N5^j;u(2QP(2$S>Zjh$UC)sgjvBp2kc<%?P5mmg4a`Mg2|c z_tbyK974U+g6QZ|zRZimIXj-4bWd)?{Bnkjvu}8_^+{_)p(<+ z-n{?q6Ee#u+&GU~VYwTQxyVtEc43!|9WHiQZ_>QA7d>3Jd;Z7^|F_6cFXwaReO8DF zLyckdK)j!GjV6AlclD=tNa~Xw(x#L;HF7tUR1qTqD_4=6zmq=g$fgshOrR2bYBq3d z{)7<42c)m^L``P3z^*l$03&|Hj+@`KAnL`qzW@3A&whL2ml$1QY@&_PfQp%5t`S0C zUFvH+b8**SdO_#4k}f(} zz19B46Tp7JGAXE$#2@>ijc(=U&>L0MR`uIQZ?cbGZciP(eV*38{r?orC7}eX&f^Q@Ks{^tNOAVspZW;weGGWuB8Lq92R6N)8WL8TF7H zdQHmfCUQKgJ~%kwQj%~SOfzw4w}*!6sI3-1)XlOPwBs+FxdRJTY)75p4ytCO+9m_B zei26A9u%2BT9}wnEBr%|?+#5^WER_Dk{8nj)$(ydZ&VT=sQTqCJm-4VK|DHi>CNo; zX8LU4`gj_J&vuc5n0!PVI9hpZNL*IRR45WQ4r7Lp8&QcfB_62@>1ZM-NxP@~A;2!E zweT8QsSBl^)z{hi8EVH=cW+zKNlMe6wobMRO(ms`TeMbJy9=u!e)D6VJyM-&6BDHc zX5eEvmQ|UqO6*5^{qcQFPkKBjDNTPZXVr_PSFeJS^tWay^_dIlrmLVN{iPh1*fLyz zVp8jX!#>e-**BA5*y<(feC_mH6au}Kc1a$q4#^kY>|#7XxzY#oG+c-FGXL}cYi{J- z;!m%X%c3F=m?tY$F9l=_4+gKhoTNJ`fub&-7&kuSLJz1%G%a28} zJ;VrmV3|%7;^MBpU&ZL5?UQ93JtWBMfwsG%c?hf7C@{ki0iqPdp;-f~*(5Nd`ed0D zr;<9{p`ov^rt>?D#YnjEU0U$hS;Zu6mg>#NQ@U|$8#av!krzO1F`w}G0yVV{)ybAn z5akSq$SarIDb14o9?hE$+O&D*vuQJyBhyLAhWhXbHPN)>TNKmBx#%!@qsRHIMjkc^ z3D3*I8u`InCN`(1f!_D@@Dx8LwiI#Es*$P?&HpCuKBC)kz$-6Qf_JtT*cZrp5V{NN z9eu3Q+`fz_#E3-TAK-nk8d4j5{fNQTb)*4nsrI3+06|5g>#D@T@UD(aYV4it2EUdQ z-o1#2!Kd^x#NCM6M!X4tKCsj=E_Zvx0>#zt!f|sG7GruP4-aQVL?Uky-G;AJPjEJw zd%8}2xLQ*EDS@)F?-0@B5uCY}XxRZKCX;FXfD~=T6M}b2IkG~VVlH#2qQf%roGXcl z=Lr}v0U~5xjZIG;wnjF~EpUGo^+7SB7R)^_f{p3pRz^z%_e8bP#cY)^x4@3ZW4I37_0 zeu+GA(LP2>OOdRgB((C&#BAadFV2fNYA2v5goICDLrH_|?TWWuU&S5ldcC3DE6w7N zaNP_Mk`X@{lkYjb?o{teT)cy7x(YR()bu#-sWm~@EnTa?WuZ{rwaO|US<=-xB1ge; zoq%ed=T7TYj*!pvYYHw#wkY};T@8fCD-h{KiX8Q%Lok;Z3vDl#rveMv>@EyxGKZL2 z$ZqoJbC1R6UW;*kpJCI#ALz{@VM7C4L^66zu)PsOfPU5l!P~GkMAT=u6~kW0ulQoS z{TvM@2Gl{7nKWvXVL~b|s(o#z(0oMcbJE%Q@F+e}MR1}o(`uD+H_1E67N>_I4u{i* ztn=8B1Q0mkN!9QLm=;9G`YO9k)`QHfnNDCw`?I7Z$fyalq4oxM1}*0*MIA0c<|Khw z1cP-zhpn9y6x_6Nu|&(FpoTWK)h0_);A$6GtLh^{o(g1~{1apzmbryXCZ*;4wCfJ3Y3AOq0N_Ew*{@Ul~GViT!UUW8iZRux+ zKmULs0Qa6ieNn4!2K6$|vYZ|S#Hm(+%R=Gy3Vle*hcqgZ4dOMZ{9UPta);!hOtFcO zz99VAlbrjqGO2-=6x*aAA6Oly&FTPkpc+y4D>X-|QR0G1Qc&f*UedWE92e>ZQU(*?fCMV9bd08C?9$qGWE8ihLj zS%S@R=xE_{h`Zy-%3RdHXu<`NK48@XePM@d3CPAWyGAa>Uk(|Wnd9-mO3TrwV zEa>q$Y@0z_NUbqkq7BFNF3{?P}DjhjkCPP#@E4zpUsnq$`_biI$U0?;#eqy)Tl(fon?1svZLFbhui`s8PSi z^Nj>T9G<=vthk@jj@wD@X4DwZ5;Qr|f(}&Bx$~lF22Bf8n_2zg{?GcuyZd*4zH{Kb z#yYo(y8tCt? zgZX=Wh~DShn3`JVJ$Bh4)~cJl64K)}QpacH(WAHdT-0{Z?zp3VVk|-=k|j+BL))Xo zQY*~l+ikdO8!{qGk4>Lb7^aue@2$g)-{h`yaxZmZ2dcX}AU9YO` zpr7>u2j;aN=ySNTbF|49gg)HThdw^W9MjG!OjjYc^ikIy2(MPI&`Ul?D^9_3Xmnkb zI+%J6$|EQH<3Ys+4p23lTRkFn=)%V^OYbhiS2)rlc(yF1FNBzkYg0ty11bjlK&13@bOH5UH1f z)+P2bV-?ZXN=Bs?>pE$0ldHiEu8_iRM{N;ARmzP`?67kA_8L`Nqviw4S?BZz6DXxz zY6lt*RimM==gozIi6TlLc{&>+a^*WvNa8AHL6wtUlFCxeY%e7xb}ckwKZzK=;4Hy%|pd#bm!^aZcfi6*x^YAW86qg zj;ydQZ(G=nRn)mY7%vbKS<-PXF}p-@KBL>7mWG>M63|A61v+>z9xz1{D~qdj5?yNj zhw4tJLHwY?%Bp3=0jRiWOQJ?4l_Q)?R-J6{#8vJ~N*mR9{I{lv&$d*=?mjKXFk0=N zcIh!{Xf4b)m_S*cwiTVYEk?H75I!*a@j1pN7l@0y#w@KlQlr2Yxztie{p!iQ=CH*& z(xDMQk`DY}VX>P|y$s=Y$3$4MJ8hp*oXp2|M4KN|`3~7nR15V!Omoz^`9ae6Qaz7I z$5h~lQ)77j6<63>mRw?*9_q91jTb`ff5`#9k^g~j#5)aaU#x>Ry)p!DWp#-Rq|y3Z z?vn$iUvpFieTt;HADH7f{8epvS*VR}f<-M@>?v)amO9j4cH?;Qo7|Y!_`zo^$KtCB zygwx&7q0@{$AQX(DzQg%mUq))DH&4D6p0%%nIriqRbqzTw1+H-jyX0=@kgJ~sDp-9 zFEc`BQq-5!tfhV~UZ}rxo3q6`uoz;&Ip?e6#M4XaHcNxpf&r!`)Dg{#^C6L4Xw|+6 zt5@y2y4X{S3!X6J!N;eZ`tr$_YHh1(9)k=pwU`GMmzP79k$u3Nl?KawE zv1A}NPE_8g;WZSe)%?QLM#23_IcF^ao@}X$J5HVJ4<)R#?$)4e=~o-H{bvKfl7bB$6wJ+7xnkZ=+676*RCYm*|`2b zUgl{W6;)Z%`)Q;}ECoE7sSHW=Jd9gU>3`C7w4trJgB z(uiP522v``rUUsJ60z~%aN@k`vS5i?=1XMGwQvjVnECo5xz)FtL~o+&$MGipW8Sg@_|ZwBcGrYGSv5Ga$;YdRPV>x6nMyK{+lFR!7e z?}}oHkEzA1rtc17>Ex&QaJGV!g+jgUbUXvu(?AN(un-?6IhV>Q)H=n}1{-IjYZ=-r5q2hxUtseQo z?aO{VBQ`J=qqs_r6+O6`&g34y=Y#y{|SDdMP(lC8f=3bOq2km6>;6bPwfpQvVn~7D@C6 zHodHKoTEH}b<&Fl#rRu4o?|ZBLkGl|R8ig9u1#05c8C{!52UzV6=|8K)S4TZ+ z^)n~pnRky<^Nfl{ilV39)+VQ~4LuONHG)3;S&sSx=jbaQ8eC1uHGMlGBpKrp7eqOs zt6wBZw85egi~>P2P6}DqNz)US4^+#`2-e5FG((}DdS59n{rKp6lPrywMnoZTLX?jytoF&Cp zEqfGdJnK@>!zjGm?;V|2bu|u5FY7H1ZaoG1DsAcZZ&Iw<;Uxf)i%X};NPAfsIEmiq zWUNV}Inz#peobyy^eg_gg{$Qxu-sF-ntv?)yTyj^mWMvQc%r&tE34+H6}^)DOdq?D z@Tn8=k#%`isl?mVOF zKH_Px6GzHoppk`&-0?+>d5(0uO$sYWxkWKoD4Z)C6QoJr}Xr-Sy2}PdTJADZf+}Nl+39e?+^U?XgK~m zm{4={%0F81~Df$6eZkv@kK?yrOAgmV8H0TzdCL)zKyO$fo?D$2yBb6)0B77DU|Vb*<#*gEuNa?)YUv-^N@hjdN_CwKmY6~t!=z_yPSH*H)j zIpb!G5C=tR(=FRls5TeWb4`hStO}bE83k3^468iByyTi$rRo<40PgAw$ zTj|S6m5i%L-m+UDBA&hLo-EYGohAuBo%hFBocf{?2QIBKhK2G&;;0^=WKC_WD|~Ef zTPG<^Qrm8_n7(#4`hF-XadInh>L<&!4eeb^R;nbrmBB!JfuyVyx#W`Uz?D?3m-&>d zJ(sL{dM7Du>76e*-J&ZhVbBvLt$CT+G0Ix6Qez(Va9(Kr@`JmKv=~i2pg-Yq%{G9N z$1ck*HeJ#8)TROE6uTaxbWLK5&;>T?u-bcwlBc5c#({<085y2(iZ$q@fy*;#5};O$ zdNgW0?>9bQFl~O%B4l*Vv;&Lbz-1@qz+{rj$0q)503ma3a5;2N-F9rU-@A-4z9#iG zV$JEgzhKHLjHy=cD%8`g>eIB%qt}_!xu@G5Vp-Bh678Af#7Gn%%AQ#^21gpElZ1t| zwds*}m|&?>v(;oUoy<6AWRyQ)Z!4#dd~&;7o!VSbPbc+HzuueE`H1c(6(cFCeu{j7 z94SH8CPlh~QHW0c(5qHINc>qGHW{Z@JVcx9+)|l79a36zHbsonpAag<=3jJTi}xIj zT0wb%)d@}I!18yUnUjWFK2M(A-AS4kO`urra(v1K^B^@CNU9Y(ld^t_i;Y84hbY@7 z9dWbAvA05~SD`C}$aGq#tAv_wbZja_Tu|K%=|*;Ee3_%iD#I{INzkr?sevTf;K{dU z)e5KM2%*rx&H}!`z`WSP&JMol5I0*O%+@;P)bhGy8-Z$V7rRg6b+9@3)4H|eve=zZ zyFKGQuo{kS){m^(W3^9~ZY5F{fo)7pCXy%wwdny57Ip~Pj3FVU21qCn@9UrOk76!+ zfEUtcotAmAc9{wKG-A%tnKq~evLsqkYs%oC7RHboj3vA}f-!S|pK{+q&ZRrMsl**m z?V1Sp2Fb8aN0+uXuMTD$KieCP@VjCyMXNV9<7n3iF#d#A_=!G`*q6z%#{)#^h?aJU zWGsw|!Kj$1%_a4Gz+uWao2>6V14a8h=Nie%?)pc5*5pW?QHf^W0@X-kyT!avDWV^h zKT2e+5V8jII}L|r7dvDAIL{;=TnMQFN8>7D6ED~Ko`+yK7X$_*S5=~PU0PY8A< zV;_4}T15}8rZZt+H5s0UMAu4nVYgtaF*6;)E6i><++6J{>L4e!Y4ca&qTUs8pF)in zmeTC8X{P&=j;hg!xs5hhU?S_ttA+gs&Bt5M+1$n-q?5*uI}S-}6J;V=x1M&tN*qxA z^A~-Pct14?-p=a5oO=I%#ZM8vSr2GQP}yi%8I$_2ely?&KFnKujO$9||9nz8mP@sFO$XAC5dpfLP zVf|jN&f$CmFzv_NIqMvI+VgHE*VAUZ$ z`&Yt-!tPOZ?1}WR|9Fdo=yeVjcU)PR{5#BQ@?JtKJ5h-Pn=d5GpCpY4N~#=M?5C8| z%vik$EsEJa&$&h!1#TkVG9EAmYVm)18U0r8V?7)6+{BcNN|@C9ye!YMbk&tz(`3Gw zTCxZ3qr0yx->>zr*gBec*^GHnw@pKn)mM z8%=IBpe6=A_Vq7++<*2l(*dbPO&!OQlW8Qj{GA9b%6C^u)B2ZlPOag8U^Q!jD32B} z9-!Ps{p-6Q-r0%rUw`l?%oo(cM@D#W-kqn-6pMUNOs13i*Z8o`tFPzi`{Xa%+iF%H zs?PN2)WaOCZ9<*GLuq&0ZK-apGB<74s7;@`&(C*na5Nheu}rpAf_sZlb0T_i=ZH0_ z(U(A+l4XLRZam|4wqVpo#fX}OS+Y4rvTUZ=+HFTFJY8F*4u*Bdwr*Qk^6-wT6JpT)NvWGwaGcM&9r(@Fh=i-m)GrRngt{r6X{15wd<|J>) zEsuV~)dLJK{|e9X#dGgE#G_xWur=Y7ucAH2_|(Y594uyVJ@}RN}B+R;yKRgf7V~8MBa=?h^b_A3utZ1@hr^ z?VLvKC!zhG7l7EMW%SX1K!)+q&jp71n_l+kuHFT2?W;SV$wkWIWy*J+U5ccnx#IBZ zSRyECp`_z3F3tz+cND|}gaAiDxW2r&Q!+XW6=$=yKqD*F-Bv8eOZlg$V;@oas19#y z-yL0y1-3K6)Rky{x(_LRQoBoiSf_S1s9swKD0$|tL!8B@<|2rsGHH-;{F$TL$vg5^+iXTXzHzg;@3H%D*D&zT~r}t_bHWDq9+M$LZ9(7 zIsr`$4YAXmYnbH?RC+5o90+}XF;~`Pv+KakEPb!p>UCDP9Bd(aj<;s#{!8kVC40d; zuo%wA^`0txjVdH4mG++75`Kf@6S1M-JCOj$KIAs{$%3bpD*E>+ql$=-B;^q zi9L!`FiW>tQFZ;Qc~b?K6%v!2F4fS;M&Hqjn=w6_vKLw-^f=iM(K8&)hFni00)dW? zlkAI1Lh2zRn?sS?8Bey!z1dG93WC9b{$4QokXz^%A2%N40mK*L6TI209(cV)REeS#p zDv2m^2V8mr`dE~D`vXi3MxjBA>u7TIlhba`+nwzxI!S30AJ2caFW{di7306J?i_aa@?Z}MBbZxLfq?t9;r9FLc z(Ka(3!mG@lJKU6h*Sm<54AR$Ug%Nb5PVq3~z+RK+CL5~x5qLATksrA>MWjV1DQyh= z5jk^t5Q^$e>Y<~`Ambib%_dBUS1S&%o2(&vlG3J3TjhJ~VLU-_Wu?pl3X)~S%e36v zQ|N=$aL$J7G~OQUXDdH6f|BUU<%dHO{g!4$evW=i(rw~BP0$&uGcBEXz{fF1lBs-? z@(+-bst4EALspmE9?m#_2gZWwpEcHYJoqaXiFgw)aNTcVzJccpC;dj(_Ni<|wpjt} zVAcd%M&G9=#O}ZxIu~_vT^Zy0`!xDkZL>6?)~;VO_;~wdtX+@#1xB|YYk~y>Cq#ng z6`>;V40+l7k|`<5((k8Pxm(*c-0}wUbW-POX6RKy?nPuYlA`EmgF0WG&Y4-AW8}0e zxchIh5K@Ct{riV|`agCE9m0MobK_FSxjv(+x*9R3c3{qF#&`{C=0$E|xPw|V?6Tw@ z2vrSHija}%CY8hthYD#E>)%!VbEy8CRjZ$IjdW~S;*IocZmIVWk?ueL{5e8hgbAt| z%Wa*Y9Qy5;2cYLZJELf{tOWXX^i)TjdK@L=l8}>jIHeyUJ85`{R(hfum+oF(=tiIb z4$b1%*_l4ZZHBM4d-<8pK#;aNTm;Q_#IXlxGc=+oB~g#=?DeVER%@iFYI^25WOtlm z`~aQtV-`Q8aSMJ>SncR$+jd)YER%}*T=uKq1&fO&#;RXza{Vyl2|ewH^J$kK&SgnW zt7W{R1_Hpe1F8*Q;@<8T;g@?~(+RHb2?+q`o4>N@!l)5yu>cYS>a=1C#qdIUy!~gE zJyD4xpGaT)hUPy1*lft8a+ek-F4~f)=^OT`tUpDLPhXx-o6nu?4SxO)>-$h3$PNwwmBOd|Mj=twi zi@zj@yXjg5sx_=NEv5NRMn;ub<7!V)wTY1kr9JY@f(W}WF@zB7*f#E|B;WoRMA8-Ofv5z^;wcDalIy3;)XkN>j zgBnIg(!99j;%5}@pLOvu}g-HxV`CBCx3J{@>heG#)M=;P1CNZ2(sUl4=JF~Ap z$zRowlN5PDZKMDZY_I|4(5IG8G(8|h+TIo;E{cAEZ`jeME#LrhJ^Y7*}cDTfiWvJ;g!alVmA zW3@Z)@%6NxJw)hZoO5fAsC@TYIieEzZq^UX55!2h4el zS1aB?>{8(D&q-!qf4I1!4;@9{z|)YKE9zfW{F(DZ)UuC$RcIc)+J3|&Y{9j=T$UVj zE%b0v8#;;J=w)nq$d|jqlUrCrUsmd@ZYF6r`2iJE)&sc}e~X#DPFPQMuyLLDO%t*M zs*(L&hRz!8o-AIXxk^X?C|OSbfOS>$QGZOR3(s*E0C!O}n^-f+UWmY2=zlQS#?)jg z7t{_P@!ll=O84QRY4jS?S^GBnm#~Y5X3>Rn*i>yGr#=nf4<5vdXeFjZ=c(Le#G>EzZYF8(N)Tfy=>wo z{^E}+<`)!`0pBzP97D)C`(08wN&K}d_c8et~(h~MSH$%Kdt zCo{q--XdNuQ^a&W+QoBnT5Z@rS*(_olf`ysyCBE{jjYt6QaP~#R<;Px$Vwe4)dqDs zW7R)S-=Zy0jofv^Hxk({uw^t!abZ)?aM{a7gVYT^!TXdsX1gjGAXk>ngKRBr65ANbaLTG& zrLxM&a+q>~A^wJUatdq_udJkkk_I8Eb*3Fu&4yy;B3|lM@Bt-H?C6Xg|DjSd>f@BA zUpc*IIlX2{*Pq(6_+44L!uk#toz$Wcetw>1Zlf`t-gL;ztc4uXE)|p%V+;j|&@tHN z(ba31#udTkTeK!tSiooi$TX1f=?h1n_hq%kp9p_dF|Yqf zHf6PM-g+x{rZN$|rN-GDPEmpg0J_n_VkW@EVll35_2-9p5~LN`30rcZYR0^ab_zCZ zqh(a0cQD(J{nq(?OWW#8N%k5{LA{6?P-+sc1#Vd&H_bU)xox zlY!7K?B?~Az1w-QqLR)KwvTpZf`vzKmI5mxg%W4$JhNq6RKi#YK?1fF(n~Vlg)pC_#CEMYW zw=SdQ?mGF!?#wsxH`dzwV!hXBFTTK`lfIhl#ZG$b!&|%z>~BY$nxf3*VyUDg`Bb=1 zC4UqAZ{=`2@+mekb%b!K0o%vba2yzRO#<>n?i6zNovF8}Tn|v{v_(zJHaBgqf>s}E zqzp>e`pl@PG<|V+@sfV!3Gig4%5%3&u}Xg{b}9*Jawqr}14R)xq_qtRybG%#UF{q@ z(AG#rxtCm21W_Y9pQn1tM5oYyu#P>*G( z=$KB2H5xeB5Xgp@PKXco6_f@e;%O(*&%$Hc6_)xP-Rk#7$BpOl&7N;{-T0Qp8P}jS6RIu6?JBIKyQdEoDgpMLX2U>;g1X*P3j(ux;l9I-7)-X#wa z`kXFIjwi{K4_Liug~$rZnT2p*Ae_ap{sYnR{}IQT4srsBe86%?cjFpk*?p@Z8NaXu z5+jRZh~eln-*FBkjAaR|=)u)=PK@;$v7!+Z_7v}_2YL|91X$bRR)fK~{*29Jm`OrV zF{)&%(j@<^(jJ`QYlhJ+hLig9yVjB3^$~|tI`PB$F-0tBlp4C~LU9i|r!h<4g+`EH}$bVZNR>NPeu9Eh$E z&m5VUQ+ozGq^+h$(Ke1=VN4Y%T_=p#<1Yr{LrsrjHUv^0;)jG)wiGDMCGCh!PjO*& zCpY>eD$}nUGqlXAB-$ay2JaPRej8H@I{6%Vf1))tidN@L_8}$)3k>YqZcbQ+oODUX z5hr<5J*wxfC8zMX#Z(VJt3QALIr?<}@dp$P7gRTI9l-f#)}@1Ab>V*9>s`Fq!~Bka z;|&)DSK#(*H^&o1)ybOYDKTD!p&@Lz;GJtNov%^{V~^yIfO%+p6bxG{%Ou;F4VIH4 zM_?d+ZS$f=aTD*dzk%hYhgFffBsI(pA>|J(|CG~Lm~)jgw-J>$3V5f0=DysEG2<&N zu3*B-EwgaS=z?})wd=fEig#O7{mkl-?m_~(Gs%;cNsl5`hWLb(t2D1ltnXwfL@XT} zCYhc;VnBg|M={{bLLJ~73wn@sX(UU*I>{08Iez}ve|+Uha?UtT4}C!mjn7FJQxm!} zJF3>`7e5_rkxQZ;(LJT6oXO({E=0Lzlp`IT5|X?`S#|Ith%;tFOfBZn7ALcyf_6$gZ4xvCTK@<5`;c9S_8yL}xi!+q=X^@{tz%Hu5lZ z9WvXj>!gw3PskJL?mK%ApcemDI&NQui^hMAYb}n^KIzv`-xZr<3eBJ_LbF0-gdCV9 z=SwcpiLbIm#P6KkA%6D^bB+pra|+T10_dgqPGAvHbj$NaEO zF~4E=jWqE=L(N0piX2MTvnEfP28Z)JxkuiQ#m9~uvv<0fsNR3u8)j}fJvQowYMWW+*L_c00(I@Ww zY~(vRcP|Xy2-!C+Y$F2MHj%aR5GBu?N15f2bs^$81l4G+MqZpgi?jpxQ8V+$0~p66=q(u-)6D$}n~>p{)calE!S4Y7~0@`KkuHJX+}jb}CYYcnkF-*W7U zCgUbFy$Us+cZ}OMN~Kl?G_AD`Y~8#50a+~@ZDT8HWFow;{z}TP53U0xOI;MEdL~qe zCG~mZ!vl54Ir%y7i9(x>F%x29L65lYvdQKI34~?Wq3AMMVO%DtGrDFv%8*i@$3|q! zd3}nvj5y%*Q^et9THhnE(g9ufI9uWpSb66Fp;BMtp1Q4v=%=JOtn)+keYMUKZ}~B6 zjc83LP0KMJZtzDrJJXLTLH= z7Ooa@TEG4AvlyWy+QFS@SNZ-}VQhfv79F3p>^_ZJ55)SzpF*aB>c(}mRiBl~nx2t1 zXe@fs$h^+%CM$Zn>2rJ%T}jmhzxxfQkQz*D&yA@tqL09Ob@TH)uw~TI-(qB5W+hJz zz0BCQ#uM%KE0eBmRy*v~P$$ok)ajyLQafmSh&sM~w$Hgh5r@OO?pafJQ>20)`rO_|k<{1{PLTn_V&GBMm8f3N0U*84(a1Bh z3+dWc0jg$W&#c;GJe^++#TrNrChe0$FC{HcR57(q&{L@Kv}@ck5;C$EuCfFZC0nzj zi-B~jC7bVY6WWlB#j75J~HsH$IMAO#VnsiT3i6qPWn zH+cDYba=((Qp(C0*PHY}4ehc-A!~*t=F|_|r1Zl6>p$#Ycfx3C>XqTR5ZXeAhB;8#v;?I~Vu1b&t~3se@sUgFZtwn9?K7 z@w{@);L{w=;-;fe)0v|@+AfC>bl((rY%Jq4!8*gv$e)q}J*M|%i6q!MEybW|fnq~f zYl$gv9xI?;1AdkT8d<1_6-1}9^JnfDX!kF$`3YO;OnKbVIj3uuoS>wMU8tHA1;&Vy z3^PT9m=F>6f<7|%$Z;rqPEwC3e)KsE03|P&Ox;%wPqTv52uvE^-Q9&G9^<#W<9)gZ ztKonRkGvygRYGuOr3@_vG0mx(z$*=wCn|9Sg?E~!eU@WJ%b2PZJ~1h&dctZuy}{LO zx<4js?myvcb;jdCjOzq-Hf3k=8c9{@8%%;LD`f^0`vgyzWVX`PaZb7*lX7aN*Y|eI+rerGaUw|{f0eeBYP9Sq-*yh8$n59 zN5brkP~1dKNGLB8uITx(;PD3gniwq$fojub7Ox&Q*d3e1hL=PIkVX3G(R1{P)nQ;a zI;Iai=(VMnIYf=1Vl}y|-$Q?nKBX({dM%?rF()A4QNd=SV2tfzE|e!{hQ*iaV0Sw_ z@}P~Xt+u69FXP6`iYk*OIz);%K*-Zc{hom6`!uI&xGZxPO(P1Any#lOj7MZS*K>%R zkpMC+NceL)2~4Z)aJNn}R^}uA&~-q+flUq5Wqvy09|zGB&eQYQW)tzQ3M4VKagZ)( z+`XbE;A2XCAw-H?A_%_|jTJ2qTgd37*5~LHuXcWx4uGZws?E5z3Tx@q44M|GHZ$L4 zT-en0=*|OegK9MQjqKK_)+zRCTISK~%m)kp{&6fb`l(daQZqZ_FJK!Jiy_^_B0pf2 z8>c_zcUmD2QTou)y@jUQ01;J>rfc5EdV&4x%t!9 zDK6;?U)g0V-Yt}$-=|a;(;gRnmd;?-F~Db{ZQ#BZymbhzq1bNg$>=|RNCH5)Gv;E0 zN=Ob7WzXxUU3yAF-wgG8w@)k)N~%r619U*KnGEC@)Qn0V+DB=DYD1s>3TtxKk&S?& zq7hMe)KAy_jPVM|>v@P&=jBCZdQ@sZsxc;<*%@g}$vh&p_%>R_$9RQBWsTbOsnyTe zEyay7ABjdIR=L@eRus{y=ptw?yvOk61Q!jy~l3eR?`2=*)^PR^7_!!~=Ex zdG*OQ!*@9P5GRLv*OHY=z2Nw->R6%S1@G}+i4&Bwa2)DvIZCecwBsQ)f)G z9f-H8ifkOvp+?VhN1lorshstL?%pA$Yno@CqaLOD7%L6A@OWjDvultJ+1$dOIvv)e z9Ae}k$ctURjyGAA7tU9|R=iB;f>7Oq^#`lC{AY!%3VCth?~W);N1?X3Ku~eu5F(`8 z3L}RWG$E)qSgD;P(Wc0^T;f8gH2um+%W*^P;?EjJFENbTgjd+T=uD#*p6QfcYNRg0 zqBCChOdRaouJ(+Z9$YOkEpm#Z4&L5UAGr$J$62%U)GGUR>S9`_ zS;8Yt+>*v;n*mR5QS+Or7+SK;>07w*OUU^xn`%=T;$hX z%smjDevJOwPg7$T;GSW8fpVki>n!uvA2fg6K^K;RaM2nEj&Hapd(^n4dWL$d+x&L7 z`HgPTMDm~Ho~M{wQ67AS@|>Iec{llUZU&6n5nVoYZ*bSD;|9GdkKR7x>L@c0A#e&{+r$(#2;LARamHD4(U@&dy)vJip!f)aoQA z3VLn~__9ZhTdHTMx4O-5cbnhp7HtL2`IeU@&pNHorL5Tyh3RV4cwHBD1X=!QJH=&MV;-P!QciFr5llC$=m9o^xY2#aG?a(d0i zu))+|>}glL7n?s*dM=76ebVTVpf29$T_YnJ)3zSq?xS&^n_ac%z(XRds6_5WmPjT; z-JFCvDu>k>^E&ClDWbMQZD;il#hP<~e?XvHFTR)Hrj3i`knZa)%`juQwxy*m&To`a zuX0d-*nNk^g&%fqi6Oy5J3|o>|8U@i>sfrnC^AsfM%8N6vZ9Ma9quhJAP6mejarXu zdPz3Ucp0A&Cb(&ycnNnRmC(~<6*$=s2j+}kzaI-w;f`@zcX251rW#XLCe)4Mj@q-e5EW~ z5Bnlc-KSMI;~t(4U-uj!9N8X?CO*lFHMFi)Cr{PZsQJ`4Z?EKORK06_P}hTldee`z zBv3o{(ir=GmCg&UxeH@2GQa>+lc_V=C12t)UafX3#!k{zO3&2Z1&bBAi6`r*V^LAv!PT$jiKL{7;&vd}@tml{sS>FX zb>MMA7FAN(+#SaT29Zo&I&We$U!kdn3`iN}|r&Xm-4r1y8@a2#i z-9kmC+7o6q1m7cPa3d;hQS;v56%sx)T41JyiN$PKZ;|8LO^b+{LDK@&X3Wzs8@kS? zMv2Ln7NmT-W7TFuIO6O{w0jQulon6%*;96P;sPx@epGUkrTZnGA1jKaw6UXc79c#0 zR#s7ollnuBbuc!C;_rB~Wo>%&`BbejeUtO}=`kBzfh!Iev2}dXb9$r-;q(oOa zGlKEXoJ>PwIchNnvLDc#avjc9Mhk!5@`Z*`m+@lDm!53&(vuy|WSZ{@I|SEw6UvgO z3hYE*2NpZ~o#N{EgoPxs`8)d1hBp=!v+1Fr?b=Ew+ z_>%J)5*HsrRig0}Vm+DHAFAw;cSX{->f|KDl4VWlY5e~FcluwKhfJvnx<=3wgxYvS zhLsb`ktYk28X#-B*iT&Dp=6%CnorfyB|UvA*GZIBUlRJue?&1E)PG`QD5r&qPjUTc z9EeK8>eRBVikLq0drl;;j27NDT+~45<)vQ!l6(0q8xIibbYNAJpM&_qzm(5EyV zRiE4LzD}njcS!vj%PEB)=jn7RQGwQe7rj|}Vq*)fgKm1OXE>eW_hR}Zx8arCszgCe z3l_84U1&ztYG~l<+39Scs{L7>VWm1ispCdf(c{~khKfp@r~>Pi*-7WbyBaliKN%|w z=-p_Wwooyf+uvd1N~0vdIrn6x4y{IWb&H`Bg|>jlFVski=t(%xBe3Up;fswd<`891 z>hH~;AMfim|J$JJKJfdGf40G?`c6ylNFuaJ(Ph%??oQxka`;MB69QJKZy!?nP?QKo z!E?%(W4BY!yDTp}>njX(Mvn;grS6hbyyp}ywwmpt{t=4^HSDs`}^lenO#g}zMjh7+>6s@Ez^S0T1sxr)wmJ&tNjN7J6q_ndc?L^h15p(JmVt<|C#9ga1IOY9c4?zRxC zxUgMhjIBRn+8zzDaQ_$yGLu<-6E%o_=nv>Jqp^`93|5vZ=NhH$&|GD|%Hg*<#ff^{ z$9trT5m6*N?$S#mmY=NOqAF=Q%WfQbpUh^dCd1Vt@>R57cQ z(=I)nv&a(i%mFGZbslIC#yyL+S+%M#3_>4S(e^7lPV#TzBzlXNMbGci20_PxDmumi z#WovmH;&$9oxkP0qc>USZ~NJ=H$V4MZnu5)uRg!!K{>zaf_HxNOE1{lF8Avn(w?7v zoB8CfpOPOu>!?rHanL^dSGah)hxWaHg^Ra)=-i1npT$dD40=w(@H3LH+h3iIvg70% zxOl^947;b1C675aPy$K%+_VTCSN>&rv$Hq*THHar z`UB_PEx(J}C*c&&+IAQ(Fn#G!sYU!F@8K^=CNB1TeL3`(E_$#i z0{Z%>SWV~kraG(p6WMwGuulJur=p!yoB z*nWb|vL9o_nf_y!Qy0&c3oZ*|IIw$`&PlY5k9MPXBLt-AI%zzpUB+gcNym-8T!0%x zB^b%ibGv2!defHW>yLS>GQw`UPmQrbvqx`4ro!Ey$o&1%F7q*r;1RDuQF z2rC;W3v)8H(Hx^~nq}B#P?b9luVKSIwo$d3>uID1Z0zM#XuL8bJ&C4AA;wes4cK!l zu|c@(Mf@Pb*e66!dGSCe-0&1p`l3eHC@<-gfc0AEY>WJGbm1J{g2iw)tF0ok8hlc4 zb!wmPKrxyR$SVeeF*tUrmNq-}aaZuxWTMseBt1;)5=_MGTN#u#i|pn2j>G(gp8 z-Wbsju@RO7BOeu`#k~HAym)wEsS-!|EM?0W3SXaQEQZrzy^q%sb$3tP zhSBEBZv_6-2GwTdr?5CAPi7ZCwICo$U)2AlS|-Jo9G;(W&s_V`;--UJORTAt5q6Ws zh=WeQei?I1wccI8)pXJ^ZJRji)KPhflbaOX^?_9Td^%*G+CG;X z$Tx6@P^G-gJKK@81`k+mz2^oi-+`3qJJSr3J@hPTI6!yCTl>y$%w1ZeTwu3C+u|4pWp*Z9XK~JCZtz-7?G4_ ztBibuG|hIay%d!&(HhmJ*p=Npig}P4%o+ntiK;-5B6Tw2IOMGyH)x6@+jsm0QQuoR zZUUt^8R41$HiGw&CU^BuX@=xzO{FP7Cx6cb3udYE-*YYk6q;NFlhJg7fP0V0A=>5n z221i;G9n3!+R^wvAJ)cgHMeqW>p3y$8l+fgb#_ZA9YqwTqY&HqoyMdn>_g}X5|yG2 ztKFb}pPe}X+7sG}yJ%@UHI5jnO7Cs@W@a;cTdym;*)?_@G)@jW1wh6uP2Shz%xe=8( z7h)4ZjpbHAH6kuTVn9<8y~96KD}Q&+5y&7dQbaSavJ>_WQOD-8&h>hb4N9 z#vgR4ao%h`k_60sB-3HFokq{_zlGN~I-S)WM%{L-~-9wyywCkIqjrLu)>~$u1l&-f05twMp4)3@-ZW89$htm!!aj!)Oy~f-%)*r zzv-z_Eb1fOuo7Fcr0e=uyh4Nyg-r;H9W@R(5rR`Dh~3875JE`!$ZoMJswKf^TQYyS zXAx;Eo_JH&A!=9w60pbhkGyy-_SgXuu;(>CfCpw#=`2N2j|Z*lpLB?(S?OS~=~1Zd zkXQA?8?X5H+|rZySDxWrK%=PGCP^qe;&fa;#GAChzxdO@zgVCT@4^$IQw@=wMQO_o zgO78K@XK|=RF84YzbFC4MsJUBQT@v`^(@%W@DM-5Mf#8iI~p9QHVblD#1BJIo{*C;+&dt~{B|=@f z%8$-Gz|>?`WBj+sW&4FlMn$E~Rl%>ige~SM{4WxK9@X8 zx4E}#5h`;**XO{z!ogzT9OM_xJDMKj%Ll(`J+vI&5lW3i2wGOk$WqEYt0d7YWKUG$ zj1~Jcucwqu2@YxyOUJr<&H#n1Rnb1(N^|){eV9Y~&nmGQq%LaJ%kY91q>1Wv;QBMO zyO}?fi6ziz#joQwYC$m?4!FU^F?W%PcO5SS0J2a=ca3J17e^eQ=b77RGxtCUCPUF*c&j5exfJ9&bo@C9$nvI`%csBz;1EDLpUS2vssO4F|#)SLW^cLbFJ65YH!f2fYs z2coVS3&u$yDZ0wS!mE8;KF}-wkVKn!l_n(vzO2+?Lvtp>bEC#*-S5+XrH$$KV@3pHD+l!~tQdG9WupjTWTd#)xG`-D7&y zZ3ONEvK;YSLN9WLp0j)K8@g%e<|18=LyrRtZK$5eJ0uT%@r-%iIgDi+?}(S!dX&M1 zU*j!mc;OGb#nK)fYq+QzY?m%n1#iyJkcAMbwmJ&I15?vWd5!6fwgY zA(utdRjBa@`+>4E)%N>6-&FB*use#lhttOh2rXyP73v#(z4F8+?h^6dDbyAm)sP!F zJU|o@Odms?O&yo#3+$`RfRmMq7qiItA9u+|c#BFGms$5K7sRtme%HxQQs;yD;F}Xj*HpWN9sZUmk*VI!b-IT6Ue2nRq-~~kj z)x;LLr0S`s#)3Z#mO7RKN~X)4uH~MgC?!$PM)hy`5(C_&ji!{4oP>Z!{n!6}BX=xr zmEkM?fB(;3%|y?H(>NSbTwVW(#H5+cFQP|%mZ+|$;`+OYvz2D?T77tkPqzMVB;UxT zw#je5{|)&u6O|t5Eo~e%askeS=a9lp=tP=Wl1-We zeR_sz5WW-C9(Rroz@`FN#^c^_+8Wf=!5w440# z=JuX!53l9dd~?T(o)hkM(zYx^^tq?=>OdE>!E@H9RyPZu z7#fF=7>w^cgNEnS=z~Zc3_D$F%4Cb4G3sZG3v)NU#p$D{!(rWWQ->ywIH`Za>WSkn z&3F!LlhN1cYfP8BKxpz_WujWo$u-(-PGTaPvfBc4f z{S+otH&fM=Kb{fP?Vck|%swNNT)MV$BMNakunMF`wicQinRL{JTo;_O zoi#S?`nlvx7iZD2s-*nY$vme_ZWRnITiyR|Gg?tID#~zIuPwTQ;+LYl; z?j-jP)uuoBH#wTg!LR`db&kB%z(Pn2=93`R$KR+)diHaDSiq78gS+}b9SdrCQn!(d zwiK$POX>k(TN{ikIjpJed`u+`^|440`zHwqrjH=LhO=<#W?6p4>VY^#q7sH4NFOl7K*nHX1DXa5Y)n^wyV0#j8U;s^ z>@2>CLVe$~p$P6pLEhJn+aN-o-8r&%-An)|)jo#% z*e>RV;L1v|&&M%YRR<);g475~vbT%8r`uF6S0gCN-Xi(T+p}r}B~3ySwlDDKIbb)a znoV0~3AOePJ%%2xrn8o*R#oVMVD{vXzun6+`@qv>nmV?%66f+PA`S~m2KHySF)^9n zc_t0fsqO8;p3~BvjV-C#-l~#5N3mqM1jiGV$hRxP4k-HTHbSYw^eF7Td*l}9DbG(k z$iAq=NkeoLr<^uQc@JD!DSXlFHbPUgWOwZ*YK~B_^4UakA!pDERqy zWuwJAuozNz==X;3x2oW6upg2F%Scyf9Q^M2?bEBHagA?^*(7+0?1c7#p%4k_oBTy| zb2ES9pAAMfsDJ6v6$$C${Z_iUnLo9BY8h^^j0l33l`?B6{DoJJ_qiXA=a#fi9;uyt zlpd*n_D= z%)gO7(tCU4{y|=F7C^bhAr_kaUoSC{SENWzSf`9HH)Ky#;>7NHpidR`Sn|Ue%XcuU z(d239=uL~Du4eU-&cn{hTjmkTUpZVQ=IF?bXK~sr)6k61Q@@L@->crbF0ejBS9vk1 zXSgpU^o=))Giq4!B75}OnzvYy)~ifS%#duK4xjBm9n_9=I_@aj5$DE*2dc@e=4q|+ z$l>9mh8tsoks}JapU}_jA&T<_zObuZy3Wx9U8n2wp0BHb0j4JS`bcD0x%qf`6E zWqXX#CehD7U-RQQ;*a|J&-uH-o%1%-pYMm06{sCxc8aVPT{=BUt2{5(+HCGvw+YtS z_--tz4mh&@8neCBnz9iCknErXi``&E@5~|k#9K7$zc)qE56AT<&KZG)BtKyDn_Xm? zZ=&zhGPcV@qn{60XM|kApW>IW^&s>RVi$LDHuRYB)+Dee9vcrnsz!sBQJe0FL)J)!HTv#Da)OdZTqPtn-x%N4GN-D<3%JWQ z$u)wyLNhL@>=(Z^ylfShhMmV$gQ)43O`fH3xJF5=`&8-x&su^5Z?pWwM>z7$MXH4s zCMHx%VE;9OvSo?J>b8;Q+PEKpjtuDr>~fCH%aL~NkO}rA^ICq^^{d3ed|JD2S@O>+ zc5x(H=+~ewSd7Va{E*|{RqoJ9FFLho@`ak zC#~g%Xs$B*oUfj-d8_wt?0jB#&$;f}hy3sYK1*NSNS{!<(Vh)8nU)DPw`C1DgDp%= z24aFPk1a-ARQ;%SyH`#a3O(2}up4z0Q1aNRx`CXXn+q|Xr<1{`^}2*_h@*|`e>aH1 zbM4*o7}wq~b{0KDeVwnjpV*h@sIT+&4NmMEp4T@!tx0gb_G!tDg^Rv=35_rRp?IsW zFW=JFw{kUWf0}ryWZ#F$Q>gL$!gtN~wR&%s-wm4}pF^<;DU*ArjJ~8|i4? zIy&{>(aBn+2$vC#H; z#aU^@wyRbzb8#Q<4|ZfhdNS6og{slQoqAlPnDWpcrlJt%MC2%0lGTYivQ~DY5Epk! zq*h&O16Z5|@{vCJ?gjiC=>v6-oi1^O4DuFeWTg&8lNZbMRF!I|qNQQ)`>9$c=74Nx z#~eF!3q}G!$O9X1!3EJ(HNZBeCK?$Cp{c0G?#9e*soQ~e#n14rjyYh#)7m2gGi^*P zMzi`eJy~Dhk!HV4usY8cJpEPWYIjw8NjaI+fBWN8j(>i4*c9Rl|9nskFCFJw!XV>@ z(=I9CWTj4O-JjJqaT~T;gpOWaO*==8yx3F{PoV9j%TRYS+nEQ`rfY@RNJ^Vq+CITr ziVCkKiH)SRMT^GWDYOW%o-!~AG-5u#v*z@&V;d6|QbG1aC5~E($Xmn58=%_iP#d~2 zmx-@-^P1B^cfLqWysoknO17ZN2`jxDsSm~xTNOH}noV0~Azf%Q^bU!p^NUmtry7yn z3v%y_p;4>X%8t(nZK+Z8gtj`&$xzjFb?*s28s5ATX zIh>EZ_F7cJ+$T`WC$rgqvER|7w-jPL9M+%y_#4sO^&5^l$e58&9x~ylni?l|h3bJk z#@juvGhT)sTn*{RWbr@gGgKrp8H0tqsQlch*Cl;0{)Nrik|vcty$_s8_*iW=oDW_S zrFIo+JF9=)E$d%@k}dvJ`Os5VU2?uV-$CY$3MBY_a{8r_y*SW`T82*c41PE2C{tjV5)0MK`M~=fyYJ zn(~vd zR@3Gpc1!iT}pplh2um6SxqtPF{i1r`UBH^9*u@4&$W;<$^j_tST zK=omy5fvE<5uwxD_eY8q6$lgf8+}QO=)NqIvg8OgjcU)TxKWAy=+6GqeU7#?bxyYV zp^GF+rzdem7cY*M2`U7vE=~#ynE+D$q~2hzl5_a~E>5EC^+DBE8BwcYpEV;(Ac zjOoqcz+TJz3m29eF4L(@SB3TYpW|XnwL`V%H=aH}9M-GsMb&Ci|5x+*{*OQF|H}Ug zOcfY*(ikk2;dLn7*5_cctKE4;Z#*K56XPmDoDJu7xr(vTKC5{Bft5s1(jp{9@%j@VI!8QA>Q zY^$6NZP>u{E5?Z91NPcl(KuO%({cTIh4K2RL_kg6aN^{&aC=RNIa3X96j~MO@f3TI zB0`_z4Dw@X@~6y}B9v4+kzOiR5Ury|Z@Z{%v}NV%&COQPi>xpzou7bHzmn=Y9&umW zRU-Mx^xB6l$S{j=d#PPhyATQzV0NcM);g$8}n0K?7d}>C9oZ^G+Y`v8!d+Q=bwJ2 zXIa1LSng<_Y@{r(MJ}m&?5QJ!PC2F?%^^Y`qqRieE~>z&0Ya};+5kL3!@ic?fzcem zjQ-Z3*|knL(mWG1YN2XHPq|$s8Sx_PWZn8+Sf%Mzs*gEO`RpGO3BI3~oUPJ(^+LVr z62#Sves5xa{q&js;9nn(x-fEpa5Ih0k6IA?EEh?M#~VKg`A=k}qrb-DIh(INHgd$p zxV|rV#aa1K#dYkJmBDk#zT!R3MvJsoJDE9CP{HEMd%qm{?3EHs=^AIEpkU zI#WS7vvy+8GLMhl44)1av-ynErAW3AQfKQ_TTj5daLX`yso~mM*z zp7b0!RCG)SclC$7S|Qs?+cLnrhJ*SaN&m?Pc%R`@KjCF|Hy@B%0-uivU3}2Qtn{>p z$XECLPlprLeOGq*4)ZOh`l01!$RTp;vZzB8e#6ZbhIpgeAG7jiOV6WC!w9jFgf_(7ZnPi}s`gUiIcT2iz5F+C(_PT_Vekmp7%+jz^8I)R^$Rgv-B0JX4_N9xD= zNK!pEmt{7p|4V!%uuKp$G095$06w&^$bxDzMLwenV@7?4$KUSh5B^oy z-4Q#mkZ|+?y$1oN7WjxEk35oZ=3nBkIT25s-xrZ<(tXXzuN7x}Pl7tiVfZ(cWX^3pQ#rLT!&+4T%Q(=KB$Atdza z9AS#=z#1AnODTzZcE@TvhKTlLwRB~r%;ou8r~7n`xhHbk#`sLsc3BPB+(xVfBAo1sm=g(EI8 z6jdFO{Rzv>c%THLlaw}X(YSLj&ZQ~unRT?{W=wVRxp;?v6q*cbp3ceA?e4@yTT(Sy z>=9n;6l3Eemm^zN#<~Q+PyT5A zoSMJ@_c#IqnwF>CK4y~^6!5JQsacLd1_ z*V|;5Zw>WOi)7V?BZ1X!RJRTKnV4@pow2s}V1sslIcJ#p6)cH-uw(KPi(Q}oR-@a` zjh+Q;Ki*L{4vW)*^ew)oFSAQyZu(g-ckojC(X@V#B|g+>`DK%Q;WIE0ix2>DnuL?;m#2&NW8$;2kwWqgu6Y#yN8QHz@- zEpFl-sl}`gGauy`p*Wot4M8=UJEJY(*j}sass(SuYPe_{whSzBj=;yFNDqgc!}cV) zyiGlHHEKNQ8uwT^`l#nvt>0sMRAP<=SLi5dE=&Z`lE6y^rs{cX$_1smm|`(BPo3Mj z?ihRcH7%l5^=ZU>go}kRuLu3>e%sUzqL?SFDWC_QAN-SyrgTxULY-gj_vZ+|-4+cO zMNeH8Y7r;qDZ!T!y&dXG(aX+g)Irs1R{t425g5f8uk<^V^`E8%D3=}-ept=v$wp1H zVx*$*=z*#Zsiuq3j8L-i01=-Kr(Lq|a=H}ja4;Sac}>;D3X8$0i;ldv777rd&pMk`cwTw9722k{pY(v&V-Rlb+naP>YU2 zjR(%yOFhx!;euA(jGA+B@s#!0VSwd1qSA@#vC1Cf!kLPww23NglG^5dRDK&*!)fc# zb_%$4g5JC^narFT3mU0<5>X^e8{Q!XNSR9_(?=wkOmP(enhvT)b8EEB(v!xSwFW*S z#pZ9b zj$UIvbR4&IK6tmChkmuX8Fk(Cm^%8{DJ1|hz44CTKuX86TOw_`tpTmD^6I~avdW*O zm>W1!yIyy5nX?cy%@W5jRuIbQPT(@#?y1XaYiFf~pqdQySgtbFGilYXSmz)o(A3yk zLF(CbHEKLk4ktzN+I1FgqiQx$Gu=lgvJ;g!Z4+g~T}bzL;mr|-@Gq~ z;jV=tbU28Yh7o@Hrsq!wk6>ZbhOHe!qY+|vZcw4wwlN=3wfmGWm#rkl0=2(wBYFn^ zTVDUS-&LNB>i?eSnDF6zMaVi-o_4&*EWjIB3}<)s$12-I4;ba*>BMa)3U5BIH}vu6 z6~olH;3%^Q(vk6GR!*OQ)j9Lx&HCe<9mD8GLpe6x5su==A!hk2z@n2Z4Kb(aJCxW> zNip_SuPWZ(+=0YkFp{P|y;*63$siV;B(%|j_kWi03V-n@P()qDWKhT1W0GfF*%lm` zk?MKDOaQ9M(5aWzYSpks658~xM$}cLGU7FNC~yKBs%|zHa5Wt`)0Rb>IH}|Pc}q>c ze3u@N^x@kdsj61Y_@J6h8#TJ|7y@#L1C+dI$Zq|&BH@DYIf5OjidUlSI1H7u_b@dW zG+L~&;&t=9;{(y(5(J++?VjTEHCEiP)GNn=DKXSfomFf)<#iO>j6Sm%6~IOt)ti33 zdKz<-rg&AHGel`#C($;^8mxhO49p7*qL%hq19Q8dT1V~-EvSlC&6GAPTO^%0m8^v3!d<7IDN*@MvpXexKOF@8m!dcL= zQmEQFq6tVH6TIRm+oBSt7K{(Pemgmycp>r@17X&(Pou`Ou5pi*qt8XD$-h|&GJz9m zAwF&DTJh%Pv7Jw--%gF7Ed6Koum8}JyUc^(HRYnd$I7@QDxcB~U435=&PeVPPb47v zN>SOX9{@_G+g|8C9O~5XVrjImc}LzVaq51px*0caIBL56APdwWN}n`zG-B<=6vP2S zo)Fmv=Jg_LC=$ljAo8>!qoc?>gA{Rqkf&(eVy6#U5n0Luu?}&7lE)2M1IH>51d^Rk z=xei#3j_r}Bn8*`EPJ97hn5)I1&Jq?oS>x9Eu^s}(eqtNSXaoNsKiM?lv8UYrA;jj zi;bxrR_$Y!JyD35v!LoIOV)W_xT0JF+By1YR)0X~xFP>BLx(Tw6~=Grapu47 zG{$$Tu$iE(Hfj<<6JblDZ%towJ=Ejw{oKI)R+CxK{bGrDIs*=!IyyUJE{heXlA)pXo7?btZ- z#F5JftmDPTL$?@KR6QCspLWdKMvgjnRDO_nX^S8YAmqVRm$y=dSLpIqE;kGhy+pZx zjxs}6HO(}1FSdS^yt4>kh^fh3v?~N`SmzDhc!-i0szYPgPS(*!$YKE`2Gm1Yr3kP^ zJ+p`CF*&Vv9$;mq4r`CpRgW;~vkYB%NI<40)`#DJs6XUC2r{Sd@`|&o7S(|tIwV+? zvQY5jc&RwulBkE1n%7fe5RY0hRK3TK^6*)lVGmWisogTk>Mv(rhZG^g6+L!# zTdDQeQmOT(`^SSn{PDy6pDmPLts*T;1R^MH(b%#Q=yfU(u_8k- z3Z$5K;@2kQJn^OhkK-K&)U?UgL+n}0YqTk1PLR}c-{4|7rfQ@*8BEvHub`roR6V|~ zUew>m(FcS`p@RJ@D(dfkpR5S};lsVdhV_~-PW)=un?Yx*W>@X4 z+=xoVne5YKzbwu<7mbvaFt%uUr0NYNE~s+G5Owr1I?FsMD`CzkCjv|?LCQi{Oc73j zV=NT$-XzpdKX59y*e<7H<)&ZPa>1)$iGwBhp!h@hR7xnQ!CGeA9F5<=*ZNbwFBjMgmk|)L?LBWlZbj3pHRl5jMVl zn7Q20hlQU8R`qJsd;t#fB(4pwTSI%4D@%o=5EeVCG4h1oA6?#82ZE61bZ-3eY70&! zuOZWrHaAeNxS2I)yh)R6ZJ%wIEkl1~k4`f{(#q(|39irTzhAXDxS)PO26u>6&(S0|jlYGq3#`XLy8KJ)Ul z6aQ8;+V?4kHKfW;)&1Izn{VReEvGWM1Mf^c<*Q~okbUR&lZ3_NYq!>gTANiF9V<-M z@mm#Azh0xNf8^nn9oanmRi16{lXJ!%sS8}KPFE;KDdKN7tL+mQ?~j;y;5aZ;#HNUN z^qQ#A1n)aVxKxW+Ot44hFnlZzYI z;ani+uT{GRW7MPOKR%%3sgRFn41TPY+K4TpQzXw2&GXEeFkK`xD>tGN=K&F;;vUfr zk}n2BOmh?uJU@nlX=ch6gArZfBHvmJr9es7lqcaM1cjxl`G8zN^`;A{!K9Wvb}fSr zBnIQVdK)9qeV%9OHuu_-0-H82hLbTd5Ky`=9Ia?B#Hl6YN!PezK>bOsALPGq;Ke!Y6PlQj%P&el?e_7qYzc2nd;YR*Tl!vVBTYZ8BaRbve&Xv zS{Fn5czmSawap{?2?zQ{q-h&aDm6qT&)pHzUgv`Iy@j$+>F4h-Dr{Ce>J#wV&$UH- zK*+NJslMc8LM`iqcU3GHVr`S?c9T)POSiiSO><Hyf&>@u(b;!>Ws^#oV_zX8FlyvnGhBR-(ynUd+zQHf)Z*l?VBYSkFY@Xy(omAW9!Ki}aWg$8#WXgI9j+tj_b z4QQ|1(vB8JSyDaNWrNR5 z;(kYng$HR{$i;k#$?9g4=*8z1z5KkQH=NhQvlcUK>R!ch_Q0cOR*Ib1qM2uSqdR*) z_tbwvw9|Nn5V1)BCJt32O!H(bs^X}2+a8hrsv2--zDXbg#iUTu3-i z^|dcr+yb+!UVm_PKBhK9&I;qm+jc}-j68=ov z#t(*5LuC|deJ7i5>?3-OlQB7%^d^yb4-^MW6A+~OkE zaG-eK0e4X~o4(F$QDX=h6La;SS`Zy|c;Dw$iiCn$#T{H0v2arXVN$!7KPEX+5GJ-9 ziJ+8u9iK8f7jL=!9wT{l1yo~tRBFD!lzOtqLUI(My<1Ygm{PlCZ;!dB-$=bEEObA7 zJ@1p~K1z=1o|jw-=PE@Vj@k}CeK%g z*MI(R_lgYXwJw*THfnA-WD`boebj+sG@92~HL^xmnx2EEpC;%zMAd46Wjwn$rv4A+ z8R+Finu8;ThFM|yG%e%kRn}uX3CHx2IzioQ!(fi0}^Rd;ji==69!G*lrdo z8T#QvU((eVZB}A#qh0bg8Pq>-e=zQclF<3p6YR7v_PnKGO-($i=9iqvImzki3DzB7 zCq_O~oFgtBFD~aPCh9qs)l$|swgQ;~dGr6-%})0R{%d01rGh3f6%o|eXV zDm6zRVT*vGTN|F1YOh0*31~u4ZDyejN5t>5^A&144{QUzad$eue}^Q}yAAA_%j3p;n5<&`nZ@#Dh^--A(Fe-*jUx*d*-bT<%5KOqjin6XMayoS| z4l1KjP<@R0S&6xgcFEiDPNI<@04%?ohaBr(7;Ir;GKOcIw?Tg5g6jthL=B)^x;ea2 zy8g@?s6D)lF5rFq$)f%#Js#_ye*W~y!**?qsr`XgX*;%@32A2h(pcOMj<5p!ClQwc&fXxPMwEeUCo^Yx~Qd752O0? zktnMqmV#?^A{veA&~7UNQiCXaR&!uWvqFT$%nDK#3Oy-X#MMI7%ADFY^xJtQ4TDh& zY}vfTggScEZovSC{Wx&jrV*7kax~3aZW}~XaQAE5 zZu)tzb@G}snbq4WF3grX(kMh**Q1_~?rP*6u-eSH583qq| z*4N9mlxvK(yMX&jXIM9jo)bObW=SnyGGhao`H>%F ztLagQF}44YiGa=#e@;DeZ-bn-|=6QKc5;jf#K5eH*fc0NTY_P`#wpCQ?Mp$K^%6eE(cWRqpUj4uc z6RCPsSw$s|vAD9VGTT}-SsK&Lp>x7@rfRr22l}W-ub!xZN$uXXOfm78x!wHIG{DgS zzDf{ZRC{A0%C5tSv5yqNe(9D(kGQGTGEd7iy~26dkksX%{^{LiPi<9?gK>?eTiE=O zJjRjT2|=gKU<*?d7sJsGY^MLLQlu|CQEg<$z!?jnmO*r@!FXUJ zOjG~JrBZ8v;Ol@SI!lE2U1s^}fs2tXihhE9(0N6D4{Q$3c_%bPmD)6OorZvgSZJF> z`RYXdX&K!0!EnI0Z4%vJGPOI?Ow2Qq(F!3&P6(63o3`4Z8u12*{b_gJqe9K9gyq}^ zggV3O;e>h=k15tui4cjTq)E*QiI&ty<3hA_y)|mrQG=Y@WZ(NuGeoUAQVkrNq&S~; z_)ejBliE#!sPmw_pi>u<`n`QelLBEz{1T%iv{OIh$fVRR`NHFu zJos^N(^3jY4X%b%Z6ZdpK_Iz^A4dyB9-!QrZMHllr=0g77o7ei(S}IOzX}a3j7=(3`>jqUqh^oGA7Ce6kc=)lCrXK~P&)pY9KF@wcv>&3 zqCD|hL$t*)oGtY@W<9#fs8P0jL>FkU_VLp5nAPup{I}=_{A+#)(WDP-F{w4+XRNv( z`uVEvhd#~2qbs!dMxMjXwS&et&}Q{LwI%cDGj9ev#E;1J_<_?ft)kzn(<rcibSu_Q%uCw#{r&^@DnkJ(py2pvP{PQo}49=yvL;SKave?K<&xKmYol z-`df)`ekqNGn-K(;(!5GbnkLrd9_S6*Xae_CT(gk4r;)C$o`&XU$2tPsHGQwNwW-_ z38;5WEz;%rNIeumTi_KVbGy}xjHX@(yTsOTx_Wd4I7nurG98uJQ`2FcB0m;~^h8=i z4(F6rWeblSZY{Ai`TOKA8({ErPHl8AT8}DBTOqd8^NBIRT@`$EYUVM7-K1y|{|FC}>#Uf~1{^mCZe^b(IQ2)4U)8KZFd+VJb_Bauafy_nWNn`VUZ=Wwu52=~wF&2_!G z>R>KCQzX0oBK=rfwu}*Vvy557PG~pUS*zQ zZ~5B%uBGVrP-~vmMt#~vEn%^u_Xc0MEcwzPks`vT>fxuPIAW}+jF4fzSeI!Jl&S$X zC+1HXwf?@)cVe~TJ$(fDvQj5pZE{3J^hr4AIaj11B=p6o{{Cn|73=(x1I^nRR(?OKkpJOu3SguE=i8j zI^VV+AW9$7r%iNEd7d>)mXw7R##CKm68DfI4KEe}YLi-Yy()1)Z@3Mos(A~ky|PE* zfhUW1VKJPKkw*=Yu*!c{@t#vnCIzSPL3UhL^=Z_6qUMKu%`sA}sFKpA0WI-ai6hOF zY&^ZQaUa@rar?^*XLkyXGxdMFB@Y|&pL@Y z0nX8uP!J_OT6}M@J(x4o#%Ylz{5aYux;+XprN$C=`(@`yR?yLdftEhiSG=;_qPC?G z63u1eZN8(o_@2$ERYPw>CGk;hJb8Z76gO>!HN~ROpUyGWQzr!1p(@VLeBIIb39!j{ zZZp-pSQ0z0tdx2ETlp^H;4Ad?%h4&Xe`^CmULYaemKyxgzoEGV%Bkt|Tb1cksXcwr zIaxKLu%4_V_I+{2e$0XzksIn*e%Z%m z2QvVz305)uhETp))8qMVbsxyW91iLaadBQ!%@P%e!;k%%EkIiUNRGrQ8ZoqTa0wcn zq^xQE=PoVI(ckflBWl?nEnqxAxYT)hN>7}7b;)^#t(Z`AOXLm5_@V z;7j*uoB+%_AlnS6XHx%CZR%hCZQ~&i|MsJgAO&%}UQ@e+K3XUywj^p?nxD5H>jM9H zm}!IbHL;8BIPN1ycT&K~mWt>C@2k^}gTfcwy^4N`3+fTHVTY^Xw9V*PD0M7(lAm@l zeTHo$crJ>bKHHztWL@C4Bkwj{v`}`Q=-d72o#VUa749Qh`(7n=p6k|m8sgPQB~>Ub;?Y8_#476Y*yzjHih&CLc~;=I zj~~6+YwyXv!7cq){~)1|=w|0sJ78>{J|bzf#Ykw9?bAyP(=gQAg42;>x*__$dc;^d zmI5edJWMR6HXt;;mFEnL0rF;rhr&^aiy;z&Cd<4icDYS(m?o(r4It!&E*!F}IIs#5 zqLY+1Y|(h3T#nXsZpSS>qn1uxjM^@m{X&6tI1Mrw^9qB&u#B@)%ZMRsfZgZ!3D)Ht zF#I29psc9z6P47e@Z?LZYFQpbqB`byo>x7-yVcd`$~nd>q};<8b5dSE$$+V@$9-oR z`s_W;UT4!Q=Sg46yn6mhHZ*lQ>pMfwTkq+0-7K!%=RL9rYmK;&A{b<<960@k7 zc|o>6t2aRa?G~fu%X|xG^kMnE#CPZ)3F5>4LC;UsJP)igtTHW?+E2vZs;!rnJ*!Mh zrS{Vvdu>j4&4Y&a0Gs5jo%NwwYY}2%F}tgOs_^_q)OMEu?s`gAVY&)yJENxKr@Tb( z@-se5Wl5dYhGbQyPt~^fNUw7cz1G3J{u6!Q$UA?CexXju zS0s~km(?mvS0T0&e1A}Ho@^w5%6@MGK&ewp-N&m{j_r(DDqJ72WNcLU3*&N|0^{*0 z+ES=C7u0j?X!?@6&|55cVYtSF1)`9}C7Q#WxJv|E779JPGP=0u;HC)pmuEI5Ijn-soXoe@PBG zukYXm?vR`ilFV(aE2JS7J+D*LAZeWOG9aWn%{1sThg#{^Zd|WvcsCo@r(KaG)VZba z+LG#QY&>8nKw9+ZCOVd*{FVH(N(<^Q+k)#k50O7K#`+6tBgaQ-E+0fRDhiK2O}sSz zh@kFN)6#bVvL_00KB)g5XVmz9jOoKb9}px4^O2k&ZNLqYM9(R+Bz}lEigv{Pezfxf zrD-WI_;`(riG!pp}&FlF{Y6K+>>(9wD<|$C` zuw6_H#?&eNbC+cCS9)%WUA|7rv;#QuWLE!xfF!)_JmJ7g>9iCt1?Q5*;iY za`?RbDZvK5s&F78?(dQE_@MiqL%WK5Ay~m(Iwui&g3ml-gZU)^MAbY9RBlvyz!oR4qkaf{_}sl z^=^3Q@M;flxe7B&`}n6kTvTYOOuz0w|Hmafx}@m!w5a#^0%C8?T8f6tLf|+P=T)Ln zopa=<#BMfB;&e2sP-9MowoLe62af9xMN*x8l?rBV@>9Z!v>ea^4 zTZ}E`yYfxuFR`BKN@g3jSe7n}Af(ZtzF)`tGWvYV9};hnl~L11)oNH5=_7r%sXj+6 z7HSOEf3yMRjxlQ`XOiVxZdU*afPidvFCyROdMsOIlVh6UomxrAN?*2A#Fo3?BXkbd zPLxNClwt_TLOUN51G-WCvYLG&1I;T7c(PEbL(B^w5HRqR#w=)ADbwdDNQAadlB@(LM1~AQEYC7m}Kdu5R=11(iA&^g5_c`86lLS{#k0^`FJNXqlw8 zt^KE0R?58oiAOVPECo!I$iRLv2?%ZVEot_as$on79qbw zYd}B1i=)`%Sz-~~!u{$udy&EFS86rAi>OhZmsHl0r@yG2&FlXXA7%e3^?IM8eNGMX z5HpO4#e7_Qpl4(Chyk&}B4>ojO1^BUn#NwH*ye-lpuSO$`nu7m<_Hxw%Z*Rq02N)B z?MB!I{R2j2E2IKVZ8>?ef>NgS511B8iY2FB1*s8)G?w6=yt#{~-Gc|W2eyWT!NkUQ z#x>AF})n|M-SgJMOt(lAfik&IaR(+*c=e* zOrul}Q_%L+X=ijZXcTYb!bdj_>=;FX`gWTe4@7Szsw12CU(Q}#aHVJCYYw8-d6jYWf{TtE#X1~~sp4Ag zBp}?eD(JtsgXmrkVh?NH;lTk~`2CH)#s`aqkQz+uUsL*cQp=%0{Hr5E=i%egLXOpziRoFidM=5QS^)PL{8~{% z@|eYlnGwjkr+G9+0^2-4L_6NShvKf;$2S^JIg7+G&MM^RMfM0SD*-ci5p`~sSQP+* zmW42%gK$VOqj!*ks1|Iy&nx<>ovhjkmNMb`Ny57$OI4E?29Zw@TFcfi8Ug+yMf}aD z7(Y2KV_xsN&hZi*7&0v^G>C4tz{&$Ufs^6LP|LJ9?Wo23z*q|k4Wc&~M7LR(7hBwJ zu$a~Ft8%q_NX+k9h8Q8mW)rM8>1bOWqS0(Np;pHEOY~R1qX)eyrj9U0!$Z{XT1xr^ zE>nb;jEduYUKu(0yZ107~f z<{Y}%hH~RC9d67+dXSJUz)c%h%L#UroiwF7^?|9nec+ABvW^_uOGq=%BExJAV*w-v)Nn)}d`q3(D$8x2KOi9>WO`8Uw<|PR@-@}mOVaQ1&4!w*%OXKc z@oJ5J_V(d93j4!8j`}lp-tz)Ej3SdjABz%8*DopLr5g`Mv-*2pL`>h?eS#17aaYji zp$ne%fM{udJ{8o4r?1IbmKlEb%0i=O<^HeuuNeR8wH;$yxFkU2bP5GF_~4SFQ`FTM zr&4oz09g}#_)|*e!=Fw&QSEPk{H$seRgWZOk~jE_kIk0X5I-h*B8W?gwSm|PalXzq zEwUV9IHy`^i+uIe&W;Uo-W`0z0=?wuI(am(OVc-5&btQf>U1Xwi{7K(3u+SW=*hu7 zry75i9_VRl(A-0<6}1Cu4&{qoG6`p+P9xnggrrVbh>u75BF9n0;be}XOZ*NbtjrOS zoMaOKLZuh3M7+?I5b|GC4 z+Ha6tH5k{jt*`U!$ z6DE{}IHR`;D`_jdhnoW7#gMstS;UBjVMiYN^sgyw(&$E&SZBE0+&-yx!l=0uo0DqKut)ucjmp(E4t}6 zLQNZO!qbfL)#u?i>R>$}4;{wbq$~^s`%e>U1}DXLWu&8mEzFMZT{1~;Fq!&lcZ(G3 z+_X8>pGijTyAlzG|G=0QzDrTpprIK@Gnf6&{qvCQyFTL5?~ccd@mMC^5T97a0b7Xs zk}aqKf#j};gmC0dB40J47LN{y&h+Wj!>n!&w2F@Dsj}bc9Y*yIiPQEf)yblB&VB6G zuejonK6?Ckt`KC)KAN^D`su8e2tgGxquS6wRpA~%1g1q!h63wfJQQHvH)b9A?-J08#-s%B%>6Jx5NY^i*WH6KuO{*SnN%Bl8_qeto-a{^jmk8MmW#@INSVXqD~w-6Kg zYwRNU^(dO~eUkxwo&I=-mi$xvHKAsWFQiJM+Vn$uq%R6JdwHnr5G&whOT~DoPG;o> z+wtg4cYw%3r4HifgsO}b`}U|qmbOGaJYtsohzk@glfxDpPq`J)K#B;R-v2-I>Xc&u z;h03*6rln*%Cv<|8y36yh#K1K{GU}EJ){L)i$HQ`vl!K%_@j^hAL8g%$YW1u-$E0C ztr-&F{*>4;Q#AjQ?Santr?>+N9r=?R9p`zXs$!L#lKl#|A5D4Rx}TxWrgdKUlb8@a z$|E+@iDO&jO$aisto=?DMu++Eq(ufO{n`CA=tnXTO&L% zc3UMT6WlR;M%LWwqeq*rI;X|!fQ`*;NUf1a%xPzwCz~ZF2#LA`KgGd59Tq#ijLFol z0Z0xA499UH=~Jdi0|E{S_fZ0Zc$;7s{(7AyNZGU5AY~uAEdu@(f@(8u zY^X)FMsx(nS3tQ7$8{Xh&F}8$G`G~x`p#?AGSGg=J!<(Zm%c)eRE2)p#MOb0SJX{O z8DsvIUSh$Jmk z`iO*7Wv?z5op`{K1-x6-dtKqvwnh_=`k~mVf|)h_=oNPfiG5DWXbB8!By`7iAuD z1E}A?Ja0kY_>V>Wl%Bq7h8|xml!kRy3AV~48KP-9p$WM%9nl5Eucp=#{^C!dhXnH4V&UTIHF^34Ft>U92siZVL(4T+& zqy{JkYNKd}KwpKLM{o1wwA<(D8XJgMHVvTEfvV^e>jZMsw98%Jgw}E|H0ReJ+uC zjM{cq*{@R-wBpRk(N9r&pcaNro!DkXZHD!ReOj2+jn zliG*Gu8#Bpp$-T2x~R5Mb#e<|Bh1q#Pagg?z}0fd41-wAfkh(=bA+7JS(+h|o!fxv zkSN%aIi&_`{o6VJlG{ybq|aA~r?pD=ZqatHKG}zhx~J2@wEjRn-hEm|`*T6{V_cwL z%UuHx=qE|Q7mxOgR}LcZdav`#=Ze+sT$`p>z529gyy9Hn;B|pDdZZ}ggj%B-8_@zH z_fXCAR9*-eC@+wyzv7b{ni8n1r)lrZ_c{6w2fJ}n(I`OGYFZ<&U(ON1tJ02EI6+8w zK&uid-YU)x;YA0^sHZEFV=YEoufB#j_3NJAJ@036H>XqGoD8C}aES}5TwGC7_Yg;T zOtsUD^?>9%@nCyWP9c`VvD^a=PKlXxIo&`O@@OXHa-VDw6_J^ZAT+9ZkqObDdQ9C0 z5I`ZK^o6DK(G7!sn(gt_Mdd(0ihZ8&$N=sIape*kG^x!Om; zmi+g5u})6W$K0!5^2|=}4v}}0cZD`S~#hu+@L$6DB5n(~R9p-SUE<8+4 z25!|v{{JWLU$)#vl667&RWSPNoV6O-!8_TrNaaP^mCDqXw6kiT8Au{XWPkt*AVQ)R zUaEWbuxDp}o~i9KcXPNq93&&8Jb$gq5Zvth%$>OS-OX~>?oX*v`fFs&2z1IQ-9gU~5=B?uAVxy1Q2j+-0fqEdH zsC!6V19}$lK%pi@=!Nser4lRNm};I+O@+zmzh`M}&*3U@?2CoBYJV;f>PX~B^=5n* z;}K59Y&K=Hjd}ADFE?vR)JZgYEPgBaFaVqq9y)Io*j#T!LYP^EL#EyS8N8A7;qeXd z>9XCXdGsMGqc?ESze^+?OS(h;=xMGZui2c9+ka4(kLql=vY~s+v2FAbRTY7mw?LZx z>(|f@STdQk@3P{t{9HetwZRe|2>#~4OEKGwa4tSBDc|%>Hwm<}77OLA4 zK~^!jETE6ni_PtWo1%$*jb_uZ;Uj%{UpTHx#>bYV8KiHm;w?3OfTI>m3*KOO!OW{` zHsD_L6O9hh24cO8ePVC39Y!uGYxZH4rcdYXJzV;qWMUIDH6_lH@Y)<_nV|mSg`0~| z?WNIxB?tDVc-d@EKV)lly$CcKNb4y7jQRTKq0K#=-Ce&aLb-lRo@rcnt#2&y6KrC7k?{e8u@zUwhm;>adxp4}7tm?@*lYRGJqShDJSKvtonY zCdPH3-WASqpW)EK0z8ED+7vzU6LknSWqT^szrLdBX%_8gYToOo5P*IQ(nez(yivPX-Sv%8tmQt4L*iP96LoFu9xO316rytz1qexVasG zUWxpW^nlM=*)o9jqGQcl2aL!_1ddIIc*>FTJYY`x^PtF8*&0n>&Dx(D6KAJ6MEV%G zb`Km@W?HFiz)!=kuc8d?55hUXfqAmS8N*JR*kVmv-nCE1s{P|w8Of;qqufzHB(%6`OYHA8$34Cz*9B_OSdMW4)8X%oe*8*8t5FF+0KxNUvXeg~=mWK}| z@m+o_us2+6Vp(4-rkk#02C_-6LgE`RoAL%T!rtD&_Qb#n(j`XUh50ouVbE@!1u1qK^i{haj z;AEnK*a>ALt+YUK_|M7l|h8!y|Rc|TS}PcwNaQ+S@TMX|^<0g;Gv zcpaebBlYQ2B9fE>jqc{{JDA9*%a+4K|M`IZFs>{+m_0Jf5rSE<7h)4gK|3XO11l^? zi1S%ee~^C38vE}O-dog(3K1#%cr|YSo@6-6x@%v{h3Hng;YqQhQ`#k!P>{)Fj8Xf6 z|GYB7ImX~?YJMK`^sIDUQb0V6SM>tjK&m|z&Xx#t1!z_yrj$nMga%CS0H8{q<0&bG zqy#bsgzBM(Q(COkN?^7`pff<9vWhz8pEXQU0^!2%vZqw*`BIczT&iTd!svts%(%FG zM7B!Ox-q}q5eaw%@U~fF%Z7sKgaGK5-T(S7{_UqvtdD;aUl7y~P1-jZ0%hXlQduVv zjt}!Pha)!90a|<`ZQ8zh<>&M23N*e7okLS6YaGOTcu4G&e0DSH!{2Y%?4_ zNC;$3A0t(!$`#g^bIvp95G0mFftU2kVNtj=v5-0Cg+}gR@f93BqaSfrCOI5yYxzw3(-wE_ZzZ*#)GJF9xy(BC$WljDv#u$z|q{O zALmdyp^&CF>4AFo^cmy#bR>c#{MM0~SFH9QGqI(Lh91Gk1P2_l6jj_K zuJo6<8quTcPK9jXaRCdp)~S$ArWq@$G3oQ?E%CS$2dXKY+2D>bj8hXnecO{Owq4oP z3_Q5X1*f}Ts~};jCVc(HP6-H2FJhcyoPsgBF2cM;#U;an!B`D+0lG&n8+^541?FQiwpX*0b7S=$txb?nD|-HS_<- zzGg@9x|qc1EK;os@i`zC-mK#tNI~6EL(plBL>+_USt;TXVj+Q3iAf4PJj@^xoar3ADvAZ&EzT3>J?P*C(u1zI&*8ubrzGKl zq6;7d+f~QFc140+WEi#Ld^i3JYxs|$PY@NcBfRQC=2Ly1mZ}tFz0(01yQIP`=rdJe z=dpPZjjhC;H)#c2jqYf8i1|%+qDC){m5h-T+^97OM>o5>o6TA@>7|^w$IJ=~Vq2oX zBN}tRM^TI~gq&)}B-JYqd_4frs}BmItc~f8E5|DwH_A-99ZCd&#ipV`ZDRHukr^7v zyv{KU(*9mwTh{_Xx$6_X)f}Sq(B#;my44MyLMKBI9Z*e!v_%>Ky?-@m=+$-p_)>{X z@^YCvm{^?zN@W=fl&fchdh7+fJ5fbKwOh=~1S*iDC5|ky$BX)i%f#i3hVA*89<z4SOpZI|rz)TG^SvQzrGZ{~I>|dTs%SMycyv z=Kq~_L6zoD$J$kJ&M~LDD9LtOK@o4^eN{eTBH(n|@i|rNT0qqHHaN#@?~_pyci#+Q zsh9e5Rut(OSR5Tk1C2e(r?Xb{#ELnevQO5h22nvzr_4%7LFRKE9~!>H5oNpkX|6=U zF^OKI6Bj>FN13l4bdQ;oR5SdLY)-GD2Wn(9K8|NyYY+`?PFyX*4_MZo5-Xu0^w8PA zmG<_au8p4u3lJAq0fQ!1D((qBaJWNFuuyV5nM!j>eZW(*E@QZv;}{&Ig1}B|DBWh+ zM27&HKxMy;s~qOU@>7Jp`dXw3Gv57$&Er%%Vz>Hz>LfLc#uIcuU-1a>aQ>3ucA9I! zjN6~72WP)VNc%6*iXI#2 ziNKXvl~6mclRCw)5mh$rhq4BSJumTfZMk702)zGtcviKPsr)FJn6SKFYYBz4Y~jV0 z0p(Whb9LE$b->JQq@t*NIV(S{YB3eg+Fj{`S$!Z9&af+=xcb~54G!s@&Vo`yT42kp zLB4X;quHu$s1>gwYu$t%&OR$JFRyh$l{Uccx6WTNu!f6fX*B-i?fKN2xk^VR7FO-= zuLkL_E^@Kjkn9RI+RV~*nQybKXCwp(TATCs;$b_lu2{gxZ-c!_*g8}zpJBWKo8M(# zH%u-8lGHW^-%ix+Q*pwb<035XNrg6dXg1hD78lSRf~n4BOC=gEMIzs6kR2a$L&MeRO~6uRzv8^T#BWQ zZ=}R8;8@z|1=(EZOx4O?uV}vX3MslyTBv2dUQWLB3Msmo6#4q+l5Q_w^sE9-?%JBV z1rPq)?Z_??qH6@K@HWMXS8CnI>PoMWqMJ#vuYWG-_VUHgE8w)nGAZ1ZpFWrUZ*V|) zn~CUV6WEUi=VH{H1dB1Gz0pW?vk~f5@qtLp5b{=hiL^_dV^pG%lJggV>dEVwNbkq{Q`JzOoPIrWCuNwKNQ2lyxn z2n~h3^LJwS;O~LPGb@nOrh>OFH;|K&31MLo_U9u$0vgk1$;RdRDxt3|I;Ka;9D9~K zo{=fSjE0^cn!_>8qhHf>n^O0GS7=FWNi>=Ui&<3`(Pz@|6<;Xje1xNE=-+R6AE!B# zbfE4k4L{d#z|Mz_d`u4_24@{Oa$@&7!Uvl&w;~#JII{(OK>5%Oh!-?~u;(=}N8_9r z#1S}=Y09FT3P~y~UWa&E(+2JU3}&=lKd zz)GjqW~fBr+0(hI7>)WD$jG z8G6%p%7?O^)Te4B#~yMvj~tLc7gXN-M>GG=46y# zBV^JThj!nm)oD-7(Z4sv4x8M}!9T5tdkW2^k>UIDfR#x;X$zm0O}^&6$3qHzfRD)2 zN&91l{Sztu(rtEX4(*RlN^oNA6fpG6?K3Y2UMCrhttz!jm`DZI!!A0(EkjtmK{>` z@qk`iT8`Qu(+rEb>eJVWzgZQ51^U}Xl(<`Azpf<>yS6<4M2%c^rcdF-hp;<9NH3m4EOH2K%r}W>>9eijU*!`9YU%Yc!pzJeTfL3~cP@aw@;Tb9jAV=M8Q?u1-wM zTRlIHMTVrnnxCF>SKiQj%1(F5ggKS;aud-rZ7kXVSs!!rRS%s;(GlL`k8Dk?a_9U{ z(v~kk0H^xQ?g6Vi9oi9k6nI|EP6|MUc3FDNX&RImT#O9VUy7$+>KDJ{`40Mt%v;B2h+!5qs< zM=pBpq%;h#LkhRX)YDa0@W?3IC2v)KDs!x3W$l{>DZRX>7`}UOu zdgTK!Tt^@w^;xRQ4@V&B8{>XeNGUpPg6`@44z5cxxb-ivSyr~`!ohk^XSU{w`*qkD zt3%s;_N&XhX*h4$i8_$Ey-^ibW`6F5?`Q8a7o&MA)dt6eZIr)lBkM#$ScC|e(nTLV zKr|{bunZbFBsoXSWWRLgbqSaY1GRA)%snMJ4LHv^#%A=pdHO_Tku4O;yi+GzMAnmT zfQVyPtaW|(k5oH=UN|};I9iuJI-g=+6 zWrHwU@Bk1JKbTJ+4yLx5@`FTGir&~{Nu0e-6Zn_v!4WNoJ?`*k3ZH3f#mFdNq^94r z88l*P#mG2d#5oNXFw;9N217G9@))TO*x4Kq3S~5EsmpgdA(|k9dQ`#d#= zcOxFK@>U<5_=PI05&F`h+XR6umhC5cK`M?jP}69tI`K~UEG*VE?84{WY}mYa&P^m! zTNrgxO`6TyV}_^LEv%cgwdG|prl$W*!=W^i=%J}MWkOaxQOq(;SYgdKJt;R;=pm{> zV$wc@go;GBr-c^`6~?lQ-z+jerZX7Jj`6y*ph#%UWY+RtWcIM(TCwF(-#S$n4iiQl zij~V0@o>d}Jzwify9wI~4(E{x8*P$(Slr34qAnSO$Fgi2(<7iSC#N0{LMOu)h$9j7 z-2MU7VGaE*C3Z4daOO6?OFO`&Z3rc>hJAgFJ?10wimiGqOXR|-{Y^H`3lP~J6QGL* zbYfwqEZ{!(sGM(~vzWG9y>Z2U^|oqnOW>Ve%sK*IFhN=`+hR^qd_(EL&{dsgr&BB}t3Y%g9xQ@>=!yoSjFsa$GIjr{K&L5f8)>r5TGfo~r#1`wWMR_-qp&9zCT0YO;bxR-)-CG?{t> z@6IK9{M&?XN&)x#eTm6yi34Ob_}^kHLG##92d2&(QK>|NA5+2egl^5(zeVYhdOc}Q zBX#(oJ{e65*C zv=AcN?NT@h&O2Fb35Bw<)SCvoAxo^Q;#@T9kecVHHDExmO-=4BQ)>1`ol6he8Uh52 z3G_RdioewsPVH2WR4e@>bz)N~Y3xabHKiJ@sdlMm{k=-o>(p8>VWlF+zEW(=TAV;A z>4i!-R&ml6Zc>2ssi^0q=J~L)pnr-edUByIdsLqy(COHIZ|HqA(|1Gf4r4+PZE-g0 zKPHYra`8d+5n^rD($aV{pox{nV@EGzuUcDbb2WlKW(nmK$RMPO!~9?Yukq)1)RVe@)wu@2{v^lQ z2Ov|9V1@v}31(o`g;I`2i}t5qe`wQuEfV_Z(#;OR4pKegz&_}FVWgy*guukji3AV% zS?>vzWY_JOkCyZiU>k>t&O@DktVh!i((xOVJ|5P4mO{w-MV3NkdZwj?XQ|{9mO1aP zLc8af@s!%eYTB+#?7pH};304LXfcg-t%)DBuRTcAgNVIZz}^Kr9)EndXsxyACtuMU>Y(vetj>U16ciKlAMn^j zb(N$gse#lekTL45V-D?57G-)Yzp$exk=nu`QhW;w;e6AFEl#YbMSRSjupDHGA`uCG z(I!om;#@?-UURI3F-or{eXBgj+t6T=r+tx*yR<@1?#Ak@BRp-M%4?$f7~ak|W$>1-C+Hf^zuPPFS$@H4ybd?~f$U z4r^?aBE`Lv(lDy^9 z>c(!;9X#wI!i5TCM9J7rYalgMj;3~awSkQow#hRrXl#%$*8)LQ?M-r|@1mqpiQS&` z+^}$tbHN!6hw5xd zE+5-`HEG{c13}ezrv6d##eClW{r~;LlXa4t}`RqcOro=9k`1W5Djc|j@eSDRhHH&p|3qibOADBsh+h~ z{fp#;*-IskeX;Ns%Gv<29A-}M4AYt^7Lq@CJV$6+D<|8!L5$@$cm~7vCe|;uex>Nq zAEW{5HcyiWbrtiar;ft<6%7~Q(k-R?ke#T%V$0Jsq*!V~R5T~8<4dg{)9>d24<`3E z@Ql4zhko~%E~|JH%7FL+K--$n&~2!)yjiE}D*hFho;n`T<7jz-m@|iSO~1c+EO+cj z+m&ua%B%%;&Az+;?GpmipNxzH*Pr71Pw!dD7owYK-H)RCvD3|!=ob<(=$B3h#|r5# zr!HwiJsividT9gX5ut^8)q_yK@{oL`aXbFuf0bf1nYQnK|D}Cb{$eCEcF=<;lFCyL zUx{*#+A3o&`Bj<1vrv~##nBJ}r^}Xm(r_tK@};_R)zN^Oe!7uG=ylWg7XQ$fML!tE zh;HQXl%~J2C-sG6V<-(6PXop$f#Tc;igRxm(?A~gfjm0KjDNsAm(`Pc!iBm!8+sMA z*G;NLjYI@JaJ+vG_Nw9Kid3h)eosz&=RKj$!=a&`QK9~kh4}^C3c}q_79SA72S<01 zl7xU}s_Stm;T=3jkUiC9u>}e{zC-<$?CGYG`dlP?Hz_cBtN+*kO+6z_>!XEUr>De9 zb|@&K8*u;Y|GtWvty*j_Lx=D{FPOPDFV>hkj74%hSLHUtlo;Z5A(@z@#?gb(emiK0 z%vaQ>PY_&QCi~AlxlqR~wU9f^!O`Fmmzla$dh9IyEvYux-c(0=r)VL9o~qMmI@RVM z$|^$#q@Y@|sZLpQh?9RciSmBcS4N#u+kn@&x4*Q%WjiBLVazQ5YbxpbUYl`Lp5nA` ze>?3(GSfbwWbNY#4#9I3Mr)gfb=FoY4r@Xnjz@|xXE@Z9WyM3zuPCCMCNyj~^)Yb( zZ+>Q7>4SG!nEh6gJC8gd%1cTbF<@ zHuUl`E!Dkmjx=(u>ugQq>l5EAUnGPTl*%*i1H4RuZY4Dg^#Q?n_wf#{TB2hEZ?f1j z$c{r5?}FYjG=MB$VCuVA8Vho*{jY7c=`JnM2{b%X2BjM^FRvB>f4I#v;#Dn`Wo^Upn5V-8TBp-^%KmsK-3e- zicLyA0qhJau()JW0$b@fygccLrmnPl#ZNdS;Ml6OYA6-0yq_0Du@ zf$|gLGu7a8 zC<@)$t7`$Mh6CZyw0}~$6u{ydV5wTqoNCdt)H+sDVCtb@|I|aKUJG-rAtQCC=}v6) z50*;-jP%F*ROXFtw!4IY)UC_2qi(14m8jJXtI~(O`NB6}U5R>XJ_r9}a6X0UNL61r z&7AN%s;@*n*F`dBAIU*sbd!5m^vXE|8mk`j@)Ly7@ zXndfNo(0CgL3 zIO0%>`c-l*kdyVNBFw9ppi9j=^rc*4(a&8JkGO4n$yofe?3ua21p=_{?C-d$FYwE84BUM>YN z)-T8x^#Z92QK~1R0+I7rhTmE%sev>;`TbSIl~bCSOYz+gz^wfpfv`lb4zwARr&Fie zdN$^^W#7W9>-?3R0#QxSOjd*z zSX?Z>#OXPWwn;{^nr=gv5}10Ylh1JU zP6KvEnS_8A9moKTQq@LDMcr53r`MMP;5Yd|T{M{;h)qI4X41zwth->Eg_RN*ztwu! z2Op`rd2}TL9_xmdD)CC%94jR-^{(f<2T<3hT|z+mZfDh|IXvK0_esWjp2#6Y&mib2 zr-W)gE`z=jwR%hl4yT4^d?8BRMM_LBJF$A$Gu1&->do2cH{EU3!@u%N#$UI7N={ls zbr%U;9#xHVQM;7DW^IE8<}nK~21-(KFUkxbo~00^(PoDD{1a z)s-m6TFG8Cw7T=CK>+=*)q*KMYJDjH^%$@dQVaU>OvC4OVap^GXs*ARW0DmQO|BlRx)i`j_14m=`|!Gyfb@8L zU6<85=_c@8fq->OO)bfzvW*K-PWAUj?O36{HNFz{%u-9!Xc7X_(@2=YKkhR~tA*gCh{IzV8j9Y4R;sSE4pOSj4-gQT3CbQSM9wS+4fzEVR6?Fm4 z%O?o|&E*46y87Bm32Y%<&??<^eQPTzKs^J67zU96B z@}u?X+eraRTUv8JT7A3vS|Ae}BCV|?1SGwdqV9%@b!u7B&0wi}t?ELQ>Ymrw|DcYB27@Mkl1%pail`kyXsN`8_U#A}qB``glM|(++%}kzlNdf9H zV1-^`H}UPH1v-=Z)0s?n(gKw!l^T1M&Ai>omd2gbVfEFwlb)AT^i8ar3&^hvyzIpG zibm{895Cym8_-Lsxu~&}A%&F^*h<|Z?2W2)Vb!$;%yoOACT8?(v6T|oNcU;VjJ}z& z>(zP^fsb{Si4OxOBTxD@^dtgTuk5bL^i;II6183$O3iwSTna$X@?|u*LEIIoN?d^h zj&20ceaogk>&b+&&>fLl-EnmxN@?h+EviagomnY?t)zd^(5GEV_d+K$XaRqr8|ocm z?R1@0+b+o|4Wluz?Ioqg;fY<6M#rb!hT5u=*knKktffxa5LsI0I4U zRy4Z4r`kWyQ9g_`%EAaFEznU9%DzH9c;`QKu^La>Kd7eunB+N}{IpMYLNL?zAKB@# zJjNE(I`*n`Pa&PQKvld%o8rB@)Qm-N-dyU4a+h@41a?DkxHUu}Pq%W*B%@+jB?iWA zvMJI?1!_~5Nf)$@027uXD9=GumcW5dTa}d-OTx7`YadFExrQUXT4zf-@bYek?HtE?PH zm-UdwJgw1a)#5bN8ejbuaj^?rLKgcn&7gPWhh__ZBNE=49&4gye>yT@%sNJLNHLHq zEJ7y|{M^Dz(Ao}ehp`2EVWBaQ!!)>!?_|PQc8o((Vb3i>bT@~NDgge zGGSOxnnqMxpJB;_VLfT=_T4x?)<^_xJ?A2ON-d~L3eI}MRkBGB2>EQFMj~kI>C(6v zi|p{VY4Daz7}j%bPRU;Tu@^!o()fk-L@|R!4?MNM081te>$#qrA}PEqESWH@=esHM zrwsmmx_3b&f}YrKG?vRx=o=;W3vEe-Wj$Z&_dI3(>ud`ZhmS%RyEKmwDeh5St4j@7 z!fT`6*q-Fg0ltOA?IrtLl-=+FrI;ACO2&uZ&v~qlm1BWmF*s8vkB4o&>YIsrb|&bO>0F->W~tU|!SFVf;TU31t1KD4 z*x_?R114TwVNYk=nyAyca_f`}APk3Xov#uDie?04H>##-FDV9+qn zC&O|^<~B`5{e*1CF2T&T0gP=x^n;a>LqSV;g0n%dZP05C!t&XngcH|o#7Ctz&FM3J zLzXbq3GS@;?ukNafQ z%eb-0fC*PGh9<42aeqKh)%zJ!3B_RXI!O;cYdf3{#N1jq5ea-eb9zciU}*u5;ad8%t?(!Gv_y7 z0ww;P!E9?F?;bZ)`aVdEuEItUg9;;&5BZf!X+$l%#k7wT(}*y(N!95* z>rPoh@9x3fcjr;s_?6Z^pL|c#7Ce3)T>e}FFIMfx&nb;8&(YuWtSsusvk8--6>(3Y zxyy0;p~1%U2qBJAYXV4#V_&Rz@E@?*lc_v9mGrSvHTg(=Pa5=>GyphhT^!UY3#;ke z3d9GGEg5`#T7meCObB-1Ke&I-oOpj)BH*P3&aqZ9@k%ljpt!&jT>vImj<;r6` zqIo&0$kT~|m4gxw%cW}ARAp&x28Iie9{k|~nzLEK^ZDyNY3npvCx>-eVkv;W!tE~g z6j7(p+|j&!qg~Kun6pFl>f|Xg!qOHBXW?-?w81TX+v<>OFb7*D{FTqgKJ$v}L7#4E zG<$s4%bi2Wv13#}^G>7KlgSDWq)Ou<8jX`B=prAkCiKpFKK>8cR~nC!G0(%lk!vP3 z?oUZwQlFx%B8>g8VndyyeTtY)J(bZYI`%*E&yMROJ!Q^hqa?OKfw60`2Zmp{6IFUW zl2K?f!Zl;D#T@#JbX}^%J*m(}9?gXt7)Cy6Rh^B;K6pY)*6CTxRKU zYQB=@92@L75`rmjKw%e~`Xvb;ix+Rk!t(23ppP4qEKu_Mf2 zj3)LqnmwMiZ{mOd>4)|W{%GNZBXc+G<}AXA(Z~ubspe#RfTV}e#;E0o2UdN|GD>76 zU`^k~u84S1vpT3#Hq69ar7*tU%+R^fNG~rpIyqjf zdUk<~z4plJE_4FT3N>CGCX8(nTC6B2U@31G*`1z=Po#e?n zsZ>;eVo!DYDGLfSAyIpR&LMl1EmiYHaCi@9c^pzG>Ug%G8b5pB&{ENtbFMdf;Hsxk zw}MrQJ>kaVh}jtQUW&BLa453C6R_ouLa2-OefkL3q*V!zIh@ef3W9@~ui>_)>m%dH zD+1t=wCqWRHTGB@TyQjC)~=vGWBw)2^0Om|SfaqQ$)f!kv*fkv4V@$QtaP%4i4khf z3{fJIy4IaNzV3Q=1fXZlZn|_pf~w{%YY@2-fzSB8`I)lkcZx4WH#a)0YOqgu1L`CS zjh${;&5nPiv%!04Q(qcsai8`K*7C0H+yHHq%J}}-xX`H%wUox2Gj$7js{wUX&ng-Y zYofkJ*o&4Y0N~NjEKY$jw4Y1iY}o*cq~w_yvYwNrkkuNGdug z8Vrlm35Bw*>jTwgv?-`-1_XE0mp zO}{bsOY9xM0$EPgX3G6}C#M0_ek@lY=(*b=aX_kx_6%J>t9Cn_&!Sg^p!FVR(B=qH zANB4%%ucAubvLPjIEAKw$BYkMlr`_=!{M4lFHc-niy^8YRhJjjOv+>z=%drP3L&!( z;OuZn^CRLWQ;+25v`H%t9~8aI4i?1&#vL$rf!g+%#(MmtqbEda+8}n0U($;RvuzN@ z#_hi+Tk1rV`$B#twNZ~I^ogbID}zP^w)qAd$qS84tIE82B=DfqnfI_JAwybv4H_5iW+&e`$*F`&A@@qxL;W5lPer6}a@X}eF z5Kit?HHRbhMng)`DHEf+r5U`uNvX{(%*aM3HEuF(|DI>ZW12^wDr!rbBI%Zgv?lIr zgguim7AXd4=%t*GX~o0uvk7|<(usk&XTT>J;L6d|*e_?yp-J0cQfebOb;mdSDXBM2 z&Xo^#gp@YAG4I6{lo&NTn}enXHJVOC0B=X|{%qITp*_QbkQ&>v2RD|VGaBi$Q~Bta z)9484*h(wpl#uVM@`QQYO%i=Aj}KW-pqs4Da!p*^-FXL29+H%2iF73GBu8Li zg*Baz5KHRU z=E%;a;a?4Xe7X-kk%3PU4#Y;j>VqaUpg$kh<+0q+(Daa0tn7<~u+mY_ye@bQ|*?b|}J(0j?WApp?b~PLq%Mv{_CQ=r`>GkY9^ip-w)F-vwSU+|S z(X~k`!|&lGpK<%!tAKalS3$SH2nd9(J-zCieVU=K3O_&eO64Gh#hOS% zkM~KDatF6Qo%QwwOO#nV8s=j-#(T%jKH17oTzOh)QTM=^%@gj1c}MT1^94ohQ4f7?6^LHlPp9&4R-2Br*TRnx1mz(^C^<9?8&wt-#I{6%;REKUN6N*v$^zf)jJ|MHHr3)B z5$2OB!-u{|2ve6((~ElUlPs|i7wsPvz3Y!%8C3djes^X(Uo6^BDdrpzx?Y{aNZL(c!&p~S2m>W%Yn5sUY9^lLDU|#>l za@GD=(fc0Z==%fqr2A>9T9!DFL>;LT!Qvt{xnyk}2x!b60wOOJ`JBsAp^!u}02a+{ z&?{!KaLR>?6h!n|>I!?L_$4HxRz(_exJ|JMhv)J{8HcoDWYN3# z(PPKA9-oMXxat$TIZB`F&0daiV9`8c?>!8d@m|P)Ih-)gQ=Bt6shK)ERykC0Smp8! z2tEp5Vjz0Cfr&D}J6yvCj4o_|ddBzfKL)rW4%24tOJ+UJzNJ30+mIcyJ-3V0ZM^OZ z%W-o7mTmZ!T(~1R{A&HqU{#6M0;lJ^dlITVZKz~0QBm*BCOh;4!#|X9 z4}Dm;;OY&CZ#CY5Z_Z(+NI!o3WyqdZh3Rt@Bt!29rF%8p7~KH0D#O)e*?!6naLt-v z@j|;9;#pl=ezFysx}3Fej9NV8XLS)h$b#GCPDdf(2!SbmeAE?DCsRy3k^zOZ@^^i*)*@6 zYsGsT5$^a{7CP!Ru1vsd1fLzZ@6H=*YshAw=JX-x{XUW!1Zg+A0@GG!tBY2Xb*;{P zTru0>wB7m0V?1Ccr^q-Qd{9*?mGCDQK&osG?GjiOF__EjYAz>g<*}6O-`G$V9aiiw zuiCHaa>udmZ^^+%>pW<*_k`U`EPheb*tTI9EQ>Q zJ@D~5pH=U5xRg)wylnJ@$z*cp-wH1mle}iX18U17|Kr1X4KaIwSF;@-k?%c24bxNL zHc(rh%>7S`^e1e93yL*uO8s)^IT}wACG<|fx4L|`>+&h9hXDE%Hbbwt#gTKqE=wqU`jAL+b8s8$cv8~o-mLmta z%huS{7m~^ST#U!<4@rd$VR;V60tIW0(}2f)`GD27AjbF)5R}-Q4%?K}C5r~5?a?>+ zQ$ZC>x~2hMgLQCDmR(wa3j^#RM!B@Cl=c3x{9Hd$CYCKr>X9t{)9tM1kyagvs)sx) zl8WBqj$;WmWqQ|9@?=*Y(I2-MolFR$j)2Wg4q6KYI_{ucH+4X(s#;7Z9c-Jf>Al`O z+CQ|D31Qk1j{5|wJ=Fc_2%Ss_Gpo!EoOhK6JBLmt1nYH4j_yx9S|#sZmIyn&+?y>D z0b5UW?cI*Gb3d%7$TR&odStzgwop@M)>EWrC0jQeUa7T6j#y~cvxINF0L>8#&3dkN z>mu|~6r|!7@<{Ft0tY^A~r=rS!Wt2dm*3(42kYi!4 z0~?XR7ybM1ykC}3QI=E%{=|Wwu@8j?rR?)P?MVbZZP!$xKj!IfhnUq+u^_f39yq!Q zJ>d=c@C%0(s6NqG-e}|5CdTdORQ>uM-%;E`j-JI{Oj<0wVOf`2IX)%{{{SPAxL&d_&T`& z9m?Ua%OG}H@n4le{MY@2zx*NmZ@NX_{Rhn3H}8HSh^>Ru>`^-;g2D%belJBq}s+`iQoHO>tL4)crL}hM3+9IYUHv8;r8P~~Xvrj5L z-0r+EKT!*dCE`w`8P6a{X44xod-a@*UIj9lU&-XMRbxgSdHCuSCzRbXoZW#stlRVn z9sWuNKV0YWs_^$ExYA#T#W@ z#F+F2psx2is92xgU>&PHH(J+FvF_hk>(N*Ak`%lR`oiPyK-%K6_cE2$xnO_jCiJ8w zxd_&8m<^X)CRcMgmDRr*G)LESFi^4XzcD;3tIqVvGDJ~Umq4-z0T^4I!GqS|y;f7x zM+A4}nW+nR+=q&F|2?s+pEziB|5n&$4My7=-FfJ9LZ1~{S}TYs>gOvkb08rzmi_w> zvh2!k%EO~bZvGqIdzSkoF9+^W;E_6LoyWv~=aZ+*`a&f&2+~V50u!tLJMLMnl81*Z z^nvyaTS&3(zb#nh%LeWOA1d$t=J~Z+)e>BOwg)wV!KH3ZPl zNg&$VtY2dsRb0l#R7=G}6R7TNoYY7fsclnt>b3Ipk>R^^x=LD6_7uWhcwCQRa7#ZA zb_3tfLBxtTqW%j)_57_?zE)0E`cP)Mmc@?DWz^5b$F~y3ckO+BOsk!`!RxYlcu*dv zd~xT8ifC}GXzA%g=SaN=kJrhCI2$>D9d(2rk4>eQ^L)+Ts5G5AA2w(M?}2bPhvnuv zq|zEqU%0tzKPF9))o}NH@=R!TZ0nVw@#GHSmpP^!uMp=^T_lfb`+G>JIg2|SyGg#t z+9!>6>a^H7LXjy7Cd2-jQnR&B)>}R-iqmcOcVbH}K*bTd1(qCU1GL1?AQ=Yw<`ZLm zai#q0bi2)p9lbW!3g02c_UfAL@+sp3{Z~y3P+MMJyX(i2=W(xFHbAjFy?nQ?6ge3z z@z8xvZYppxSl*#~tQqMhqgqZL&2z9Oi`CtgTXN+MNd{k#OO{>AcQySjhG*ytWJf)q zd@K?8u6QhEdy6F)f+@Q;P+3Mi)E{t&>rig9l6w+gOEq-z#C2(nsAlX5oZXS`;fxz6 zrR-#BaEp0+pKjra66d`m3bNJ8E3>5?fk$`|ECx_0OI} z?ijDbSxOx1$YKPS$@+377UIMKtP{k@4TuZ@D_NG7nkF+{b?9p{XD1jOM7Ez06b)|y zyPwUrvX2UPEg?BX}}9_VYBctz*ibx9W?emk5ku%W9K{f6C@ZWa7GkQUT*q z-#e5NC&rV(9RAE51be$Q^OT5G^*}cb6K!Fbo~5*b+Va#Z5>Rl6;+^Xua=+6s0IMcj7&Z z62T#!sNa=g@~QuRLtnajv9xfJ>m=VMR9A$ha@%IpMZfUDZxn@hzeyUY^|? zxzPyQyXiRBp6Pjlp2C?xK*!&E$(#BJFARE}tgmv`$mZ;QzxT3WKRevW^xqcI2zwfS z)lh=)yOwqRKx()GcU(;v^>4T}ku--Z{J{MVWUFqslk3>~#p@Em(fzlBg_kLQed%(h zqy7z04VS8MB{_)FwXVU5-ErWSZwJ3`df?6%KKGjs2I*!e@W@1?*>f*cM$HxV|DO70Ectm>T*y2NJW!)j zd^j2KT$C5P$0~zYq~7a9I!mPujQSN=8RM{F)t4*rFfqG@M=ixYJ5f>tWXpk;FBVr@ znmE665#<-epi57thfTfSjNO^z7W?*WwC-#Bc*(~rV1fpNdgZ+$BEEwtG?y9^2eQv- zFt^1dPo}rM45&+cSIis>`3~?{pYa*;nwV}phxAV4y0}B1`FuE}6&#MQ)md9D_**9t z@S@WpGFuEM3P~PdLhCF0M(QB$MMhpyl+hjh0B^ADggF2>AEmKT%6^l5sr0B9qtRWb z=9UHB)5MjPN~Rgqb$X3`2&v_KKKoabN>ve3x)BUYbBw`{X%4*Dm{1UDvRt|4WT`_w(3RsT1H?3eKW zk=>Yq21^dBn{vQXM~#!EH~$Wsq4FBv-FCNJ*^SwGB%LE>tv&jtJm+cPSFpS*ET0n2 zHkCEE$=*4WZW24Jc4xAw(Vw=zC3S;tZx2_Nnn|gDK$&W64*CtP@M>nFE5(#`dw{_+@XF;iu zW;4fNNuyLR4;C5t($?(~>K3E_?uoj`HC;G_ZL`B%X-^{d=c9SMKPNc``DMIGjx}Oi zb|NDY_`-stUs5D_ClP^wm+d2Ij##LUYu+_cbP^E+z|mFks&6^E@4-nFAVjwi#&>}n ze&`c^2oa*22%|s_Z~BBcAwqN$VI0WeZJ+QqM2K!8OaeLly-)aih!EXGmW1c_4?M`-GoEgy z?ecQ1XJX9Z1NgliK$x=!jM4VS%MP7I%1XYFJYA ziyc`SO`h6!77l8=(+@pGCJN1+S?>vkIGEsdXuOKhtp_ZysoiK#`;14*z1*~-baTT# zb_2<&p-syM&A2D)TK3h%dI^(VQYBj&K0EhSOOv#l8d|KTcitPGW%%OY3&1x%loB%tKSl ze(E4bcLqBY+gy&|D>>U?Y??$xbBc}}8B9xJBN6nntvBUqvscoO*0ms3jHo+6?dWM> z{hobhA93)uLKr+fGOJ|aqQTVbcpvhuxz=O=9vF0B*s z|GR05hUyyX`nX#0`rGNn4*mG7*ySn5OW+*UPjjVb5o_8E`}Gi{)?ygJ1@Qm;zpkRG z=Zg;l&P7rc?+@M%wagJI!URuePs5z(lw?@D+?@|aQ>986dqT~bO@p44X10J$nRkNfg?#Dqs$>>BC>LKJ&4O;{n& zTACK|8tb;7G0;zy#1;s6C1<5K`!szNt&%w+MVL}$sE)=Xeu!4Fz)A~r(PF_hjj5G9 ziH;?Wq*F32NV-EVn3Aqpr$ad9U#V8ajiAoD$PwN9>hrK45aZn}vmFB|%$P@gN1q_6B z+QNL+*3Gd>;^f4qNb-nDO6bXiGWRGhSYV4$yJ={AOvAf`z4a+0O6G`!fL-m!n)fiN zU!{9)wI`2_Tma5MF~69ool-15ZxO$YRe5k0Xc zj>a zP^+g5S+DI(CgP4NL1%l|>l!lGf}*V;7QGb{SAt%-xJ&scU7 zYjyGjZ*WDK4S?iyr-6yp`6a75b=jtXl*JKsIp4s$1Y)S*kbI(dS=YymgH0Q48PsYk zOR6o?tme(1yn{_2YQ~~TSZ)dcmpgf~b-s42uOxkOtmKL~##S2|GZj1iOFw6)6I?`w zrE&`=t24I512I3y-1qPm7g!!V?Dt2~(7>^xBY2tv!VI$KJ=o$2v<-Tkm^0eMZ zDI%=e02aqRvEm^z4v&EX?~0L!ZWcT{YA63gKi7l;31>WS-H;;RVBlpXnDHExUYXKA zKRKycs80Hzg_=aoLUK58xO2Eg$-cU#wJr|ndKMI_{ss%tOD&A_(+zzMM$`Wa1N6X` z_B;bG;*VPu|2p(|m1g)`S*)mnR2w8P&4x|h!|zHE_)Ob_@91|k{#{DGXbWn|(7Z_44}YPW&mYFO8VI6pHDEyXi}}I#;rVyq8w|Yk7cAR#T6{%-n{B!&59s~4 zFM`s>VXatMwfpA4pWqrDc2O6Li)AICK?2Yt!aymg*eJn;dMHs)Uz*h|6bUbcmNZ&XwdcdvKW1{#TC8z z?~+Z`R3)Zm-vWQ#|btOye zW<4J1ovG;(a}c_fIa&DlCVVI-o7w!eSw(+!R)0K``8{&_tDjW(H~q!8?=OB*>&aGF*a_KW40+V;{ygBTDnv4=n1*9dQhv)Ojm85KAdoPd$Z5Vc#|SV z05zBlvQ@4|(^r%B7uB>A1S=d5yg5N_JmMq6NrQ>UAV}{$vS4C$r3pLw%SRY>e2X%N zv;IxeSL@&w2B0jBMvIoc@NQFa;0yQnb;)ZSp32r}`grcmwr#Vc1dsRT+iZ=n7mAHA zMqzePquAros?~2vR-DpWwSEUgnM|~zFV|G+7?o+wQ^0Ab>`OF!GHE~WF&v}kvc;YP zxF>lkW1PRy4Q)tosm0K=4RD9yGqw96gM(ysPMWtLGse|CS{h+5T9=}K6?Jj3OzDzb zowhKYwn}VwOx1F22G{v@-K08wNHjFQ1uFJu*X>_7YpgBXO_^@Gr?;^a7AUy}noH0g z(;uX+=r3=PFbl%I|ng4FYlsWr~bV&`%|s3{1t^uEl`JL+;C zqC7b!r#;sc;+EvZm0?*^CWAQfrD%|1d(ystbFR>a>OV zN}Zn2{tq8391dfjhXHY7e)MAG=&4!Xa|9`U&OfBf&XyB^#oc@~ZeJ6EzeCwGiqrmU zc%8%wdYPWosgup7yn+#vQ_rMJHn4@)B5oX%+a_*87RGnV0$k(jyW6ucpwkv6a+vj1 zbS%<_=h9O+zP3^VHOEEu9o?q~v(wenB$i6(Qx9}#x?@*$xmLTT!w_+%vF^53!{X9| z+io?r)8#Or=a-qRP46yP!_E$F?k?FgAhEdc;23YS>r#9LHG4Zc^?tJf#STc@oL#z$ z4{3Gf7Al0;^2>L@+4C?k=@qR8oR8Y-9Ut}mBYW3)YXnBbr{<=({8!=4#A2sZ#zMs1+BJX^N! zoqC6cD%5fnCVs=PwyTvFbL??(9^CuTW5h-in5(@StxB^&g}Dc-JLQzAPLqg670t;c zRZ3vvw$Ab=ob>L1M&Lqc?KXROz&`&IX7NzzVgn?O#}y|}m$*u00>P?2!q=b*Vz}9} z_u~{n)WrL8_LXD%4x+^Ovc_quDXb~S-LAdp^|9|nw3twrq?Jf&V5mO76R|9aq{@HNeWNKA|{OP?&glN z$&MI%KEQi`Ewfiz0x5jDoqDfr@py_4N%f^CWuYP=;*ni`>V}dw#_R1jkgB6j`xbH}zhw zBTgvDjJ}LF$>ES};boLP)+DkOvfh+OjK_ii=~QWmwnjtTKawK)q1;hVl47ent%2<&+ zp^#=*?VCbhEo$%Q&F!0@W;h9_rr0sS`{Savv*O`4FSGLW9jq*DD}Spm|E8e6v(!Tl zm*|S6UYTBKY3aPsA2*nuuHv7LHBVldh2^JPK-wnO-enNTNS!99Ey;E<7xj zI&e-^5_N&&4cv+$FmBmY33cNfnGy{USlL`6jN5xfAa$a&Yg!4eaE?oN`+mE_Fx~_t^t? z?WOEn^Paa4P5x9;o#9b?VwbmQk9l+G=jclv)@r2NsE1_Jrv_Cvf3%vkZ&F#NfXh*w zB20XVfM+(CdS_HMQXllFR?TdhuM-1v#{kc-I<#)abppqM7Fg{x&>msSL&k0rZEg@C zrk1v;BX#tv(poOG&GeLFV&#}f&@IIzaqayCSEI;?G~ki#l}Ml7UyCFQBijNa*priS z&TShBsKw0KFUSs|T?%&6=a<7$3Eg>H2B-nrw0H0JRq6c9-YxV2Vru4_+BAsh=idTX zBV_0GJ7!o7@_x3K3Bi2@pM1EI2-tbadhfRNYLD;Sm#Kkog|hbuImZoMj=hcfSU(uH(x`1r65N(ND4bUtkK z)m4M9Tw~Lv!Zr$w?S|!sIo>=6HIGv8$D%+&dLzd=S z%njEm3+%K&r|mEF8@2_HPwIVz6%hvb;%l_%7Mk)F6y=Ciu#=L(S&$>q=-FNSkbEv8 zcFmni!6AxWk;YT+7xUoMq&HcU!P}>sm8b(OQFaMdf>{r z&~}$12*P8Ornx7IQ`t*2Sml0iO=-g&BiiJDnZi^s7!ll}wa6o1I8U}yGpsWKm zx$-pMr&}7$UW|M;&h-@V#oeddD&a4D{yAAUaM?;WXicULoTH|I?!IF3LK{ppmde=Yf+Xz5Rmc)B2Xxh@<0U6-EJ5n>}Q^-2nk zR2Aio+L22=hfW&XQq7uEQ{Q}r-^GMmi~5AAz9b-&*~KZgEWV-lrdHAOs8fW6$}Aw$ zgvE5J`!q$ylW^ynt`L*7Cp{nJ3!1`7>|VO9WcGEtw-XGS-CRS|h#a?S>a&_dSWgX)v>nwd~E>)6S-ttW2UU{hao#xzgI@n6wX75}(q;Q3bkg zD$FY=aZjpgREuH{K^2>6=qlP(B@DB?FIL1cb)f!icJ%6%hjM?$aR@#ap{5j-CJw2D zKKJQCqC;7F6d!GXE74FbqpIJ2;esk{fO?}n13{`o8uds%UZC{y{|S$rJNSNV|Gm2u z{Q|;W3ir*0I*FC=`hYLBRt;vTKmVSm>pJ7%O*cQHqc?m_;9qM9qN6rwkhVzofjY$d z>U^LVM?ZcNRGF0)=*WWZlLHUx4ORpK9$VlX;n)o_m*DJxO)S_U!OBAi)M*8Ui_ILX zFbG*f?aK+<_9rg2F_x4 z+VeJJ!eEV!HL7f0J)@}!0szUx8G3(?*5E=gp8r)3*nsN)Bap>y+L0N)@B@SPpOQ|Cvc;X zpW^fjmb6an&YC5WBT;DVW_w2#Ka@K(sUN9NeM~VadfG!CD|zh5g*j=r=@4d{Mz_$T zp}cS8e*=9Q_}zSC`b6h`&4a(1A;DaGwtm4?|!C*Z!tha)OSr)CFcZf%vtZ8=SyFqr_xxZ*vs*%eagx_J<0mFq)KZ!ybo&z zaFaXjM9yEZ_ocVdnrpmK`=PAsZuMSLmtoBnoRMFHJp(nEC&DF{Cq8$YphH$XWcA*c zMJ&{mDO&9g8iLFgZ4uwU-nRw*XyKfMX_=JOsYExN+O#v>)B}WZU#dxqSqnE~2%5T8 zi|ASLXG1kRN&7+}%@t|4!@4+5qETP7YPM;`w18NM%eF}BGCn3e2bM-fT2UVaGEbxk zh_Ij?7Nc7pscY@4SV__+(=UO$6_krQ%xVV!dr+eWFQu-=CaU&X!F$dM#0Rk;eT23* zS++X7AT?>`cz@Asa;yM|s;?3HDnRek1U{WoJ6@l%T}I7sldq}E&dr{YIzl1Me3Az@ zz*SpvNfHG6zy;#$rfVKk$R0692q2)>wq~QY+``cXRs^52(>Z#gQCtdPPo^o<7vzwC z@utL~BPtgsO^RXjJ9^%{>jB=9PJ14)R_O*sIY$jW8`cggT_ZTg^UX%$Z?rOTe$RDqvAo7vWmeXz3Nr0 z2JN`C$L~fzs9x$VgO;ij#4dK#-XHkvKw)bgnQI;XXft-C*1 z`>87P921Utx=q(54wCjox^oLZ&uyNaPV{E4o70J!`hPV^mb)?~8X!bh3Dfqz*kXnf zZ>N(>Pkxmc-9((Vm})v=ca)u-E4)mJu2Pnh_CyanDa!bOxDzxQe}FTTDiyge*2ERN zt>t(9SYZJ^jW+vi^OzRCJQleyC++>|#GeVGQh1=gD)RZ$Hc#O?y$5i`ZoZ2<>L4}6 zfxd~XVDB&7z2qsObU-29RU8X%|M<86X#e;RBN(@+RI^-F+3@l}PqHj*Y1~PJtXoNw za8^`DCIeKZ3iAK$`TQwozdLhtg*!Ey%e>YJib1I}6k-%W9Uf zV#$QD62_k#)p29cCasY)c)DNXj6W8kk|^2!neaJ(SC}Q;;s3>S1^=dpC@CIu3{|)3 z7o=l5?I8c{7UZ;5L4#$7H)b>)k`2lZv`+m6FA- zOfyFFc9SQElIOSSh3NpUIQDqsDfOIB8>%r2m*z-)7JYyBX}#GOJmpm2xHYBiqz2B% zyo)zI%f{n}s@%CEmMHj~y6hjCliKfBZIU|kl9>P(h;+T#C+p;})+cY13{xY;W*^eT zN+ax5yP*#tspR)!7mh;o#8@it z*$?U>H*dYe8v%%qeG5UIXJOWEvZA2(q3Hc?U+(?xMT@=XeaoKIW622vdM6M)u0A1j zqG#a(!nKC|*DiGcH*UQbBKQ_i1xH;l<=}$@x4`ugTzzd2m1&bHPn=wJ457*nqirs! z_TiD!SNJlc+xft!@~O|21{6xJsr2(0QKB=Qa-hrOp7&Y?~j{931u}|wD<5VvO8CBP>8ST zzVHMZNC=I8#eqG)4OLglOuSFO9WWXbTIlJ>dYWE%=*~Xz*fb z=}zdNYL`vEwDaS%#1xHXFhwPUeM7FS+e);A-;OmkA*ki+L|r!GhOpBHm2?w+&i+In z>Y-|~6LwG7>25nk4;o*>Qjg}CQWM@;wUWcYco;dIkJ=AO2A>X?nf;LbDVL%jD}6$p zKK?uyVp4*dYAf{l>ce`S8Dvs|qMAFQrgU4v zJ?vwG=!KNFk^rH070sjsHPfgZF4r|iU2DWr7pvm1OmJwcP*z%y`lex1l+I3F zie8t9S(~KU3aCp9l1871#>xRx_0M8~l@{n+8Qmamm1HXk!RWhBy^KS)J?WomQi573 zlwJ>DjK0>0)ty4{1dw}QU6J6Y?Hb|TlrP1Cr<1m+Bh#WVA-aJvYt`Dhy_8`~tn$Of zQ(ZRjaE49TJPBW5YsJTqP;r*@!T*pRqL1m9_yZ!yzAZ2=qCu31BTvk{)o8qGU(i%!$uT@)L%- zVY;gn8&luLQ-;I2aQ*1gja-=(r#l`4asU6YvV!Lq3Wjs)B&-g&W!#1baN?xZlhQX-5xuM)PSaO&R zl-e;oQ09O=8vR@;vGnZN$K}-`J7~#cIZ$TT^gy8l7H88*i*xYVq0#3|WI>k1aZs*_ zE2;>nr%;#2^pxaWhc{TJ2ur2@K&!LO;;b%dcyrD%$#O)Szs-6gO`rkow!s8QU7pBl zRHH~(c`SLEjRqvOazG4Jd=({Dr@mFhp}%CWr&pG+=K#JS&g_SAlbpKLMh9O9Xwr(> zRZt`O6Z=Fsq^AnYC7TBOH(X(&g_<)RweTcSU@nRGC6wBm@Ig6opobgMTWW1+Hf{gN z)>T#-A6U^(dGx8Qdg3%cmDNRBe4RFH|9I8U>D8_9_%eLaDvP3TS#44_EWQk*q1D~2 z{prIG@ela>gC$I>wJRHq+n?Z3y4+yAU1M7EknGvhO;|3(89n$0!HN_5_mThA8tRt+ z69*@7^b0+WEaw!TYWN>R3dJ4Kd-ii$JyA>8^%b(3BL(qc71otOomiOmEc9pwJL~5r z-p_kk*>2Ino%gxBveP#v8Eptuhbo747}*YUfL^q2l9Av$Kiq%xgDg+Hbo z*F7MU-!dJ~+jrF~`p*a!l&B%8jcBD-ZmMdZV0+fFDmVE4l;^PhphnZFCU)pmI>2@m zij0Z%*9kohnWJjfPh1st$Ba~D_zNIEfIO_O9Kt>=s%#_Pkdua9pHr4>JhL52TeNW6 z?wI>)7tFo7#mXE9xZunfA>kq#$nL1kPdUIF(b5XjVbPnU+WuK8Hxk#;dkZbOtZW`1 zQmM)v`y+RZbcUhzk9(@$H4{ zmF(twGI(Dn&wQ#Xd90E@vr|#N=)oGYlwpcH_JX{_q}%eG4Ho@*KlE}g^Ijou`ze>L zE^d5gFMnW{a$jC~TF-w}7jmQF!JGK?{rmO}{%GNfS_mDsYLgu3_h79hD@5qX6lFe{ z@VQ85zG@4P+?yod!o5gHS!$)Wfn$Pcb)@cIgNFN@?8+vos5g`a<(QKaDs?hx6u6JD zb7Dthl095Hd`_NH7RPF?7-M1P3Xc@H<+56WY z+PCtS_~RfV^dX$qsberW3tm%9?D)sFyJO*o9}7sIRzVG^YO3j zpQpi_kEpG27q->Yxba*;Udc{FIsJiY10{-Wk;bpEU7=DZHJc;0bRZ=O1sdIr+B}7G z=xyYJ9jQ+mn*%5=$&q>_K6rnmQ4ieTpX-Qj%rOgyG9gSC_7cXCOzqQTYp-A!nPyN; zQBc+5Ykv#Kgt2VzcaI3%$h82b!uRFFLl%}w(ctUrS8Vi?wQ)|^tK-0o9ZZzeS)w+8 z+h|KHyotwq;GMobo)HUg8s;6syo2yY_$_?UJUTX;eN$od_Gejn(o9P=YtEx}93GDH zj1Lhb?Ft0C5U7C|)zVl=bDZTbPHLv0C({Ic1Lfxk?pttH82dKyXp`faPuzy&iiw4U zpK=KFq_!*(nPN;wI63%*LnR-Y8h&7lbycR1*??Hyj_G*R9)7rg{rivY zJN1txkAsSF`|eB~=IDni+wJP;6Z#?8(!RkSMx~3xI&FcPz{m6)W6lbvE-yA{U!@@ZEU|Eo#%NwaeW zdiP!rT0(Opa@Z*1C78xT@^=J7P|p8Gx2qhLeM=F0x&fX-yf>2z%nOJ&M82{9L*?Xxt8YIeA*KG9R{b$%bWN;afN+ zISnDoy!T@}g>Y9s7biP*IzXdKwltbO8~JRkgP)ROckX3vX@uQ-N}GN5*zC$+?v73@ zm|w1U<>mZ9_nFDPCl}_j&+KyydKJj$5;5xAfLrRGjS?P!)Wmz=hNTo6qf0ijP(f_1 zSQ!Vb91#YLM#n>TT)kMD1T3Wu5*)OxZ^lxJjcLHfS9~OxQ}0_aD$QTWeYJLn?wbN} zP_to;c@b7X&E7Jv(Vp2We{Rrqg&6;qII2MqqWtbj*y{VfIm1*7B=;f(IqU9OnrM>}lArlQ&x%_q9PQKCVh%V#P1Z z%dBWz{awoPOe-`tUbVlyeck@1{auk{I%BYg?+wL3RutX+nFA7jrhnR2IbppKo|Wb*)L4cbINs%g|p zz0tPi!0jcYLY!L4xfzoFOH5Qv5e)1*5E-tm@XkDer z!4WA*7#?4PkJV8dyh@gNM|P1AUm;9pbLCkAVeja*J9Ek;G-xF!)#Hb<#A9IB)1MP6 z^!gl7MWRxC?6`lQ)+g$a(RXvi7PwuLVl#R+AU8xR-99bOIrYiT`DvdeU+D$HMF}_N zj#6}5r7bM+`l&5qIs%PytG-iTzUbnBPFaAjIKD&Ft{vI82EQBFZ2)m!s%VHpuMYm3 z^KxA>GUw+Ai1+XB$*Da)%IxuYj`%Tk+HA`>Z;tR{!3lLOkeLIC=;frsU>8X35|=%-l2Zg%tJJDwb*lYO@`rn*&cHbY`x=00yL9{C|N2Y& zJ~uaPxonm5#1nlt8)+SVk!cd=EBFAfvY3w+mvE-JDGyX{o!EaJRAG&xBjVGs$`E2C zD`I+E8XRzj-}qt|R6rh}M&E^c3vmfVsdo*9_ zkS47Q4uNK~_I-t&oBOiDwnwbdC27nnEg_9kXfl1l@O={FOe|kTe5JK`xavLLpXv3{ z33V-yRr|g!D;m+Ilm~lWPdATr&$0ozCSo_}vBC>a6-vaX)OF;hZF(#@ER?Q9E`pps z2E0TkubwKk zbjkp>-&NUee?oW*`1Oas6>5+U$u3ojIG|A6301sRa?B8;9q~9e?8vNHtEa%4IHVEw zq|e?qn=n}v!kxDt(qx-)?6OlCz1|~;GopgjfE7tbpF{}p9}YrWqvx-;Ib$zCuH2Zi zbB`Q5i0PJdMM~K#SbPm8b{8P9t2x}eG|}}%cUH2<6-Bw`0wqK%pLoh%R@`9NLUeROQ98pm7HGs2lXaoj?!i-S6`fJ2r^t)uWn zsJc~zku*xbsFxf8MbcBE)~ANhaTu*~St2NQxyjPg89P4SCvd02UbX(SD)Vx8cC=_(A*X*K`jGpq8y}G-i&eJ;x)7An80MrluNc~aXk%TSf zJ9EIW+|j2=ozx+HCVFj&IzCq{sc-lu;~hnP*DgtNoLnoL%JH#$XmrJM4X$$Q2$Iw6 zw%?|S>8(G@;3Xe^8rcq>>Gm}8EsyM)Bp{TsO%YZ1n5CQabA~A888(>1A6v0as;%kr z4Fc@$-W0w^eoNxt-qYXT-W%b#eN98oU)l}-73rjf51l%O@5Wt0VT9_8 zDo{@?ZT5MIAzihhq3oI(u(VL2-Ag#xV$2nYYj6lm&EU%n4wmryTKtBeJY?_11^mwC z`+mivkL2~cA3nD4`L89717d83D~~wCNPo3(HEOZ6oSn*Z9@7A}q#-zUz$Azl0&w9N z7`*lyoPmW;A@sA&#^ptzUAAn(;n8E&+|y$G@fC{--YgjuG44j>-!J! z2RK-WDwo2oAQ>7`U65y5BTnhva!0VIJ#~;{l+S?QWWCe%1Q&~P1G+27vrJz^Pt;0fyypW7nBpy| z$Hg*NBm~SBQQd}l5j-ln6183zrJfT1`-@S~Yf{y0e(VxxXC{kD0BSp_3E!qtZ zjc(X?Wuw+={%i_0`=eC>jnJ3W@q%}`7+cP=HBS%ziH-YO-V+OvH<6!)@>Qzge6jRq zwUdYzNv&vZhtNzNL>z`(HiyWY@prHnedqGUb^*WR@BO~kqVII~;_q!R`rZaD?2D{T z+Ba`^zqD^+{OyGMI4JE4=j}FAeOtJZpwAt1XLb>(*Ba+# zL^r5X?ru|+?vetW>251`>EMQhlP0BMvuXSB_jhmcCw}V+>EtP-@!)oJ$_5{@`B7q zZA}V{u$lvnA2(-CTS)=V^ygp3r!!9*re^fVVVIRNs1p-Qtlw@LaV?{UN&EDesJYWh zd?Ey3A(S?|xKq7Y#%cH32zJy|2`fT!mm0l~c9MvlD#UErN#k?9rAOtLR z!H@eqU1Pt3+dGek)vlT7o9)coU8MqyQ-|*n1yyO2)WGG${jJpPNojnTZsGMG+eXfP zedOxJ(wx_yxEDze9IMIeF5!TpE1(6BQnys)Q>CYT&_m)11iVzyJmGd%$NQ}8-?u{L zS?U>pT6uMX#1UvPmb>$$#smjE=Sw2D#`vqT?6BYnBc}=rYCJuOF;JclX_ZopNJ}80 zRNM$BtP86=1JMf&ENQGyuZ#|7!)pcDB35oP_VOYzS?MC*chvqG-@kiL68iUWv@~OqfRvt4#I((wl%OVx zPg?vH>6C9F;`Y#wL-WLU)JhAG8XSn}@6YsCq$_N(;|fsiwu|Lj17>&aE^jtvotkL_ zxRN~Z4Wyqitc-u?+la!rZ#VMnlEmMmBq1ZWmV~~1%N(!t@r=kb-H=n{ zk*^TyqE)9#;{VbY(SI4;5-X7igihn%NO$a0UZ?B{H3fmeu&thc>xQdJbdGYKn^eX3K5O;~OCQy`+@7C9{OSKK*>~`Gm~$Z^iCl?;{y(By;Zy1=WQX*$FR?v5=7^7uNJ+x*=y`Az zY4TatpM#ID;?>$;L)}ge$Ehwv$x}iy!-CNSHhuA=0_G%|-QJq15MX=-D7IG^a2H8M zeR%2;B6OOS?qaDS62heI-ja30`)IdtJHY!HL=*cOVK3UZ#eGeG;(Hm`!ztE7c2Y6b z=pr`3)u5ZUyRzK!zT)yBGB^>&!NxRLG8Z|hdTP?S`FCJkt z?Zd->Hr86PGHrj1-`{_1f5e|oxDCnrKzQF)XP8hI?coHrNR7-AX#$Pcw+M1{1Ywh& zl&@|jkaQm!UxAL5({X)1Dnn$ynq64uXKdNq@Pd9=Cl+RU6_h%b*r&@UO1tpNL8Xbz zY>doXb#Nz2x4RUh-aOTk*pg`Ugj(wC7@tZEmXG*H6pMgjc1Qm+hpM`m;i*2#sT6&= zP?sFwCXF9coKM@Slq580bjQBb=~YqFf7`6P7Kol3|D2|extbT(mjXcSwRoE%k{*uI zs0&f*LCIr!LZ?}ONL@-`)Amz^`S)F!^VJ8wa0K zx7+e_5mU>{w*m>d7RZuoYjtWuZ`J4$0z$NPedL)&x^n$hjd~3t?!;Fh16IazDi321 zdJ%Bk?2y}DO>sq@yhFyJuWw__RUQBpxLmMpw>4s$M3_&3w0aiN~j4&ZtJ^DeM?+oh0~LAoTrKXLQ3;e&>;p zYk@3Or~83BV|=YI1+Y|)aGO@@H=0WUtki@i-E%%e#3_@|AQ}N5vO2Cyo+!h$Tnb>U zhwrBh_02Ii19)2?V07$Hr!&>KygxCm;AAl6O0e8r(lwopWvfQJQL;-a?n5FAObRDw zt%^e`&8OiUAHU?KFhoJvXXWOc@Pt&S;Qpws3bB36GwJd3>7zD1tm$RIs$sQH)>H!@ z&Sjlc8@$}U&QghiN&Cc~gIO<-Kp51;Q^9D}w=}31L(}$;`;VXSM=g4@aMu1Oy`?cP zr6hc5wr$6!Adn25vMYV0V%T9WIOyKqrOgiNgm5P>T7-|57d$T@cTO>rQzo9zs7Id*JU2Pb)`{2TIL~andf0}A3af) zwb+rvc1Vu$_2l!Ge`guN_EL7c(lXg<|%e98AMy)kpz%ixSZG;}^<4|r| z;Mi%D7W<^wsDoP8OhJzlhbf`_`sBYhzy9wVAb&%C^b-6nzW?#3_BH<%@s#?mn=0i) z!0^P&6ZrDHFlZWG0mLJ13;t|z0GoP~b3jdaK1A)~RvRweYc zKy(+r&UOV!(TUfW0+`6&{2DLtsiOY3?C?`IN;R+o`kd<=^9tJ`mU(jny)C1QCBI@SIQ%dxeX^|}vICYG^@U}S|v8FL`gROT! z!*8i_{Z_)MHTxCmK?jjy9@Auba^yMEXJmANbT!Lm`yu}6{-^c>{)lkZ>Yi=9OY=z2 z&BNnEiYWx?^@eoX0`=z+WV6X(Lr-4xum%wgA;cPe!{w72$uu~$ckUsTJ{r`ErAhl! z{O;{P@i+Toq>J|SnMVExwMYdI-GQG*koX#=GdRAAeWtzWJKCEeB!YMt#rkhfqx-K3 zeQfNL1um!GBv%016!lNbv?e5dtCXos%eEnzP^d{nv*qlYL4+XgjmLyMU`WtyVI0Ip zKK5b`iA78P>OA7_k_T0laIruG{U_>q<1kK@;bb?2u`dri)|8*-gx&)=3<(vDrAMStSf2gl#6wCJ4 ztk{&iSCGa8oQOZ_R0qm$2E~_9(`rZ+_lDRs2 z9n~BGlJ`%;OPM;L?Fogmq|RPm7UyUnASiT$K|$HVs@?2MR07mU7rcf>{g``O7HYGBHIK2ewp1~`9xAoQb&mey!$%e0%M}TJ)xP;ThTzT5mYBMO$tK~YacbUA z*{Rv4YAX9)#P^O^c;hz7AJ3{ih^fO2kCQqUOQ(ojg>WY-Y)1TmqyBO>01J?3KKG;J zk_>9a%%a_=32(MZvaLEufvv8oh+|KzdDN$TbAO=!-Wkcb{TL(t(H6o}5H?@14>r?t zqHp9twP|W8AX$Gw?HY={+0gRNDN&Fd_;IPeNe8iwzXnr-Zn)Rm)aj@cErYj1TtSFgoRBgsMnF~4oz(_I+>=d z?x>F7b@KY0$Jj5%ty^kIEulq<0_uyLiFR+;h=b3f+@{JCqAL=@9PYu2_%S{6#bau2 z%!&r$&4y>as2Yu_{#+x9xOA*6ov#uDa!x?a2DAHiG(+1n_LZRv$?8F^m|2C*Bo~Y% zj)@6e#keM@0eDQF7gJD%# zWS8jOZTklLt=XerL&HLzZ|)aAth;8w`T^f!;N~JM)F+yucUh!3FNHp0@5fvL-E7kO zdEeLMHy1M=fPY_;-?^CI=XQo{KEI&Legzt1I-Ji!9xSf|zJ)La~z_CoD+{pDo(&?o+K`m?eh`f^`R|At@x{QQS&iK_-icbGoad(8qR z=qqnCVU^*fCgNw>zySsosyo=|4=Asiux`e;nYg_eW9lA!!Fi|0VDD={dDVo|f%z5_ z&n!kXg!(26-&Tm1+>4-z+lw(_H-DiHdPs4RYJZ?FqTZG*PQB!fUQO$ldO&&AgjM=) zGjV${W_*MR`@%WUMDSI*gt*O^Q&oH)V=paQGzk4pw!T-vzUiKYjXkqy^A>x+^=_;S zU72gBfYJCW{(BpJaZx+?P+#nO8~q-4^*fgJveoZj*!Zt0ZT!;WF50ZV;VZZT>YKd& z4SZjdFD&Nuck26^{Pw%~-O72(oBs_ze(0_Lz9zr(+xac!ylnG(Kltxd(&1XikZ|o>?@6D8KSEztxoWBfpQSXBBIVsP5a0LkJdWQUreB zu>KZ9*3bJMhMrZVQ7b!u`@brr>5;>Tmr-$A0~x>YZas@URslr^nxwGq zngQ#le~W=<7GbEZ{uTq@RD_q@hT$gS1{0HZhv>wElLqe}f@~uXmQIsi%jt$Qf zdYYTb$qU)fAurlpgAMZ>Dzxgn$45K%4ft_D9gAA*tl0f8V#wk6G_bq$kg1dB+1HXo ziWA~8KpUIfxyBHwF;T8f>SMA=9Ya0kB_r|6tbD7Hky{krcdNs!+k9ItR7B8R+sAfx z@YJGXdWOUfF@7=eC0S0itC#e+Pq&CIWHy3_6c3#ngN_>aAupremhH69JtajEqKaIo zIFv4@6rWN)W{$nadljg>r|VQ=V6MD@@R=_ijM6gD)AbEtC*|WgS1}F;vQ{!*Z$eScW9nQvZveQ2lahJqZUWiP>Jv{X3t1Z*EfKjNN|}GV7rPwbz<*) z@pE=HeKKm>a>t&O>Cv)Bhu+g4K=h5x@JsoCN>c~!fvxG27wu+Gcj>&vW?_%)Y5L@4 z_n>NQKrG-{HSi)kC*xxvwi&eJ6H`A_FK$Sr*ThRkz$A1HrwUp2?NfDGT$17FBj@WLZ_4* zT2sYMDJ9IN4dLJ|7ZLFV$V~NX5s*bT(W;{$5cj1*oBOo7sdi~~_Gls%+QN;k@KC1Q zWA1`jc>11N40(Y%8hC(?Yp#6r>_oqlI&OX>2L|;qVsho8>*h!%kIh=Y1ZB;gls={h z(FW(?AG^-Wayt-r;~|6)05d_%zH`CYBzdDclsJ!CDbMaWTXG6TC>h2|7Tzt;L1a3o zhwJk(L6nF-sE5%e!$C;cFB6w#mmq#~;MOuQjMJu<-u*>H&9ZN3vo~^0M5NH+JGsV^ zL0Q~*FGFa_X6Ewf6MED=U0=R&d%!F2IpC}aj#<-RbeZ?zAL^mJUp>V>nG#OHc33Me zl6B6ZF`cxAjz;Y}gt|KDcvo6>hy%iRec`y>G=~O9^Gl4r(pVf1xnj>Bk;RLj#T)yt zm>y52*j!3CBXrL-#)D{s)X&8ko&z8BacK0^*QzpTrhmfeNWY{?Z>z-+>Z{_EXxA|u zpT0_uX>wBXzF3GWam&PKtdv(K>$ugFdLsojzi_u#e&G|ARddiHTO#mLTTr!+lh>O) z261(xoN+?h6AFnV$)3*CWM*4Ze@sxnrFow4R}@qTb=tyj^r6gCzQOV5G~4Y@(U!-` zg{zD_rDG!+gxzFg9)@YBNlld{;Y@76fUWpjY%K@Ml^*dn4A{}i0UPm4Y^+-No9UeE zp!+Ll7+DiiX!86{A8yR`Nh0d<9Qlw9M_N(J0iBo_c_#MfEg~1XToDRs?2%OPH1s}P zo+TIR#H02}4qP2-)azaRPp8mw|9hoPZ zwEv)%J5J9jeKr*WSZF7a(Nk76HERczosrL%V9&7ejRje>q>GbW`30kExfB3>F8Tqo zn?%fsW?Owj4~bTWbz))_G{L9R19a=O`gD00q#n4CaFlzg908P=9RyqHoz)#>NaJ)qZ{9N@nx1iCk9C|*)P~9d6HXFVh+#@?r<%YE zs>Hx#*uXm3z*P`6+(ULcgqWMQKbA+j;Z^j&?Lm5?!KN)zk`BIoIs6)WCc0P+u=-h8 ziUDfmBVNM1F;i;NS=0YTERTnO={$glpGA#cPL2D|K48IV>5G*{^Hv-vNhFIzovtX!G9O`WX@Hi9&0c9ih*{e(@g9FVL^|5Q$qjQ~kJ+|J&+dbAgs#i&+1gQ)lf14T`fK&yo71xqULn<@pMqy1;@59!&1N z^S<0C@=h*l=`r8byFY!EPhYjxl%rc>SMCuia84yDab?(kY7=En|ekN(vSH3IaPV(1j0u?Lp0bpDcaoPagCq16}#h|MH;! zCD7@er+Mq8M;OXuja-toMSYx&Jz{$R%{j%}x0Dc0%v#_#Ynne;8=*>-f6|{kwto zz7GEecK5IMb^Po>e-`MB>c0#zqm%q8qiQfSmk!|m0$>EM={2>s=e&zpEyGZ_J`Zbb zx{ryUNAKnS4F1^TmwC1;yHE_S1z%|!@nP{xjPy$KY%3GbO5Ug-6PO#=mlbBdT|*&& zZLANiUu-K-u$LK|`uFNdZJb&kk}p}FqX9lN8~+6uMA>FT`1sq+221;mcIWMnzy0vO z{jvDry^)zA*)b_N?1FZuLM<}u|CAxvKxNG0M`6Hg=ZzmjuvR(x2ECwjiEtD~5y}(~1T;AFH-Ppg#sXUe$ z&yEx+e70rUx&yp~6VuZ+PmYL#Kwm7TPwN^Rl(x|meRo(F+Vid^y)J+Zy_aA<3 z*Z9*3f9T0p+Tp2o7OtJ1nv{l7cM6UV5nQyU!k*4~tRs=C;Pk%MRf>^Gd;jru{GT83 z&wqY2Vif~E?qU%scgD#YUKMu<;u$B!1&o2X1}|g3kGU5WZ`S(k=s-=Jy8AAtQwVw9 zgQ&&u63t}Ng$DCbaTq057p)2oq>f0GMfsHEa5buYOR_Gk(gvt^aR2(#ee{ux7ipyu zwN40Tq<5K`Q+qPCg+7P!seJ)p`P`n*C#a+O*a5FFQAM=TF)DqrLz}kyY`abAw$cYz zK1GLeo8}^WXUl}a>#@9Sxj8!_HQa2kfSf|uCZj?0ceVKJLM|qRK2_P5u6EaJAZcAz zN1lh~?WbzTk;29|Vf`G2S@AdKfQX?8qL^xro>g{KVVleRtYfp&D2aMXCa7-^9}nXt zr&asQ>v!#LBg>idB|VbtRH{e-m~iH~O0~lZ%fz(`6=ilGBkUzM?w_AWGpvi*#y1%F z3$oSw&HlPLN=4pD2ex)CS@BULNdw`&;S(j^_qhr1 z4QB2Dd{f>J`zBlQ_p|li#{c~S_-1R1R;`z;3I~sdN$(HS> z-+un^mjC+FcoY@~(eZ~MI_}wCT`m6jTJdE8YC(f(&ST7Zc;XLl--g6-Up~58q{Zx7 znFt}~#wr^`ZKG@~#Y8FW4_N}Y;lB384)H_uGG6=w;uL^j&C~INwPwgp{Oxw;y&E8r ztjE2d(rJXf(6?cWa1uDIqkDTCt43K4tHi*v{qfCD_uav2Nm-|<1r&?;3TD_4mc~E5 z{XlfIe;>2<3X)uCB6uJmYHuY&D^^c z?kzB|rMUT2;W)5naVTYO0*)W33w=a5UPL72Ee!tt*JttvcHb^0D^uVrgw0JT%WMeW z{~6D<8Z7L$nZ@xQ%(Xnxu!T46q^Mh;Qgg)A(fUelWHxP|C=ZE~f;ilI@^y`qM4rx8 ziGg{`gNHnO!~zz!U+1Y3#jZ>f=3~8|bCVp|8b_R>V(DOudT-{CR;)}~6TKXr>#^WIDxi(&0j#-;$$81Y{6%vaBnXj8QP7?MtTH%qS0OT5XF;W3H zRTOcqR?9DZ>c^2jD4~$XeNxe+0aTF7(n)II zYNFnN^9EZO`K{2G0+_ZqeV^nw@2{`SY5&D)X0*zzAnZ(*ck^~#?#}pQVoYgamb%jM zto@ukjM{(P|2#4>s#;TZ60@Mugt?AQ+($3b$6-tt2+dS+{QGrKk^k{ zxXLJ`T#ZKUFKMmbTPx|!wOO!sQtzU*M9`!erZXMM$;^RDamqrY#fYKUkhN=;=n-}n~n7<-6aJ$*1_sZ>M}ykDM<)u(kgFk zhxCA^1S%F-X%DJ3=?&2M7VNZj_SK)D(;MkcT4QJWh)IlPLh8y3vP%kZtWJ7Xf26LDZ{tVP9a>Q%pgqXRiCli_ zO6G`!AZJ%;aFFwZS4l|;jDt{a_RiO$CB5&3+K<=2|L6Po)6dwdt}p3ItEso&s34E|HhOoQ8|}(81#6o;s~uCTxh=99q06!9bF<0Vlb_NKD19T*w-}iWlq9Dy zQ8H|%Q~QSe(mdPHG+d$*W7^2HV?k>^#y1&#Ka=yINqSX}<AbfIBqF-49ZcmC%6T) z8VOPLHA0^R=zW@jPy4^A_gf5jE}oP6t(Q^^v}#0MNl(_fv#K{6y4hpuRw~E2c6%-& zuR&*c*;n2KzsdYGVBY-3VNHM@xOcbkzllDB*D1Sy-X-lH$uPS&c?0Z%In0gJcn_tg zrjky-jbO``KDc7Dw;zO-^q<434>rHnC;7Kw!e16#5_Wc#pqI~N(u3NcpiSxJGVN2% zDHWgV9$z6cb^Q-zdD=&Lb}V@lpmnUuQh6Go&)bi`zW>;MjPbV<)_vg;vEp~sZ-?_H z-gCB2wJ5el8c!q9r#L;)GmL*ancIZJg=j=mYCHMFOdg$5>flmu;3NYD0SxK;rs8ij zHM`@`WheVND?#r$&qh6H_e?xa?_uGPTvK9A&&o(k`Z-PdVDswuB>$b7$+&rkU1zy7 za&|>Rn1u)!qZU}#;!Z)I?dr8D8Y;0@JZ!3zQzTkq2{d?d*9S-Il7358A9}1#BlJ;# zUehQ2*yk#-5XWtO#so?k*Z*pg1CN@Oz@!B_=|Qn|D8YngmiR1NB?cDqfn&&3`gMsX z43l~_&;V;0&dRS)hO}Wb!xhsNJH``NQEpAwtCP6>ug-1PP3TboP0zR~PCbqm`^;w( z#{r`4m7z!PxoohE#NT9P(y|BG7*)Iel38G-1xhc{`EcL9#vhTbsAO}}y=&iLM-e=H=q@$qDK0`hrK1xQqc+66Kp68% z$1YDAg{)F@ts(OX!jFAPzLwOmQqG%UbQ573%0acreU{x)JJjfz)K&Wf zy-laTVR(3~sSVq*!#ftbBF&(RAHAlGS0S>^|A_=bcx}(Q*tYd?KrfaSZHePT*!rLs z>fZhF_U&t58Y`)=5PgDY6{*S7?)kLS<;-!{HyWu!1_Z>Bj}2ezO94z;wMYH5Pp}7d zqmm{iFzSm|=k~SuP$9_-5-QYd{wvaz8It4Jb2kRpDFqwfjauzP4?z-Kg0JwY^rpg% zqMWW$sYFtOnz*RWX`=)8d^r+t)fSjuua5{0&e!@<14fIMT5~=tS)J4+Ux^xX$11u` z+1*kj@^0&x2D6(o$v>CXV_NZLq^~t#d>62X4Gx=A->Q~t>g291GE}DQIg7oNDuI<2 z=m^XHn58;!G2}|r^Okok$MnGK6IHsLl7t3Pm9uW@eYBy9_AxziLaqfuqyBP>tyb{w z%AZ1!YLP7wIL_r1IF?AaA6I-K%B4Q@XZ;!$^nV==iEh*eYcxw_C(Co}cNd{0(-e4i zwoB?1Qb1I{;bCF_Maox)Zq{-Vv7U z*yid}v{;CAAE_g~<>lU_T9;p}N>(d;xlm^zYJjB)le@e2n5AFoq0^nfSIQ|#2x!zc zSn7`}x*a$^l&W->6yVskRy*cu1DkmEumQ%gXm-R9*erQ96`B+6V4X#_MBq!f=xEm2 zznbi%w-=Md6KF7XUGx%S44+vz8zlmh*3j{?-JhvL|K%K)n^Ur-d%4Z1Pbv>UD}%b8 ziRh&!P;2e;lIo?$bJ0}zh_#?g`_Sk*)GW^+9zn7({RMU%u2dn7Pmf+ir+yeVHI< zJ+_-#uc@tZ6k&4wJo2O<+k)V?K_yK}U~}U)6f17!ft6ZhNd&&2 zzDAwl`+QDD=)EwpD%TiwpU~T~- znHRN@olqzXo3crsuyAV=v`FBqw$4sGilUAnf{j_})G7*9*#By9cewk*Kb6y6Qh;OM zV)TU`qFQ@Lzs353+ko zZ3L@Q>{EoQLmDD--x|(Dx}*R{J}}}sKpk}EMKqh{DaFWKefk)UJSBV#m6BabU^Jkh z3X&eXIZdI`?%@g=z|Pv_XrU<4gQ%N}t?(uG03vb^yyug9%LF4jnrsl>p-H{g*Ba7n|i!-0k=y@8;}gX2I=4CrsAJukcYooR%3N&b`+ zn3dO(P9R`4lY+^P(;jl2N>xfwQ+VRXRDO*Ev(O-IB?UNZ;b@Kqg)~4tmpCP*0t-Uu z$%L|M9}&ZYdel!TD^yZa8n)0?9+eN1eu8B}2p#&;33)^ktxcIMrL|Smng+XHJNHA*AfVL$$sTjBs3__XuI}3iNIF@c%+*zObzvz zwo)4zPug{+f=QqwnaP!?r_}M)!-_q%N$1?8by9#-pZxT%wn_gb5*oTFHz;s*3cqEk zN_R;CjyaH&3G|q&e>KI@I0_+8)a%I;B1y#wxfY1tnvc0No?b!9Bm^{5pe;3edh@=% z6u?{o>?pG=aRe?nx(&RLUP)5tsdPfrwLq2%Qm5Hhs%1GL*BUa_oghA8nQbLz8-A)I z5%}nN@NxgwD;Gw`Y}XyK@qc0fA_nzyQ+u9k^^;6OKvNeKHAO-nSX!iY?GPM=kZ0dk z^TBWMGipBg4rX|{uF){-PH2}Bn0}Pm;eZ{ia??yoV5^&8GyT+`63T)PaqzJdlMCun{-rDMtF-=vpoXuxwA+I-`a-ft0V+r3TDZ zkn;`uAWXPxYpw+{b|BFM+HAb{7Pb=#Nrq+nOqr!?bt!-a7XQ(@sPd?UTehXtEF1Oe z>T1DG3zRo3cR!=Sl&||U7I!?6sR}_?PH8Y@iGG6Gia>ItOhQ0o-ITD0CSDU%0xK=h zNw;!X#uBH{k{OW@rr23hU|puzH5pG9v%pFVbk@D*7$Hc7YNrLNKcJ_Q7nbO~EKM(U zw$Psoj%M){Ux;#fT^WUyE2$}uQjhCP4Orfpnk=a{)^l|P0@l^uj>hYoabJeb#eM(AT6MaU2r_j68+g(zC)Ao>UotB2u zfi{MQ0m`q&E>DWB2C^43NeXc81NG=dPYgIDMb93Swb-3W zN2GD@g!%~XpIsQ{B+%EwJe)Owi7#SsX2-ab?%UU4jTamRv_k`mZLcapou%jw?J#w;N}?T4;+ z#exUFw>3wYV-KqQ7#$LyV&s~NAjgTHOA^cl!HkokT$0PVjP+;-vC@=LPIpNGV(B7D z)mAGkS(-}$P;HW_M-bY!U{v85{yBzBA$pK$NGmv9$W!c5;qEU-7Sjg}jKY;`>f)|P z^(h8AYMXq6*=qJhhw59UO;UhMs&TgPeS(E!HN9?0v_QZsQN>25_wIQN=RPgx?R)I2 zZ+UmUNU597=d*ZMk7+g?k=^jEmg2l06Wt|^fSox@(FIguVAVI!qiOJh`u8>B3?)S= zPd)yjCyIVBc)By?wp0%3BVNA8c8G3;z0(GiAtUh%jZhzds3b%DAT@p-b)~*Rdk60+ z+3e|+s;d3@w8xVSBP@V6HeQ%*EBo|I(%Wp}3VWpJ8Kh+|Cm-L3M%SQIbE+B|bE{+? z`AhHa8A5a;0jF5XyxgdJDb6P1X-FDP4GV$IcnORDu__oP_N79bc{CSpV9T~hj(e;& zrM#&{`NxtwZs~kg&_ML91{j2m_%AgOf3teZqy?gtK!?rp8_wNK(Dk(H$yC%8=+M4`rQLG5A(?_i={ zm~+sHa=NAb5jhpT-Znp|7gLh~q-h>fYQXpB8b>FtSr<-_;%C?^`~UxP{N5Q(2Qm!X z)U@Sj+L9?XcTiIQjk^xJGNXb0fWmC_SdI{V_W)-YT%NFzD~Qh86b%^stscsAzD|p; zrm0}Zt39cv(a5Gp>oE*?guNeJFE}l?5{6pyC5>u4iiZ{;bF%Rg{pwW|;cCgI_Nw;VslEE}c51&aeQt@L!<`264bTFN_}PqS6RfBAoHAV{tmJU) zHlv1$hE!_j0?$btX|&BtnhJ6Wq0O!Cg62X73}qB9L4BlgMKEWj5&F1YtGI>Im)Vqv z-=M;@g>_a;h+zZKjRsbC^Y%3syD~UI?Iy=N+249AudC6d-R0$>siV{Ra7-|YJ?QA| z1B%K}=k1T|d5ISi3hjnTCj_%n8>DuX+G5I)-79;$>1wRwg_Y~H7KmI6L~pag-v3-M zCLtg_Ya6G!p668RRQjvzG<7|6VJwIlA9dXk2d_=Gn&yMLWv~=lgriEX;i)ynM z0%x+#ZU~(a(3}@EEuUXDDuO!__Cidzop86nE*g%%o8`a4@WLyy%Qvv4|I2s{>+I#G zg_<;-w7;s*e_ScQE)z_pozTPlxKER+*6NQ#>dsDX+1XgY`Z;!HGLifByem~z#py07 zz*)P^p5DH0f8@U+#Sy@Lwp9`2yKWN+&pn~dc_w9LXG1^W6s2GGNmFxmY%zV6&3`$4 zekZ+@b#pqKsBKE-hdfS92`4S(=2PWA?60K%n=D;ZU_zHBC0SX8V`vTmxR#tg{pN$GkQzvIys9pa;3t; z2dhSL9!t+J1X~AB@Oc2vu?4HN=G{R( zs-qP%i;$TtPjU3VXF$n?x(rcG6**+X188HbdHZYmfZz9P`Lp#iR|_qVHpyv^t;HJ9 zr3Ja9x-EUe6nVF`JNE?^m{jr2;N*7n$|;A9^C9sS%tgo;-oKK3N1eiRE!$B|Ckl#? zT&N45>M;a3GLvw;(VXi%HCbb(;sOdGPt~bbaZ0D7Sjr8vbiPUq%mxgExk6J%B{~Nl zmOqzG^hs4q=IrzZWb7gx>+y}G?`{5DOFywT^YTqpw-yp?F=uzz0vOWwO?Aj`G!%Wm zGAUEh%WX}k`V9JJU!AG`(kIYON?=&REKW(RPR*&-M~NJXz~^ekGtUldbgSuFUkYI9 z1S|hgp7u3|Ikp3gTT)GfyC;kG@5$zodU;P-o~Jg^k!$K)4|L!ZBvavZ^`!t->VtDm zclzspJw$MUFl;P-sjCf%y$R>O^n&hhsr2 zDZmAHlz8f+Q5%Rk_0ZTL8rs46yyN{Wa(JqDp$>r!V;_8|&R}`hvUjnXf4mM{JZOIq zI%s}$llfZ=hfT(V@b6{vrNtay`sJv6hK*TOlWWHRwcp3gbBZ%<`@cAFqcnUqZPO!` z7qKUX=W97>QXVY22piqO<4~2CpVRntReq-L|0Cj=<wRy*_(U)ZhS6J^z6LOfN@gUu!ZE$i(Y7>}q&<`P`2 zflc6ICDx0v&MZC2Lt-IL1H?YZz!&Xr*s-}GMWxmd-oyF2a^%CR*FjasFFgM7nS2Jt zVbn7Wy!aO^^%S;unaLLEEQvfy)&9PYa#T2i4+oFd|!j#WH!Y=?mJ?qHg@H`;q?fi8MbII!L{ zRb5s-$|;1g#)(IW_O zM&C7W%PFb*US!JW4DYDZVoxfxX^-X;40PUk!Q!Cbyq>_}z!Q@20P$=*V+|w3++x_= z60>-0-9x+EX{BAqFX-DG0;~U`%Pe+fb+%;)PDx9TkOvD~@RaQ=SNdYd} z@(a8-p0S$M`C*~vpHE>TsNt9Ll3ENc!-j%%Lt6DnK3<@!yB5C6t2k)Sr~(BL1JhPJ zoMpFV$1>xlB`x+zvEivinHUwnw3kt0c7DaIjtqOzs2x3)OfEwv0~R!ah9>PV@7mqL zO79M@ECIDUM`|76dnChy^%<{`y$8V$;95N=1he}YMlUQS-OpDLkKZ9zhDlp(V(U79UH?d^SRb@ z)atlVm+sCQ5m37_Ne^q@frPr}5e`2f?Fogna7Z@RK$foEeOYJdy4Yq#CX`i=lKOaa zmt@jHbU3u099{b&6Uqe6(GSN{S*Tys{@^AxZZ+2awY>ciM(FR2Aj-t2cxVHhs$y^9 zC`vgDV1b<$=%W4f;qChmzrSxkRT=z$8Vx&Pfyc~k8Fnovy706KJBte%2y=xtnzwom z#Jw|-9Ur7aJcI#aY!NmVG+;=}9?8cGbZnxb)G0Rn6lTV{OZ(9HDs(bxfBGeF=+CeJ zX=HP%^^>n@&?S!640yz`$?*%wi(t+nUY`=*N}-O*zM)>U-hL6Slj6~mXn_VVMy+^v zpu!gHP1%YGRwYy&?NT2Tf`~!o8p5_>)_y#yyCy``NsoG>PKr-snNX%a#X}2_It&jf zI_!Gvlc93Oz5tAtpb080ayf*#mHe`-srO=)+k)GGu51?o7fejrW31}GLrQ~B^a}lt zJfQD??$o8}0eJ$#MGs>7YfA7oR`Rjn4RvBN>iL#>%akmUu~sR2I!>@ZO6+6AD4yUBF?EvCoV1zb^+h;`dN{H0TE-ZdVg3#h~Z z_3t+6>73&vRmK6kl{dO5E4Gb0`UnH#K2Y19n#0@~k?{0%NF=oxy4%JRLiIq}=yKNX zu%($7J>kJ3Rlb$et$JT&AzYt_HqP~!q}Nn$Ch0tBaHJixeNA|MXj}3Ipbu!SGd^Vvc$k_c{Hrx-8-k_rLx4dvx66Oz^=HC)6Apai15tfM@WYli#xa zd-}v@8{uVm8(|SL?aNI2KAVkgKMx7Jjfnni3N>ZfseFylF)5anDvpl%1UixTSZ1?U z`Qk@(`aUY8yJR8?z`nu8vrMd7cq&vT{H~?Zg!`Nhxwme6jZCAqP|hJgE>Afhc!Zn zcWLfvqM1#qQ)1>zjocLraTOr;IRc-LWqvj9ZJ!GDn&+73NKZ)|VmXQcb*iIxgt)FI zK%TV;o@tQmY64_&kI_ds@_v^dC)N)GKkG1bA2byqj@fJ10f8{!p-wsO>XHJSYftxe zS|C20N=ZUMs}`QlL`v5lV99RkPbCc~)FNW)roW~JId0SHd_t7TWCx$??C_o}X{jp| z5<+GlGU~-}rIOG9yIPxXk~Beukmo^ih$j>p=cyPJY75>|l6#8?aY!TNS-VZ>>A+_n z0yN-vKoHpigLOc4>4>lSd9S9U-0*pNp_nv8xjPn0iZjib-t5Y=UK^t)u`^ ztrc-igMD5nM5;>&XvvG9)bpk)Ay+H8T|$G{36nZSjr~Ahv)|@gdUy9!0Ma(;3$}Y>?mDE^ z84E2?F6N66IY1M_q6fH}0G3u?={}YfQng z5TqCm7eUl{h#FuCVTryiTpY9S+=sGK6@`}BA|Wi=6Q2$}btgbcy5#X)8GqiBm_Gte zcS#MDdF>6(P+`=!L*)sPD^c(zLL8xL+u}^~A>B3{z=lMgMBvo2sM7{CHp8MQ-n~>G zFxaBzq_M^UPCuGF?V#~hsMufG`+Q_IdEb+0_~NBcI%#!> z9gPKd(k-P5x*|&&nca8M(g*L9flZ2B{q3ZivzqnF=i~d(=$Y7ui%^_}Xf|c6`#!RN zh=rcap*;H98yL^XWHxH4*+q@QUY5{ER4G+zScKq)F`(^~VuU`b3Y+os$8*k?>dI9| z1M0bnr!M~NrH<2a)q7$gj(y^$ED9Y{!=+jZAx}KA%P_Eci$!XClHiD!AF*X|Q&>Bw z6eCNs-_e8H8zn<3F|hJW;pHnptl=i;*HmUPLImF0q6M|qd#^#G>)2_p1bXG!#XG;R zBl*kKHnTss5S+(aoz?S!jtGl}ZvCk3sXkyl(GjC(8CGXFidc^n{#AzVMJ|_&1 zuff^zVP;khc#f7Q?eQWy)5INW7!)*W;PE%vT-nne{76b)&_RtVz5#qQ7Jd z?4o5Ch&8q|l`;pB@J2wRhhnHXRTaf%?2cn&eW1dywgP6%k#J|w5pSuKouzPBuu@3c$! zvoYp5=(hB^EFR=d+Mla)VLLBD+JAKjsGL4*N;nVZsF*Zx#zuBWpuuw*yWwD8bWpjf zlq5V*d=a!zAq6-}g`O#dz)oxEa@D^7@cWPVzhMl%P0UY3KphrDUG-xYd$lSKsf0gi zKNk4#KK^DtzX^`){E=2P9C~<&>Qh2@RFb%tED+?#sNyFo#V=W^!iT#wOE<`mdYJ3% zg~8NOR*@Q~2~ON?bjsY*i2(`pi`N_dcO>++hG0*fL@uRaMsC8EazcZ~clL>AUhrlA zioIpFFsipq7c?7LjPU8sn+;Fg!>FGS4>o#}H16RkTP(zhLwrl`Gc~J-wNl$mM=sQP z`=-esllV0UFRY_Yo*k7aazq+Gb*tyHC-Ki3PRYV12H1wU6mMqih>sT))u0?gS0*S3Re_%#()WJ-cr?CXXxN6KPlhn!pTJQ?o$i7G8OeWxiRW1uPuti3 zb^qhr*X`>w|D)xT5g)0*2D?1kmI%aFoT5!yrE3JFsv_!(e}VHR0mTd8 zz2CleWLsahQmdHSeX?4n`>Zj$VoJS8pab*kH{N(|~-~0j^T^U%2_*kck1dA&%OrS!dhiDCGJTzjrvnA4M*Nw3QGh&a^VhAKs4&{HvO)1b;?IC z)wvseJ*60#w`-i3YJcFrT1xK}f_0R!ik7l#vTeGh`lH(6v=6I-8lg{GY>CL#{mZCT zKf@7QYD*(aEVOC+>GzNCs2=)M*6&PpG@>x3|oj9dYGQH$64!dtty+hD+M(Z*t7wR}f z4X_Mh0wp!>l^O@=gf$A7-c21yr1k`HR0 zd_xh&D!vFd2=s>iMic%jrsGMF9O4Ou8VA|?$R4-s6(sEYv}Hn>_!JLqfK#R5Jh+o$yz0$%Xe6^ztM?Ioq#_$vxuF4Sp=8ekd1N_(^P=O{$j>nKhU+tQ_Y zXaiIy-tF5#>A>BgE>;KZFh)J;`of`}&w$eQ2sJ@$VH`kIyEN_n!Xka>Z6cl^ey~sS z@d8~e+9&19Ev@(lb4n5dT4J$`LpW?`Nb;pb$9Y3vijhXPRI`@oKvRpjwqxaK33kY- zxIGe2Q=r$8x0+AB(f*{*QK7C>-0*}R)&Rl+^o=Eh*l#!XqM}Xv)_Pb*}0$o%4ig1(hsF^_ea2K`$JmMcqjh3N{YvaraHy%ngZ`WSHzgHauH<+ zamm{M{C{6;Zr;Af;GR!Uay6tcMen;JYiEN1v7hQc5I=%@$Li~yX8;N}Zy6U^ZA0(U0@cSe=t(u3#`2uZ@24*m(!59V z@dj#+Vwi10-sai9T&PQ*>M;y()z2d>YJ`*@%*)qnQR)`kdf8@r4u-y!9nMUoTRo3rk^-Ey-LB{|-X-;^@-|Lb`jA=-%|nI) zWFf%UQj;T6Ln=1&GYqoS7Yb?YkZi1hOkBGe-J36tQ6ctk$jR!RER8u{O(BiV+;TV?WH{%_u!(@9jZE$pI4sY$1+j z?GN?or?+qU9}`rY6!769t6nM~fpIXM`YKB^NROUF$L5-Bw~rpG^k38;+ngg6bLa_6 zj497%MmR@&kQ5(t0JBh?>S{;j z!<3fZG@~RU2!Nw&;Mr6bRp5>6%UKVqU7?lfaLK> zRqe}c3xAo1b06UYv@tj{%n_QKyEXc<>(wk4OWm|n5q21}Afc}Xf^|K3Ph=i0Yum!| zu04Im%pCRQvC2UmM;ajf(FjqifD(kn2|w*ZPUTbHxVIoid&*XuwS!*jj?sBFJ zQ>5ZrrU9Z+iGis)6t5hbU9xon7BEYXGOeC4JmH`biQHBtbYz+`qLOeNBWD=KqQJlm zu|6HRgA~wsiUXZgGi}t_G)(XCQmPR~mQ+Zq_8;kE(*EP8zu${&GH&0c)#fq!xKFAh zbwsz(kL8|fc3b-Y(=y>u6Sp{!{;oX4&#i$D>R_Mz5*s>5F319mP>L z(#Egj(Fhl>=^sZE1vE2W-P`a7PhIb3^Zya|FHLSEOWH8_S7LX%&AzBk-pOy5N=Yf5 zQcBrMo$5M0HVcqMlBfg;9)L)RviLbOi&@O#?HPM*7PIU9`Ay^Q;T{(NWHM8#9;;F^ z-2HI}2m*n)_+^cWx!@jIq#}TkVM8FgQv+SlO0Scwgm(qDxfui0alj1v!wh$Q>8)g& z{)IHf(rB0`0dpag3B~qWMnDU6NImVQsA=T^+R_xjh*Cc6@M*|t1ub)JfjD<{9>?1y z4H;T7L%^8S9Sm|Z^lj$Tpbw^#ixa{rhWf(0e^o3>yr-e72q+7hU2x82cBl({4~gC4 zirTcT*3uAg@4_U@1p2k^!Y)qKy$OhgGVK(qsuznaUTTb4qJVCA#bS>`@eaj6cFaJZ zk0^;L=9yb!qnM8{-zb?m2Pnn|$BiE~=9Gt>%3XR+1%@|!s>s)v%X)5W5~Z1UwHYuRm~FAu3-~@& zcAw!mzSss7!$v&={S`T(Q3`_O9!9u1bl<>jGmk2%v$dY9)HlUE&tOj9agHoGLs@kk z_GQ}VDi2I}tPTJd!lMGCu9z~iVh+RcO@XeR+4i1emXY+7z^sd^PUcln?rcR*paW8X zSiw|d;TaqsEi-9}cw(HF8s=N8VN`FthnizCe9|+Y@*PGvLkC~DmPm)3r6z$_QcZDM zl%>X#0vt7fc)}4h_y$~2O4oDvAu^jXh%ZZnB?{A)LfVA8Q-P`C-QR9L*{HIrrp#S| zbY$n8uF@0h6X0sh^5KReU0;M;&_I`jt%CugD!<8nJG|~sNAuK7Z?j{ z*W$!U#FCNANB~o(VOZs@4B~f#ci}S2Fh!CB9FvQw@o`i1UV6%21QMf@(?(Akb4I48 zzNAl7fBcI!lG%gF*-?|n%!ul6Vknz4KKmI49nqU7WoFD1m1#?*33t$$*~4ri-4}2% zagC_LWf(5#YfHv#k`R)_n8brREhazTXLPC4_)_XMo1&1A%T5 zc4-#9zL0d3zH8jx4Ezpl=nZlr=wtYJDLY63uXztkT z`;gbw_kqH=r9kcq5k7Sf%mlX*G<5Vf3@pR(H9Q2telI+xC#0bnhtoe~M*p~-Y47;A zI%*+OK5`D{DIfa=Piyy$gikjd#yI}D%Z;p|*7QDmO78_~gZ5drG&;e7liLaOx!@Uw zBG^dIF3-+ok{}=3$#bXA#U}er+-sJCgdx6zNKdNtxkkhK>j3%?76Lw5j$w zbqOR>$6TgyR!Pvool|_5Q}RHnil80A7#J14O|bZ=qC|zZtv|cqZ9t48H?8Y*TReto z$b=*CsmXCC4_=8dGKY>fCpsVnIBNnG?yS%kh&4Q)RpCy&#j5HQG*H+I>)aN^1SV|R z;vp?DemYMJn_;4;Xpe?PZGmV{18q!aXM1r`^Blp?0{lK*thadT4(~aPpN-5l?jt3e zz!r0&BU*g_;zImfF+jz}&0*(+<54G2O^GP?C?ip)vJ)Ir?)ABzFg!SUQrd#T+!n|n zf>2&<>ulq(o+(PWz>w~i#n&x0G__)(IwGB%l-g}rT!6x$Lh()CfBtwG2y`qE-C4IT z&IDmv4^POv*w%|Ym2RWc;88RmWf)ie{DK)mizsm2as)m$3kulAAr3sfxsXf=Y|1X8 z@H`zbtP(nC<^&7|kHoL2Okwnfofnag64=oGvM@;ETGF;9;*p)nS$`PXPX^LcF-$!H zn_$UE^uDdP+1@s(#bS8macYb!xGFEc!U%0!VL{bkmD&Qnp8zy$F;x8wTh-67H8h{T zeR%x=6!5R-7T)^?)!rS{66w_3t?PV~MCnqP)o>FS4lV}f4rgo+d9q!C z!hKP0aI4ZY9ZNLEu|`$zF^VrxV2mL}LEx!o~f6ZE~0MEkbq0cq`$BW?Spa&%h z1+NEa9F65sozX2g?S9mVhznnIEg2USxFQ*?ktKL zb7!k`17l@!6zv4Iab2eMNsXUn`6rz8(3ETa>gE9{bN z$Ia6mMu}2~ZdDdv_v=;#I>G5DaAJ96ZeL%&)t~9(vtv)pZ*Pc=ACBF-Ft_FHzuYbU z6+iD}VHK+iUgw9a%NyO}hUz)l#C)KDZgm4sN`@5{mblnr7s;$hcZpbkFf#96sc-6X z1)tw8SB^gc`ZxW%yXk>azc(HMMm+_Z#jB+HOOh?tHRio4mh!%0KL zRgN2IC7pn0shxYYUZnQd&ad{@_E+mga&^8|@&Yx^*Nfg>a2M#yh*a(=7)fkbw$OH? z+wBG5%T8pfLnao6=KAurO6K^H%wx8`>}0DJdrG^i>lC9I>?ccH;qe{340hE)Ez6p# zrAHir56vr>;J|B5y-ljB2&uw>M#cpm`8D8OjgEl0N{KtV#}Udw#2nn}TZQYU>#bis z9Zo2u)rNgYJdIR{uPD|;9~E|(c%cQ#p{Z}6H-yg{-zmbY^v%`BPj@C=;9t*87rKl6 z=Bmw}_FaV%>%;+12`!4*@+1*YR7U3R{cmcMEbtRQSO9(Z=Pa!rQp)bCX-lmxU9ZxR z-3KBu0H^*9Jz93?&xXmUDerD!V@yfZDG_z_i7l`s0-i5jG)Gv-2%S7rawOkiRm@9h zUvZleJ;_*#_f3}LJ{A{h-M||wDVGg#Qz~X=@xy%u7ja%jwQiszaNIyE=>$AW?aZU~ z_`k7FeAD zhWBK>nHTvI7o1?|y{hqT$t=eZ^ejYwEpUqfW?>KMp~?3GRvq-Y-rp;|C=V6+b!;sw z;xypuO!&~eJM4;Y6a)P&6F!LS`BzF5bOmEH9zbe{_F;6t6 zZL?*H^U%&S_9D@rIsGohQyN##)lg?^Or>xvW+#GCT6xGRO)QSw8hj-JQ62NEBY=p9 zL`yezop8DVR=AT`vY^6E%h~)%fvWxq?D%wH8yvLhqU^O41kD=M?;v%=w0#^CVc>_ zvei~7OE75AGjDP1t*^3Tk>vX{sTD>HQ?}g>NsxxOL)jyqRPCGV|Neh%((mTFz`w#C zMav>}_I+K{4c31mE5Ijh>2nmGIKr@JE=%+Y-qL51`d?w#KQ0=Xn*$~v#9t5_k#J&e zU_NCvZL1;Pc;*TD5%EkSL2#wRmopHGVK9`0$s?d(AZi<*zBw7Zpn#Rom&;u{N!=DK zrb1dLc_9#KN014ZpTs$)g1;*mdZOP`L62Bd7Kp^a)KJ!$B^tG@(EgYvneckGTyBSe znOP+{K9c4-$*6a~Q0S1rK=QwQbv%BGC)B`t4ou%P&F(Q;5H=sv=T$q5ITP_h)R z0GpKRYYH?>eqeedb73|(HO`~4ZjIAo=wf?6qiWg!liyD zIJt{T1g%A8I?2)neE6&nDDPGLSjZ43xe;lY|px7RpFV}Bl5ipK`r{;B*=9Rk4F(nCn zIU7wuOx<9zPXB_6p;znV9-RW0wjn~?|G@f3_5p<+fk;OQY}A0MO}&8ccvz4}YNQj3 z#DGn&fob!x|4D6wg@XYvx-4+}*tTs`07HM`{=2YncwrvVHP&wip(`QwE5vSbMXhfh z@s-O-P!w29OTDC2>*Xr#5PDhDMAeCUsfA~r!~ni$Sy##?E5W;NndLPOAc(Kqe9;`4 z-!5O9-;&pkGc_f3p{}Ys^r{$Wi=OxCW41`!auv(1C9KzdNb?--{v^Y_()1p)nXH>k z;;{-0k*@yx|GiJu@-Ocni>yq|RY8Bezm|K+#!LtQ+?E0fF;1?ZRN zj`?ohk`K)S=GK_{eNn>@eS>5`32YSeq3fz_9l{nnh!P!6M_7wkW7)H8PY(%U64=<3`WE zgn)W6NRYfU}GUEauL^>NCN^ z_$=_5gRUopGb>VX#?Qp-XDG}}wZ??jm_5cesm0gqLlW;BCgMy4)2o zCw`zgJ}%#1DkBA{McMUXQ|g?T)abxv!*{vOLFPh5i_et1ceE)@e7!PFUNC z@ub~Ox5uAk_=nGUAW4)TVbFnvAT8-Afx)O#25`{zXXyKbqixUhJW&~Rs=z%~<3O{m z$P!T>O8S}g0V@qL#e{%HG7W$+6vtt@=|IF1g$XM>!oABt+Z4c*D`;VKe{S2h*#J-& z{waVyiWpwF$;+dkygUYgo~aV_Y$)_SX1c@`8cPc)K>OZV;^Itcr%A3Y5Sc0M)6I?q zL^?`fG+)x+ZCqNm{2qj)&4y!hU1QR7^(w2Xq-IJp#V8ul?RFS?iBU@AeoC}-?3 zd$wJ8K2oZMf_pw$Zg6zz4O&LaBIfL-(ZwH0wXp>adGz5K0v(!prt|bM&3&F+=<>cM z2bV4v5KjQa7|bj(eS3KeANV(5zi)G=23NCS@DFd~4Yj!`08Few6-{8ELcxESQqZ;; z0>e0Xk>dCX#d8O$4_E(q|7AoO9!iPm~Y>8b~syMY^o{&I%}jaVi*G zK12+(xha5g2vC^S6O&IloNxp_<+^}yJ7oNP!aI=(0nH31ebu;JP?l?$>gL8~f%P;) zG241PScN$!TrdgrjYqDrOiaXa*uN&*WR-l4CSHywDpO;Nk5rLD(&n+k%;q=RWZyve z#Em_R6``{wop+g#0k1o zM;8|Z^V{XsyD#{6{YALF3tnX-ukk$wGHSfy_;$h!9BzZCiBg@Y<5mf;e#~mmto7CP z=UcO;zrvoFE6igI2K1}4_=<}JxZ%@a{w3T88eR0^?U_+z!ogOLu%x2|Ho&Sxntke( zOr5*plM~@A~pa+h7ai`!$RNT za*FU8qcgxu-;5=o%i|*w?yygT#OBC+!aX~<;$PB-ZT64|t%PPIylk&v?uUy=;n@nW zb+)*%LIWbKuL;+H(o6(NBuIEf#wNxT>6&7OgFq-OIE%K%(EPimy4jQ{2Y$IFW&Ztl z)xi{o2$XdHv-!7U&Ma%)t9it!hfrjmfCW41JHWVns^Ej)+)) zMte5d77KyFdjNafgz|5}4d1~Pt)aQj7j}OuU%34(60AV5XbO54m`ii6Wt|V&(UKnk z`t%K7(HDGm>(~SO63rM9gm%V_kVe@deNy9D$G}GqeoXzbc&s&K7U-nSHvBm@@y(FfM*}{CCjbO_Vjqo$V92u*mj#2!I41_c#%`YH zw|hbW^zwF8Yq`{p0r=L#h4%w=k2Ex?kY<=?_ zQ<|aA+DUPF(u@vpKf}t|CnFvWl&uN#bYaTzGEBC@vZja)j4pW2abIBN#jQ*`JSo7T z!AvPI>Y{ysg61xMO8@|)5TGjPAU%jk0aA)34TBT>t+z|th=i(Jh$Yu?L%yykB9gYF zvWg3W7ZNQA9GIh2=v2O65&8U~zsLR)G=C`$=w6oC|_{O1yfkwPS4WthlS z=`KrlG)2O3%zh2;EgCJcvtX|i@jXJEwiaOZk6Wu=Xl-Ou{#P65ixn1Ssi?9Ijv|mF z)roPdwguEjfMR=mj%}J{pJ!d5VxM-g1ww%QVB>0HuD0ysYU&)l=|u>zk96oa(-gLR zYQO~iGWCw~ZOR&vrQ;RF7 z*e(yb&G5NfA1ZPaV`j(`l~JckFxBZ$ZcT)GvoYUO#nP^D;a$aTflMNZf_oBw=Eu~= zV07|Db!x->cKDRi(1nHw$ZN1f0qZL@7MJH)$I9}ke=*?{h4;l{DmeUBW?v04r9p%4CVm8W)JmZovF9=AK9kZ7tT9}1-c~= z-9fa3_pZd;5b9U34!=&gkk^o~`ryKldoVm@R8j@T!n+iw|2QYKk`93=4>(Ryt+B#i zN+|SZ#J<}`xLWy9u^5t6+VJ+t(FYtZJg%c|lGT=+tFgyZHjg<0&%m89t$(s@6{x5` z@w|VQ?cq4I9cVj%ELC%PT1yGRppo5|)V%9SZiUO#28Jf=UuADqDqHa+O3e1ne`55# z`A&a@J1`$FuQlS}GlY-KM|izeHr2|U)(@!~BaDPv5+@MlF_ltCFn#|DMQbdlm{rJa zGev0zr|=nUe-1d?qzpMQM7&(+yVt+o!Y6%*07lO5u5W**zcS?SPi2+?W9;&Zvx{qnq7QR9r2C`1{*FYxrzh;1{?v8jc2M}K)A&N%-0uS z`XNS^5c=?P{Fv7Ie<_fxk zBF__eOl>o959|PDBe(mdzDrB|ymKp11DsIsdpG)NEwlUghVgMYqImz+X7z0_1RMv& z+_d30ZG}Ln&%r0pQjjfIP zz)Lksbu1Mt<0Dq=I#jofaE)pRqhc&q4=>V$>TRW#bQHs2NPAr$;8lK=kUNRoA;kPk z)nqrc0I+z8-ZQoO4iIa!kyEowe#6ag_*AyxMX!a`DeD%&Ae!a}ZbpSvV|q30_hXQs zMZ_F|53RRlnO3$M558>+bZhXmK*jfFQDU((_H zM-XCeVz;fMsWfg{cg(Ga19=PC5D%LwFA1;vECi@LnIE9{hU;jn1AB#*hz$%cI1hG` zuV|hMZQB&Uz+BZk%&=E{wJmsp=aLH<AQaP_pq;#mr+;~XYErwb=>%5)&^G6XZ9OB(YRwuFZIcF2ng#(YbFc8f9+ zi9U>>a||Cs&zP#A-4?{ULv#5{L*%8fvG&Fk)%KB&C``-_kNzs5(pkS&heCMOV4{9Pwf)PSJWA*9a^why4z+W>$qSD0bB-{5;yPgn z4OX~AhyJGz5u^DSFqk-cJN@$Xt@KOdHfox4;Gbgchm67e`3nwtV5X9mWrk~XfKHjI zg?UFz(U}^{*S87g&Lh{{#kwdk|8I$bCOE)hLoK8}3T5+{(Knb>{YQ#L-IFM1qvNs4 zcxZl2GnmG_&6C9g3=g(2UJhB7A!v$^(l>MbxS0!kGBe~BNRE3;biDB0Oe|=1KT|9V zKF?CkZCCqsfDO5#hGmTpt7VeI zP@~4dlaQ7Y*vxwW1vJ93N%KraNS9LCjad-**!NLwI%aVM}3ktMYV9K@yGZijehh2?MDPGC57(JAz8tASI-0PAxh=3MozXg?e*M>$E1`CQ)^N7oC z!QvCrt+go3K-2)b(1lo`5z#On4ZMd&y34x!IvVV5#ZHfqBbviwhwShRISS}D_Jo(o zlh#J)`Ln>qmUJ^O544KM9M2H&xDBS@2n=IyDmj5DPv9}hVax_SV78*?!IDe~Y-Y*> zjP_tYPrml6Ra#caYH%1n?weJz#0*au4ren+qhmeBO@QTvEzB$_>pWDop%GHdVI+m#KKKVsb)};|TA7E5$`)3B_^S>ndZ6vPzb4N@`iu^E}mMu~hh+#cbu+R&R1K zr5qJE*RS7VN(%ZE(ahYwxmLo3wmyQ;$05B7m?Gh#DQ3z`HbPtxA()apa$ms)^gr&bu1d0|G=3UG122{k>$mOtHOkoYb>g@c;h*o`dgW!i^$N?Tse8kQPD!Vr^n>6MSJO>diOb{9WXOzGJ?n`jbLxCIvU3?HRbqYZx5R)(y7>FnkIy zk}ZY;D|^#^uH9Vlv_RoiT-`bVK`ce`I6RWBia0T)XML3 zNH(nmKg1K2i4hi!TDIaTZ|7hM1)ou#fP(`*0TatpudqMt(ld?gGq8MwNw1OEz4Hq< zzw#6&Sl2ZSb>V_;SGKt=CMJ3<6Zg0}qsXniAa5UXqiWdd28q$WvGS&A#21+j84M8J05LW& z%q_G(lCavx9-6=5`x2&*07<@CKRHJ=Q2Ghj*u3Av0QsTNS9Jwr!^dC-p1f3}9}A+myl)hJc4{Fif=Jh`9Gq(2ikKw<%{+Fe>^| z%2(W%jV}w&?vC~wtE|kRlOclJ9&$^NyW@~)WQE2#0W28zAT+dg3Oczkx9enO!~ct9 zuk$p)EP-}DK~V&!#bRe_uEBmq-a0S{$GAwQsedO9W2Zg%g|YC7x-ywGMAm1Pel4=s zf$Y7oTC#!2-iYjtlZ^}&HOa}pPMWIk6u;|<4Qv_2DUliO4ixjIj6iWO8YuW#@pS#4szZV6@=ypgWn|IIewQ$)14 zEa^&Z@UQg{L~oCr1KnK)R0~iIM5is?jeViDA2bGo@)9ErH|esrZxAFsC9qxt#{Lp} z=wPw8PxCxh?2wD8fw?LV?=Q`Q{zhEg!3J7&quXqMWweY;9mg>QJZXc~+~y(JhS#uD z*fyeGZe$jm31v(OPg@vmuzC{Q=e3|e>J^P_$n}Wwh+u+q3^}P_tV3SZ@Uh)%yBz;4 zooEUF=_3}M+W&(`{0ZN2@Dgnp2fXCcWNyIt^l>}C>HolSJMW^OaNMy$PwV9V9tUy< zwN1;%^jM)mbhthbDb^<@*B`O!;D?W{_8_r8oM4x2_ED~G+L)T(U{>`jj4BfI=vpG3 zd8y4-ftTX3&0_ojV+>$GyvBNPhnNe z5hhxT))5|(=CoH>q9CteTs5Tu$2RpGVK5jA26K*Aa&p?2={Ir)x6FvgDj2H`BZ>q1 zM#5uVrA!Ldgz3|;k*U%g2R4)=2hPlrLJ4eQ(C-4P9#SedG@I6oW<9?KrVG+Es2o~Z zxcXs}x_OfN=bQXti~j@X_~Tcy`P=;XNjAVQKSjxv2E$3r8bnoWh~a65PKSmwKxjz; zVHznR9CXxz`b-jTg|VUBfe>?312c`X-Y%%p_GL&ZH)e1W>PW{=H<|-+wjRU@gxI# zSPg!g?8?J;JfLl7--Cnqrsh}pe$@kfH%@yJ(Pak^SDs09F7l|+{za50F%8osx>M}; z&H)Y0GX0*=t%lnIY2pciOwIRfgAQ!>WdaxTKSP2sgPFO#Pqy213*BvsyV;aI5#K){ z-*Z`SI5XGve$PuY9Hh+i!bwq%_q z)Qe1vteeU`x&iLlPsI@enwVD!CbPm61z+{&b+JsVkfoT#_=$vClqqgHR~%yDD2727 zfLpHj>7G(b5wTkfC7^KxQr1P;27pHjk%X0JBXe_kE4k}A#{*_Go z{rCS9`o2Ql;kX0oEFc-!$NV(Kc0~gXZYlR`4EyHI1~)(yW`taA6DGBgj2rdLp3?PV z+!;D3TGCMh>oW|xmm05;B^@QOfxzq#32TaM1?-rbxecXf=?twrtM+Sm(po41jrhw* zjGKH_M+o$9Uo^)}O)=e2Y#ebG?;>9(dA5j)fD6ki z^e>uK%4w4sbJE1S*`6IJh6Tr;qnEr$u}77F0z8r(I7u2W`=dlfo2396n@`^k@8+hU zzn+V8iVpUtqio%6q{Z&FO2Z|)q-qq0BNi)Qq%c0SMY7rP?S(#53R;xjgxNY~vmTYD+QHpsK40GAhwumH7E4@Mp5DhL$u%za2xU03znbX0g++;rlFhul=_I_SJ0%dulEp zvVCF_`pewuMVynvLZTEKmrZ=qmY%Qh^bx2l7aTSlau^!cCGONP~Rk$=Ra5RQO3XkDE=aq+G{uf5&AtczrI*dIcQa6P^c4!CqKYw_6`@!9Yf;Z({1y(< znAIGm4Q5mG8(dShIKa#i%M0Mhuke(GVR|7RI4uubTfU56^qv-I{FLAAe^Hk(k;gM! zce6!tY~E)3?<>r-xkSfZ3bMsn8?vw4Y|)#T4+VNJf7eHVp}505+krmjuNWS_S1`)9 zEe$P^4$K2|4*>tweh7a8FaP=hFIgIe!%=ecWQlpC;c@07->CzApkA3VH%(eYvUy($ZsY8L1VN}nPb zaxz9t6O)F~xHqXiDcoQ8MZ3xJyygmBLk`P`@Q(6XT1}M4;gS1M?YP zs}H#LS)|JpUL20LqyVSpOZ|`@FdgnjqBn@6Lyn+l#(76Bxv)mCF@tPQ#X~)=Fd2FR z$@byB@FmNWU6!a7)}Gtq3_aplmcXY@h{;+o!9&*O$bfZpabZ5-%51HEg=xk87Ng-8 z|EQ@9X1ash7pCsEl;L zURC;Xjvtrvn5|muM#**kd$#=}gI7tsXzRG5hWoPR=TxAt*PylKBP4@@G}S@o7=9!EI4((fWZYn!!SRFaR&2r%(N<)31*p5h<0Hwmu!#c*3Tgp z#xgN6F}JsupRsQHKB1;`RXFeLeSCkA)CWuW3!aYSSOiro_oM*h9nm{|x!q%mqG;T*yPVzLMS9aM6)OYjTCj3zp*ig*t@?$6kl#|(Ey&rb z>e;G8gSmCs!_amC1!jwh901%f4Tfi*p9h!YjPN+uukTPFKO(;F5R8uiy-;7J=<%?zEEV%ap>M9RfI_lWmnFb(w7V~p<6f98W}1ir&ft|t+&yi#M3cPG{#nXeffc5*lGy%HKyY`ChZo^%p%!PiN_T8 z3p4WcaxCpw7C*Uwv3LRR_##gLUc%T(RqHg}dG1ZfWi1%k?-I;Ehh@qOm2Eclwy277 zj?N@>VFGc7RLs~~9t8|E6xR;Qs^)}ziMb1ta+S8R-;ZPE2m@Q08_p%qR_ncjUTV+f zStzk!DAWz1*chAj^*jCf9e#X%=h$)odIfKM^w*5GHiXA2FfyUw0i3Or8sdMhj#JV?1(W{Wb;29M;!o;Io5EDmqF^f0?AItFX++pH* zgT%>f8n4ydWpFO>P}#BqeA1SlukiE{X4V7GGRgZclus`Pn20c4C0`Tun!Xr(OPl!E z@t496Lo+Zp&bz}ecmekX<}lircM&D9iG{V0UEtmnzzIzDH*i$k#9U(5<~B>#Ii{nY zNgk3p{5o9e_A;UbHN^arsjE89@x<6OkwA9|M0aGaUcI#}Xf#Fh`)<*M!WAVys@SLT z1pZJIDV1jr&_mGdKSZmi(Q=e2=s_31Fn9Jt_%o`4XscRdlUpnvU)b=J9CvrC0};{| zNH2n@$7De}&;iu(SY^_)8}Zj=aceQb}_RV zes|ln-cTaZbhA6)zA&=eTvmh0ksUt6$!B}pwoL(y%=PC_+SW*iR!}T`JZsE~e|iaUx&>voU@Erab-ir6&M^Id zDGJBL-VOlO&#+Ve6gxBiUhi4qeJtq~d_E?y=X6A+OER$~%OxQ%xhmqqaqt;l<>sEuv7v<4JMPE(7;vp%NwOL4)toO1>QPY7rb zv2_xWDmj9KN!bzHFc!RuN#2g1Tu_oW++CZOiLF*bq@x5jGq-7;;}TyklcUK+@520= z!qo^JG>OsZ=>XYd!Buj9pB@@;-Q==X|H53ud^s)EO`THlhDA}6JF#W!CcCKzfS0JL z=c!E$CUnxPG*|PyPKk1afTj*4@<4R?gy_008eD|=$8EOp?+NWpEDLlh7GE)RQ{;p~Kv3ML*E!fbnU^X|&r-QZu(y}Qxf>>J%;Lzj4U zb9-lQ>2JW*Z8p60Z|0w_F3rs={43m^Y)W&MBv}%*i@`p{%TaODkO$gj*%up9KWxbb z5x{65S<)EZXY-7CO%;8<3XT+#4a{eDhZ4)!;2Bs>z+mv0Mqbd}>@Y@PsjFlMQ-y8B zRKgUUiTMDppo5(#;l7g4LNajDH?OmA`dyOeJ6w3#z`@h{5gv*r8@Rs5o6Jts$W|29 zj&IfDCAvL^Elw}Y<(FH%gje`>iMvn^0BqI47CjtSQdGV@M1t9h9LS1vmq_%720N$) zj4aZ{p8QIg7E*vCbC)HXBCBu_i#|m%Hdr4U-V5^tvx`!jnoWQ{2AG5v6o-#5ie$x$ z&w);tv}s2Fm>D17p3L(oqTSH~opqhKL$wcg)PR1Wf!RfL23?v*RrL8Pz4&`>moP}N zb-_B%wM*VKrGMPifU;!-5r{IA#g)r8SJWtqRNvj=$K9=CkGj>=RX1N>#hM-Gp?+mr}=P(u3j9mvx3^XtO-8D|$P? zG$n&}TadAUbtfZpi>0!P#R36X41xg-cG1uqxAYzhob|Nyn9X`z!0|E3ACnTB+!FDW z#5hCZ;Az?dAWubfZk!*HMCwh9ex7>k=;!Ot8v3z{z-Dyqs$#oMDJ~B;mOO`Pi^YT* zlu^Y7N>ZDf0_X=!ZNpXy{FQO6#)G)@G~~Y6rk&=FK!298XPz276HmTbZJ0nW75YT-G?3rS*_g<((gifd)qK`v{14-8dmu^X3o~=42 zHhqtkA1ia>E&aHm;gM77)Ng7%Pif4#Up5DMp<6~k3zRksU_P9agV}#F?Ee`6Adf0}1>E%%mJoAC2xI1E< zRhi=%0*-Sie<-pzpMhmqFeZn1tA2a`{(WNJ+7Bpn-N;j+*GdbyKk;8Kt?6}rb%?shqCyIbez0sr~Go>KiY4)^CAZE9?}4fJ;A>Lx&TyEw(z_V(|b>>VafH32bVp5;we`4ryM%6J$xD7=|7z9A=M24k#`P zU0b4WuZAGGq%I*%mDD| z-l22Oi+h~FScan+I_-00c$H!Rk0rRx5a?E`J^DWH;5DD-me5QH25!x2jRBki&~uvT ziJ8Mqq04%+OP8@yOVF*Wx*#vnJ@dFjOy%=`N&c_5uiuzg3H}ZE|C0P`n-5P`4KL2i zIekj}s1vA`px1+W$SU1yEa`B!SeHe*=c0$Qt<)uNZaR58za7E-h?VD`P2a>8OswE= zLjyB9>#EAR?t~6g-$g)m8aQ?#75^SZSg3ywVgvv;HQNMJ+Tb&m25kqR8taP!-ab2Y zDb=oiZpe*FIoeU7fp)FFQPP(Kkj41vg?W=zNv6o{8FOc1 zJ!5ijUZ^tJcS@a*jlclA+7<8LzcF|AL-=-S^!5{ez+cNAUBFjF_kNf=FEF%XcPMLo z*V^>Jbs7HLM}hY-PE6xF^l7WlFo;E!%SB;sEULlfHA(cTPGD*BQfyr1^Y|VAKSo*=&>KHKtQ`ZE;nf zjD|QRg&`EqUzV;GaJDVt>eqtNCopVrJ!39p}!t2|rOdJ#b5k|0C; zKsYkdi4bd}BZqULj45aK344R+1kO{D6N(Esn7k9yd53(=UiPB9}Y_)z`;pdqB z!L#j|FCX8wYyj`5MxUgwZt-KjYp{XQ!B#Ey$Xsq$@89EJ=frB+AFovxpE3w^N-mE` z#&ihF4VY}G#lP(0!;A3p%X_r_MZNd7`vdd&^0QsY!B*ha4Z@L;lr|ixB;;Sh$fXIU zQ&?SpA$MZ?A^aZm;XJOTAu@dZ>jaCcL&JWuXw)}vamn~5*~82DYxOCwa0Vgn)F{#- z)3J~(!25-tHcCf&5Xuq)n)tzv+t2hxbsLf>Wn{Oqeu1)nzV_6;JXd9!ZmDzI@)|^w z*;dj&u9QAYOTXk$`piT1j>x-DyIZSytYcb3>kf$dste}|>{*dVa09NMgwHO_+dTc2 z?bl`YO)ar-#`=(?ZDyK?&IASxm;d=i-`wJdWS0SU->kE0Ph;ptwj#&xN>~J%?4gSu z%L)5qr%UOce|JLNB@`PoQ?0Xo@{r=EZLkP>eio@sU9HQa*f@;m2pC50`s&^LTXRQ$ zh0W#65>APP{<_T`Vil)34uA9Ph z;ZK_%*}2};Yx=x;-4Lj@U}7%w9H#o^h8nN2A+i~aWWPx@E_=L`GR+Fp^I{d<6hEyZ zYYNXl%6U4&i$-?ks=@%*b(XjVJdHzFv=A3c;ed+ zNl(Qv^#p8$IpZD+J+F7!W3ou_zD7n!Gqe$=@=4t$%i=MvL@K-^D*8N?XKD;FEZQNl z-9X?>t|+TCmjX0Qg%xKelj*?hl+QZm)6$l-NT-jAM1O4logR-erF=hdk^fya7y(p2 z1N+baI@jpgNOc}^;!d=g7Vh7>*@2>ZsUn`*^R@KL)YJ>qrgByAW%lo`6^PXnVmRng z;VGFuCY;G2151~>U^uxfSMpIT;R;LW>yLHLpA_Je3-11wuN*`fz8 z$3sO0m-cY=cfOjd$PD@C7gQ(IsRL-@Cg6kZcKIa**fKSG=Y zurcW9leF4X?S$R>P{|YBW{JYotnmG0nb=GN`4me?LqDK#R%rP^d4fT`fmtOL?k8gx zvnrF_8W}3)L|}a`n)W=s?_S4RYbZaq6x%Y?wP<^uq5g#tpPnZa7^cs(J2Fy281vm> zWl{LKV2)>tkBF>8#0Id~h3&aH8=Ae4!V6fUFfgxE^;?;x6`1D+%Z3Ak)eI~iT9M+= z#jD{*7Ot@bj3!u}0Uq%Njjf`xb}bQ)0x|Se>!2M#gsYDtk|!YJ@Hl}*Xa^8y$ul6T6Ee2NxzZqfGGI`=q=Qb)7nOjITp=F2Yu^p_4uuVn!`$S$5&={rjV{iOpkFn3?Gs?xV*vA0cXiFnc& zq~(~PEgqs-7AwF|7bpEWmN|phf;{x-72yO;ep^*PS9RQ>+E(g-tEb_8xH~9mJ%z*C zeg;O($ci}(9}f(kTUuzEPKeaUoi@kC|TsiIzWDM=XQbZ~Let#;L^cIDK1-DO6@M9-snx_MJ5#H_9Wxc8^jDN&&R8<)&^w!{s!X#3Np#p-p+vV$9P7#}8 zTbcqG1WZ-!lX9_EmOSL)nA4;536xkxch7XYU!`09aM-y1PnaQ3R7PB8CRKBr5!N2X zd8V*bcT3p{bimieet(YxQ~j#^@BcfzU+(s}hi7-GLt)a8iHUJ|MZCL6fe{1tLg?dC zF*1oRt54e;YB#evgWB|n`D7pe1}zaAfZjQQd(PIpkkvu)e9ZQHgs+qT_Qn_ZiYt;ybMvu%5;t$pVEd-`Mk z=*&5D?lbr2o;R-Rb*=C>K<}_zRmstuobXZ)x zv?Md$`UY!}-_@c6Oq-4WLh#uOD9^miR4~nq_EH2Fa1dYSs80`4PH~fD#EJ`Req+`* zTgV@+xP!?ohK$zeE?j+`rz}_O!fg`xT{vasjbPAovEC!8q>~OprptBw?$3z~*JR?< ztJtgsLeSeM`A{cHKA-l4-!9@*r$beFE~B1ZJTPsm?=BezEW5b~GqMwM?OG>T$6WhyhytfefoqnIjLw`8{=GpR^2?HW zH*9A38(UbwHLV0M^`pBZaUWO+MFeYet%pXYD-5p(v649{{Zi=Pv|^GO%*E66ngcj*WcwM)Suq`bUa=_0* z3BP$wnL1K-f!KWkHYxOT4CPpQ5!}(26o2W>vF2a=46-PA-!tBe_)Q*YNnNdyEwV4p zx`iZbJ}HNq_7?LWQ9KCNc!c@g1kGK)Xck_r^9ubSWe845f4pO&@DxMA>CJwm)-g<@ zc2_a4gD=sBVLsN%t`KSNpLC} z0O4}pAgbL#M$&=<@C!UM zi(%dKichnAkDQOC1g}m!lkK`I_T|adBQa(NJ@OvukWmS7f`rI*nszB6&PT50Z%Wl* zN$rY1$S9VnFHmRu{`Aag{8jryAD%XO$sDNZZdYFEk$c#$Fj& zLy+V)wCu*Fele!^gn-f+ZXO<~AY$^XsD)HHvCR`IAh+#TWzAXf;!7N)rR6G1p6nxr z`fGlBQWKSp4>V(xgHCWZ#*Dq=eT|ofNF}x(;Ti<}uGYVxQGfbLzceQ>!ZS~zpjCY`F zlIRsVxJKA^e^`Q-dhI8I@9GRDGE;Qvty>g=%yEK*0YxD|@ytD35wbr;pu|^sh9c7kgT@yE-nZ$9E2byg(*#nj{lK8&` zWDU#0RW;nHkv_a+HWmwcM>Y9SA#SZzRwjx$eb^w<$-qBS_!(UDa3xZTVjuU?nlsIo zgKbE1Jg&?9j~@oZU=F?IINVaP?)Cn4^eYC9N!bERyTB%P;!|9XcA$=t%fJ+{tu6KKn3OD$k4 zDYCaP>+kDb&M^r+VmI;)rgc-@9M+ZAwqv@6%R$`SY73=z)}9w>A4BlI!)e08gdl)B z`=-v)t*i`=1f6=br>pX)bWv^Sox$ipsqXOsFE!Q+vzX8f%svn5m|&YG@PLR8rM*F{ zn9te>tbY;YHz;0wEa42(c&h(rlWawn9dyiie@)`-XLyv?C;>$GZG>#l@zWT#W3<2Y zOT%*=*zE{a*ZKweT=#*Z*Kn+2Te!8)>=b?ZM!`}5TI$Df%QZzKW6EQj*mh%16?if{ z`2G!$W_u`*rmCPLG<|Q41_80tyTnmPS^02RsGihO;3O4`jCybRR&;Ot12uWu<>IoC zxgR$l-MJiRa!&jA+%myk+~w=dh!A>M=ym`?SrHg=zAYuYX?+ILPaHi}AM(QbKM$0J zjjw_2X}u;WDmg8X6>~AqDnna~TI-qWdId}Fpi4G}?UcRU^J_LdJ>Tk)+T5v|#F1Xz z2IVe|sR(8`i<+_dx-P)fF-OytGZXJ8I2hfWR)!{kW|W%}uLGge4#UA}D^jeS`j)GJ z(PaSv#fDmM{7kSAqOXy#rGHCdQtJOE#}`5_!n6z*s&GCA50Pe`AD(kI75~gX(TA5b zM;!DhVQ!XZ$Bw&-{diVT9AK*}-8jg^L|*S1wGn2D%G=8E&aC(+0!R1!8YVeQv4ml& z4em@YJyxYh$u03h2<(Uaec&$gU;k)@8Iv)MUqa07`f#&!t8UXP z`*fYJ32w z9cUFKKK@|cLXOIhUA2xtWe;*tYjUdMBt-UImXAvOX!Fy}To$U8x8YCPir4&67^h!q zy&wI%kJZs8W$A`MT4Ncj6(4WRDCgV(8!JePLkL_3bjtk=h+JXtTw~zTIE%8omy;ozh{ap@JttCY zOJflp>0=KT#roTw$84SLhORBCnFFt~6T&N6iHVOq1`hWU_i2>NkcsntAY^OV?%u51 zGq3XV4M=E>^NVMGJZr!eTs_(}n42By9Fr_D<`i6$%E#zAGcR8C7=Ba)vb;1X$6XSK z5RW5v2b84rVuW319{xDS0Nyc(4n{U-h}y<#LzU0*QB%Ws-Nj zzj=*xHJ=Y6o~?jpS^ZCf@Xi{$r{2kuJ5pGG}aB|u_;k9@aK^}ipu zsAoDY+OPDZpE>|y+#U269h%f&h!LJ~Vc&6<8aQDZ#Io;yC*bVEUidY`1pNX(DH%`T z0_VYfa$sLK4QkW0W{`Sk_5j>SNcQ;-6eC*`NAku8tji)E*=L8l@FADA#T$vTgHt`7 zn+}-lT|qNoGvfdaC1hsY9rJ0P4GAxeTETL+hIQ6?+N(07)*19aBU>vUK{!X=vMt<@ zq3iOyW)@U<92PLh4h>F%5LUEcl#k@OjpkA{Uy!yTUuZKc$Q@@%g#Mk@Es-prPAyTV zCjfjW^`0n0!rG^ch&EkZJP?0)y6By1%|ib=~mWxpC56l9b*3IQpeKTQGC;A zY(ge%E@E?cjnZ#qQ0<0jL0IADWdwiN=Av+TrTFe89=g#&eSm;x|DY)mLx*HO;5jTi zgh6oxULFgj)dk8{6{Ia&gq+jgS`a4W9SY2*Iw4}#lJ49UaUBIW%t3x*>K%Fm(&PDE z2N8Fp0L%-*j8@^|vptx%xYB9#z_DU=yy7Ajk2rq>-TE-wwT7qbj_|6ZG&q|=$$G%z zW$c4#HfO1=UhhXrTvZa1_kekQ({0j~`;b+|dF7NFT2?UF`l8YTujtM{2_G6W0?q_$q&JqqM*Y&bQbnqrU z& z_CUl?rsyu{iA&WI)T*+w(oorZ9NTIX9N+a#i zhwWqb48Kx}sC{msej zTOlXVzmjgS?;kEe-?mFct+H1blWA;duJtAs;TaB#bgiAvlhW(&( zz4WZs5+hkEd*43HUHzvv4CncbNy`jK_x>Gnh*^dYU0Ai2s?%xH3T#G}H^w4`zsj>O zVDC@uAnt5)_xk0g=|1aUcz~%uE;7kj2MOB&0`ce+QiSE*YsZgJ%DZ4#BkfCq!s2X< zM``TnOMatgubXTR?7gpV$kwi)|+#6cTp9c?}Zw28z)nUKiK4fbIzRr!wYVViu zR~E#zUL##%Zn*y<1aJ@2qYqxgrDM~gEl$KjEk>%1Cup@)K4rqpxcufQ7&exTc}A(wChrWYdP{8t1!p9JQ#Y*BXxA8S>7# zmnPoC$jDMLFIOKTrV#0-%8+K6{|Y<|>%nVjhZ6_bI0uOtXW5E2m?x9^nfkk5eD1S4 z$)t^DF{EnDOq>e-JS$i6W;G|$Q#VOhVnaEJuNdOe&oRQ_nHTDv<1L|Kjugbef!~dB zH~fZJAfp~SUnSobHCHite+8)Vd0Mj8?b?;1+$=NQ5m&)q5}h>ru=NWQzrBN79J20s zB^fEiIXgO9b~9n3MIj03A!4rynK&vwEoj!|`|>DU%fZ<7i2Z67tb6ce zbuN(NQ##8Z7?DWaq2C4hi1)YS-g?{&sCz}#6;?XBjO{sj%0IK$Pz^LhXVY(F3cpRh zjXB2)wdbpVZn+naV2##$5jF!nr@@mDL= z3LJE)kOPAz^HuZ?gPtW3%JyOWLTbnP0fjiz0zSNLL`KGZA-URVUm`u${&Jt&Ug!dp zp}ISU&;vUwJrZJ*uRYq^K0gF0pl;fD}|_d(vt7EWw$-?U>4 z^`NmC=Al325uKSM18Yp9)2l~Ugcoh1-21!?r+}7SjD|a8Zhfo%}_|-y&sH82YSERVxi5x;?2DlXY@Tm?=;q_ zXFt+6%SKBLIBHFoh^TeE@jr?kMZjDgcVSZ`7rkXMCkNZoHmW%2L>)et>Q@0Z2VW(P zchH9tkwlYX0BPz+hcs;f#_x_Tivzd}A&oHoKn^;7o@^15KNG$9I9tc59w&yi-~_o) z&f1CFqeuZ;TEeuX0e-vFA1WlaUq6lNTcx(mSw8LRC=Xg0kn~t}T{mxMj-PYpaypYm z_dj0PL8qYIsTF*F91ODSvH6LK)y?2Fi|Ytp5o;@mWzg<-j;}%SO@q=ub<0V}5K|b? ze4Q;=qy(O!t!q%iw^gqsi;pKOJlZ*F!6Pxx&Mx_?mbW3$oKpUi01uIyGbKJnjQE|jbU*%ugm%7VnJQ~EohVy0H z_cC-l4^1%5j&Q~zwg_y&LaV(lTO9rFYF>ZcId&ks?M52J)uGiNbjJ6E@~uw z(l8jDWL9{N2?Rbehf{MsFbw1r{11G@5oH_*?4$Ixop*->HFM)+?fh5?eQO7|gh0p+ zI*SQjC4!Uc?@V`7d>f#c0-i7jziMAstU4$Nox;7=H)Q|o7^Y+Au?2NqNS8R6R26*N zSiA&mMrjaH(j~2J$qSw{IUT26VHGDfz;uJ|*i*kpg!YInFrM-5t_7G5`(EZ!my(EQ zij+jG_9t_4*KKXl?BX_2pd z+6~4t>&)!S^Yx|S|Jodq065y-gDfYFI&zr83yjw!W1A>kv!hS>K@H}~pj6p95LeKo z)c?lZJlP2oR*Sv?!%U89p%80t>2J0cw07grSix=Y_+5vjZ&<%v1=oOJ)yDmV^E=M# zD?N1w_)t4E2Ulj50qccuH#X&TsT*?>S(4?0?eVAsX3CHQGbX2i^D zylkoi-MJ{-(0ee)(~jo4mD^A9cF`(ZLPDE6RS7|O^(<{-A0!BxH)xZfQ>XSl<{!$r zeOM2?3KlkD^bo{^s$<7DPoB*`VOA69UA;mpk}J^Xy`99BwC=cYCRA*oK;rl)(6Q9? z$;E+Iy58n6H0dIB-9ThP6;b`VK%-{!!CpjmZoj76+O>{|^(_r|DI6M@4z=r>9@E?z z`N0-VYM6z1Qe=+3-5V5cNLTajTHVB19r=rydBQ9uhHxK735XG8o)fOn!4}HI(}uCD zlRRQEkqi?-3AXMgL|6fE)Bu3(_u)*2f-L)6wxM+z7phIOvv|eH5XGledh`a_a-CQV z)J|bYNLeDKnKjeHIEVC1v{qa|t~x>7A9IqZo2TmS^V*ms8zPVmb0fpwEG0!K|JXD! z|FZxj$_SCrngS5E9h!K_OlB;guP*mGYcA4}6a?Aee=2LwaSJsG{{1XwRt7I-&5j-n z?x@gBOQ)H369n{=3*7&M!oQMR=L-Q@zNR+p9s!lDD#F~V_kH{>*o{{EVwVw@5P%Rv3;rJyXw zkN<{9&XpAU>!1nMBhkg(M}2x1K@(6Y;<%_KYK6xk?lkHot~A3Stfenc3LfGhEA9|u z{{$M(5rPF_h0;TCqcUdObM*s;{*>;VK)=NdZ+FTO*D%rZ5$ea0=f0S1D`bEJ7PvN7 zf(7ct{s1sqCo!|oT~4meR5Z0(vQFv3CIbn5qOJ30K!~6j;cSrO1pQLS!d@1^bpxvQ z%{=B?AiGIdDbL~05eM4{ne&@n=wFnJ_$WsYSG^aTs`3zQ`Oh#~Xh_1VZ2q*vCGS26 zL*84V^a`Ah2-7IpnM#Kj2~}Jgi5He*LlB5eBnn8&suUWuD60u>k9fSeTdD3o`>g2; z+Q2vzBj|%sCiPV9L?$26Bqszj8*6j1urXC|nlrT*vpH15h5LFnA4J=g zD%^z4V%0`Qcg`|~s&T2GhZL7qy-b(bad(F%7WAKUj2>cD{AUd`hm;Xv;yThF80NVQvrRp5w4_%759%Qup&eVtn+0X#cp+Omcdi zKIsF9N^q{ZVq>FD;`){G<7hi6G1Z0+hhvVx_pfg5b_gUo8-+pfCzt}{*i<_-gk+*W zsp4rmN3xNxn z-CgPusqcaAjd|@1qDs3M#9jLTh5;z&{HIK*U7VVgg=q5=Yvu9*MpmPbB|qdr_;{eE*p1CL&*lpxZdmmVr~#yoDkN6%|@VGIh@zvNTx|h7wY@Ih7Z(fR01LpqTT= zP26LPP~$>U{s3hY1+&ZmbfS6tNpLwdK@p8?4%|OXk3Ogr_f33}++mpWYF9xHcx}-WI&V@6* zjuuEa8U&*ndCdYTv!6Xp?Wgfe53-C%TL^XYDv_<&_S~X&pImWE`@N3A3i_oo=Dqg z|Aoh-c0`#e1-7$H{VcS!ThHbw;GN4 z4vHWJot?~rm%-V}SJrt#g-60YT*u8NJ%|SzQU-OJ_lUOW*V+Z_O znUY9X-lsHFEBu$4knTD4vuik2S#w$9tGI+zfZFiK)oD;SZhjt2J2hWm0oI~JSaT7e zl5>0Wy9ACG29-=eRbnCAG1AP8cG%_3GRss)tPB!%?f+xK=}>x=I!$=ET9Ja z4I^QiW|N|xbeij=;<=2F#LNK!r(@sgZfRbJx^K^?fhi{G8Wj&I+V9-@3(oTX_O4DR zGb8$ZfG=8X{6sYU7{j<|9vVEN_7yhE2?P(I^}U9^l?V1jAbNBP?**sV*9K7O14hp> z@S4|n2WU()VDW-@@16a^xmETd0C<&sb#P4;mCXCoDv(xo8Oy_gPtCs=Q~|H{Ls|C-sW@`O@>kU`Ju za?f1ufj9apNXrDQj{XM!;r%!xsKYTP)x-x7-6UWlnwwM|La1<<7E>|wSpR$Oe8wMw zD;2sM=?|f^JMUqFh_2D;X!^8>mz#7*vWT8mH;PKc(Jp06eaIW(c%pG2r}A-dQgeHN zI|?0zf|{n~oW{B!S555^@JH%m5U&b7R7b z4>4w(uMKm1fVB8F3?!r4ZZdOaPjLIhTg5fHr5HoD*aGe!K-QQi5(*d{igj4(^*EAN zjSl)D&mMcXZ=OPWyxqUQOv8rIQ0BwA`T-9*c_8RKB10V|YT4va&unH$AgWFwY>zgi z3LHCt9bEWkpTsKQ?|m+P$`29Gu$ULU0rLEr!6;WB>T7(--}7>wUvJg@mCT!mievgQ z@M)YUTVs|!*|r^zZ+P*@K3~3uKMeQgs|GM(Bb*aJ{|&aq!`DxM>^P&Q#FSDUWN%%_^+1x3ja6dD2W=FN3N4nutLJmJs&=5lBC$n(yW02?KxKuH5*6#R zMWC@vhzv(OA8xjN3G3-x?rI9UMf3m%qv1pJ&08QIE+wI zS8uU?(7r$CkOYxl_>kmpZWq&ec>RFC&ER|;zunpg?rPp}lt+Trzk&UMj~9ra%cca5 zKW|TX*8osb?g$G{n5M<^tn92-ap7Lha-GyOhV`sIxu7^B*J**zTJx4n@y7CoskWVv zn3_@d#(#N2SRT9~5Sji2)H(q+AJvUt?;vD&W0UMs&g>;d1Nwi34trb%);7C`qhbbl zlJhBz{%`_oiUT*hB9;x26aCvNo9=I)8B*d$;g8r-0bRE}_a*3Y0R)o#OR9gq-J!ed zJX^QI0KkWTnxh*vlnV_-rW$f;Qmh|_Hv#v^G3s|-`kt}gwxeb0VWbQ!0{?9X3*}q@u*84KgI&tG(=3 zK8Wo2SK;VI_C`vg>R-<&F_|rGu5f%vXN`kXHCXxNjAI@xz2<3*-Ll5xI)r9*i0g&*>$|!7QZErPX*an9$R1tlnu%~i zCMB0oekiii^6N>|A#l&>g7iQN2^_Uq2T@qQJ2n)30fM?{#yUGewG6bDH~_1O-H!X9 zi}SOOD7tpYR71))(mQ?T_=!8GP!5XF`U!_uN>uJbw`^5X2aB`OCx1in}MM_j^npx#pAirYc;Gst$t_{-POr`h_Z4_tRo45L5=hi%Y zCvWuer^MV#Eq*M#l(3)#GMN$@q_Eb+V~NwER^2qsY+cTFj4&6+Z~Skw5wb zqT5fX-@R`^HWmH~4y%6)J)Z3EBOs<|vcY_9Ts@JmSeZ)#fI1AhyHLPvJQ(oZudWt~z5{fv7yGSn=z@F+pa#q|-YA4(lWqkQ4A;{b)+ zc|K#)Dj)ScEUOmL;04NC68MUKg_$s5_!G`UTxZnrL>-mZ>0`uBjP?RHlebXnB^1nt z(QwRJL2*>UjE?AYXz zz+o7^q>`OlLy0{h(6ls;<~iHxF;=kBPWgHb9D0SB^nYq;ETl5W+F_d*YdgkuJxm!a zJD%M2Y6Audsi=+WR|HTY{R=voA0|2@zdRchbLP6t8>Q}sB{1s=OI%Z# zT-5Or=UooAKdOHe^Y;6VksY6(Ntug;qH4l8xd*pyCZr>`OVAQ^7s80MS>ON$#a(|Jn5Dd+VD-h;YE}2}(fa49Mk;Q2Sv)3Y&t3q*?q; zz2Wg}L$-&MhWC7*@v!;b$OrysjBeN}& zY$w>>46Am`e3rCSBWcum7`egJG`UUUzBQ{*==a&sbh8)% zHTFG0GWDGaS$SvRYZ`^RZ&yF8HXb7}1A9b?rLH@%<~^3*RJocmKm_?RKfg_Z=j3E| z`#9-v^%UXb_G@M-LX&>8alYk~)hONvH6jty0}(DFhpe{mxX zhcCi>#HmMlX}iZ)u9Xac-rX~bT^~%fdb>-ijs#sQ7@HF7v21}_R;#zzDm`aIUS7}W z$&jxp4;#ONiU&a=yN7m4mO)GYGprGaSmxrHTkDwRH;v@?*x5w|i#pQ-@hzatel+wAu^ZSOJg-CmxfLoFC_ zYP(uT3mEmN>kTrFZD=@O@SV*7rQ1aGtSCyiMhTu~kiYw>XX_bZzdIT*j0;E1I3|M( z-H|d);y0wS_aX%q+aJw$4m<562sCEjt`q7SM@}>+JSn zcEs_lB7SLuaML9*0*RQ(5P}VkDXm!84{omM1&AFTb7CnGoFD@jl#M}g1{gzo1`!Wa zW#nEB>?KwB1sNZ_dK<&G1fn$7+MrM?9tu=M` z(BHZ^YQB4HdHCBw%TOF4aLT=$2kEaEyq7<)%ZtTr^! z_2NS4doaQHEs%lP$xA=~d0ibMzW|!h{bZP_k(##P8)Eq>c@1ROC734XOwQF~f~_{? zI$yZVY3LYKdad+43L+kPsA6Nzhga_PbxR&C6qhh8SL^7JQ=54cQq&esMwW~>v%RJk zJnQ*-c5Fb^sHI9*)B?u=y*Oy1X7(gDk>SE)T=GWL2F=b5*upr3y~D7`&qo4&&z{7Q zjF~S3TYR#NOLLM!Y#XnVflghluZTobBV|E(Fl)QU@PPh)yU>1Ml=*~M1{kXar*49$ zr7bl&&m6&7O~8Dhh2w*W;bl{KV8eL<|0MY@Zsd>fUvA|N{z`VqDRiVfx!Ptg3F}cN zP`ac{$Al6<2L->L%L9zq&@{{HP1g7tlPN$tE&&9wm&dHO8-}>$2HcM;q{SjDeZU0g zAJeQaRBgDD^J5`9dMZNaxTrph@aDGRb3~vtlHG#6!AB*Ahz_00J#gK%jfRQ3U$EO# zt=dBL`#_jc8IkM^goMQP+CSmTYgJ8*)@(4{0-}4r52w^sFD6;1odLj~g&>2N7{_9w z^@(oY&18@D;||-gB=&O=Z1-VjIfq7kl%aEwShe7yY#F{s`7Bec=n0d3>hx0JgL+m> zcI$1k2Mg(-y0w(>ZZEAwPE zjgOGr4c%9y@iJpLzI$A^>7}dKayIszcL4NH3Pwwh&PuEAe4flX0KVOw&Y>0d{AV_H zioQQnRuMU38|yI08JSeM9F86;jRqK%DUC{%{~o^_^3$ z{tOmzuTIusL~$TbO0uGG+cbd5EIW=kw}N;QD4(LEy??;cLR=34 zj;{vM`X+kY8hFde4VwuZL$SHkbWIptMEv0B$Xd7};sN!bYj2#JU*?NOl*e%3$Veh) zkDl^H2!s>_Ly%3re+;nrxv@aWl_C`FjD=b#JJ?$AbYV$;wwXGud}*E_7ppsoqXVoD z;2nC~tn+&@`N7+Evq^||Slyhrm4SIU4h5*;o6l1Dd5+qsRrUc9#j-;w6gJM_`tWT#|1LRd2uLsk0+k}%4 zrH4?&;Lo(6NRo7+;Rd4J6EWCwu<=ufsspK>VFhKwcZ+OHHoUDWgH(Ov+!T-_6EbH^ z$-_HCXmilDC+%T|V^iTGkh&}B1;Ml?e{a+Qq#Gnb>Usk2L0dcd-A(w+_Gc%-4V}=0 zdaakw3AoJAMdW;* zmQiZ!85KZ=Z>#@-l702=KsR3^=2^AmvU!2agHT)ui#1H+4bjh#;4iDmQVf#U87*#{ z$KwD?w2ueFey9+O&CIZ7$b{piud%WwjgE#B=?6s@2scLPEA{-rwwlj|Tk~6G5?sSWEqbJ5yXIk{&DIv6xK=ml~%;4wulV5=)1K_>0*QR<6;poiT zAECN`b7&}m7p;TB;8ng69KSjsCop5b7V3aN%GFZy=--cDum1{r$uIv{H)z$KlGHPw$7Jpp{s>pN*KCe)#v(7dZc$jbWs9T;-=jFt?2y3d0Li#Jv?dz!=7H>S>}0)~ zGH;O28ZRkh1_Sp4CEQZhhtI;_MDmoMfif;Rkk4^nQEe)C8Xga#a1CnZfD*?q_L(j8 zwG*P%aCx)d&yzXr<;TCZmKPSAv`$K~cNvQBKX42Dr5Adb8{wgUM73(JTb%)%iG5S%4=G#Td9v*C-^VMMZF zcI6ANgbO6mL1F(!dT`NWeLf{@iMNQ$*kx{Tt};l7Xl+q4ei(`^U17T1s88RCl z{F}IY+ehVab=EM*5bJ)Yrb)`&f>IS{5(dS2Gaf$LOw2Gla8BU|lTsNc9`jdO^a2|) zdLI>rCu7|yU5aBcKatO&yQnj9@n!3=Z*(Xub6V+7s>|gqYDD5fNyr|=XLrasz9{ng zv(!z(#v8{7taq?feOPbpyT9_{qN)gJCs+6@T3gh9DtDu-^{FFi#5xLVyO=31Bxl zx&%;!b9S}LGX&}UN~~&9x|D1);MS0!CS2RZs+j3+_$!V}YRDaRBE{Ee&x|o|LuIY> zM#NI}y4>68TPlJq5BWJ~%fV!o$=(x|uoJlnb*Zi#R?#`R4L47l%842zM1o1 zH}YR~4i3KB*R~H_pwYmv(I|I%oc-)b`b}I?{LF@A9;|OMK}o|w6XNHdXk#*g5hb4! zP7xz(WFG@A_cQ2>Z9Y79utxr5I-En=0!CSudSBg^UG5Ft2~Kx5jKvx*%xw~aH@X_e zv7__ZT$tC)o4&>)%YR!|1M!{0xRwb6@{};Nw0Qxga>o=B+o<3&DA2AkHS-ZPgv)zXZ@81{)jx@$f5mF+ZOmFc}Qto)> zlfJ?5jihvMv-0uD>u3@M9yRuR%2P@ni6LkpsU`~ZhKL_(n7y52K;_pVM+nKzD%fVl zjM#(u;)uyAm{77_m2WJrUB2+MD7t3`0fdqA0)E2zq#blM*KDP>)~o}|1r4jiMG7Ek zXt?Fq>)EV*B-0Z0hI)QAV>~9h3Nz=6uV62^gJ6O%pBP5z^b|u_nqay38(3<3v-#eg zv7VVxNvtdcY@_Dz9T2+zMFxto3S^y~!mHFB+73rjaD5CjCxs_?<8Il=k)E^{m+Jyd zV5Z@*0OtS1o|!rUJy^Ksg6It4vE6BJ+`{F{rb{BD0)~K}|CfP{~$a6V$hz*$DNKaE)-$FrfhYleD3!h zQj0aS98O@dEO=L`SfyW)*Tzmr)Tr1@FIp#Y&Oy19O|>9-kAN`cs$spB6g2T=^qmZ1 zLOV_i@@i-LL)@kpXxb);1DsjAQd#%i03J>Fbz$BJrL3&xdKbiW-nWJ6Us~`qniJL* zoH3ns+bqA?EN9r5WBD2qMmYrreoRhApV-t5^!4;bslKBPj%@vSddA&rykl)0 zZ=3u6@aIEh{T3DB{iikOhZb*b?$ne%ao+3u^>LlyV<89?KXa^N=SFF0pa2J>Jbv=L zeCgxze5v^OzI|EO*=Vg92%-A#(lMifD>1J%V~2kMQDgisSf`0c zEmPMql~?_$t;-BU|7g|>sQ;)mp%Eev(l*0XbT`B55QON7E5^(+c}QobfPYG@p9}@V zc;~&};+A?!76^sa@6sDFtfWB2*9)<{Hk2K#+c(o%bV*>uX=u!evc?I0gE1D-oj8&z zhkIxM4&E3FB*ScSeIaEc3Wy%gBwxl8gPqt=ayS$^9rQkXlI-9n?X;xPivFiL9kmNK z%T2Q)42P_*+1zSiEhmau?jZK|>op>HM~A3W9`9V73dEq%(!ht_1dP}@eN&<3nX%D4 zI*OAmqPP%Dj)=80D>n-`{vC^f@3*T;E19AwJXS#WbmIZAIR00?Z=j~Az8KG*x_M)h zMw*wd!82JJjW2F8Y{x;H ztw{!-lTvqqTjLq2Yh;mgN!ORF8*M)cbFek!J1s`n^5%RHa(IZ88 z`g_R34IS#WfPtjgtbOHbk72LMf%Xdj3o`wK26#bzDw$ph2BQj2hq)q9=M8^)x0sAJ zab^!EP^oTA#H5{EAGJjHDzQ!f-L%Fk{ec9cqAI(;0s>WTMITqhgHh3vcQf!8~h05qdqQ zkMVVi>sA>rh44Bet*k_rj{n6~e>yU&wMzaFEy4-`O)5F%hb5*3)2lLhzdjX~kWA`% zCl6p+V;!5@o0-#+jfe?}AZcIe`H|RIt(qa;JRbb9kMmAJ;aH>MScds4oKS7Y7E>~b zH?AotyEd>!lTGa9=n4C+h59($(Ra+653e1WHVSHzOo{D}bc)>SWmW2*h`!Ret`uim zZF;m^ezF2&&})YP#ieTLeG+&cHMj@-Sr-gPVZ#Sf+YzQFT}mflt@<==aUr$fI<}B&Bj2lYzFT|CU^q+r z?W+GLWtw;9)3_79zlZUPgnphlEskVy=$)xSgeDqS}GrG-O`V))s-{~BG z&cDa;Up8u&u=g#}tIMGn=RuEowD z%_f}B$j;+GsGXduxD(HC4bMC4xjJt1YzB5fIUJ9b<9E3tTx$YWt ziJvV$Eedu8CB!s+?T5$*aH#u&>jtWcpNs)&IMIln-ef{F3Ce62$1qE%hE3H2fB*3J z&5X>*;nDpid-y0vhKZn`W9z5da)y?16tMw;Tf7onxIb{cBhX+91bxk?k_$nS{e-s* z1z{U&W9}Co)robqnSsXi*&8rc6FzLu(G7F+EPqSQ)sjd5tRvSwOS=5QUxy<%OGcmW zTWhSgdVqCt7QY0|#SXo#7<+T$vY7f$n}4u^p!)vjIw3Lv0uashXN(Y?-eMl=Z{i z`EjeiGU~~I*}K>>{AX9LWH8d&OGF2s*{LysHnId{21iid;}}N}INa_Q>#p%-NkYuybZ!G%r;M$#h;&epTRmNc&_n7a0oHa<8KD?nSE~rfc71G_o0(; zl`@0Q`OXx@k{Y3X1#R+SPSi)b`=H&!2Clww|Ehv z2qPHj3LBoCA^zL){I&PqS1ZnmQHd8`p4^E5KllViX+e9A2-_c5{Q_}ba9EJ)eSz}b z+6QSFwcID!M`EK!&@DRrAoS-K=$wd##zv@okYaNhGv-!I3{G=&qYTCcg zYA_|v3C8`;HfjK4dy<$;SaK3JDV{?s$z7DA%3-8ei+iL|kf zbX+Da9#^-k3Rtf|)fVFw1X(%Q2hRk_w>L+p3a!$6a&bXhgQ#4eA#!(=xVROyO zx{&&`h4qb*VmW5&5N=ercz2t!1NX>9tnXAutJ7@9uH>|0T$NzO9mM$bKd1jA=^O(h zZ{IeYJ=wNx+cq{En~lx3YqD$8W^T4^+uU4R`_A+Jzt5MMn)%(=eVylVkYSPTPxy(8 zO2EoP@BLbcV>G!S+ln?JK%*1=jhW+sqc=0OeVU}7dQd2Jy&Wk7 z>@ht_SL_I~>QcqRjX$h0Cyn;Q$<2y5h%Qv=qAzsk8FP7xrV|cY!8N7tT@(58b%j=1 zb)fhY0x9kql1U(}s5|y|V?iMtNz`NHSpiecZl<|Qm?$<}b8J6c!4+T%M1Y4~Jt{R6 zH#mBnVgsu~`h~Dy)LriWK}EVp>=0Poo5&|ILXaQ~V^1Dn>6G*X$bl3awsA(Q{}!!_ zMiZhje{5Y?U`fc3EIj$%;XGA#$CPuJ?)`7VCGz?<&<2lh=VnoG@aOcdV8Huw+IF(+{8mo=)oDuVD!b;D+ z;EeW+5c5e7!KT?gp|vH{X>CHFnj+6+@AlTf==Z;PGZMbYS2$Qs@+u5x)s&DF29k^bzP06P^V_xUL=4u6j`!nc~^ zF|8je7gIVs>^le4$d@rIN_J;M!MijiYku9rDCej>Z7VhN=n0|e?~(!9&*$5M-9S!Y z%Iqh8Q`S>Y-^3KY+u8n;JE5uW-QxhiIn+JTY$OeLxfR@?g;gE@dL@q=h})-)q)dlLX<5hD4ObBsegDjx60)2Z%{B> z3d=Li(}gi97BqBiwoq>I&%&)XEqV-~H9sz)RvocuXg zM|>;hkI|H94~?5vNIH0 zyvpRwWFbnIVfhpKc2X2~oWr6Z%F~<{*lMAT8yJZl)EQ_a%;j3b1K&vJlW>bLqd-*( z=S4^z0XqZWs8Ji~(q3m*y$i_Ee9DJ2=oCC@kbbmsK9u*`E<(8cej8n zA|wNaq~Xh>$vV0GK<)4NtysS}V3Zrnw+t=dK82GLBYw`HiW%(bS?#(m9WS^I{-Vg> zTKmUTv8_Z!3+_B;MPNdQ-08Xpo=xRhlU5;QN4g%u_QE-Z=S&V!SM`OG{t4*7fFI1N zgzxj+dL6BY7MaG;g(-LjB32#-hYY<^cLZilrs?O4v(-4{e}B0BMbw-gZd?_)n|0?J z*3e{YFa^jYk%DMCVpDF+1kR*+VxK7!O+2whxHG01#rX525;7{64fBch(pzdGR^Bqn z=*0dZii7Bh!rGKp%&l`p@7-K&%259WP!1c3v|7lZF#bK;L>x+C%@YH}CY3J#R?~DV z1r*(O&E{MB;MlsJ=0!A-DhZS;A#^6vNQ2?bZp*J$hn}Z4c6#uKcoy#b>6Y#(a!uCh zb2vpQu#Ie_q=~t=HKUaIk-b@w@Ha8FBaEfnzX(bjUdBq#y2u>ZR-vC84x8| zo=FcUn}u5qhf%LhY_N@Tdo~%1`lwm?3_W=#!`r)3$1TqjP5KTC7hn-`3OGMG zC1VAc&TP=;4}Z1jI#v7Mdl2;G3Z|y-3B8ih?IX_z4#LL5Tf&b_`Q8h#kR@Jw#8TW9 zbuhHLPy@_3Ic$-9aVQ?jrnE_?9-u}l&#~X-foP?OXQuk-Oz88(IV`=+%>jHN*ln3o z!Qu;5pGl7U5+eDxj=e2W~ zdEApJqNssh<=s6;imq>@y03957&dO^KxD*vM#L7cpESC z&!qU%+_A@_wyXkn_P~KC&$b7Yb?=$zDOBvIX`n>KI+i)1@z~4DcJgjl<=##6!~H2? z;r6t!!hTjH@2$ew>5tfeRgYu+`&XegO~ir_YumiQ`k9%(9d<1ITW&oDmm4CrJXc@P zCwX=c=63t3AB?pRC@XIpe!n(ikzaCIR__r7%Xkjg=mmVdQYFo}y=&Od6-2+cc8_w= zZ-6(~BvIUnVdQi7?fe!2^{*m(spZ5oHWcb<$3HWa~eEW=uk&Nzy697HYT1R3 zCF3+n_A`@G^F`1tmNkP&ZOXCpk@l%ojkMfL#W09|LcOmMT&NHD8U_b-&3E6OnSyCw z66tOe&pPYEs(Fs~CTw%r`0|g#kiZq>!Ia&cN`ynxUP6U^S*a3%6_$>-wxxt*g=~>q zb=p9w?+j)e7Y=v2md>WP#Y{|mx0QmFJJMuKs)U_$+UDAPlT)udoC1gq?VDG@I|r)b zMg$+S{|S%P>-3|$ z<{dxbhu=-D#h>(a*O@(qxRc|*ev1%}vUb{mvvz&scmQhliwmnO`B7Ac^fa7nv~|Vp z%fSr5#dr1djB{_g2)SB>HH)(SCfZOuF}U7X$hQYuP8HSr9Hvjwm$%5&G;psSH&2f? zBvX23z8>N)hQPglvR&)bPOEtOXBiwxB`u5SPFtrKLr|Ezu{&6U#^k9n4_Re>ett@? zJO#R38MfmBrKm!~fm$5npY)wnW{`_LZ=Ew$u&T~a?&VHwy zJwJXB03GE!ksd1|c2u%>2Q^OycO7>EfBbu&zRpSfFYJ$T9ilw2ORQ<;##t^3 z#I4?3nGEw-{0_K-Lzk=$W#2fee0k4&j4Id^KuU*2#3?Bat%uTbLb>J}tHUS980A*l zXGp0;kAvV2pNIG9vJSaS$9q?#TNnBC6?z_dyv5GgBxKfH=3(^4$_wr1fkSTA@0Yud zj#@{`%8sIa%S^v);^&m$0-F9NEe2V%G1C#{vTBWCm1X(lodA~uY(*FYUFUhcdJ9#I z-{HKh@lo|sB1m&5q#GZSWP%|X$=i#}>IveKRG2`mB4v|8q|;n;d0M-UEmhLolte!V ziYvAe2{587Sr@B%80trdvzOE5Z&Rw3UZxqA-3Ut~X$= zZKi~818R;QE*`);A(q8T#+1&DsDkJQR*IsDItl%0yi<$%5<$;;@=s3wcqfx?| zTl1DB>pb%*P^GO_wRK*vr-ga+xnhf-?!()NenPuH8u-h#UT&NU+2s<`je15DU0V2l zV)!is_ZCOn8q0{{a~o_Dj!Rzc=s}_c71|Y7xCw8Ld-z!tT;UjkVePWYh><;e+(Wio zHSQ5GLn`oOE~dXs!+opigt$p9eG+xSmQIJ{*ls{?t=9jy?GLDr8Y!AqaWc6p-1{C9 z$n`_g{?l%E&z#R`iaZB9ml&+=vQcvW=T3%rbHD4I-I?Ttvc+WQR{>95;8wuDw9iye z0#t4||G(c~YyX&`L>WSC8$gSguUObkT9%Q;A!s1sY%XYA6dS_g@{FQ;VsA*M$*>t0 zh(F~q(bLt#!zZFCjIu#SHb4(SVWwd~F3k}EE?rN;KO7Sr$(}T1ALDh?=!CF1d9S1R zV^L8I;TpKPlK~j}M0REY)2)%kBR7c?liTKLbVwC@Ix$rINm0+7eUkiajz3I=DbJAA zD|K{RtBlHftSzG*6(oPJu8ef;zH)t=AU83*ludD5o-S%Wlwj=M23^`(;oTOgRR8h) zy+o2KvIkvQH~H_YSL?z3es8u4GL@5*20(p22|!i}!XQX=J7Ay`8=7G=C(ikcoT_hCc%p1JZst=^{5|G)Fh6$4pFt(w;tYP!=S*5m6io3b^&E$LTswp zQPhWFU#Wx|N^a(_DaM|)&x9FN9*Vq_TPs(@#O{(}K zc9Z;BL((6T;?H$J_&FA@8pVyHfE6gb6Wn27X7hD?`CEmAaCNm7B_la&`J3)Yh+_P{ z&RYv@#s$;K=qAsIDJTQicXZA1YxKvzY%7MAN$d~&ht_m1E7|hl00em_b4|oW+xv`p zC&{nlI?%AHLoz z@1y5wACSrgHFLo|%d>jw8h~2NIK)1H4BEJBZu1W1@9yyv8Iqt_7ESYcw}(r2_|jR! ze|xKPnWZYn?g=`1qM-3AyTgH1yu$)A2_4I9%ji`@VSU_9JE z)%JAwMHak@h3tczH1-^48im$FVPr9`&st2x?r6nq_0dy5=$R(K4(THLuM%(Ph2lut zxr@7HAR~hO0M4Cp4UJw}QJp)n?C?@YGm}Ijw zSP~?wlAs+pAvH}BZQ0RrIWS;fnw#Z}tx(gh)hZ|k2Im6F_WIrW(qefe{t=uy>Xx$+ ziR-Bg#V?(TjlwZ48s;YNKCPS@t3%r< z4=imZMo-B%TLbdQwAhnOnB&hu5Iy`HvGVSNTJ}CAV>p2O@kj6#bEKTrK#ckyLPA1d z_&uX&IrxO3>7OEfD6Pb-m}^DWc|OPK5-dk(?suckN3)kW#Tuu@lO)X#j|nYBNKh5w z!GxPN$ba9!6=BpimoE}+XyEWp&VsN<0uIo#kY*i#n|?@K2ShGntjw3bcqnY@v%xQ1 zfGZOEpp$J&KM!9|I)ugg-C8TU;igW!%0|w=YFi)}L_Cfq?85VH=(`OPKK?TmPTwaB zn^e*P71g`z;Q~|F6y_~^f8RF3Z%g~)$d^UoO8TklAWN~A_S2IQ zNSZMA4ln{u^M-*uZF(}toSR0ojd-c#Q{Iy&J)f)uW=)hPc>xRj!dxa-D{-8%cn?G8 z7rR(2dT&z?Y$FkwA`%kP_y*gs#pENwJ(pODrm-fa17AQn{wa^=&n2=h06jZ|*D$(F z)>aO$^k52;>>u>I7n;6BxZH?7PMGm|71KwI!mRODtcZs8AUNv7rU8Gq{xagjD0NwWU@%S6mj0YA(nzk7%1~Tj|cITzkZA>1P|md{Daw zN|=+iGfYPSyS&)s=R^x0d#hLsU0j~+U&qgyMsh2-c9Kwv!XVblOKjgg`|;BRxijje8f{bWRp8z3x{3d}!#1svBJJ9&r{zPjF4rDqyyCxl7ZjdQp|3Jj+EA zs&JvB1&@rG1Plurz74A%4aITu^5OUs<1#pGmrsr!ZT^0#YcJc8Q+_Aw{JOoXSY|cY z`OwULL}*K44%Q+rj^*l5+>}RT4H?D9;=Lz7wL@#6EEeW!<3@bb?k+zOYS9%erN6x6 zNWK+TJaH9ra9z@zBfBFMQX00U zErjBZGxs;i=#GRjN8L5ypoAO55~VtXsj)+I19%y5w=n za5Q_(2i=&LHm#@1ViE8Iy+!DvsgUA2S%IRS%&*PIVvB!zg16fW&7N&b1MnyOb=_NH zR)#M&-(Hb=v&3AJJgr2WTWB%bgLqSM2+J&s z(1N$eox0yhmUJd8S3D1t>2k#C{xEaoZ75f+mMs+>U^;iOx2&5w&k`wstGBBRDMXFa z>-qshJWZ1TFNiW%2>pf0uK=fpC2F}b>ow3~wUfZ?P39AK3k9T+vNz5k0It=v!V@6T z20u}(2}}Cuvo^_j^8Mn{d=heWouflz0TJh?ZuAC(%mHM_pfHRtcMW#WvABI|U?wldRFez*zkh4|M zcBNB;2gLlXKpdSLsMlqDKWYps%yhDIvX{d|2gME7d?AUlok&sg|ERh|i$EJ+1exj9 zS?_>Y(v7t*yG`G^l{vgA6{-;8^1hKSDrM=Ok+g_B_)B> z(Z{4nJXOIx6jThCw0$ySchO;2BFhBDL;4P7;cfbSY?|43sQqKI_1#~x>IHfA`(Cza z;uS%rkB;sl6&fE`}N!N9;E$K>nbI;=hMy%#MwwI{d8Q;GGRKA4z!MS0fkc1a2S{m%-a zEasya6e(OjPX)Y(Qdr;9^0q*hqiXsET-BVnt~Q}=Kci)9hhD5O?LOg~ja^W|BA6;q z2}n@y^`XoiX>AGH)Lfj^AmB_qff;NtGLO5$dUC^}*%_`I>}PXtum<368Cv@!{NAyp z^_*%Q8R~1V>l5c<9SpLj*OJQMU;zzwHI;K)|P)%LvC(V)g90>OoK4%>%ZR7 zr`;@32&Z7bGlCa`=-}n8PO{t&{F%r@7!cXvh5kXw$QA?9!=7jD=ARGsND&oKFf9J= zN&_8z8#i(KAY2sT8nRC;*QlET{Wjv@JOmMUQM(|j>2?~9IUKD%A9L5j7%`m;+!*sp z=e)=?MM)Nzw#kQNA6dLE9NTP+YLa8CDiu-|M>GR@yr zD`xJQGSY$^=D%yN3iDP4k-lF0xH%TzJk9{hlhP|_p5aF^N$qA4)k32-!7)UO)$>MBeH>K z!WH26+)4I&Vf!9X`lV>h_12N70*~~JZ|Bb-KOWi`^C@&%-`@AqM{ihTAZ{(l<;+?1 znod#ECIECkfkPq;>c_E4FWN!_Cz7Ds+hZ&hhC~Pz{ZaJhDxZOHNefNtfxyYitz%`O zBK3WgtWbfu+_}(DqT&X9&Jq#Ku^}Tl!`t**D?dW4s=a5}FY7mdQ{%dk69`jrQvb=3 zWEQheI9vv%=&^FNN`+w6m88zNWZF4K-f)W8clg-Bl?Ge=H)4+3GC-Ls`8$T5=n$w> z&DSVsq2HFYb`-O*v=tB#uL1Mwj1fs!Yn8r&`DHJa;4X_$@8sw_dYlmIy#9SL6=3iL z<;d>QQayq6P&`K~>P;4lRc`K<2#w?kPnF{0Fiy!agbSB=1{>8Qp(rtA3D@Bc)Qj@L zGPCf(puiKfLKTHUM$1Hh12VG~Z00ciZT*nnrSySVES>xJ1t&hGNqpb-|SN#m`#~_+)6slX=&Bf%C{&)Z&F`*)x z^a&JT4HwUB@@MswtYUM`eX_m+$BP$7}PhNFPg%9H+CUiqy&xl zNL`Y>v(fwmHeULj^>|;xl(W7+K&q%<%}WNQ8E_?vIdXtn|N6AOdVQDzp5MSz76+q* zA+gQB!o8SaS^gN)D|I>OsF#(T1<*N_`^?Vh8o?k^92}HfW4$EQwb5yWvmA>Cr5Iv* zNjj11#{D;ZKYX%_SU*xx=>-Cg9I+Tg^$VOCuCZI=&I(M!WLjC+*-!jGr?Bgr#Lc7# zgCAbEwR2iZTx}7d9J9NE=q#e#a;d$s*ELwN46%eWEp7f&Xlvm9%8a~)?{S{*RqRc) zZ3FV;AZL$ZFPTSr>UK3$PfN<`ld6x^zh*e7U$4BIBm|5}B-=$vl3+Mb9zc2gOmud&jAj)UBd5Bn0r#XHfCrR7SI#iug@9EiD zlQ^1H%=KJC(%*bY>uvyaY*Uo_z2LT#63}jL4Y?s;F69 z!ikHqmUE{)F^gPLlW$POu83brG)!@o=hHJAE&1x6_aghC7be{Ige3;x-nVw zi>#WVD1Rrfh>-?Oa8=83@r&#M1MZpqh;*Yh{`xuBqzd1DDktIQO%$TIwbBq6&o3<^ z4R_sf4YPdL_h-ZU2HIg8wy0PZ2$2oau!Ws#)Mv#XeJl5rftrQGBb!$JM#PJ;kr^~t z^@}zg){?#~XfSEe8MofVB0V0^$j2CrEC-{`c0i;BF)Rq%MNAPEL`_H**|tbMc`eS% z3XxrOh?r^3B!if1!h}*2PbU}g6k1-XD>`n0q#6o`bv_n`q*?;!@xnJk#x&*vxekWl z=xPe>tHJpF-AWR)(C@~LSQUnX=^d7Y5Hg4}*@(h>)Q(j8iL&!wJtc=__&Gk?{O5`1 zF?}_K22WNE2LZ53caNOAoJf!MZwuQKj$VD;28i^i(WbSEY>;Aj+U5X~ItsX*Xpt zGh&}0f%^GK=NcYdsip~#9?({~|6g=K8KAV-{#VS7jtq)3R&+&avp>X*U=Di!$j^Nm zl$ZNNHLKH;g-3cxXCsbt#|dwi6y#?j_G^fDxpN3EbfWF)ZYp~>l*?zy$u5^bEv@9M z0(ql+zq#27|NB~RES$$aKO|?}tzE!I+V_$@8K0pR$tWj|{&BPwJT~l5Fwdd_n$u16 zO>s`2+~fc2k42R4ycsp_aCMG-*MvtwY8G}KaD$|7`linW^ zRJ`eUB8v*=bcPyWp1cJ%3) z##zqVuhdc>_?x57xfmjX4COM&n_uN&a+@f64Gx2YL(Og@js;sR;3UVenBGkaY9Boc zk{Z9hB9)!|dRj#7^RF;a1SqQAK2htd^&&giBADQU-4PN}@{)~%H3bC|`t)wH*-3J^ z%eIC6xMX+u5$G*i_jNsCa9*8+!8RhqJQPYX63=*b9)wML{1#Ml>U}AzpN>8O0f!4d zNEG(F^H|*>g|K3cFg51K@(F0AYGK@VA|lN1Yrl=-oQK}@uWZ-(vG9uBi*%lGz8`|u zMrBIBudiCRw}+CKM@pFM(iif%$0k=^J%df2s&r1G*A5YK-323-r0wn?Rn_n(&bQb5 zRPXzARhAy~rU>|ryu@b}{>fn#k?{hn zh7ZpVIhr?`zq|m>shhw%n0Gmt#9d*LfEbayPKSUAcCmJ-0`NI6M&##sVQc;rvYL%0sd*JWOq%-^8BDDv+tY^fS~iQrr7R07L0LC#B${UmlhYbC51Qjg%JjW!5K?0Cum7_W3E2WxA0TqCzyHy?(ei>|pye zOw?d{D`n6s`snmjDWLtw{@O^Da#K`Jck_m9gAV!K8y+D?<5C0yEXKucn>E0@iHd@3 z$1o^RTYq(%+crR1PO}Dn>ijI|8xJNt6L=!iwGZjK)IVtJvY=;KdvQ~DNigK#ofcH{Q>OS%`q|k4(7U@m++V!--nzaQE-o%W4^v5_+HR6z zGXKlc?td>JCn-sM{WV3)t{0FCGy0F;++e5e0pN{@$baI^iJdFsn`-*4uRBCID;MYw zk;%OOa+V3yMY$?;Rt!+pYTdAU5!HQZITUAO|4v{_hky%<(Jt`@q^IX+wCu556y)>v zX#)cK6;2&t4R5^8(&n35yHv0%H+8EMVr#zOCXttNikb8JwA&m8BDTUe-KVl{he3QH znJdjmg@djJ9!$GU2ZCy&PL+c*_F)j|s?DyC$hbHw+VI5F8QSkgCvOK2-tqIDD5E{?6TuEK?4VxHVSbJzZZC_8crR1W z8ORWuyRU#05wBA6#ydwuXM8Wh*2>gv#`|1 zs625!L=D6+oYRDc-YLnn3`tLl6$IF|ddd<&8z$nxBMkOzMfv_pSA#2=zIXSVlBab9 z78y4BdE?ps5f(Dp;&Dhc)iYXW81zcVsFo#M4}Ous=+N)oQvV@8+Ztvo!N${vi~&>e zJWOO&tt4BM5Id}FeBy^WoCodJ1A0IqwH0||wv9@YHL_L|*$|+gBPX9FjvFdjq6ya-}_LP}8 z9h1~z@yQ86>4a!33(H(`5Q6N4SV27K+7h`$j&*s4QI0&X$rF+H$KI|#*VR4RBkE9X=+ z`{{Fsh0==5!0m^eZ~bdfBjp|mEx8Tel_&v%ArGwFNN&Rl{@4LZaymz5J!JYq;=A!KShjvp0Au{qEKwc;VrW#|W~@V9c$!%htk6 z%qcFq)=*wDPy;+T9xRA?OL@?z1}kE!75pW+%Tk^s{41%FM2P9>L0RGR)fSLr+)%U* z1KKlv4PD(|Q-JpasgpMFwpx6o&BsvZsH`=Z*J-uOnD_d)XV1Vjz$*{*tqd2jS5O$h zE;K|NgoI5$2%DH<4~1t_Z|)gXAB11o1Ms2U81p4f6^2;ri~oKKKjz0A757?C;k42Y z06o>Nc$eBLH?g^vN6U*A06DnPt@Q~#g!X8@pT0@_;343>(;f9wSDF@C5pjMZ-?CMS z@^SGEo+H#hV8vj+%6$*5Y&On%bg0cAn8){}@G{3+YNTU`MQ5j;m^_cGxBc3(_=9;a zo)UH-SJC|JoBS;htAZeSz9op2J&iP>py@w42jw0bW?=`&<}#u1MSN@yTqxIoDv~zX zWKMPB>Iy4Xz*Pf57ttJJz%MwXK^l}@(Md7iWMXW(;$~>@#e06OM?Lz_SBBo`-aiD9 z1UU|k3QOc!vkglxqe-Y!LuMuh(GNtiXai>DIObC&T`VVe2MYHxnv)h9AjB5NG>D$E zVYy7MZ!vkqTa!O3+91f))=Sv-Jn4hIQsK>UxvxWa&ETFHk*uTvrS>(I+w+=7ya_^4 zcOIcE*|;wTx2r&A#+LttkakAh9h(k!x7YE`rWqd5j%(G;NFU$!xdikT3sda5S=VcL zn&rdm6w1?CH&l%T1W^7`VjFJ*{g6jnaZ?C%of;{)a7hm{idq~_Bq!O#xV@n37TvJhRZ+#!|BPI&CI2$=L)V;h34Q<9r~ z+P?z%tj;nknu|DkHfgvbxL!$gcx%&qO4f&Ikpe!eztrt@@mxzdZ<{YQ8ZE0fADsV6AJU#aX`XAWxP#ir(;!?}?i-??&9_{oGJF01Y8ULD zY9la=QmrP+eW>-@3FUW??imdc5-GuuxD!iqzdHV4w+@mUAQvV;+HW}Lzb#P(MuHO7 zG{`JfP`@tgc>i>$JotOpnbY569E_Wur`5YCOye1fDG{lp5$g|Gp9m8*WXs|2Hd>wq6nytd1e^9AdjU}PVjGsBcm2C zrNbE_BWH1WUq&HzE4Z~ClHBttZKbqU(RVb-H&^Ci?x9f#wN{)SdA8&)ZYdmY*DesZ ztq~S?rEJHU`M(bZQw-Cw1(x-=ZO5ATJ942`R5hW^fZFusAbrWCIOq(=&GmqkIt=zb ze_aLbjn)+5)Ic_lRRf8@kkf>F(K8H?;*?nbdIN#6e2Cw*n}GIT>p8fW@0nHWo+q*l ziregEVBm(wp7LA;^a!$dt#XxQ0OJ*c#d8sth6LHfRes9iZpHn2uKYx=>vMwSXm8Wq~~kE(^qp;>wPEM^Y`Yu zd44rlCDOMCp^#yyqe`ZOjiV+xV>QfT}evB0rXLTi0B}# zKsjxEDR)kWaq#&_;z95Q{2nfa+Wv8GKSRVg<9Y#QWWRNKl>)W{?tXYU{0;D{8!Ja<7xQgwZP^`{#=Hkh9}wm?lUk}Ur|Ow>T75yn z_e*C*#Cd^bPK)Jr#1n(#4cWhq6Jj3HEkV9BElI*5oQL zW_1!7<*Dk=_sQG7B9-lwpc}MkJB9M;+l6;_Vu4hO-x30Pfi}b(j~QeZL`$H*H)SR;R?ef|mjA#cv3!mQIoH+46b1DB5nonP|Dwuq2gXr`7_I z`HkAA4-MPL*lThqEM7tJ#9cvtaW|p8{QQWlkE}5DwO+YOlInNW-U$^qXxet#gYO*3 z!?Ay50=hVP@BgJVZOxvgQV`?-33}tEkFTEs_x$kqMeH}QV`U&8@OsF)?v|?ACm)dV zS)S-Y>g09!6J^#mh)zp^ zhJX13U~knFC>fyBKfG{-!m6imoOumHyzTJ3X>6m78I%W_D#Rs^Nhc1Z$E+Bvl1(r8 zwZK_DJP~IhWUyKK_=i*nPuq)5K`+$SrsIu%srk)Xjq_^MCrwkC%B0ncUxMu5cAA$&>Ti%Gps*y5u4c#7~FSdD#(sva>0&S`RGS(!w-$#%M|i>rlT#;m(IUfvZrHhFn1ExKt{5DxOl~(N12>xg&MkBoz<6MzsnyLG{ zLgWsMj8;TwG8vw*^$lNJuKQx{25)mh*y#QtYQAGH3Ab&Kl{BQH^&d=6bfx{>ADfx1 zz9UI3&e$Z4dT1w%U1DG_Ul0lv`|NI=x(o;gwX9YN;4;T%RjZuKbMAcsm%vzvHeU10;X7FW!YJtKG8MCXNI3;sP+ z+AgREsHUPTl-#F61@a3CbDeuu!3nGT2szJ;!S-S1mzKBU=;%FDvwUr}`hr6)^4Ad{ z;eg{2i(QR_A|DGarERc=mExpn$x(vb@YK-NsvbULXMcl*DTTwNCTTM@D+8EUv5EJ0 z1tSBj%%fk5@P_}UGY*6R3u4_y^?de&gQ{`msx1ecBe9%Vn4o`o@4|2O^E(rS*XPD+dYF*zi=u2kCW1 zRcDnfp7(z;+r69}wT$P*d&bf0zu12_(7#d7GN$`lGRZM0RH|QZaG*-2=)$9KfhD6` zvR#Y)3(jxTGZbipaadJuTW{r9$K!2j(?hd~AZdV~X1Pj)eLya+R#Fg^E*Mm`M5a>`l{?=c*-KB_0o=E*tdr zE_(5Jy~c_#o}o;ix<{rrevwi=^~=e$8;5TUF}W`@_FG0E8Fa#I6)7SsbMiT8aEA%1 z!K)X4a7}c6SGmJ&ni^z<`vlRsRrkK@E3Fe#of0{NEdx;XooTAj`Pp{siow=;Eg})k@0y5$56*lm|JKNiILkiwpt3(qV|+SH6Pcam8ZI1@ z2;|3^+(2`Xyf70URj>bp;n<#;glXpNcaicIqs4q`8_BXE2p!pO7@gn zPUv^Dt2c!DBF@El@aW0c`}4_r$+JbqV(^WU&nOH3w-k|>vhOLu{_FN#35*4_WcZ{W zn4DZJMXUHiQtwhJ>%l?srBn9HCQbPSxl;{3vzO^$S{&J+9TXyoh9+YrHL}L`H!Gcx zO}6s=fEMMLZeKmhbBSYr;-M9$*5yGaVHI1vL(VDc5O4u1FY<(0R90%{?J@-e^!l=x z7{;3?z>L(I=$|v8F#+T^{rixl+@QC9*%6=>KhvLSx|~r~Kxq3+Bp(GE@`OuCg)?A~ zV#dky*W1HfJgC{%=8jRo?vJ#{8uejxh{f-pCw#a#7U8nxE|l1~J+AM9xy%~VfqMI2S~A-k1J$!VS<20qJQ21e?)p+w!rs=djrILUl~%8 zTkaO{YpxY*Mq0GmJ^yA6_clQMwS-54x@OZo_F!s|>Fw@m;7HYgvnUD+j$Vfh$ZXoswVENz2LgV|5u&EkW35D;mUR_8qrfz_^OR?d9I>A zx4EAt`@^~(-otW0{T)ietc<_ITOH9Z@e`Jwi;6dUADHKF!pst$_gUhiuPauK!482( zZYK7P_dK}CLsr7hU7xN)&OpbXlED$lwfZ3S8OQRG^M(B|8rU43dETv!b9^Ox&o|Kc z0G)$GB{%|p3GBi9xSg~p*?ZPxbJr;`qhXV&k!+(X29)Fv-!5Y?M|=KkI*SrU3NBpL zFWs4++_ocv*XLO)9&K{W_7j|Mqoudm*uI3}vyzA&eix+Lip(_IFgG|FczXV6fTj@1 z*uUwL_SzpYX~gu4cHMq-xuPHHPHdPO&58ULy-VWU^P^zwZ|udGY-w_^ve%0cM^Iwmn7ANlU48$s z_3L#73W}z-_)-#11*wKau&j+CL@yLU%}_E#j$ZI2oUH(qWwuxLHIqYi zYto^29E@f`FcDyy!T;a$`%G7H?^MJDrm~fBsVW2a^9U^8rqG<2Vujo%hoZ8xez#k{ z(IGZvTj)5(nJW2&1WD6izh;FiEt=(cIFd29XT?4ujSR{DGNW4kxoy!%GqLyARThiQ zY!#Q*GIZ5qkN=(LtH~~SAZ@U1feR(^W^M*?>$tsEfz)Ke0vW}e}jTScq@ZPabt%#nN<(#gubDxDUQoa1d|AcU%ZxtH?&QH z+YQr5npS{x>J12*vyR^k>Sw651|+dA2eC8&CViguVjd2uuT^@VdXPv(h3Z1u{4gM@^oJ+SyOYz7A>= z(-J#I9>Oyv++VBzK46*7+?XEctK)c`gj=Di6j)j7>TX3$`R`We*ajZ=$noUu%YFu_ zb%>yyxIhWo1*dx$XF|mWXVYLn9=3u%|1J8$Tv2r3PzvLU_%+4T`-vw(I{c=C13&(U zsbm;7g1^*R^lq~N1>uoQV>_f>V-7N2D@K5**xoSxqE4%smX$%Ue7;C)@e%{f|Joj) z6h{I^%^u;DR;)^Hmvwyn}5qBMd0z1OQPnxx= z9+=%Pk1WuSN#YzV*Dz&j5aJVnF$to875q7g;tqKQ5wvc2x3a1(T(y2S7?k#1{#{`2PW5 zL7%=Mv6K)Df?>h!{crEC&25>>)?eTb%H zvHl1rEMSOecan1H)=3ABSL1GL@d%^P&5Pv8CV+-vb+vY^nj`SB%~+4&_;)*-v0lmo znFJ7(ZdU0$rGVjf(C#aBNZHJo;+c!rVw?y5ixbMxo>%M0rXW{#n_<7r>pO)Gq3STg z^RE-k5zY=}Tb#?WLELE8zQKO*=JK0rwfHinvknCx{mW>xELX{f3hI6(p1~wsAg^1B zfv^%@j?mRSr8u}aktj@$Cn}idX%l0fNJZP&{NivaO3Nq^>hRr=r0$WljfsM_FY6-np z9EZm=x+andK~2f)nr89pL<5f1Og`WgbW?mxg%)YiX}RUh&-~UF0M^6=FMx^wV_1JYKI93L%>@EycWPGm!WWislzSwu#qF$m{4P0r062Mj^=uoR$rke-uO)A zn4;snJkdch-4=E}oq0Y>6h>VND*tMqe_PRs#K5@IzynlO#Q_UWCMG7GCfr^EH+b)` z)dq>t=|Q8%&MlC$Dar%F>%)uF-t*Ozy1q6~lZ8}W`50j{xi zOF9I&dvkC7n6-4?saMHNpVwAVXR5&aYU@f3@8LJh*ddi?O*f(HBorsVswiEj__JTT zCo;nvtI1}WEb_++rx20SH5tN`6{w@Qih%iPpgZm%)TlR;HxO!oaz!nmzHRed2Md$d zEmCQEXqcI9Y^nurfIJ?n4Dsd124@w`;hE@v2}t!Xf`dNG;!9LK&`JQ8wDeLjIZzyB zaayhaDaNh!3yKc4NVW-#GoVG23;~a{bR<}P4z_g!^srv|!}hKADN=9;oVVW%c7cNkX7vYT8{ z8#UBIxPwhhvc)A=N{si~BP3Pk1k*+V8=lo_UsBfvQ}P51@%EpLM`6d}jsA6$e|Nn<@@Dv>m+YTV&%s5w$?ql*CC|g0`}HwzBTRoKVIT zK64m`KWdC+P%T$b-N4&Jtbil%vBC6eYs{$*?dGb&Xm?xu(6eL*jc<`YK`pZ^@-MrU z%*q^A(A^4htcfXB`tIeM*YHa}BA8x$66(c^i_b&9c;SvXd&Ut}yuv$o>0zBBAG?1g zw*gPc-U;v2Fvu9ZjQ@tU1P0q&h#6YX$g{n;i5x`vATc^NP4xpnoSg@DW;5GiVrNTh zM>BFT<=97AqLQb`Zdl%_FO+t4k$W3p55iOcW4psXG$chFZFf0`SctMY_EQ>cCG10b zXQ~a&`>04Bp~r%`d2mU{?x*!zS;;ca{n!?5DqXt{-(*T#M!nskGLsGV3(br7J4qX}#NX zkE0d0a2@h%HY-l9f?=Vk-{jX_e1&|`?3=c%ZH3YBL8WkwxRrBT+KsbFI!a(;lje&& z$5;fI%OoSRrb3uL6L!+v#O?ygk_z3MMn0uS-Ka#L2RmqO8XR*RpvK*(M4tycXl)i8 zGdNK_=|&~`JlG*?v#a2k!HMc=H!9KR!46vM1;-3dRL{Cmi9Qc@&{{t@W-mBX4P+-S z(dPn>SR8~$?uEEsH!jiV0*_c6hDYv)xPCV-(dPn>SR92%9)!3-H!jiV0uNfmZDy~w z`sVsQ{NP_^_lM?nktF&J<^!Q3Wd?EL5qjROU;z0V)2^GjB_4>VF&_K-e;xvPh7N(o z)^{P@RGH1qRJ#!YvLY{}z|F~_^*L}p%y43s2{d2P7Ju=F1<==|%wv=e2oorjX=yn= zgTYgq{0NSRj;+hYrb4PoflbbXO|9U8^7&AiivpOP0HD_+0?J(qgh(^aNyjg#jMFMS79YSa4@Mroagq4DL@%k;XV1oj~uu zh;~HknhbHLV50%0cr2q8?x&{mJ(mN-{VBjP3o}zDm~{rbJ?Vl7DKmspEY%PjAd{k5 zdSH($YJ-!Or&k7h`}=H#Ne0PXf_ncREy#(vk5^TOvut%|nmMiR^b{k&`_prGx}>OW zP$!cYi!2Mm7Zz<6jV-(vXsU)LAAKgif}1MN66#IDMH4IF2z+ebqwHO}d9=}FEuGc0 zASY}XMYc#K5l=mFvZw(Pqk4+|^Y2r23x9r*q)OtL-vOor& zpAD6gZR#hFt-WkIrDA3ndXFA57JyEe9GyP-u}vg);-Eg}#4#slfa@f?=V9yAyR8Ep zIAf>vM;_qWmoPo&DSDZR&jTMj#Hri##~$MOm%*Jc(2rMCv?Uggua1kk(?y$&Q%b3b zv_}fCe=cyqVY+aMIES7aQ9=j^V+cZRv(B~6rH1kMEW^3JhV)AySFoW{YCqKXg-(kJ72gV>zAA%cOYfI%uav)Fp;wj(0KM z*>I0S2xw&NHgruXYpqkF<#-GMkGcDR*$fMEF@bl8SOG`i_IZDU)5HS(iby)vCGH1I zZNJ|UAqd&gDUd#anw@jJ**V9XopU_wxKhkO{RMlxw)~~;{K9|KCT^?DHi)($!oJ~~ zpKH5~7;dU?97Dhu*$&-SaMiY;Ae)wCN?^kVOqHt&I*tLDd7?53rEBL!)36jc*MJ^} z8GWQT!bVb+vOp%MA+-HVM>|S0^+b26CImDyHrz~J!XUv`=`c!{DE(z40LTe!Yp!5Q zdkM>=TI5)xE%LS6RO@+Svw_0t<^_unNySXB(@dALQ|UKVa_T$<8oAep!f|+@P}&i3 zL&tGNZD`6>`mj@9^5W4Jsnihb1LBbZd#O$y9&iu@PX@`F64(UOnLMtNXrZC1q7`Bc zkNre9NkpnG68+f`ecd}^L2~6x`&YeVHu}eG^qq~tF&l$pHU`ed=$MV+F&jf?gWq{<*XdNtG(l|nS0Or z7%Yi=t(p;?WNEt=>n^d_83oRQFAC_}l~K42p=OFw7)k%1b*Gxo7R9M~JNNl-=Up%u zt(SR)6B`>!^tao)_-~s%ZoXJU2eg6EZG>1GIc%qmBbsBo#OrM|vKumKN_c_&;dIl2 zs5T_92T$WT`o|3ZgfnFDA7Sn%UhdC+9zWsyCcZsSQ2@hXqaoWQWf?YR#1XiQx}HVr z{UVJd=(-~XIOg7e7R__&6L7cRqZ?3l26V!SoFg0qP^M#`gb>h_`rq3u!cCIN8vY<7 zpanWJ7zbX>bM(>2qAi7DeLy_A5*&vpn(438FQ-{c!U zV7>_tH*lPMquL^UKt@pzV930~&_~prMn*sjbYv>*4QkA13g<)wmjyB=YwL8$PiBjm zwwK{!8cob5!Ry6=EN&DgA+Z9Ez^CR3ng&c$woGlN^S$Nx3;|OR0*xMYwBr@2nqbiQ z3c73+MtFjI@m0!LYytEE01kUKwM*&7Z=S}S!2mwHZDJ#ia!~+7AE3(A#yYKmjwK4C zK;c_%BXrkz<_LVulOPXymZe@Ka*q}$ZZBWJfaNKHvD%zO#PDc=!bbxSQsbBmhvwLc zMTSocbVk0im|m)I?^EuR3`A#@1q=Z(<9L~7babR^Qh>cCP_6dcq#*y9eM2b_iGjYE zry9EX@6M3+$!=Uf30$7cwbm+5F!mSdf1H(Hc=v87}QI9RJG zfsJd}+(G6}%nNex5UaV(xq!4s3UGQZaMlFkE(y3TMMJ@{SrNwXxPPYHVuCIx*+L*x z2ZX&^sMnaG2Q%I8u!`FiHM~RAVL(0Kfc^mkJPo-hswI`EAi}{hp{-(RlBvRFsVy#* z2_c}7xq0`Srb$C6c$0@HiYXFkhiGhWqV;x<&V?~fm}Ti>qVi%1%|^MlQ;-2bcL2oJ z)ZDM&=Gcf*=qh1navDr;LZ__~U#@ZTATy|px6tLqG!W1xDNLlej)bRuo@flXcY(u* z6q_d^9o2xT6R@GVzj#8q9{?{Cfdn*c^6+)r=cpkV)!b~ zHDfxs67Pmp9zR;I1uBWScU(L$CA=FYI-I2C%G~>eV1_jYn!kImEQpbCaY1>5nVa)` z=a4n0#+NPG8R)aEgY10c7JSK>pJ}@{usxwO#e#X(}85&dl3txymp$%0EZ( zBYgwnO(GKAlCbvhs-@jha@d|(CdE36F^s)_Y4iBdw6)_Zk1JaJKq~+{%)rOI@G&nO zX6R$CJCAm+RYN$zewbRr5FbN#hVqz zH2k(->rZcMLIJ^;>6MT9`0qXlC_(i-{@t&h%H6LHGc@A&r7)fY=OWXXq7W1Q(r%Zm z6Qdd!u?Rh;mv>DA!0Ln#F*gH_6w0P`ijI_Y3pESH#=u;|A(;uqhImN%d5;}NAz;k` z`k<(e9o7ejhtTJ${gh+qKj0W6dyM*aHZ7v4DWtk4AXqK zCW5ZttD12PtWKh*CiZb{gmnr>*NFtj(C}Brvczt2MXm3vc~}SF@$!7X#iXlP=Ar;b zrvSWc${vImn~)ejEl`}zgh8C9I3{~LvA4zC%0dco+5{?`al!fZ054ooo4FLXF3YNL zY6gS*S8cGeKE**k+-{*5=}BC;U9J~Z4zCeTX$i}51m5p}t0JL%C^#L^RP4{pS688|_v&Z?x-u_+`}3V@AJb>I)q3V-x7INwJIzZG2@80M_60gqukvD@+kw;pNuW+! z`k$kYo^7q8x79*;<7h|VJ&GM$?viM+$0CjMnpL?JF>c z;nPOO`KJh8zVHZ+$11Ziu6*U1lGraWXg|>&DL{_8wMRFLbce|5kFKr& zgjtvp^6SgBbM&;oZ;66^w|3o6js! zr~@R>j_$P=BeG^NxbNarQmj}S^UFqUPtOUJFJv1qcz*!S&aO*Q(Oa5wVs$_~7B|~v z>aT40v_K~7G3tNf_0oklWa2uj3&T&n!;uL;9gTWYY zYO^RYvpDvF!Ol9tRWV@dHaAdGmumIQQ?$fM5*S}TQ4?)xM+>1O|P)P^qK)HyVno z>&}LWB4X!-i~`6ofV6#KJNTl?UGDHRu@=e@%t*3FwYpC!t%LN+x0u@>0XrEUR9Z=!Xn0G_*nYZrf$gbcnmqoIa zW&GSH1voMDwA6pC&{vy08i4dDfmxr`T~sU+TKwXYh-XK|+}VP6BZl4*y#uZ+kRGpj zV=M^@TZfbo0_w9H0cK+?K_3Q=#PDc=4q8x^U|j~kbKJj%+t}@u@ zV21XZ`U_HmvV+a12=`LMWdY&J0vQ+^ZVn@tVf5K;6|bOQZ$s5Jn4&Xe9SoXCKEVyO zHeWPH!O_ZS8~vVF!NG)QHO4(mM`1TK;A8>bf;bOI0Zx5j;-L};fj(yiuPyXfUBL)Ow!1v;h!)0ZFb zqIpK==aT}IJ<@ZKtWv3S9mTLASM}ImSno^mj`c_Z_M5;kb88o0R0k5mmy&a%^B<8y z32fMaspu;V&jPGviGuZI%VC7ZoiHgf09u{<6?AyW!ARTeeNZXE$Ayc$udoHjv_dIn zlFL#Lt4?C&2t#xK?$fIq{HtHdYUdb3iJ-?PzVhmt{5`oSfN2eIVi8hSv}C!#@GilA z*e2K8_=*v9?>@eIqwneG-e-f>0d|wy_oohC>pKjvMoD6PwyN2lUet}aO!5394sh3l zk4Lft7fw%gnr|yj%pHc3DI=ULlcL)e6v#1@LJKju!ej(6+Q~JBUB{rBmJ~{0Q}a3B zsQ1Y}!K@Zbg$bF^&GxC2D_XNq>rZ93p2ug+-c_g>;vH&gIIe1m`MviUPkJc~szZ_L ztoV?W&GfHKoZ#v{#^82Bn*%W9i2}WS+UGRT zwJbe?hB{6h?ckdJTBQYsW4AGGpm#4a-60bT7}^0km|NT^ot9X2L=QWpX**<;`QmRK z;!Zm?Q2&^r@&^n}4OEXS6=k@Xw!i=w1-aSd6dFo&r-ZdfS7t?#YQ5$`+3J;gLnu5X z6B9i<;Rr7T_Fy(CErxQee3pD`OIUjv)-)f}eY98wlg^eS@Nka$*90RY1{15o@)SJb z_y0UcA-YHd>THK$YR0-LyzYg!LnQx7nui=e>UxMBu`D+^@CgEvkK zZz&-d)U)><`%ya-*@2Hw3b1GJ3zJY+yo?K+fFWQQh(O=J)a!f!Ca7$S4S+fb;I1w{ z9q5GF&aNW_WZgz#K>Y}Hs$EEwvOq>;2RdkQu2|%fh{wmplg9MdKAh)rkF_^#0Fw~t z-Yytc`M1%(g97Q>X}&rXL6J1V2Qb77F>nZ?k7IhLkJLMTq}~}v>YI78iC54a-r5ot z8bZ}6>!z*%(*(K|(t)J6{ zD+{C^tkXP(ZM1w+fJ4L210#7rpN+OYT29Rnuxu*C%?%q{wnYJqZ7R1c{%{>D9FcAJ zMfDWMrRYWk*?Ps?#2m13N|77(e4do{6R;%~kFK~*#pR2=tyFDM0DbeajH9)Ad0(&T zPe;~YB45DkmCteYfX3DyDZnAwU!_G^?Wh5lq5wu_k=ltMFB6UMe3mFo?5Ce@p7QJo z`u|WFBg3Z|IvvnL4@PLiyf&Dg4x^ryAw$3u5;I_(S$!{F7o* zCm4B~M^_T*pq8pPwOqY%h#@1E1&sO`VatLTi{1))z!c{3g;@1CjE4TuuiyW+%GOB= zHP*{ynY$z_=GVNN&#KU~_?l2M_99kUwBA}$IZ|*vZit@J9J3gaj5t0+z1T?W7lmzO#6x(*}qBuf8 zt|K2OTRS$l-FZg}kX;@%$Fq5&6uF6IHh8RpV>1lo3jOLFMi`VW({g-iIidgep4jB?CaqA?;ajFB9JX@L$nLx;vFy0pR;6?5o|xjZ3lep3|@ z`Z86!=@aS~O1&W(KnvLd>a&5TOwP>vWT&t1@aOtY*f@B>9j7^FTvbu9VNvxD%cSZ% zZb9GP{-_Ccriq@tF5u8_OF+SH0gt(ob-vA0^hl<0mq!Lbnqxi(sLw&#`GsVWu%jzZP&y(2<>!F(DU_WP z#0ji?hXLH^#C%eK6KNvE{geF+xus}wLp4ucp0A}ZRhvHV9H-AZ$M(U_Qk&5Yr{J9n zI}Pi~3>isdvBi+0>>uG#0^PpPF&{=$n+2|#%6g+^>n1zU>yV$P_N=4n zXC6*pe!L!^ru5CljH3gfI*sgIjm$E`sc>w2_Zcn$tYtI4O9XigQKxGJW8(m-YwQ6N z2Nc!$ic|CI_V)cQ!=Lp|>b+iXWNv5^z&)M0GgkVRhM8-L9v#l!Rfjx<1BGA zLd0zFL;@`M|1mLJf(0ijHsxKR7U1SRix1l zfA*1k2gXzLA}ZF=Nz^*ynt}YouY4{4BqdLJP&k{I`~7;J z=I}5v)|8#kTHtF6b==xcTgUlkfys?`X?X%|r?7pzJr2e-4>jSl#|82vO%Dk~wKu~Y zSrN1~`g&a?X}k)%jSZpd=t5$c>W|U-`~Ry*zF{H7UlEPXT?HLrxQImIB+*xo{z$YS zCx&RX6*{hrB03(TCp8$xzZ(vIug8npHmz>wY+`WAB8Z_{y$yQDF(0o|p)^Hbd zodO+3i&au$B+NAq*QzW5)EOW#Ix-&$+Hd}$aEs70j4JH=$NlyNo{jGuXBiB}bSFuP ziOHj4zxhgplm#+1@A9?&^eg^+`qi;#K*v?Nim8r|J9qN4 zEBL}_2gU-Uo9vllLO?L2x%u?!w|Cd{VOJT3Y+{bCIW-y@A?)<)i_mA{ieYknP|0%9?doVt-054KV1LX;EoNtojkw*V?+6<oo?HKOU2drK#CO$y3#d*&Gsx z^32?=HqgM`C7YEkDk`$Pf91*5Jd%ln8tE}brx$J%tBtNYxt>}>uFunI9_$>oKJIe! z&_ac%slkfXr8S}!@YASz~tUr z&|bs4oK#Om60m^dmMt;vpr6Nu;!RQb(4v4>2&$W83$IauJI8FrbUvKWa+rx(!ADRf zkB=BWqb9`vtcK_#7#RF6qXotn)KKSgQS~NHJ~Xet|9w?p4s{qq!2AEY@+pCh9qdn~ zl34wLLW?h|lllmqiU-uDPECL!nowXXXn=|oLoh(MWxKCA!eB5AQeNbnO|q{aWKHw4 z7U+~ka4GYwN^0r_QWiD3Lf@?|C2!NTWV6PMZ`@n8y9ddskTC*jBii-^tACC;{Zs6X za6i*3`I?es9?DLDqw~=-Y{)E#3$<`?)jF=d+HI*G zl3kRg9hO@N&sgi4YjFM(?ER3rp1Tn(h`TYTmAfwK0`+HU_YXd$!hJAsd-fx)6bD3i4#@Aq}S_StA^ zU8pet2JU;VgO!9#Z{o^VQNH*xl}iqjJmWaYvkvr(v-NjBz3?dZYmQbmnt6B-2M|4OFxKYh!wOQZ9 zQL#yJT@?`7I^8vrjz~i$jhE`bZcR9ThOB{^4nPXx%xuQ1X6XdhOVB_9d zH@K`cu%Xm&^Pt^|$0ZgIC+2k$uXY>Szveoq!fSR}#~5gNPji9TP~p$6$kBZZy*gbR zd<5Y&X5-NW>gW<~jC!PH7j>I#%QVAak0DzLUlgb2=GU4F|P~&kepV#ualS^bsyvgh=YxmRC zG(#r?3Wu4lqi@KiIGI8)WY#k{4-BuzlETx{TrhG1hJgEaRKfvBRF2K-icY{|*IZE> z9Z;hwXn7?%O$3N;b1kfW1)poKeRh}G!{~4L-k?h>TcrH#(9^TufZYV`W^M(17PfVW z<62T-{m>y!T*Z$ZV|Gew(Q%^=p3mawAx@|@F5{U8`Qwh!w;g$m{hvm~USY_MEXJ_* ztDKg`F@l$s=};yH#>R$VcUuz3fz$GIz!Qy$p(Hk6v77Dy(Kd>43yu@1mZ+`Y#$2TS zoTCrO?RbH%9~u1UH=phThC+s5`{w$Z5ZBi}o2CkEC}uB=Si=?Y<_wU&aW;qM^Q$+n zZ|HBxPL>aG2m2Lns%fxC=N$9pIcNXU*&NeBfI-Kq`IB>w_2Qgky>K?CbdVSJPyrim z!n}ixXV!wx&N;JJ=bYIqu}Nt_PQtIxIqWn!P4ceVk21bKT9Y2SvAZ0lo(d}`!?A1VK~CFDBVl-XMIW1j{6ra&E( zXlJb@>X3}=@@rvJH(_=V@fJUQUusnwm_=Wpdhqy{82Rzzk9!7V0zzLyg4bJ8g~99r z*cS=*mu17(-K#gu)*f3UTl8!`)@V&04%p3J+kDjl7y9LEFO4;*O$^3L#mS;T>@gpj zDpMm8Zt4_Z<*-O^cCRLRtZl1@GHrrP)(RV3WLfQM$x*SwFIg; zg^6MQKK_CmJ22R28f~hz`M7E@1Ue3eqL>t0#~ecjIwnn-@?>IR(nj6nZB-2P=X9pW zj;b)U&Kj@h$l+^{*qn79@`$lO%2wbLvf+g>9o^1POPAW%o(-<3^?WrC>i|RZHrcPE z%|>mK?W#y|8=B>K3;~Y}rZ>i^)3#D5=}->yGrmcZEZ;2s#ZY0f!n9`|@@${s>X3D0 zq0bkS$|pPP;GCiN%OSCt8JcbN@Q~7d5f9HML$G6Ww=Zm@$*mNu41>P88FLCz=15Bk z47U&D>epNR`Bhe0F$mlX+G~|XDob}2`8cCz1adprtTqS}Hx?0`_c|&3yXJVJGHj;J zgb{WlZD#J=7H7~mlx#gPV8oc8oS%m&hK=FV#poIv{jz#WmzyN27XCzPOBl|m_OGt4 zpoZUO(OzfC(w4Bm!rl-pETUM^hBWi>x0ly9To%Lxmpr4j%rGQ1`5=y@2%C}Lsyv!y zwuc)^?eQXCB=~ia3t0eC2T^Raf7NA_p@;3AV@v%^W1Z0RjrBT=b*VcA7sCr9ioq*` z3oWu8f1fp&qBJ(|6MZw!;0OOQdw`J>_Hp8tAPReW(I&U^YHe{KJz_>b!_34iD|F@5 z+jOZg$L~I8j`BEyo(AY*j|rmUJ-oZVipOR>s1aY?y-`sg6pm!f#N@jabhsA**ANT`ig7bNno&MD9qQ^w%)s71I%c4OaH&x|}JysLA zq<6;Z}tVbvUlkNa-U7={vaTv3D9 zg;^e_1=nZ6$Hq=QYkOE6Ltw;vS=X?_Zdubr3uPBiE-}$Qi}P(vS~i+$EvPyPh1zHy zL93tT>wOGg$Gd-s|FOY|1v~4TYHoLOa5M`I6&rK`u))`{!ic%eGW4iWj2Bsmqa`=AChVwRWMkk zUMU`NO&O_ce!yl$==hS?3H4Lp;5)lQTk}-SWEB`PeoDy*jG)%rN`FY^FbtVj(4Pjw zhh*RCgF=n+DSy~ej*}#_toX9`xiI3nqYn?7<(R4KOhZ_OyRk2b5Bdi z5H>Tb25!{}>|L3cAFe5%vOO9YT?uxYKJ9mJ^_>-WH%njzq^ zd7H0u%4qS`tm>l3C+4kw_43oTc}stp4FiqW(U&;c?bJ;c6_4r;o?{6oq;7aYQr*KN zO$4Qnqr~cvI|F#`*euzk4_-8{q&{<~5niOUQRqeG_6s3@cz{1KcNqqk+G#6Liv(X+ z;WpW#h5@FQ_%)_DzTIKC9*m2E?&(g_WMaC}HGwN5SaxS)5n z&!A4jNd?~*>i|fFC^kCkn~%}v&8ItjxhR+4XFz#X_KXxYSXPk-p z!7~}y%elTIILB~y0@WdyneE%V_t)l*{xWxRg@O3+P4XsCg!8B7#0llupCE|}qHhEAbc zc>mjtc?~VN<4w>5t4PSp5(8|;xkm^HCt9HaC{oNAM#(2BQX2D=$77Az5F5;0y3Xy4 z-6x+A%*=ecf2+}-6n@36w10(rDW9tBDc4WY5?#nJInCa(0uIBW9}wAr4*H%;QTLpD zP|Itm?mPL!Tw|bp^;@}0*O9s{ap}qObjTBpX`m561p^)Q`%P6mnEMa^`th}Jp+(;& z(W6E$*Bp~@dTIpHs)te$uHhJ|$?e<#?9DX+RR_qV1%+1R;Z*J*t&v7p>)xY4V^iW9G)@b&;0yy`rFUIb~Z6SvyIt2Jqp)ED}G42T^_u3=ZSuWmQ+mQ)y`g9B*`Y;Iw53ria?wmXHY_ABNn z!Oivi^>(EYvp^EnP0e8bN)rw*9=;qz1j^?#A`3=Hf4KR!|Qe~lB>|Fw5? zd}UtV)W&XauHPSe_nNpv-_l{r2e0kNO&@%|mzo}!FSx6L!t_%~m5G};bz*%;KJ=Js zQAFtmhH16Qn$=LyXDf_6VYy8Uo{smdc-)4Px=d?o{w-a?;1?6g*(g0A^jUR8rfxWl zVh_S6WAkrSmXXte8?o##$*>#cH{|_>SPV^?z}|5?&BKVDX%jd&VW)M%Y-!dr|6Xmk zX=3*Fr{*JL-(>eK8@G0{h>9W}bZd>6vB8cB6*qMkWpXt#cIc(*gcb?2e2&1!cFsSi zAfU2|1v5Ng6YM0aArb8vTgJI>oC3u#>DbS5o9P0nYKqwmbk*JF%=~M#u=5p|2oeSk zF~xi9kZWIl)RIM}Kf#iEj-{UY@Zx1~4vuahCw#+fzm<2dCN=Y+=84M8K#jkjFY<>h zdXgM|%+fxO75Y6x522br6cGhx)GdzdUNW-stypOn0ZKvd&H=_0Nd?ZJh)5ufSf2Q&OO4~o>t_)^w>v}9( zuVoW`&0sJmH3TpwnXUcOglfX{QP`+nWy7_fHO^*j>Z*oiU80tO2FMN}FEP+OgR?CR zk6i<%ra{-zgJu}eGS+oA&o8V-&e?(Sl|usQIEgHZ2_$ZKGXUe-3Ry zOIbfddD1>|OQ{XkXMk~Ktb*Q5wbtus34JdNFVQ~OVbEnJ^|MS)`eu=)Wp3A^aqT9J z_vEhau{|!UO~>YXyjnTjDmGxr$akO}B}`UsUgJS6eXH!G}AA(Wi~Ki7OOJfB5TEdw|)La;A62|dRw zhAZJ{IJpZl6Hye^z(d?e9Rzh7)ql8A{d}wNslB{YMLI{9Z9jY%uyqHU_4<8tgXtA= zeZ5(rYn}@dY1yjD7QI13&kHXZYBu6dqVCAlGUqKJ2Wq%aOrc938f+X`aL~8>*Ozy1 zvKW6f{<2^=a5bZ{NjdU(PZmBKi3pe(TszG5F3+kQx4c@v#DJ-U%SyQSucdGZJf4~R2u26+JU--ba+~^r zF<&?NtT`FA5VXDtFDFG8T)^;bpY2=r)OqOEQCfQXk2p%}TK zgrinTu}w;HK~g=zH@K`d>vd`kI<*E)tKX^B@6?i|u34`c0(b#+N4N*j@mQsA_X${+ zLfbGfEu;XahO(Wa#|`Faq4_CHXK1>)tTq^#7ispu3G>y>z3TOc zObojY57%~ym4X&t-JJnuws=cb!C@$3^h1%I>_08mk?ct_B%yOOT0{ZCX4xK41 z!=nW{Fn6EsT>LmF`|;x(Kpz1N4P`yYGz|%bQP{1DB&TLb`V{CjNy|m(I_bGhvZAtz zs#8&QDYlONzp;(~?E)h|eDsmIyZ@x_Ztw6He?%}dcX z4*E{|(Mdl#>A*=pIq4@S9Xja;C;i~0BPYFg(t9VJ8u*G+okd$J;ID|_a*900Wt?~E z6WoZBCgFC~JQ0Cz30Qa7H!q3`)6qSa`Zu`K$*z3dD{}Jc5`1#rU!Xg|EGiXrL;YSH zvl`Vupu-RSGcI8z>U~sff~e*J-%||`dXea}HKXULLZ9gEJk+ps8`(1ftP_JClh|pU zR}YkrepAztr5QOM_^$svsmcvwL!x|^%L!PUck>f05mNRS-wj%n|{lcrGEg3k%#Deh`vM2a6qT2r&2`MpYB3|>J(gC zMi>8}LdPMdJ@cA5ueF?oC)3A-!fFX;R~-A|=FS#wYSF~}#cp!>i@$*h1T#}sa}6IJ zriO(gm#i3SGZRDImPAE{38QYjvLJ>vcb?l-NBo3#wPMH?y%7R1z<8oxx*`XbL;1Lt zzpmx4MLxtJKP9h^QmDaX7in4GfG_?bjiD0&|H=@k4gmLJd4_JZ@KHV#6|RK2%rMqb z))%N+Ai86N^K-ab2)2tPvQCr8Qw^Tg038D__%7GcoTD)l=_rAXB)W`jP(erWoTBCu zzr}7U>Pr>J+$~z5vjL{0+w2rh_rO!Mk}iQLPuj{YB?q2f0Pgq9`@Gtu(7gUyt-Mh! zb9KlStue@R%wq&i@H|V_>SmS1kI+Ix1KK6YQrEKfhxL4Ox=y!+ed5gWI1Gmd=pCk& zU7)`Tl=NF$48(5_ipOSI?J&=z{3fAjWqAjL`%dAwZx;I!U;3n2LPG

    DS@s&6^A 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

    4!Jy4Bs;sMSR6A~WMy0-iNgWk|X=o74{I5?kK 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

    2KR1$^Qj#@ETNw0n|!KRf|t*~Q5 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 z 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

    ~P2GGU)L9m|Fhs(zX+|+_S2=q6A{G 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 d#!5hfo=gvQb#u5H?B6sGcz;A1MpP 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

    7k!>iG|ektDCUB3=X?&vY#H~qKu=t(&n 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ðsIgbpweo9wukk7bBX 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 diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilities.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilities.java deleted file mode 100644 index e07e6cd550..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilities.java +++ /dev/null @@ -1,422 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon; - -import java.io.InputStream; - -import java.util.*; -import java.util.zip.GZIPInputStream; - -import uk.ac.ox.krr.logmap2.lexicon.stemming.StemmerManager; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.io.LogOutput; - - - -/** - * Manages the lexical variants provided by WordNet, UMLSLexicon, Stemmers and number normalization - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 11, 2011 - * - */ -public class LexicalUtilities { - - - private ReadFile reader; - private InputStream in; - - private String line; - - private String[] elements; - - - private Map> spelling_variants_map = new HashMap>(); - private Map> normalization_map = new HashMap>(); - - - private final String lex_spl_file="Lex_spelling_LRSPL.gz"; - private final String lex_norm_file="Lex_norm_LRNOM.gz"; - private final String lex_plur_file="Lex_plurals_LRAGR.gz"; - - - private Set stopwordsSet = new HashSet(); - private Set stopwordsSetExtended = new HashSet(); - - - private Map> label2wordnetsyn = new HashMap>(); - - - private Map word2stemming = new HashMap(); - - - private boolean useStemming=false; - - - public void clearStructures(){ - //stopwordsSet.clear(); - stopwordsSetExtended.clear(); - label2wordnetsyn.clear(); - word2stemming.clear(); - spelling_variants_map.clear(); - normalization_map.clear(); - - } - - public void clearStopWordsSet() - { - stopwordsSet.clear(); - } - - public Set getStopwordsSet(){ - return stopwordsSet; - } - - public Set getStopwordsSetExtended(){ - return stopwordsSetExtended; - } - - public Map> getLabel2wordnetsyn(){ - return label2wordnetsyn; - } - - - - - - - - public void loadWordNetSynonyms(String wordnet_syn_file) throws Exception - { - ReadFile reader = new ReadFile(wordnet_syn_file); - - //String line; - - //String[] elements; - String[] syn; - - Set setsyn = new HashSet(); - //Set setsyn_ext = new HashSet(); - - - while ((line = reader.readLine()) != null){ - - //System.out.println(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>1){ - - if (elements[1].contains(":")){ - syn = elements[1].split(":"); - } - else { - syn= new String[1]; - syn[0]=elements[1]; - } - - for (int i=0; i0){// || setsyn_ext.size()>0){ - label2wordnetsyn.put(elements[0], new HashSet()); - //if (setsyn.size()<6){ // - label2wordnetsyn.get(elements[0]).addAll(setsyn); - //} - - /*if (label2wordnetsyn.get(elements[0]).size()<4 && setsyn.size()<3){ //we try to avoid rare synonyms in entries with several candidates - label2wordnetsyn.get(elements[0]).addAll(setsyn_ext); - }*/ - //System.out.println(label2wordnetsyn); - setsyn.clear(); - //setsyn_ext.clear(); - } - } - - } - - - } - reader.closeBuffer(); - LogOutput.print("Size syn: " + label2wordnetsyn.size()); - - } - - - - - - public void setStemming(boolean use_stemming){ - useStemming=use_stemming; - } - - public boolean isStemmingUp(){ - return useStemming; - } - - public void setStemmer(){ - - //Best results paice - StemmerManager.setStemmerType(StemmerManager.STEMMER_PAICE); - - - //StemmerManager.setStemmerType(StemmerManager.STEMMER_PORTER); - //StemmerManager.setStemmerType(StemmerManager.STEMMER_LOVINS); - //StemmerManager.setStemmerType(StemmerManager.STEMMER_LOVINSITER); - //Config.setStemmerType(Config.STEMMER_LOVINS); - //Config.setStemmerType(Config.STEMMER_LOVINSITER); - //Config.setStemmerType(Config.STEMMER_PAICE); - //STEMMER_PORTER - //STEMMER_PORTER2 - //STEMMER_LOVINS - //STEMMER_LOVINSITER - //STEMMER_PAICE - - } - - - - public String getStemming4Word(String str){ - - if (word2stemming.containsKey(str)){ - return word2stemming.get(str); - } - - String stemmed_word = StemmerManager.getStemmer().stem(str); - - word2stemming.put(str, stemmed_word); - - - return stemmed_word; - - - } - - - public void loadStopWords() throws Exception{ - - reader = new ReadFile(LexicalUtilities.class.getResourceAsStream("stopwords.txt")); - - while ((line = reader.readLine()) != null){ - if (!line.startsWith("#")) - stopwordsSet.add(line); - } - reader.closeBuffer(); - - } - - public void loadStopWordsExtended() throws Exception{ - - reader = new ReadFile(LexicalUtilities.class.getResourceAsStream("stopwords.txt")); - - - while ((line = reader.readLine()) != null){ - if (!line.startsWith("#")) - stopwordsSetExtended.add(line); - else - stopwordsSetExtended.add(line.substring(1)); - } - reader.closeBuffer(); - - } - - - - public boolean hasSpellingVariants(String str){ - return spelling_variants_map.containsKey(str); - } - - public boolean hasNormalization(String str){ - return normalization_map.containsKey(str); - } - - - public Set getSpellingVariants(String str){ - return spelling_variants_map.get(str); - } - - public Set getNormalization(String str){ - return normalization_map.get(str); - } - - - public String getRomanNormalization4Number(String word){ - return NormalizeNumbers.getRomanNormalization(word); - } - - - - public void loadUMLSLexiconResources(){ - - long init, fin; - - init=Calendar.getInstance().getTimeInMillis(); - - try{ - load_UMLS_SpecialistLex_SpellingVariants(); - load_UMLS_SpecialistLex_Plurals(); - load_UMLS_SpecialistLex_Normalization(); - } - catch (Exception e){ - System.err.println("Error loading UMLS lexicon sources: " + e.getMessage()); - e.printStackTrace(); - } - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time loading UMLS lexicon sources (s): " + (float)((double)fin-(double)init)/1000.0); - - } - - - private void load_UMLS_SpecialistLex_SpellingVariants() throws Exception{ - - - //---------------------------- - //Reading Spelling file - //E0000934|Besnier Boeck disease|Besnier-Boeck disease| - in = new GZIPInputStream(LexicalUtilities.class.getResourceAsStream(lex_spl_file)); - reader = new ReadFile(in); - - - - while ((line = reader.readLine()) != null){ - - //LogOutput.print(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>2){ - - if (!elements[1].toLowerCase().equals(elements[2].toLowerCase())){ - - if (!spelling_variants_map.containsKey(elements[1].toLowerCase())){ - spelling_variants_map.put(elements[1].toLowerCase(), new HashSet()); - } - spelling_variants_map.get(elements[1].toLowerCase()).add(elements[2].toLowerCase()); - - } - } - } - } - - reader.closeBuffer(); - - - //LogOutput.print("Number of entries spelling variants map: " + spelling_variants_map.size()); - - } - - - - private void load_UMLS_SpecialistLex_Plurals() throws Exception{ - - - //--------------------------- - //Reading Plurals file - //E0010541|arthritides|noun|count(thr_plur)|arthritis|arthritis| - in = new GZIPInputStream(LexicalUtilities.class.getResourceAsStream(lex_plur_file)); - reader = new ReadFile(in); - - while ((line = reader.readLine()) != null){ - - //LogOutput.print(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>5){ - - if (!normalization_map.containsKey(elements[1].toLowerCase())){ - normalization_map.put(elements[1].toLowerCase(), new HashSet()); - } - //[5] base form. [4] citation form - normalization_map.get(elements[1].toLowerCase()).add(elements[5].toLowerCase()); - } - } - } - - - reader.closeBuffer(); - - //LogOutput.print("Number of entries plurals map: " + normalization_map.size()); - - - } - - - private void load_UMLS_SpecialistLex_Normalization() throws Exception{ - - - //--------------------------- - //Reading Normalization file - //E0338556|recumbency|noun|E0052316|recumbent|adj| - in = new GZIPInputStream(LexicalUtilities.class.getResourceAsStream(lex_norm_file)); - reader = new ReadFile(in); - - while ((line = reader.readLine()) != null){ - - //LogOutput.print(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>4){ - - if (!normalization_map.containsKey(elements[1].toLowerCase())){ - normalization_map.put(elements[1].toLowerCase(), new HashSet()); - } - normalization_map.get(elements[1].toLowerCase()).add(elements[4].toLowerCase()); - } - } - } - - - reader.closeBuffer(); - - - - - //LogOutput.print("Number of entries plurals+normalization map: " + normalization_map.size()); - - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilitiesStatic.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilitiesStatic.java deleted file mode 100644 index cde9fd572b..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/LexicalUtilitiesStatic.java +++ /dev/null @@ -1,424 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon; - - -import java.io.InputStream; - - - -import java.util.*; -import java.util.zip.GZIPInputStream; - -import uk.ac.ox.krr.logmap2.lexicon.stemming.StemmerManager; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.ReadFile; - - - -/** - * Static Variant not recommended for web server where there may be multiple concurrent request - * Manages the lexical variants provided by WordNet, UMLSLexicon, Stemmers and number normalization - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 11, 2011 - * - */ -public class LexicalUtilitiesStatic { - - - private static ReadFile reader; - private static InputStream in; - - private static String line; - - private static String[] elements; - - - private static Map> spelling_variants_map = new HashMap>(); - private static Map> normalization_map = new HashMap>(); - - - private static String lex_spl_file="Lex_spelling_LRSPL.gz"; - private static String lex_norm_file="Lex_norm_LRNOM.gz"; - private static String lex_plur_file="Lex_plurals_LRAGR.gz"; - - - private static Set stopwordsSet = new HashSet(); - private static Set stopwordsSetExtended = new HashSet(); - - - private static Map> label2wordnetsyn = new HashMap>(); - - - private static Map word2stemming = new HashMap(); - - - private static boolean useStemming=false; - - - public static void clearStructures(){ - //stopwordsSet.clear(); - stopwordsSetExtended.clear(); - label2wordnetsyn.clear(); - word2stemming.clear(); - spelling_variants_map.clear(); - normalization_map.clear(); - - } - - public static void clearStopWordsSet() - { - stopwordsSet.clear(); - } - - public static Set getStopwordsSet(){ - return stopwordsSet; - } - - public static Set getStopwordsSetExtended(){ - return stopwordsSetExtended; - } - - public static Map> getLabel2wordnetsyn(){ - return label2wordnetsyn; - } - - - - - - - - public static void loadWordNetSynonyms(String wordnet_syn_file) throws Exception - { - ReadFile reader = new ReadFile(wordnet_syn_file); - - //String line; - - //String[] elements; - String[] syn; - - Set setsyn = new HashSet(); - //Set setsyn_ext = new HashSet(); - - - while ((line = reader.readLine()) != null){ - - //System.out.println(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>1){ - - if (elements[1].contains(":")){ - syn = elements[1].split(":"); - } - else { - syn= new String[1]; - syn[0]=elements[1]; - } - - for (int i=0; i0){// || setsyn_ext.size()>0){ - label2wordnetsyn.put(elements[0], new HashSet()); - //if (setsyn.size()<6){ // - label2wordnetsyn.get(elements[0]).addAll(setsyn); - //} - - /*if (label2wordnetsyn.get(elements[0]).size()<4 && setsyn.size()<3){ //we try to avoid rare synonyms in entries with several candidates - label2wordnetsyn.get(elements[0]).addAll(setsyn_ext); - }*/ - //System.out.println(label2wordnetsyn); - setsyn.clear(); - //setsyn_ext.clear(); - } - } - - } - - - } - reader.closeBuffer(); - LogOutput.print("Size syn: " + label2wordnetsyn.size()); - - } - - - - - - public static void setStemming(boolean use_stemming){ - useStemming=use_stemming; - } - - public static boolean isStemmingUp(){ - return useStemming; - } - - public static void setStemmer(){ - - //Best results paice - StemmerManager.setStemmerType(StemmerManager.STEMMER_PAICE); - - - //StemmerManager.setStemmerType(StemmerManager.STEMMER_PORTER); - //StemmerManager.setStemmerType(StemmerManager.STEMMER_LOVINS); - //StemmerManager.setStemmerType(StemmerManager.STEMMER_LOVINSITER); - //Config.setStemmerType(Config.STEMMER_LOVINS); - //Config.setStemmerType(Config.STEMMER_LOVINSITER); - //Config.setStemmerType(Config.STEMMER_PAICE); - //STEMMER_PORTER - //STEMMER_PORTER2 - //STEMMER_LOVINS - //STEMMER_LOVINSITER - //STEMMER_PAICE - - } - - - - public static String getStemming4Word(String str){ - - if (word2stemming.containsKey(str)){ - return word2stemming.get(str); - } - - String stemmed_word = StemmerManager.getStemmer().stem(str); - - word2stemming.put(str, stemmed_word); - - - return stemmed_word; - - - } - - - public static void loadStopWords() throws Exception{ - - reader = new ReadFile(LexicalUtilities.class.getResourceAsStream("stopwords.txt")); - - while ((line = reader.readLine()) != null){ - if (!line.startsWith("#")) - stopwordsSet.add(line); - } - reader.closeBuffer(); - - } - - public static void loadStopWordsExtended() throws Exception{ - - reader = new ReadFile(LexicalUtilities.class.getResourceAsStream("stopwords.txt")); - - - while ((line = reader.readLine()) != null){ - if (!line.startsWith("#")) - stopwordsSetExtended.add(line); - else - stopwordsSetExtended.add(line.substring(1)); - } - reader.closeBuffer(); - - } - - - - public static boolean hasSpellingVariants(String str){ - return spelling_variants_map.containsKey(str); - } - - public static boolean hasNormalization(String str){ - return normalization_map.containsKey(str); - } - - - public static Set getSpellingVariants(String str){ - return spelling_variants_map.get(str); - } - - public static Set getNormalization(String str){ - return normalization_map.get(str); - } - - - public static String getRomanNormalization4Number(String word){ - return NormalizeNumbers.getRomanNormalization(word); - } - - - - public static void loadUMLSLexiconResources(){ - - //init=Calendar.getInstance().getTimeInMillis(); - - try{ - load_UMLS_SpecialistLex_SpellingVariants(); - load_UMLS_SpecialistLex_Plurals(); - load_UMLS_SpecialistLex_Normalization(); - } - catch (Exception e){ - System.err.println("Error loading UMLS lexicon sources: " + e.getMessage()); - e.printStackTrace(); - } - - //fin = Calendar.getInstance().getTimeInMillis(); - //LogOutput.print("Time loading UMLS lexicon sources (s): " + (float)((double)fin-(double)init)/1000.0); - - } - - - private static void load_UMLS_SpecialistLex_SpellingVariants() throws Exception{ - - - //---------------------------- - //Reading Spelling file - //E0000934|Besnier Boeck disease|Besnier-Boeck disease| - in = new GZIPInputStream(LexicalUtilities.class.getResourceAsStream(lex_spl_file)); - reader = new ReadFile(in); - - - - while ((line = reader.readLine()) != null){ - - //LogOutput.print(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>2){ - - if (!elements[1].toLowerCase().equals(elements[2].toLowerCase())){ - - if (!spelling_variants_map.containsKey(elements[1].toLowerCase())){ - spelling_variants_map.put(elements[1].toLowerCase(), new HashSet()); - } - spelling_variants_map.get(elements[1].toLowerCase()).add(elements[2].toLowerCase()); - - } - } - } - } - - reader.closeBuffer(); - - - //LogOutput.print("Number of entries spelling variants map: " + spelling_variants_map.size()); - - } - - - - private static void load_UMLS_SpecialistLex_Plurals() throws Exception{ - - - //--------------------------- - //Reading Plurals file - //E0010541|arthritides|noun|count(thr_plur)|arthritis|arthritis| - in = new GZIPInputStream(LexicalUtilities.class.getResourceAsStream(lex_plur_file)); - reader = new ReadFile(in); - - while ((line = reader.readLine()) != null){ - - //LogOutput.print(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>5){ - - if (!normalization_map.containsKey(elements[1].toLowerCase())){ - normalization_map.put(elements[1].toLowerCase(), new HashSet()); - } - //[5] base form. [4] citation form - normalization_map.get(elements[1].toLowerCase()).add(elements[5].toLowerCase()); - } - } - } - - - reader.closeBuffer(); - - //LogOutput.print("Number of entries plurals map: " + normalization_map.size()); - - - } - - - private static void load_UMLS_SpecialistLex_Normalization() throws Exception{ - - - //--------------------------- - //Reading Normalization file - //E0338556|recumbency|noun|E0052316|recumbent|adj| - in = new GZIPInputStream(LexicalUtilities.class.getResourceAsStream(lex_norm_file)); - reader = new ReadFile(in); - - while ((line = reader.readLine()) != null){ - - //LogOutput.print(line); - - if (line.contains("|")){ - - elements=line.split("\\|"); - - if (elements.length>4){ - - if (!normalization_map.containsKey(elements[1].toLowerCase())){ - normalization_map.put(elements[1].toLowerCase(), new HashSet()); - } - normalization_map.get(elements[1].toLowerCase()).add(elements[4].toLowerCase()); - } - } - } - - - reader.closeBuffer(); - - - - - //LogOutput.print("Number of entries plurals+normalization map: " + normalization_map.size()); - - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeDate.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeDate.java deleted file mode 100644 index 4b505a3924..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeDate.java +++ /dev/null @@ -1,140 +0,0 @@ -package uk.ac.ox.krr.logmap2.lexicon; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class NormalizeDate { - - - private static SimpleDateFormat formatter_in = new SimpleDateFormat(); - private static SimpleDateFormat formatter_out = new SimpleDateFormat("dd-MMM-yyyy"); - - //Used date patterns - private static String date_format1 = "yyyy-MM-dd"; - private static String date_format2 = "yyyy-MMM-dd"; - private static String date_format3 = "dd-MM-yyyy"; - private static String date_format4 = "dd-MMM-yyyy"; - private static String date_format5 = "dd, MMM yyyy"; - private static String date_format6 = "dd MMM yyyy"; - private static String date_format7 = "yyyy MMM dd"; - private static String date_format8 = "yyyy/MM/dd"; - private static String date_format9 = "yyyy/MMM/dd"; - private static String date_format10 = "dd/MM/yyyy"; - private static String date_format11 = "dd/MMM/yyyy"; - - //private static List date_formats = new ArrayList(); - private static Set date_formats = new HashSet(); - - - static { - date_formats.add(date_format1); - date_formats.add(date_format2); - date_formats.add(date_format3); - date_formats.add(date_format4); - date_formats.add(date_format5); - date_formats.add(date_format6); - date_formats.add(date_format7); - date_formats.add(date_format8); - date_formats.add(date_format9); - date_formats.add(date_format10); - date_formats.add(date_format11); - } - - - /** - * Normalizes a give data (string format) to dd-MMM-yyyy. - * If the give string is not a date or not in the accepted - * formats it returns the same string - * @param date_str - * @return - */ - public static String normalize(String date_str){ - - String normalized_date; - - for (String pattern : date_formats){ - - if (!(normalized_date=applyPattern(date_str, pattern)).equals("")){ - return normalized_date; - } - } - - return date_str; - - } - - - @SuppressWarnings("deprecation") - private static String applyPattern(String date_str, String pattern){ - try { - formatter_in.applyPattern(pattern); - - Date date = formatter_in.parse(date_str); - - //System.out.println(date_str + " " +date.getYear() + "\n"); - - if (date.getYear()<-1000){//wrong year (or too old <900 which is unlikely to appear) then wrong parsing - return ""; - } - - return formatter_out.format(date); - - } - catch (Exception e){ - return ""; - } - - } - - - - - /** - * @param args - * @throws ParseException - */ - public static void main(String[] args) throws ParseException { - - - System.out.println(NormalizeDate.normalize("1815-11-02")); - System.out.println(NormalizeDate.normalize("02, Nov 1815")); - - /*System.out.println(NormalizeDate.normalize("2009-01-31")); - System.out.println(NormalizeDate.normalize("23, August 2012")); - System.out.println(NormalizeDate.normalize("23 August 2012")); - System.out.println(NormalizeDate.normalize("2003 Sep 15")); - System.out.println(NormalizeDate.normalize("La casa es azul")); - System.out.println(NormalizeDate.normalize("2003/Sep/15")); - System.out.println(NormalizeDate.normalize("2003_Sep_15")); - */ - - - String strDate1 = "2009-01-31"; - SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd"); - Date date1 = formatter1.parse(strDate1); - //System.out.println("dd-MMM-yyyy date is ==>"+date1); - - String strDate2 = "23, August 2012"; - SimpleDateFormat formatter2 = new SimpleDateFormat("dd, MMM yyyy"); - Date date2 = formatter2.parse(strDate2); - //System.out.println("dd-MMM-yyyy date is ==>"+date1); - - SimpleDateFormat formatter3 = new SimpleDateFormat("dd-MMM-yyyy"); - String formattedDate1 = formatter3.format(date1); - String formattedDate2 = formatter3.format(date2); - - System.out.println("dd-MMM-yyyy date is ==>"+formattedDate1); - System.out.println("dd-MMM-yyyy date is ==>"+formattedDate2); - - //http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html - // http://stackoverflow.com/questions/15296150/date-format-parsing-java - // http://stackoverflow.com/questions/15296150/date-format-parsing-java - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeNumbers.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeNumbers.java deleted file mode 100644 index 4c47a07c82..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/NormalizeNumbers.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon; - -import java.util.*; - -public class NormalizeNumbers { - - private final static String[] CARDINALS_STR_ARRAY = { - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "ten" - }; - - private final static String[] CARDINALS_ARRAY = { - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10" - }; - - private final static String[] ORDINALS_STR_ARRAY = { - "zeroth", - "first", - "second", - "third", - "fourth", - "fifth", - "sixth", - "seventh", - "eighth", - "ninth", - "tenth" - }; - - private final static String[] ORDINALS_ARRAY = { - "0th", - "1st", - "2nd", - "4rd", - "4th", - "5th", - "6th", - "7th", - "8th", - "9th", - "10th" - }; - - private final static String[] ROMANS_ARRAY = { - "0", //Workaround: No roman representation, but need to fill index 0 - "i", - "ii", - "iii", - "iv", - "v", - "vi", - "vii", - "viii", - "ix", - "x" - }; - - private static List CARDINALS_STR=new ArrayList(); - private static List CARDINALS=new ArrayList(); - private static List ORDINALS_STR=new ArrayList(); - private static List ORDINALS=new ArrayList(); - private static List ROMANS=new ArrayList(); - - - static { - for (String str: ROMANS_ARRAY){ - ROMANS.add(str); - } - - for (String str: CARDINALS_STR_ARRAY){ - CARDINALS_STR.add(str); - } - - for (String str: CARDINALS_ARRAY){ - CARDINALS.add(str); - } - - for (String str: ORDINALS_STR_ARRAY){ - ORDINALS_STR.add(str); - } - - for (String str: ORDINALS_ARRAY){ - ORDINALS.add(str); - } - } - - - public static String getRomanNormalization(String word){ - - int index; - - index = CARDINALS_STR.indexOf(word); - if (index>-1) - return ROMANS.get(index); - - index = CARDINALS.indexOf(word); - if (index>-1) - return ROMANS.get(index); - - index = ORDINALS_STR.indexOf(word); - if (index>-1) - return ROMANS.get(index); - - index = ORDINALS.indexOf(word); - if (index>-1) - return ROMANS.get(index); - - return ""; - } - - public static List getRomanNumbers10(){ - return ROMANS; - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/FileStemmer.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/FileStemmer.java deleted file mode 100644 index 7af567dbaf..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/FileStemmer.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.io.PrintStream; - -public class FileStemmer { - - public final static String SEPARATOR_CHAR = "|"; - - private Stemmer stemmer; - - public FileStemmer(Stemmer stemmer) { - this.stemmer = stemmer; - } - - public void stemFromFile(String inputFile, String outputFile) throws IOException { - BufferedReader in = new BufferedReader(new FileReader(inputFile)); - PrintStream out = new PrintStream(outputFile); - - while(in.ready()) { - String line = in.readLine(); //each line must contain one word (exactly) - out.println(line + SEPARATOR_CHAR + stemmer.stem(line)); - } - - in.close(); - out.close(); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/IteratedLovinsStemmer.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/IteratedLovinsStemmer.java deleted file mode 100644 index 55466bb182..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/IteratedLovinsStemmer.java +++ /dev/null @@ -1,71 +0,0 @@ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - - -/* - * IteratedLovinsStemmer.java - * Copyright (C) 2001 Eibe Frank - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -public class IteratedLovinsStemmer extends LovinsStemmer { - - /** - * Iterated stemming of the given word. - * Word is converted to lower case. - */ - public String stem(String str) { - - if (str.length() <= 2) { - return str; - } - String stemmed = super.stem(str); - while (!stemmed.equals(str)) { - str = stemmed; - stemmed = super.stem(stemmed); - } - return stemmed; - } - - /** - * Stems text coming into stdin and writes it to stdout. - */ - public static void main(String[] ops) { - - IteratedLovinsStemmer ls = new IteratedLovinsStemmer(); - - try { - int num; - StringBuffer wordBuffer = new StringBuffer(); - while ((num = System.in.read()) != -1) { - char c = (char)num; - if (((num >= (int)'A') && (num <= (int)'Z')) || - ((num >= (int)'a') && (num <= (int)'z'))) { - wordBuffer.append(c); - } else { - if (wordBuffer.length() > 0) { - System.out.print(ls.stem(wordBuffer.toString(). - toLowerCase())); - wordBuffer = new StringBuffer(); - } - System.out.print(c); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} - - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsIterStemmerBridge.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsIterStemmerBridge.java deleted file mode 100644 index 96da2b1340..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsIterStemmerBridge.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -/** - * Bridge class for the Lovins stemming algorithm in its iterated version. - * - * Bridged interface and class: Stemmer, IteratedLovinsStemmer. - * - * Note: The iterated version applies the algorithm to its output until it does not change. - * - * @author Ant�n Morant - */ -public class LovinsIterStemmerBridge implements Stemmer { - private IteratedLovinsStemmer stemmer; - - public LovinsIterStemmerBridge() { - this.stemmer = new IteratedLovinsStemmer(); - } - - @Override - public String stem(String word) { - return stemmer.stem(word); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmer.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmer.java deleted file mode 100644 index b46d50e55f..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmer.java +++ /dev/null @@ -1,918 +0,0 @@ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -import java.util.*; - -/* - * LovinsStemmer.java - * Copyright (C) 2001 Eibe Frank - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -public class LovinsStemmer { - - /** Enters C version compatibility mode if set to true (emulates - features of the original C implementation that are inconsistent - with the algorithm as described in Lovins's paper) */ - private static boolean m_CompMode = false; - - /** The hash tables containing the list of endings. */ - private static HashMap m_l11 = null; - private static HashMap m_l10 = null; - private static HashMap m_l9 = null; - private static HashMap m_l8 = null; - private static HashMap m_l7 = null; - private static HashMap m_l6 = null; - private static HashMap m_l5 = null; - private static HashMap m_l4 = null; - private static HashMap m_l3 = null; - private static HashMap m_l2 = null; - private static HashMap m_l1 = null; - - static { - - m_l11 = new HashMap(); - m_l11.put("alistically", "B"); - m_l11.put("arizability", "A"); - m_l11.put("izationally", "B"); - m_l10 = new HashMap(); - m_l10.put("antialness", "A"); - m_l10.put("arisations", "A"); - m_l10.put("arizations", "A"); - m_l10.put("entialness", "A"); - m_l9 = new HashMap(); - m_l9.put("allically", "C"); - m_l9.put("antaneous", "A"); - m_l9.put("antiality", "A"); - m_l9.put("arisation", "A"); - m_l9.put("arization", "A"); - m_l9.put("ationally", "B"); - m_l9.put("ativeness", "A"); - m_l9.put("eableness", "E"); - m_l9.put("entations", "A"); - m_l9.put("entiality", "A"); - m_l9.put("entialize", "A"); - m_l9.put("entiation", "A"); - m_l9.put("ionalness", "A"); - m_l9.put("istically", "A"); - m_l9.put("itousness", "A"); - m_l9.put("izability", "A"); - m_l9.put("izational", "A"); - m_l8 = new HashMap(); - m_l8.put("ableness", "A"); - m_l8.put("arizable", "A"); - m_l8.put("entation", "A"); - m_l8.put("entially", "A"); - m_l8.put("eousness", "A"); - m_l8.put("ibleness", "A"); - m_l8.put("icalness", "A"); - m_l8.put("ionalism", "A"); - m_l8.put("ionality", "A"); - m_l8.put("ionalize", "A"); - m_l8.put("iousness", "A"); - m_l8.put("izations", "A"); - m_l8.put("lessness", "A"); - m_l7 = new HashMap(); - m_l7.put("ability", "A"); - m_l7.put("aically", "A"); - m_l7.put("alistic", "B"); - m_l7.put("alities", "A"); - m_l7.put("ariness", "E"); - m_l7.put("aristic", "A"); - m_l7.put("arizing", "A"); - m_l7.put("ateness", "A"); - m_l7.put("atingly", "A"); - m_l7.put("ational", "B"); - m_l7.put("atively", "A"); - m_l7.put("ativism", "A"); - m_l7.put("elihood", "E"); - m_l7.put("encible", "A"); - m_l7.put("entally", "A"); - m_l7.put("entials", "A"); - m_l7.put("entiate", "A"); - m_l7.put("entness", "A"); - m_l7.put("fulness", "A"); - m_l7.put("ibility", "A"); - m_l7.put("icalism", "A"); - m_l7.put("icalist", "A"); - m_l7.put("icality", "A"); - m_l7.put("icalize", "A"); - m_l7.put("ication", "G"); - m_l7.put("icianry", "A"); - m_l7.put("ination", "A"); - m_l7.put("ingness", "A"); - m_l7.put("ionally", "A"); - m_l7.put("isation", "A"); - m_l7.put("ishness", "A"); - m_l7.put("istical", "A"); - m_l7.put("iteness", "A"); - m_l7.put("iveness", "A"); - m_l7.put("ivistic", "A"); - m_l7.put("ivities", "A"); - m_l7.put("ization", "F"); - m_l7.put("izement", "A"); - m_l7.put("oidally", "A"); - m_l7.put("ousness", "A"); - m_l6 = new HashMap(); - m_l6.put("aceous", "A"); - m_l6.put("acious", "B"); - m_l6.put("action", "G"); - m_l6.put("alness", "A"); - m_l6.put("ancial", "A"); - m_l6.put("ancies", "A"); - m_l6.put("ancing", "B"); - m_l6.put("ariser", "A"); - m_l6.put("arized", "A"); - m_l6.put("arizer", "A"); - m_l6.put("atable", "A"); - m_l6.put("ations", "B"); - m_l6.put("atives", "A"); - m_l6.put("eature", "Z"); - m_l6.put("efully", "A"); - m_l6.put("encies", "A"); - m_l6.put("encing", "A"); - m_l6.put("ential", "A"); - m_l6.put("enting", "C"); - m_l6.put("entist", "A"); - m_l6.put("eously", "A"); - m_l6.put("ialist", "A"); - m_l6.put("iality", "A"); - m_l6.put("ialize", "A"); - m_l6.put("ically", "A"); - m_l6.put("icance", "A"); - m_l6.put("icians", "A"); - m_l6.put("icists", "A"); - m_l6.put("ifully", "A"); - m_l6.put("ionals", "A"); - m_l6.put("ionate", "D"); - m_l6.put("ioning", "A"); - m_l6.put("ionist", "A"); - m_l6.put("iously", "A"); - m_l6.put("istics", "A"); - m_l6.put("izable", "E"); - m_l6.put("lessly", "A"); - m_l6.put("nesses", "A"); - m_l6.put("oidism", "A"); - m_l5 = new HashMap(); - m_l5.put("acies", "A"); - m_l5.put("acity", "A"); - m_l5.put("aging", "B"); - m_l5.put("aical", "A"); - if (!m_CompMode) { - m_l5.put("alist", "A"); - } - m_l5.put("alism", "B"); - m_l5.put("ality", "A"); - m_l5.put("alize", "A"); - m_l5.put("allic", "b"); - m_l5.put("anced", "B"); - m_l5.put("ances", "B"); - m_l5.put("antic", "C"); - m_l5.put("arial", "A"); - m_l5.put("aries", "A"); - m_l5.put("arily", "A"); - m_l5.put("arity", "B"); - m_l5.put("arize", "A"); - m_l5.put("aroid", "A"); - m_l5.put("ately", "A"); - m_l5.put("ating", "I"); - m_l5.put("ation", "B"); - m_l5.put("ative", "A"); - m_l5.put("ators", "A"); - m_l5.put("atory", "A"); - m_l5.put("ature", "E"); - m_l5.put("early", "Y"); - m_l5.put("ehood", "A"); - m_l5.put("eless", "A"); - if (!m_CompMode) { - m_l5.put("elily", "A"); - } else { - m_l5.put("elity", "A"); - } - m_l5.put("ement", "A"); - m_l5.put("enced", "A"); - m_l5.put("ences", "A"); - m_l5.put("eness", "E"); - m_l5.put("ening", "E"); - m_l5.put("ental", "A"); - m_l5.put("ented", "C"); - m_l5.put("ently", "A"); - m_l5.put("fully", "A"); - m_l5.put("ially", "A"); - m_l5.put("icant", "A"); - m_l5.put("ician", "A"); - m_l5.put("icide", "A"); - m_l5.put("icism", "A"); - m_l5.put("icist", "A"); - m_l5.put("icity", "A"); - m_l5.put("idine", "I"); - m_l5.put("iedly", "A"); - m_l5.put("ihood", "A"); - m_l5.put("inate", "A"); - m_l5.put("iness", "A"); - m_l5.put("ingly", "B"); - m_l5.put("inism", "J"); - m_l5.put("inity", "c"); - m_l5.put("ional", "A"); - m_l5.put("ioned", "A"); - m_l5.put("ished", "A"); - m_l5.put("istic", "A"); - m_l5.put("ities", "A"); - m_l5.put("itous", "A"); - m_l5.put("ively", "A"); - m_l5.put("ivity", "A"); - m_l5.put("izers", "F"); - m_l5.put("izing", "F"); - m_l5.put("oidal", "A"); - m_l5.put("oides", "A"); - m_l5.put("otide", "A"); - m_l5.put("ously", "A"); - m_l4 = new HashMap(); - m_l4.put("able", "A"); - m_l4.put("ably", "A"); - m_l4.put("ages", "B"); - m_l4.put("ally", "B"); - m_l4.put("ance", "B"); - m_l4.put("ancy", "B"); - m_l4.put("ants", "B"); - m_l4.put("aric", "A"); - m_l4.put("arly", "K"); - m_l4.put("ated", "I"); - m_l4.put("ates", "A"); - m_l4.put("atic", "B"); - m_l4.put("ator", "A"); - m_l4.put("ealy", "Y"); - m_l4.put("edly", "E"); - m_l4.put("eful", "A"); - m_l4.put("eity", "A"); - m_l4.put("ence", "A"); - m_l4.put("ency", "A"); - m_l4.put("ened", "E"); - m_l4.put("enly", "E"); - m_l4.put("eous", "A"); - m_l4.put("hood", "A"); - m_l4.put("ials", "A"); - m_l4.put("ians", "A"); - m_l4.put("ible", "A"); - m_l4.put("ibly", "A"); - m_l4.put("ical", "A"); - m_l4.put("ides", "L"); - m_l4.put("iers", "A"); - m_l4.put("iful", "A"); - m_l4.put("ines", "M"); - m_l4.put("ings", "N"); - m_l4.put("ions", "B"); - m_l4.put("ious", "A"); - m_l4.put("isms", "B"); - m_l4.put("ists", "A"); - m_l4.put("itic", "H"); - m_l4.put("ized", "F"); - m_l4.put("izer", "F"); - m_l4.put("less", "A"); - m_l4.put("lily", "A"); - m_l4.put("ness", "A"); - m_l4.put("ogen", "A"); - m_l4.put("ward", "A"); - m_l4.put("wise", "A"); - m_l4.put("ying", "B"); - m_l4.put("yish", "A"); - m_l3 = new HashMap(); - m_l3.put("acy", "A"); - m_l3.put("age", "B"); - m_l3.put("aic", "A"); - m_l3.put("als", "b"); - m_l3.put("ant", "B"); - m_l3.put("ars", "O"); - m_l3.put("ary", "F"); - m_l3.put("ata", "A"); - m_l3.put("ate", "A"); - m_l3.put("eal", "Y"); - m_l3.put("ear", "Y"); - m_l3.put("ely", "E"); - m_l3.put("ene", "E"); - m_l3.put("ent", "C"); - m_l3.put("ery", "E"); - m_l3.put("ese", "A"); - m_l3.put("ful", "A"); - m_l3.put("ial", "A"); - m_l3.put("ian", "A"); - m_l3.put("ics", "A"); - m_l3.put("ide", "L"); - m_l3.put("ied", "A"); - m_l3.put("ier", "A"); - m_l3.put("ies", "P"); - m_l3.put("ily", "A"); - m_l3.put("ine", "M"); - m_l3.put("ing", "N"); - m_l3.put("ion", "Q"); - m_l3.put("ish", "C"); - m_l3.put("ism", "B"); - m_l3.put("ist", "A"); - m_l3.put("ite", "a"); - m_l3.put("ity", "A"); - m_l3.put("ium", "A"); - m_l3.put("ive", "A"); - m_l3.put("ize", "F"); - m_l3.put("oid", "A"); - m_l3.put("one", "R"); - m_l3.put("ous", "A"); - m_l2 = new HashMap(); - m_l2.put("ae", "A"); - m_l2.put("al", "b"); - m_l2.put("ar", "X"); - m_l2.put("as", "B"); - m_l2.put("ed", "E"); - m_l2.put("en", "F"); - m_l2.put("es", "E"); - m_l2.put("ia", "A"); - m_l2.put("ic", "A"); - m_l2.put("is", "A"); - m_l2.put("ly", "B"); - m_l2.put("on", "S"); - m_l2.put("or", "T"); - m_l2.put("um", "U"); - m_l2.put("us", "V"); - m_l2.put("yl", "R"); - m_l2.put("s\'", "A"); - m_l2.put("\'s", "A"); - m_l1 = new HashMap(); - m_l1.put("a", "A"); - m_l1.put("e", "A"); - m_l1.put("i", "A"); - m_l1.put("o", "A"); - m_l1.put("s", "W"); - m_l1.put("y", "B"); - } - - /** - * Finds and removes ending from given word. - */ - private String removeEnding(String word) { - - int length = word.length(); - int el = 11; - - while (el > 0) { - if (length - el > 1) { - String ending = word.substring(length - el); - String conditionCode = null; - switch (el) { - case 11: conditionCode = (String)m_l11.get(ending); - break; - case 10: conditionCode = (String)m_l10.get(ending); - break; - case 9: conditionCode = (String)m_l9.get(ending); - break; - case 8: conditionCode = (String)m_l8.get(ending); - break; - case 7: conditionCode = (String)m_l7.get(ending); - break; - case 6: conditionCode = (String)m_l6.get(ending); - break; - case 5: conditionCode = (String)m_l5.get(ending); - break; - case 4: conditionCode = (String)m_l4.get(ending); - break; - case 3: conditionCode = (String)m_l3.get(ending); - break; - case 2: conditionCode = (String)m_l2.get(ending); - break; - case 1: conditionCode = (String)m_l1.get(ending); - break; - default: - } - if (conditionCode != null) { - switch (conditionCode.charAt(0)) { - case 'A': - return word.substring(0, length - el); - case 'B': - if (length - el > 2) { - return word.substring(0, length - el); - } - break; - case 'C': - if (length - el > 3) { - return word.substring(0, length - el); - } - break; - case 'D': - if (length - el > 4) { - return word.substring(0, length - el); - } - break; - case 'E': - if (word.charAt(length - el - 1) != 'e') { - return word.substring(0, length - el); - } - break; - case 'F': - if ((length - el > 2) && - (word.charAt(length - el - 1) != 'e')) { - return word.substring(0, length - el); - } - break; - case 'G': - if ((length - el > 2) && - (word.charAt(length - el - 1) == 'f')) { - return word.substring(0, length - el); - } - break; - case 'H': - if ((word.charAt(length - el - 1) == 't') || - ((word.charAt(length - el - 1) == 'l') && - (word.charAt(length - el - 2) == 'l'))) { - return word.substring(0, length - el); - } - break; - case 'I': - if ((word.charAt(length - el - 1) != 'o') && - (word.charAt(length - el - 1) != 'e')) { - return word.substring(0, length - el); - } - break; - case 'J': - if ((word.charAt(length - el - 1) != 'a') && - (word.charAt(length - el - 1) != 'e')) { - return word.substring(0, length - el); - } - break; - case 'K': - if ((length - el > 2) && - ((word.charAt(length - el - 1) == 'l') || - (word.charAt(length - el - 1) == 'i') || - ((word.charAt(length - el - 1) == 'e') && - (word.charAt(length - el - 3) == 'u')))) { - return word.substring(0, length - el); - } - break; - case 'L': - if ((word.charAt(length - el - 1) != 'u') && - (word.charAt(length - el - 1) != 'x') && - ((word.charAt(length - el - 1) != 's') || - (word.charAt(length - el - 2) == 'o'))) { - return word.substring(0, length - el); - } - break; - case 'M': - if ((word.charAt(length - el - 1) != 'a') && - (word.charAt(length - el - 1) != 'c') && - (word.charAt(length - el - 1) != 'e') && - (word.charAt(length - el - 1) != 'm')) { - return word.substring(0, length - el); - } - break; - case 'N': - if ((length - el > 3) || - ((length - el == 3) && - ((word.charAt(length - el - 3) != 's')))) { - return word.substring(0, length - el); - } - break; - case 'O': - if ((word.charAt(length - el - 1) == 'l') || - (word.charAt(length - el - 1) == 'i')) { - return word.substring(0, length - el); - } - break; - case 'P': - if (word.charAt(length - el - 1) != 'c') { - return word.substring(0, length - el); - } - break; - case 'Q': - if ((length - el > 2) && - (word.charAt(length - el - 1) != 'l') && - (word.charAt(length - el - 1) != 'n')) { - return word.substring(0, length - el); - } - break; - case 'R': - if ((word.charAt(length - el - 1) == 'n') || - (word.charAt(length - el - 1) == 'r')) { - return word.substring(0, length - el); - } - break; - case 'S': - if (((word.charAt(length - el - 1) == 'r') && - (word.charAt(length - el - 2) == 'd')) || - ((word.charAt(length - el - 1) == 't') && - (word.charAt(length - el - 2) != 't'))) { - return word.substring(0, length - el); - } - break; - case 'T': - if ((word.charAt(length - el - 1) == 's') || - ((word.charAt(length - el - 1) == 't') && - (word.charAt(length - el - 2) != 'o'))) { - return word.substring(0, length - el); - } - break; - case 'U': - if ((word.charAt(length - el - 1) == 'l') || - (word.charAt(length - el - 1) == 'm') || - (word.charAt(length - el - 1) == 'n') || - (word.charAt(length - el - 1) == 'r')) { - return word.substring(0, length - el); - } - break; - case 'V': - if (word.charAt(length - el - 1) == 'c') { - return word.substring(0, length - el); - } - break; - case 'W': - if ((word.charAt(length - el - 1) != 's') && - (word.charAt(length - el - 1) != 'u')) { - return word.substring(0, length - el); - } - break; - case 'X': - if ((word.charAt(length - el - 1) == 'l') || - (word.charAt(length - el - 1) == 'i') || - ((length - el > 2) && - (word.charAt(length - el - 1) == 'e') && - (word.charAt(length - el - 3) == 'u'))) { - return word.substring(0, length - el); - } - break; - case 'Y': - if ((word.charAt(length - el - 1) == 'n') && - (word.charAt(length - el - 2) == 'i')) { - return word.substring(0, length - el); - } - break; - case 'Z': - if (word.charAt(length - el - 1) != 'f') { - return word.substring(0, length - el); - } - break; - case 'a': - if ((word.charAt(length - el - 1) == 'd') || - (word.charAt(length - el - 1) == 'f') || - (((word.charAt(length - el - 1) == 'h') && - (word.charAt(length - el - 2) == 'p'))) || - (((word.charAt(length - el - 1) == 'h') && - (word.charAt(length - el - 2) == 't'))) || - (word.charAt(length - el - 1) == 'l') || - (((word.charAt(length - el - 1) == 'r') && - (word.charAt(length - el - 2) == 'e'))) || - (((word.charAt(length - el - 1) == 'r') && - (word.charAt(length - el - 2) == 'o'))) || - (((word.charAt(length - el - 1) == 's') && - (word.charAt(length - el - 2) == 'e'))) || - (word.charAt(length - el - 1) == 't')) { - return word.substring(0, length - el); - } - break; - case 'b': - if (m_CompMode) { - if (((length - el == 3 ) && - (!((word.charAt(length - el - 1) == 't') && - (word.charAt(length - el - 2) == 'e') && - (word.charAt(length - el - 3) == 'm')))) || - ((length - el > 3) && - (!((word.charAt(length - el - 1) == 't') && - (word.charAt(length - el - 2) == 's') && - (word.charAt(length - el - 3) == 'y') && - (word.charAt(length - el - 4) == 'r'))))) { - return word.substring(0, length - el); - } - } else { - if ((length - el > 2) && - (!((word.charAt(length - el - 1) == 't') && - (word.charAt(length - el - 2) == 'e') && - (word.charAt(length - el - 3) == 'm'))) && - ((length - el < 4) || - (!((word.charAt(length - el - 1) == 't') && - (word.charAt(length - el - 2) == 's') && - (word.charAt(length - el - 3) == 'y') && - (word.charAt(length - el - 4) == 'r'))))) { - return word.substring(0, length - el); - } - } - break; - case 'c': - if (word.charAt(length - el - 1) == 'l') { - return word.substring(0, length - el); - } - break; - default: - throw new IllegalArgumentException("Fatal error."); - } - } - } - el--; - } - return word; - } - - /** - * Recodes ending of given word. - */ - private String recodeEnding(String word) { - - int lastPos = word.length() - 1; - - // Rule 1 - if (word.endsWith("bb") || - word.endsWith("dd") || - word.endsWith("gg") || - word.endsWith("ll") || - word.endsWith("mm") || - word.endsWith("nn") || - word.endsWith("pp") || - word.endsWith("rr") || - word.endsWith("ss") || - word.endsWith("tt")) { - word = word.substring(0, lastPos); - lastPos--; - } - - // Rule 2 - if (word.endsWith("iev")) { - word = word.substring(0, lastPos - 2).concat("ief"); - } - - // Rule 3 - if (word.endsWith("uct")) { - word = word.substring(0, lastPos - 2).concat("uc"); - lastPos--; - } - - // Rule 4 - if (word.endsWith("umpt")) { - word = word.substring(0, lastPos - 3).concat("um"); - lastPos -= 2; - } - - // Rule 5 - if (word.endsWith("rpt")) { - word = word.substring(0, lastPos - 2).concat("rb"); - lastPos--; - } - - // Rule 6 - if (word.endsWith("urs")) { - word = word.substring(0, lastPos - 2).concat("ur"); - lastPos--; - } - - // Rule 7 - if (word.endsWith("istr")) { - word = word.substring(0, lastPos - 3).concat("ister"); - lastPos++; - } - - // Rule 7a - if (word.endsWith("metr")) { - word = word.substring(0, lastPos - 3).concat("meter"); - lastPos++; - } - - // Rule 8 - if (word.endsWith("olv")) { - word = word.substring(0, lastPos - 2).concat("olut"); - lastPos++; - } - - // Rule 9 - if (word.endsWith("ul")) { - if ((lastPos - 2 < 0) || - ((word.charAt(lastPos - 2) != 'a') && - (word.charAt(lastPos - 2) != 'i') && - (word.charAt(lastPos - 2) != 'o'))) { - word = word.substring(0, lastPos - 1).concat("l"); - lastPos--; - } - } - - // Rule 10 - if (word.endsWith("bex")) { - word = word.substring(0, lastPos - 2).concat("bic"); - } - - // Rule 11 - if (word.endsWith("dex")) { - word = word.substring(0, lastPos - 2).concat("dic"); - } - - // Rule 12 - if (word.endsWith("pex")) { - word = word.substring(0, lastPos - 2).concat("pic"); - } - - // Rule 13 - if (word.endsWith("tex")) { - word = word.substring(0, lastPos - 2).concat("tic"); - } - - // Rule 14 - if (word.endsWith("ax")) { - word = word.substring(0, lastPos - 1).concat("ac"); - } - - // Rule 15 - if (word.endsWith("ex")) { - word = word.substring(0, lastPos - 1).concat("ec"); - } - - // Rule 16 - if (word.endsWith("ix")) { - word = word.substring(0, lastPos - 1).concat("ic"); - } - - // Rule 17 - if (word.endsWith("lux")) { - word = word.substring(0, lastPos - 2).concat("luc"); - } - - // Rule 18 - if (word.endsWith("uad")) { - word = word.substring(0, lastPos - 2).concat("uas"); - } - - // Rule 19 - if (word.endsWith("vad")) { - word = word.substring(0, lastPos - 2).concat("vas"); - } - - // Rule 20 - if (word.endsWith("cid")) { - word = word.substring(0, lastPos - 2).concat("cis"); - } - - // Rule 21 - if (word.endsWith("lid")) { - word = word.substring(0, lastPos - 2).concat("lis"); - } - - // Rule 22 - if (word.endsWith("erid")) { - word = word.substring(0, lastPos - 3).concat("eris"); - } - - // Rule 23 - if (word.endsWith("pand")) { - word = word.substring(0, lastPos - 3).concat("pans"); - } - - // Rule 24 - if (word.endsWith("end")) { - if ((lastPos - 3 < 0) || - (word.charAt(lastPos - 3) != 's')) { - word = word.substring(0, lastPos - 2).concat("ens"); - } - } - - // Rule 25 - if (word.endsWith("ond")) { - word = word.substring(0, lastPos - 2).concat("ons"); - } - - // Rule 26 - if (word.endsWith("lud")) { - word = word.substring(0, lastPos - 2).concat("lus"); - } - - // Rule 27 - if (word.endsWith("rud")) { - word = word.substring(0, lastPos - 2).concat("rus"); - } - - // Rule 28 - if (word.endsWith("her")) { - if ((lastPos - 3 < 0) || - ((word.charAt(lastPos - 3) != 'p') && - (word.charAt(lastPos - 3) != 't'))) { - word = word.substring(0, lastPos - 2).concat("hes"); - } - } - - // Rule 29 - if (word.endsWith("mit")) { - word = word.substring(0, lastPos - 2).concat("mis"); - } - - // Rule 30 - if (word.endsWith("end")) { - if ((lastPos - 3 < 0) || - (word.charAt(lastPos - 3) != 'm')) { - word = word.substring(0, lastPos - 2).concat("ens"); - } - } - - // Rule 31 - if (word.endsWith("ert")) { - word = word.substring(0, lastPos - 2).concat("ers"); - } - - // Rule 32 - if (word.endsWith("et")) { - if ((lastPos - 2 < 0) || - (word.charAt(lastPos - 2) != 'n')) { - word = word.substring(0, lastPos - 1).concat("es"); - } - } - - // Rule 33 - if (word.endsWith("yt")) { - word = word.substring(0, lastPos - 1).concat("ys"); - } - - // Rule 34 - if (word.endsWith("yz")) { - word = word.substring(0, lastPos - 1).concat("ys"); - } - - return word; - } - - /** - * Returns the stemmed version of the given word. - * Word is converted to lower case before stemming. - * - * @param word a string consisting of a single word - */ - public String stem(String word) { - - if (word.length() > 2) { - return recodeEnding(removeEnding(word.toLowerCase())); - } else { - return word.toLowerCase(); - } - } - - /** - * Stems everything in the given string. String - * is converted to lower case before stemming. - */ - public String stemString(String str) { - - StringBuffer result = new StringBuffer(); - int start = -1; - for (int j = 0; j < str.length(); j++) { - char c = str.charAt(j); - if (Character.isLetterOrDigit(c)) { - if (start == -1) { - start = j; - } - } else if (c == '\'') { - if (start == -1) { - result.append(c); - } - } else { - if (start != -1) { - result.append(stem(str.substring(start, j))); - start = -1; - } - result.append(c); - } - } - if (start != -1) { - result.append(stem(str.substring(start, str.length()))); - } - return result.toString(); - } - - /** - * Stems text coming into stdin and writes it to stdout. - */ - public static void main(String[] ops) { - - LovinsStemmer ls = new LovinsStemmer(); - - try { - int num; - StringBuffer wordBuffer = new StringBuffer(); - while ((num = System.in.read()) != -1) { - char c = (char)num; - if (((num >= (int)'A') && (num <= (int)'Z')) || - ((num >= (int)'a') && (num <= (int)'z'))) { - wordBuffer.append(c); - } else { - if (wordBuffer.length() > 0) { - System.out.print(ls.stem(wordBuffer.toString(). - toLowerCase())); - wordBuffer = new StringBuffer(); - } - System.out.print(c); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} - - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmerBridge.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmerBridge.java deleted file mode 100644 index ddf4596b87..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/LovinsStemmerBridge.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -/** - * Bridge class for the Lovins stemming algorithm. - * - * Bridged interface and class: Stemmer, LovinsStemmer. - * - * @author Ant�n Morant - */ -public class LovinsStemmerBridge implements Stemmer { - private LovinsStemmer stemmer; - - public LovinsStemmerBridge() { - this.stemmer = new LovinsStemmer(); - } - - @Override - public String stem(String word) { - return stemmer.stem(word); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmer.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmer.java deleted file mode 100644 index f65ea6ce5d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmer.java +++ /dev/null @@ -1,456 +0,0 @@ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -import java.io.BufferedReader; - -import java.io.BufferedWriter; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.InputStreamReader; -import java.util.StringTokenizer; -import java.util.Vector; - - - -/* author: Christopher O'Neill - date: Sep 2000 - comments: The Paice/Husk Stemmer Translated from Pascal*/ - -/**************************************** - * Class: Paice * * Purpose: Stemming Algorithm * - ****************************************/ -public class PaiceStemmer { - - private Vector ruleTable; // array of rules - private int[] ruleIndex; // index to above - private boolean preStrip; - private String filerules; - - /******************************** - * Method: Paice * * Purpose: init * - ********************************/ - public PaiceStemmer(String rules, String pre) { - ruleTable = new Vector(); - ruleIndex = new int[26]; - preStrip = false; - filerules = rules; - if (pre.equals("/p")) { - preStrip = true; - } - ReadRules(filerules); - } - - /************************************************************************ - * Method: ReadRules * Returns: void * Receives: * Purpose: read rules in - * from stemRules and enters them * into ruleTable, ruleIndex is set up to - * provide * faster access to relevant rules. * - ************************************************************************/ - private void ReadRules(String stemRules) { - int ruleCount = 0; - int j = 0; - - // Acquire each rule in turn. They each take up one line - try { - - //Original code - //FileReader fr = new FileReader(stemRules); - //BufferedReader br = new BufferedReader(fr); - - //ernesto: to avoid abosulte references - InputStreamReader isr = new InputStreamReader(PaiceStemmer.class.getResourceAsStream(stemRules)); - BufferedReader br = new BufferedReader(isr); - String line = " "; - try { - while ((line = br.readLine()) != null) { - ruleCount++; - j = 0; - String rule = new String(); - rule = ""; - while ((j < line.length()) && (line.charAt(j) != ' ')) { - rule += line.charAt(j); - j++; - } - ruleTable.addElement(rule); - } - } catch (Exception e) { - System.err.println("File Error Durring Reading Rules" + e); - System.exit(0); - } - // try to close file, file is not needed again so if can't close - // don't exit - try { - //fr.close(); - isr.close(); - } catch (Exception e) { - System.err.println("Error Closing File During Reading Rules"); - } - } catch (Exception e) { - System.err.println("Input File" + stemRules + "not found"); - System.exit(1); - } - - // Now assign the number of the first rule that starts with each letter - // (if any) to an alphabetic array to facilitate selection of sections - - char ch = 'a'; - for (j = 0; j < 25; j++) { - ruleIndex[j] = 0; - } - - for (j = 0; j < (ruleCount - 1); j++) { - while (((String) ruleTable.elementAt(j)).charAt(0) != ch) { - ch++; - ruleIndex[charCode(ch)] = j; - } - } - } - - /**************************************************************** - * Method: FirstVowel * Returns: int * Recievs: String word, int last * - * Purpose: checks lower-case word for position of * the first vowel * - ****************************************************************/ - private int FirstVowel(String word, int last) { - int i = 0; - if ((i < last) && (!(vowel(word.charAt(i), 'a')))) { - i++; - } - if (i != 0) { - while ((i < last) && (!(vowel(word.charAt(i), word.charAt(i - 1))))) { - i++; - } - } - if (i < last) { - return i; - } - return last; - } - - /************************************************************************ - * Method: stripSuffixes * Returns: String * Recievs: String word * Purpose: - * strips suffix off word and returns stem using * paice stemming algorithm - * * - ************************************************************************/ - private String stripSuffixes(String word) { - // integer variables 1 is positive, 0 undecided, -1 negative equiverlent - // of pun vars positive undecided negative - int ruleok = 0; - int Continue = 0; - // integer varables - int pll = 0; // position of last letter - int xl; // counter for nuber of chars to be replaced and length of - // stemmed word if rule was aplied - int pfv; // poition of first vowel - int prt; // pointer into rule table - int ir; // index of rule - int iw; // index of word - // char variables - char ll; // last letter - // String variables eqiverlent of tenchar variables - String rule = ""; // varlable holding the current rule - String stem = ""; // string holding the word as it is being stemmed this - // is returned as a stemmed word. - // boolean varable - boolean intact = true; // intact if the word has not yet been stemmed to - // determin a requirement of some stemming rules - - // set stem = to word - stem = Clean(word.toLowerCase()); - - // set the position of pll to the last letter in the string - pll = 0; - // move through the word to find the position of the last letter before - // a non letter char - while ((pll + 1 < stem.length()) - && ((stem.charAt(pll + 1) >= 'a') && (stem.charAt(pll + 1) <= 'z'))) { - pll++; - } - - if (pll < 1) { - Continue = -1; - } - // find the position of the first vowel - pfv = FirstVowel(stem, pll); - - iw = stem.length() - 1; - - // repeat until continue == negative ie. -1 - while (Continue != -1) { - Continue = 0; // SEEK RULE FOR A NEW FINAL LETTER - ll = stem.charAt(pll); // last letter - - // Check to see if there are any possible rules for stemming - if ((ll >= 'a') && (ll <= 'z')) { - prt = ruleIndex[charCode(ll)]; // pointer into rule-table - } else { - prt = -1;// 0 is a vaild rule - } - if (prt == -1) { - Continue = -1; // no rule available - } - - if (Continue == 0) - // THERE IS A POSSIBLE RULE (OR RULES) : SEE IF ONE WORKS - { - rule = (String) ruleTable.elementAt(prt); // Take first rule - while (Continue == 0) { - ruleok = 0; - if (rule.charAt(0) != ll) { - // rule-letter changes - Continue = -1; - ruleok = -1; - } - ir = 1; // index of rule: 2nd character - iw = pll - 1; // index of word: next-last letter - - // repeat untill the rule is not undecided find a rule that - // is acceptable - while (ruleok == 0) { - if ((rule.charAt(ir) >= '0') - && (rule.charAt(ir) <= '9')) // rule fully - // matched - { - ruleok = 1; - } else if (rule.charAt(ir) == '*') { - // match only if word intact - if (intact) { - ir = ir + 1; // move forwards along rule - ruleok = 1; - } else { - ruleok = -1; - } - } else if (rule.charAt(ir) != stem.charAt(iw)) { - // mismatch of letters - ruleok = -1; - } else if (iw <= pfv) { - // insufficient stem remains - ruleok = -1; - } else { - // move on to compare next pair of letters - ir = ir + 1; // move forwards along rule - iw = iw - 1; // move backwards along word - } - } - - // if the rule that has just been checked is valid - if (ruleok == 1) { - // CHECK ACCEPTABILITY CONDITION FOR PROPOSED RULE - xl = 0; // count any replacement letters - while (!((rule.charAt(ir + xl + 1) >= '.') && (rule - .charAt(ir + xl + 1) <= '>'))) { - xl++; - } - xl = pll + xl + 48 - ((int) (rule.charAt(ir))); - // position of last letter if rule used - if (pfv == 0) { - // if word starts with vowel... - if (xl < 1) { - // ...minimal stem is 2 letters - ruleok = -1; - } else { - // ruleok=1; as ruleok must alread be positive - // to reach this stage - } - } - // if word start swith consonant... - else if ((xl < 2) | (xl < pfv)) { - ruleok = -1; - // ...minimal stem is 3 letters... - // ...including one or more vowel - } else { - // ruleok=1; as ruleok must alread be positive to - // reach this stage - } - } - // if using the rule passes the assertion tests - if (ruleok == 1) { - // APPLY THE MATCHING RULE - intact = false; - // move end of word marker to position... - // ... given by the numeral. - pll = pll + 48 - ((int) (rule.charAt(ir))); - ir++; - stem = stem.substring(0, (pll + 1)); - - // append any letters following numeral to the word - while ((ir < rule.length()) - && (('a' <= rule.charAt(ir)) && (rule - .charAt(ir) <= 'z'))) { - stem += rule.charAt(ir); - ir++; - pll++; - } - - // if rule ends with '.' then terminate - if ((rule.charAt(ir)) == '.') { - Continue = -1; - } else { - // if rule ends with '>' then Continue - Continue = 1; - } - } else { - // if rule did not match then look for another - prt = prt + 1; // move to next rule in RULETABLE - rule = (String) ruleTable.elementAt(prt); - if (rule.charAt(0) != ll) { - // rule-letter changes - Continue = -1; - } - } - } - } - } - return stem; - } - - /**************************************************************** - * Method: vowel * Returns: boolean * Recievs: char ch, char prev * Purpose: - * determin whether ch is a vowel or not * uses prev determination when ch - * == y * - ****************************************************************/ - private boolean vowel(char ch, char prev) { - switch (ch) { - case 'a': - case 'e': - case 'i': - case 'o': - case 'u': - return true; - case 'y': { - switch (prev) { - case 'a': - case 'e': - case 'i': - case 'o': - case 'u': - return false; - default: - return true; - } - } - default: - return false; - } - } - - /**************************************************************** - * Method: charCode * Returns: int * Recievs: char ch * Purpose: returns the - * relavent array index for * specified char 'a' to 'z' * - ****************************************************************/ - private int charCode(char ch) { - return ((int) ch) - 97; - } - - /******************************************************** - * Method: stripPrefixes * Returns: String * Recievs: String str * Purpose: - * removes prefixes so that suffix * removal can comence * - ********************************************************/ - private String stripPrefixes(String str) { - String[] prefixes = { "kilo", "micro", "milli", "intra", "ultra", - "mega", "nano", "pico", "pseudo" }; - - int last = prefixes.length; - - for (int i = 0; i < last; i++) { - if ((str.startsWith(prefixes[i])) - && (str.length() > prefixes[i].length())) { - str = str.substring(prefixes[i].length()); - return str; - } - } - return str; - } - - /******************************************************** - * Method: Clean * Returns: String * Recievs: String str * Purpose: remove - * all non letter or digit * characters from srt and return * - ********************************************************/ - private String Clean(String str) { - int last = str.length(); - String temp = ""; - for (int i = 0; i < last; i++) { - if ((str.charAt(i) >= 'a') & (str.charAt(i) <= 'z')) { - temp += str.charAt(i); - } - } - return temp; - } // clean - - /*************************** PUBLIC METHODS ****************/ - /**************************************************************** - * Method: stripAffixes * Returns: String * Recievs: String str * Purpose: - * prepares string and calls stripPrefixes * and stripSuffixes * - ****************************************************************/ - public String stripAffixes(String str) { - // str = str.toLowerCase(); //change all letters in the input to - // lowercase - // str = Clean(str); // remove all chars from string that are not a - // letter or a digit (why digit?) - if ((str.length() > 3) && (preStrip)) // if str's length is greater than - // 2 then remove prefixes - { - str = stripPrefixes(str); - } - if (str.length() > 3) // if str is not null remove suffix - { - str = stripSuffixes(str); - } - return str; - } // stripAffixes - - // ***************MAIN METHOD*************** - /******************************************************** - * Method: main * Returns: void * Recives: String args[] input file * - * Purpose: creates instance of Paice and * calls stripAffixes * - ********************************************************/ - public static void main(String args[]) { - PaiceStemmer p = new PaiceStemmer(args[2], args[3]); - String text; - StringTokenizer line = new StringTokenizer(""); - String output = ""; - String fileOut = args[1]; - String fileIn = args[0]; - - try { - FileWriter fw = new FileWriter(fileOut); - BufferedWriter bw = new BufferedWriter(fw); - - FileReader fr = new FileReader(fileIn); - BufferedReader br = new BufferedReader(fr); - try { - while ((text = br.readLine()) != null) { - line = new StringTokenizer(text); - try { - while (line.hasMoreTokens()) { - // read word from line and stem word - String word = new String(); - word = line.nextToken(); - bw.write(p.stripAffixes(word) + " "); - } - bw.newLine(); - } catch (Exception e) { - System.err.println(e); - } - } - } catch (Exception e) { - System.err.println("File Error Durring Reading " + e); - System.exit(0); - } - // try to close file, file is not needed again so if can't close - // don't exit - try { - fr.close(); - } catch (Exception e) { - System.err.println("Error Closing File During Reading " + e); - } - try { - bw.close(); - } catch (Exception e) { - System.err.println(e); - } - - } catch (Exception e) { - System.err.println("File Not Found " + args[0] + " exception " + e); - System.exit(1); - } - }// main -} // class - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmerBridge.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmerBridge.java deleted file mode 100644 index 4863df61d7..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PaiceStemmerBridge.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -/** - * Bridge class for the Paice/Husk stemming algorithm. - * - * Bridged interface and class: Stemmer, PaiceStemmer. - * - * Note: The algorithm offers two variants: stripping prefixes - * or leaving them. This two options are selected in the - * PaiceStemmerBridge class through the constructor. - * The set of considered prefixes is: - * { "kilo", "micro", "milli", "intra", "ultra", - * "mega", "nano", "pico", "pseudo" } - * (from the method stripPrefixes in PaiceStemmer) - * - * @author Ant�n Morant - */ -public class PaiceStemmerBridge implements Stemmer { - - //Avoid absolute references - //public static final String STEMRULES_FILE = "./src/uk/ac/ox/cs/stemming/stemrules.txt"; - public static final String STEMRULES_FILE = "stemrules.txt"; - - private PaiceStemmer stemmer; - - public PaiceStemmerBridge(boolean stripPreffixes) { - if(stripPreffixes) - this.stemmer = new PaiceStemmer(STEMRULES_FILE, "/p"); - else - this.stemmer = new PaiceStemmer(STEMRULES_FILE, ""); - } - - @Override - public String stem(String word) { - return stemmer.stripAffixes(word); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmer.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmer.java deleted file mode 100644 index cad17435cb..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmer.java +++ /dev/null @@ -1,637 +0,0 @@ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -import java.io.*; - - - -/* - - Porter stemmer in Java. The original paper is in - - Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, - no. 3, pp 130-137, - - See also http://www.tartarus.org/~martin/PorterStemmer - - History: - - Release 1 - - Bug 1 (reported by Gonzalo Parra 16/10/99) fixed as marked below. - The words 'aed', 'eed', 'oed' leave k at 'a' for step 3, and b[k-1] - is then out outside the bounds of b. - - Release 2 - - Similarly, - - Bug 2 (reported by Steve Dyrdahl 22/2/00) fixed as marked below. - 'ion' by itself leaves j = -1 in the test for 'ion' in step 5, and - b[j] is then outside the bounds of b. - - Release 3 - - Considerably revised 4/9/00 in the light of many helpful suggestions - from Brian Goetz of Quiotix Corporation (brian@quiotix.com). - - Release 4 - - */ - -/** - * PorterStemmer, implementing the Porter Stemming Algorithm - * - * The PorterStemmer class transforms a word into its root form. The input word can be - * provided a character at time (by calling add()), or at once by calling one of - * the various stem(something) methods. - * - * Note: Renamed to PorterStemmer from the original Stemmer class. - */ -public class PorterStemmer { - private char[] b; - private int i, /* offset into b */ - i_end, /* offset to end of stemmed word */ - j, k; - private static final int INC = 50; - - /* unit of size whereby b is increased */ - public PorterStemmer() { - b = new char[INC]; - i = 0; - i_end = 0; - } - - /** - * Add a character to the word being stemmed. When you are finished adding - * characters, you can call stem(void) to stem the word. - */ - - public void add(char ch) { - if (i == b.length) { - char[] new_b = new char[i + INC]; - for (int c = 0; c < i; c++) - new_b[c] = b[c]; - b = new_b; - } - b[i++] = ch; - } - - /** - * Adds wLen characters to the word being stemmed contained in a portion of - * a char[] array. This is like repeated calls of add(char ch), but faster. - */ - - public void add(char[] w, int wLen) { - if (i + wLen >= b.length) { - char[] new_b = new char[i + wLen + INC]; - for (int c = 0; c < i; c++) - new_b[c] = b[c]; - b = new_b; - } - for (int c = 0; c < wLen; c++) - b[i++] = w[c]; - } - - /** - * After a word has been stemmed, it can be retrieved by toString(), or a - * reference to the internal buffer can be retrieved by getResultBuffer and - * getResultLength (which is generally more efficient.) - */ - public String toString() { - return new String(b, 0, i_end); - } - - /** - * Returns the length of the word resulting from the stemming process. - */ - public int getResultLength() { - return i_end; - } - - /** - * Returns a reference to a character buffer containing the results of the - * stemming process. You also need to consult getResultLength() to determine - * the length of the result. - */ - public char[] getResultBuffer() { - return b; - } - - /* cons(i) is true <=> b[i] is a consonant. */ - - private final boolean cons(int i) { - switch (b[i]) { - case 'a': - case 'e': - case 'i': - case 'o': - case 'u': - return false; - case 'y': - return (i == 0) ? true : !cons(i - 1); - default: - return true; - } - } - - /* - * m() measures the number of consonant sequences between 0 and j. if c is a - * consonant sequence and v a vowel sequence, and <..> indicates arbitrary - * presence, - * - * gives 0 vc gives 1 vcvc gives 2 vcvcvc gives 3 - * .... - */ - - private final int m() { - int n = 0; - int i = 0; - while (true) { - if (i > j) - return n; - if (!cons(i)) - break; - i++; - } - i++; - while (true) { - while (true) { - if (i > j) - return n; - if (cons(i)) - break; - i++; - } - i++; - n++; - while (true) { - if (i > j) - return n; - if (!cons(i)) - break; - i++; - } - i++; - } - } - - /* vowelinstem() is true <=> 0,...j contains a vowel */ - - private final boolean vowelinstem() { - int i; - for (i = 0; i <= j; i++) - if (!cons(i)) - return true; - return false; - } - - /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ - - private final boolean doublec(int j) { - if (j < 1) - return false; - if (b[j] != b[j - 1]) - return false; - return cons(j); - } - - /* - * cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant - * and also if the second c is not w,x or y. this is used when trying to - * restore an e at the end of a short word. e.g. - * - * cav(e), lov(e), hop(e), crim(e), but snow, box, tray. - */ - - private final boolean cvc(int i) { - if (i < 2 || !cons(i) || cons(i - 1) || !cons(i - 2)) - return false; - { - int ch = b[i]; - if (ch == 'w' || ch == 'x' || ch == 'y') - return false; - } - return true; - } - - private final boolean ends(String s) { - int l = s.length(); - int o = k - l + 1; - if (o < 0) - return false; - for (int i = 0; i < l; i++) - if (b[o + i] != s.charAt(i)) - return false; - j = k - l; - return true; - } - - /* - * setto(s) sets (j+1),...k to the characters in the string s, readjusting - * k. - */ - - private final void setto(String s) { - int l = s.length(); - int o = j + 1; - for (int i = 0; i < l; i++) - b[o + i] = s.charAt(i); - k = j + l; - } - - /* r(s) is used further down. */ - - private final void r(String s) { - if (m() > 0) - setto(s); - } - - /* - * step1() gets rid of plurals and -ed or -ing. e.g. - * - * caresses -> caress ponies -> poni ties -> ti caress -> caress cats -> cat - * - * feed -> feed agreed -> agree disabled -> disable - * - * matting -> mat mating -> mate meeting -> meet milling -> mill messing -> - * mess - * - * meetings -> meet - */ - - private final void step1() { - if (b[k] == 's') { - if (ends("sses")) - k -= 2; - else if (ends("ies")) - setto("i"); - else if (b[k - 1] != 's') - k--; - } - if (ends("eed")) { - if (m() > 0) - k--; - } else if ((ends("ed") || ends("ing")) && vowelinstem()) { - k = j; - if (ends("at")) - setto("ate"); - else if (ends("bl")) - setto("ble"); - else if (ends("iz")) - setto("ize"); - else if (doublec(k)) { - k--; - { - int ch = b[k]; - if (ch == 'l' || ch == 's' || ch == 'z') - k++; - } - } else if (m() == 1 && cvc(k)) - setto("e"); - } - } - - /* step2() turns terminal y to i when there is another vowel in the stem. */ - - private final void step2() { - if (ends("y") && vowelinstem()) - b[k] = 'i'; - } - - /* - * step3() maps double suffices to single ones. so -ization ( = -ize plus - * -ation) maps to -ize etc. note that the string before the suffix must - * give m() > 0. - */ - - private final void step3() { - if (k == 0) - return; /* For Bug 1 */ - switch (b[k - 1]) { - case 'a': - if (ends("ational")) { - r("ate"); - break; - } - if (ends("tional")) { - r("tion"); - break; - } - break; - case 'c': - if (ends("enci")) { - r("ence"); - break; - } - if (ends("anci")) { - r("ance"); - break; - } - break; - case 'e': - if (ends("izer")) { - r("ize"); - break; - } - break; - case 'l': - if (ends("bli")) { - r("ble"); - break; - } - if (ends("alli")) { - r("al"); - break; - } - if (ends("entli")) { - r("ent"); - break; - } - if (ends("eli")) { - r("e"); - break; - } - if (ends("ousli")) { - r("ous"); - break; - } - break; - case 'o': - if (ends("ization")) { - r("ize"); - break; - } - if (ends("ation")) { - r("ate"); - break; - } - if (ends("ator")) { - r("ate"); - break; - } - break; - case 's': - if (ends("alism")) { - r("al"); - break; - } - if (ends("iveness")) { - r("ive"); - break; - } - if (ends("fulness")) { - r("ful"); - break; - } - if (ends("ousness")) { - r("ous"); - break; - } - break; - case 't': - if (ends("aliti")) { - r("al"); - break; - } - if (ends("iviti")) { - r("ive"); - break; - } - if (ends("biliti")) { - r("ble"); - break; - } - break; - case 'g': - if (ends("logi")) { - r("log"); - break; - } - } - } - - /* step4() deals with -ic-, -full, -ness etc. similar strategy to step3. */ - - private final void step4() { - switch (b[k]) { - case 'e': - if (ends("icate")) { - r("ic"); - break; - } - if (ends("ative")) { - r(""); - break; - } - if (ends("alize")) { - r("al"); - break; - } - break; - case 'i': - if (ends("iciti")) { - r("ic"); - break; - } - break; - case 'l': - if (ends("ical")) { - r("ic"); - break; - } - if (ends("ful")) { - r(""); - break; - } - break; - case 's': - if (ends("ness")) { - r(""); - break; - } - break; - } - } - - /* step5() takes off -ant, -ence etc., in context vcvc. */ - - private final void step5() { - if (k == 0) - return; /* for Bug 1 */ - switch (b[k - 1]) { - case 'a': - if (ends("al")) - break; - return; - case 'c': - if (ends("ance")) - break; - if (ends("ence")) - break; - return; - case 'e': - if (ends("er")) - break; - return; - case 'i': - if (ends("ic")) - break; - return; - case 'l': - if (ends("able")) - break; - if (ends("ible")) - break; - return; - case 'n': - if (ends("ant")) - break; - if (ends("ement")) - break; - if (ends("ment")) - break; - /* element etc. not stripped before the m */ - if (ends("ent")) - break; - return; - case 'o': - if (ends("ion") && j >= 0 && (b[j] == 's' || b[j] == 't')) - break; - /* j >= 0 fixes Bug 2 */ - if (ends("ou")) - break; - return; - /* takes care of -ous */ - case 's': - if (ends("ism")) - break; - return; - case 't': - if (ends("ate")) - break; - if (ends("iti")) - break; - return; - case 'u': - if (ends("ous")) - break; - return; - case 'v': - if (ends("ive")) - break; - return; - case 'z': - if (ends("ize")) - break; - return; - default: - return; - } - if (m() > 1) - k = j; - } - - /* step6() removes a final -e if m() > 1. */ - - private final void step6() { - j = k; - if (b[k] == 'e') { - int a = m(); - if (a > 1 || a == 1 && !cvc(k - 1)) - k--; - } - if (b[k] == 'l' && doublec(k) && m() > 1) - k--; - } - - /** - * Stem the word placed into the Stemmer buffer through calls to add(). - * Returns true if the stemming process resulted in a word different from - * the input. You can retrieve the result with - * getResultLength()/getResultBuffer() or toString(). - */ - public void stem() { - k = i - 1; - if (k > 1) { - step1(); - step2(); - step3(); - step4(); - step5(); - step6(); - } - i_end = k + 1; - i = 0; - } - - /** - * Test program for demonstrating the Stemmer. It reads text from a a list - * of files, stems each word, and writes the result to standard output. Note - * that the word stemmed is expected to be in lower case: forcing lower case - * must be done outside the Stemmer class. Usage: Stemmer file-name - * file-name ... - */ - public static void main(String[] args) { - char[] w = new char[501]; - PorterStemmer s = new PorterStemmer(); - for (int i = 0; i < args.length; i++) - try { - FileInputStream in = new FileInputStream(args[i]); - - try { - while (true) - - { - int ch = in.read(); - if (Character.isLetter((char) ch)) { - int j = 0; - while (true) { - ch = Character.toLowerCase((char) ch); - w[j] = (char) ch; - if (j < 500) - j++; - ch = in.read(); - if (!Character.isLetter((char) ch)) { - /* to test add(char ch) */ - for (int c = 0; c < j; c++) - s.add(w[c]); - - /* or, to test add(char[] w, int j) */ - /* s.add(w, j); */ - - s.stem(); - { - String u; - - /* and now, to test toString() : */ - u = s.toString(); - - /* - * to test getResultBuffer(), - * getResultLength() : - */ - /* - * u = new String(s.getResultBuffer(), - * 0, s.getResultLength()); - */ - - System.out.print(u); - } - break; - } - } - } - if (ch < 0) - break; - System.out.print((char) ch); - } - } catch (IOException e) { - System.out.println("error reading " + args[i]); - break; - } - } catch (FileNotFoundException e) { - System.out.println("file " + args[i] + " not found"); - break; - } - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmerBridge.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmerBridge.java deleted file mode 100644 index 15a6c9b2ab..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/PorterStemmerBridge.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -/** - * Bridge class for the Porter stemming algorithm. - * - * Bridged interface and class: Stemmer, PorterStemmer. - * - * @author Ant�n Morant - */ -public class PorterStemmerBridge implements Stemmer { - private PorterStemmer stemmer; - - public PorterStemmerBridge() { - this.stemmer = new PorterStemmer(); - } - - @Override - public String stem(String word) { - stemmer.add(word.toCharArray(), word.length()); - stemmer.stem(); - return stemmer.toString(); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/Stemmer.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/Stemmer.java deleted file mode 100644 index 92e66782e7..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/Stemmer.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -/** - * Interface for lexical stemming algorithms. - * - * @author Ant�n Morant - */ -public interface Stemmer { - - public String stem(String word); - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerManager.java deleted file mode 100644 index d5426dcb9a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerManager.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - - -public class StemmerManager { - - private static Stemmer stemmer; - - public final static int STEMMER_PORTER = 0; - public final static int STEMMER_PORTER2 = 1; - public final static int STEMMER_LOVINS = 2; - public final static int STEMMER_LOVINSITER = 3; - public final static int STEMMER_PAICE = 4; - - private static int stemmerType; - - public static void setStemmerType(int aStemmerType) { - stemmerType = aStemmerType; - stemmer = null; //So that the old type Stemmer object is replaced by getStemmer() - } - - public static Stemmer getStemmer() { - if(stemmer==null) { - switch(stemmerType) { - case STEMMER_PORTER: - stemmer = new PorterStemmerBridge(); - break; - //case STEMMER_PORTER2: - // stemmer = new Porter2StemmerBridge(); - // break; - case STEMMER_LOVINS: - stemmer = new LovinsStemmerBridge(); - break; - case STEMMER_LOVINSITER: - stemmer = new LovinsIterStemmerBridge(); - break; - case STEMMER_PAICE: - stemmer = new PaiceStemmerBridge(true); - break; - default: - throw new IllegalStateException("Invalid value for Config.stemmerType"); - } - } - return stemmer; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerTester.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerTester.java deleted file mode 100644 index 8c811eed8b..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/StemmerTester.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.PrintWriter; -import java.util.Set; -import java.util.TreeSet; - - - -/** - * Input: file voc.txt, located in the src/stemming path and - * containing one word per line. - * - * Output: files stemmed_voc_i.txt (for i=0,1,...), located in - * the project path and containing one stemmed word per line. - * - * @author Ant�n Morant - */ -public class StemmerTester { - - public static final String PATH = "./files/test/"; - public static final String FILE_NAME = "voc.txt"; - - - public static void main(String[] args) { - //Include here new stemmers to be tested - Stemmer[] stemmers = { - new PorterStemmerBridge(), - new LovinsStemmerBridge(), - new LovinsIterStemmerBridge(), - new PaiceStemmerBridge(false), - new PaiceStemmerBridge(true) - }; - PrintWriter[] outs = new PrintWriter[stemmers.length]; - PrintWriter diffOut; - - try { - - //Open input file - BufferedReader in = new BufferedReader(new FileReader(PATH + FILE_NAME)); - //Open output files - for(int i=0; i stemmedVersionsSet = new TreeSet(); - - //Stem the word with each stemmer, and print result to corresponding file. - for(int i=0; i 1) { - diffOut.print(line + "\t|"); - for(String version : stemmedVersions) { - diffOut.print(" " + version); - } - diffOut.println(); - } - } - - //Close output files - for(int i=0; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -import java.io.IOException; - -public class StemmingLauncher { - - public final static String PATH = "./files/"; - - public static void main(String[] args) { - - /* - * Enter here input files with words to be stemmed. - * File format: One word per line. - * - * Note: Extension is assumed to be ".txt", otherwise output file name - * must be changed later in this method. - */ - String[] inputFiles = new String[] { - "FMA2.0_bag_of_words.txt", - "NCI08.05d_bag_of_words.txt", - //"SNMD20090131_bag_of_words.txt", - //"nci_anatomy_2010_bag_of_words.txt", - //"mouse_anatomy_2010_bag_of_words.txt" - }; - - - /* - * Change here Stemming algorithm to be used if desired - * by passing a different object to the FileStemmer constructor. - */ - - FileStemmer fs = new FileStemmer(new PaiceStemmerBridge(true)); - //FileStemmer fs = new FileStemmer(new LovinsIterStemmerBridge()); - - for(int i=0; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.lexicon.stemming; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class StemmingMapLoader { - - private Map stemmingMap; - - public Map getStemmingMap() { - return stemmingMap; - } - - public void loadStemmingMap(String file) throws IOException { - stemmingMap = new HashMap(); - BufferedReader in = new BufferedReader(new FileReader(file)); - - while(in.ready()) { - String line = in.readLine(); - String[] parts = line.split("\\" + FileStemmer.SEPARATOR_CHAR); - if(parts.length == 2) { - stemmingMap.put(parts[0], parts[1]); - } else { - //Ignore line silently, or include next lines to report error: - //System.err.println("StemmingMapLoader: Wrong input line format in file " + file); - //System.err.println("Line will be ignored:"); - //System.err.println(line); - } - } - - in.close(); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/stemrules.txt b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/stemrules.txt deleted file mode 100644 index 4ded6995d6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stemming/stemrules.txt +++ /dev/null @@ -1,116 +0,0 @@ -ai*2. { -ia > - if intact } -a*1. { -a > - if intact } -bb1. { -bb > -b } -city3s. { -ytic > -ys } -ci2> { -ic > - } -cn1t> { -nc > -nt } -dd1. { -dd > -d } -dei3y> { -ied > -y } -deec2ss. { -ceed > -cess } -dee1. { -eed > -ee } -de2> { -ed > - } -dooh4> { -hood > - } -e1> { -e > - } -feil1v. { -lief > -liev } -fi2> { -if > - } -gni3> { -ing > - } -gai3y. { -iag > -y } -ga2> { -ag > - } -gg1. { -gg > -g } -ht*2. { -th > - if intact } -hsiug5ct. { -guish > -ct } -hsi3> { -ish > - } -i*1. { -i > - if intact } -i1y> { -i > -y } -ji1d. { -ij > -id -- see nois4j> & vis3j> } -juf1s. { -fuj > -fus } -ju1d. { -uj > -ud } -jo1d. { -oj > -od } -jeh1r. { -hej > -her } -jrev1t. { -verj > -vert } -jsim2t. { -misj > -mit } -jn1d. { -nj > -nd } -j1s. { -j > -s } -lbaifi6. { -ifiabl > - } -lbai4y. { -iabl > -y } -lba3> { -abl > - } -lbi3. { -ibl > - } -lib2l> { -bil > -bl } -lc1. { -cl > c } -lufi4y. { -iful > -y } -luf3> { -ful > - } -lu2. { -ul > - } -lai3> { -ial > - } -lau3> { -ual > - } -la2> { -al > - } -ll1. { -ll > -l } -mui3. { -ium > - } -mu*2. { -um > - if intact } -msi3> { -ism > - } -mm1. { -mm > -m } -nois4j> { -sion > -j } -noix4ct. { -xion > -ct } -noi3> { -ion > - } -nai3> { -ian > - } -na2> { -an > - } -nee0. { protect -een } -ne2> { -en > - } -nn1. { -nn > -n } -pihs4> { -ship > - } -pp1. { -pp > -p } -re2> { -er > - } -rae0. { protect -ear } -ra2. { -ar > - } -ro2> { -or > - } -ru2> { -ur > - } -rr1. { -rr > -r } -rt1> { -tr > -t } -rei3y> { -ier > -y } -sei3y> { -ies > -y } -sis2. { -sis > -s } -si2> { -is > - } -ssen4> { -ness > - } -ss0. { protect -ss } -suo3> { -ous > - } -su*2. { -us > - if intact } -s*1> { -s > - if intact } -s0. { -s > -s } -tacilp4y. { -plicat > -ply } -ta2> { -at > - } -tnem4> { -ment > - } -tne3> { -ent > - } -tna3> { -ant > - } -tpir2b. { -ript > -rib } -tpro2b. { -orpt > -orb } -tcud1. { -duct > -duc } -tpmus2. { -sumpt > -sum } -tpec2iv. { -cept > -ceiv } -tulo2v. { -olut > -olv } -tsis0. { protect -sist } -tsi3> { -ist > - } -tt1. { -tt > -t } -uqi3. { -iqu > - } -ugo1. { -ogu > -og } -vis3j> { -siv > -j } -vie0. { protect -eiv } -vi2> { -iv > - } -ylb1> { -bly > -bl } -yli3y> { -ily > -y } -ylp0. { protect -ply } -yl2> { -ly > - } -ygo1. { -ogy > -og } -yhp1. { -phy > -ph } -ymo1. { -omy > -om } -ypo1. { -opy > -op } -yti3> { -ity > - } -yte3> { -ety > - } -ytl2. { -lty > -l } -yrtsi5. { -istry > - } -yra3> { -ary > - } -yro3> { -ory > - } -yfi3. { -ify > - } -ycn2t> { -ncy > -nt } -yca3> { -acy > - } -zi2> { -iz > - } -zy1s. { -yz > -ys } -end0. \ No newline at end of file diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stopwords.txt b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stopwords.txt deleted file mode 100644 index 0794c584fc..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/lexicon/stopwords.txt +++ /dev/null @@ -1,779 +0,0 @@ -#a -#b -#c -#d -#e -#f -#g -#h -#i -#j -#k -#l -#m -#n -#o -#p -#q -#r -#s -#t -#u -#v -#w -#x -#y -#z -able -about -#above -abroad -according -accordingly -across -after -afterwards -again -against -ago -ahead -all -almost -alone -along -already -also -although -always -among -an -and -another -#anterior -any -anybody -anyone -anything -anywhere -apart -appear -appreciate -appropriate -are -#area -#areas -around -as -ask -asked -asking -asks -associated -at -available -away -#back -backed -backing -backs -backward -backwards -be -became -because -become -becomes -been -beforehand -before -began -behind -being -beings -#below -beside -besides -best -better -between -beyond -#big -#bigger -both -brief -but -by -came -can -cannot -#case -#cases -caption -cause -causes -changes -certain -certainly -#clear -clearly -come -comes -concerning -consequently -consider -considering -contain -containing -contains -corresponding -could -course -currently -dare -definitely -described -despite -did -differ -different -differently -directly -do -does -done -#down -downed -downing -downs -during -each -#early -#eight -either -else -elsewhere -end -ended -ending -ends -enough -even -evenly -ever -every -everybody -everyone -everything -everywhere -exactly -example -except -fact -facts -fairly -far -farther -felt -few -#fifth -#first -#five -find -finds -followed -following -follows -for -forever -former -formerly -forth -forward -found -#four -#fourth -from -full -fully -further -furthermore -furthered -furthering -furthers -gave -#general -#generally -get -gets -give -given -gives -go -goes -going -good -goods -got -got -gotten -#great -#greater -greatest -greetings -#group -#grouped -#grouping -#groups -had -#half -happens -hardly -has -have -having -he -help -hence -her -here -hereafter -hereby -herein -hereupon -herself -#high -#higher -highest -him -himself -his -hither -hopefully -how -howbeit -however -hundred -if -ignored -immediate -important -in -indeed -indicate -indicated -indicates -#inferior -#inner -#inside -insofar -instead -interest -interested -interesting -interests -into -inward -is -it -its -itself -just -keep -keeps -kind -knew -know -known -knows -#large -largely -#last -later -latest -least -#left -less -let -lets -like -likely -like -liked -likely -likewise -#little -#long -longer -longest -look -looking -looks -#low -#lower -made -mainly -make -making -#man -many -may -me -#mean -meantime -meanwhile -#member -#members -#men -might -mine -minus -miss -more -moreover -most -mostly -mr -mrs -much -must -my -myself -name -namely -#near -nearly -#necessary -need -needed -needing -needs -neither -never -nevertheless -new -newer -newest -next -#nine -ninety -#no -nobody -noc -#non -nonetheless -noone -nor -normally -nos -#not -nothing -novel -now -nowhere -npdid -#number -#numbers -obviously -of -off -often -old -older -oldest -on -once -#one -only -onto -#opposite -#open -#opened -#opening -#opens -or -#order -#ordered -#ordering -#orders -other -others -otherwise -ought -our -out -over -overview -#pair -#pairs -#part -parted -particular -particularly -parting -#parts -past -per -perhaps -#place -#places -plus -#point -pointed -pointing -#points -possible -#posterior -#present -presented -presenting -#presents -probably -#problem -#problems -provided -provides -put -puts -quite -rather -really -reasonably -recent -recently -regarding -regardless -regards -#region -#regions -relatively -respectively -#right -#room -#rooms -#round -said -same -saw -say -says -#second -secondly -seconds -see -seem -seemed -seeming -seems -sees -#self -selves -#sensible -sent -#serious -seriously -#set -#sets -#seven -#several -shall -she -should -show -showed -showing -shows -#side -#sides -since -#six -#sixth -#small -#smaller -#smallest -so -some -somebody -someday -somehow -someone -something -sometime -sometimes -somewhat -somewhere -soon -sorry -specified -specify -specifying -#state -#states -still -still -#structure -#structures -sub -such -#superior -sure -take -taken -tell -tends -than -thank -thanks -thanx -that -the -their -them -then -there -thereafter -thereby -therefore -theres -thereupon -these -they -thing -things -think -thinks -#third -this -those -though -thought -thoughts -#three -through -thus -to -today -together -too -took -toward -towards -trait -tried -tries -truly -try -trying -turn -turned -turning -turns -twice -#two -under -underneath -undoing -unfortunately -unless -unlike -unlikely -until -unto -up -upon -upwards -us -use -used -useful -uses -using -usually -value -various -versus -very -#via -want -wanted -wanting -wants -was -way -ways -we -welcome -well -wells -went -were -what -whatever -when -whence -where -whereafter -whereas -whereby -wherein -whereupon -wherever -whether -which -whichever -while -whilst -whither -who -whoever -whole -whose -why -will -with -within -without -work -worked -working -works -would -year -years -yes -yet -you -#young -younger -youngest -your -yours -yourself -yourselves -#zero -#French -alors -au -aucuns -aussi -autre -avant -avec -avoir -bon -car -ce -cela -ces -ceux -chaque -ci -comme -comment -dans -des -du -dedans -dehors -depuis -deux -devrait -doit -donc -dos -droite -début -elle -elles -en -encore -essai -est -et -eu -fait -faites -#fois -font -force -haut -hors -ici -il -ils -je -juste -la -le -les -leur -là -ma -maintenant -mais -mes -mine -moins -mon -mot -même -ni -nommés -notre -nous -nouveaux -ou -où -par -parce -parole -pas -personnes -peut -peu -pièce -plupart -pour -pourquoi -quand -que -quel -quelle -quelles -quels -qui -sa -sans -ses -seulement -si -sien -son -sont -sous -soyez -sujet -sur -ta -tandis -tellement -tels -tes -ton -tous -tout -trop -très -tu -valeur -voie -voient -vont -votre -vous -vu -ça -étaient -état -étions -été -être \ No newline at end of file diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/CandidateMappingManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/CandidateMappingManager.java deleted file mode 100644 index f595521013..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/CandidateMappingManager.java +++ /dev/null @@ -1,3229 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.mappings; - - -import java.util.LinkedList; - -import java.util.Calendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.oaei.oracle.OracleManager; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.SIAssessment.DataPropertyMappingAssessment; -import uk.ac.ox.krr.logmap2.SIAssessment.ObjectPropertyMappingAssessment; -import uk.ac.ox.krr.logmap2.SIAssessment.InstanceMatchingAssessment; -//import uk.ac.ox.krr.logmap2.backknowlede.ManageBackgroundKnowledge; -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.indexing.OntologyProcessing; -import uk.ac.ox.krr.logmap2.indexing.entities.ClassIndex; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectIdentifiers; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.utilities.Lib; -import uk.ac.ox.krr.logmap2.statistics.*; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * - * This class extracts the anchors by intersecting the lexical inverted files - * associated with the respective ontologies. It will also manage the discovery of - * further mappings - * - * @author Ernesto Jimenez-Ruiz - * Created: Dec 13, 2011 - * - */ -public class CandidateMappingManager extends MappingManager { - - - private OntologyProcessing onto_process1; - private OntologyProcessing onto_process2; - - private Set> if_exact_intersection; - private Set> if_stemming_intersection; - private Set> if_weak_intersection; - - private Set> if_exact_intersection4data_prop; - - private Set> if_exact_intersection4obj_prop; - - private Set> if_exact_intersection4individuals; - private Set if_weak_intersection4individuals; - private Set if_roleassertions_intersection4individuals; - - private Set input_mappings = new HashSet(); - - private int IF_VALIDATED=0; - private int IF_EXACT=1; - private int IF_STEMMING=2; - private int IF_WEAK=3; - - - //Statistics: which mappings should be required to ask to the user - /*private int include=0; - private int exclude=0; - private int ask=0; - - private int include_good=0; - private int exclude_good=0; - private int ask_good=0;*/ - - /** - * - * @param index - * @param onto_process1 - * @param onto_process2 - */ - public CandidateMappingManager( - IndexManager index, - OntologyProcessing onto_process1, - OntologyProcessing onto_process2){ - - this.index=index; - this.onto_process1=onto_process1; - this.onto_process2=onto_process2; - - } - - - - public void clearIntersectedInvertedFilesExact(){ - if_exact_intersection.clear(); - - } - - - public void clearIntersectedInvertedFilesStemmingAndWeak(){ - if_stemming_intersection.clear(); - if_weak_intersection.clear(); - } - - - public void clearIntersectedInvertedFiles4Properties(){ - if_exact_intersection4data_prop.clear(); - if_exact_intersection4obj_prop.clear(); - - } - - - - /** - * Intersects exact and stemming IFs, extract IF weak and intersects them - */ - public void intersectInvertedFiles(){ - - //INTERSECTION - - //DATA PROP IF - if_exact_intersection4data_prop = onto_process1.getInvertedFileExactMatching4DataProp().keySet(); - if_exact_intersection4data_prop.retainAll(onto_process2.getInvertedFileExactMatching4DataProp().keySet()); - onto_process2.getInvertedFileExactMatching4DataProp().keySet().retainAll(if_exact_intersection4data_prop); - - //OBJ PROP IF - if_exact_intersection4obj_prop = onto_process1.getInvertedFileExactMatching4ObjProp().keySet(); - if_exact_intersection4obj_prop.retainAll(onto_process2.getInvertedFileExactMatching4ObjProp().keySet()); - onto_process2.getInvertedFileExactMatching4ObjProp().keySet().retainAll(if_exact_intersection4obj_prop); - - //INDIVIDUALS IF exact - if_exact_intersection4individuals = onto_process1.getInvertedFileMatching4Individuals().keySet(); - if_exact_intersection4individuals.retainAll(onto_process2.getInvertedFileMatching4Individuals().keySet()); - onto_process2.getInvertedFileMatching4Individuals().keySet().retainAll(if_exact_intersection4individuals); - - - //INDIVIDUALS IF weak - if_weak_intersection4individuals = onto_process1.getInvertedFileWeakMatching4Individuals().keySet(); - if_weak_intersection4individuals.retainAll(onto_process2.getInvertedFileWeakMatching4Individuals().keySet()); - onto_process2.getInvertedFileWeakMatching4Individuals().keySet().retainAll(if_weak_intersection4individuals); - - - //INDIVIDUALS IF role assertions - if_roleassertions_intersection4individuals = onto_process1.getInvertedFileRoleAssertions().keySet(); - if_roleassertions_intersection4individuals.retainAll(onto_process2.getInvertedFileRoleAssertions().keySet()); - onto_process2.getInvertedFileRoleAssertions().keySet().retainAll(if_roleassertions_intersection4individuals); - - - - - - - - - - - Map,Set> if_difference1; - Map,Set> if_difference2; - - - //INT EXACT - - LogOutput.print("IF Exact 1: " + onto_process1.getInvertedFileExactMatching().size()); - LogOutput.print("IF Exact 2: " + onto_process2.getInvertedFileExactMatching().size()); - //We perform intersection an we only keep in inverted file the intersected elements - if_exact_intersection = onto_process1.getInvertedFileExactMatching().keySet(); - if_exact_intersection.retainAll(onto_process2.getInvertedFileExactMatching().keySet()); - onto_process2.getInvertedFileExactMatching().keySet().retainAll(if_exact_intersection); - - LogOutput.print("Intersection IF Exact: " + if_exact_intersection.size()); - - - - //WEAK STEMMING - LogOutput.print("IF Stemming 1: " + onto_process1.getInvertedFileWeakLabelsStemming().size()); - LogOutput.print("IF Stemming 2: " + onto_process2.getInvertedFileWeakLabelsStemming().size()); - - if_stemming_intersection = new HashSet>(onto_process1.getInvertedFileWeakLabelsStemming().keySet()); - if_stemming_intersection.retainAll(onto_process2.getInvertedFileWeakLabelsStemming().keySet()); - - - LogOutput.print("Intersection IF Stemming: " + if_stemming_intersection.size()); - - - //NOT MATCHED IN IF STEMMING -> TO WEAK ENTRIES - if_difference1 = new HashMap,Set>(onto_process1.getInvertedFileWeakLabelsStemming()); - //Reduce IF - onto_process1.getInvertedFileWeakLabelsStemming().keySet().retainAll(if_stemming_intersection); - if_difference1.keySet().removeAll(if_stemming_intersection); - onto_process1.addEntries2InvertedFileWeakLabels(if_difference1); - if_difference1.clear(); - LogOutput.print("Entries in Weak IF from Setemming: " + onto_process1.getInvertedFileWeakLabels().size()); - - - if_difference2 = new HashMap,Set>(onto_process2.getInvertedFileWeakLabelsStemming()); - //Reduce IF - onto_process2.getInvertedFileWeakLabelsStemming().keySet().retainAll(if_stemming_intersection); - if_difference2.keySet().removeAll(if_stemming_intersection); - onto_process2.addEntries2InvertedFileWeakLabels(if_difference2); - if_difference2.clear(); - LogOutput.print("Entries in Weak IF from Setemming: " + onto_process2.getInvertedFileWeakLabels().size()); - - - //Extract weak mappings - //onto_process1.setFullInvertedFileWeakLabels(); - //onto_process2.setFullInvertedFileWeakLabels(); - onto_process1.setInvertedFileWeakLabels(); - onto_process2.setInvertedFileWeakLabels(); - - LogOutput.print("IF Weak 1: " + onto_process1.getInvertedFileWeakLabels().size()); - LogOutput.print("IF Weak 2: " + onto_process2.getInvertedFileWeakLabels().size()); - - - //We perform intersection an we only keep in inverted file the intersected elements - if_weak_intersection = onto_process1.getInvertedFileWeakLabels().keySet(); - if_weak_intersection.retainAll(onto_process2.getInvertedFileWeakLabels().keySet()); - onto_process2.getInvertedFileWeakLabels().keySet().retainAll(if_weak_intersection); - - LogOutput.print("Intersection IF Weak: " + if_weak_intersection.size()); - - - - - - } - - - - - /** - * This method extract all (weak) mappings. This set will only be used for scope purposes - */ - public void extractAllWeakMappings() { - - for (Set set_str : if_exact_intersection){ - for (int ide1 : onto_process1.getInvertedFileExactMatching().get(set_str)){ - for (int ide2 : onto_process2.getInvertedFileExactMatching().get(set_str)){ - addEquivMapping2ListOfWeakAnchors(ide1, ide2); - } - } - } - - for (Set set_str : if_stemming_intersection){ - for (int ide1 : onto_process1.getInvertedFileWeakLabelsStemming().get(set_str)){ - for (int ide2 : onto_process2.getInvertedFileWeakLabelsStemming().get(set_str)){ - addEquivMapping2ListOfWeakAnchors(ide1, ide2); - } - } - } - - for (Set set_str : if_weak_intersection) - for (int ide1 : onto_process1.getInvertedFileWeakLabels().get(set_str)) - for (int ide2 : onto_process2.getInvertedFileWeakLabels().get(set_str)) - addEquivMapping2ListOfWeakAnchors(ide1, ide2); - - - - - - //Count all weak anchors - int weak_anchors=0; - for (int ide1 : allWeakMappings1N.keySet()){ - weak_anchors+=allWeakMappings1N.get(ide1).size(); - } - LogOutput.print("WEAK ANCHORS: " + weak_anchors); - - - - - } - - - - - public void extractCandidatesSubsetFromWeakMappings(){ - - extractSubsetFromWeakMapping(); - extractSubsetFromWeakMappingFrequency(); - - //Clear structures - //Clear weak - onto_process1.clearInvertedFileWeak(); - onto_process2.clearInvertedFileWeak(); - if_weak_intersection.clear(); - - - - } - - - - public void createAnchors() { - createAnchors(false); - } - - - - @Override - public void createAnchors(boolean are_input_mapping_validated) { - - try { - - //From input mappings (e.g. composed mappings given as input) - createCandidatesFromInputMappings(are_input_mapping_validated); - - //Inverted file intersection - createCandidatesFromExactIF(); - - - //Dataprop and ObjectProp. Currently is at the end of the process - - - - //Clear - //Clear Exact IF - onto_process1.clearInvertedFilesExact(); - onto_process2.clearInvertedFilesExact(); - - clearIntersectedInvertedFilesExact(); - //clearIntersectedInvertedFiles4Properties(); - - - } - catch (Exception e){ - System.err.println("Error extracting anchors: " + e.getMessage()); - e.printStackTrace(); - } - - } - - - - /*public void createCandidatesFromBackgroundKnowledge() throws Exception{ - - - Map> map = ManageBackgroundKnowledge.createComposedMappingsMouse2Uberon2NCI(); - - int mouse_id = -1; - int nci_id = -1; - - for (String mouse_iri : map.keySet()){ - - mouse_id = onto_process1.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(mouse_iri)); - - for (String nci_iri : map.get(mouse_iri)){ - - nci_id = onto_process2.getIdentifier4ConceptName(Utilities.getEntityLabelFromURI(nci_iri)); - - if (mouse_id>=0 && nci_id>=0){ - - //We will see - //evaluateCandidateMapping(mouse_id, nci_id, IF_EXACT); - - //We do not need to filter by isub in exact cases - //With scope, no ambiguous or best confidence - addSubMapping2ListOfAnchors(mouse_id, nci_id); - addSubMapping2ListOfAnchors(nci_id, mouse_id); - - //we add confidences - addIsub2Structure(mouse_id, nci_id, 1.0); - addIsub2Structure(nci_id, mouse_id, 1.0); - - addIsubAverage2Structure(mouse_id, nci_id, 1.0); - addIsubAverage2Structure(nci_id, mouse_id, 1.0); - - addScopeAll2Structure(mouse_id, nci_id, 1.0); - addScopeAll2Structure(nci_id, mouse_id, 1.0); //we add both sides - - } - - } - - } - - - - - map.clear(); - ManageBackgroundKnowledge.clearStructures(); - - }*/ - - - - /** - * We will increase the number of anchors and create the set of mappings 2 ask - */ - public void createCandidates() { - - try { - //Inverted file intersection - LogOutput.print("assessAnchors2Review()"); - assessAnchors2Review(); //Mappings from IF exact to assess - - //Stemmming extraction - LogOutput.print("createCandidates4StemmingLikeAnchors()"); - createCandidates4StemmingLikeAnchors(); - //clear - onto_process1.clearInvertedFileStemming(); - onto_process2.clearInvertedFileStemming(); - if_stemming_intersection.clear(); - - - - //Deprecated EXPANSION from LogMap 1 - //createAnchorsExpansion(); //Not good results (does not improves what extracted by weak mappings) - - //Extracts/assess weak mappings - LogOutput.print("createCandidates4WeakAnchors()"); - createCandidates4WeakAnchors(); - - //We remove the set of week candidate mappings: already in correspondent sets - //clearWeakCandidateAnchors(); - weakCandidateMappings1N.clear(); - - - //Clear intersected IF - //clearIntersectedInvertedFilesStemmingAndWeak(); - - //Characterise/reduce mappings to ask. Some of them will automatically be included within anchors and others will be discarded - LogOutput.print("createMappings2AskUser()"); - createMappings2AskUser(); - - - - - - } - catch (Exception e){ - System.err.println("Error extracting anchors: " + e.getMessage()); - e.printStackTrace(); - } - - } - - - - public void processInputMappings(Set mappings) { - - for (MappingObjectStr mapping : mappings){ - - if (mapping.isClassMapping()){ - - int ide1 = onto_process1.getIdentifier4ConceptIRI(mapping.getIRIStrEnt1()); - int ide2 = onto_process2.getIdentifier4ConceptIRI(mapping.getIRIStrEnt2()); - - if (ide1>=0 && ide2>=0){ - input_mappings.add( - new MappingObjectIdentifiers( - onto_process1.getIdentifier4ConceptIRI(mapping.getIRIStrEnt1()), - onto_process2.getIdentifier4ConceptIRI(mapping.getIRIStrEnt2())) - ); - } - else - System.err.println("Mapping with no direct correspondence to ids: " + mapping); - } - } - } - - - - - /** - * Create candidates from input mappings (e.g. ) - */ - private void createCandidatesFromInputMappings(boolean are_input_mapping_validated) throws Exception { - - //int candidates=0; - - for (MappingObjectIdentifiers mapping : input_mappings){ - - if (onto_process1.getDangerousClasses().contains(mapping.getIdentifierOnto1()) || - onto_process2.getDangerousClasses().contains(mapping.getIdentifierOnto2())) - continue; - - if (are_input_mapping_validated) - evaluateCandidateMapping(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2(), IF_VALIDATED); - else - evaluateCandidateMapping(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2(), IF_EXACT); - - } - - - - - - } - - - - - - - - /** - * Processes the intersected 'exact' inverted files and extract anchors. - * When ambiguity filter by isub and scope - */ - private void createCandidatesFromExactIF() throws Exception { - - int candidates=0; - - - /*We need to remove ambiguity*/ - for (Set set_str : if_exact_intersection){ - - if (set_str.isEmpty()){ - LogOutput.print("EMPTY SET IN EXACT IF: " + onto_process1.getInvertedFileExactMatching().get(set_str).size() + " - " + + onto_process2.getInvertedFileExactMatching().get(set_str).size()); - continue; - } - - - for (int ide1 : onto_process1.getInvertedFileExactMatching().get(set_str)){ - - if (onto_process1.getDangerousClasses().contains(ide1)) - continue; - - for (int ide2 : onto_process2.getInvertedFileExactMatching().get(set_str)){ - - if (onto_process2.getDangerousClasses().contains(ide2)) - continue; - - //Decides if mappings should be considered - //Checks ambiguity and scope - evaluateCandidateMapping(ide1, ide2, IF_EXACT); - candidates++; - - } - } - } - - - //printStatisticsMappingEvaluation(); - //LogOutput.print("Candidates EXACT: " + candidates); - - - - - } - - - /** - * Evaluates mapping confidence and decides if mappings should be included or must be treated later (e.g. - * ambiguity cases and mappings without scope) - * @param ide1 - * @param ide2 - * @param origin - */ - private void evaluateCandidateMapping(int ide1, int ide2, int origin){ - - - if (origin==IF_VALIDATED){ - evaluateCandidateMappingIFValidated(ide1, ide2); - } - else if (origin==IF_EXACT){ - evaluateCandidateMappingIFExact(ide1, ide2); - } - else if (origin==IF_STEMMING){ - evaluateCandidateMappingIFStemming(ide1, ide2); - } - else if (origin==IF_WEAK){ - evaluateCandidateMappingIFWeak(ide1, ide2); - } - - } - - - /** - * Evaluation of mappings coming from a validated input - * @param ide1 - * @param ide2 - */ - private void evaluateCandidateMappingIFValidated(int ide1, int ide2){ - - - //Already considered - if (isMappingAlreadyConsidered(ide1, ide2)) - return; - - //Statistics All - StatisticsManager.addStatisticsMappingsAll(ide1, ide2); - - //We extract and store - extractISUB4Mapping(ide1, ide2); - extractISUBAverage4Mapping(ide1, ide2); - - extractScopeAll4Mapping(ide1, ide2); - - getConfidence4Mapping(ide1, ide2); //isub+scope - - - //We do not need to filter by isub in exact cases - //With scope, no ambiguous or best confidence - addSubMapping2ListOfAnchors(ide1, ide2); - addSubMapping2ListOfAnchors(ide2, ide1); - - - } - - - /** - * Evaluation of mappings coming from exact IF - * @param ide1 - * @param ide2 - */ - private void evaluateCandidateMappingIFExact(int ide1, int ide2){ - - - double scoreScope; - double scoreISUB; - double scoreISUB_avg; - - double conf; - - - //Already considered - if (isMappingAlreadyConsidered(ide1, ide2)) - return; - - //Statistics Mall - StatisticsManager.addStatisticsMappingsAll(ide1, ide2); - - - - //We extract and store - scoreISUB = extractISUB4Mapping(ide1, ide2); - scoreISUB_avg = extractISUBAverage4Mapping(ide1, ide2); - - scoreScope = extractScopeAll4Mapping(ide1, ide2); - - conf = getConfidence4Mapping(ide1, ide2); //isub+scope - - - if (scoreISUB=0.95 - //Ambiguity: cases with scope that are already in exact mappings - //At this stage we will only allow mappings 1:1 - if (isEntityAlreadyMapped(ide1) && isEntityAlreadyMapped(ide2)){ - //compare cases (3 cases) - ///ide1-ide2a - //ide1a-ide2 - //ide1=ide2 - - ide2a = getTargetEntity4Index(ide1); - ide1a = getTargetEntity4Index(ide2); - conf1 = getConfidence4Mapping(ide1, ide2a); - conf2 = getConfidence4Mapping(ide1a, ide2); - - //substitute only if better than both two - if (conf > conf1 && conf > conf2){ - - moveMapping2ReviewList(ide1, ide2a); - moveMapping2ReviewList(ide1a, ide2); - - //we add mapping to list in the end - } - else{ //Ambiguous - ambiguous=true; - } - - } - else if (isEntityAlreadyMapped(ide1)){ - - //If better confidence then substitute (add loser to ambiguity) - ide2a = getTargetEntity4Index(ide1); - conf1 = getConfidence4Mapping(ide1, ide2a); - - if (conf>conf1){ - moveMapping2ReviewList(ide1, ide2a); - } - else { //Ambiguous - ambiguous=true; - } - - - } - else if (isEntityAlreadyMapped(ide2)){ - - //If better confidence then substitute (add loser to ambiguity) - ide1a = getTargetEntity4Index(ide2); - conf1 = getConfidence4Mapping(ide1a, ide2); - - if (conf>conf1){ - moveMapping2ReviewList(ide1a, ide2); - } - else { //Ambiguous - ambiguous=true; - } - } - - - if (ambiguous){ - addSubMapping2Mappings2Review(ide1, ide2); - return; - } - - - - //We do not need to filter by isub in exact cases - //With scope, no ambiguous or best confidence - addSubMapping2ListOfAnchors(ide1, ide2); - addSubMapping2ListOfAnchors(ide2, ide1); - - } - - - - - - - - - - - - - /** - * Mappings coming from exact IF. We evaluate wrt fixed mappings - */ - private void assessAnchors2Review(){ - - - //Mappings to review and - /*for (int ide1 : weakenedDandG_Mappings1N.keySet()){ - - for (int ide2 : weakenedDandG_Mappings1N.get(ide1)){ - - if (!isMappingInferred(ide1, ide2)){ - - //Add in exact - addSubMapping2ListOfAnchors(ide1, ide2); - - } - } - } - - //We remove those mappings that are already inferred - weakenedDandG_Mappings1N.clear();*/ - - - //Deleted with D&G - //We try to recover some of them (we give the another chance) - //Preliminary tests: it seem there is not impact on that - //Note that we may check them again as a weak mapping - /*for (int ide1 : getDircardedAnchors().keySet()){ - for (int ide2 : getDircardedAnchors().get(ide1)){ - - if (isId1SmallerThanId2(ide1, ide2)){ - addSubMapping2Mappings2Review(ide1, ide2); - } - else{ - addSubMapping2Mappings2Review(ide2, ide1); - } - } - }*/ - - - - for (int ide1 : mappings2Review.keySet()){ - for (int ide2 : mappings2Review.get(ide1)){ - - if (!isId1SmallerThanId2(ide1, ide2)) - continue; //JUST IN CASE - - evaluateAnchor2Review(ide1, ide2); - - } - } - - mappings2Review.clear(); - - - - } - - - - private void evaluateAnchor2Review(int ide1, int ide2){ - - - //if (isMappingInAnchors(ide1, ide2)) - // return; - - if (isMappingInConflictWithFixedMappings(ide1, ide2)){ - addSubMapping2ConflictiveAnchors(ide1, ide2); - addSubMapping2ConflictiveAnchors(ide2, ide1); - return; - } - - if (isMappingDangerousEquiv(ide1, ide2)){ - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - isHardMappingInGS(ide1, ide2, 1);// tmp method - return; - } - - //Already extracted - //double scoreISUB = extractISUB4Mapping(ide1, ide2); - //double scoreISUB_avg = extractISUBAverage4Mapping(ide1, ide2); - - //Scope with only anchors: for future check - extractScopeAnchors4Mapping(ide1, ide2); - - double scoreScope = extractScopeAll4Mapping(ide1, ide2); - - - //Discard if no scope and ambiguity - if (scoreScope<=Parameters.bad_score_scope && (isEntityAlreadyMapped(ide1) || isEntityAlreadyMapped(ide2))){// && scoreISUB_avg<0.9 - - addEquivMapping2HardDiscardedAnchors(ide1, ide2); //No scope and ambiguous - isHardMappingInGS(ide1, ide2, 2);//TODO tmp method - return; - } - - //Minimum ISUB... as before.... - //Only ambiguity -> ask - //No scope ->ask - - - //Always ask otherwise - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - - - - } - - - - - - - - - - /** - * Created candidates for anchors using a stemmed lexicon. - */ - private void createCandidates4StemmingLikeAnchors() throws Exception{ - - int candidates=0; - - //System.out.println(if_stemming_intersection.size()); - //System.out.println(onto_process1.getInvertedFileWeakLabelsStemming().values().size()); - //System.out.println(onto_process2.getInvertedFileWeakLabelsStemming().values().size()); - - - for (Set set_str : if_stemming_intersection){ - - - if (set_str.isEmpty()){ - LogOutput.print("EMPTY SET IN STEMMING IF: " + onto_process1.getInvertedFileWeakLabelsStemming().get(set_str).size() + " - " + + onto_process2.getInvertedFileWeakLabelsStemming().get(set_str).size()); - continue; - } - - - //System.out.println(onto_process1.getInvertedFileWeakLabelsStemming().get(set_str).size()); - //System.out.println(onto_process2.getInvertedFileWeakLabelsStemming().get(set_str).size()); - //System.out.println(); - - for (int ide1 : onto_process1.getInvertedFileWeakLabelsStemming().get(set_str)){ - - if (onto_process1.getDangerousClasses().contains(ide1)) - continue; - - for (int ide2 : onto_process2.getInvertedFileWeakLabelsStemming().get(set_str)){ - - if (onto_process2.getDangerousClasses().contains(ide2)) - continue; - - //Decides if mappings should be considered - //Checks ambiguity and scope - evaluateCandidateMapping(ide1, ide2, IF_STEMMING); - candidates++; - } - } - - } - - - //printStatisticsMappingEvaluation(); - //LogOutput.print("Candidates STEMING: " + candidates); - - - - } - - - - - /** - * Evaluation of mappings coming from stemming IF - * - * @param ide1 - * @param ide2 - */ - private void evaluateCandidateMappingIFStemming(int ide1, int ide2){ - - double scoreScope; - double scoreISUB; - double confidence; - - //Already in list or discarded - if (isMappingAlreadyConsidered(ide1, ide2)) - return; - - //Statistics Mall - StatisticsManager.addStatisticsMappingsAll(ide1, ide2); - - - if (isMappingInConflictWithFixedMappings(ide1, ide2)){ - addSubMapping2ConflictiveAnchors(ide1, ide2); - addSubMapping2ConflictiveAnchors(ide2, ide1); - return; - } - - - - - if (isMappingDangerousEquiv(ide1, ide2)){ - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - isHardMappingInGS(ide1, ide2, 1);// tmp method - return; - } - - //Ambiguity->discard! with current anchors - if (isEntityAlreadyMapped(ide1) || isEntityAlreadyMapped(ide2)){ - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - isHardMappingInGS(ide1, ide2, 2);// tmp method - return; - } - - //Scope with only anchors: for future check - extractScopeAnchors4Mapping(ide1, ide2); - - scoreScope = extractScopeAll4Mapping(ide1, ide2); - //We extract and store - scoreISUB = extractISUB4Mapping(ide1, ide2); - //if (scoreISUB<0.75) - // return; //do not consider... - - confidence = getConfidence4Mapping(ide1, ide2); - - if (scoreScope<=Parameters.bad_score_scope || scoreISUB0.70 && confidence>0.45){ - addEquivMapping2DiscardedAnchors(ide1, ide2); - } - else{ - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - isHardMappingInGS(ide1, ide2, 3);// tmp method - //if (.isMappingInGoldStandard(ide1, ide2)) - // System.out.println(); - } - return; - } - - - - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - - - - - } - - - /** - * Evaluation of mappings coming from expansion - * - * @param ide1 - * @param ide2 - * @deprecated Not used - */ - private boolean evaluateCandidateMappingExpansion(int ide1, int ide2){ - - double scoreISUB; - - - //Already in list or discarded - if (isMappingAlreadyConsidered(ide1, ide2)) - return false; - - - scoreISUB = extractISUB4Mapping(ide1, ide2); - if (scoreISUB<0.95)//do not consider - return false; - - - //Cases Isub > 0.95 - - if (isMappingInConflictWithFixedMappings(ide1, ide2)){ - addSubMapping2ConflictiveAnchors(ide1, ide2); - addSubMapping2ConflictiveAnchors(ide2, ide1); - return false; - } - - if (isMappingDangerousEquiv(ide1, ide2)){ - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - return false; - } - - //Ambiguity->discard! - if (isEntityAlreadyMapped(ide1) || isEntityAlreadyMapped(ide2) || scoreISUB<0.98){ - //addEquivMapping2HardDiscardedAnchors(ide1, ide2); //to avoid many discards - return false; - } - - //>0.98 - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - return true; - - - - - } - - - - - /** - * Creation of candidate mappings from weak anchors. called from main LogMap method - * - */ - private void createCandidates4WeakAnchors(){ - - - //Now the set weakCandidateMappings1N is pre-extracted - //extractSubsetFromWeakMapping(); - //extractSubsetFromWeakMappingFrequency(); - - int candidates=0; - - //for (int ide1 : weakMappings1N.keySet()){ - for (int ide1 : weakCandidateMappings1N.keySet()){ - - if (onto_process1.getDangerousClasses().contains(ide1)) - continue; - - //for (int ide2 : weakMappings1N.get(ide1)){ - for (int ide2 : weakCandidateMappings1N.get(ide1)){ - - if (onto_process2.getDangerousClasses().contains(ide2)) - continue; - - if (!isId1SmallerThanId2(ide1, ide2)) - continue; - - - - evaluateCandidateMappingIFWeak(ide1, ide2); - - - - candidates++; - - } - - } - - //printStatisticsMappingEvaluation(); - // LogOutput.print("Candidates WEAK: " + candidates); - - - - } - - - - private void evaluateCandidateMappingIFWeak(int ide1, int ide2){ - - - - - double scoreScopeAnc; - double scoreScope; - double scoreISUB; - double confidence; - - //Only if the mapping is already in list of anchors or in list to ask logmap - if (isMappingAlreadyInList(ide1, ide2) || isMappingInAnchors2AskLogMap(ide1, ide2) || isMappingInConflictiveSet(ide1, ide2)){ - return; - } - - //Already in list or discarded (but not weak yujiao, we give another chance) - //Probably not necessary anymore - if (isMappingAlreadyConsidered(ide1, ide2) && !hasWeakMappingSim(ide1, ide2)) - return; - - if (!isMappingAlreadyConsidered(ide1, ide2)){ - - //Statistics Mall - StatisticsManager.addStatisticsMappingsAll(ide1, ide2); - - } - - - - - if (isMappingInConflictWithFixedMappings(ide1, ide2)){ - addSubMapping2ConflictiveAnchors(ide1, ide2); - addSubMapping2ConflictiveAnchors(ide2, ide1); - return; - } - - - - //Do not consider? - if (isMappingDangerousEquiv(ide1, ide2)){ - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - isHardMappingInGS(ide1, ide2, 1);// tmp method - return; - } - - //Ambiguity->discard! with anchors then no consider - if (isEntityAlreadyMapped(ide1) || isEntityAlreadyMapped(ide2)){ //no anchor - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - isHardMappingInGS(ide1, ide2, 2);// tmp method - return; - } - - - - - - - scoreScope = extractScopeAll4Mapping(ide1, ide2); - //We extract and store - scoreISUB = extractISUB4Mapping(ide1, ide2); - - confidence = getConfidence4Mapping(ide1, ide2); - - //Scope with only anchors: for future check - scoreScopeAnc = extractScopeAnchors4Mapping(ide1, ide2); - - - if (!hasWeakMappingSim(ide1, ide2)){ - - if (scoreISUB0.83 && confidence>0.45){ - addEquivMapping2DiscardedAnchors(ide1, ide2); - } - else{ - //Must be hard discarded always - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - //isHardMappingInGS(ide1, ide2, 3);// tmp method - } - - return; - } - - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - } - else{ - - - if (scoreISUB>=Parameters.good_isub_candidates && scoreScope>Parameters.bad_score_scope){ - - //System.out.println("1"); - - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - return; - } - - if (getSimWeak4Mapping2(ide1, ide2)>=Parameters.good_sim_coocurrence && scoreScope>Parameters.bad_score_scope){ - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - //LogOutput.print("Mapping " + ide1 + "=" + ide2 + ", sim: " + getSimWeak4Mapping2(ide1, ide2) + ", scope: " + scoreScope); - //LogOutput.print("\tASK"); - - //System.out.println("2"); - - - return; - } - - - if (scoreISUB<0.65){ - //Always - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - - /*if (index.getIRIStr4ConceptIndex(ide1).equals("http://bioontology.org/projects/ontologies/fma/fmaOwlDlComponent_2_0#Stromal_cell") - || index.getIRIStr4ConceptIndex(ide2).equals("http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#Stromal_Neoplasm")){ - System.out.println("3"); - System.out.println(index.getIRIStr4ConceptIndex(ide1) + " " + index.getIRIStr4ConceptIndex(ide2) + " WEAK"); - }*/ - - - return; - } - - - //if (confidence>0.40 && getSimWeak4Mapping2(ide1, ide2)>=0.05 && scoreScope>0.0){ - //if (scoreISUB>0.83 && confidence>0.45 && scoreScope>0.0){ //Best results 112/167 - if (scoreISUB>0.89 || (scoreISUB > 0.80 && confidence>Parameters.good_confidence && scoreScope>Parameters.bad_score_scope) || (confidence>0.80)){ - //if (getSimWeak4Mapping(ide1, ide2)>=0.05){ - - //System.out.println("4"); - - addEquivMapping2DiscardedAnchors(ide1, ide2); - //LogOutput.print("Mapping " + ide1 + "=" + ide2 + ", sim: " + getSimWeak4Mapping2(ide1, ide2) + ", scope: " + scoreScope); - //LogOutput.print("\tDISCARDED"); - - - - } - else{ - - //System.out.println("5"); - - addEquivMapping2HardDiscardedAnchors(ide1, ide2); - isHardMappingInGS(ide1, ide2, 3);// tmp method - - //if (isMappingInGoldStandard(ide1, ide2)) - // LogOutput.print("YES Mapping " + ide1 + "=" + ide2 + ", sim: " + getSimWeak4Mapping2(ide1, ide2) + ", scope: " + scoreScope - // + ", scopeAnc: " + scoreScopeAnc + ", isub: " + scoreISUB); - //else - // LogOutput.print("NO Mapping " + ide1 + "=" + ide2 + ", sim: " + getSimWeak4Mapping2(ide1, ide2) + ", scope: " + scoreScope - // + ", scopeAnc: " + scoreScopeAnc + ", isub: " + scoreISUB); - - } - return; - - //String GS="BAD"; - //if (isMappingInGoldStandard(ide1, ide2)){ - // GS="GOOD"; - //} - - - /*LogOutput.print(GS + " - " + - index.getLabel4ConceptIndex(ide1) + " - " + //.getName4ConceptIndex(ide1) + " - " + - index.getLabel4ConceptIndex(ide2) + " - " + //index.getName4ConceptIndex(ide2) + " - " + - extractISUB4Mapping(ide1, ide2) + " - " + - extractISUBAverage4Mapping(ide1, ide2) + " - " + - extractScope4Mapping(ide1, ide2) + " - " + - getSimWeak4Mapping(ide1, ide2)); - */ - - - } - - - - - } - - - - private void extractSubsetFromWeakMapping(){ - int size1; - int size2; - int ambiguity; - - - //Look in allweakmappings - - for (Set set_str : if_weak_intersection){ - - - if (set_str.isEmpty()){ - LogOutput.print("EMPTY SET IN STEMMING IF: " + onto_process1.getInvertedFileWeakLabels().get(set_str).size() + " - " + + onto_process2.getInvertedFileWeakLabels().get(set_str).size()); - continue; - } - - for (int ide1 : onto_process1.getInvertedFileWeakLabels().get(set_str)){ - - size1=onto_process1.getInvertedFileWeakLabels().get(set_str).size(); - - for (int ide2 : onto_process2.getInvertedFileWeakLabels().get(set_str)){ - - size2=onto_process2.getInvertedFileWeakLabels().get(set_str).size(); - - - //Only Low amabiguity - ambiguity=size1*size2; - if (ambiguity<7 && size1<4 && size2<4){//Max cases 3*2 (for FMA-NCI-SNOMED) - //if (ambiguity<13 && size1<5 && size2<5){//Max cases 3*2 (Mosue?) - addEquivMapping2ListOfWeakCandidateAnchors(ide1, ide2); - } - - } - } - } - //count candidateweak anchors - int weak_anchors=0; - for (int ide1 : weakCandidateMappings1N.keySet()){ - weak_anchors+=weakCandidateMappings1N.get(ide1).size(); - } - //LogOutput.print("CANDIDATE WEAK ANCHORS: " + weak_anchors); - } - - - - - - - - /* - * Good-bad discarded-weakened mappings - public void printStatisticsAssessment(){ - - int weakened_mappings=0; - int weakened_good=0; - for (int ide1 : weakenedMappings1N.keySet()){ - for (int ide2 : weakenedMappings1N.get(ide1)){ - - //if (index.getClassIndex(ide1).getOntologyId()1){ - ambiguity=true; - } - - for (int ide2 : newCandidatetMappings1N.get(ide1)){ - - if (index.getClassIndex(ide1).getOntologyId() set1, set2; - Set words1 = new HashSet(), words2 = new HashSet(); -// ArrayList newCandidates = new ArrayList(); - WeakCandidate [] picked = new WeakCandidate[3]; - WeakCandidate cand; - ClassIndex class1 = null, class2 = null; -// boolean mark = false; - double score; - int f_key; -// Set list_key; - double iSub, sim; - - for (Set set_str : if_weak_intersection) - { -// set_str = new HashSet(); -// set_str.add("scalp"); -// mark = set_str.toString().contains("tricep"); - - set1 = onto_process1.getInvertedFileWeakLabels().get(set_str); - size1=set1.size(); - set2 = onto_process2.getInvertedFileWeakLabels().get(set_str); - size2=set2.size(); - - //For scalability?? - if (size1 > 5 & size2 > 5 && size1 * size2 > 100) //too ambiguous - //if (size1 > 6 & size2 > 6 && size1 * size2 > 100) //too ambiguous - continue; - - try { - f_key = index.getCooccurrenceOfWords(set_str).size(); - } - catch (NullPointerException e) - { - LogOutput.print("NullPointerException " + set_str.toString()); - continue; - } - - for (int ide1 : set1) - { -// label1 = (class1 = index.getClassIndex(ide1)).getEntityName(); - label1 = (class1 = index.getClassIndex(ide1)).findStemmedAltLabel(set_str); - if (label1 == null) - continue; - //TODO Yujiao - why is there a class named "F" that doesn't have alternativeLabels & other attributes? - -// if (class1.getEntityName().equals("Pseudolobe")) -// mark = true; - - for (String word : label1.split("_")) - words1.add(word); - - for (int ide2 : set2) - { -// label2 = (class2 = index.getClassIndex(ide2)).getEntityName(); - label2 = (class2 = index.getClassIndex(ide2)).findStemmedAltLabel(set_str); - if (label2 == null) - continue; - - if (!words2.isEmpty()) - words2.clear(); - - for (String word : label2.split("_")) - words2.add(word); - -// if (class1.getEntityName().equals("Scalp") && class2.getEntityName().equals("Scalp_structure")) -// Lib.debuginfo("here"); -// if (mark) -// System.out.print(label1 + " | " + label2 + "\n"); - - //ensure that common(label1, label2) == set_str - if (!hasCommonWords(words2, words1, set_str)) - continue; - - cand = new WeakCandidate(set_str, ide1, ide2, label1, label2, index, f_key); -// newCandidates.add(cand); - insertCandidate(picked, cand); - - } - - for (int i = 0, id1, id2; i < picked.length; ++i) - { - if (picked[i] == null) break; - addEquivMapping2ListOfWeakCandidateAnchors((id1 = picked[i].getKey()), (id2 = picked[i].getValue())); - - //iSub = extractISUB4Mapping(id1, id2); - sim = picked[i].getScore(); - //if (sim > 0.5) - // LogOutput.print(label1 + " " + index.getClassIndex(id2).findStemmedAltLabel(set_str) + " " + sim + "\n"); - - addSimWeak2Structure(id1, id2, sim); - addSimWeak2Structure(id2, id1, sim); - //score = iSub > sim ? iSub : 0.5 * (iSub + Math.sqrt(Math.max(0, sim))); - //addIsub2Structure(id1, id2, score); - //addIsub2Structure(id2, id1, score); - picked[i] = null; - } - - words1.clear(); - } - -/* - if (newCandidates.size() == 0) - continue; - - Collections.sort(newCandidates, newCandidates.get(0)); - - for (int i = 0; i < newCandidates.size(); ++i) - { - if (i > 2)// && Lib.dcmp(1. - score) > 0) - break; - score = newCandidates.get(i).getScore(); - if (Lib.dcmp(score - WeakCandidate.MINSCORE) <= 0) - break; - addEquivMapping2ListOfWeakCandidateAnchors(newCandidates.get(i).getKey(), newCandidates.get(i).getValue()); - } -*/ - -// newCandidates.clear(); - } - - } - - - private boolean hasCommonWords(Set a, Set b, Set c) - { - for (String word : a) - if (b.contains(word) && !c.contains(word)) - return false; - return true; - } - - private void insertCandidate(WeakCandidate[] picked, WeakCandidate cand) { - if (Lib.dcmp(cand.getScore() - WeakCandidate.MINSCORE) <= 0) - return ; - - for (int i = 0; i < picked.length; ++i) - if (picked[i] == null || cand.compareTo(picked[i]) > 0) - { - for (int j = picked.length - 1; j > i; --j) - picked[j] = picked[j - 1]; - picked[i] = cand; - break; - } - } - - - - - - - - - - - - /** - * This method filters mappings 2 ask wrt ambiguity. - * Too ambiguous mappings are likely to be wrong. - * Note that for weak and stemming-like candidates we forced mappings to be non ambiguous wrt anchors. - */ - private void createMappings2AskUser(){ - - int side1_amb_logmap=0; - int side2_amb_logmap=0; - int both_amb_logmap=0; - - mappings2Review.clear(); - - - - //We add everything ins discarded if it is a small set - //Useful in cases like mouse anatomy and fma2nci small - //where discarded mappinsg are small wrt the number of anchors - if (getNumDiscardedMappings()<(getLogMapMappings().size()/Parameters.ratio_second_chance_discarded)){ - //if (getNumDiscardedMappings()<(getAnchors().size()/2.5)){ - - LogOutput.print("Second chance to discarded mappings."); - - //No further filtering with heuristics - //If no interactivity, mappings are filtered using automatic heuristics, - //if this flag is set to true. Otherwise, former mappings 2 ask user are - //added automatically - //If second chance and flag is true, the the mappings are filtered anyway (and there is - //no effect for 2nd chance mappings) - setFilterWithHeuristicsSecondLevelMappings(false); - - for (int ide1 : getDiscardedMappings().keySet()){ - for (int ide2 : getDiscardedMappings().get(ide1)){ - //addEquivMapping2ListOfAnchors2AskUser(ide1, ide2); - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - - } - } - - getDiscardedMappings().clear(); - } - - - //We remove high ambiguity mappings - //------------------------------- - for (int ide1 : getToAskLogMapMappings().keySet()){ - - // Side 1 - /*side1_amb=0; - - if (getAnchors().containsKey(ide1)){ - side1_amb += getAnchors().get(ide1).size(); - } - - if (getToAskLogMapMappings().containsKey(ide1)){ - side1_amb += getToAskLogMapMappings().get(ide1).size(); - }*/ - side1_amb_logmap = getEntityAmbiguity_LogMapMappings(ide1); - - - for (int ide2 : getToAskLogMapMappings().get(ide1)){ - - if (isId1SmallerThanId2(ide1, ide2)){ - - // Side 2 - /*side2_amb=0; - if (getAnchors().containsKey(ide2)){ - side2_amb += getAnchors().get(ide2).size(); - } - if (getToAskLogMapMappings().containsKey(ide2)){ - side2_amb += getToAskLogMapMappings().get(ide2).size(); - }*/ - side2_amb_logmap = getEntityAmbiguity_LogMapMappings(ide2); - - - both_amb_logmap = side1_amb_logmap + side2_amb_logmap; - - if (both_amb_logmap>Parameters.max_ambiguity){ //High ambiguity - isHardMappingInGS(ide1, ide2, 0);// tmp method - //addEquivMapping2HardDiscardedAnchors(ide1, ide2); - addEquivMapping2DiscardedAnchors(ide1, ide2); - } - //min ambiguity (entities are only involved within one mapping) - - else if (both_amb_logmap<=Parameters.good_ambiguity && - //extractScopeAll4Mapping(ide1, ide2)>0.0 - //&& - //extractScopeAll4Mapping(ide1, ide2)>0.0 && getConfidence4Mapping(ide1, ide2)>0.50 Too restrictive for non ambiguous - //(extractISUB4Mapping(ide1, ide2)>0.99 || - (extractISUB4Mapping(ide1, ide2)>Parameters.good_isub_anchors || - (hasWeakMappingSim(ide1, ide2) && getSimWeak4Mapping2(ide1, ide2)>=Parameters.good_sim_coocurrence)) - ){ - - - - //Otherwise we were asking almost nothing in interactive conference track - if (OracleManager.isActive()){ - addEquivMapping2ListOfAnchors2AskUser(ide1, ide2); - - LogOutput.printAlways("New Added 2 ask: " + - index.getIRIStr4ConceptIndex(ide1) + " " + - index.getIRIStr4ConceptIndex(ide2)); - - } - - else{ - addSubMapping2Mappings2Review(ide1, ide2); - addSubMapping2Mappings2Review(ide2, ide1); - } - - - //Manchors++; - //if (isMappingInGoldStandard(ide1, ide2)){ - // Manchors_ok++; - //} - - - } - else{ - //Mappings that are likely to be incorrect - //We give a chance to be revsiewed by the user - addEquivMapping2ListOfAnchors2AskUser(ide1, ide2); - } - } - - - } - - } - - - - int side1_amb_user=0; - int side2_amb_user=0; - int both_amb_user=0; - - - //TODO: move this interactivity user=0 - //APPLY HEURISTICS - /* - for (int ide1 : getToAskLogMapMappings().keySet()){ - - for (int ide2 : getToAskLogMapMappings().get(ide1)){ - - side1_amb_logmap=getEntityAmbiguity_LogMapMappings(ide1); - - side2_amb_logmap=getEntityAmbiguity_LogMapMappings(ide2); - - both_amb_logmap = side1_amb_logmap + side2_amb_logmap; - - if (both_amb_logmap<=3 && extractISUB4Mapping(ide1, ide2)>=0.98){ - - addSubMapping2Mappings2Review(ide1, ide2); - addSubMapping2Mappings2Review(ide2, ide1); - - removeEquivMappingFromListOfAnchors2AskUser(ide1, ide2); - - } - - } - }*/ - - - //Heuristics tests: move to interactivity user=0 - /*for (int ide1 : getToAskUserMappings().keySet()){ - - for (int ide2 : getToAskUserMappings().get(ide1)){ - - if (isId1SmallerThanId2(ide1, ide2) && extractScopeAll4Mapping(ide1, ide2)>0.0 && getConfidence4Mapping(ide1, ide2)>0.50){ - - addSubMapping2Mappings2Review(ide1, ide2); - addSubMapping2Mappings2Review(ide2, ide1); - - } - - } - }*/ - - - //Not giving good results... (only a few mappings are not ambiguous any more) - //It seems ambiguous mapping groupos are amb between them. Make sense somehow... - //TODO 2ask user are equiv mappings only one side is added!!!!!! - //TODO: Repeage mappings that are not ambiguous any more when high ambiguos mappings are discarded - //We explore "ToAskLogMapMappings" in order to be able to remove mappings from "ToAskUserMappings" - ///---------------------------- - /*for (int ide1 : getToAskLogMapMappings().keySet()){ - - for (int ide2 : getToAskLogMapMappings().get(ide1)){ - - //Check only those in mappings to ask - if (isMappingInAnchors2AskUser(ide1, ide2)){ - - // Side 1 - side1_amb_logmap=getEntityAmbiguity_LogMapMappings(ide1); - side1_amb_user=getEntityAmbiguity_UserMappings(ide1); - - // Side 2 - side2_amb_logmap=getEntityAmbiguity_LogMapMappings(ide2); - side2_amb_user=getEntityAmbiguity_UserMappings(ide2); - - both_amb_logmap = side1_amb_logmap + side2_amb_logmap; - both_amb_user = side1_amb_user + side2_amb_user; - - ////Not GOOD Heuristic (apply only for amb 3)!! - - //We add to new candidates and remove from 2ask list (only those with amb 3) - if (both_amb_user<=2 && both_amb_logmap<=3 && - (extractISUB4Mapping(ide1, ide2)>=0.99 || - (hasWeakMappingSim(ide1, ide2) && getSimWeak4Mapping2(ide1, ide2)>=0.09))){ - - addSubMapping2Mappings2Review(ide1, ide2); - addSubMapping2Mappings2Review(ide2, ide1); - - removeEquivMappingFromListOfAnchors2AskUser(ide1, ide2); - - } - - - } - - } - - }*/ - - - //TODO only for mosue anatomy??? - //If discarded is not too big (wrt anchors) then add to questions for user - //Case for small ontologies (mouse anatomy) - //-------------------------------- - /*if (getNumDiscardedMappings()<(getAnchors().size()/5)){ - - setFilterWithHeuristicsInteractivity(false); - - for (int ide1 : getDircardedAnchors().keySet()){ - for (int ide2 : getDircardedAnchors().get(ide1)){ - addEquivMapping2ListOfAnchors2AskUser(ide1, ide2); - - - } - } - - //getDircardedAnchors().clear(); - - }*/ - - - //TODO we remove this set, mappings are already in other sets - //We need this set for ambiguity statistics purposes - //Probably with to ask user is enough - //getToAskLogMapMappings().clear(); - - - - } - - - - - - /** - * We will ask to the user those mappings not in conflict with current fixed mappings - */ - public void assessMappings2AskUser(){ - //Mappings to review and - - //int side1_amb=0; - //int side2_amb=0; - - LogOutput.print("Assessing mappings to ask user."); - - for (int ide1 : candidateMappings2askUser1N.keySet()){ - - for (int ide2 : candidateMappings2askUser1N.get(ide1)){ - - if (isId1SmallerThanId2(ide1, ide2)){// - - if (isMappingInConflictWithFixedMappings(ide1, ide2)){ - - addSubMapping2ConflictiveAnchors(ide1, ide2); - addSubMapping2ConflictiveAnchors(ide2, ide1); - - } - else if (isMappingDangerousEquiv(ide1, ide2)){ - - addEquivMapping2DiscardedAnchors(ide1, ide2); - - } - else { //ask user (store ambiguity) - - // Side 1 - /*side1_amb=0; - - if (getAnchors().containsKey(ide1)){ - side1_amb += getAnchors().get(ide1).size(); - } - - if (getToAskLogMapMappings().containsKey(ide1)){ - side1_amb += getToAskLogMapMappings().get(ide1).size(); - } - - // Side 2 - side2_amb=0; - if (getAnchors().containsKey(ide2)){ - side2_amb += getAnchors().get(ide2).size(); - } - if (getToAskLogMapMappings().containsKey(ide2)){ - side2_amb += getToAskLogMapMappings().get(ide2).size(); - }*/ - - //Include this in interactivity ordering - //addMappingObject2AskUserList(ide1, ide2, (side1_amb+side2_amb)); - addMappingObject2AskUserList(ide1, ide2); - } - } - } - } - - - - - - //we need them for interactivity - //candidateMappings2askUser1N.clear(); - - for (int ide1 : weakenedDandG_Mappings1N.keySet()){ - - for (int ide2 : weakenedDandG_Mappings1N.get(ide1)){ - - if (isMappingInConflictWithFixedMappings(ide1, ide2)){ - addSubMapping2ConflictiveAnchors(ide1, ide2); - } - else if (!isMappingInferred(ide1, ide2)){ //If inferred do not add - - //Statistics - StatisticsManager.addStatisticsSplitMapping(ide1, ide2); - - //Add 2 list 2 ask - if (isId1SmallerThanId2(ide1, ide2)) - addMappingObject2AskUserList(ide1, ide2, Utilities.L2R); - else - addMappingObject2AskUserList(ide2, ide1, Utilities.R2L); - } - } - } - weakenedDandG_Mappings1N.clear(); - - - //Statistics mappings to ask - StatisticsManager.extractStatisticsMappings2Ask(); - - //STATISTCS - StatisticsManager.extracStatisticsDiscardedMappings(); - StatisticsManager.extracStatisticsHardDiscardedMappings(); - StatisticsManager.extracStatisticsConflictiveMappings(); - StatisticsManager.extracStatisticsConflictiveMappings_D_G(); - - - - } - - - /** - * This method checks if some of the conflictive could be retrieved back. - * That is, not in conflict with index. - */ - public void assessConflictiveMappings(){ - - - for (int ident1 : getConflictiveMappings().keySet()){ - - for (int ident2 : getConflictiveMappings().get(ident1)){ - - if (isMappingInConflictWithFixedMappings(ident1, ident2)){ - - //if () - - } - - - } - - } - - } - - - - /** - * We add them iff they are not already inferred and are not in conflict - * Last Step of LogMap - * @deprecated - */ - public void assesWeakenedMappingsDandG2(boolean removeAfterwards, boolean add2Anchors){ - //Mappings to review and - LogOutput.print("Assessing weakened mappings by Dowling and Gallier."); - - for (int ide1 : weakenedDandG_Mappings1N.keySet()){ - - for (int ide2 : weakenedDandG_Mappings1N.get(ide1)){ - - if (isMappingInConflictWithFixedMappings(ide1, ide2)){ - addSubMapping2ConflictiveAnchors(ide1, ide2); - } - else if (!isMappingInferred(ide1, ide2)){ //If inferred do not add - //Add in exact - // - if (add2Anchors) //Final addition - addSubMapping2ListOfAnchors(ide1, ide2); - else - addSubMapping2Mappings2Review(ide1, ide2); //check with new ones - } - } - } - - if (removeAfterwards) - weakenedDandG_Mappings1N.clear(); - } - - - - - - - /** - * Instance ANCHORS - */ - public void createInstanceAnchors(){ - - InstanceMatchingAssessment instanceMappingAssessment = new InstanceMatchingAssessment(index, this); - - double required_confidence; - double compatibility_factor; - double confidence; - //0: ok, 1: disc1, 2: disc2, 3: incompatible - int type_output; - //int num=0; - - int num_incompatible_instances =0; - - //EXACT IF - LogOutput.print("Size IF intersection exact: " + if_exact_intersection4individuals.size()); - - boolean ambiguity; - for (Set if_entry : if_exact_intersection4individuals){ - - ambiguity=false; - - //Only those individuals uniquely identified or almost!! - if (onto_process1.getInvertedFileMatching4Individuals().get(if_entry).size()>1 || - onto_process2.getInvertedFileMatching4Individuals().get(if_entry).size()>1){ - ambiguity=true; - } - - for (int ident1 : onto_process1.getInvertedFileMatching4Individuals().get(if_entry)){ - - for (int ident2 : onto_process2.getInvertedFileMatching4Individuals().get(if_entry)){ - - //required confidence and comp factor are the same... - required_confidence = instanceMappingAssessment.getConfidence4Compatibility(ident1, ident2); - compatibility_factor = instanceMappingAssessment.getCompatibilityFactor(ident1, ident2); - - - //TODO Categories, only for ambiguouss mappings - if (!instanceMappingAssessment.haveInstancesCompatibleCategories(ident1, ident2) && ambiguity){ - required_confidence=3.0; - } - - - if (required_confidence>1.0){ - //LogOutput.print("Incompatible individuals: " + if_entry + " " + ident1 + " " + ident2); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident1) + " " + index.getAlternativeLabels4IndividualIndex(ident1)); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident2) + " " + index.getAlternativeLabels4IndividualIndex(ident2)); - num_incompatible_instances++; - - type_output=3;//incomp - - } - else{ - - //we extract isub - confidence = extractISUB4InstanceMapping(ident1, ident2); - - - - if (confidence>=required_confidence){ - - addInstanceMapping(ident1, ident2, ambiguity); - //addSubInstanceMapping(ident2, ident1); we only add one side since we do not split instance mappings - - type_output=0; - - - } - else{ - type_output=1;//disc 1 - //LogOutput.print("Not good individuals: " + if_entry + " " + ident1 + " " + ident2 + " " + confidence + " " + required_confidence); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident1) + " " + index.getAlternativeLabels4IndividualIndex(ident1)); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident2) + " " + index.getAlternativeLabels4IndividualIndex(ident2)); - } - } - - if (Parameters.output_instance_mapping_files){ - - addOutputType4Indivual(ident1, ident2, type_output); - - //EXTRACT ISB IF not yet - extractISUB4InstanceMapping(ident1, ident2); - - //add comp factor - addCompFactor4Indivual(ident1, ident2, compatibility_factor); - - //Extract scope - extractScope4InstanceMapping(ident1, ident2); - - } - - - } - - } - - }//for if exact - - LogOutput.print("\nNUmber of Instance mappings exact IF: " + getInstanceMappings().keySet().size() + " - " + getSizeOfInstanceMappings()); - - LogOutput.print("NUM INCOMPATIBLE INDIV MAPPINGS: " + num_incompatible_instances + "\n"); - - if_exact_intersection4individuals.clear(); - num_incompatible_instances=0; - - - //WEAK IF - LogOutput.print("Sife IF intersection weak: " + if_weak_intersection4individuals.size()); - - for (String if_entry : if_weak_intersection4individuals){ - - ambiguity=false; - - //Only those individuals uniquely identified or almost!! - if (onto_process1.getInvertedFileWeakMatching4Individuals().get(if_entry).size()>1 || - onto_process2.getInvertedFileWeakMatching4Individuals().get(if_entry).size()>1){ - ambiguity=true; - } - - - for (int ident1 : onto_process1.getInvertedFileWeakMatching4Individuals().get(if_entry)){ - - if (isIndividualAlreadyMapped(ident1)){ - continue; - } - - for (int ident2 : onto_process2.getInvertedFileWeakMatching4Individuals().get(if_entry)){ - - if (isIndividualAlreadyMapped(ident2)){ - continue; - } - - //New candidate mapping - - required_confidence = instanceMappingAssessment.getConfidence4Compatibility(ident1, ident2); - compatibility_factor = instanceMappingAssessment.getCompatibilityFactor(ident1, ident2); - - - //TODO Categories, only for ambiguouss mappings - if (!instanceMappingAssessment.haveInstancesCompatibleCategories(ident1, ident2) & ambiguity){ - required_confidence=3.0; - } - - - if (required_confidence>1.0){ - //LogOutput.print("Incompatible individuals: " + if_entry + " " + ident1 + " " + ident2); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident1) + " " + index.getAlternativeLabels4IndividualIndex(ident1)); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident2) + " " + index.getAlternativeLabels4IndividualIndex(ident2)); - num_incompatible_instances++; - - type_output=3; - - } - - else { - //we extract isub - confidence = extractISUB4InstanceMapping(ident1, ident2); - - if (confidence>=required_confidence){ - - addInstanceMapping(ident1, ident2, ambiguity); - //addSubInstanceMapping(ident2, ident1); we only add one side - - type_output=0; - - } - else{ - if (confidence>0.65){ - //LogOutput.print("Not good individuals: " + if_entry + " " + ident1 + " " + ident2 + " " + confidence + " " + required_confidence); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident1) + " " + index.getAlternativeLabels4IndividualIndex(ident1)); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident2) + " " + index.getAlternativeLabels4IndividualIndex(ident2)); - //LogOutput.print("\t Types 1: " +index.getIndividualClassTypes4Identifier(ident1)); - //for (int id : index.getIndividualClassTypes4Identifier(ident1)){ - // LogOutput.printAlways("\t\t"+ index.getName4ConceptIndex(id)); - //} - //LogOutput.print("\t Types 2: " +index.getIndividualClassTypes4Identifier(ident2)); - //for (int id : index.getIndividualClassTypes4Identifier(ident2)){ - // LogOutput.printAlways("\t\t"+ index.getName4ConceptIndex(id)); - //} - type_output=1; - } - else{ - type_output=2; - } - } - } - - if (Parameters.output_instance_mapping_files){ - - addOutputType4Indivual(ident1, ident2, type_output); - - //EXTRACT ISB IF not yet - extractISUB4InstanceMapping(ident1, ident2); - - //add comp factor - addCompFactor4Indivual(ident1, ident2, compatibility_factor); - - //Extract scope - extractScope4InstanceMapping(ident1, ident2); - - } - - - - } - - } - - } - - LogOutput.print("\nNUmber of Instance mappings exact+weak IF: " + getInstanceMappings().keySet().size() + " - " + getSizeOfInstanceMappings()); - LogOutput.print("NUM INCOMPATIBLE INDIV MAPPINGS: " + num_incompatible_instances); - - if_weak_intersection4individuals.clear(); - - - - //WEAK IF role assertions - LogOutput.print("Size role assetions: " + if_roleassertions_intersection4individuals.size()); - //System.out.println("Size role assetions IF itersect: " + if_roleassertions_intersection4individuals.size()); - - - //max ambiguity for these cases - int max_amb=2; ///TODO this also changed! - - for (String if_entry : if_roleassertions_intersection4individuals){ - - - //Only those individuals uniquely identified or almost!! - if (onto_process1.getInvertedFileRoleAssertions().get(if_entry).size()>max_amb || - onto_process2.getInvertedFileRoleAssertions().get(if_entry).size()>max_amb) - continue; - - - /*if ((onto_process1.getInvertedFileRoleAssertions().get(if_entry).size()+ - onto_process2.getInvertedFileRoleAssertions().get(if_entry).size()) > max_amb) - continue; - */ - - - - for (int ident1 : onto_process1.getInvertedFileRoleAssertions().get(if_entry)){ - - if (isIndividualAlreadyMapped(ident1)){ - continue; - } - - for (int ident2 : onto_process2.getInvertedFileRoleAssertions().get(if_entry)){ - - if (isIndividualAlreadyMapped(ident2)){ - continue; - } - - //New candidate mapping - //System.out.println("NEW!! Size IFs: "+ onto_process1.getInvertedFileRoleAssertions().get(if_entry).size()+ " - "+ onto_process2.getInvertedFileRoleAssertions().get(if_entry).size()); - - required_confidence = instanceMappingAssessment.getConfidence4Compatibility(ident1, ident2); - compatibility_factor = instanceMappingAssessment.getCompatibilityFactor(ident1, ident2); - - //TODO Categories - if (!instanceMappingAssessment.haveInstancesCompatibleCategories(ident1, ident2)){ - required_confidence=3.0; - } - - - if (required_confidence>1.0){ - //LogOutput.print("Incompatible individuals: " + if_entry + " " + ident1 + " " + ident2); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident1) + " " + index.getAlternativeLabels4IndividualIndex(ident1)); - //LogOutput.print("\t" +index.getName4IndividualIndex(ident2) + " " + index.getAlternativeLabels4IndividualIndex(ident2)); - num_incompatible_instances++; - type_output = 3; - - } - else { - //we extract isub - confidence = extractISUB4InstanceMapping(ident1, ident2); - - //we do not discard by confidence since if is probably low - addInstanceMapping(ident1, ident2, true); //check always - - type_output = 0; - } - - - - if (Parameters.output_instance_mapping_files){ - - addOutputType4Indivual(ident1, ident2, type_output); - - //EXTRACT ISB IF not yet - extractISUB4InstanceMapping(ident1, ident2); - - //add comp factor - addCompFactor4Indivual(ident1, ident2, compatibility_factor); - - //Extract scope - extractScope4InstanceMapping(ident1, ident2); - } - - - } - - } - - } - - LogOutput.print("\nNUmber of Instance mappings exact+weak+roleass IF: " + getInstanceMappings().keySet().size() + " - " + getSizeOfInstanceMappings()); - LogOutput.print("NUM INCOMPATIBLE INDIV MAPPINGS: " + num_incompatible_instances); - - if_roleassertions_intersection4individuals.clear(); - - - - LogOutput.print("Instances: " + instanceMappings1N.size()); - LogOutput.print("Instances ambiguity: " + instanceMappings1N_ambiguity.size()); - LogOutput.print("Instances not in output: " + instanceMappings1N_not_allowed_output.size()); - - //----------------------------------------------------------------- - //REVISE instance mappings using referenced individuals - //------------------------------------------------------------------ - double required_sim; - for (int index1 : instanceMappings1N_ambiguity.keySet()){ - for (int index2 : instanceMappings1N_ambiguity.get(index1)){ - - - double sim = getSimilarityReferredInstances(index1, index2); - //if (sim >0) - //System.out.println("Similarity: " + sim); - - - required_sim=0.20; - if (getISUB4InstanceMapping(index1, index2)>0.9){ - required_sim=0.10; - } - - - if (sim>required_sim){ - addInstanceMapping(index1, index2); - } - - //We give another chance to the individuals using their characteristics (e.g. publication count, numb of brothers, num directed films etc.) - //Charactersitics are a list of values - if (haveIndividualsSameCharacteristics(index1, index2)) - addInstanceMapping(index1, index2); - } - - } - - - - } - - /** - * Returns Jaccard-based similarity - * @param index1 - * @param index2 - * @return - */ - private double getSimilarityReferredInstances(int index1, int index2){ - - //For mapped instances we use the target individuals - Set referred1_2 = new HashSet(); - Set referred1 = index.getReferencedIndividuals4Individual(index1); - for (int ref_indiv1 : referred1){ - if (instanceMappings1N.containsKey(ref_indiv1)){ - referred1_2.addAll(instanceMappings1N.get(ref_indiv1)); - } - if (instanceMappings1N_ambiguity.containsKey(ref_indiv1)){ - referred1_2.addAll(instanceMappings1N_ambiguity.get(ref_indiv1)); - } - if (instanceMappings1N_not_allowed_output.containsKey(ref_indiv1)){ - referred1_2.addAll(instanceMappings1N_not_allowed_output.get(ref_indiv1)); - } - - } - - //System.out.println(index.getLabel4IndividualIndex(index1)); - - - Set referred2 = index.getReferencedIndividuals4Individual(index2); - - int size_union = referred2.size() + referred1_2.size(); - - - //System.out.println("\t: Referred 1: " + referred1.size()); - //System.out.println("\t: Referred 1->2: " + referred1_2.size()); - //System.out.println("\t: Referred 2: " + referred2.size()); - - - //intersection - referred1_2.retainAll(referred2); - - - //System.out.println("\tIntesection: " + referred1_2.size()); - - - //Jaccard index - return (double)((double)referred1_2.size()/(double) size_union); - - } - - - private boolean haveIndividualsSameCharacteristics(int index1, int index2){ - - List charact1 = index.getCharactersitics4Individual(index1); - List charact2 = index.getCharactersitics4Individual(index2); - - if (charact1.size()!=charact2.size()) - return false; - - for (int i=0; i < charact1.size(); i++){ - //if (charact1.get(i)!=charact2.get(i)){ - if (!charact1.get(i).equals(charact2.get(i))){ - //if (i==2) - // LogOutput.printError(charact1.get(i) + "-" + charact2.get(i)); - return false; - } - } - - - return true; - } - - - - /** - * @deprecated - * @param index1 - * @param index2 - * @return - */ - private boolean areReferredInstancesInContainmentRelationship(int index1, int index2){ - - //For mapped instances we use the target individuals - Set referred1_2 = new HashSet(); - Set referred1 = index.getReferencedIndividuals4Individual(index1); - for (int ref_indiv1 : referred1){ - if (instanceMappings1N.containsKey(ref_indiv1)){ - referred1_2.addAll(instanceMappings1N.get(ref_indiv1)); - } - if (instanceMappings1N_ambiguity.containsKey(ref_indiv1)){ - referred1_2.addAll(instanceMappings1N_ambiguity.get(ref_indiv1)); - } - if (instanceMappings1N_not_allowed_output.containsKey(ref_indiv1)){ - referred1_2.addAll(instanceMappings1N_not_allowed_output.get(ref_indiv1)); - } - - } - - - Set referred2 = index.getReferencedIndividuals4Individual(index2); - - if (referred2.containsAll(referred1_2) || referred1_2.containsAll(referred2)){ - System.out.println("Containment"); - return true; - } - - return false; - - - } - - - - - - - - - /** - * Called from repair facility and assessment from web service. Only to delete incompatible mappings. - * Isub in principle has been already added - * - * - */ - public void evaluateCompatibilityInstanceMappings(){ - - InstanceMatchingAssessment instanceMappingAssessment = new InstanceMatchingAssessment(index, this); - - Map> todelete = new HashMap>(); - double required_confidence; - - - int num_incompatible_instances=0; - - //We evaluate the compatibility wrt classes - for (int ident1 : getInstanceMappings().keySet()){ - - for (int ident2 : getInstanceMappings().get(ident1)){ - - required_confidence = instanceMappingAssessment.getConfidence4Compatibility(ident1, ident2); - - //TODO in this repair we do not remove according to categories - - if (required_confidence>1.0){ - LogOutput.print("Incompatible individuals: " + ident1 + " " + ident2); - LogOutput.print("\t" +index.getName4IndividualIndex(ident1) + " " + index.getAlternativeLabels4IndividualIndex(ident1)); - LogOutput.print("\t" +index.getName4IndividualIndex(ident2) + " " + index.getAlternativeLabels4IndividualIndex(ident2)); - num_incompatible_instances++; - - if (!todelete.containsKey(ident1)){ - todelete.put(ident1, new HashSet()); - } - todelete.get(ident1).add(ident2); - - } - - } - } - - - deleteIncompatibleInstanceMappings(todelete); - LogOutput.print("NUM INCOMPATIBLE INDIV MAPPINGS: " + num_incompatible_instances); - - todelete.clear(); - - - } - - private void deleteIncompatibleInstanceMappings(Map> todelete){ - - for (int ident1 : todelete.keySet()){ - - for (int ident2 : todelete.get(ident1)){ - - getInstanceMappings().get(ident1).remove(ident2); - - if (getInstanceMappings().get(ident1).size()==0){ - getInstanceMappings().remove(ident1); - } - - } - } - - } - - - - /** - * - * DATA PROPERTY ANCHORS - * - */ - public void createDataPropertyAnchors() { - - // Intersects IF and also uses ISUB - - - - - //if_exact_intersection4data_prop.clear(); - - - //Entries are only 1 to 1 - for (Set if_entry : if_exact_intersection4data_prop){ - - dataPropertyMappings.put( - onto_process1.getInvertedFileExactMatching4DataProp().get(if_entry), - onto_process2.getInvertedFileExactMatching4DataProp().get(if_entry) - ); - - dataPropertyMappings2confidence.put( - onto_process1.getInvertedFileExactMatching4DataProp().get(if_entry), - 1.0 - ); - } - - if_exact_intersection4data_prop.clear(); - - - - - //ISUB - double maxconf=-10; - double score; - int identmax=-1; - - //use isub to extract references - for (int ident1 : index.getDataPropIdentifierSet()){ - maxconf=-10; - identmax=-1; - - //if (index.getDataPropertyIndex(ident1).getOntologyId()>) - // continue; - - if (dataPropertyMappings.containsKey(ident1)) - continue; - - for (int ident2 : index.getDataPropIdentifierSet()){ - - if (dataPropertyMappings.containsValue(ident2)) - continue; - - if (ident1>=ident2) - continue; - - //They are from the same ontology - if (index.getDataPropertyIndex(ident1).getOntologyId()==index.getDataPropertyIndex(ident2).getOntologyId()){ - continue; - } - - score=getIsubScore4DataPropertyLabels(ident1, ident2); - - if (score>maxconf){ - maxconf=score; - identmax=ident2; - } - } - - if (maxconf>0.75){ //Input parameter - dataPropertyMappings.put(ident1, identmax); - dataPropertyMappings2confidence.put(ident1, maxconf); - } - } - - LogOutput.printAlways("Dirty anchors Data Prop: " + dataPropertyMappings.size()); - - //COMPATIBILITY - //Analize compatibility of domains and ranges - //Filter: eg writtenBy (cmt confof) - evaluateCompatibilityDataPropertyMappings(); //and delete conflictive mappings - - - - } - - - - public void evaluateCompatibilityDataPropertyMappings(){ - - //COMPATIBILITY - //Analize compatibility of domains and ranges - //Filter: eg writtenBy (cmt confof) - DataPropertyMappingAssessment propertyMappingAssessment = new DataPropertyMappingAssessment(index, this); - Set todelete = new HashSet(); - double required_confidence; - double confidence_mapping; - for (int ident1 : dataPropertyMappings.keySet()){ - - //required_confidence = propertyMappingAssessment.arePropertiesCompatible(ident1, dataPropertyMappings.get(ident1)); - required_confidence = propertyMappingAssessment.getConfidence4Compatibility(ident1, dataPropertyMappings.get(ident1)); - - - confidence_mapping = getConfidence4DataPropertyAnchor(ident1, dataPropertyMappings.get(ident1)); - - if (confidence_mapping1.5){ - LogOutput.printAlways("Incompatible data properties"); - LogOutput.printAlways("\t" +index.getName4DataPropIndex(ident1)); - LogOutput.printAlways("\t" +index.getName4DataPropIndex(dataPropertyMappings.get(ident1))); - } - //TODO - //Ask if oracle active and properties are compatible - else if (OracleManager.isActive()){ - if (confidence_mapping>=Parameters.min_conf_pro_map){ - if (OracleManager.isMappingValid( - index.getIRIStr4DataPropIndex(ident1), - index.getIRIStr4DataPropIndex(dataPropertyMappings.get(ident1)))){ - - LogOutput.printAlways("Data property mapping in Oracle"); - LogOutput.printAlways("\t" +index.getName4DataPropIndex(ident1)); - LogOutput.printAlways("\t" +index.getName4DataPropIndex(dataPropertyMappings.get(ident1))); - - - //We also ask for domains - //Not any more - //askOraculoAboutDomains4DataPropertyMappings(ident1, dataPropertyMappings.get(ident1)); - - - continue; //so we do not delete the mapping - } - else{ - LogOutput.printAlways("Data property mapping NOT in Oracle"); - LogOutput.printAlways("\t" +index.getName4DataPropIndex(ident1)); - LogOutput.printAlways("\t" +index.getName4DataPropIndex(dataPropertyMappings.get(ident1))); - } - } - } - - //deleteDataPropertyAnchor(ident1); - - todelete.add(ident1); - - //LogOutput.printAlways(index.getIRIStr4DataPropIndex(ident1)); - //LogOutput.printAlways(index.getIRIStr4DataPropIndex(dataPropertyMappings.get(ident1))); - } - //ONLY IF oraculo active we double check those cases extended with alternative labels - else if (OracleManager.isActive() && (index.getAlternativeLabels4DataPropertyIndex(ident1).size()>1 || index.getAlternativeLabels4DataPropertyIndex(dataPropertyMappings.get(ident1)).size()>1)){ - - - double isub_labels = getIsubScore4DataPropertyLabels(ident1, dataPropertyMappings.get(ident1), false); - - //Check isub without alternative labels - if (isub_labels set_str : if_exact_intersection4obj_prop){ - - objPropertyMappings.put( - onto_process1.getInvertedFileExactMatching4ObjProp().get(set_str), - onto_process2.getInvertedFileExactMatching4ObjProp().get(set_str) - ); - - objPropertyMappings2confidence.put( - onto_process1.getInvertedFileExactMatching4ObjProp().get(set_str), - 1.0); - } - - - if_exact_intersection4obj_prop.clear(); - - - - ///ISUB - //use isub to extract references - double maxconf=-10; - double score; - int identmax=-1; - - //use isub to extract references - for (int ident1 : index.getObjectPropIdentifierSet()){ - maxconf=-10; - identmax=-1; - - if (objPropertyMappings.containsKey(ident1)) - continue; - - for (int ident2 : index.getObjectPropIdentifierSet()){ - - if (objPropertyMappings.containsValue(ident2)) - continue; - - - if (ident1>=ident2) - continue; - - //They are from the same ontology - if (index.getObjectPropertyIndex(ident1).getOntologyId()==index.getObjectPropertyIndex(ident2).getOntologyId()){ - continue; - } - - - score=getIsubScore4ObjectPropertyLabels(ident1, ident2); - - if (score>maxconf){ - maxconf=score; - identmax=ident2; - } - } - - if (maxconf>0.75){ - objPropertyMappings.put(ident1, identmax); - objPropertyMappings2confidence.put(ident1, maxconf); - } - } - - - LogOutput.printAlways("Dirty anchors Object Prop: " + objPropertyMappings.size()); - - - //COMPATIBILITY - //Analize compatibility of domains and ranges - //Filter: eg writtenBy (cmt confof) - evaluateCompatibilityObjectPropertyMappings(); - - - - - } - - - public void evaluateCompatibilityObjectPropertyMappings(){ - - //COMPATIBILITY - //Analize compatibility of domains and ranges - //Filter: eg writtenBy (cmt confof) - - - ObjectPropertyMappingAssessment propertyMappingAssessment = new ObjectPropertyMappingAssessment(index, this); - - Set todelete = new HashSet(); - double required_confidence; - double confidence_mapping; - for (int ident1 : objPropertyMappings.keySet()){ - - - //required_confidence = propertyMappingAssessment.arePropertiesCompatible(ident1, objPropertyMappings.get(ident1)); - required_confidence = propertyMappingAssessment.getConfidence4Compatibility(ident1, objPropertyMappings.get(ident1)); - - - - - - //LogOuput.print(ident1); - //LogOuput.print(objPropertyMappings2confidence); - //LogOuput.print(objPropertyMappings.get(ident1)); - //LogOuput.print(objPropertyMappings2confidence.get(ident1)); - confidence_mapping = getConfidence4ObjectPropertyAnchor(ident1, objPropertyMappings.get(ident1)); - if (confidence_mapping1.5){ - LogOutput.printAlways("Incompatible object properties"); - LogOutput.printAlways(index.getIRIStr4ObjPropIndex(ident1)); - LogOutput.printAlways(index.getIRIStr4ObjPropIndex(objPropertyMappings.get(ident1))); - } - //TODO - //Ask if oracle active and compatible props (we also include PROBABLY_INCOMPATIBLE_RANGE_OR_DOMAIN) - else if (OracleManager.isActive()){ - if (confidence_mapping>=Parameters.min_conf_pro_map){ - if (OracleManager.isMappingValid( - index.getIRIStr4ObjPropIndex(ident1), - index.getIRIStr4ObjPropIndex(objPropertyMappings.get(ident1)))){ - - LogOutput.printAlways("Object property mapping in Oracle"); - LogOutput.printAlways(index.getIRIStr4ObjPropIndex(ident1)); - LogOutput.printAlways(index.getIRIStr4ObjPropIndex(objPropertyMappings.get(ident1))); - - //We also ask for domain and ranges - //NOt any more - //askOraculoAboutDomainsAndRange4ObjectPropertyMappings(ident1, objPropertyMappings.get(ident1)); - - continue; //so we do not delete the mapping - } - else { - LogOutput.printAlways("Object property mapping NOT in Oracle"); - LogOutput.printAlways(index.getIRIStr4ObjPropIndex(ident1)); - LogOutput.printAlways(index.getIRIStr4ObjPropIndex(objPropertyMappings.get(ident1))); - } - } - } - - todelete.add(ident1); - //deleteObjectPropertyAnchor(ident1); - - } - //ONLY IF oraculo active we double check those cases extended with alternative labels - else if (OracleManager.isActive() && (index.getAlternativeLabels4ObjectPropertyIndex(ident1).size()>1 || index.getAlternativeLabels4ObjectPropertyIndex(objPropertyMappings.get(ident1)).size()>1)){ - //Check isub without alternative labels - - double isub_labels = getIsubScore4ObjectPropertyLabels(ident1, objPropertyMappings.get(ident1), false); - - if (isub_labels domain1=index.getDomainDataProp4Identifier(ident1); - Set domain2=index.getDomainDataProp4Identifier(ident2); - - - //askOraculoAboutPossibleMappings(domain1, domain2); - - - } - - - - private void askOraculoAboutDomainsAndRange4ObjectPropertyMappings(int ident1, int ident2){ - - Set domain1=index.getDomainObjProp4Identifier(ident1); - Set domain2=index.getDomainObjProp4Identifier(ident2); - - - Set ranges1=index.getRangeObjProp4Identifier(ident1); - Set ranges2=index.getRangeObjProp4Identifier(ident2); - - - //askOraculoAboutPossibleMappings(domain1, domain2); - - //askOraculoAboutPossibleMappings(ranges1, ranges2); - - } - - - private void askOraculoAboutPossibleMappings(Set classes1, Set classes2){ - - for (int cls1 : classes1){ - for (int cls2 : classes2){ - - //Only mappings not considered already as conflictive or included in anchors - if (!isMappingInConflictiveSet(cls1, cls2) && - !isMappingAlreadyInList(cls1, cls2) && - !isMappingInConflictiveSet(cls2, cls1) && - !isMappingAlreadyInList(cls2, cls1) && - !isMappingInConflictWithFixedMappings(cls1, cls2)){ - - //We ask oraculo - if (OracleManager.isMappingValid( - index.getIRIStr4ConceptIndex(cls1), - index.getIRIStr4ConceptIndex(cls2))){ - - - //it may still be in conflict with other classes - LogOutput.printAlways("Added new mapping: " + - index.getIRIStr4ConceptIndex(cls1) + " " + - index.getIRIStr4ConceptIndex(cls2)); - - - addSubMapping2ListOfAnchors(cls1, cls2); - addSubMapping2ListOfAnchors(cls2, cls1); - - - } - else{ - LogOutput.printAlways("NOT Added new mapping: " + - index.getIRIStr4ConceptIndex(cls1) + " " + - index.getIRIStr4ConceptIndex(cls2)); - } - - - } - else if (isMappingInConflictWithFixedMappings(cls1, cls2)){ - LogOutput.printAlways("In Conflict new mapping: " + - index.getIRIStr4ConceptIndex(cls1) + " " + - index.getIRIStr4ConceptIndex(cls2)); - } - - } - - } - - } - - - - - - private void deleteDataPropertyAnchors(Set todelete){ - dataPropertyMappings.keySet().removeAll(todelete); - dataPropertyMappings2confidence.keySet().removeAll(todelete); - - } - - private void deleteObjectPropertyAnchors(Set todelete){ - objPropertyMappings.keySet().removeAll(todelete); - objPropertyMappings2confidence.keySet().removeAll(todelete); - - } - - - - - - private Map> visitedScopeMappings = new HashMap>(); - - private boolean isaVisitedScopeMapping(int index1, int index2){ - - if (visitedScopeMappings.containsKey(index1)){ - if (visitedScopeMappings.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - private void addVisistedScopeMapping(int index1, int index2){ - if (!visitedScopeMappings.containsKey(index1)){ - visitedScopeMappings.put(index1, new HashSet()); - } - visitedScopeMappings.get(index1).add(index2); - } - - - /** - * We anaylize the scope of current mappings - * @deprecated - */ - protected void createAnchorsExpansion(){ - - //We transform structure anchorMappings1N to list of objects - - LinkedList list_mappings = new LinkedList(); - - for (int ide1 : logmapMappings1N.keySet()){ - for (int ide2 : logmapMappings1N.get(ide1)){ - - //we consider the equivalence only - if (isId1SmallerThanId2(ide1, ide2)){ - - list_mappings.add(new MappingObjectIdentifiers(ide1, ide2)); - - } - } - } - - - /*for (int ide1 : candidateMappings2ask1N.keySet()){ - for (int ide2 : candidateMappings2ask1N.get(ide1)){ - - //we consider the equivalence only - if (isId1SmallerThanId2(ide1, ide2)){ - - list_mappings.add(new MappingObjectIdentifiers(ide1, ide2)); - - } - } - }*/ - - Set module1; - Set module2; - MappingObjectIdentifiers head_mapping; - - int newIn=0; - int newCons=0; - - LogOutput.print("Mappings 2 EXPAND: " + list_mappings.size()); - - while (!list_mappings.isEmpty()){ - - head_mapping = list_mappings.poll(); //retrieves and removes elements - - module1 = index.getScope4Identifier_Expansion(head_mapping.getIdentifierOnto1()); - module2 = index.getScope4Identifier_Expansion(head_mapping.getIdentifierOnto2()); - - //LogOutput.print("Module 1: " + module1.size()); - //LogOutput.print("Module 2: " + module2.size()); - - for (int ide1 : module1){ - for (int ide2: module2){ - - if (!isId1SmallerThanId2(ide1, ide2)) - continue; - - //Ignore - if (isaVisitedScopeMapping(ide1, ide2)) - continue; - - addVisistedScopeMapping(ide1, ide2); - newCons++; - - - //if true the add to expansion list - if (evaluateCandidateMappingExpansion(ide1, ide2)){ - list_mappings.add(new MappingObjectIdentifiers(ide1, ide2)); - newIn++; - } - - - } - } - - } - - - list_mappings.clear(); - //printStatisticsMappingEvaluation(); - LogOutput.print("Considered: " + newCons); - LogOutput.print("New mappings expansion: " + newIn); - - - }//en anchor expansion - - - - - - - - - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/I_Sub.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/I_Sub.java deleted file mode 100644 index bd18f2dc38..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/I_Sub.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Created on 2004 - - */ -package uk.ac.ox.krr.logmap2.mappings; - -import java.util.Calendar; - -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; - -/** - * @author Giorgos Stoilos - * - * This class implements the string matching method proposed in the paper - * "A String Metric For Ontology Alignment", published in ISWC 2005 - * - */ -public class I_Sub{ - - public double score( String st1 , String st2 ){ - - if( (st1 == null) || (st2 == null) ){ - return -1; - } - - String s1 = st1.toLowerCase(); - String s2 = st2.toLowerCase(); - - s1 = normalizeString( s1 , '.' ); - s2 = normalizeString( s2 , '.' ); - s1 = normalizeString( s1 , '_' ); - s2 = normalizeString( s2 , '_' ); - s1 = normalizeString( s1 , ' ' ); - s2 = normalizeString( s2 , ' ' ); - - int l1 = s1.length(); // length of s - int l2 = s2.length(); // length of t - - int L1 = l1; - int L2 = l2; - - if ((L1 == 0) && (L2 == 0)) - return 1; - if ((L1 == 0) || (L2 == 0)) - return -1; - - double common = 0; - int best = 2; - - int max = Math.min(l1, l2); // the maximal length of a subs - - while( s1.length() >0 && s2.length() >0 && best !=0 ){ - best = 0; // the best subs length so far - - l1 = s1.length(); // length of s - l2 = s2.length(); // length of t - - int i = 0; // iterates through s1 - int j = 0; // iterates through s2 - - int startS2 = 0; - int endS2 = 0; - int startS1 = 0; - int endS1 = 0; - int p=0; - - for( i = 0; (i < l1) && (l1 - i > best); i++) { - j = 0; - while (l2 - j > best) { - int k = i; - for(;(j < l2) && (s1.charAt(k) != s2.charAt(j)); j++); - //System.out.println( s1.charAt( k ) + " " + s2.charAt( j ) ); - - if (j != l2) { // we have found a starting point - //System.out.println( "j: " + j ); - p = j; - for (j++, k++; - (j < l2) && (k < l1) && (s1.charAt(k) == s2.charAt(j)); - j++, k++); - if( k-i > best){ - best = k-i; - startS1 = i; - endS1 = k; - startS2 = p; - endS2 = j; - } - //best = Math.max(best, k - i); - } - } - } - //Vector v = new Vector(); - //if( startS1 != endS1 ) - // System.out.println( s1.substring( startS1 , endS1 ) ); - char[] newString = new char[ s1.length() - (endS1 - startS1) ]; - - j=0; - for( i=0 ;i=startS1 && i< endS1 ) - continue; - newString[j++] = s1.charAt( i ); - } - - s1 = new String( newString ); - - newString = new char[ s2.length() - ( endS2 - startS2 ) ]; - j=0; - for( i=0 ;i=startS2 && i< endS2 ) - continue; - newString[j++] = s2.charAt( i ); - } - s2 = new String( newString ); - - //if( (startS1 < 1 || startS1 > 2 ) - // || (startS2 < 1 || startS2 > 2) && startS1 != startS2 ) - // best--; - - if( best > 2 ) - common += best; - else - best = 0; - - //System.out.println( s1 + ":" + s2 ); - //System.out.println( "StartS1 : " + startS1 + " EndS1: " + endS1 ); - //System.out.println( "StartS2 : " + startS2 + " EndS2: " + endS2 ); - } - - double commonality = 0; - double scaledCommon = (double)(2*common)/(L1+L2); - commonality = scaledCommon; - - double winklerImprovement = winklerImprovement( st1 , st2 , commonality ); - double dissimilarity = 0; - - double rest1 = L1 - common; - double rest2 = L2 - common; - - double unmatchedS1 = Math.max( rest1 , 0 ); - double unmatchedS2 = Math.max( rest2 , 0 ); - unmatchedS1 = rest1/L1; - unmatchedS2 = rest2/L2; - - /** - * Hamacher Product - */ - double suma = unmatchedS1 + unmatchedS2; - double product = unmatchedS1 * unmatchedS2; - double p = 0.6; //For 1 it coincides with the algebraic product - if( (suma-product) == 0 ) - dissimilarity = 0; - else - dissimilarity = (product)/(p+(1-p)*(suma-product)); - - return commonality - dissimilarity + winklerImprovement; - } - - private double winklerImprovement( String s1 , String s2 , double commonality ){ - - int i; - //int n = Math.min( 4 , Math.min( s1.length() , s2.length() ) ); - int n = Math.min( s1.length() , s2.length() ); - for( i=0 ; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.mappings; - -import java.util.ArrayList; - -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OutPutFilesManager; -import uk.ac.ox.krr.logmap2.interactive.objects.MappingObjectInteractivity; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - - -/** - * This class defines the basic methods to provide the anchors between two ontologies - * Mappings have been used to index mappings and their direction then the entry ide_a:{id_b, id_bb} will - * represent the mappings ide_a->ide_b and ide_a->ide_bb (with the exception of structures representing equivalence mappings.) - * - * - * @author ernesto - * - */ -public abstract class MappingManager { - - long init, fin; - - protected IndexManager index; - - /**Necessary for statistic purposes*/ - protected Map> GSMappings1N = new HashMap>(); - - /**Anchor mappings. They represent "safe" mappings, high lexical similarity and with scope. - * They will be used as reference to asses/clean other candidates. We store mappings and implicitly the dir.*/ - protected Map> anchorMappings1N = new HashMap>(); - - - /** LogMap Mappings: they grow from anchors to the final set of output mappings **/ - protected Map> logmapMappings1N = new HashMap>(); - - /** Mappings from IF exact which must be assessed; or "repechaged" from 2ask (logmap or user)*/ - protected Map> mappings2Review = new HashMap>(); - - - - /**We store mappings and implicitely the dir. MAPPINGS TO BE ASKED TO LOGMAP AMBIGUITY HEURISTICS*/ - protected Map> candidateMappings2askLogMap1N = new HashMap>(); - - - /**We store mappings equiv mappings*/ - protected Map> candidateMappings2askUser1N = new HashMap>(); - - - /**List of mappings objects. Mappings to ask to the user*/ - //protected List listMappings2askUser1N = new ArrayList(); - protected Set listMappings2askUser1N = new HashSet(); - - - /**Split mappings with Dawling and Gallier**/ - protected Map> weakenedDandG_Mappings1N = new HashMap>(); - - /** Discarded mappings by LogMap*/ - protected Map> discardedMappings1N = new HashMap>(); - - /** Hard Discarded mappings by LogMap, should not be retrieved*/ - protected Map> hardDiscardedMappings1N = new HashMap>(); - - /** Mappings selected by user (only interactive process)*/ - protected Map> interactiveProcessMappings1N = new HashMap>(); - - /**Mappings that cause an error with D&G or are in conflict with exact mappings wrt interval labelling schema*/ - protected Map> conflictiveMappings1N = new HashMap>(); - - /**Only mappings that cause an error with D&G**/ - protected Map> conflictiveMappings1N_D_G = new HashMap>(); - - - /**Subset of weak mappings to be considered as candidates**/ - protected Map> weakCandidateMappings1N = new HashMap>(); - - - /**All possible mappings. Will be used for scope purposes*/ - protected Map> allWeakMappings1N = new HashMap>(); - - - protected Map dataPropertyMappings = new HashMap(); - protected Map objPropertyMappings = new HashMap(); - - protected Map dataPropertyMappings2confidence = new HashMap(); - protected Map objPropertyMappings2confidence = new HashMap(); - - private Map> anchor2scopeAll = new HashMap>(); - private Map> anchor2scopeAnchors = new HashMap>(); - private Map> anchor2isub = new HashMap>(); - private Map> anchor2isub_avg = new HashMap>(); - private Map> anchor2sim_weak = new HashMap>(); - private Map> anchor2addedByUser = new HashMap>(); - - - protected Map> instanceMappings1N = new HashMap>(); - protected Map> instanceMappings1N_inverted = new HashMap>(); //only for queries and statistic purposes - protected Map> instanceMappings2isub = new HashMap>(); - protected Map> instanceMappings2compfactor = new HashMap>(); - protected Map> instanceMappings2scope = new HashMap>(); - - protected Map> instanceMappings1N_not_allowed_output = new HashMap>(); - - protected Map> instanceMappings1N_ambiguity = new HashMap>(); - - - //0: ok, 1: disc1, 2: disc2, 3: incompatible - protected Map> instanceMappings2outputtype = new HashMap>(); - - - /**For statictics purposes*/ - protected Set discarded_candidates = new HashSet(); - - /** For P&R purposes*/ - protected Set mappings_candidates_Str = new HashSet(); - protected Set mappings_GS_Str = new HashSet(); - - - /** Category mappings (relevant for instance matching) **/ - protected Map> category_mappings = new HashMap>(); - - - double weightIsub=0.5; - double weightIsub_avg=0.0;//not used - double weightScope=0.3; - double weightScopeAnchors=0.2; - - I_Sub isub = new I_Sub(); - - - private boolean areExactFixed=false; - - private boolean filterWithHeuristicsInteractivity = true; - - - //Statistical purposes (DISCARDED) - //Type 0 - protected int goodAmb4=0; - protected int badAmb4=0; - //Type 1 - protected int goodDangEquiv=0; - protected int badDangEquiv=0; - //Type 2 - protected int goodAmbigExact=0; - protected int badAmbigExact=0; - //Type 3 - protected int goodConfidence=0; - protected int badConfidence=0; - - - - - - - - protected void isHardMappingInGS(int ide1, int ide2, int type){ - if (isMappingInGoldStandard(ide1, ide2)){ - switch(type){ - case 0: - goodAmb4++; - break; - case 1: - goodDangEquiv++; - break; - case 2: - goodAmbigExact++; - break; - case 3: - goodConfidence++; - break; - } - } - else { - switch(type){ - case 0: - badAmb4++; - break; - case 1: - badDangEquiv++; - break; - case 2: - badAmbigExact++; - break; - case 3: - badConfidence++; - break; - } - } - } - - - public void printHarDiscardedStatistics(){ - - LogOutput.print("Good Amb 4: " + goodAmb4); - LogOutput.print("Bad Amb 4: " + badAmb4); - - LogOutput.print("Good DangEqui: " + goodDangEquiv); - LogOutput.print("Bad DangEqui: " + badDangEquiv); - - LogOutput.print("Good AmbigExact: " + goodAmbigExact); - LogOutput.print("Bad AmbigExact: " + badAmbigExact); - - LogOutput.print("Good Confidence: " + goodConfidence); - LogOutput.print("Bad Confidence: " + badConfidence); - - } - - - /** - * If no interactivity, mappings are filtered using automatic heuristics, - * if this flag is set to true. Otherwise, former mappings 2 ask user are - * added automatically - * @return the filterWithHeuristicsInteractivity - */ - public boolean isFilterWithHeuristicsSecondLevelMappings() { - return filterWithHeuristicsInteractivity; - } - - - /** - * If no interactivity, mappings are filtered using automatic heuristics, - * if this flag is set to true. Otherwise, former mappings 2 ask user are - * added automatically - * @param filterWithHeuristicsInteractivity the filterWithHeuristicsInteractivity to set - */ - public void setFilterWithHeuristicsSecondLevelMappings( - boolean filterWithHeuristicsInteractivity) { - this.filterWithHeuristicsInteractivity = filterWithHeuristicsInteractivity; - } - - - //Not necessary for every extractor - public void intersectInvertedFiles(){ - - } - - - public abstract void processInputMappings(Set mappings); - - /*public void clearIntersectedInvertedFilesExact(){ - } - - public void clearIntersectedInvertedFilesStemmingAndWeak(){ - } - - public void clearIntersectedInvertedFiles4Properties(){ - - }*/ - - public void assesWeakenedMappingsDandG2(boolean removeAfterwards, boolean add2Anchors){ - //weakenedDandG_Mappings1N - } - - public void assessMappings2AskUser(){ - - } - - - - public abstract void createAnchors(); - - public abstract void createCandidates(); - - - public abstract void createDataPropertyAnchors(); - - public abstract void createObjectPropertyAnchors(); - - public abstract void createInstanceAnchors(); - - public abstract void extractAllWeakMappings(); - - public abstract void extractCandidatesSubsetFromWeakMappings(); - - - - public int getEntityAmbiguity_LogMapMappings(int ide){ - // Side - int amb=0; - - if (getLogMapMappings().containsKey(ide)){ - amb += getLogMapMappings().get(ide).size(); - } - - if (getToAskLogMapMappings().containsKey(ide)){ - amb += getToAskLogMapMappings().get(ide).size(); - } - - return amb; - - } - - public int getEntityAmbiguity_UserMappings(int ide){ - // Side - int amb=0; - - if (getLogMapMappings().containsKey(ide)){ - amb += getLogMapMappings().get(ide).size(); - } - - if (getToAskUserMappings().containsKey(ide)){ - amb += getToAskUserMappings().get(ide).size(); - } - - return amb; - - } - - - - /*public Set getMappedEntitiesOnto1(){ - return mapped_entities_onto1; - } - - public Set getMappedEntitiesOnto2(){ - return mapped_entities_onto2; - }*/ - - - public boolean isEntityAlreadyMapped(int index){ - return logmapMappings1N.containsKey(index); //If the entry was deleted if should be then in discarded entries!!! - } - - - - public boolean isEntityInCandidates2AskUser(int index){ - return candidateMappings2askUser1N.containsKey(index); - } - - public boolean isEntityInCandidates2AskLogMap(int index){ - return candidateMappings2askLogMap1N.containsKey(index); - } - - /** - * This method must only be used when only exact mappings are considered since treats the maps as 1 to 1 - * @param index - * @return - */ - public int getTargetEntity4Index(int index){ - if (logmapMappings1N.containsKey(index)){ - for (int ide2 : logmapMappings1N.get(index)) - return ide2; - } - - return -1;//in case there is no entity - } - - - public Set getTargetEntities4Index(int index){ - if (logmapMappings1N.containsKey(index)){ - return logmapMappings1N.get(index); - } - - return Collections.emptySet(); - } - - - public void removeSubMappingFromStructure(int ide1, int ide2){ //only one direction - if (logmapMappings1N.containsKey(ide1)){ - logmapMappings1N.get(ide1).remove(ide2); - if (logmapMappings1N.get(ide1).size()==0){ - logmapMappings1N.remove(ide1); - } - } - } - - - public void removeSubMappingFromMappings2Review(int ide1, int ide2){ //only one direction - if (mappings2Review.containsKey(ide1)){ - mappings2Review.get(ide1).remove(ide2); - if (mappings2Review.get(ide1).size()==0){ - mappings2Review.remove(ide1); - } - } - - } - - - - public void removeSubMappingFromConflictive_D_G(int ide1, int ide2){ //only one direction - if (conflictiveMappings1N_D_G.containsKey(ide1)){ - conflictiveMappings1N_D_G.get(ide1).remove(ide2); - if (conflictiveMappings1N_D_G.get(ide1).size()==0){ - conflictiveMappings1N_D_G.remove(ide1); - } - } - - } - - - - - - - - public void removeSubMappingFromWeakenedDandGMappings(int ide1, int ide2){ //only one direction - if (weakenedDandG_Mappings1N.containsKey(ide1)){ - weakenedDandG_Mappings1N.get(ide1).remove(ide2); - if (weakenedDandG_Mappings1N.get(ide1).size()==0){ - weakenedDandG_Mappings1N.remove(ide1); - } - } - } - - - public void removeSubMappingFromDiscarded(int ide1, int ide2){ //only one direction - if (discardedMappings1N.containsKey(ide1)){ - discardedMappings1N.get(ide1).remove(ide2); - if (discardedMappings1N.get(ide1).size()==0){ - discardedMappings1N.remove(ide1); - } - } - } - - /** - * Removes mappings and adds it to ambiguosmappimgs - * @param ide1 - * @param ide2 - */ - protected void removeAmbiguousFullMappingFromStructure(int ide1, int ide2, double min_average_isub){ - - removeSubMappingFromStructure(ide1, ide2); - removeSubMappingFromStructure(ide2, ide1); - - if (extractISUBAverage4Mapping(ide1, ide2) < min_average_isub){ - addEquivMapping2DiscardedAnchors(ide1, ide2); - } - else{ - addMapping2ListOfAnchors2AskLogMap(ide1, ide2); - } - } - - - /** - * Removes mappings and adds it to mappings2review - * @param ide1 - * @param ide2 - */ - protected void moveMapping2ReviewList(int ide1, int ide2){ - - removeSubMappingFromStructure(ide1, ide2); - removeSubMappingFromStructure(ide2, ide1); - - //OJO!! - //addEquivMapping2Mappings2Review(ide2, ide1); - addSubMapping2Mappings2Review(ide1, ide2);//only one side - - } - - - /* - public boolean isEntityAlreadyMappedOnto2(int index){ - return mapped_entities_onto2.contains(index); - }*/ - - - - public void saveAnchors() { - anchorMappings1N.putAll(logmapMappings1N); - } - - - public void setExactAsFixed(boolean set){ - areExactFixed=set; - } - - public Map> getFixedMappings(){ - if (areExactFixed) - return logmapMappings1N; - else - return Collections.EMPTY_MAP; - } - - - /** - * Highly precise mappings - * @return - */ - public Map> getAnchors(){ - return anchorMappings1N; - } - - - public Map> getLogMapMappings(){ - return logmapMappings1N; - } - - - public int getDirMapping(int ide1, int ide2){ - - if (isId1SmallerThanId2(ide1, ide2)){ - - if (isMappingAlreadyInList(ide2, ide1)){ - return Utilities.EQ; - } - else { - return Utilities.L2R; - } - } - else { - - if (isMappingAlreadyInList(ide2, ide1)){ - return Utilities.NoMap; //Already considered - } - else { - return Utilities.R2L; - } - } - } - - - public Map> getMappings2Review(){ - return mappings2Review; - } - - - public Map> getToAskUserMappings(){ - return candidateMappings2askUser1N; - } - - - - //public List getListOfMappingsToAskUser(){ - public Set getListOfMappingsToAskUser(){ - return listMappings2askUser1N; - } - - - public void addMappingObject2AskUserList(int index1, int index2){ - //listMappings2askUser1N.add(new MappingObjectInteractivity(index1, index2, ambiguity)); - listMappings2askUser1N.add(new MappingObjectInteractivity( - index1, index2, Utilities.EQ, extractScopeAll4Mapping(index1, index2), extractISUB4Mapping(index1, index2))); - - - } - - - public void addMappingObject2AskUserList(int index1, int index2, int diMapping){ - //listMappings2askUser1N.add(new MappingObjectInteractivity(index1, index2, ambiguity)); - listMappings2askUser1N.add(new MappingObjectInteractivity( - index1, index2, diMapping, extractScopeAll4Mapping(index1, index2), extractISUB4Mapping(index1, index2))); - } - - - - public Map> getToAskLogMapMappings(){ - return candidateMappings2askLogMap1N; - } - - - - - - public Map> getWeakAnchors(){ - return allWeakMappings1N; - } - - public Map> getWeakCandidateAnchors(){ - return weakCandidateMappings1N; - } - - - public void clearWeakCandidateAnchors(){ - weakCandidateMappings1N.clear(); - } - - - - public Map getDataPropertyAnchors(){ - return dataPropertyMappings; - } - - public Map getObjectPropertyAnchors(){ - return objPropertyMappings; - } - - - public Map> getInstanceMappings(){ - return instanceMappings1N; - } - - /** - * Only for statistics - */ - public Map> getInstanceMappings4OutputType(){ - return instanceMappings2outputtype; - } - - - - public void addDataPropertyAnchor(int ide1, int ide2){ - dataPropertyMappings.put(ide1, ide2); - } - - - public void addObjectPropertyAnchor(int ide1, int ide2){ - objPropertyMappings.put(ide1, ide2); - } - - public void addDataPropertyAnchorConfidence(int ide1, double conf){ - dataPropertyMappings2confidence.put(ide1, conf); - } - - - public void addObjectPropertyAnchorConfidence(int ide1, double conf){ - objPropertyMappings2confidence.put(ide1, conf); - } - - - public void addInstanceAnchorConfidence(int ide1, int ide2, double conf){ - addIsub4Indivual(ide1, ide2, conf); - addIsub4Indivual(ide2, ide1, conf); - } - - - - - - - - - public Map> getInstanceMappings_inverted(){ - return instanceMappings1N_inverted; - } - - - public int getSizeOfInstanceMappings(){ - int num=0; - for (int ide1 : instanceMappings1N.keySet()){ - //for (int ide2 : instanceMappings1N.get(ide1)){ - // num++; - //} - num+=instanceMappings1N.get(ide1).size(); - - /*if (instanceMappings1N.get(ide1).size()>1){ - //Ambiguity - LogOutput.print("AMBIGUITY: " + index.getAlternativeLabels4IndividualIndex(ide1).toString()); - for (int ide2 : instanceMappings1N.get(ide1)){ - LogOutput.print("\t" +index.getAlternativeLabels4IndividualIndex(ide2).toString()); - } - - }*/ - } - return num; - } - - - public boolean isIndividualAlreadyMapped(int ide){ - - return instanceMappings1N.containsKey(ide) || instanceMappings1N_inverted.containsKey(ide) || instanceMappings1N_not_allowed_output.containsKey(ide) || instanceMappings1N_ambiguity.containsKey(ide); - - } - - - - public double getConfidence4DataPropertyAnchor(int ident1, int ident2){ - //return dataPropertyMappings2confidence.get(ident1); //currently mappings are only one 2 one - if (dataPropertyMappings2confidence.containsKey(ident1)){ - return dataPropertyMappings2confidence.get(ident1); //currently mappings are only one 2 one - } - return 0.80; - } - - public double getConfidence4ObjectPropertyAnchor(int ident1, int ident2){ - //return objPropertyMappings2confidence.get(ident1); //currently mappings are only one 2 one - if (objPropertyMappings2confidence.containsKey(ident1)){ - return objPropertyMappings2confidence.get(ident1); //currently mappings are only one 2 one - } - return 0.80; - } - - /** - * Returns ISUb confidence - * @param ident1 - * @param ident2 - * @return - */ - public double getConfidence4InstanceMapping(int ident1, int ident2){ - if (instanceMappings2isub.containsKey(ident1) && instanceMappings2isub.get(ident1).containsKey(ident2)){ - return instanceMappings2isub.get(ident1).get(ident2); - } - return 0.70; //we return something just in case - } - - public double getISUB4InstanceMapping(int ident1, int ident2){ - if (instanceMappings2isub.containsKey(ident1) && instanceMappings2isub.get(ident1).containsKey(ident2)){ - return instanceMappings2isub.get(ident1).get(ident2); - } - return 0.70; - } - - public double getCompFactor4InstanceMapping(int ident1, int ident2){ - if (instanceMappings2compfactor.containsKey(ident1) && instanceMappings2compfactor.get(ident1).containsKey(ident2)){ - return instanceMappings2compfactor.get(ident1).get(ident2); - } - return 0.50; - } - - public double getScope4InstanceMapping(int ident1, int ident2){ - if (instanceMappings2scope.containsKey(ident1) && instanceMappings2scope.get(ident1).containsKey(ident2)){ - return instanceMappings2scope.get(ident1).get(ident2); - } - return 0.50; - } - - - public double getOutputType4InstanceMapping(int ident1, int ident2){ - if (instanceMappings2outputtype.containsKey(ident1) && instanceMappings2outputtype.get(ident1).containsKey(ident2)){ - return instanceMappings2outputtype.get(ident1).get(ident2); - } - return 0; - } - - - /*public List getAnchorObjects(){ - return identifier2anchor; - }*/ - - - public Set getStringLogMapMappings(){ - return mappings_candidates_Str; - } - - public Set getStringGoldStandardAnchors(){ - return mappings_GS_Str; - } - - - public Map> getDiscardedMappings(){ - return discardedMappings1N; - } - - public Map> getHardDiscardedMappings(){ - return hardDiscardedMappings1N; - } - - public Map> getMappingsInteractiveProcess(){ - return interactiveProcessMappings1N; - } - - - - public Map> getConflictiveMappings(){ - return conflictiveMappings1N; - } - - public Map> getWeakenedDandGMappings(){ - return weakenedDandG_Mappings1N; - } - - public Set getDiscardedMappingsStr(){ - return discarded_candidates; - } - - - /** - * We add each direcction individually - * @param index1 - * @param index2 - */ - public void addSubMapping2ListOfAnchors(int index1, int index2){ - - //mapped_entities_onto1.add(index1); - //mapped_entities_onto2.add(index2); - - //Deprecated: We can implicitely store the dir in map!! - //We need this structure to store the direction (type) of the mappings - //MappingObjectIdentifiers mapping = new MappingObjectIdentifiers(index1, index2); - //if (!identifier2anchor.contains(mapping)){ - // identifier2anchor.add(mapping); - //} - - if (!logmapMappings1N.containsKey(index1)){ - logmapMappings1N.put(index1, new HashSet()); - } - logmapMappings1N.get(index1).add(index2); - - } - - - - public void addInstanceMapping(int index1, int index2){ - addInstanceMapping(index1, index2, false); - } - - - - /** - * Check if the instance is an allowed type - * @param types - * @param allowed_types - * @return - */ - private boolean hasAllowedType(Set types){ - - //No restrictions or empty set of allowed types - if (!Parameters.isRestrictInstanceTypesActive() || index.getAllowedInstanceTypes().isEmpty()) - return true; - - - for (int itype : types){ - //is class type listed as allowed - if (index.getAllowedInstanceTypes().contains(itype)) - return true; - - for (int atype : index.getAllowedInstanceTypes()){ - //Is class type as subclass of allowed types - if (index.isSubClassOf(itype, atype)) - return true; - } - } - - return false; - - } - - /** - * We deal instance mappings as one side mappings. We only consider SameAs. - * If during cleaning they are deleted then we do not consider mapping - * @param index1 - * @param index2 - */ - public void addInstanceMapping(int index1, int index2, boolean ambiguity){ - - - //If type is not allowed in the output - //Old code - //if (!index.getIdentifier2IndividualIndexMap().get(index1).showInOutput() || - // !index.getIdentifier2IndividualIndexMap().get(index2).showInOutput()){ - //New code: August 28, 2017 - if (!hasAllowedType(index.getIdentifier2IndividualIndexMap().get(index1).getClassTypes()) || - !hasAllowedType(index.getIdentifier2IndividualIndexMap().get(index2).getClassTypes())){ - - if (!instanceMappings1N_not_allowed_output.containsKey(index1)){ - instanceMappings1N_not_allowed_output.put(index1, new HashSet()); - } - instanceMappings1N_not_allowed_output.get(index1).add(index2); - - - return; - - } - - - //We add to different structure for future revision - if (ambiguity){ - - if (!instanceMappings1N_ambiguity.containsKey(index1)){ - instanceMappings1N_ambiguity.put(index1, new HashSet()); - } - instanceMappings1N_ambiguity.get(index1).add(index2); - - - return; - - } - - - - if (!instanceMappings1N.containsKey(index1)){ - instanceMappings1N.put(index1, new HashSet()); - } - instanceMappings1N.get(index1).add(index2); - - - - //Only for queries - if (!instanceMappings1N_inverted.containsKey(index2)){ - instanceMappings1N_inverted.put(index2, new HashSet()); - } - instanceMappings1N_inverted.get(index2).add(index1); - - } - - - - /** - * By user in interactivity - * @param index1 - * @param index2 - * @param add2conflictive - */ - public void removeInstanceMappings(int index1, int index2){ - - if (instanceMappings1N.containsKey(index1)){ - instanceMappings1N.get(index1).remove(index2); - if (instanceMappings1N.get(index1).size()==0){ - instanceMappings1N.remove(index1); - } - } - } - - - - public void addSubMapping2Mappings2Review(int index1, int index2){ - - if (!mappings2Review.containsKey(index1)){ - mappings2Review.put(index1, new HashSet()); - } - mappings2Review.get(index1).add(index2); - } - - - public void moveMappingsToReview2AnchorList(){ - - for (int ide1 : mappings2Review.keySet()){ - for (int ide2 : mappings2Review.get(ide1)){ - - addSubMapping2ListOfAnchors(ide1, ide2); - - } - - } - - } - - - - - - - - - /** - * We add equivalence mappings - * @param index1 - * @param index2 - */ - public void addMapping2ListOfAnchors2AskLogMap(int index1, int index2){ - - if (!candidateMappings2askLogMap1N.containsKey(index1)){ - candidateMappings2askLogMap1N.put(index1, new HashSet()); - } - candidateMappings2askLogMap1N.get(index1).add(index2); - - - //Add both sides for statistical purposes - if (!candidateMappings2askLogMap1N.containsKey(index2)){ - candidateMappings2askLogMap1N.put(index2, new HashSet()); - } - candidateMappings2askLogMap1N.get(index2).add(index1); - - } - - - - /** - * We add equivalence mappings - * @param index1 - * @param index2 - */ - public void addEquivMapping2ListOfAnchors2AskUser(int index1, int index2){ - - if (!candidateMappings2askUser1N.containsKey(index1)){ - candidateMappings2askUser1N.put(index1, new HashSet()); - } - candidateMappings2askUser1N.get(index1).add(index2); - - //Add both sides for statistical purposes - if (!candidateMappings2askUser1N.containsKey(index2)){ - candidateMappings2askUser1N.put(index2, new HashSet()); - } - candidateMappings2askUser1N.get(index2).add(index1); - - } - - - - - - /** - * By user in interactivity - * @param index1 - * @param index2 - * @param add2conflictive - */ - public void removeEquivMappingFromListOfAnchors2AskUser(int index1, int index2){ - - if (candidateMappings2askUser1N.containsKey(index1)){ - candidateMappings2askUser1N.get(index1).remove(index2); - if (candidateMappings2askUser1N.get(index1).size()==0){ - candidateMappings2askUser1N.remove(index1); - } - } - } - - - - /** - * By user in interactivity - * @param index1 - * @param index2 - * @param add2conflictive - */ - public void removeEquivMappingFromListOfAnchors2AskUser(int index1, int index2, boolean add2conflictive){ - - if (candidateMappings2askUser1N.containsKey(index1)){ - candidateMappings2askUser1N.get(index1).remove(index2); - if (candidateMappings2askUser1N.get(index1).size()==0){ - candidateMappings2askUser1N.remove(index1); - } - } - - if (add2conflictive){ - addSubMapping2ConflictiveAnchors(index1, index2); - addSubMapping2ConflictiveAnchors(index2, index1); - } - else{ - addEquivMapping2DiscardedAnchors(index1, index2); - addEquivMapping2DiscardedAnchors(index2, index1); - } - - } - - - - - /** - * We add equiv mappings - * @param index1 - * @param index2 - */ - - int num_discarded=0; - public void addEquivMapping2DiscardedAnchors(int index1, int index2){ - - if (!discardedMappings1N.containsKey(index1)){ - discardedMappings1N.put(index1, new HashSet()); - } - if (!discardedMappings1N.get(index1).contains(index2)){ - num_discarded++; - discardedMappings1N.get(index1).add(index2); - } - - //Temporary: Add both sides - /*if (!discardedMappings1N.containsKey(index2)){ - discardedMappings1N.put(index2, new HashSet()); - } - discardedMappings1N.get(index2).add(index1); - */ - - } - - public int getNumDiscardedMappings(){ - return num_discarded; - } - - - - /** - * We add equiv mappings - * @param index1 - * @param index2 - */ - public void addEquivMapping2HardDiscardedAnchors(int index1, int index2){ - - //To save space and time - if (!hardDiscardedMappings1N.containsKey(index1)){ - hardDiscardedMappings1N.put(index1, new HashSet()); - } - hardDiscardedMappings1N.get(index1).add(index2); - } - - - - public void addEquivMapping2InteractiveMappings(int index1, int index2){ - - if (!interactiveProcessMappings1N.containsKey(index1)){ - interactiveProcessMappings1N.put(index1, new HashSet()); - } - interactiveProcessMappings1N.get(index1).add(index2); - - - } - - - - - - /** - * We add each mapping direcction individually - * Direction are discarded in pre-conflict detection and in D&G - * @param index1 - * @param index2 - */ - public void addSubMapping2ConflictiveAnchors(int index1, int index2){ - - addSubMapping2ConflictiveAnchors(index1, index2, false); - - } - - public void addSubMapping2ConflictiveAnchors(int index1, int index2, boolean fromDG){ - - if (!conflictiveMappings1N.containsKey(index1)){ - conflictiveMappings1N.put(index1, new HashSet()); - } - conflictiveMappings1N.get(index1).add(index2); - - - if (fromDG){ - //We add mapping only conflictive in D&G - //This may help us to retrieve them back in some cases - if (!conflictiveMappings1N_D_G.containsKey(index1)){ - conflictiveMappings1N_D_G.put(index1, new HashSet()); - } - conflictiveMappings1N_D_G.get(index1).add(index2); - } - } - - public Map> getConflictiveMappings_D_G(){ - return conflictiveMappings1N_D_G; - } - - - - /** - * We add each mapping direcction individually - * @param index1 - * @param index2 - */ - public void addSubMapping2WeakenedDandGAnchors(int index1, int index2){ - - if (!weakenedDandG_Mappings1N.containsKey(index1)){ - weakenedDandG_Mappings1N.put(index1, new HashSet()); - } - weakenedDandG_Mappings1N.get(index1).add(index2); - - - } - - - - public void addMapping2GoldStandardAnchors(int index1, int index2){ - - if (!GSMappings1N.containsKey(index1)){ - GSMappings1N.put(index1, new HashSet()); - } - GSMappings1N.get(index1).add(index2); - - - } - - public Map> getGoldStandardMappings() - { - return GSMappings1N; - } - - - public boolean isMappingInGoldStandard(int index1, int index2){ //it is important the order of the question! - if (GSMappings1N.containsKey(index1)){ - if (GSMappings1N.get(index1).contains(index2)){ - return true; - } - } - return false; - } - - - public boolean isMappingAlreadyInList(int index1, int index2){ - - if (logmapMappings1N.containsKey(index1)){ - if (logmapMappings1N.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - - - - public boolean isMappingInList2Review(int index1, int index2){ - - if (mappings2Review.containsKey(index1)){ - if (mappings2Review.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - public boolean isMappingInAnchors2AskLogMap(int index1, int index2){ - - if (candidateMappings2askLogMap1N.containsKey(index1)){ - if (candidateMappings2askLogMap1N.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - - - public boolean isMappingInAnchors2AskUser(int index1, int index2){ - - if (candidateMappings2askUser1N.containsKey(index1)){ - if (candidateMappings2askUser1N.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - - - - public boolean isMappingInDiscardedSet(int index1, int index2){ - - if (discardedMappings1N.containsKey(index1)){ - if (discardedMappings1N.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - public boolean isMappingInHardDiscardedSet(int index1, int index2){ - - if (hardDiscardedMappings1N.containsKey(index1)){ - if (hardDiscardedMappings1N.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - - public boolean isMappingInConflictiveSet(int index1, int index2){ - - if (conflictiveMappings1N.containsKey(index1)){ - if (conflictiveMappings1N.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - - public boolean isMappingWeakenedDandG(int index1, int index2){ - - if (weakenedDandG_Mappings1N.containsKey(index1)){ - if (weakenedDandG_Mappings1N.get(index1).contains(index2)){ - return true; - } - } - return false; - - } - - - - public boolean isMappingInAnchors(int index1, int index2){ - - //Both sides - if (isMappingAlreadyInList(index1, index2) || isMappingAlreadyInList(index2, index1)) - return true; - - return false; - - } - - - - /** - * To avoid considering again mapping in different steps (stemming, weak...) - * @param index1 - * @param index2 - * @return - */ - public boolean isMappingAlreadyConsidered(int index1, int index2){ - - //Both sides - if (isMappingAlreadyInList(index1, index2) || isMappingAlreadyInList(index2, index1)) - return true; - - if (isMappingInList2Review(index1, index2) || isMappingInList2Review(index2, index1)) - return true; - - if (isMappingInDiscardedSet(index1, index2) || isMappingInDiscardedSet(index2, index1)) - return true; - - if (isMappingInHardDiscardedSet(index1, index2) || isMappingInHardDiscardedSet(index2, index1)) - return true; - - if (isMappingInConflictiveSet(index1, index2) || isMappingInDiscardedSet(index2, index1)) - return true; - - if (isMappingWeakenedDandG(index1, index2) || isMappingWeakenedDandG(index2, index1)) //In case was plit the other side - return true; - - - if (isMappingInAnchors2AskLogMap(index1, index2) || isMappingInAnchors2AskLogMap(index2, index1)) - return true; - - - return false; - - } - - /** - * - * @param index1 - * @param index2 - */ - public void addEquivMapping2ListOfWeakAnchors(int index1, int index2){ - - //TODO in case we need to store which entities have at least a weak anchor - //weak_mapped_entities_onto1.add(index1); - //weak_mapped_entities_onto2.add(index2); - - - if (!allWeakMappings1N.containsKey(index1)){ - allWeakMappings1N.put(index1, new HashSet()); - } - allWeakMappings1N.get(index1).add(index2); - - } - - - /** - * - * @param index1 - * @param index2 - */ - public void addEquivMapping2ListOfWeakCandidateAnchors(int index1, int index2){ - - - - - if (!weakCandidateMappings1N.containsKey(index1)){ - weakCandidateMappings1N.put(index1, new HashSet()); - } - weakCandidateMappings1N.get(index1).add(index2); - - - } - - public void setStringAnchors(){ - setStringAnchors(true, true, true); - } - - /** - * For Precision and recall purposes - */ - public void setStringAnchors( - boolean out_class_map, - boolean out_prop_map, - boolean out_inst_map){ - - mappings_candidates_Str.clear(); - - - if (out_class_map){ - - for (int ide1 : logmapMappings1N.keySet()){ - for (int ide2 : logmapMappings1N.get(ide1)){ - addStringAnchor(ide1, ide2); - } - } - } - - - if (out_prop_map){ - for (int ident1 : getDataPropertyAnchors().keySet()){ - addStringAnchorDataProp(ident1, getDataPropertyAnchors().get(ident1)); - } - - for (int ident1 : getObjectPropertyAnchors().keySet()){ - addStringAnchorObjProp(ident1, getObjectPropertyAnchors().get(ident1)); - } - } - - if (out_inst_map){ - //One one side from O1 to O2 - //TODO Revise this (Changed method Sept 2014) - - if (Parameters.output_instance_mapping_files){ - //We extend the output with discarded instance mappings (level 1) - int type; - for (int ide1 : getInstanceMappings4OutputType().keySet()) { - - for (int ide2 : getInstanceMappings4OutputType().get(ide1).keySet()){ - - - type = getInstanceMappings4OutputType().get(ide1).get(ide2); - - - if (type<=1){ - addStringMappingIndividual(ide1, ide2); - } - } - } - } - else{ - - //Normal behaviour - for (int ide1 : getInstanceMappings().keySet()){ - for (int ide2 : getInstanceMappings().get(ide1)){ - addStringMappingIndividual(ide1, ide2); - } - } - } - - - - - } - - - - //LogOutput.print(mappings_candidates_Str.size()); - - - /*for (int ide1 : interactiveProcessMappings1N.keySet()){ - for (int ide2 : interactiveProcessMappings1N.get(ide1)){ - addStringAnchor(ide1, ide2); - } - }*/ - - //LogOutput.print(mappings_candidates_Str.size()); - - - //temporal - /*for (int ide1 : mappings2Review.keySet()){ - for (int ide2 : mappings2Review.get(ide1)){ - addStringAnchor(ide1, ide2); - } - }*/ - - - - - /*for (int ide1 : candidateMappings2askUser1N.keySet()){ - for (int ide2 : candidateMappings2askUser1N.get(ide1)){ - addStringAnchor(ide1, ide2); - } - } - - /*for (int ide1 : discardedMappings1N.keySet()){ - for (int ide2 : discardedMappings1N.get(ide1)){ - addStringAnchor(ide1, ide2); - } - }*/ - - - /*for (MappingObjectIdentifiers int_anchor : getAnchorObjects()){ - addStringAnchor( - int_anchor.getIdentifierOnto1(), - int_anchor.getIdentifierOnto2()); - }*/ - - - - - - } - - - - /** - * For Statistics - */ - public void setDiscardedStringAnchors(){ - - discarded_candidates.clear(); - - - for (int ide1 : getDiscardedMappings().keySet()){ - for (int ide2 : getDiscardedMappings().get(ide1)){ - addDiscardedStringMappingsAnchor(ide1, ide2); - } - } - - - - - } - - public void addStringAnchor(int ide1, int ide2){ - - String iri1; - String iri2; - //To keep an order on the mappings - - if (isId1SmallerThanId2(ide1, ide2)){ - iri1 = index.getIRIStr4ConceptIndex(ide1); - iri2 = index.getIRIStr4ConceptIndex(ide2); - } - else { - iri2 = index.getIRIStr4ConceptIndex(ide1); - iri1 = index.getIRIStr4ConceptIndex(ide2); - } - - - //We might be adding several times the same.... - //TODO: we might be interested in storing the direction for the mappings... - //TODO: also for gold standard - //MappingObjectStr obj; - mappings_candidates_Str.add(new MappingObjectStr(iri1, iri2, getConfidence4Mapping(ide1, ide2))); - - //getConfidence4Mapping(ide1, ide2); - } - - - public void addDiscardedStringMappingsAnchor(int ide1, int ide2){ - - String iri1; - String iri2; - //To keep an order on the mappings - - if (isId1SmallerThanId2(ide1, ide2)){ - iri1 = index.getIRIStr4ConceptIndex(ide1); - iri2 = index.getIRIStr4ConceptIndex(ide2); - } - else { - iri2 = index.getIRIStr4ConceptIndex(ide1); - iri1 = index.getIRIStr4ConceptIndex(ide2); - } - - - //We might be adding several times the same.... - //TODO: we might be interested in storing the direction for the mappings... - //TODO: also for gold standard - //MappingObjectStr obj; - discarded_candidates.add(new MappingObjectStr(iri1, iri2, getConfidence4Mapping(ide1, ide2))); - - //getConfidence4Mapping(ide1, ide2); - } - - - public void addStringAnchorDataProp(int ide1, int ide2){ - mappings_candidates_Str.add( - new MappingObjectStr( - index.getIRIStr4DataPropIndex(ide1), - index.getIRIStr4DataPropIndex(ide2), - getConfidence4DataPropertyAnchor(ide1, ide2))); - } - - public void addStringAnchorObjProp(int ide1, int ide2){ - mappings_candidates_Str.add( - new MappingObjectStr( - index.getIRIStr4ObjPropIndex(ide1), - index.getIRIStr4ObjPropIndex(ide2), - getConfidence4ObjectPropertyAnchor(ide1, ide2))); - } - - - public void addStringMappingIndividual(int ide1, int ide2){ - mappings_candidates_Str.add( - new MappingObjectStr( - index.getIRIStr4IndividualIndex(ide1), - index.getIRIStr4IndividualIndex(ide2), - getConfidence4InstanceMapping(ide1, ide2))); - } - - - - - protected void addScopeAll2Structure(int ide1, int ide2, double conf){ - - if (!anchor2scopeAll.containsKey(ide1)) - anchor2scopeAll.put(ide1, new HashMap()); - - anchor2scopeAll.get(ide1).put(ide2, conf); - - } - - - private void addScopeAnchors2Structure(int ide1, int ide2, double conf){ - - if (!anchor2scopeAnchors.containsKey(ide1)) - anchor2scopeAnchors.put(ide1, new HashMap()); - - anchor2scopeAnchors.get(ide1).put(ide2, conf); - - } - - - public void addIsub2Structure(int ide1, int ide2, double conf){ - - if (!anchor2isub.containsKey(ide1)) - anchor2isub.put(ide1, new HashMap()); - - anchor2isub.get(ide1).put(ide2, conf); - } - - - public void addIsub4Indivual(int ide1, int ide2, double conf){ - - if (!instanceMappings2isub.containsKey(ide1)) - instanceMappings2isub.put(ide1, new HashMap()); - - instanceMappings2isub.get(ide1).put(ide2, conf); - } - - - public void addOutputType4Indivual(int ide1, int ide2, int conf){ - - if (!instanceMappings2outputtype.containsKey(ide1)) - instanceMappings2outputtype.put(ide1, new HashMap()); - - instanceMappings2outputtype.get(ide1).put(ide2, conf); - } - - - public void addCompFactor4Indivual(int ide1, int ide2, double conf){ - - if (!instanceMappings2compfactor.containsKey(ide1)) - instanceMappings2compfactor.put(ide1, new HashMap()); - - instanceMappings2compfactor.get(ide1).put(ide2, conf); - - } - - - public void addScope4Indivual(int ide1, int ide2, double conf){ - - if (!instanceMappings2scope.containsKey(ide1)) - instanceMappings2scope.put(ide1, new HashMap()); - - instanceMappings2scope.get(ide1).put(ide2, conf); - - } - - - protected void addIsubAverage2Structure(int ide1, int ide2, double conf){ - - if (!anchor2isub_avg.containsKey(ide1)) - anchor2isub_avg.put(ide1, new HashMap()); - - anchor2isub_avg.get(ide1).put(ide2, conf); - - } - - - - - - /** - * Similarity based ob combined occurrence frequency for weak mappings - * @param ide1 - * @param ide2 - * @param conf - */ - protected void addSimWeak2Structure(int ide1, int ide2, double conf){ - - if (!anchor2sim_weak.containsKey(ide1)) - anchor2sim_weak.put(ide1, new HashMap()); - - anchor2sim_weak.get(ide1).put(ide2, conf); - - } - - - - - public void addMappingAddedByUser2Structure(int ide1, int ide2){ - - if (!anchor2addedByUser.containsKey(ide1)) - anchor2addedByUser.put(ide1, new HashSet()); - - anchor2addedByUser.get(ide1).add(ide2); - - } - - - public boolean isMappingAddedByUser(int ide1, int ide2){ - - if (!anchor2addedByUser.containsKey(ide1)){ - return false; - } - - if (!anchor2addedByUser.get(ide1).contains(ide2)){ - return false; - } - - return true; - - - } - - - /** - * - * @param ide1 - * @param ide2 - * @return - */ - private double getISUB4Mapping(int ide1, int ide2){ - - //In current version this should not happen - if (!anchor2isub.containsKey(ide1)){ - return 0.70; //in case does not have a value... - } - else if (!anchor2isub.get(ide1).containsKey(ide2)){ - return 0.70; - } - else { - return anchor2isub.get(ide1).get(ide2); - } - - } - - - private double getISUBAverage4Mapping(int ide1, int ide2){ - - //In current version this should not happen - if (!anchor2isub_avg.containsKey(ide1)){ - return 0.70; //in case does not have a value... - } - else if (!anchor2isub_avg.get(ide1).containsKey(ide2)){ - return 0.70; - } - else { - return anchor2isub_avg.get(ide1).get(ide2); - } - - } - - - public boolean hasWeakMappingSim(int ide1, int ide2){ - - //In current version this should not happen - if (!anchor2sim_weak.containsKey(ide1)){ - return false; - } - - if (!anchor2sim_weak.get(ide1).containsKey(ide2)){ - return false; - } - - return true; - - - } - - - public double getSimWeak4Mapping2(int ide1, int ide2){ - if (anchor2sim_weak.containsKey(ide1) && anchor2sim_weak.get(ide1).containsKey(ide2)) - return anchor2sim_weak.get(ide1).get(ide2); - - return -1.0; - } - - public double getSimWeak4Mapping(int ide1, int ide2){ - if (anchor2sim_weak.containsKey(ide1) && anchor2sim_weak.get(ide1).containsKey(ide2)) - return anchor2sim_weak.get(ide1).get(ide2); - - return getISUB4Mapping(ide1, ide2) / 9.; - } - - - private double getScopeAll4Mapping(int ide1, int ide2){ - if (!anchor2scopeAll.containsKey(ide1)){ - return getISUB4Mapping(ide1, ide2);//0.70; ////TODO - } - else if (!anchor2scopeAll.get(ide1).containsKey(ide2)){ - return getISUB4Mapping(ide1, ide2); //return 0.70; - } - else { - return anchor2scopeAll.get(ide1).get(ide2); - } - - } - - - private double getScopeAnchors4Mapping(int ide1, int ide2){ - if (!anchor2scopeAnchors.containsKey(ide1)){ - return getISUB4Mapping(ide1, ide2); //0.70; //TODO We add isub? - } - else if (!anchor2scopeAnchors.get(ide1).containsKey(ide2)){ - return getISUB4Mapping(ide1, ide2); //return 0.70; - } - else { - return anchor2scopeAnchors.get(ide1).get(ide2); - } - - } - - - public double getConfidence4Mapping(int ide1, int ide2){ - - //Max value - if (isMappingAddedByUser(ide1, ide2)){ - return 1.0; - } - - double conf = (weightIsub*getISUB4Mapping(ide1, ide2) + - weightIsub_avg*getISUBAverage4Mapping(ide1, ide2) + - weightScope*getScopeAll4Mapping(ide1, ide2) + - weightScopeAnchors*getScopeAnchors4Mapping(ide1, ide2)); - - - - if (hasWeakMappingSim(ide1, ide2)){ - //We just add as an additional value - //return conf + getSimWeak4Mapping2(ide1, ide2); - return conf + 0.1; //fixed value...? - } - - return conf; - - - } - - - - public double extractISUB4Mapping(int ide1, int ide2){ - - if (anchor2isub.containsKey(ide1) && anchor2isub.get(ide1).containsKey(ide2)){ - return anchor2isub.get(ide1).get(ide2); - } - //else extract - double isub_score = getIsubScore4ConceptsLabels(ide1, ide2); - - //store - addIsub2Structure(ide1, ide2, isub_score); - addIsub2Structure(ide2, ide1, isub_score);//we add both sides - - //return - return isub_score; - - } - - - public double extractISUB4InstanceMapping(int ide1, int ide2){ - - if (instanceMappings2isub.containsKey(ide1) && instanceMappings2isub.get(ide1).containsKey(ide2)){ - return instanceMappings2isub.get(ide1).get(ide2); - } - //else extract - double isub_score = getIsubScore4IndividualLabels(ide1, ide2); - - //store - addIsub4Indivual(ide1, ide2, isub_score); - addIsub4Indivual(ide2, ide1, isub_score);//we add both sides - - //return - return isub_score; - - } - - - public double extractScope4InstanceMapping(int ide1, int ide2){ - - if (instanceMappings2scope.containsKey(ide1) && instanceMappings2scope.get(ide1).containsKey(ide2)){ - return instanceMappings2scope.get(ide1).get(ide2); - } - - - double scope_score = getScopeScore4Individuals(ide1, ide2); - - //store - addScope4Indivual(ide1, ide2, scope_score); - addScope4Indivual(ide2, ide1, scope_score);//we add both sides - - //return - return scope_score; - - - - } - - - - public double extractISUBAverage4Mapping(int ide1, int ide2){ - - if (anchor2isub_avg.containsKey(ide1) && anchor2isub_avg.get(ide1).containsKey(ide2)){ - return anchor2isub_avg.get(ide1).get(ide2); - } - //else extract - double isub_score = getIsubAverageScore4ConceptsLabels(ide1, ide2); - - //store - addIsubAverage2Structure(ide1, ide2, isub_score); - addIsubAverage2Structure(ide2, ide1, isub_score);//we add both sides - - //return - return isub_score; - - } - - - public double extractScopeAll4Mapping(int ide1, int ide2){ - if (anchor2scopeAll.containsKey(ide1) && anchor2scopeAll.get(ide1).containsKey(ide2)){ - return anchor2scopeAll.get(ide1).get(ide2); - } - //else extract - double scope_score = getScopeScoreAll4Neighbourhood(ide1, ide2); - - //store - addScopeAll2Structure(ide1, ide2, scope_score); - addScopeAll2Structure(ide2, ide1, scope_score); //we add both sides - - //return - return scope_score; - - - - } - - - public double extractScopeAnchors4Mapping(int ide1, int ide2){ - if (anchor2scopeAnchors.containsKey(ide1) && anchor2scopeAnchors.get(ide1).containsKey(ide2)){ - return anchor2scopeAnchors.get(ide1).get(ide2); - } - //else extract - double scope_score = getScopeScoreAnchors4Neighbourhood(ide1, ide2); - - //store - addScopeAnchors2Structure(ide1, ide2, scope_score); - addScopeAnchors2Structure(ide2, ide1, scope_score); //we add both sides - - //return - return scope_score; - - - - } - - - public double getIsubScore4DataPropertyLabels(int ide1, int ide2){ - return getIsubScore4DataPropertyLabels(ide1, ide2, true); - } - - public double getIsubScore4DataPropertyLabels(int ide1, int ide2, boolean useAlternatives){ - - if (useAlternatives){ - - double max_score=-10.0; - double isub_score; - - for (String str1 : index.getAlternativeLabels4DataPropertyIndex(ide1)){ - for (String str2 : index.getAlternativeLabels4DataPropertyIndex(ide2)){ - isub_score = isub.score(str1, str2); - - if (isub_score<0){ //Do not return negative isubs... - isub_score=0.0; - } - - if (isub_score>max_score){ - max_score=isub_score; - } - } - } - - - return max_score; - - } - else { - return isub.score( - index.getLabel4DataPropIndex(ide1), - index.getLabel4DataPropIndex(ide2) - ); - - } - } - - - public double getIsubScore4ObjectPropertyLabels(int ide1, int ide2){ - return getIsubScore4ObjectPropertyLabels(ide1, ide2, true); - } - - public double getIsubScore4ObjectPropertyLabels(int ide1, int ide2, boolean useAlternativeLabels){ - - if (useAlternativeLabels){ - - double max_score=-10.0; - double isub_score; - - for (String str1 : index.getAlternativeLabels4ObjectPropertyIndex(ide1)){ - for (String str2 : index.getAlternativeLabels4ObjectPropertyIndex(ide2)){ - isub_score = isub.score(str1, str2); - - if (isub_score<0){ //Do not return negative isubs... - isub_score=0.0; - } - - if (isub_score>max_score){ - max_score=isub_score; - } - } - } - - - return max_score; - - } - else { - return isub.score( - index.getLabel4ObjPropIndex(ide1), - index.getLabel4ObjPropIndex(ide2) - ); - } - } - - - - public double getIsubScore4ConceptsLabels(int ide1, int ide2){ - return getIsubScore4ConceptsLabels(ide1, ide2, 0.99); - } - - /** - * It takes into account synonyms, variations without stopwords - * @param ide1 - * @param ide2 - * @return - */ - protected double getIsubScore4ConceptsLabels(int ide1, int ide2, double enough_score){ - - double max_score=-10.0; - double isub_score; - - //LogOuput.print(index_onto1.getAlternativeLabels4ConceptIndex(ide1)); - - for (String str1 : index.getAlternativeLabels4ConceptIndex(ide1)){ - for (String str2 : index.getAlternativeLabels4ConceptIndex(ide2)){ - isub_score = isub.score(str1, str2); - - if (isub_score<0){ //Do not return negative isubs... - isub_score=0.0; - } - - if (isub_score>max_score){ - max_score=isub_score; - } - if (max_score>enough_score) - return max_score; - } - } - - - return max_score; - - } - - - public double getIsubScore4IndividualLabels(int ide1, int ide2){ - return getIsubScore4IndividualLabels(ide1, ide2, 0.99); - } - - /** - * It takes into account synonyms, variations without stopwords - * @param ide1 - * @param ide2 - * @return - */ - protected double getIsubScore4IndividualLabels(int ide1, int ide2, double enough_score){ - - double max_score=-10.0; - double isub_score; - - //LogOuput.print(index_onto1.getAlternativeLabels4ConceptIndex(ide1)); - - for (String str1 : index.getAlternativeLabels4IndividualIndex(ide1)){ - for (String str2 : index.getAlternativeLabels4IndividualIndex(ide2)){ - isub_score = isub.score(str1, str2); - - if (isub_score<0){ //Do not return negative isubs... - isub_score=0.0; - } - - if (isub_score>max_score){ - max_score=isub_score; - } - if (max_score>enough_score) - return max_score; - } - } - - //For cases without labels matched through IF of role assertions. It will always be 0. - if (max_score==0.0) - max_score=0.5; - - return max_score; - - } - - - private double getIsubAverageScore4ConceptsLabels(int ide1, int ide2){ - - int num_matchings=0; - double isub_avg=0.0; - double isub_score; - - //LogOuput.print(index_onto1.getAlternativeLabels4ConceptIndex(ide1)); - - for (String str1 : index.getAlternativeLabels4ConceptIndex(ide1)){ - for (String str2 : index.getAlternativeLabels4ConceptIndex(ide2)){ - - num_matchings++; - isub_score = isub.score(str1, str2); - if (isub_score<0){ - isub_score=0.0; - } - isub_avg += isub_score; - - } - } - - if (num_matchings==0) - return 0.0; - - return (isub_avg)/((double)num_matchings); - - } - - - - - - /** - * - * We extract scope score considering weak and exact mappings - * If no mappings then 0.0. If there is no scope then 0.01. - * - * @param ide1 - * @param ide2 - * @param mappings - * @return - */ - private double getScopeScoreAll4Neighbourhood(int ide1, int ide2){ - - //Mappings: do not consider mapping itself for its scope!! - - - - Set module1 = index.getScope4Identifier_Condifence(ide1); - Set module2 = index.getScope4Identifier_Condifence(ide2); - - //No scope in one side - if ((module1.size()==0 && module2.size()>0) || (module2.size()==0 && module1.size()>0)){ - //LogOutput.print(index.getName4ConceptIndex(ide1) + " " + module1.size()); - //LogOutput.print(index.getName4ConceptIndex(ide2) + " " + module2.size()); - - return 0.01; //we cannot say much - } - - - - - //No scope in both sides - //We give an small value: we cannot say more. - if (module1.size()==0 || module2.size()==0 ){ - return 0.01; //we cannot say much - } - - - int unionSize = module1.size() + module2.size(); - - double weightedIntersection=0.0; - - - - - //WEAK MAPPINGS - double score; - double max_score=-1; - - boolean mapped; - //We look for mappings from module/scope 1 to module/scope 2 - - - for (int ent1 : module1){ - - mapped=false; - - - //In exact mappings (they are not complete yet...) - //------------------------------------------ - if (logmapMappings1N.containsKey(ent1)){ - - for (int ent2 : logmapMappings1N.get(ent1)){ //Candidate mappings - - if (module2.contains(ent2)){ - - weightedIntersection++; - mapped=true; - break; - - } - - } - - } - - if (mapped) //Do not look for weak mappings - continue; - - - //In weak mappings: includes exact - //------------------------------------------ - if (allWeakMappings1N.containsKey(ent1)){ //Only if involved in mappings - - max_score=-1; - - for (int ent2 : allWeakMappings1N.get(ent1)){ - - if (module2.contains(ent2)){ - - score = getIsubScore4ConceptsLabels(ent1, ent2);//we do not store isub - - if (score>max_score){ - max_score=score; - } - - } - - } - - } - - // TODO Yujiao - move out by me - if (max_score>0){ - //We only add Max score in case there were several - weightedIntersection+=max_score; - mapped=true; - } - - /*if (mapped) //Do not look for weak mappings - continue; - - - max_score=-1; - - */ - } - - if (weightedIntersection<=0.0){ - - if (areMappedEntitiesSharingScope(ide1, ide2)){ - return 0.10; //At least they are sharing in the big scopes - } - - //NO intersection of big scopes - - //Look for ISUB if no exact of weak mappings - //------------------------------------------ - //REFINE THIS - for (int ent1 : module1){ - for (int ent2: module2){ - - //We want to exclude those mappings that do not have scope at all - score = getIsubScore4ConceptsLabels(ent1, ent2, 0.65);//We just look for similar neighbours - - if (score>0.65){//If we found one we are done! - weightedIntersection+=score; - break; - } - } - } - } - - - // Yujiao - check this condition!? - //No mappings or only one with confidence less than 0.25 - if (weightedIntersection<0.5) { //No mappings (we do not need to do any further calculation) - return 0.0; - } - - - //Scope: adaptaed dices coefficient - double scopeScore = (double)Math.round((2.0*(double)(weightedIntersection)/(double)unionSize)*100.0)/100.0; - - - return scopeScore; - - - } - - - - /** - * - * We extract scope score considering only anchor mappings - * - * @param ide1 - * @param ide2 - * @param mappings - * @return - */ - private double getScopeScoreAnchors4Neighbourhood(int ide1, int ide2){ - - //Mappings: do not consider mapping itself for its scope!! - - - - Set module1 = index.getScope4Identifier_Condifence(ide1); - Set module2 = index.getScope4Identifier_Condifence(ide2); - - //No scope in one side - if ((module1.size()==0 && module2.size()>0) || (module2.size()==0 && module1.size()>0)){ - return 0.01; //we cannot say much - } - - - - - //No scope in both sides - //We give an small value: we cannot say more. - if (module1.size()==0 || module2.size()==0 ){ - return 0.01; //we cannot say much - } - - - int unionSize = module1.size() + module2.size(); - - int num_mappings=0; - - - - - for (int ent1 : module1){ - - - //In exact mappings (they are not complete yet...) - //------------------------------------------ - if (logmapMappings1N.containsKey(ent1)){ - - for (int ent2 : logmapMappings1N.get(ent1)){ //Candidate mappings - - if (module2.contains(ent2)){ - - num_mappings++; - break; - - } - - } - - } - - - } - - - if (num_mappings<1) { //No mappings (we do not need to do any futher calculation) - return 0.0; - } - - - //Scope: adapted dices coefficient - double scopeScore = (double)Math.round((2.0*(double)(num_mappings)/(double)unionSize)*100.0)/100.0; - - - return scopeScore; - - - } - - - - - /** - * - * We extract isub of scope. No mappings (anchors or weak) are considered - * - * @param ide1 - * @param ide2 - * @param mappings - * @return - */ - public double getScopeISUB4Neighbourhood(int ide1, int ide2){ - - Set module1 = index.getScope4Identifier_Condifence(ide1); - Set module2 = index.getScope4Identifier_Condifence(ide2); - - //No scope in one side - if ((module1.size()==0 && module2.size()>0) || (module2.size()==0 && module1.size()>0)){ - //LogOutput.print(index.getName4ConceptIndex(ide1) + " " + module1.size()); - //LogOutput.print(index.getName4ConceptIndex(ide2) + " " + module2.size()); - - return 0.01; //we cannot say much - } - - - //No scope in both sides - //We give an small value: we cannot say more. - if (module1.size()==0 || module2.size()==0 ){ - return 0.01; //we cannot say much - } - - - int unionSize = module1.size() + module2.size(); - - double weightedIntersection=0.0; - - double score; - - for (int ent1 : module1){ - for (int ent2: module2){ - - //We want to exclude those mappings that do not have scope at all - score = getIsubScore4ConceptsLabels(ent1, ent2, 0.75);//We just look for similar neighbours - - if (score>0.75){//If we found one we are done! - weightedIntersection+=score; - break; - } - } - } - - //Scope: adapted dices coefficient - double scopeScore = (double)Math.round((2.0*(double)(weightedIntersection)/(double)unionSize)*100.0)/100.0; - - return scopeScore; - - - } - - - - public double getScopeScore4Individuals(int ide1, int ide2){ - - Set types1 = index.getIndividualClassTypes4Identifier(ide1); - Set types2 = index.getIndividualClassTypes4Identifier(ide2); - - if (types1.isEmpty() || types2.isEmpty()){ - return 0.0; - } - - - - double scope; - double max_scope=-1; - - for (int cls1 : types1){ - for (int cls2 : types2){ - scope = getScopeAll4Mapping(cls1, cls2); - //getScopeISUB4Neighbourhood(cls1, cls2); - - if (scope>0.9) - return scope; - - if (scope>max_scope) - max_scope=scope; - - } - } - - - return max_scope; - } - - - - - - - /** - * We seek for weak mappings within the big scopes of the entities - * If not weak mappings found then the mapping it is likely to be wrong - * @param ide1 - * @param ide2 - * @return - */ - private boolean areMappedEntitiesSharingScope(int ide1, int ide2){ - - - Set module1 = index.getScope4Identifier_Big(ide1); - Set module2 = index.getScope4Identifier_Big(ide2); - - //No scope in one side - if ((module1.size()==0 && module2.size()>0) || (module2.size()==0 && module1.size()>0)){ - //LogOutput.print(index.getName4ConceptIndex(ide1) + " " + module1.size()); - //LogOutput.print(index.getName4ConceptIndex(ide2) + " " + module2.size()); - - return true; //we cannot say much - } - - - - - //No scope in both sides - //We give an small value: we cannot say more. - if (module1.size()==0 || module2.size()==0 ){ - return true; //we cannot say much - } - - - - - for (int ent1 : module1){ - - //In weak mappings - //------------------------------------------ - if (allWeakMappings1N.containsKey(ent1)){ //Only if involved in mappings - - for (int ent2 : allWeakMappings1N.get(ent1)){ - - if (module2.contains(ent2)){ - - return true; - } - - } - - } - } - - - return false; - - - } - - - - public boolean isMappingInConflictWithFixedMappings(int ident1, int ident2){ - - //return isMappingInConflictWithFixedMappings_direct_disjointness(ident1, ident2); - return isMappingInConflictWithFixedMappings_includes_descendants(ident1, ident2); - - } - - - - //TODO only direct disjoint cases - public boolean isMappingInConflictWithFixedMappings_direct_disjointness(int ident1, int ident2){ - - //CONFLICTIVE MAPPINGS WRT EXACT ONES - if (index.areDisjoint(ident1, ident2) || index.areDisjoint(ident2, ident1)) { //Not sure about the symmetry - //System.out.println("Conflict: " + index.getName4ConceptIndex(ident1) + " - " + index.getName4ConceptIndex(ident2)); - return true; - } - - return false; - //addSubMapping2ConflictiveAnchors(ident1, ident2); - //addSubMapping2ConflictiveAnchors(ident2, ident1); - - } - - - - - - //TODO it includes descendants - public boolean isMappingInConflictWithFixedMappings_includes_descendants(int ident1, int ident2){ - - - //CONFLICTIVE MAPPINGS WRT EXACT ONES - if (index.areDisjoint(ident1, ident2) || index.areDisjoint(ident2, ident1)) { //Not sure about the symmetry - //System.out.println("Conflict: " + index.getName4ConceptIndex(ident1) + " - " + index.getName4ConceptIndex(ident2)); - return true; - } - - - //This method also checks for subclasses - //if A is not in conflict with B but it is with B1 which is subclass of B - - //Example: - //O1:Paper is mapped to O2:Paper - //O2:Paper is disjoint with O2:Poster - //O2:Paper and O2:Poster subclassof O2:Contribution - //Can be mapped O1:Paper to O2:Contribution - - //We check if descendants are disjoint - //This method is too aggressive - //Descendants may be disjoint and the mapping still be valid and not leading to unsat!! - //if (index.arePartiallyDisjoint(ident1, ident2)){ - // //System.out.println("Conflict: " + index.getName4ConceptIndex(ident1) + " - " + index.getName4ConceptIndex(ident2)); - // return true; - //} - - //Not symmetric method - if (index.isDisjointWithDescendants(ident1, ident2) || index.isDisjointWithDescendants(ident2, ident1)){ - //System.out.println("Conflict: " + index.getName4ConceptIndex(ident1) + " - " + index.getName4ConceptIndex(ident2)); - return true; - } - - - - - return false; - //addSubMapping2ConflictiveAnchors(ident1, ident2); - //addSubMapping2ConflictiveAnchors(ident2, ident1); - - } - - - /** - * Check if two given mappings are in conflict - * @param ideA - * @param ideB - * @param ideAA - * @param ideBB - * @return - */ - public boolean areMappingsInConflict(int ideA, int ideB, int ideAA, int ideBB){ - - boolean AequivAA=false; - boolean BequivBB=false; - - boolean AcontAA=false; - boolean AAcontA=false; - boolean BcontBB=false; - boolean BBcontB=false; - - boolean AdisjAA=false; - boolean BdisjBB=false; - - boolean conflict=false; - - - AequivAA = index.areEquivalentClasses(ideA, ideAA); - - BequivBB = index.areEquivalentClasses(ideB, ideBB); - - AcontAA = AequivAA || index.isSubClassOf(ideA, ideAA); - - AAcontA = AequivAA || index.isSubClassOf(ideAA, ideA); - - BcontBB = BequivBB || index.isSubClassOf(ideB, ideBB); - - BBcontB = BequivBB || index.isSubClassOf(ideBB, ideB); - - //over same ontology - AdisjAA = !AcontAA && !AAcontA && (index.areDisjoint(ideA, ideAA));// || index.isDisjointWithDescendants(ideA, ideAA) || index.isDisjointWithDescendants(ideAA, ideA)); - - BdisjBB = !BcontBB && !BBcontB && (index.areDisjoint(ideB, ideBB));// || index.isDisjointWithDescendants(ideB, ideBB) || index.isDisjointWithDescendants(ideBB, ideB)); - - - conflict = ((AcontAA || AAcontA) && BdisjBB) || ((BcontBB || BBcontB) && AdisjAA); - - return conflict; - - } - - - public boolean isMappingDangerousEquiv(int ident1, int ident2){ - - //Repair - - //boolean tmp = index.isSubClassOf(ident1, ident2); - //tmp = index.isSubClassOf(ident2, ident1); - - //System.out.println("hello2"); - - - - //There is already a parent-child relationship and no ambiguity - if (index.isSubClassOf(ident1, ident2) || index.isSubClassOf(ident2, ident1)){ - //No ambiguity in mapping - if (!isEntityAlreadyMapped(ident1) && !isEntityAlreadyMapped(ident2)){ - return true; - } - } - - return false; - - } - - - public boolean isMappingInferred(int ident1, int ident2){ - - //CONFLICTIVE MAPPINGS WRT EXACT ONES - if (index.isSubClassOf(ident1, ident2)) - return true; - - - return false; - } - - - - - public Map> getCategoryMappings(){ - return category_mappings; - } - - public void setCategoryMappings(Map> mappings){ - category_mappings=mappings; - } - - public boolean hasCategoryMappings(String uri){ - return category_mappings.containsKey(uri); - } - - public Set getMappings4Category(String uri){ - return category_mappings.get(uri); - } - - - public Set getMappings4CategoryWithCheck(String uri){ - if (category_mappings.containsKey(uri)) - return category_mappings.get(uri); - else - return new HashSet(); - } - - - - - - public void printStatisticsMappingEvaluation(){ - //LogOutput.print("Anchors IF exact: " + exactMappings1N.size()); - - LogOutput.print(""); - - int mappings=0; - int good=0; - for (int ide1 : logmapMappings1N.keySet()){ - for (int ide2 : logmapMappings1N.get(ide1)){ - - if (isId1SmallerThanId2(ide1, ide2)){ - - mappings++; - - - if (isMappingInGoldStandard(ide1, ide2)){ - good++; - - - } - else { - /*LogOutput.print("ANCH" + " - " + - index.getLabel4ConceptIndex(ide1) + " - " + //.getName4ConceptIndex(ide1) + " - " + - index.getLabel4ConceptIndex(ide2) + " - " + //index.getName4ConceptIndex(ide2) + " - " + - extractISUB4Mapping(ide1, ide2) + " - " + - extractISUBAverage4Mapping(ide1, ide2) + " - " + - extractScope4Mapping(ide1, ide2));*/ - } - } - } - } - - LogOutput.print("Anchors IF exact: " + mappings); - LogOutput.print("Good Anchors in GS: " + good); - - - - - - mappings=0; - good=0; - for (int ide1 : mappings2Review.keySet()){ - for (int ide2 : mappings2Review.get(ide1)){ - - //check only one side - if (isId1SmallerThanId2(ide1, ide2)){ - - mappings++; - - - if (isMappingInGoldStandard(ide1, ide2)){ - good++; - } - } - } - } - - LogOutput.print("Mappings 2 review: " + mappings); - LogOutput.print("Good mappings 2 review in GS: " + good); - - - - mappings=0; - good=0; - for (int ide1 : candidateMappings2askLogMap1N.keySet()){ - for (int ide2 : candidateMappings2askLogMap1N.get(ide1)){ - - //check only one side - if (isId1SmallerThanId2(ide1, ide2)){ - - mappings++; - - - if (isMappingInGoldStandard(ide1, ide2)){ - good++; - //addSubMapping2ListOfAnchors(ide1, ide2); - //addSubMapping2ListOfAnchors(ide2, ide1); - } - else{/* - LogOutput.print("ASK" + " - " + - index.getName4ConceptIndex(ide1) + " - " + - index.getName4ConceptIndex(ide2) + " - " + - extractISUB4Mapping(ide1, ide2) + " - " + - extractISUBAverage4Mapping(ide1, ide2) + " - " + - extractScope4Mapping(ide1, ide2)); - */} - } - } - } - - LogOutput.print("Mappings 2 ask logmap: " + mappings); - LogOutput.print("Good mappings 2 ask logmap in GS: " + good); - - - - mappings=0; - good=0; - for (int ide1 : candidateMappings2askUser1N.keySet()){ - for (int ide2 : candidateMappings2askUser1N.get(ide1)){ - - //check only one side - if (isId1SmallerThanId2(ide1, ide2)){ - - mappings++; - - - if (isMappingInGoldStandard(ide1, ide2)){ - good++; - //addSubMapping2ListOfAnchors(ide1, ide2); - //addSubMapping2ListOfAnchors(ide2, ide1); - } - else{/* - LogOutput.print("ASK" + " - " + - index.getName4ConceptIndex(ide1) + " - " + - index.getName4ConceptIndex(ide2) + " - " + - extractISUB4Mapping(ide1, ide2) + " - " + - extractISUBAverage4Mapping(ide1, ide2) + " - " + - extractScope4Mapping(ide1, ide2)); - */} - } - } - } - - LogOutput.print("Mappings 2 ask user: " + mappings); - LogOutput.print("Good mappings 2 ask user in GS: " + good); - - - mappings=0; - good=0; - for (MappingObjectInteractivity mapping : listMappings2askUser1N){ - - mappings++; - - - if (isMappingInGoldStandard(mapping.getIdentifierOnto1(), mapping.getIdentifierOnto2())){ - good++; - } - - } - - LogOutput.print("Mappings 2 ask user (filtered list): " + mappings); - LogOutput.print("Good mappings 2 ask user in GS (filtered list): " + good); - - - mappings=0; - good=0; - for (int ide1 : weakenedDandG_Mappings1N.keySet()){ - for (int ide2 : weakenedDandG_Mappings1N.get(ide1)){ - - //if (index.getClassIndex(ide1).getOntologyId(). - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.mappings; - -import java.io.*; -import java.util.Comparator; -import java.util.HashSet; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.indexing.OntologyProcessing; -import uk.ac.ox.krr.logmap2.indexing.entities.ClassIndex; -import uk.ac.ox.krr.logmap2.utilities.Lib; -import uk.ac.ox.krr.logmap2.utilities.Pair; - -public class WeakCandidate extends Pair implements Comparator { - - public static final double MINSCORE = 0; - public static final int WEIGHTED = 0; - public static final int WEIGHTEDFILTER = 1; - public static final int WEIGHTEDFILTERMATCH = 2; - - private OntologyProcessing m_o1 = null; - private OntologyProcessing m_o2 = null; - private IndexManager m_index = null; - private double m_score = 0; - private String rest1 = "", rest2 = ""; - - public WeakCandidate(int id1, int id2, Set label1, Set label2, - OntologyProcessing o1, OntologyProcessing o2, int type) - { - super(id1, id2); - m_o1 = o1; - m_o2 = o2; - getScore_weighted(id1, id2, label1, label2, type); - } - - private void getScore_weighted(int id1, int id2, Set lab1, Set lab2, int type) - { - if (type == WEIGHTEDFILTER) - { - Set super1 = m_o1.getSuperClass(id1, 10); - Set super2 = m_o2.getSuperClass(id2, 10); - - for (String str : super1) - for (String word : str.split("_")) - if (!lab1.contains(word)) - lab2.remove(word); - - for (String str : super2) - for (String word : str.split("_")) - if (!lab2.contains(word)) - lab1.remove(word); - } - - m_score = getScore_weighted(lab1, lab2); - } - - private double getScore_weighted(Set lab1, Set lab2) - { - double sum = 0, value = 0, temp; - Set combo = new HashSet(); - - for (String word : lab1) - { - temp = 1. / m_o1.getFrequency(word); - sum += temp; - if (lab2.contains(word)) - value += temp; - rest1 += word; - } - - for (String word : lab2) - { - temp = 1. / m_o2.getFrequency(word); - sum += temp; - if (lab1.contains(word)) - value += temp; - rest2 += word; - } - - - return sum == 0 ? 1. : value / sum; - } - - public double getScore(I_Sub isub) - { - return isub.score(rest1, rest2); - } - - /** - * for frequency formula - */ - public WeakCandidate(Set combo, int id1, int id2, String label1, String label2, IndexManager index, int f_combo) - { - super(id1, id2); - m_index = index; - getScore_frequency(combo, label1, label2, f_combo); - } - - private void getScore_frequency(Set combo, String label1, String label2, int f_combo) - { - // TODO Yujiao - get the score of label1 and label 2 - Set set1 = new HashSet(); - Set set2 = new HashSet(); - - for (String word : label1.split("_")) - if (!combo.contains(word)) - set1.add(word); - - for (String word : label2.split("_")) - if (!combo.contains(word)) - set2.add(word); - - Set list1 = m_index.getCooccurrenceOfWords(set1); - Set list2 = m_index.getCooccurrenceOfWords(set2); - - int total = m_index.getIdentifier2ClassIndexMap().size(); - -// double pa = list1 == null ? 1. : (double)list1.size() / total; -// double pb = list2 == null ? 1. : (double)list2.size() / total; - int fa = list1 == null ? total : list1.size(); - int fb = list2 == null ? total : list2.size(); - - if ((f_combo - fa) * (f_combo - fb) < 0) - { - m_score = 0; - return ; - } - - set1.addAll(set2); - Set list = m_index.intersectSet(list1, list2); - int fab = list == null ? total : list.size(); - - set1.clear(); - set2.clear(); - if (list1 != null) list1.clear(); - if (list2 != null) list2.clear(); - if (list != null) list.clear(); - -// double min; -// connection = fab / (min = Math.min(fa, fb)); -// gap = Math.abs(fa - fb) / min; - m_score = 2. * fab / (fa + fb); -// score = 2 * ((double)Math.min(fa, fb)) / total; - } - - public double getScore() - { - return m_score; - } - - @Override // 1: c1 < c2, for sort < < < < - public int compare(WeakCandidate c1, WeakCandidate c2) { - int delta = Lib.dcmp(c1.m_score - c2.m_score); - return - delta; - } - - public int compareTo(WeakCandidate that) // 1: this > that - { - return - compare(this, that); - } - - public boolean equals(Object obj) { - return compare(this, (WeakCandidate)obj) == 0; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObject.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObject.java deleted file mode 100644 index 9198d647c6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObject.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.mappings.objects; - - -public abstract class MappingObject { - - protected int ident_onto1; - protected int ident_onto2; - - - - - public int getIdentifierOnto1(){ - return ident_onto1; - } - - public int getIdentifierOnto2(){ - return ident_onto2; - } - - - public void setIdentifierOnto1(int ident){ - this.ident_onto1 = ident; - } - - public void setIdentifierOnto2(int ident){ - this.ident_onto2 = ident; - } - - - - - - public boolean equals(Object o){ - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof MappingObject)) - return false; - - MappingObject i = (MappingObject)o; - - return equals(i); - - } - - - public boolean equals(MappingObject m){ - - if (ident_onto1!=m.getIdentifierOnto1() || ident_onto2!=m.getIdentifierOnto2()){ - return false; - } - return true; - } - - public String toString(){ - return "<"+ident_onto1+"=="+ident_onto2+">"; - } - - public int hashCode() { - int code = 10; - code = 40 * code + ident_onto1; - code = 40 * code + ident_onto2; - return code; - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectIdentifiers.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectIdentifiers.java deleted file mode 100644 index 83a2670cae..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectIdentifiers.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.mappings.objects; - -public class MappingObjectIdentifiers extends MappingObject { - - //private int dir_mapping; - - //DIR IMPLICATION - //public static int L2R=0; //P->Q - //public static int R2L=-1; //P<-Q - //public static int EQ=-2; //P<->Q - - - - - - public MappingObjectIdentifiers(int ide1, int ide2){ - //this(ide1, ide2, 0.0); - ident_onto1=ide1; - ident_onto2=ide2; - } - - /*public MappingObjectIdentifiers(int ide1, int ide2, double score){ - - ident_onto1=ide1; - ident_onto2=ide2; - confidence=score; - - }*/ - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectStr.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectStr.java deleted file mode 100644 index f501b1dffb..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/mappings/objects/MappingObjectStr.java +++ /dev/null @@ -1,213 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.mappings.objects; - - - -public class MappingObjectStr { - - String Iri_ent1_str; - String Iri_ent2_str; - double confidence; - - double lexical_conf; - double scope_conf; - - int dir_mappings; - int typeMappings;//classes, properties, instances - - - - //DIR IMPLICATION - public static final int SUB = 0; //L2R=0; //P->Q - public static final int SUP=-1; //R2L P<-Q - public static final int EQ=-2; //P<->Q - //-3 is reserved in LigMap for otehr things - public static final int Flagged=-4; //Flagged mappings in Largebio - - - - //TYPE OF MAPPING - public static final int CLASSES=0; - public static final int DATAPROPERTIES=1; - public static final int OBJECTPROPERTIES=2; - public static final int INSTANCES=3; - public static final int UNKNOWN=4; - - - - public MappingObjectStr(String iri_ent1, String iri_ent2){ - - Iri_ent1_str=iri_ent1; - Iri_ent2_str=iri_ent2; - confidence=-1; - dir_mappings=MappingObjectStr.EQ; - typeMappings = MappingObjectStr.UNKNOWN; - } - - public MappingObjectStr(String iri_ent1, String iri_ent2, double conf){ - - Iri_ent1_str=iri_ent1; - Iri_ent2_str=iri_ent2; - confidence=conf; - dir_mappings=MappingObjectStr.EQ; - typeMappings = MappingObjectStr.UNKNOWN; - - } - - public MappingObjectStr(String iri_ent1, String iri_ent2, double conf, int dir_mapping){ - - Iri_ent1_str=iri_ent1; - Iri_ent2_str=iri_ent2; - confidence=conf; - dir_mappings=dir_mapping; - typeMappings = MappingObjectStr.UNKNOWN; - } - - public MappingObjectStr(String iri_ent1, String iri_ent2, double conf, int dir_mapping, int typeMapping){ - - Iri_ent1_str=iri_ent1; - Iri_ent2_str=iri_ent2; - confidence=conf; - dir_mappings=dir_mapping; - typeMappings = typeMapping; - } - - - public int getMappingDirection(){ - return dir_mappings; - } - - public String getIRIStrEnt1(){ - return Iri_ent1_str; - - } - - public String getIRIStrEnt2(){ - return Iri_ent2_str; - - } - - public double getConfidence(){ - return confidence; - - } - - public boolean isClassMapping(){ - return getTypeOfMapping()==CLASSES; - } - - public boolean isInstanceMapping(){ - return getTypeOfMapping()==INSTANCES; - } - - public boolean isDataPropertyMapping(){ - return getTypeOfMapping()==DATAPROPERTIES; - } - - public boolean isObjectPropertyMapping(){ - return getTypeOfMapping()==OBJECTPROPERTIES; - } - - public int getTypeOfMapping(){ - return typeMappings; - - } - - public void setTypeOfMapping(int type){ - typeMappings = type; - - } - - - public void setDirMapping(int dir){ - dir_mappings = dir; - } - - public void setIRIStrEnt1(String iri1){ - Iri_ent1_str=iri1; - - } - - public void setIRIStrEnt2(String iri2){ - Iri_ent2_str=iri2; - - } - - - public void setConfidenceMapping(double conf){ - confidence = conf; - - } - - public void setLexicalConfidenceMapping(double conf){ - lexical_conf = conf; - - } - - public void setScopeConfidenceMapping(double conf){ - scope_conf = conf; - - } - - - - - public boolean equals(Object o){ - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof MappingObjectStr)) - return false; - - MappingObjectStr i = (MappingObjectStr)o; - - return equals(i); - - } - - - public boolean equals(MappingObjectStr m){ - - //TODO: maybe the mapping is in the other from ent2 to ent1 - if (!Iri_ent1_str.equals(m.getIRIStrEnt1()) || !Iri_ent2_str.equals(m.getIRIStrEnt2())){ - return false; - } - return true; - } - - public String toString(){ - if (dir_mappings==EQ) - return "<"+Iri_ent1_str+"=="+Iri_ent2_str+">"; - else if (dir_mappings==SUB) - return "<"+Iri_ent1_str+"<"+Iri_ent2_str+">"; - else - return "<"+Iri_ent1_str+">"+Iri_ent2_str+">"; - } - - public int hashCode() { - int code = 10; - code = 40 * code + Iri_ent1_str.hashCode(); - code = 50 * code + Iri_ent2_str.hashCode(); - return code; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/GoogleBasedTranslator.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/GoogleBasedTranslator.java deleted file mode 100644 index b928a9aecd..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/GoogleBasedTranslator.java +++ /dev/null @@ -1,173 +0,0 @@ -//package uk.ac.ox.krr.logmap2.multilingual; -// -//import java.util.HashMap; -//import java.util.Map; -// -//import uk.ac.ox.krr.logmap2.Parameters; -//import uk.ac.ox.krr.logmap2.io.LogOutput; -// -//import com.google.api.GoogleAPI; -//import com.google.api.GoogleAPIException; -//import com.google.api.translate.Language; -//import com.google.api.translate.Translate; -// -///** -// * Translator based on google translate. It only translates to English -// * @author yuan gong and ernesto -// * -// */ -//public class GoogleBasedTranslator extends Translator{ -// -// -// //This structure maps the language in rdf:label to language of Google translation -// public final static Map LanguageMap = new HashMap() { -// { -// /*put("cn", Language.CHINESE_SIMPLIFIED); -// put("en", Language.ENGLISH); -// put("de", Language.GERMAN); -// put("es", Language.SPANISH); -// put("fr", Language.FRENCH); -// put("nl", Language.DUTCH); -// put("pt", Language.PORTUGUESE); -// put("ru", Language.RUSSIAN); -// put("cz", Language.CZECH); -// put("it", Language.ITALIAN); -// put("ar", Language.ARABIC);*/ -// -// for (Language lang : Language.values()){ -// if (lang.toString().length()==2) //we avoid zh-CHS and zh-CHT -// put(lang.toString(), lang); -// } -// -// //There is also chinese traditional -// put("zh", Language.CHINESE_SIMPLIFIED); -// -// //To keep compatibility with owl OAEI codes -// put("cn", Language.CHINESE_SIMPLIFIED); -// put("cz", Language.CZECH); -// -// //for (String key : keySet()){ -// // System.out.println(key + " " + get(key).name()); -// //} -// -// } -// }; -// -// -// -// -// public GoogleBasedTranslator(){ -// super(); -// } -// -// -// -// -// @Override -// public String getToolAPITranslation(String label, String originLang, -// String targetLang) throws Exception { -// return getGoogleTranslation(label, originLang, targetLang); -// } -// -// -// -// -// -// -// private String getGoogleTranslation(String text, String originLangStr, String targetLangStr) throws GoogleAPIException { -// -// if (text.equals("") || text.equals(" ")) //avoid empty text -// return ""; -// -// //String translatedText; -// String translatedText=text;// + "_" + num_tranlated_characters; -// -// //Check if text is in local dictionary -// if (isInLocalDictionary(text)) -// return getLocalTranslation(text); -// -// else if(Parameters.call_online_translator){ -// // Set Google key here -// //GoogleAPI.setHttpReferrer("http://code.google.com/p/google-api-translate-java/"); -// //GoogleAPI.setKey("AIzaSyALd_XsjljQ0U0n8SB_3q6Iocc8kPeLsCo"); //api yuan gong -// GoogleAPI.setHttpReferrer("https://code.google.com/p/logmap-matcher/"); -// //GoogleAPI.setKey("AIzaSyCXIH0M0Ya4WpnbHYIqNrRC4wXOqtszQuU"); //university of oxford api, max 100,000. Old key -// GoogleAPI.setKey("AIzaSyCOXm6fqYcqJtpFSrlMsgAy1VPkgNcrD2k"); //New key -// -// -// Language originLang = LanguageMap.get(originLangStr); -// Language targetLang = LanguageMap.get(targetLangStr); -// -// num_tranlated_characters+=text.length(); -// num_calls++; -// -// LogOutput.printAlways("Translating: '" + text + "' from " + originLangStr + " to " + targetLangStr + " using Google API. Num chars translated so far: " + num_tranlated_characters); -// -// //Google call -// if (!Parameters.is_test_mode_multilingual){ -// try{ -// translatedText = Translate.DEFAULT.execute(text, originLang, targetLang); -// } -// catch (Exception e){ -// LogOutput.printError("Error Translating: '" + text + "' from " + originLangStr + " to " + targetLangStr + " using Google API. " + e.getMessage()); -// e.printStackTrace(); -// return ""; -// } -// //System.out.println(translatedText.length()); -// } -// else{ //This is for test only! -// translatedText=text + "_" + num_tranlated_characters + "_g"; -// } -// -// -// //System.out.println(translatedText); -// -// //Store in on-the-fly dictionary -// addTranslation2Map(text, translatedText); -// } -// -// return translatedText; -// -// } -// -// -// -// -// -// @Override -// public String getTranslatorName() { -// return "google"; -// } -// -// -// -// -// -// -// -// -// public static void main(String[] args){ -// -// GoogleBasedTranslator translator = new GoogleBasedTranslator(); -// -// System.out.println("'"+translator.getTranslation("MedicoCabecera", "es", "ar")+"'"); -// //System.out.println("'"+translator.getTranslation("coche", "es", "en")+"'"); -// -// -// -// //System.out.println(Language.ENGLISH.toString()); -// -// -// } -// -// -// -// -// -// -// -// -// -// -// -//} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/MicrosoftBasedTranslator.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/MicrosoftBasedTranslator.java deleted file mode 100644 index 103f3f50c3..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/MicrosoftBasedTranslator.java +++ /dev/null @@ -1,162 +0,0 @@ -package uk.ac.ox.krr.logmap2.multilingual; - -import java.util.HashMap; -import java.util.Map; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; - -import com.memetix.mst.language.Language; -import com.memetix.mst.translate.Translate; - -public class MicrosoftBasedTranslator extends Translator{ - - - //This structure maps the language in rdf:label to language of Microsoft API translation - public final static Map LanguageMap = new HashMap() { - { - - /*put("cn", Language.CHINESE_SIMPLIFIED); - put("en", Language.ENGLISH); - put("de", Language.GERMAN); - put("es", Language.SPANISH); - put("fr", Language.FRENCH); - put("nl", Language.DUTCH); - put("pt", Language.PORTUGUESE); - put("ru", Language.RUSSIAN); - put("cz", Language.CZECH); - put("it", Language.ITALIAN); - put("ar", Language.ARABIC); - */ - - for (Language lang : Language.values()){ - if (lang.toString().length()==2) //we avoid zh-CHS and zh-CHT - put(lang.toString(), lang); - } - - //There is also chinese traditional - put("zh", Language.CHINESE_SIMPLIFIED); - - //To keep compatibility with owl OAEI codes - put("cn", Language.CHINESE_SIMPLIFIED); - put("cz", Language.CZECH); - - //for (String key : keySet()){ - // System.out.println(key + " " + get(key).name()); - //} - - - } - - }; - - - @Override - public String getToolAPITranslation(String label, String originLang, - String targetLang) throws Exception { - return getMicrosoftTranslation(label, originLang, targetLang); - } - - - private String getMicrosoftTranslation(String text, String originLangStr, String targetLangStr) throws Exception { - - if (text.equals("") || text.equals(" ")) //avoid empty text - return ""; - - //String translatedText; - String translatedText=text;// + "_" + num_tranlated_characters; - - //Check if text is in local dictionary - if (isInLocalDictionary(text)) - return getLocalTranslation(text); - - else if(Parameters.call_online_translator){ - - //Set credential - Translate.setClientId("LogMapMultilingualOntologyMatcher"); - Translate.setClientSecret("YMWwAB7c3qRQ+QoBnH/dtZx8C9kFqQObhqZpmGGdE4E="); - - - Language originLang = LanguageMap.get(originLangStr); - Language targetLang = LanguageMap.get(targetLangStr); - - num_tranlated_characters+=text.length(); - num_calls++; - - LogOutput.printAlways("Translating: '" + text + "' from " + originLangStr + " to " + targetLangStr + " using Microsoft API. Num chars translated so far: " + num_tranlated_characters); - - - - //Microsoft call - if (!Parameters.is_test_mode_multilingual){ - try{ - translatedText = Translate.execute(text, originLang, targetLang); - } - catch (Exception e){ - LogOutput.printError("Error Translating: '" + text + "' from " + originLangStr + " to " + targetLangStr + " using Microsoft API. " + e.getMessage()); - return ""; - } - //System.out.println(translatedText.length()); - } - else{ //This is for test only! - translatedText=text + "_" + num_tranlated_characters + "_m"; - } - - - //System.out.println(translatedText); - - //Store in on the fly dictionary - addTranslation2Map(text, translatedText); - } - - return translatedText; - - - } - - - - @Override - public String getTranslatorName() { - return "microsoft"; - } - - - - - - - - - - - - - /** - * @param args - */ - public static void main(String[] args) { - - - MicrosoftBasedTranslator translator = new MicrosoftBasedTranslator(); - - System.out.println("'"+translator.getTranslation("MedicoCabecera", "es", "en")+"'"); - //System.out.println("'"+translator.getTranslation("MedicoCabecera", "es", "ar")+"'"); - - for (Language l : Language.values()){ - if (l.toString().length()>1) - System.out.println(l.toString().length() + " " +l.toString().substring(0, 2) + " " + l.name() + " " + l.toString() ); - } - - System.out.println(Language.ENGLISH.toString()); - System.out.println(Language.CHINESE_SIMPLIFIED.toString()); - System.out.println(Language.CHINESE_TRADITIONAL.toString()); - System.out.println(Language.CZECH); - - - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/Translator.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/Translator.java deleted file mode 100644 index 9835f05261..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/Translator.java +++ /dev/null @@ -1,434 +0,0 @@ -package uk.ac.ox.krr.logmap2.multilingual; - -import java.io.File; - -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; - -import org.ictclas4j.bean.SegResult; -import org.ictclas4j.segment.SegTag2; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.io.WriteFile; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -public abstract class Translator { - - - protected int num_tranlated_characters=0; - protected int num_calls=0; - - - //We store translation to avoid (redundant) google translations calls - //TODO We currently assume that there is only one language for each object of the GoogleBasedTranslator and MicrosoftBasedTranslator - private HashMap localTranslationMap = new HashMap(); - private HashMap ontheFlyTranslationMap = new HashMap(); - - - - - public String getTranslation(String label, String originLang){ - return getTranslation(label, originLang, Parameters.target_lang); - } - - - - public void reverseDictionary(String originLang, String targetLang){ - - //Load - Parameters.target_lang=targetLang; //"it" - loadDictionary(originLang);//"en" - - - //Reverse - HashMap tmp = new HashMap(); - - for (String key: ontheFlyTranslationMap.keySet()){ - tmp.put(ontheFlyTranslationMap.get(key), key); - } - - ontheFlyTranslationMap.clear(); - ontheFlyTranslationMap.putAll(tmp); - - //Store - Parameters.target_lang=originLang; //"en" - storeDictionary(targetLang); //"it" - - } - - - - public void loadDictionary(String language) { - - File file; - - if (Parameters.use_local_dict){ - - //Load local dictionary - file = new File(Parameters.path_multilingual_local + "/"+language+ "-" + Parameters.target_lang + "." + getTranslatorName()); - - //System.out.println("Trying to access local dictionary: " + file.getAbsolutePath()); - - try { - loadDictionary(file, localTranslationMap); - //System.out.println("\tNumber of entries local dictionary: " + localTranslationMap.size()); - - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - LogOutput.printError(e.getMessage()); - //System.out.println("\tError accessing local dictionary"); - } - } - - //Load on the fly dictionary if available - file = new File(Parameters.path_multilingual_tmp + "/"+language+ "-" + Parameters.target_lang + "." + getTranslatorName()); - - //System.out.println("Trying to access on-the-fly dictionary: " + file.getAbsolutePath()); - - try { - loadDictionary(file, ontheFlyTranslationMap); - //System.out.println("\t Number of entries on-the-fly dictionary: " + ontheFlyTranslationMap.size()); - - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - //LogOutput.printError(e.getMessage()); - LogOutput.printError("\tError accessing on-the-fly dictionary"); - } - - - } - - - public void storeDictionary(String language) { - - if (!ontheFlyTranslationMap.isEmpty()){ - - //We store the on the fly dictionary - File file = new File(Parameters.path_multilingual_tmp + "/"+language+ "-" + Parameters.target_lang + "." + getTranslatorName()); - - storeDictionary(file, ontheFlyTranslationMap); - } - - } - - - - public boolean isInLocalDictionary(String text) { - return localTranslationMap.containsKey(text) || ontheFlyTranslationMap.containsKey(text); - } - - - - public String getLocalTranslation(String text) { - if (localTranslationMap.containsKey(text)) - return localTranslationMap.get(text); - else - return ontheFlyTranslationMap.get(text); - } - - - public void addTranslation2Map(String text, String translatedText){ - ontheFlyTranslationMap.put(text, translatedText); - } - - - - - - - private void loadDictionary(File file, HashMap translationMap) throws FileNotFoundException{ - - //Loads local dictionary (if allowed) and on-the-fly dictionary if available - - - ReadFile reader = new ReadFile(file); - - String line; - String[] elements; - - line=reader.readLine(); - - while (line!=null) { - - try { - - if (line.startsWith("#")){ - line=reader.readLine(); - continue; - } - - if (line.indexOf("|")<0){ - line=reader.readLine(); - continue; - } - - elements=line.split("\\|"); - - if (elements.length!=2){ - LogOutput.printError("Error reading local translations file. Line: " + line + ".\n");// + e.getMessage()); - //System.out.println("Error reading local translations file. Line: " + line + ".\n");// + e.getMessage()); - line=reader.readLine(); - continue; - } - - - //One translation per line. Currently only one translation per word or set of words - translationMap.put(elements[0], elements[1]); - - line=reader.readLine(); - - } - catch (Exception e){ - LogOutput.printError("Error reading local translations file. Line: " + line + ".\n");// + e.getMessage()); - //System.out.println("Error reading local translations file. Line: " + line + ".\n");// + e.getMessage()); - line=reader.readLine(); //we keep reading... - continue; - } - - } - - reader.closeBuffer(); - - - } - - - /** - * On the fly dictionary - * @param language - */ - private void storeDictionary(File file, HashMap translationMap){ - - WriteFile writer = new WriteFile(file);//We do not append because we write the whole dictionary again - - writer.writeLine("#This file is initially empty and it will be populated with 'on-the-fly' translations obtained from google/microsoft translate."); - - for (String key : translationMap.keySet()){ - //One translation per line. Currently only one translation per word or set of words - writer.writeLine(key+"|"+translationMap.get(key)); - } - - writer.closeBuffer(); - - } - - - public int getNumberOfTranslatedCharacters(){ - return num_tranlated_characters; - } - - public int getNumberOfTranslateCalls(){ - return num_calls; - } - - - - public abstract String getTranslatorName(); - - - public abstract String getToolAPITranslation(String label, String originLang, String targetLang) throws Exception; - - - - public String getTranslation(String label, String originLangStr, String targetLangStr) { - - //TODO We allow multiple translation, but we return a String trans1|trans2|...|transX - - ArrayList split_label = new ArrayList(); - - String sentence_like_label; - - Set translations = new HashSet(); - - try{ - - String translated_label = getToolAPITranslation(label, originLangStr, targetLangStr); - - if (!translated_label.equals(label)) { - //Google is able to translate sentences, - //however it fails for composed words like ProgramCommitee or Program_Commitee. We need the to split into individual words - translations.add(translated_label); - } - - //Chinese labels - if (originLangStr.equals("cn")){ - split_label = splitChineseLabel(label); - - translations.add(getTranslationWordByWord(split_label, originLangStr, targetLangStr)); - - } - // - //Other languages - else{ - - split_label = splitRegularLabel(label); - - if (split_label.size()>0){ - - //Translate word by word - translations.add(getTranslationWordByWord(split_label, originLangStr, targetLangStr)); - - //We try to create a sentence from concept with - //char separation = " " - sentence_like_label = getSentenceFromArray(split_label); - if (!sentence_like_label.equals(label)) - translations.add(getToolAPITranslation(sentence_like_label, originLangStr, targetLangStr)); - } - - } - - //Transform to String - return getStringFromTranslationsSet(translations); - - } - catch(Exception e){ - //e.printStackTrace(); - LogOutput.printAlways("Error translating '"+ label + "'. " + e.getMessage()); - return label; - } - } - - - private String getTranslationWordByWord( - ArrayList split_label, String originLangStr, String targetLangStr) throws Exception { - - String translation = ""; - - for (String word : split_label){ - - if (translation.length()==0) - translation = getToolAPITranslation(word, originLangStr, targetLangStr); - else - translation += " " + getToolAPITranslation(word, originLangStr, targetLangStr); - - } - - - return translation; - } - - - private String getSentenceFromArray(ArrayList words){ - - StringBuilder sentence = new StringBuilder(); - for (int i = 0, il = words.size(); i < il; i++) { - if (i > 0) - sentence.append(" "); - sentence.append(words.get(i)); - } - return sentence.toString(); - - } - - - private String getStringFromTranslationsSet(Set translations){ - StringBuilder translation = new StringBuilder(); - - for (String t : translations){ - if (translation.toString().length()>0) - translation.append("|"); - - translation.append(t); - } - - return translation.toString(); - - } - - - - /** - * Regular label in other languages than Chinese - * @param label_value - * @return - */ - private ArrayList splitRegularLabel(String label_value){ - - ArrayList result = new ArrayList(); - - String[] words; - - label_value=label_value.replace(",", ""); - - - if (label_value.startsWith("_")){ - label_value = label_value.substring(1, label_value.length()); - } - if (label_value.endsWith("_")){ - label_value = label_value.substring(0, label_value.length()-1); - } - - - if (label_value.indexOf("_")>0){ //e.g. in NCI and SNOMED - words=label_value.split("_"); - } - else if (label_value.indexOf(" ")>0){ //e.g. in FMA - words=label_value.split(" "); - } - //Split capitals... - else{ - words=Utilities.splitStringByCapitalLetter(label_value); - } - - for (int index = 0; index < words.length; index++) { - result.add(words[index]); - } - - return result; - - } - - - - - - /** - * Split using the ictcla guidelines - * @param label - * @param targetLangStr - * @return - */ - private ArrayList splitChineseLabel(String label) { - - ArrayList result = new ArrayList(); - - try{ - - label = label.replaceAll("_", ""); - - // chinese, call ictclas - SegTag2 st = new SegTag2(1); - - SegResult sr = st.split(label); - String rawResult = sr.getFinalResult(); - - // ictcla ​​results format and can not be used directly, need to be processed before adding into the string result - String[] words = rawResult.split(" "); - for (int index = 0; index < words.length; index++) { - StringBuffer buffer = new StringBuffer(words[index]); - String word = buffer.substring(0, buffer.indexOf("/")); - result.add(word); - } - } - catch (Exception e){ - LogOutput.printError("Error spliting label: " + label); - result.clear(); - result.add(label); - } - - return result; - - - - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/TranslatorManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/TranslatorManager.java deleted file mode 100644 index d081272af2..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/multilingual/TranslatorManager.java +++ /dev/null @@ -1,150 +0,0 @@ -package uk.ac.ox.krr.logmap2.multilingual; - -import java.io.FileNotFoundException; -import java.util.Vector; - -import uk.ac.ox.krr.logmap2.Parameters; - - -public class TranslatorManager { - - public static final int GOOGLE_BASED_TRANSLATOR=0; - public static final int MICROSOFT_BASED_TRANSLATOR=1; - public static final int ALL_TRANSLATORS=9; - - public static int CURRENT_TRANSLATOR=GOOGLE_BASED_TRANSLATOR; - - private Vector translators = new Vector(); - - - public TranslatorManager(){ - this(ALL_TRANSLATORS); - } - - public TranslatorManager(int translator_id){ - switch (translator_id){ - case GOOGLE_BASED_TRANSLATOR: -// translators.add(new GoogleBasedTranslator()); - break; - case MICROSOFT_BASED_TRANSLATOR: - translators.add(new MicrosoftBasedTranslator()); - break; - //Add other cases - default: -// translators.add(new GoogleBasedTranslator()); - translators.add(new MicrosoftBasedTranslator()); - } - } - - - - public void loadDictionary(String language) throws FileNotFoundException{ - for (Translator translator : translators){ - translator.loadDictionary(language); - } - } - - public void storeDictionary(String language){ - for (Translator translator : translators){ - translator.storeDictionary(language); - } - } - - public void reverseDictionary(String originLang, String targetLang){ - for (Translator translator : translators){ - translator.reverseDictionary(originLang, targetLang); - } - } - - - - public int getNumberOfTranslatedCharacters(){ - - int translated_chars = 0; - - for (Translator translator : translators){ - translated_chars+=translator.getNumberOfTranslatedCharacters(); - } - - return translated_chars; - - } - - public int getNumberOfTranslateCalls(){ - - int num_calls = 0; - - for (Translator translator : translators){ - num_calls+=translator.getNumberOfTranslateCalls(); - } - - return num_calls; - - - } - - - - public String getTranslation(String label, String originLang){ - - StringBuilder translation = new StringBuilder(); - - for (Translator translator : translators){ - //Each translator returns a list of translations as trans1|trans2|....|trans_n - if (translation.toString().length()>0) - translation.append("|"); - - translation.append(translator.getTranslation(label, originLang, Parameters.target_lang)); - } - - return translation.toString(); - - } - - - - - - - - - public static Translator getTranslatorObject(int translator_id){ - switch (translator_id){ - case GOOGLE_BASED_TRANSLATOR: -// return new GoogleBasedTranslator(); - case MICROSOFT_BASED_TRANSLATOR: - return new MicrosoftBasedTranslator(); - //Add other cases - default: -// return new GoogleBasedTranslator(); - return new MicrosoftBasedTranslator(); - } - - } - - public static Translator getCurrentTranslatorObject(){ - return getTranslatorObject(CURRENT_TRANSLATOR); - - } - - public static void setCurrentTranslator(int translator){ - CURRENT_TRANSLATOR = translator; - } - - - - public static void main(String[] args){ - - TranslatorManager manager = new TranslatorManager(); - - manager.reverseDictionary("en", "it"); - - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/FromRDFAlign2OWL.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/FromRDFAlign2OWL.java deleted file mode 100644 index 3711a1bb69..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/FromRDFAlign2OWL.java +++ /dev/null @@ -1,503 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei; - -import java.io.File; -import java.net.URI; -import java.util.HashSet; -import java.util.List; -import java.util.ArrayList; -import java.util.Set; - -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.AddAxiom; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAnnotation; -import org.semanticweb.owlapi.model.OWLAnnotationProperty; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.oaei.reader.RDFAlignReader; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.WriteFile; - - -/** - * This class transforms a RDF alignment (XML) file into OWL format and plain text format. - * @author root - * - */ -public class FromRDFAlign2OWL { - - private RDFAlignReader RDF_mappings_reader; - - private OWLOntologyManager mappings_ontologyManager; - private OWLOntology ontology1; - private OWLOntology ontology2; - - private OWLOntology mappings_ontology; //mappings out - - private OWLDataFactory datafactory; - - - - private List owl_changes = new ArrayList(); - - private WriteFile writer; - - - private String mappings_rdf_file_name; - private String mappings_owl_file_name; - private String mappings_txt_file_name; - - - private String mappings_IRI="http://www.cs.ox.ac.uk/ontologies/oaei/owl/mappings.owl"; - - - /** - * Constructors for reference alignment only involving instances - * @param mappings_file_name - * @throws Exception - */ - public FromRDFAlign2OWL(String mappings_file_name) throws Exception{ - this(null, null, mappings_file_name, true); - } - - - - - public FromRDFAlign2OWL(String onto_iri1, String onto_iri2, String mappings_file_name) throws Exception{ - this(loadOntologyStatic(onto_iri1), loadOntologyStatic(onto_iri2), mappings_file_name, false); - } - - - public FromRDFAlign2OWL(OWLOntology onto1, OWLOntology onto2, String mappings_file_name) throws Exception{ - this(onto1, onto2, mappings_file_name, false); - } - - - public FromRDFAlign2OWL(OWLOntology onto1, OWLOntology onto2, String mappings_file_name, boolean only_individuals) throws Exception{ - - //Init file names - String mappings_file; - - mappings_file = mappings_file_name; - mappings_rdf_file_name = mappings_file_name; - - - //indexOf - if (mappings_rdf_file_name.lastIndexOf(".")>0){ - mappings_file = mappings_rdf_file_name.split("\\.")[0]; - } - - mappings_owl_file_name = "file:" + mappings_file + ".owl"; - mappings_txt_file_name = mappings_file + ".txt"; - - - - //Ontologies - ontology1 = onto1; - ontology2 = onto2; - - - //Init writer text file mappings - writer = new WriteFile(mappings_txt_file_name); - - - //Read mappings - RDF_mappings_reader = new RDFAlignReader(mappings_file_name); - RDF_mappings_reader.getMappingObjects(); - - - //Init output mappings ontology - initOWLMappingsFile(); - - - - //Convert mappings to OWL axioms: populate "owl_changes" - convertMappings2OWL(only_individuals); - - - - //close writer text file mappings - LogOutput.printAlways("Saving file: " + mappings_txt_file_name); - writer.closeBuffer(); - - - //Save output owl mappings: save owl_changes - LogOutput.printAlways("Saving file: " + mappings_owl_file_name); - saveOWLMappingsFile(); - - - - - } - - private void initOWLMappingsFile() throws Exception { - mappings_ontologyManager = OWLManager.createOWLOntologyManager(); - mappings_ontology = mappings_ontologyManager.createOntology(IRI.create(mappings_IRI)); - - datafactory=mappings_ontologyManager.getOWLDataFactory(); - - } - - - private void saveOWLMappingsFile() throws Exception { - - mappings_ontologyManager.applyChanges(owl_changes); - mappings_ontologyManager.saveOntology(mappings_ontology, new RDFXMLOntologyFormat(), IRI.create(mappings_owl_file_name)); - - } - - - - private void addAxiom2Changes(OWLAxiom ax){ - - owl_changes.add(new AddAxiom(mappings_ontology, ax)); - - } - - - - - private void convertMappings2OWL(boolean only_individuals){ - - - String iri_measure_str = mappings_IRI + "#measure"; - String iri_entity1_str = mappings_IRI + "#entity1"; - String iri_entity2_str = mappings_IRI + "#entity2"; - String iri_relation_str = mappings_IRI + "#relation"; - - OWLLiteral confidence_literal; - OWLAnnotation ann_measure; - OWLAnnotationProperty ann_property; - - OWLLiteral ent1_literal; - OWLAnnotation ann_ent1; - OWLAnnotationProperty ann_property_ent1; - - OWLLiteral ent2_literal; - OWLAnnotation ann_ent2; - OWLAnnotationProperty ann_property_ent2; - - OWLLiteral relation_literal; - OWLAnnotation ann_relation; - OWLAnnotationProperty ann_property_relation; - - - Set annSet = new HashSet(); - - - int type_mapping; - String type_mapping_str; - - OWLAxiom ax; - IRI iri_ent1; - IRI iri_ent2; - - String relation_str; - - - Set indivSet = new HashSet(); - - - - - for (MappingObjectStr mapping : RDF_mappings_reader.getMappingObjects()){ - - - iri_ent1 = IRI.create(mapping.getIRIStrEnt1()); - iri_ent2 = IRI.create(mapping.getIRIStrEnt2()); - - - //RELATION - //default - relation_str = "="; - - if (mapping.getMappingDirection() == Utilities.EQ){ - relation_str = "="; - } - else if (mapping.getMappingDirection() == Utilities.L2R){ - relation_str = "<"; - } - else if (mapping.getMappingDirection() == Utilities.R2L){ - relation_str = ">"; - } - - - - if (only_individuals){ - type_mapping = Utilities.INSTANCES; - type_mapping_str = Utilities.INSTANCES_STR; - } - else{ - - //TYPE MAPPING - if (ontology1.containsClassInSignature(IRI.create(mapping.getIRIStrEnt1()), true) - && ontology2.containsClassInSignature(IRI.create(mapping.getIRIStrEnt2()), true)){ - - type_mapping = Utilities.CLASSES; - type_mapping_str = Utilities.CLASSES_STR; - - } - else if (ontology1.containsObjectPropertyInSignature(IRI.create(mapping.getIRIStrEnt1()), true) - && ontology2.containsObjectPropertyInSignature(IRI.create(mapping.getIRIStrEnt2()), true)){ - - type_mapping = Utilities.OBJECTPROPERTIES; - type_mapping_str = Utilities.OBJECTPROPERTIES_STR; - } - else if (ontology1.containsDataPropertyInSignature(IRI.create(mapping.getIRIStrEnt1()), true) - && ontology2.containsDataPropertyInSignature(IRI.create(mapping.getIRIStrEnt2()), true)){ - - type_mapping = Utilities.DATAPROPERTIES; - type_mapping_str = Utilities.DATAPROPERTIES_STR; - } - else if (ontology1.containsIndividualInSignature(IRI.create(mapping.getIRIStrEnt1()), true) - && ontology2.containsIndividualInSignature(IRI.create(mapping.getIRIStrEnt2()), true)){ - - type_mapping = Utilities.INSTANCES; - type_mapping_str = Utilities.INSTANCES_STR; - relation_str = "="; - } - else { - System.err.println("Wrong mapping mixing entities "); - System.err.println("\t" + mapping.getIRIStrEnt1()); - System.err.println("\t" + mapping.getIRIStrEnt2()); - type_mapping = Utilities.UNKNOWN; - continue; // with next mapping - } - } - - - - //Plain Text mappings - if (type_mapping != Utilities.UNKNOWN){ - writer.writeLine(mapping.getIRIStrEnt1() + "|" + mapping.getIRIStrEnt2() + "|" + relation_str + "|" + mapping.getConfidence() + "|" + type_mapping_str); - } - - - - //ANNOTATIONS - ann_property = datafactory.getOWLAnnotationProperty(IRI.create(iri_measure_str)); - confidence_literal = datafactory.getOWLLiteral(mapping.getConfidence()); - ann_measure = datafactory.getOWLAnnotation(ann_property, confidence_literal); - - ann_property_ent1 = datafactory.getOWLAnnotationProperty(IRI.create(iri_entity1_str)); - ent1_literal = datafactory.getOWLLiteral(mapping.getIRIStrEnt1()); - ann_ent1 = datafactory.getOWLAnnotation(ann_property_ent1, ent1_literal); - - ann_property_ent2 = datafactory.getOWLAnnotationProperty(IRI.create(iri_entity2_str)); - ent2_literal = datafactory.getOWLLiteral(mapping.getIRIStrEnt2()); - ann_ent2 = datafactory.getOWLAnnotation(ann_property_ent2, ent2_literal); - - ann_property_relation = datafactory.getOWLAnnotationProperty(IRI.create(iri_relation_str)); - relation_literal = datafactory.getOWLLiteral(relation_str); - ann_relation = datafactory.getOWLAnnotation(ann_property_relation, relation_literal); - - - - //Annotations are added to the axiom - annSet.clear(); - annSet.add(ann_measure); - annSet.add(ann_ent1); - annSet.add(ann_ent2); - annSet.add(ann_relation); - - - - - if (type_mapping == Utilities.INSTANCE){ - - - //We only consider a kind of axioms between instances - - indivSet.clear(); - indivSet.add(datafactory.getOWLNamedIndividual(iri_ent1)); - indivSet.add(datafactory.getOWLNamedIndividual(iri_ent2)); - - addAxiom2Changes( - datafactory.getOWLSameIndividualAxiom( - indivSet, - annSet) - ); - - - } - - - else if (type_mapping == Utilities.CLASSES){ - - - if (mapping.getMappingDirection() == Utilities.EQ){ - - addAxiom2Changes( - datafactory.getOWLEquivalentClassesAxiom( - datafactory.getOWLClass(iri_ent1), - datafactory.getOWLClass(iri_ent2), - annSet) - ); - - } - else if (mapping.getMappingDirection() == Utilities.L2R){ - - addAxiom2Changes( - datafactory.getOWLSubClassOfAxiom( - datafactory.getOWLClass(iri_ent1), - datafactory.getOWLClass(iri_ent2), - annSet) - ); - - } - else if (mapping.getMappingDirection() == Utilities.R2L){ - - addAxiom2Changes( - datafactory.getOWLSubClassOfAxiom( - datafactory.getOWLClass(iri_ent2), - datafactory.getOWLClass(iri_ent1), - annSet) - ); - - } - - - } - - else if (type_mapping == Utilities.OBJECTPROPERTIES){ - - if (mapping.getMappingDirection() == Utilities.EQ){ - addAxiom2Changes( - datafactory.getOWLEquivalentObjectPropertiesAxiom( - datafactory.getOWLObjectProperty(iri_ent1), - datafactory.getOWLObjectProperty(iri_ent2), - annSet) - ); - - } - else if (mapping.getMappingDirection() == Utilities.L2R){ - - addAxiom2Changes( - datafactory.getOWLSubObjectPropertyOfAxiom( - datafactory.getOWLObjectProperty(iri_ent1), - datafactory.getOWLObjectProperty(iri_ent2), - annSet) - ); - - - } - else if (mapping.getMappingDirection() == Utilities.R2L){ - - addAxiom2Changes( - datafactory.getOWLSubObjectPropertyOfAxiom( - datafactory.getOWLObjectProperty(iri_ent2), - datafactory.getOWLObjectProperty(iri_ent1), - annSet) - ); - - } - - } - else if (type_mapping == Utilities.DATAPROPERTIES){ - - if (mapping.getMappingDirection() == Utilities.EQ){ - - addAxiom2Changes( - datafactory.getOWLEquivalentDataPropertiesAxiom( - datafactory.getOWLDataProperty(iri_ent1), - datafactory.getOWLDataProperty(iri_ent2), - annSet) - ); - - } - else if (mapping.getMappingDirection() == Utilities.L2R){ - - addAxiom2Changes( - datafactory.getOWLSubDataPropertyOfAxiom( - datafactory.getOWLDataProperty(iri_ent1), - datafactory.getOWLDataProperty(iri_ent2), - annSet) - ); - - - } - else if (mapping.getMappingDirection() == Utilities.R2L){ - - addAxiom2Changes( - datafactory.getOWLSubDataPropertyOfAxiom( - datafactory.getOWLDataProperty(iri_ent2), - datafactory.getOWLDataProperty(iri_ent1), - annSet) - ); - - - } - - } - //else {//UNNOWN do nothing} - - - - - - - - } - - - } - - - - - - private static OWLOntology loadOntologyStatic(String uri) throws Exception{ - System.out.println("\tLoading ontology " + uri); - return loadOntologyStatic(IRI.create(uri)); - } - - private static OWLOntology loadOntologyStatic(IRI uri) throws Exception{ - OWLOntologyManager ontologyManager=OWLManager.createOWLOntologyManager(); - ontologyManager.setSilentMissingImportsHandling(true); - return ontologyManager.loadOntology(uri); - - } - - - - - - - - - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/LogMapMatcherBridge.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/LogMapMatcherBridge.java deleted file mode 100644 index 2d613d5689..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/LogMapMatcherBridge.java +++ /dev/null @@ -1,108 +0,0 @@ -///******************************************************************************* -// * Copyright 2012 by the Department of Computer Science (University of Oxford) -// * -// * This file is part of LogMap. -// * -// * LogMap is free software: you can redistribute it and/or modify -// * it under the terms of the GNU Lesser General Public License as published by -// * the Free Software Foundation, either version 3 of the License, or -// * (at your option) any later version. -// * -// * LogMap is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// * GNU Lesser General Public License for more details. -// * -// * You should have received a copy of the GNU Lesser General Public License -// * along with LogMap. If not, see . -// ******************************************************************************/ -//package uk.ac.ox.krr.logmap2.oaei; -// -// -//import java.io.IOException; -//import java.net.URL; -// -// -//import eu.sealsproject.platform.res.domain.omt.IOntologyMatchingToolBridge; -//import eu.sealsproject.platform.res.tool.api.ToolBridgeException; -//import eu.sealsproject.platform.res.tool.api.ToolException; -//import eu.sealsproject.platform.res.tool.api.ToolType; -//import eu.sealsproject.platform.res.tool.impl.AbstractPlugin; -// -//import uk.ac.ox.krr.logmap2.*; -// -// -//public class LogMapMatcherBridge extends AbstractPlugin implements IOntologyMatchingToolBridge { -// -// /** -// * LogMap 2 aligns two ontologies specified via their URL and returns the -// * URL of the resulting alignment, which should be stored locally. -// * -// */ -// public URL align(URL source, URL target) throws ToolBridgeException, ToolException { -// -// URL url_alignment; -// -// try { -// //We read parameters -// Parameters.readParameters(); -// -// if (Parameters.allow_bioportal){ -// -// LogMap2_OAEI_BioPortal logmap = new LogMap2_OAEI_BioPortal(); -// -// logmap.align(source, target); -// -// url_alignment = logmap.returnAlignmentFile(); //Local-temporary file -// -// } -// else{ -// LogMap2_OAEI logmap = new LogMap2_OAEI(); -// -// logmap.align(source, target); -// -// url_alignment = logmap.returnAlignmentFile(); //Local-temporary file -// } -// -// return url_alignment; -// -// } -// -// catch (IOException e) { -// throw new ToolBridgeException("Cannot create file for resulting alignment", e); -// } -// catch (Exception e) { -// e.printStackTrace(); -// throw new ToolException("Error extracting/cleaning/storing mappings with LogMap: "); -// -// } -// -// -// } -// -// /** -// * Not considered in LogMap -// */ -// public URL align(URL source, URL target, URL inputAlignment) throws ToolBridgeException, ToolException { -// throw new ToolException("functionality of called method is not supported"); -// } -// -// /** -// * No pre-resiquites in LogMap -// */ -// public boolean canExecute() { -// return true; -// } -// -// /** -// * The LogMap is an ontology matching tool. -// */ -// public ToolType getType() { -// return ToolType.OntologyMatchingTool; -// } -// -// -// -// -// -//} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/MatcherBridge.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/MatcherBridge.java deleted file mode 100644 index 247f228c4a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/MatcherBridge.java +++ /dev/null @@ -1,105 +0,0 @@ -///******************************************************************************* -// * Copyright 2012 by the Department of Computer Science (University of Oxford) -// * -// * This file is part of LogMap. -// * -// * LogMap is free software: you can redistribute it and/or modify -// * it under the terms of the GNU Lesser General Public License as published by -// * the Free Software Foundation, either version 3 of the License, or -// * (at your option) any later version. -// * -// * LogMap is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// * GNU Lesser General Public License for more details. -// * -// * You should have received a copy of the GNU Lesser General Public License -// * along with LogMap. If not, see . -// ******************************************************************************/ -//package uk.ac.ox.krr.logmap2.oaei; -// -// -//import java.io.IOException; -// -//import java.net.MalformedURLException; -//import java.net.URL; -//import java.util.Calendar; -// -//import org.semanticweb.owlapi.model.IRI; -// -//import eu.sealsproject.platform.res.domain.omt.IOntologyMatchingToolBridge; -//import eu.sealsproject.platform.res.tool.api.ToolBridgeException; -//import eu.sealsproject.platform.res.tool.api.ToolException; -//import eu.sealsproject.platform.res.tool.api.ToolType; -//import eu.sealsproject.platform.res.tool.impl.AbstractPlugin; -// -//import uk.ac.ox.krr.logmap2.*; -// -// -//public class MatcherBridge extends AbstractPlugin implements IOntologyMatchingToolBridge { -// -// /** -// * LogMap 2 aligns two ontologies specified via their URL and returns the -// * URL of the resulting alignment, which should be stored locally. -// * -// */ -// public URL align(URL source, URL target) throws ToolBridgeException, ToolException { -// LogMap2_OAEI logmap; -// URL url_alignment; -// long init, fin; -// -// init = Calendar.getInstance().getTimeInMillis(); -// -// try { -// -// logmap = new LogMap2_OAEI(); -// -// logmap.align(source, target); -// -// url_alignment = logmap.returnAlignmentFile(); //Local-temporary file -// -// fin = Calendar.getInstance().getTimeInMillis(); -// //System.out.println("Total time LogMap (s): " + (float)((double)fin-(double)init)/1000.0); -// -// return url_alignment; -// -// } -// -// catch (IOException e) { -// throw new ToolBridgeException("Cannot create file for resulting alignment", e); -// } -// catch (Exception e) { -// e.printStackTrace(); -// throw new ToolException("Error extracting/cleaning/storing mappings with LogMap: "); -// -// } -// -// -// } -// -// /** -// * Not considered in LogMap -// */ -// public URL align(URL source, URL target, URL inputAlignment) throws ToolBridgeException, ToolException { -// throw new ToolException("functionality of called method is not supported"); -// } -// -// /** -// * No pre-resiquites in LogMap -// */ -// public boolean canExecute() { -// return true; -// } -// -// /** -// * The LogMap is an ontology matching tool. -// */ -// public ToolType getType() { -// return ToolType.OntologyMatchingTool; -// } -// -// -// -// -// -//} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/OAEI2015InstanceProcessing.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/OAEI2015InstanceProcessing.java deleted file mode 100644 index d0c88695c1..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/OAEI2015InstanceProcessing.java +++ /dev/null @@ -1,180 +0,0 @@ -package uk.ac.ox.krr.logmap2.oaei; - -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLIndividual; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; -import org.semanticweb.owlapi.model.OWLOntology; - -import uk.ac.ox.krr.logmap2.io.LogOutput; - -/** - * This class represents a specific behaviour to extract the information of instances in one of the tracks of the OAEI 2015. - * The task requires to sum the values of specific data property assertions (for example: number of citations) or the occurrence of object property assertions - * (for example number of publications). - * - * @author ernesto - * - */ -public class OAEI2015InstanceProcessing { - - - - public int getPublicationCount(OWLOntology onto, OWLNamedIndividual indiv){ - - OWLObjectProperty author_of = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLObjectProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#author_of")); - - OWLDataProperty publication_count = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLDataProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#publication_count")); - - Set publications = indiv.getObjectPropertyValues(author_of, onto); - Set data_values; - - try { - //They have not been grouped or there are not publications - if (publications.size()>1 || publications.isEmpty()){ - return publications.size(); - } - - for (OWLIndividual pub : publications){ - - data_values = pub.getDataPropertyValues(publication_count, onto); - - for (OWLLiteral value : data_values){ - //if (value.isInteger()){ - return value.parseInteger(); - //} - } - } - return 1; - - } - catch (Exception e){ - LogOutput.printError("Error extracting information about publications."); - return 0; - } - - } - - - public int getNumberOfCitations(OWLOntology onto, OWLNamedIndividual indiv){ - - - OWLObjectProperty author_of = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLObjectProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#author_of")); - - OWLDataProperty citations = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLDataProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#citations")); - - OWLDataProperty sum_of_citations = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLDataProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#sum_of_citations")); - - Set publications = indiv.getObjectPropertyValues(author_of, onto); - Set data_values; - - try { - //There are not publications - if (publications.isEmpty()){ - return 0; - } - - int num_citations = 0; - - for (OWLIndividual pub : publications){ - - //Grouped citations: publications report - data_values = pub.getDataPropertyValues(sum_of_citations, onto); - for (OWLLiteral value : data_values){ - //if (value.isInteger()){ - return value.parseInteger(); - //} - } - - - //We sum num citations in each publication - data_values = pub.getDataPropertyValues(citations, onto); - for (OWLLiteral value : data_values){ - //if (value.isInteger()){ - num_citations += value.parseInteger(); - //} - } - - - - - } - return num_citations; - - } - catch (Exception e){ - LogOutput.printError("Error extracting information about publications."); - return 0; - } - } - - public int getActiveFromYear(OWLOntology onto, OWLNamedIndividual indiv){ - - - OWLObjectProperty author_of = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLObjectProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#author_of")); - - OWLDataProperty active_from = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLDataProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#active_from")); - - OWLDataProperty year = onto.getOWLOntologyManager().getOWLDataFactory(). - getOWLDataProperty(IRI.create("http://islab.di.unimi.it/imoaei2015#year")); - - Set publications = indiv.getObjectPropertyValues(author_of, onto); - Set data_values; - - - int output_year=30000; - - try { - //There are not publications - if (publications.isEmpty()){ - return output_year; - } - - for (OWLIndividual pub : publications){ - - //Grouped citations: publications report - data_values = pub.getDataPropertyValues(active_from, onto); - for (OWLLiteral value : data_values){ - return value.parseInteger(); - } - - - //We sum num citations in each publication - data_values = pub.getDataPropertyValues(year, onto); - for (OWLLiteral value : data_values){ - if (value.parseInteger()> oracle_mappings = new HashMap>(); - - - @Override - public boolean isMappingValid(String uri1, String uri2) { - - return isMappingInLocalOracle(uri1, uri2); - } - - - - /** - * Adds mapping to local oracle - * @param uri1 - * @param uri2 - */ - private static void addMapping2LocalOracle(String uri1, String uri2){ - if (!oracle_mappings.containsKey(uri1)){ - oracle_mappings.put(uri1, new HashSet()); - } - oracle_mappings.get(uri1).add(uri2); - } - - - /** - * Checks if mapping is in local oracle - * @param uri1 - * @param uri2 - * @return - */ - private static boolean isMappingInLocalOracle(String uri1, String uri2){ - if (oracle_mappings.containsKey(uri1)){ - if (oracle_mappings.get(uri1).contains(uri2)){ - return true; - } - } - return false; - } - - - - - public static void loadLocalOraculo(String base_path) { - - try { - int count=0; - String pattern = ".txt"; - - File directory = new File(base_path); - String filenames[] = directory.list(); - - for(int i=0; i mappings = new HashSet(); - - LogOutput.printAlways("Oracle.check(uri1, uri2)"); - mappings.add(new Mapping(uri1, uri2, "=")); - mappings.add(new Mapping(uri1, uri2, "<")); - mappings.add(new Mapping(uri1, uri2, ">")); - - return !Oracle.check(mappings).isEmpty(); - - } - catch (Exception e){ - LogOutput.printAlways("Error asking OAEI Oracle"); - return false; - } - */ - ///Uncomment for OAEI - - } - - /* - * - * @param uri1 - * @param uri2 - * @deprecated - - private boolean isMappingValid1(String uri1, String uri2) { - - - try{ - - //if (Oracle.check(uri1, uri2, Oracle.Relation.EQUIVALENCE)){ - if (Oracle.check(uri1, uri2, "=")){ - LogOutput.printAlways("Oracle.check(uri1, uri2, =)"); - return true; - } - //else if (Oracle.check(uri1, uri2, Oracle.Relation.SUBSUMED_BY)){ - else if (Oracle.check(uri1, uri2, "<")){ - - LogOutput.printAlways("Oracle.check(uri1, uri2, <)"); - return true; - } - //else if (Oracle.check(uri1, uri2, Oracle.Relation.SUBSUMES)){ - else if (Oracle.check(uri1, uri2, ">")){ - - LogOutput.printAlways("Oracle.check(uri1, uri2, =)"); - return true; - } - else { - LogOutput.printAlways("Not in oracle: Oracle.check(uri1, uri2, ?)"); - - return false; - } - //return Oracle.check(uri1, uri2, Oracle.Relation.EQUIVALENCE) || - // Oracle.check(uri1, uri2, Oracle.Relation.SUBSUMED_BY) || - // Oracle.check(uri1, uri2, Oracle.Relation.SUBSUMES); - } - catch (Exception e){ - LogOutput.printAlways("Error asking Oracle"); - return false; - } - ///Uncomment for OAEI - }*/ - - - @Override - public boolean isActive() { - - //This code was not working - /*try { - Class.forName("eu.sealsproject.omt.client.interactive.Oracle"); - // It is available - } - catch (ClassNotFoundException exception) { - // It is not available - }*/ - - //TODO - //Uncomment for OAEI - //return Oracle.isInteractive(); - - //Comment for OAEI - return false; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/OracleManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/OracleManager.java deleted file mode 100644 index 48656fe85f..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/OracleManager.java +++ /dev/null @@ -1,109 +0,0 @@ -package uk.ac.ox.krr.logmap2.oaei.oracle; - - -import uk.ac.ox.krr.logmap2.io.LogOutput; - -/** - * Interface to query an Oracle - * @author Ernesto - * - */ -public class OracleManager { - - - private static int numQuestions = 0; - - //0 we do not know, 1 not, 2 yes, 3 local active - private static final int NOTSET = 0; - private static final int NO = 1; - private static final int YES = 2; - private static final int LOCAL = 3; - private static int status_oraculo = NOTSET; - - private static LocalOracle localOracle = new LocalOracle(); - - private static OAEIOracle oaeiOracle = new OAEIOracle(); - - - public static void allowOracle(boolean allow){ - if (allow) - unsetStatusOraculo(); - else - status_oraculo=NO; - } - - public static void setLocalOracle(boolean active){ - if (active) - status_oraculo=LOCAL; - else - status_oraculo=NO; - } - - public static boolean isActive(){ - - if (status_oraculo==NOTSET){ //We do not know - try{ - - - if (oaeiOracle.isActive()){ - status_oraculo=YES; - return true; - } - else{ - status_oraculo=NO; - return false; //comment for OAEI - } - - } - catch (Exception e){ - //e.printStackTrace(); - LogOutput.printAlways("Error asking Oracle"); - status_oraculo=NO; - return false; - } - //return isActive; - } - //We know already - else if (status_oraculo==NO){ - return false; - } - else if (status_oraculo==YES){ - return true; - } - else { //local oraculo: always true - return localOracle.isActive(); - } - - } - - public static boolean isMappingValid(String uri1, String uri2){ - - if (status_oraculo==LOCAL){ - numQuestions++; - return localOracle.isMappingValid(uri1, uri2); - } - else{ - numQuestions++; - return oaeiOracle.isMappingValid(uri1, uri2); - } - - - - } - - public static int getNumberOfQuestions(){ - return numQuestions; - } - - public static int getStatusOraculo(){ - return status_oraculo; - } - public static void unsetStatusOraculo(){ - numQuestions=0; - status_oraculo=NOTSET; - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/Oraculo.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/Oraculo.java deleted file mode 100644 index feb1148f7d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/oracle/Oraculo.java +++ /dev/null @@ -1,12 +0,0 @@ -package uk.ac.ox.krr.logmap2.oaei.oracle; - -public abstract class Oraculo { - - - public abstract boolean isMappingValid(String uri1, String uri2); - - public abstract boolean isActive(); - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/EmptyReader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/EmptyReader.java deleted file mode 100644 index 5fffa5a7a6..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/EmptyReader.java +++ /dev/null @@ -1,23 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei.reader; - -public class EmptyReader extends MappingsReader { - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/FlatAlignmentReader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/FlatAlignmentReader.java deleted file mode 100644 index 1a80d7264c..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/FlatAlignmentReader.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei.reader; - - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.io.OAEIRDFAlignmentFormat; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * - * Reads mappings of the form: iri1|iri2|relation|confidence|type - * - * - * @author Ernesto Jimenez Ruiz - * - */ -public class FlatAlignmentReader extends MappingsReader { - - - public FlatAlignmentReader(String text_alignment_file) throws Exception{ - - ReadFile reader = new ReadFile(text_alignment_file); - - String line; - String[] elements; - - line=reader.readLine(); - - int dir; - - int type; - - while (line!=null) { - - try { - if (line.startsWith("#") || (line.indexOf("|")<0 && line.indexOf(",")<0 && line.indexOf("\t")<0)){ - line=reader.readLine(); - continue; - } - - if (line.indexOf("|")>0) - elements=line.split("\\|"); - else if (line.indexOf(",")>0) - elements=line.split("\\,"); - else - elements=line.split("\\t"); - - /*if (elements.length<4){ - line=reader.readLine(); - continue; - }*/ - - - if (elements.length==2) { - //System.out.println(elements[0] + "--" + elements[1]); - mappings.add(new MappingObjectStr(elements[0], elements[1], 1.0, Utilities.EQ)); - } - else { - if (elements[2].equals(">")){ - dir = Utilities.R2L; - } - else if (elements[2].equals("<")){ - dir = Utilities.L2R; - } - else { - dir = Utilities.EQ; - } - - if (elements.length==4){ - mappings.add(new MappingObjectStr(elements[0], elements[1], Double.valueOf(elements[3]), dir)); - } - else if (elements.length==5){ - - if (elements[4].equals(Utilities.CLASSES_STR)){ - type = Utilities.CLASSES; - } - else if (elements[4].equals(Utilities.DATAPROPERTIES_STR)){ - type = Utilities.DATAPROPERTIES; - } - else if (elements[4].equals(Utilities.OBJECTPROPERTIES_STR)){ - type = Utilities.OBJECTPROPERTIES; - } - else if (elements[4].equals(Utilities.INSTANCES_STR)){ - type = Utilities.INSTANCES; - } - else { - type = Utilities.UNKNOWN; - } - - mappings.add(new MappingObjectStr(elements[0], elements[1], Double.valueOf(elements[3]), dir, type)); - } - } - - - - line=reader.readLine(); - - } - catch (Exception e){ - System.err.println("Error reading TXT mappings file. Line: " + line + ".\n" + e.getMessage()); - line=reader.readLine(); //we keep reading... - } - - } - - reader.closeBuffer(); - - LogOutput.print("Read TXT mapping objects: " + getMappingObjectsSize()); - - - } - - - - public static void main(String[] args) { - - //String mappings_path = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/Mappings_Tools_2012/"; - - String mappings_path = "/home/ejimenez-ruiz/Documents/OAEI_2018/Tracks/KER-game-im/v2/"; - - - - try{ - FlatAlignmentReader reader = new FlatAlignmentReader(mappings_path + "alignment.csv"); - - - OAEIRDFAlignmentFormat writer = new OAEIRDFAlignmentFormat(mappings_path + "alignment.rdf", "http://islab.di.unimi.it/content/gamesonto", "http://islab.di.unimi.it/content/gamesonto"); - - for (MappingObjectStr mapping : reader.getMappingObjects()) { - writer.addInstanceMapping2Output(mapping.getIRIStrEnt1(), mapping.getIRIStrEnt2(), mapping.getConfidence()); - } - - writer.saveOutputFile(); - - } - catch (Exception e){ - e.printStackTrace(); - } - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReader.java deleted file mode 100644 index 3b98518699..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReader.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei.reader; - -import java.util.HashSet; -import java.util.Set; - -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; - -/** - * - * Abstracts class for mapping readers - * - * @author Ernesto Jimenez Ruiz - * - */ -public abstract class MappingsReader { - - public static final String ENTITY1 = "entity1"; - public static final String ENTITY2 = "entity2"; - public static final String RELATION = "relation"; - public static final String MEASURE = "measure"; - - protected Set mappings = new HashSet(); - - - - public Set getMappingObjects(){ - return mappings; - } - - public int getMappingObjectsSize(){ - return mappings.size(); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReaderManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReaderManager.java deleted file mode 100644 index 47a5bb29d2..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/MappingsReaderManager.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei.reader; - -import java.util.Set; - -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; - - - -/** - * Manages the reading of the input mappings in TXT, RDF or OWL - * @author Ernesto - * - */ -public class MappingsReaderManager { - - - public static final String OWLFormat="OWL"; - public static final String OAEIFormat="RDF"; - public static final String FlatFormat="TXT"; - - MappingsReader mappingsReader; - - public MappingsReaderManager(String file_mappings, String format){ - - try{ - - if (format.equals(OWLFormat)){ - mappingsReader = new OWLAlignmentReader(file_mappings); - } - else if (format.equals(OAEIFormat)){ - mappingsReader = new RDFAlignReader(file_mappings); - } - else if (format.equals(FlatFormat)){ - mappingsReader = new FlatAlignmentReader(file_mappings); - } - else { - System.err.println("The given format ('" + format + "') is not currently supported. Accepted: 'OWL', 'RDF' and 'TXT'"); - mappingsReader = new EmptyReader(); - } - } - catch (Exception e){ - System.err.println("Error reading mappings file: " + format + "\n" + e.getMessage()); - e.printStackTrace(); - mappingsReader = new EmptyReader(); - } - - } - - - - public Set getMappingObjects(){ - return mappingsReader.getMappingObjects(); - } - - public int getMappingObjectsSize(){ - return mappingsReader.getMappingObjectsSize(); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLAlignmentReader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLAlignmentReader.java deleted file mode 100644 index a42508692c..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLAlignmentReader.java +++ /dev/null @@ -1,337 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei.reader; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLAnnotation; -import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLSameIndividualAxiom; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLAnnotationValueVisitor; -import org.semanticweb.owlapi.model.OWLAnonymousIndividual; -import org.semanticweb.owlapi.model.OWLLiteral; - - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -/** - * Reads mappings from OWL ontology. Annotation properties are inside axioms - * @author root - * - */ -public class OWLAlignmentReader extends MappingsReader { - - - OWLMappingAxiomVisitor4Reader owlMappingAxiomVisitor = new OWLMappingAxiomVisitor4Reader(); - ValueVisitor valueVisitor = new ValueVisitor(); - - - public OWLAlignmentReader(String owl_alignment_file) throws Exception{ - - //try{ - OWLOntology onto_mappings = loadOntology(owl_alignment_file); - - for (OWLAxiom ax : onto_mappings.getAxioms()){ - - //System.out.println(ax); - - owlMappingAxiomVisitor.reInitValues(); - - ax.accept(owlMappingAxiomVisitor); - - /*System.out.println(owlMappingAxiomVisitor.getIRIEntity1() + "\n" + - owlMappingAxiomVisitor.getIRIEntity2() + "\n" + - owlMappingAxiomVisitor.getMeasure() + "\n" + - owlMappingAxiomVisitor.getRelation() + "\n" + - owlMappingAxiomVisitor.getTypeMapping()); - */ - - if (owlMappingAxiomVisitor.getIRIEntity1()==null || owlMappingAxiomVisitor.getIRIEntity2()==null - || owlMappingAxiomVisitor.getIRIEntity1().equals("") || owlMappingAxiomVisitor.getIRIEntity2().equals("")) - continue; //no good axioms - - - //Add for all axioms? I think so... - mappings.add(new MappingObjectStr( - owlMappingAxiomVisitor.getIRIEntity1(), - owlMappingAxiomVisitor.getIRIEntity2(), - owlMappingAxiomVisitor.getMeasure(), - owlMappingAxiomVisitor.getRelation(), - owlMappingAxiomVisitor.getTypeMapping())); - } - - LogOutput.print("Read OWL mapping objects: " + getMappingObjectsSize()); - - //} - //catch (Exception e){ - // System.err.println("Error reading OWL mappings file: " + e.getMessage()); - //} - - } - - - private OWLOntology loadOntology(String uri) throws Exception{ - System.out.println("Loading ontology " + uri); - return loadOntology(IRI.create(uri)); - } - - private OWLOntology loadOntology(IRI uri) throws Exception{ - OWLOntologyManager ontologyManager=OWLManager.createOWLOntologyManager(); - return ontologyManager.loadOntology(uri); - - } - - - - - public static void main(String[] args) { - - String mappings_path = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/Mappings_Tools_2012/"; - - - try{ - new OWLAlignmentReader(mappings_path + "logmap_small_fma2nci_new.owl"); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - - - - - /** - * - * Mapping axiom visitor that extracts the annotations attached to each axioms. - * - * @author Ernesto - * - */ - public class OWLMappingAxiomVisitor4Reader extends OWLMappingAxiomVisitor { - - private String iri1; - private String iri2; - private int relation; - private int type; - private double measure; - - public String getIRIEntity1(){ - return iri1; - } - public String getIRIEntity2(){ - return iri2; - } - public int getRelation(){ - return relation; - } - public int getTypeMapping(){ - return type; - } - - public double getMeasure(){ - return measure; - } - - public void setMeasure(double conf){ - measure=conf; - } - - public void setRelation(int rel){ - relation=rel; - } - - - private void reInitValues(){ - iri1=""; - iri2=""; - type = Utilities.CLASSES; - relation = Utilities.EQ; - } - - - - private void treatAnnotation(OWLAnnotation ann){ - - String property = ann.getProperty().getIRI().toString().toLowerCase(); - - if (property.contains(MappingsReader.ENTITY1)){ - ann.getValue().accept(valueVisitor); - iri1 = valueVisitor.getStringLiteral(); - } - else if (property.contains(MappingsReader.ENTITY2)){ - ann.getValue().accept(valueVisitor); - iri2 = valueVisitor.getStringLiteral(); - } - else if (property.contains(MappingsReader.MEASURE)){ - ann.getValue().accept(valueVisitor); //It also sets value - } - else if (property.contains(MappingsReader.RELATION)){ - ann.getValue().accept(valueVisitor); //It also sets value - } - - - } - - - //Unique axioms used in current OWL mappings - public void visit(OWLSubClassOfAxiom ax){ - type = Utilities.CLASSES; - - //System.out.println(ax); - - for (OWLAnnotation ann : ax.getAnnotations()){ - - treatAnnotation(ann); - - } - - - } - public void visit(OWLEquivalentClassesAxiom ax){ - - relation = Utilities.EQ; - type = Utilities.CLASSES; - - //if (ax.toString().contains("Vocal_fold")){ - //System.out.println(ax); - - for (OWLAnnotation ann : ax.getAnnotations()){ - - treatAnnotation(ann); - - } - - //} - - } - - public void visit(OWLEquivalentObjectPropertiesAxiom ax){ - - relation = Utilities.EQ; - type = Utilities.OBJECTPROPERTIES; - - for (OWLAnnotation ann : ax.getAnnotations()){ - treatAnnotation(ann); - } - - } - public void visit(OWLSubObjectPropertyOfAxiom ax){ - - type = Utilities.OBJECTPROPERTIES; - - for (OWLAnnotation ann : ax.getAnnotations()){ - treatAnnotation(ann); - } - - } - - - public void visit(OWLEquivalentDataPropertiesAxiom ax){ - - relation = Utilities.EQ; - type = Utilities.DATAPROPERTIES; - - for (OWLAnnotation ann : ax.getAnnotations()){ - treatAnnotation(ann); - } - - } - public void visit(OWLSubDataPropertyOfAxiom ax){ - type = Utilities.DATAPROPERTIES; - - for (OWLAnnotation ann : ax.getAnnotations()){ - treatAnnotation(ann); - } - } - - - public void visit(OWLSameIndividualAxiom ax){ - - relation = Utilities.EQ; - type = Utilities.INSTANCES; - - for (OWLAnnotation ann : ax.getAnnotations()){ - treatAnnotation(ann); - } - - } - - } - - - - public class ValueVisitor implements OWLAnnotationValueVisitor{ - - String literal_str; - - public void visit(OWLLiteral literal){ - - literal_str = literal.getLiteral(); - - if (literal.isDouble()){ - owlMappingAxiomVisitor.setMeasure(literal.parseDouble()); - } - else { - if (literal_str.equals("=")){ - owlMappingAxiomVisitor.setRelation(Utilities.EQ); - } - else if (literal_str.equals(">")){ - owlMappingAxiomVisitor.setRelation(Utilities.R2L); - } - else if (literal_str.equals("<")){ - owlMappingAxiomVisitor.setRelation(Utilities.L2R); - } - - - } - - } - - public String getStringLiteral(){ - return literal_str; - } - - public void visit(IRI iri){ - //Do nothing - } - - public void visit(OWLAnonymousIndividual individual){ - //Do nothing - } - - - - } - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLMappingAxiomVisitor.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLMappingAxiomVisitor.java deleted file mode 100644 index 86bfb8e495..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/OWLMappingAxiomVisitor.java +++ /dev/null @@ -1,226 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei.reader; - -import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; -import org.semanticweb.owlapi.model.OWLAnnotationPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLAnnotationPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLAxiomVisitor; -import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLDatatypeDefinitionAxiom; -import org.semanticweb.owlapi.model.OWLDeclarationAxiom; -import org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom; -import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointUnionAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; -import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLHasKeyAxiom; -import org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLReflexiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLSameIndividualAxiom; -import org.semanticweb.owlapi.model.OWLSubAnnotationPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom; -import org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.SWRLRule; - -public abstract class OWLMappingAxiomVisitor implements OWLAxiomVisitor { - - - //Unique axioms used in current OWL mappings - public abstract void visit(OWLSubClassOfAxiom arg0); - public abstract void visit(OWLEquivalentClassesAxiom arg0); - public abstract void visit(OWLEquivalentObjectPropertiesAxiom arg0); - public abstract void visit(OWLSubObjectPropertyOfAxiom arg0); - public abstract void visit(OWLEquivalentDataPropertiesAxiom arg0); - public abstract void visit(OWLSubDataPropertyOfAxiom arg0); - public abstract void visit(OWLSameIndividualAxiom arg0); - - - - - - public void visit(OWLAnnotationAssertionAxiom arg0) { - - } - - public void visit(OWLSubAnnotationPropertyOfAxiom arg0) { - - } - - public void visit(OWLAnnotationPropertyDomainAxiom arg0) { - - } - - public void visit(OWLAnnotationPropertyRangeAxiom arg0) { - - } - - public void visit(OWLDeclarationAxiom arg0) { - - } - - - public void visit(OWLNegativeObjectPropertyAssertionAxiom arg0) { - - } - - public void visit(OWLAsymmetricObjectPropertyAxiom arg0) { - - } - - public void visit(OWLReflexiveObjectPropertyAxiom arg0) { - - } - - - public void visit(OWLDisjointClassesAxiom arg0) { - - } - - public void visit(OWLDataPropertyDomainAxiom arg0) { - - } - - - public void visit(OWLObjectPropertyDomainAxiom arg0) { - - } - - - public void visit(OWLNegativeDataPropertyAssertionAxiom arg0) { - - } - - - public void visit(OWLDifferentIndividualsAxiom arg0) { - - } - - public void visit(OWLDisjointDataPropertiesAxiom arg0) { - - } - - public void visit(OWLDisjointObjectPropertiesAxiom arg0) { - - } - - public void visit(OWLObjectPropertyRangeAxiom arg0) { - - } - - public void visit(OWLObjectPropertyAssertionAxiom arg0) { - - } - - public void visit(OWLFunctionalObjectPropertyAxiom arg0) { - - } - - - - public void visit(OWLDisjointUnionAxiom arg0) { - - } - - public void visit(OWLSymmetricObjectPropertyAxiom arg0) { - - } - - - public void visit(OWLDataPropertyRangeAxiom arg0) { - - } - - public void visit(OWLFunctionalDataPropertyAxiom arg0) { - - } - - - - public void visit(OWLClassAssertionAxiom arg0) { - - } - - public void visit(OWLDataPropertyAssertionAxiom arg0) { - - } - - - public void visit(OWLTransitiveObjectPropertyAxiom arg0) { - - } - - public void visit(OWLIrreflexiveObjectPropertyAxiom arg0) { - - } - - - public void visit(OWLInverseFunctionalObjectPropertyAxiom arg0) { - - } - - - - - - public void visit(OWLSubPropertyChainOfAxiom arg0) { - - } - - - public void visit(OWLInverseObjectPropertiesAxiom arg0) { - - } - - - public void visit(OWLHasKeyAxiom arg0) { - - } - - - public void visit(OWLDatatypeDefinitionAxiom arg0) { - - } - - - public void visit(SWRLRule arg0) { - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/RDFAlignReader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/RDFAlignReader.java deleted file mode 100644 index 2cf148bce2..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/oaei/reader/RDFAlignReader.java +++ /dev/null @@ -1,193 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.oaei.reader; - -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.net.URL; - -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamConstants; -import javax.xml.stream.XMLStreamReader; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - - -/** - * This class transforms a RDF alignment (XML) file in a set of - * MappingObjectStr objects. - * - * @author Ernesto - * - */ -public class RDFAlignReader extends MappingsReader { - - public static final String CELL = "Cell"; - /*public static final String ENTITY1 = "entity1"; - public static final String ENTITY2 = "entity2"; - public static final String RELATION = "relation"; - public static final String MEASURE = "measure";*/ - - //Used in old gold standards - private static final String ALIGNMENTENTITY1="alignmententity1"; - private static final String ALIGNMENTENTITY2 ="alignmententity2"; - - private static final String ALIGNMENTRELATION="alignmentrelation"; - private static final String ALIGNMENTMEASURE="alignmentmeasure"; - - - - - - public RDFAlignReader(URL url_rdf_alignment_file) throws Exception { - this(url_rdf_alignment_file.openStream()); - - } - - public RDFAlignReader(String rdf_alignment_file) throws Exception { - this(new FileInputStream(new File(rdf_alignment_file))); - } - - - public RDFAlignReader(InputStream is) throws Exception { - - //File xmlFile = new File(rdf_alignment_file); - //InputStream is = new FileInputStream(xmlFile); - - XMLInputFactory factory = XMLInputFactory.newInstance(); - XMLStreamReader reader = factory.createXMLStreamReader(is); - - mappings.clear(); - - String iri_str1=""; - String iri_str2=""; - String relation=""; - double confidence=0.0; - int dir_relation; - - //int next=0; - while(reader.hasNext()) - { - if(reader.getEventType()==XMLStreamConstants.START_ELEMENT){ - - //System.out.println(next++); - - if (reader.hasName()){ - - if (reader.getLocalName().equals(RDFAlignReader.CELL)){ - iri_str1=""; - iri_str2=""; - relation=""; - confidence=0.0; - } - else if (reader.getLocalName().equals(RDFAlignReader.ENTITY1) || - reader.getLocalName().equals(RDFAlignReader.ALIGNMENTENTITY1)){ - - if (reader.getAttributeCount()>0){ - //System.out.println("Att: " + reader.getAttributeValue(0)); - iri_str1 = reader.getAttributeValue(0); - } - - } - - else if (reader.getLocalName().equals(RDFAlignReader.ENTITY2) || - reader.getLocalName().equals(RDFAlignReader.ALIGNMENTENTITY2)){ - - if (reader.getAttributeCount()>0){ - //System.out.println("Att: " + reader.getAttributeValue(0)); - iri_str2 = reader.getAttributeValue(0); - } - - } - - else if (reader.getLocalName().equals(RDFAlignReader.RELATION) || - reader.getLocalName().equals(RDFAlignReader.ALIGNMENTRELATION)){ - - //System.out.println("TExt: " + reader.getElementText()); - relation = reader.getElementText(); - - } - - else if (reader.getLocalName().equals(RDFAlignReader.MEASURE) || - reader.getLocalName().equals(RDFAlignReader.ALIGNMENTMEASURE)){ - - //System.out.println("TExt: " + reader.getElementText()); - confidence = Double.valueOf(reader.getElementText()); - - } - - } - - - } - else if(reader.getEventType()==XMLStreamConstants.END_ELEMENT){ - - if (reader.hasName()){ - - if (reader.getLocalName().equals(RDFAlignReader.CELL)){ - - /*System.out.println(next++); - System.out.println(iri_str1); - System.out.println(iri_str2); - System.out.println(relation); - System.out.println(confidence);*/ - - - if (relation.equals(">")){ - dir_relation = Utilities.R2L; - //System.out.println("R2L"); - } - else if (relation.equals("<")){ - dir_relation = Utilities.L2R; - //System.out.println("L2R"); - } - else if (relation.equals("?")){ - dir_relation = Utilities.Flagged; - //System.out.println("L2R"); - } - else { //Any other case: ie Hertuda/Hotmatch does not use "=" - dir_relation = Utilities.EQ; - //System.out.println("="); - } - - mappings.add(new MappingObjectStr(iri_str1, iri_str2, confidence, dir_relation)); - - } - } - - //Add to object if everything is ok! - - } - - - - reader.next(); - }//end while - - LogOutput.print("Read RDF Align mapping objects: " + getMappingObjectsSize()); - - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/LexicalOverlappingExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/LexicalOverlappingExtractor.java deleted file mode 100644 index d5f95a3137..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/LexicalOverlappingExtractor.java +++ /dev/null @@ -1,453 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.overlapping; - -import java.util.Calendar; - - -import java.util.HashSet; -import java.util.Set; - -import org.semanticweb.owlapi.apibinding.OWLManager; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.apibinding.OWLManager; - -import uk.ac.ox.krr.logmap2.OntologyLoader; -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.ReadFile; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.statistics.StatisticsTimeMappings; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -//import uk.ac.manchester.syntactic_locality.*; -import uk.ac.manchester.syntactic_locality.OntologyModuleExtractor; - -/** - * Extracts the overlapping given two ontologies. The output will two ontology modules representing an overstimation of the overlapping - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 6, 2011 - * - */ -public class LexicalOverlappingExtractor extends OverlappingExtractor{ - - - long init, fin; - - private String iri_str1; - private String iri_str2; - private OWLOntology onto1; - private OWLOntology onto2; - - Set entities1 = new HashSet(); - Set entities2 = new HashSet(); - - - private long size_onto1; - private long size_onto2; - - boolean full_overlapping; - - - - //I_Sub isub = new I_Sub(); - - private LexicalUtilities lexicalUtilities; - - - /** - * Default constructor - */ - public LexicalOverlappingExtractor(LexicalUtilities lexicalUtilities, boolean full_overlapping){ - - this.lexicalUtilities=lexicalUtilities; - this.full_overlapping = full_overlapping; - - } - - /** - * Default constructor - */ - public LexicalOverlappingExtractor(LexicalUtilities lexicalUtilities){ - - this(lexicalUtilities, false); - - - } - - - public long getSizeClassesOnto1(){ - return size_onto1; - } - - - public long getSizeClassesOnto2(){ - return size_onto2; - } - - - - - - - - public void createOverlapping(String iri_str1, String iri_str2) throws OWLOntologyCreationException, Exception{ - this.iri_str1 = iri_str1; - this.iri_str2 = iri_str2; - - createOverlapping(true); - - } - - public void createOverlapping(OWLOntology onto1, OWLOntology onto2) throws OWLOntologyCreationException, Exception{ - this.onto1 = onto1; - this.onto2 = onto2; - - createOverlapping(false); - - } - - - private void createOverlapping(boolean fromIRIs) throws OWLOntologyCreationException, Exception{ - - OntologyLoader onto_loader1; - OntologyLoader onto_loader2; - - boolean is_overlapping_onto1=true; - boolean is_overlapping_onto2=true; - - double loading_time = 0.0; - double overlapping_time = 0.0; - - - - //try{ - - //Loading Ontology 1 and Light processing - init = Calendar.getInstance().getTimeInMillis(); - if (fromIRIs) - onto_loader1 = new OntologyLoader(iri_str1); - else - onto_loader1 = new OntologyLoader(onto1); - - - size_onto1 = onto_loader1.getClassesInSignatureSize(); - - if (onto_loader1.getSignatureSize()> if_weak_intersect; - - //We perform intersection an we only keep in inverted file the intersected elements - if_weak_intersect = overlapping1.getWeakInvertedFile().keySet(); - if_weak_intersect.retainAll(overlapping2.getWeakInvertedFile().keySet()); - overlapping2.getWeakInvertedFile().keySet().retainAll(if_weak_intersect); - - LogOutput.print("\tSize IF intersected: " + if_weak_intersect.size()); - - overlapping_time = StatisticsTimeMappings.getRunningTime(init); - StatisticsTimeMappings.addOverlapping_time(overlapping_time); - LogOutput.print("\tTime intersecting IF weak (s): " + overlapping_time); - - - - //Get entities 4 modules-overlapping - init = Calendar.getInstance().getTimeInMillis(); - - - - /*double ambiguity1=0.0; - double ambiguity2=0.0; - - for (Set str_set: if_weak_intersect){ - - ambiguity1 += overlapping1.getWeakInvertedFile().get(str_set).size(); - ambiguity2 += overlapping2.getWeakInvertedFile().get(str_set).size(); - - } - - ambiguity1 = ambiguity1 / (double)if_weak_intersect.size(); - ambiguity2 = ambiguity2 / (double)if_weak_intersect.size(); - - LogOutput.print("Ambiguity average 1: " + ambiguity1); - LogOutput.print("Ambiguity average 2: " + ambiguity2);*/ - - //double minscore; - - for (Set str_set: if_weak_intersect){ - - //minscore = 0.70; - - //Ambiguity - //if (overlapping1.getWeakInvertedFile().get(str_set).size()>ambiguity1 && - // overlapping2.getWeakInvertedFile().get(str_set).size()>ambiguity2){ - // minscore = 0; - //} - - for (int ide1 : overlapping1.getWeakInvertedFile().get(str_set)){ - entities1.add(overlapping1.getClass4identifier(ide1)); - } - for (int ide2 : overlapping2.getWeakInvertedFile().get(str_set)){ - entities2.add(overlapping2.getClass4identifier(ide2)); - } - - /*for (int ide1 : overlapping1.getWeakInvertedFile().get(str_set)){ - - for (int ide2 : overlapping2.getWeakInvertedFile().get(str_set)){ - - if (isub.score(overlapping1.getLabel4identifier(ide1), overlapping2.getLabel4identifier(ide2)) > minscore){ - entities1.add(overlapping1.getClass4identifier(ide1)); - entities2.add(overlapping2.getClass4identifier(ide2)); - continue; - } - } - } - - for (int ide2 : overlapping2.getWeakInvertedFile().get(str_set)){ - - if (entities2.contains(overlapping2.getClass4identifier(ide2)))//Already in - continue; - - for (int ide1 : overlapping1.getWeakInvertedFile().get(str_set)){ - - if (isub.score(overlapping1.getLabel4identifier(ide1), overlapping2.getLabel4identifier(ide2)) > minscore){ - entities1.add(overlapping1.getClass4identifier(ide1)); - entities2.add(overlapping2.getClass4identifier(ide2)); - continue; - } - } - }*/ - - } - - LogOutput.print("\tSize entities 1: " + entities1.size()); - LogOutput.print("\tSize entities 2: " + entities2.size()); - - - //We empty overlapping structures - overlapping1.clearStructures(); - overlapping2.clearStructures(); - - overlapping_time = StatisticsTimeMappings.getRunningTime(init); - StatisticsTimeMappings.addOverlapping_time(overlapping_time); - LogOutput.print("\tTime extracting entities4modules (s): " + overlapping_time); - - - - //Extract module (create new constructor) - //Give onto IRI to module - init = Calendar.getInstance().getTimeInMillis(); - - if (is_overlapping_onto1){ - - //Old extractor - //ModuleExtractor module_extractor1 = new ModuleExtractor( - // onto_loader1.getAxiomSet(), SynchronizedOWLManager.createOWLOntologyManager(), false, false, true, true, false); - //module1 = module_extractor1.getLocalityModuleForSignatureGroup(entities1, onto_loader1.getOntologyIRIStr(), false); - - OntologyModuleExtractor module_extractor1 = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - onto_loader1.getAxiomSet(), - true, - false, - true); - module1 = module_extractor1.extractAsOntology( - entities1, - IRI.create(onto_loader1.getOntologyIRIStr())); - - - //if (store){ - //module_extractor1.saveExtractedModule(iri_str1_out); - //module_extractor1.saveExtractedModule( - // SynchronizedOWLManager.createOWLOntologyManager(), - // module1, - // iri_str1_out); - //} - - module_extractor1.clearStrutures(); - - onto_loader1.clearAxiomSet(); - } - else { - module1 = onto_loader1.getOWLOntology(); - } - - - entities1.clear(); //TODO Are we returning which entities have a weak anchor?? - - - if (is_overlapping_onto2){ - - //ModuleExtractor module_extractor2 = new ModuleExtractor( - // onto_loader2.getAxiomSet(), SynchronizedOWLManager.createOWLOntologyManager(), false, false, true, true, false); - //module2 = module_extractor2.getLocalityModuleForSignatureGroup(entities2, onto_loader2.getOntologyIRIStr(), false); - - OntologyModuleExtractor module_extractor2 = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - onto_loader2.getAxiomSet(), - true, - false, - true); - module2 = module_extractor2.extractAsOntology( - entities2, - IRI.create(onto_loader2.getOntologyIRIStr())); - - - //if (store){ - // //module_extractor2.saveExtractedModule(iri_str2_out); - // module_extractor2.saveExtractedModule( - // SynchronizedOWLManager.createOWLOntologyManager(), - // module2, - // iri_str2_out); - //} - - module_extractor2.clearStrutures(); - - onto_loader2.clearAxiomSet(); - } - - else { - module2 = onto_loader2.getOWLOntology(); - } - - entities2.clear(); //TODO Are we returning which entities have a weak anchor?? - - overlapping_time = StatisticsTimeMappings.getRunningTime(init); - StatisticsTimeMappings.addOverlapping_time(overlapping_time); - - LogOutput.print("\tSize module 1: " + module1.getAxiomCount()); - LogOutput.print("\tSize module 2: " + module2.getAxiomCount()); - LogOutput.print("\tSize classes module 1: " + module1.getClassesInSignature().size() + " " + onto_loader1.getClassesInSignatureSize()); - LogOutput.print("\tSize classes module 2: " + module2.getClassesInSignature().size() + " " + onto_loader2.getClassesInSignatureSize()); - LogOutput.print("\tTime extracting modules (s): " + overlapping_time); - - - - - - - } - - - - - - - @Override - public Set getBaseOverlappedEntities1() { - return entities1; - } - - - - - @Override - public Set getBaseOverlappedEntities2() { - return entities2; - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/NoOverlappingExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/NoOverlappingExtractor.java deleted file mode 100644 index 04be9d2495..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/NoOverlappingExtractor.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.overlapping; - -import java.util.Calendar; -import java.util.Set; - -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; - -import uk.ac.ox.krr.logmap2.OntologyLoader; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.statistics.StatisticsTimeMappings; - -/** - * This class will be used is no ovelapping is extracted. That is, the original ontologies are returned - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 7, 2011 - * - */ -public class NoOverlappingExtractor extends OverlappingExtractor { - - long init; - - - - public void createOverlapping( - OWLOntology onto1, - OWLOntology onto2) { - - - module1=onto1; - module2=onto2; - - } - - - public void createOverlapping(String iri_str1, String iri_str2) throws OWLOntologyCreationException{ - - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - OntologyLoader onto_loader1 = new OntologyLoader(iri_str1); - LogOutput.print("Time loading ontology 1 (s): " + StatisticsTimeMappings.getRunningTime(init)); - StatisticsTimeMappings.addParsing_time(StatisticsTimeMappings.getRunningTime(init)); - - - init = StatisticsTimeMappings.getCurrentTimeInMillis(); - OntologyLoader onto_loader2 = new OntologyLoader(iri_str2); - LogOutput.print("Time loading ontology 2 (s): " + StatisticsTimeMappings.getRunningTime(init)); - StatisticsTimeMappings.addParsing_time(StatisticsTimeMappings.getRunningTime(init)); - - - module1=onto_loader1.getOWLOntology(); - module2=onto_loader2.getOWLOntology(); - - } - - - - - @Override - public Set getBaseOverlappedEntities1() { - return module1.getSignature(); - } - - - - - @Override - public Set getBaseOverlappedEntities2() { - return module2.getSignature(); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OntologyProcessing4Overlapping.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OntologyProcessing4Overlapping.java deleted file mode 100644 index b203e2724a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OntologyProcessing4Overlapping.java +++ /dev/null @@ -1,639 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.overlapping; - -import java.util.ArrayList; - - - -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLOntology; - -import uk.ac.ox.krr.logmap2.lexicon.LexicalUtilities; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap2.utilities.PrecomputeIndexCombination; -import uk.ac.ox.krr.logmap2.indexing.ExtractStringFromAnnotationAssertionAxiom; -import uk.ac.ox.krr.logmap2.io.LogOutput; - -/** - * This class will process the class labels and create weak inverted files. - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 7, 2011 - * - */ -public class OntologyProcessing4Overlapping { - - /** Inverted file for weak correspondences */ - protected Map, Set> invertedFileWeakLabels = new HashMap, Set>(); - //protected Map, Set> invertedFileWeakLabelsL2 = new HashMap, Set>(); - //protected Map, Set> invertedFileWeakLabelsL3 = new HashMap, Set>(); - - /** List of OWLClasses. Each position represents index*/ - //List listofOWLClass = new ArrayList(); - Map identifier2class = new HashMap(); - - - Map class2identifier = new HashMap(); - - - //List> listofClassLabels = new ArrayList>(); //clean class labels (list-set) - - private Map>> identifier2stemmedlabels = new HashMap>>(); - - //Map ident2label = new HashMap(); //clean class str labels - - - protected String rdf_label_uri = "http://www.w3.org/2000/01/rdf-schema#label"; - protected String synonym_iri ="http://oaei.ontologymatching.org/annotations#synonym"; - - OWLOntology onto; - - - int max_size_labels=7; //6 - int max_size_words_missing=2; //2 - - private PrecomputeIndexCombination precomputeIndexCombination = new PrecomputeIndexCombination(); - - private LexicalUtilities lexicalUtilities; - - private boolean full_overlapping; - private boolean use_class2identifier_index; - - private ExtractStringFromAnnotationAssertionAxiom annotationExtractor = new ExtractStringFromAnnotationAssertionAxiom(); - - - protected int ident=0; - - public OntologyProcessing4Overlapping(OWLOntology ont, LexicalUtilities lexicalUtilities, boolean full_overlapping, boolean use_class2identifier_index){ - this(ont, lexicalUtilities, full_overlapping, use_class2identifier_index, 0); - - } - - public OntologyProcessing4Overlapping(OWLOntology ont, LexicalUtilities lexicalUtilities, boolean full_overlapping, boolean use_class2identifier_index, int init_index){ - - onto=ont; - - this.lexicalUtilities=lexicalUtilities; - this.full_overlapping=full_overlapping; - this.use_class2identifier_index=use_class2identifier_index; - - - this.ident = init_index; - - - //We precompute indexes - //precomputeIndexCombination.clearCombinations(); //Old calls - precomputeIndexCombination.preComputeIdentifierCombination(); - - - } - - - public void clearOntoloy(){ - onto=null; - } - - - - public int getLastidentifier(){ - return ident; - } - - - - /** - * This methdos will also associate an index to each class - */ - public void processOntologyClassLabels(){ - - Set words=new HashSet(); - Set stemmed_words=new HashSet(); - - //int ident=0; - - - //CLASSES - //First we give a identifier to each class - for (OWLClass cls : onto.getClassesInSignature()){ - - if (!cls.isTopEntity() && !cls.isBottomEntity()){ - - //listofOWLClass.add(cls); - identifier2class.put(ident,cls); - - if (use_class2identifier_index) - class2identifier.put(cls, ident); - - //Extract labels - //listofClassLabels.add(extractCleanLabel4OWLCls(cls)); - - //We add labels to IF (exact and stemmed) - - //Fill words @depresecated - //words.addAll(extractCleanLabel4OWLCls(cls)); - - identifier2stemmedlabels.put(ident, new HashSet>()); - - - //We extract a fix number of labels... not all to be faster - //2-3 is already good extracting an overlapping with 98\% of recall - for (String label : extractLabels4OWLCls(cls)){ - - words.addAll(cleanLabel(label)); - - //words=clean labels - - if (words.size()>0){ - - if (!invertedFileWeakLabels.containsKey(words)) - invertedFileWeakLabels.put(new HashSet(words), new HashSet()); - - invertedFileWeakLabels.get(words).add(ident); - } - - - //Fill stemming - for (String str : words){ - stemmed_words.add(lexicalUtilities.getStemming4Word(str)); - } - - if (stemmed_words.size()>0){ - - if (!invertedFileWeakLabels.containsKey(stemmed_words)) - invertedFileWeakLabels.put(new HashSet(stemmed_words), new HashSet()); - - invertedFileWeakLabels.get(stemmed_words).add(ident); - } - - //listofClassLabels.add(ident, new ArrayList(stemmed_words)); - identifier2stemmedlabels.get(ident).add(new ArrayList(stemmed_words)); - - //init - words.clear(); - stemmed_words.clear(); - - }//for labels - - ident++; - - }//if top-bottom - - }//for classes - - LogOutput.print("\t\tClasses index: " + identifier2class.keySet().size());//listofOWLClass.size()); - //LogOutput.print("\t\tClasses labels: " + listofClassLabels.size()); - LogOutput.print("\t\tClasses labels: " + identifier2stemmedlabels.size());//counts only one - - - } - - - - public void setInvertedFile4Overlapping(){ - - //Done while processing lavels - //setInvertedFileExactLabels(); - //setInvertedFileStemmedLabels(); - - setInvertedFileWeakLabels(); - - //listofClassLabels.clear(); //Not necessary anymore - identifier2stemmedlabels.clear(); - - - LogOutput.print("\t\tSize inverted file: " + invertedFileWeakLabels.size()); - - } - - - public Map, Set> getWeakInvertedFile(){ - return invertedFileWeakLabels; - } - - - public OWLClass getClass4identifier(int ident){ - //return listofOWLClass.get(ident); - return identifier2class.get(ident); - } - - public int getIdentifier4Class(OWLClass cls){ - if (class2identifier.containsKey(cls)) - return class2identifier.get(cls); - return -1; - } - - /*public String getLabel4identifier(int ident){ - - if (ident2label.containsKey(ident)) - return ident2label.get(ident); - - - String label=""; - - for (String str : listofClassLabels.get(ident)){ - label+=str; - } - - ident2label.put(ident, label); - - return label; - - }*/ - - - public void clearClass2Identifier(){ - class2identifier.clear(); - } - - - public void clearStructures(){ - invertedFileWeakLabels.clear(); - //listofOWLClass.clear(); - identifier2class.clear(); - class2identifier.clear(); - //listofClassLabels.clear(); - identifier2stemmedlabels.clear(); //already removed before - //ident2label.clear(); - //precomputedCombinations.clear(); - } - - - - private Set extractLabels4OWLCls(OWLClass cls){ - - if (full_overlapping) - return extractAllLabels4OWLCls(cls, 20); - else - return extractLimitedLabels4OWLCls(cls, 3); - - } - - - /** - * Extracts only a limited number of labels (in rdf_label) - * @param cls - * @param max_size - * @return - */ - private Set extractLimitedLabels4OWLCls(OWLClass cls, int max_size){ - - Set labels = new HashSet(); - - - - //We look for label first - for (OWLAnnotationAssertionAxiom annAx : cls.getAnnotationAssertionAxioms(onto)){ - - if (annAx.getAnnotation().getProperty().getIRI().toString().equals(rdf_label_uri) || - annAx.getAnnotation().getProperty().getIRI().toString().equals(synonym_iri)){ - - labels.add(((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral()); //No lower case yet - - if (labels.size()>=max_size) - break; - } - } - - - //Check if concept name is meaningful (not an ID) - String name_class = Utilities.getEntityLabelFromURI(cls.getIRI().toString()); - //If it doesn't exist any label then we use entity name - //TODO OJO with yujiao results - if (labels.isEmpty() || !name_class.matches(".+[0-9][0-9][0-9]+")){ - //if (labels.isEmpty()){ - labels.add(name_class); - } - - return labels; - - } - - - - /** - * Extracts all labels. It may be time consuming - * @param cls - * @param max_size - * @return - */ - private Set extractAllLabels4OWLCls(OWLClass cls, int max_size){ - - Set labels = new HashSet(); - - //All labels - for (OWLAnnotationAssertionAxiom annAx : cls.getAnnotationAssertionAxioms(onto)){ - - - labels.addAll(annotationExtractor.getAnntotationString(annAx, onto, onto.getOWLOntologyManager().getOWLDataFactory())); - - if (labels.size()>=max_size) - break; - - } - - - //Check if concept name is meaningful (not an ID) - String name_class = Utilities.getEntityLabelFromURI(cls.getIRI().toString()); - //If it doesn't exist any label then we use entity name - //TODO OJO with yujiao results - if (labels.isEmpty() || !name_class.matches(".+[0-9][0-9][0-9]+")){ - //if (labels.isEmpty()){ - labels.add(name_class); - } - - return labels; - - } - - - - private List cleanLabel(String label_value){ - - List cleanWords=new ArrayList(); - - String[] words; - - label_value=label_value.replace(",", ""); - - if (label_value.indexOf("_")>0){ //NCI and SNOMED - words=label_value.split("_"); - } - else if (label_value.indexOf(" ")>0){ //FMA - words=label_value.split(" "); - } - //Split capitals... - else{ - words=Utilities.splitStringByCapitalLetter(label_value); - } - //else { - // words=new String[1]; - // words[0]=label_value; - //} - - //To lowercase - - - for (int i=0; i0){ - - if (!lexicalUtilities.getStopwordsSet().contains(words[i])){ - //if (!LexicalUtilities.getStopwordsSetExtended().contains(words[i])){ - //words[i].length()>2 && Not for exact IF: it may contain important numbers - cleanWords.add(words[i]); - } - } - } - - - - return cleanWords; - - } - - - /** - * Creates entry in exact occurrences map and adds label to class index - * @param cls - * @param ident - * @return - */ - private List extractCleanLabel4OWLCls(OWLClass cls){ - - String label_value=""; - - List cleanWords=new ArrayList(); - - String[] words; - - - - //We look for label first - for (OWLAnnotationAssertionAxiom annAx : cls.getAnnotationAssertionAxioms(onto)){ - - if (annAx.getAnnotation().getProperty().getIRI().toString().equals(rdf_label_uri)){ - - label_value=((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral();//.toLowerCase(); - - //LogOutput.print("Label: " + label_value); - break; - - } - - } - - //If it doesn't exist then we use entity name - if (label_value.equals("")){ - - label_value=Utilities.getEntityLabelFromURI(cls.getIRI().toString()); - - } - - - label_value=label_value.replace(",", ""); - - if (label_value.indexOf("_")>0){ //NCI and SNOMED - words=label_value.split("_"); - } - else if (label_value.indexOf(" ")>0){ //FMA - words=label_value.split(" "); - } - //Split capitals... - else{ - words=Utilities.splitStringByCapitalLetter(label_value); - } - //else { - // words=new String[1]; - // words[0]=label_value; - //} - - //To lowercase - - - for (int i=0; i0){ - - if (!lexicalUtilities.getStopwordsSet().contains(words[i])){ - //if (!LexicalUtilities.getStopwordsSetExtended().contains(words[i])){ - //words[i].length()>2 && Not for exact IF: it may contain important numbers - cleanWords.add(words[i]); - } - } - } - - - - return cleanWords; - - } - - - - - - - /*private void setInvertedFileExactLabels(){ - - Set words; - - for (int ident=0; ident < listofClassLabels.size(); ident++){ - - words = new HashSet(listofClassLabels.get(ident)); - - if (words.size()>0){ - - if (!invertedFileWeakLabels.containsKey(words)) - invertedFileWeakLabels.put(new HashSet(words), new HashSet()); - - invertedFileWeakLabels.get(words).add(ident); - } - } - }*/ - - - /* - private void setInvertedFileStemmedLabels(){ - - Set stemmed_words = new HashSet(); - - for (int ident=0; ident < listofClassLabels.size(); ident++){ - - //words = listofClassLabels.get(ident); - stemmed_words.clear(); - - for (String str : listofClassLabels.get(ident)){ - stemmed_words.add(LexicalUtilities.getStemming4Word(str)); - } - - if (stemmed_words.size()>0){ - - if (!invertedFileWeakLabels.containsKey(stemmed_words)) - invertedFileWeakLabels.put(new HashSet(stemmed_words), new HashSet()); - - invertedFileWeakLabels.get(stemmed_words).add(ident); - } - } - }*/ - - - - - private void setInvertedFileWeakLabels(){ - - //TODO - //Extend with max size labels and max_size_missing_words: perform experiments and evaluate performance. - //Currently set to 2 - - - //List words; - - - //for (int ident=0; ident < listofClassLabels.size(); ident++){ - for (int ident : identifier2stemmedlabels.keySet()){ - - //words = listofClassLabels.get(ident); - for (List words : identifier2stemmedlabels.get(ident)){ - - - if (words.size()>max_size_labels) - continue; - - if (words.size()>1){ //Smaller case 1 out of 2 - - createWeakLabels4Identifier(words, ident, 1);// 1 missing word - - if (words.size()>3 && max_size_words_missing>1){ //Smaller case 2 out of 4 - - createWeakLabels4Identifier(words, ident, 2); - - if (words.size()>5 && max_size_words_missing>2){ //Smaller case 3 out of 6 - - createWeakLabels4Identifier(words, ident, 3); - - if (words.size()>7 && max_size_words_missing>3){ //Smaller case 4 out of 8 - - createWeakLabels4Identifier(words, ident, 4); - } - } - } - - } - } - } - - - } - - - - /** - * Combines the words in given list with 'x' missing words and stores the results in IF - * - * @param cleanWords Clean label of concept - * @param ident Identifier of concepts - * @param missing_words Number of words to be discarded - */ - private void createWeakLabels4Identifier(List cleanWords, int ident, int missing_words){ - - Set combo = new HashSet(); - - //Fills identifierCombination - - //Set> combination_set = getIdentifierCombination(cleanWords.size(), missing_words); - Set> combination_set = precomputeIndexCombination.getIdentifierCombination(cleanWords.size(), missing_words); - - for(Set toExclude : combination_set){ - - for (int pos=0; pos(combo), new HashSet()); - - invertedFileWeakLabels.get(combo).add(ident); - - combo.clear(); - - } - - - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor.java deleted file mode 100644 index 9c20fae183..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor.java +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.overlapping; - -import java.util.Set; - - -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLAxiom; - - -/** - * Abstracts class for overlapping. Given two ontologies will return 2 modules - * representing the overlapping between them - * - * @author ernesto - * - */ -public abstract class OverlappingExtractor { - - - protected OWLOntology module1; - protected OWLOntology module2; - - protected Set module1_tbox_axioms; - protected Set module2_tbox_axioms; - - - - /** - * Receives two IRIs as input - * @param iri_str1 - * @param iri_str2 - */ - public abstract void createOverlapping( - String iri_str1, - String iri_str2) throws Exception; - - /** - * Receives two OWL ontologies as input - * @param onto1 - * @param onto2 - */ - public abstract void createOverlapping( - OWLOntology onto1, - OWLOntology onto2) throws Exception; - - - - public OWLOntology getOverlappingOnto1(){ - return module1; - } - - public OWLOntology getOverlappingOnto2(){ - return module2; - } - - public Set getTBOXOverlappingOnto1(){ - return module1_tbox_axioms; - } - - public Set getTBOXOverlappingOnto2(){ - return module2_tbox_axioms; - } - - - public void keepOnlyTBOXOverlapping(){ - keepOnlyTBOXOverlapping(true); - } - - public void keepOnlyTBOXOverlapping(boolean removeModules){ - module1_tbox_axioms = module1.getTBoxAxioms(true); //importsclosure - module2_tbox_axioms = module2.getTBoxAxioms(true); //importsclosure - - if (removeModules){ - module1=null; - module2=null; - } - - } - - - - - public void clearModulesOverlapping(){ - - module1=null; - module2=null; - - } - - - public abstract Set getBaseOverlappedEntities1(); - public abstract Set getBaseOverlappedEntities2(); - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor4Mappings.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor4Mappings.java deleted file mode 100644 index acef1398a9..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/overlapping/OverlappingExtractor4Mappings.java +++ /dev/null @@ -1,174 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.overlapping; - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLDataFactory; - -import uk.ac.manchester.syntactic_locality.ModuleExtractor; -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.mappings.objects.MappingObjectStr; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -public class OverlappingExtractor4Mappings { - - protected OWLOntology module1; - protected OWLOntology module2; - - - boolean is_overlapping_onto1=true; - boolean is_overlapping_onto2=true; - - Set entities1 = new HashSet(); - Set entities2 = new HashSet(); - - OWLDataFactory dataFactory; - - - /** - * Receives two OWL ontologies as input and the set of input mappings to extract the overlapping - * @param onto1 - * @param onto2 - */ - public void createOverlapping( - OWLOntology onto1, - OWLOntology onto2, - Set mappings) throws Exception { - - long init, fin; - - init = Calendar.getInstance().getTimeInMillis(); - - entities1.clear(); - entities2.clear(); - - dataFactory = SynchronizedOWLManager.createOWLDataFactory(); - - if (onto1.getSignature().size(). - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.owlapi; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; - -/** - * Performs synchronised calls to OWLManager from OWLAPI. - * (We have detected some concurrency issue, that might be caused by the - * thread-unsafety of OWLManager) - * @author Ernesto - * - */ -public class SynchronizedOWLManager { - - public static synchronized OWLDataFactory createOWLDataFactory(){ - return new OWLDataFactoryImpl(); - } - - - public static synchronized OWLOntologyManager createOWLOntologyManager(){ - return OWLManager.createOWLOntologyManager(createOWLDataFactory()); - } - - - public static synchronized void saveOntology(OWLOntology ontology, String IRIstr) throws Exception{ - - OWLOntologyManager moduleManager = SynchronizedOWLManager.createOWLOntologyManager(); - - //moduleManager.saveOntology( - // ontology, new RDFXMLOntologyFormat(), IRI.create(IRIstr)); - - saveOntology(moduleManager, ontology, IRIstr); - - } - - public static synchronized void saveOntology(OWLOntologyManager moduleManager, OWLOntology ontology, String IRIstr) throws Exception{ - - moduleManager.saveOntology( - ontology, new RDFXMLOntologyFormat(), IRI.create(IRIstr)); - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/DisjointnessAxiomExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/DisjointnessAxiomExtractor.java deleted file mode 100644 index 3b765d63b7..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/DisjointnessAxiomExtractor.java +++ /dev/null @@ -1,127 +0,0 @@ -package uk.ac.ox.krr.logmap2.reasoning; - -import java.util.Set; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassAxiom; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; -import org.semanticweb.owlapi.model.OWLObjectComplementOf; -import org.semanticweb.owlapi.model.OWLObjectIntersectionOf; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.impl.OWLClassNodeSet; - -/** - * Class to extract explicit disjointness axioms - * @author ernesto - * - */ -public class DisjointnessAxiomExtractor { - - /** - * OWLDisjointAxiom(A,B,C) - * @param reasoner - * @param ontology - * @param cls - * @return - */ - public static OWLClassNodeSet getExplicitOWLDisjointnessAxioms(OWLReasoner reasoner, OWLOntology ontology, OWLClass cls){ - - OWLClassNodeSet nodeSet = new OWLClassNodeSet(); - - for (OWLDisjointClassesAxiom ax : ontology.getDisjointClassesAxioms(cls)) { - for (OWLClassExpression op : ax.getClassExpressions()) { - if (!op.isAnonymous() && !op.equals(cls)) { //Op must be differnt to ce - nodeSet.addNode(reasoner.getEquivalentClasses(op)); - } - } - } - - return nodeSet; - - } - - /** - * A ^ B -> bottom - * @param reasoner - * @param ontology - * @param cls - * @author Shuo Zhang - * @return - */ - public static OWLClassNodeSet getExplicitDLDisjointnessAxioms(OWLReasoner reasoner, OWLOntology ontology, OWLClass cls){ - - OWLClassNodeSet nodeSet = new OWLClassNodeSet(); - - OWLClassExpression subExp; - Set set; - for (OWLSubClassOfAxiom sax : ontology.getSubClassAxiomsForSuperClass(OWLManager.getOWLDataFactory().getOWLNothing())) { - subExp = sax.getSubClass(); - if (subExp instanceof OWLObjectIntersectionOf) { - set = subExp.asConjunctSet(); - if (set.contains(cls) && set.size() == 2) { - for (OWLClassExpression op : set) { - if (!op.equals(cls) && !op.isAnonymous()) { - nodeSet.addNode(reasoner.getEquivalentClasses(op)); - break; - } - } - } - } - } - - return nodeSet; - - } - - - /** - * A subClassOc not B - * @param reasoner - * @param ontology - * @param cls - * @author Shuo Zhang - * @return - */ - public static OWLClassNodeSet getDisjointnessAxiomsWithNegation(OWLReasoner reasoner, OWLOntology ontology, OWLClass cls){ - - OWLClassNodeSet nodeSet = new OWLClassNodeSet(); - - - OWLClassExpression sub; - OWLClassExpression sup; - OWLSubClassOfAxiom sax2; - OWLClassExpression exp; - for (OWLClassAxiom ax : ontology.getAxioms(cls.asOWLClass())) { /// check - if (ax instanceof OWLSubClassOfAxiom) { - sax2 = (OWLSubClassOfAxiom) ax; - sup = sax2.getSuperClass(); - - if (sup instanceof OWLObjectComplementOf) { - sub = sax2.getSubClass(); - if (sub.equals(cls)) { - exp = ((OWLObjectComplementOf) sup).getOperand(); - if (!exp.isAnonymous()) { - nodeSet.addNode(reasoner.getEquivalentClasses(exp)); - } - } else if (!sub.isAnonymous()) { - exp = ((OWLObjectComplementOf) sup).getOperand(); - if (exp.equals(cls)) { - nodeSet.addNode(reasoner.getEquivalentClasses(sub)); - } - } - } - } - } - - - return nodeSet; - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ELKAccess.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ELKAccess.java deleted file mode 100644 index 5986013b85..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ELKAccess.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - -import org.semanticweb.elk.owlapi.ElkReasonerAdapted; -import org.semanticweb.elk.owlapi.ElkReasonerFactory; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; - - -/** - * ELK reasoner access - * @author Ernesto Jimenez Ruiz - * Nov 18, 2011 - * - */ -public class ELKAccess extends ReasonerAccessImpl { - - public ELKAccess(OWLOntologyManager ontoManager, OWLOntology onto, boolean useFactory) throws Exception{ - super(ontoManager, onto, useFactory); - - } - - - protected void setUpReasoner(boolean useFactory) throws Exception{ - -// Logger.getLogger("org.semanticweb.elk").setLevel(Level.OFF); - - reasonerFactory = new ElkReasonerFactory(); - - if (useFactory){ - reasoner = reasonerFactory.createReasoner(ontoBase); - } - else{ - reasoner=new ElkReasonerAdapted(ontoBase); - } - - reasonerName = "ELK"; - - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiTAccess.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiTAccess.java deleted file mode 100644 index 6cc17dc500..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiTAccess.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - - - -import org.semanticweb.HermiT.Reasoner; -import org.semanticweb.HermiT.Configuration; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; - - - -/** - * @author Ernesto Jimenez Ruiz - * Nov 8, 2011 - * - */ -public class HermiTAccess extends ReasonerAccessImpl { - - - public HermiTAccess(OWLOntologyManager ontoManager, OWLOntology onto, boolean useFactory) throws Exception{ - super(ontoManager, onto, useFactory); - - } - - - protected void setUpReasoner(boolean useFactory) throws Exception{ - - - //new SimpleConfiguration()); //BufferingMode.NON_BUFFERING - - //This may avoid the exception due to datatypes outside OWL 2 specification - Configuration conf = new Configuration(); - conf.ignoreUnsupportedDatatypes=true; - - if (useFactory){ - reasonerFactory = new Reasoner.ReasonerFactory(); - reasoner = reasonerFactory.createReasoner(ontoBase, conf); - } - else{ - reasoner=new HermiT_adapted(ontoBase, conf); - } - - reasonerName = "HermiT";//reasoner.getReasonerName(); - - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiT_adapted.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiT_adapted.java deleted file mode 100644 index fb2a0b40c1..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/HermiT_adapted.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - -import org.semanticweb.HermiT.Configuration; -import org.semanticweb.HermiT.Reasoner; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.reasoner.BufferingMode; -import org.semanticweb.owlapi.reasoner.NodeSet; -import org.semanticweb.owlapi.reasoner.SimpleConfiguration; -import org.semanticweb.owlapi.reasoner.impl.OWLClassNodeSet; - -public class HermiT_adapted extends Reasoner{ - - - public HermiT_adapted(OWLOntology rootOntology, Configuration conf) throws Exception{ - super(conf, rootOntology); - } - - /** - * Getting all disjoint classes is costly. We get only explicit disjointness. - * We will complete with questions (A intersection B) later if necessary - */ - public NodeSet getDisjointClasses(OWLClassExpression ce) { - OWLClassNodeSet nodeSet = new OWLClassNodeSet(); - - if (!ce.isAnonymous()) { - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - nodeSet.addAllNodes(DisjointnessAxiomExtractor.getExplicitOWLDisjointnessAxioms(this, ontology, ce.asOWLClass()).getNodes()); - nodeSet.addAllNodes(DisjointnessAxiomExtractor.getExplicitOWLDisjointnessAxioms(this, ontology, ce.asOWLClass()).getNodes()); - nodeSet.addAllNodes(DisjointnessAxiomExtractor.getExplicitOWLDisjointnessAxioms(this, ontology, ce.asOWLClass()).getNodes()); - } - } - - return nodeSet; - - - /*if (!ce.isAnonymous()) { - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLDisjointClassesAxiom ax : ontology.getDisjointClassesAxioms(ce.asOWLClass())) { - for (OWLClassExpression op : ax.getClassExpressions()) { - if (!op.isAnonymous() && !op.equals(ce)) { //Op must be differnt to ce - nodeSet.addNode(getEquivalentClasses(op)); - } - } - } - } - }*/ - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccess.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccess.java deleted file mode 100644 index 767af886dd..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccess.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - -import java.util.Set; - - - - -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; - - -/** - * This abstract class defines the interface for the classes built on top of the reasoner - * @author Ernesto Jimenez Ruiz - * - */ -public abstract class ReasonerAccess { - - //Language of subclassof relationships between atomic concepts - public static final int LSUB = 0; - //Language of subclassof relationships between atomic concepts and "A sub (exist R.B)" and "(exist R.B) sub A" - public static final int LBASIC = 1; - //Language of subclassof relationships between active concepts (i.e. all class expression explicitly occurring in the ontology) - public static final int LACTIVE = 2; - - public static final int SAT = 0; - public static final int UNSAT = 1; - public static final int UNKNOWN = 2; - - public abstract boolean isOntologyClassified(); - - public abstract void classifyOntology_withTimeout(int timeoutSecs); - - public abstract void classifyOntology_withTimeout_throws_Exception(int timeoutSecs) throws Exception; - - public abstract void classifyOntology() throws Exception; - - public abstract void classifyOntology(boolean class_properties) throws Exception; - - public abstract OWLOntology getOntology(); - - public abstract OWLReasoner getReasoner(); - - public abstract OWLReasonerFactory getReasonerFactory(); - - public abstract boolean isSatisfiable(OWLClass cls); - - public abstract int isSatisfiable_withTimeout(OWLClassExpression cls, int timeoutSecs); - - public abstract boolean isEntailed(OWLAxiom ax); - - public abstract boolean isSubClassOf(OWLClass cls1, OWLClass cls2); - - public abstract boolean areDisjointClasses(OWLClass cls1, OWLClass cls2); - - public abstract boolean isConsistent(); - - public abstract boolean areEquivalentClasses(OWLClass cls1, OWLClass cls2); - - public abstract void setLanguage4Closure(int language); - - public abstract void createClosure(); - - public abstract void createClosure(int language); - - public abstract Set getClosure(); - - public abstract Set getUnsatisfiableClasses(); - - public abstract boolean hasUnsatisfiableClasses(); - - public abstract void clearStructures(); - - //public abstract void setActiveClassExpressions(Set active_concepts); - //public abstract Set getActiveClassExpressions(); - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccessImpl.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccessImpl.java deleted file mode 100644 index ed7669d940..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerAccessImpl.java +++ /dev/null @@ -1,726 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - -import java.util.ArrayList; - - - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -//import org.semanticweb.HermiT.Reasoner; -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.reasoner.InferenceType; -import org.semanticweb.owlapi.reasoner.Node; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; -import org.semanticweb.owlapi.util.DLExpressivityChecker; -import org.semanticweb.owlapi.util.InferredAxiomGenerator; -import org.semanticweb.owlapi.util.InferredEquivalentClassAxiomGenerator; -import org.semanticweb.owlapi.util.InferredOntologyGenerator; -import org.semanticweb.owlapi.util.InferredSubClassAxiomGenerator; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -//import uk.ac.ox.krr.ontoevol.visitor.ELActiveConceptsVisitor; - -public abstract class ReasonerAccessImpl extends ReasonerAccess { - - protected long init, fin; - - protected OWLOntology ontoBase; - protected OWLOntologyManager ontoManager; - protected OWLDataFactory datafactory; - - protected OWLReasoner reasoner; - protected OWLReasonerFactory reasonerFactory; - - protected Set closure; - protected int closure_lang = ReasonerAccess.LSUB; //Default language - - protected Set activeConcepts; - - protected String reasonerName = ""; - - protected boolean isClassified = false; - - private String DLNameOnto; - - - public ReasonerAccessImpl(OWLOntologyManager ontoManager, OWLOntology onto, boolean useFactory) throws Exception{ - - this.ontoManager=ontoManager; - this.ontoBase=onto; - datafactory=ontoManager.getOWLDataFactory(); - - closure = new HashSet(); - - - //Set importsClosure = this.ontoManager.getImportsClosure(ontoBase); - //DLExpressivityChecker checker = new DLExpressivityChecker(importsClosure); - //DLNameOnto = checker.getDescriptionLogicName(); - - - setUpReasoner(useFactory); - - } - - public void clearStructures(){ - closure.clear(); - reasoner.dispose(); - - } - - public void dispose(){ - reasoner.dispose(); - } - - public void interrupt(){ - reasoner.interrupt(); - } - - - protected void setUpReasoner(boolean withFactory) throws Exception{ - - } - - - public String getDLNameOntology(){ - return DLNameOnto; - } - - - - public boolean isOntologyClassified(){ - return isClassified; - } - - - - - public void classifyOntology_withTimeout(int timeoutSecs) { - - isClassified = false; - - ExecutorService executor = Executors.newFixedThreadPool(1); - - //set the executor thread working - final Future future = executor.submit(new Runnable() { - public void run() { - try { - classifyOntologyNoProperties(); //If timeout never class properties - //classifyOntology(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - - //check the outcome of the executor thread and limit the time allowed for it to complete - try { - future.get(timeoutSecs, TimeUnit.SECONDS); - future.cancel(true); - executor.shutdown(); - } - catch (TimeoutException e) { - - //ExecutionException: deliverer threw exception - //TimeoutException: didn't complete within downloadTimeoutSecs - //InterruptedException: the executor thread was interrupted - - LogOutput.print("Time out classifying with HermiT. Using 'structural' reasoner instead."); - - isClassified = false; - - reasoner.interrupt(); - reasoner.dispose(); - - //interrupts the worker thread if necessary - future.cancel(true); - executor.shutdown(); - - - - } - catch (Exception e) { - LogOutput.print("Error classifying ontology with " + reasoner.getReasonerName());// + "\n" + e.getMessage() + "\n" + e.getLocalizedMessage()); - e.printStackTrace(); - } - } - - - - /** - * Used from LogMap's web service - * @param timeoutSecs - * @throws Exception - */ - public void classifyOntology_withTimeout_throws_Exception(int timeoutSecs) throws Exception{ - - isClassified = false; - - ExecutorService executor = Executors.newFixedThreadPool(1); - - //set the executor thread working - final Future future = executor.submit(new Runnable() { - public void run() { - try { - classifyOntologyNoProperties(); //If timeout never class properties - //classifyOntology(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - - //check the outcome of the executor thread and limit the time allowed for it to complete - try { - future.get(timeoutSecs, TimeUnit.SECONDS); - future.cancel(true); - executor.shutdown(); - } - catch (TimeoutException e) { - - isClassified = false; - - reasoner.interrupt(); - reasoner.dispose(); - - //interrupts the worker thread if necessary - future.cancel(true); - executor.shutdown(); - LogOutput.print("Timeout classifying ontology with " + reasoner.getReasonerName()); - throw new TimeoutException(); - } - catch (Exception e) { - isClassified = false; - - reasoner.dispose(); - - //interrupts the worker thread if necessary - future.cancel(true); - executor.shutdown(); - - //e.printStackTrace(); - LogOutput.print("Error classifying ontology with " + reasoner.getReasonerName()); - //e.printStackTrace(); - throw new Exception(); - - } - } - - - - - - public void classifyOntologyNoProperties() throws Exception{ - classifyOntology(false); - } - - public void classifyOntology() throws Exception{ - classifyOntology(true); - } - - - - - - public void classifyOntology(boolean classproperties) throws Exception{ - - isClassified = false; - - try { - //ontoManager is does not contains ontoBase. It was loaded witha different manager - //Set importsClosure = ontoManager.getImportsClosure(ontoBase); - Set importsClosure = new HashSet(); - importsClosure.add(ontoBase); - DLExpressivityChecker checker = new DLExpressivityChecker(importsClosure); - //System.out.println("Expressivity Ontology: " + checker.getDescriptionLogicName()); - - init=Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\nClassifying '" + checker.getDescriptionLogicName() + "' Ontology with " + reasonerName + "... "); - reasoner.precomputeInferences(InferenceType.CLASS_HIERARCHY); - - - - //reasoner.getPrecomputableInferenceTypes() - - //The may help for the queries - if (classproperties){ - reasoner.precomputeInferences(InferenceType.DATA_PROPERTY_HIERARCHY); - reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_HIERARCHY); - } - - //Only if instance matching should be performed - if (Parameters.perform_instance_matching){ - reasoner.precomputeInferences(InferenceType.CLASS_ASSERTIONS); - } - - //reasoner.precomputeInferences(InferenceType.DISJOINT_CLASSES);//Only explicit, we have extended method! - - //hermit.realise(); - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Done, Time (s): " + (float)((double)fin-(double)init)/1000.0 + "\n"); - - isClassified = true; - } - catch (Exception e){ - //LogOutput.print("Error classifying ontology with " + reasoner.getReasonerName() + "\n" + e.getMessage() + "\n" + e.getLocalizedMessage()); - LogOutput.print("Error classifying ontology with " + reasonerName + "\n" + e.getMessage() + "\n" + e.getLocalizedMessage()); - //e.printStackTrace(); - throw new Exception(); - //e.printStackTrace(); - } - - } - - - public OWLOntology getOntology(){ - return ontoBase; - } - - public OWLReasoner getReasoner() { - return reasoner; - } - - - public OWLReasonerFactory getReasonerFactory() { - return reasonerFactory; - } - - public boolean isConsistent(){ - return reasoner.isConsistent(); - } - - - - public boolean isEntailed(OWLAxiom ax){ - return reasoner.isEntailed(ax); - } - - - - public boolean isSubClassOf(OWLClass cls1, OWLClass cls2) { - return reasoner.isEntailed(datafactory.getOWLSubClassOfAxiom(cls1, cls2)); - } - - - - - public boolean areDisjointClasses(OWLClass cls1, OWLClass cls2) { - - - return !reasoner.isSatisfiable(datafactory.getOWLObjectIntersectionOf(cls1, cls2)); - - } - - - public boolean areEquivalentClasses(OWLClass cls1, OWLClass cls2) { - return reasoner.isEntailed(datafactory.getOWLEquivalentClassesAxiom(cls1, cls2)); - } - - - public boolean isSatisfiable(OWLClass cls){ - return reasoner.isSatisfiable(cls); - } - - - private OWLClassExpression current_cls; - private int resultClassEval; - - - - public void doWork_SatCls() { - - try{ - if (reasoner.isSatisfiable(current_cls)) - resultClassEval=SAT; - else - resultClassEval=UNSAT; - } - catch (Exception e) { - if (!current_cls.isAnonymous()) - System.out.println("Unknown class: " + current_cls.asOWLClass().getIRI().toString()); - - resultClassEval = UNKNOWN; - } - - } - - public int isSatisfiable_withTimeout(OWLClassExpression cls, int timeoutSecs){ - - current_cls = cls; - resultClassEval = UNKNOWN; - - ExecutorService executor = Executors.newFixedThreadPool(1); - - //set the executor thread working - final Future future = executor.submit(new Runnable() { - public void run() { - try { - doWork_SatCls(); //If timeout never class properties - - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - - //check the outcome of the executor thread and limit the time allowed for it to complete - try { - future.get(timeoutSecs, TimeUnit.SECONDS); - future.cancel(true); - executor.shutdown(); - } - catch (TimeoutException e) { - - //ExecutionException: deliverer threw exception - //TimeoutException: didn't complete within downloadTimeoutSecs - //InterruptedException: the executor thread was interrupted - - - resultClassEval = UNKNOWN; - - //interrupts the worker thread if necessary - future.cancel(true); - executor.shutdown(); - - - - } - catch (Exception e) { - //LogOutput.printError("Error checking satisfiability with " + reasoner.getReasonerName() + "\n" + e.getMessage() + "\n" + e.getLocalizedMessage()); - resultClassEval = UNKNOWN; - - } - - return resultClassEval; - - } - - - - - - - - public boolean hasUnsatisfiableClasses(){ - if (getUnsatisfiableClasses().size()>0) - return true; - - return false; - } - - - public Set getUnsatisfiableClasses() { - return getUnsatisfiableClasses(false); - } - - - private Set getUnsatisfiableClasses(boolean print) { - - try{ - - Set set; - - //Now the reasoner return a node structure. A Node contains the - //set of entities which are equivalent - Node node = reasoner.getUnsatisfiableClasses(); - - //set = node.getEntities(); - set = node.getEntitiesMinusBottom(); - - //set.remove(datafactory.getOWLNothing()); - - if (!set.isEmpty()) { - if (print) - System.err.println("The following classes are unsatisfiable: "); - - for(OWLClass cls : set) { - if (print) - System.err.println(" " + cls); - } - } - else{ - if (print) - System.out.println("There are '0' unsatisfiable classes."); - } - - return set; - } - catch (Exception e){ - System.err.println("Error when invoking the reasoner to get unsatisfiable classes."); - return new HashSet(); - } - - } - - - public void setLanguage4Closure(int language) { - closure_lang = language; - } - - - public void createClosure(int language) { - - setLanguage4Closure(language); - - createClosure(); - - } - - - /** - * To be reviewed... was not complete enough (see Semantic difference) - */ - public void createClosure() { - - switch (closure_lang) { - case ReasonerAccess.LSUB: - createClosureLSub(); - break; - - /*case ReasonerAccess.LBASIC: - createClosureLBasic(); - break; - - case ReasonerAccess.LACTIVE: - createClosureLActive(); - break; - */ - default: - break; - } - - - } - - - public Set getClosure() { - return closure; - } - - - - - /** - * Those class expression occurring in the ontology. - */ - private Set getActiveClassExpressions(){ - //TODO - return activeConcepts; - } - - - - /** - * This closure will involve subclass axioms - */ - private void createClosureLSub(){ - - try { - - init=Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Extracting Lsub closure... "); - - for (OWLClass cls : reasoner.getUnsatisfiableClasses()) { - - if (!cls.isOWLNothing()) { - OWLAxiom unsatAx = ontoManager.getOWLDataFactory().getOWLSubClassOfAxiom(cls, - ontoManager.getOWLDataFactory().getOWLNothing()); - - //Consider unsat axiom! - closure.add(unsatAx); - } - } - - //axiomsInferredOnt.addAll(inferredAxioms); - - //OWLOntologyManager classifiedOntoMan = OWLManager.createOWLOntologyManager(); - OWLOntologyManager classifiedOntoMan = SynchronizedOWLManager.createOWLOntologyManager(); - - OWLOntology inferredOnt = classifiedOntoMan.createOntology(ontoBase.getOntologyID().getOntologyIRI()); - InferredOntologyGenerator ontGen = new InferredOntologyGenerator( - reasoner, new ArrayList>()); - //InferredOntologyGenerator ontGen = new InferredOntologyGenerator(reasoner); - - - ontGen.addGenerator(new InferredEquivalentClassAxiomGenerator()); - ontGen.addGenerator(new InferredSubClassAxiomGenerator()); - - //Fills inferred onto - ontGen.fillOntology(classifiedOntoMan, inferredOnt); - - - //Getting closure without axioms "subclass of Thing" - for (OWLAxiom ax : inferredOnt.getAxioms()){ - //closure.add(ax); // IT IS NO REDUNDANT!! - if (ax instanceof OWLSubClassOfAxiom) { - - //TODO: it may be the case we want to show this axioms... - if (!((OWLSubClassOfAxiom) ax).getSuperClass().isOWLThing() && - !ontoBase.containsAxiom(ax)) { - //ConsiderAxiom - closure.add(ax); - } - } - } - - fin = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Done, Time (s): " + (float)((double)fin-(double)init)/1000.0); - LogOutput.print("Closure:\n" + closure.size()); - - - //OTHER GENERATORS - //ontGen.addGenerator(new InferredClassAssertionAxiomGenerator()); - //ontGen.addGenerator(new InferredPropertyAssertionGenerator()); - //Original computational cost is really high! With extension we can extract only eplicit disjointness - //ontGen.addGenerator(new InferredDisjointClassesAxiomGenerator()); - - //ontGen.addGenerator(new InferredDataPropertyCharacteristicAxiomGenerator()); - //ontGen.addGenerator(new InferredEquivalentDataPropertiesAxiomGenerator()); - //ontGen.addGenerator(new InferredSubDataPropertyAxiomGenerator()); - - //ontGen.addGenerator(new InferredEquivalentObjectPropertyAxiomGenerator()); - //ontGen.addGenerator(new InferredInverseObjectPropertiesAxiomGenerator()); - //ontGen.addGenerator(new InferredObjectPropertyCharacteristicAxiomGenerator()); - //ontGen.addGenerator(new InferredSubObjectPropertyAxiomGenerator()); - - - } - catch (Exception e) { - e.printStackTrace(); - //return new ArrayList(); - } - - - - } - - - /* - * - - private void createClosureLBasic(){ - - //Must be included - createClosureLSub(); - - - //Set active concepts (atomic + exists (one level)) - ELActiveConceptsVisitor visitor = new ELActiveConceptsVisitor(); - - for (OWLAxiom ax : ontoBase.getTBoxAxioms(false)){ - activeConcepts.addAll(visitor.getActiveConcepts4Axiom(ax, true)); - } - - - - - //Combine active concepts for LBasic - OWLAxiom candidate_ax; - for (OWLClassExpression cls_exp1 : activeConcepts){ - for (OWLClassExpression cls_exp2 : activeConcepts){ - - if (cls_exp1.equals(cls_exp2) || //Tautology - (cls_exp1.isClassExpressionLiteral() && cls_exp2.isClassExpressionLiteral()) || //Already in classification - (cls_exp1.isAnonymous() && cls_exp2.isAnonymous())){ //At least one should be non anonymous - continue; - } - - candidate_ax = datafactory.getOWLSubClassOfAxiom(cls_exp1, cls_exp2); - - if (isEntailed(candidate_ax)){ - closure.add(candidate_ax); - } - - - } - - } - - - - - - - } - - - - private void createClosureLActive(){ - - //Must be included - createClosureLSub(); - - //Set all active concepts (different levels) - ELActiveConceptsVisitor visitor = new ELActiveConceptsVisitor(); - - for (OWLAxiom ax : ontoBase.getTBoxAxioms(false)){ - activeConcepts.addAll(visitor.getActiveConcepts4Axiom(ax, false)); - } - - - //Combine active concepts for LActive - OWLAxiom candidate_ax; - for (OWLClassExpression cls_exp1 : activeConcepts){ - for (OWLClassExpression cls_exp2 : activeConcepts){ - - if (cls_exp1.equals(cls_exp2) || //Tautology - (cls_exp1.isClassExpressionLiteral() && cls_exp2.isClassExpressionLiteral())){ //Already in classification - continue; - } - - candidate_ax = datafactory.getOWLSubClassOfAxiom(cls_exp1, cls_exp2); - - if (isEntailed(candidate_ax)){ - closure.add(candidate_ax); - } - - - } - - } - - - }*/ - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerManager.java deleted file mode 100644 index 86f202b7ea..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/ReasonerManager.java +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - -import java.util.HashSet; -import java.util.Set; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; - - -public class ReasonerManager { - - public static int NONE = -1; - public static int HERMIT = 0; - public static int PELLET = 1; - //Note that elk does not implement the justification extraction facility - public static int ELK = 2; - public static int FACTpp = 3; - public static int TrOWL = 4; - public static int MORe = 5; - - //public enum reasoners { HERMIT, PELLET } - - - - - public static ReasonerAccess getReasoner( - int reasoner_id, - OWLOntologyManager ontoManager, - OWLOntology onto, - boolean useFactory) throws Exception{ - - if (reasoner_id == HERMIT){ - return new HermiTAccess(ontoManager, onto, useFactory); - } - //else if (reasoner_id == PELLET){ - // return new PelletAccess(ontoManager, onto, useFactory); - //} - else if (reasoner_id == ELK){ - return new ELKAccess(ontoManager, onto, useFactory); - } - //else if (reasoner_id == FACTpp){ - // return new FaCTppAccess(ontoManager, onto, useFactory); - //} - //else if (reasoner_id == TrOWL){ - // return new TrOWLAccess(ontoManager, onto, useFactory); - //} - //else if (reasoner_id == MORe){ - // return new MOReAccess(ontoManager, onto, useFactory); - //} - else { - return new HermiTAccess(ontoManager, onto, useFactory); - } - } - - - - public static ReasonerAccess getMergedOntologyReasoner( - int reasoner_id, - OWLOntology onto1, - OWLOntology onto2, - OWLOntology m, - boolean useFactory) throws Exception{ - - return getMergedOntologyReasoner(reasoner_id, onto1.getAxioms(), onto2.getAxioms(), m.getAxioms(), useFactory); - - - } - - - public static ReasonerAccess getMergedOntologyReasoner( - int reasoner_id, - Set onto1_ax, - Set onto2_ax, - Set m_ax, - boolean useFactory) throws Exception{ - - - Set axioms = new HashSet(); - axioms.addAll(onto1_ax); - axioms.addAll(onto2_ax); - axioms.addAll(m_ax); - - //OWLOntologyManager managerMerged = OWLManager.createOWLOntologyManager(); - OWLOntologyManager managerMerged = SynchronizedOWLManager.createOWLOntologyManager(); - OWLOntology mergedOntology = managerMerged.createOntology(axioms, IRI.create("http://krr.ox.cs.ac.uk/logmap2/integration.owl")); - - - if (reasoner_id == HERMIT){ - return new HermiTAccess(managerMerged, mergedOntology, useFactory); - } - //else if (reasoner_id == PELLET){ - // return new PelletAccess(managerMerged, mergedOntology, useFactory); - //} - else if (reasoner_id == ELK){ - return new ELKAccess(managerMerged, mergedOntology, useFactory); - } - //else if (reasoner_id == FACTpp){ - // return new FaCTppAccess(managerMerged, mergedOntology, useFactory); - //} - //else if (reasoner_id == TrOWL){ - // return new TrOWLAccess(managerMerged, mergedOntology, useFactory); - //} - else { - return new HermiTAccess(managerMerged, mergedOntology, useFactory); - } - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/SatisfiabilityIntegration.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/SatisfiabilityIntegration.java deleted file mode 100644 index 397c0ae9aa..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/SatisfiabilityIntegration.java +++ /dev/null @@ -1,537 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Set; -import java.util.HashSet; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.OWLFunctionalSyntaxOntologyFormat; -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.AddAxiom; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -public class SatisfiabilityIntegration { - - - //DEFAULT SETTINGS - private static int timeoutClassification=300;//seconds - private static int timeoutClassSatisfiabilityCheck=10;//seconds - private static int REASONER = ReasonerManager.HERMIT; - - - private String rootPath = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/LogMap2_Mappings/"; - private String sufix = "_logmap2_Output/"; - private String module1str = "module1.owl"; - private String module2str = "module2.owl"; - private String mappingstr = "mappings.owl"; - - private OWLDataFactory factory; - private OWLOntologyManager managerOnto1; - private OWLOntologyManager managerOnto2; - private OWLOntologyManager managerMappings; - private OWLOntologyManager managerMerged; - - private OWLOntology moduleonto1; - private OWLOntology moduleonto2; - private OWLOntology mergedOntology; - private OWLOntology mappingsOntology; - - private String mappingsOntologyFile; - private String moduleonto1file; - private String moduleonto2file; - - private String pair_str; - - long init, fin; - - - ReasonerAccess reasonerAccess; - - int resultClassEval; - - final int SAT = 0; - final int UNSAT = 1; - final int UNKNOWN = 2; - final int KNOWN = 3; - - OWLClass current_cls; - - - private int unsat = 0; - - - private boolean useTimeOut=true; - - - private boolean checkSatisfiabilityIndividually; - - - - public SatisfiabilityIntegration( - Set o1_ax, - Set o2_ax, - Set mappings_ax, - boolean useTimeout, - boolean useFactory) throws Exception{ - this(o1_ax, o2_ax, mappings_ax, false, useTimeout, useFactory); - } - - - - public SatisfiabilityIntegration( - Set o1_ax, - Set o2_ax, - Set mappings_ax, - boolean checkSatisfiabilityIndividually, //no classification, check for each class - boolean useTimeout, - boolean useFactory) throws Exception{ - - - this.checkSatisfiabilityIndividually = checkSatisfiabilityIndividually; - - - this.useTimeOut=useTimeout; - - - //Setting up reasoner - init=Calendar.getInstance().getTimeInMillis(); - reasonerAccess = createMergedReasonerAccess(REASONER, o1_ax, o2_ax, mappings_ax, useFactory); - - checkSatisfiabilityIntegration(); - fin=Calendar.getInstance().getTimeInMillis(); - - LogOutput.printAlways("Time extracting unsat classes (s): " + (float)((double)fin-(double)init)/1000.0); - - - //for (OWLClass unsat : reasonerAccess.getUnsatisfiableClasses()){ - // - //} - } - - - public SatisfiabilityIntegration( - OWLOntology o1, - OWLOntology o2, - OWLOntology mappings, - boolean useTimeout, - boolean useFactory) throws Exception{ - this(o1, o2, mappings, false, useTimeout, useFactory); - } - - - public SatisfiabilityIntegration( - OWLOntology o1, - OWLOntology o2, - OWLOntology mappings, - boolean checkSatisfiabilityIndividually, //no classification, check for each class - boolean useTimeout, - boolean useFactory) throws Exception{ - - - moduleonto1 = o1; - moduleonto2 = o2; - mappingsOntology = mappings; - - this.useTimeOut=useTimeout; - - this.checkSatisfiabilityIndividually = checkSatisfiabilityIndividually; - - //Setting up reasoner - reasonerAccess = createMergedReasonerAccess(REASONER, moduleonto1, moduleonto2, mappingsOntology, useFactory); - //reasonerAccess = createMergedReasonerAccess(ReasonerManager.ELK, moduleonto1, moduleonto2, mappingsOntology, useFactory); - - init=Calendar.getInstance().getTimeInMillis(); - checkSatisfiabilityIntegration(); - fin=Calendar.getInstance().getTimeInMillis(); - - LogOutput.printAlways("Time extracting unsat classes (s): " + (float)((double)fin-(double)init)/1000.0); - - - //for (OWLClass unsat : reasonerAccess.getUnsatisfiableClasses()){ - // - //} - } - - - - - public SatisfiabilityIntegration(boolean timeOutClassification) throws Exception{ - - this.useTimeOut=timeOutClassification; - - - - - //setOntologies(); - setNonFixedOntologies(); - - init=Calendar.getInstance().getTimeInMillis(); - loadOntologies(); - fin=Calendar.getInstance().getTimeInMillis(); - LogOutput.printAlways("Time loading ontologies (s): " + (float)((double)fin-(double)init)/1000.0); - - //Setting up reasoner - reasonerAccess = createMergedReasonerAccess(REASONER, moduleonto1, moduleonto2, mappingsOntology, true); - - init=Calendar.getInstance().getTimeInMillis(); - checkSatisfiabilityIntegration(); - fin=Calendar.getInstance().getTimeInMillis(); - - LogOutput.printAlways("Time extracting unsat classes (s): " + (float)((double)fin-(double)init)/1000.0); - - - //for (OWLClass unsat : reasonerAccess.getUnsatisfiableClasses()){ - // - //} - - - - } - - - public static void setTimeoutClassification(int timeout_seconds){ - timeoutClassification = timeout_seconds; - } - - public static void setTimeoutClassSatisfiabilityCheck(int timeout_seconds){ - timeoutClassSatisfiabilityCheck = timeout_seconds; - } - - - public static void setReasoner(int reasoner_id){ - REASONER = reasoner_id; - } - - public boolean hasUnsatClasses(){ - return (unsat>0); - } - - public int getNumUnsatClasses(){ - return unsat; - } - - - private void createMergedOntology(OWLOntology O1, OWLOntology O2, OWLOntology M) throws Exception{ - Set axioms = new HashSet(); - axioms.addAll(O1.getAxioms()); - axioms.addAll(O2.getAxioms()); - axioms.addAll(M.getAxioms()); - - managerMerged = OWLManager.createOWLOntologyManager(); - mergedOntology = managerMerged.createOntology(axioms, IRI.create("http://krono.act.uji.es/mappings/Integration.owl")); - - //System.out.println("Storing merged ontology: "); - //managerMerged.saveOntology(mergedOntology, new RDFXMLOntologyFormat(), IRI.create("file:/usr/local/data/ConfOntosOAEI/cmt_cocus.owl")); //RDFXMLOntologyFormat - - - - LogOutput.printAlways("Number of classes integration: " + mergedOntology.getClassesInSignature().size()); - } - - - private ReasonerAccess createMergedReasonerAccess(int reasoner_id, OWLOntology O1, OWLOntology O2, OWLOntology M, boolean useFactory) throws Exception{ - - return ReasonerManager.getMergedOntologyReasoner(reasoner_id, O1, O2, M, useFactory); - - } - - - private ReasonerAccess createMergedReasonerAccess(int reasoner_id, Set O1, Set O2, Set M, boolean useFactory) throws Exception{ - - return ReasonerManager.getMergedOntologyReasoner(reasoner_id, O1, O2, M, useFactory); - - } - - - - - - - - - - private void setNonFixedOntologies(){ - - //setFMA2NCI(); - //setFMA2SNOMED(); - setSNOMED2NCI(); - mappingsOntologyFile = rootPath + pair_str + sufix + mappingstr; - - //moduleonto1file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_big_overlapping_nci.owl"; - //moduleonto2file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_big_overlapping_fma.owl"; - - //moduleonto1file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2snmd_dataset/oaei2012_FMA_big_overlapping_snomed.owl"; - //moduleonto2file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2snmd_dataset/oaei2012_SNOMED_big_overlapping_fma.owl"; - - - moduleonto1file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_whole_ontology.owl"; - //moduleonto2file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - moduleonto2file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snomed20090131_replab.owl.zip"; - - //mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/Mappings_Tools/oaei2012_FMA2NCI_voted_mappings.owl"; - //mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/OutputAlcomo/oaei2012_FMA2NCI_repaired_UMLS_mappings_alcomo2.owl"; - //mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/FMA2NCI_repaired_UMLS_mappings.owl"; - - mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/OutputAlcomo/oaei2012_FMA2SNMD_repaired_UMLS_mappings_alcomo2.owl"; - - //mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2snmd_dataset/FMA2SNMD_repaired_UMLS_mappings.owl"; - - - //mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snmd2nci_dataset/SNMD2NCI_repaired_UMLS_mappings.owl"; - - - //moduleonto1file = "file:/home/ernesto/ontologies/unsatOntology.owl"; - //moduleonto2file = "file:/home/ernesto/ontologies/unsatOntology.owl"; - //mappingsOntologyFile = "file:/home/ernesto/ontologies/unsatOntology.owl"; - - - //mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/Aroma_results/Aroma_FMA2NCI_wholeOntologies.owl"; - //moduleonto1file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_whole_ontology.owl"; - //moduleonto2file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - //moduleonto1file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/snomed20090131_replab.owl"; - //moduleonto2file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - - //moduleonto1file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snmd2nci_dataset/oaei2012_SNOMED_small_overlapping_nci.owl"; - //moduleonto2file = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snmd2nci_dataset/oaei2012_NCI_small_overlapping_snomed.owl"; - - String path = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/oaei_2013/"; - String irirootpath = "file:" + path; - - moduleonto1file = irirootpath + "oaei2013_SNOMED_extended_overlapping_fma_nci.owl"; - moduleonto2file = irirootpath + "oaei2013_NCI_whole_ontology.owl"; - mappingsOntologyFile = "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/LogMap2_Mappings/SNOMED2NCI_logmap2_Output/logmap2_mappings.owl"; - - } - - private void setOntologies(){ - //setFMA2NCI(); - //setFMA2SNOMED(); - setSNOMED2NCI(); - //setNCI2LUCADA(); - //setSNOMED2LUCADA(); - - - mappingsOntologyFile = rootPath + pair_str + sufix + mappingstr; - moduleonto1file = rootPath + pair_str + sufix + module1str; - moduleonto2file = rootPath + pair_str + sufix + module2str; - } - - - - - - private void loadOntologies() throws Exception { - - managerOnto1 = OWLManager.createOWLOntologyManager(); - managerOnto2 = OWLManager.createOWLOntologyManager(); - managerMappings = OWLManager.createOWLOntologyManager(); - - factory = managerOnto1.getOWLDataFactory(); - - mappingsOntology = managerMappings.loadOntology(IRI.create(mappingsOntologyFile)); - - moduleonto1 = managerOnto1.loadOntology(IRI.create(moduleonto1file)); - - moduleonto2 = managerOnto2.loadOntology(IRI.create(moduleonto2file)); - - - - } - - - public void clear(){ - reasonerAccess.clearStructures(); - } - - int sat_result = 0; - int unknown = 0; - int num_class = 0; - - private void evaluateClassSatisfiabilityTimeOut(OWLClass cls){ - - num_class++; - - sat_result = reasonerAccess.isSatisfiable_withTimeout(cls, timeoutClassSatisfiabilityCheck); - - if (num_class==100 || num_class==5000 || num_class==10000 || - num_class==15000 || num_class==25000 || num_class==50000 || num_class==100000 || - num_class==150000 || num_class==200000 || num_class==250000 || num_class==300000 || num_class==350000) - LogOutput.print("\t" + cls.getIRI().toString() + "- Tested: " + num_class); - - - if (sat_result == ReasonerAccess.UNSAT){ - unsat++; - //System.out.println("\t" + cls.getIRI().toString() + "- UNSAT: " + num_class); - } - else if (sat_result == ReasonerAccess.UNKNOWN){ - unknown++; - LogOutput.print("\t" + cls.getIRI().toString() + "- UNKNOWN SAT. Test: " + num_class); - } - else { - //System.out.println("\t" + cls.getIRI().toString() + "- SAT: " + num_class); - } - - } - - private void evaluateClassSatisfiability(OWLClass cls){ - - num_class++; - - if (!reasonerAccess.isSatisfiable(cls)){ - unsat++; - //LogOutput.printAlways(cls + "- UNSAT"); - } - - } - - - private void checkSatisfiabilityIntegration() throws Exception{ - - - if (checkSatisfiabilityIndividually){ - - unknown = 0; - num_class = 0; - unsat=0; - - if (useTimeOut){ - - - /*for (OWLClass cls : moduleonto1.getClassesInSignature(true)){ - evaluateClassSatisfiabilityTimeOut(cls); - } - - for (OWLClass cls : moduleonto2.getClassesInSignature(true)){ - evaluateClassSatisfiabilityTimeOut(cls); - }*/ - - - LogOutput.printAlways("Checking satisfiability integration: "); - for (OWLClass cls : reasonerAccess.getOntology().getClassesInSignature(true)){ - evaluateClassSatisfiabilityTimeOut(cls); - } - - LogOutput.printAlways("\tUNSAT classes: " + unsat + " of " + num_class); - LogOutput.printAlways("\tUNKNOWN classes: " + unknown + " of " + num_class); - - - } - else { - for (OWLClass cls : moduleonto1.getClassesInSignature(true)){ - evaluateClassSatisfiability(cls); - } - - for (OWLClass cls : moduleonto2.getClassesInSignature(true)){ - evaluateClassSatisfiability(cls); - } - - LogOutput.printAlways("UNSAT classes: " + unsat + " of " + num_class); - } - - - } - else { - if (useTimeOut){ - reasonerAccess.classifyOntology_withTimeout(timeoutClassification);//300-5min for small cases is enough - //reasonerAccess.classifyOntology_withTimeout_throws_Exception(300); - } - else{ - reasonerAccess.classifyOntology(); - } - - if (reasonerAccess.isOntologyClassified()){ - unsat = reasonerAccess.getUnsatisfiableClasses().size(); - LogOutput.printAlways("UNSAT classes: " + unsat); - if (unsat<10){ //TODO ontly a subset - for (OWLClass cls : reasonerAccess.getUnsatisfiableClasses()){ - LogOutput.printAlways("\t" +cls.getIRI().toString()); - } - } - } - else{ - LogOutput.printAlways("Timeout or error classigying ontology."); - } - } - } - - - - - - - - - private void setFMA2NCI(){ - pair_str ="FMA2NCI"; - } - - private void setFMA2SNOMED(){ - pair_str ="FMA2SNOMED"; - } - - private void setSNOMED2NCI(){ - pair_str ="SNOMED2NCI"; - } - - private void setNCI2LUCADA(){ - pair_str ="NCI2LUCADA"; - } - - private void setSNOMED2LUCADA(){ - pair_str ="SNOMED2LUCADA"; - } - - - /** - * @param args - */ - public static void main(String[] args) { - // TODO Auto-generated method stub - - try{ - new SatisfiabilityIntegration(false); - - } - catch (Exception e){ - System.out.println(e.getMessage()); - e.printStackTrace(); - } - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasoner2.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasoner2.java deleted file mode 100644 index 8ed5123827..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasoner2.java +++ /dev/null @@ -1,1420 +0,0 @@ -package uk.ac.ox.krr.logmap2.reasoning; - -/* - * This file is part of the OWL API. - * - * The contents of this file are subject to the LGPL License, Version 3.0. - * - * Copyright (C) 2011, The University of Manchester - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/. - * - * - * Alternatively, the contents of this file may be used under the terms of the Apache License, Version 2.0 - * in which case, the provisions of the Apache License Version 2.0 are applicable instead of those above. - * - * Copyright 2011, University of Manchester - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Stack; - -import org.semanticweb.owlapi.model.AxiomType; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyExpression; -import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owlapi.model.OWLIndividual; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLObject; -import org.semanticweb.owlapi.model.OWLObjectIntersectionOf; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; -import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLSameIndividualAxiom; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.reasoner.AxiomNotInProfileException; -import org.semanticweb.owlapi.reasoner.BufferingMode; -import org.semanticweb.owlapi.reasoner.ClassExpressionNotInProfileException; -import org.semanticweb.owlapi.reasoner.FreshEntitiesException; -import org.semanticweb.owlapi.reasoner.FreshEntityPolicy; -import org.semanticweb.owlapi.reasoner.InconsistentOntologyException; -import org.semanticweb.owlapi.reasoner.IndividualNodeSetPolicy; -import org.semanticweb.owlapi.reasoner.InferenceType; -import org.semanticweb.owlapi.reasoner.Node; -import org.semanticweb.owlapi.reasoner.NodeSet; -import org.semanticweb.owlapi.reasoner.NullReasonerProgressMonitor; -import org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration; -import org.semanticweb.owlapi.reasoner.ReasonerInterruptedException; -import org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor; -import org.semanticweb.owlapi.reasoner.TimeOutException; -import org.semanticweb.owlapi.reasoner.UnsupportedEntailmentTypeException; -import org.semanticweb.owlapi.reasoner.impl.DefaultNode; -import org.semanticweb.owlapi.reasoner.impl.DefaultNodeSet; -import org.semanticweb.owlapi.reasoner.impl.OWLClassNode; -import org.semanticweb.owlapi.reasoner.impl.OWLClassNodeSet; -import org.semanticweb.owlapi.reasoner.impl.OWLDataPropertyNode; -import org.semanticweb.owlapi.reasoner.impl.OWLDataPropertyNodeSet; -import org.semanticweb.owlapi.reasoner.impl.OWLNamedIndividualNode; -import org.semanticweb.owlapi.reasoner.impl.OWLNamedIndividualNodeSet; -import org.semanticweb.owlapi.reasoner.impl.OWLObjectPropertyNode; -import org.semanticweb.owlapi.reasoner.impl.OWLObjectPropertyNodeSet; -import org.semanticweb.owlapi.reasoner.impl.OWLReasonerBase; -import org.semanticweb.owlapi.util.CollectionFactory; -import org.semanticweb.owlapi.util.OWLObjectPropertyManager; -import org.semanticweb.owlapi.util.Version; - -/** - * Author: Matthew Horridge
    - * The University of Manchester
    - * Information Management Group
    - * Date: 04-Dec-2009 - *

    - * This is a simple structural reasoner that essentially answers with told information. It is incomplete. - */ -public class StructuralReasoner2 extends OWLReasonerBase { - - private final ClassHierarchyInfo classHierarchyInfo = new ClassHierarchyInfo(); - - private final ObjectPropertyHierarchyInfo objectPropertyHierarchyInfo = new ObjectPropertyHierarchyInfo(); - - private final DataPropertyHierarchyInfo dataPropertyHierarchyInfo = new DataPropertyHierarchyInfo(); - - - private static final Version version = new Version(1, 0, 0, 0); - - private boolean interrupted = false; - - protected final ReasonerProgressMonitor pm; - - private boolean prepared = false; - - /** - * @param rootOntology the ontology - * @param configuration the reasoner configuration - * @param bufferingMode the buffering mode - */ - public StructuralReasoner2(OWLOntology rootOntology, OWLReasonerConfiguration configuration, BufferingMode bufferingMode) { - super(rootOntology, configuration, bufferingMode); - pm = configuration.getProgressMonitor()==null?new NullReasonerProgressMonitor():configuration.getProgressMonitor(); - prepareReasoner(); - } - - /** - * Gets the name of this reasoner. - * @return A string that represents the name of this reasoner. - */ - public String getReasonerName() { - return "Structural Reasoner"; - } - - - @Override - public FreshEntityPolicy getFreshEntityPolicy() { - return FreshEntityPolicy.ALLOW; - } - - /** - * Gets the IndividualNodeSetPolicy in use by this reasoner. The policy is set at reasoner creation time. - * @return The policy. - */ - @Override - public IndividualNodeSetPolicy getIndividualNodeSetPolicy() { - return IndividualNodeSetPolicy.BY_NAME; - } - - /** - * Gets the version of this reasoner. - * @return The version of this reasoner. Not null. - */ - public Version getReasonerVersion() { - return version; - } - - @Override - protected void handleChanges(Set addAxioms, Set removeAxioms) { - handleChanges(addAxioms, removeAxioms, classHierarchyInfo); - handleChanges(addAxioms, removeAxioms, objectPropertyHierarchyInfo); - handleChanges(addAxioms, removeAxioms, dataPropertyHierarchyInfo); - } - - private void handleChanges(Set added, Set removed, HierarchyInfo hierarchyInfo) { - Set sig = hierarchyInfo.getEntitiesInSignature(added); - sig.addAll(hierarchyInfo.getEntitiesInSignature(removed)); - hierarchyInfo.processChanges(sig, added, removed); - - } - - public void interrupt() { - interrupted = true; - } - - private void ensurePrepared() { - if (!prepared) { - prepareReasoner(); - } - } - - /** - * @throws ReasonerInterruptedException on interruption - * @throws TimeOutException on timeout - */ - public void prepareReasoner() throws ReasonerInterruptedException, TimeOutException { - classHierarchyInfo.computeHierarchy(); - objectPropertyHierarchyInfo.computeHierarchy(); - dataPropertyHierarchyInfo.computeHierarchy(); - prepared = true; - } - @SuppressWarnings("unused") - public void precomputeInferences(InferenceType... inferenceTypes) throws ReasonerInterruptedException, TimeOutException, InconsistentOntologyException { - prepareReasoner(); - } - - @SuppressWarnings("unused") - public boolean isPrecomputed(InferenceType inferenceType) { - return true; - } - - public Set getPrecomputableInferenceTypes() { - return CollectionFactory.createSet(InferenceType.CLASS_HIERARCHY, InferenceType.OBJECT_PROPERTY_HIERARCHY, InferenceType.DATA_PROPERTY_HIERARCHY); - } - - private void throwExceptionIfInterrupted() { - if (interrupted) { - interrupted = false; - throw new ReasonerInterruptedException(); - } - } - - - ////////////////////////////////////////////////////////////////////////////////////////////////////// - - - public boolean isConsistent() throws ReasonerInterruptedException, TimeOutException { - return true; - } - - public boolean isSatisfiable(OWLClassExpression classExpression) throws ReasonerInterruptedException, TimeOutException, ClassExpressionNotInProfileException, FreshEntitiesException, InconsistentOntologyException { - return !classExpression.isAnonymous() && !getEquivalentClasses(classExpression.asOWLClass()).contains(getDataFactory().getOWLNothing()); - } - - public Node getUnsatisfiableClasses() throws ReasonerInterruptedException, TimeOutException { - return OWLClassNode.getBottomNode(); - } - - public boolean isEntailed(OWLAxiom axiom) throws ReasonerInterruptedException, UnsupportedEntailmentTypeException, TimeOutException, AxiomNotInProfileException, FreshEntitiesException, InconsistentOntologyException { - return getRootOntology().containsAxiomIgnoreAnnotations(axiom, true); - } - - public boolean isEntailed(Set axioms) throws ReasonerInterruptedException, UnsupportedEntailmentTypeException, TimeOutException, AxiomNotInProfileException, FreshEntitiesException, InconsistentOntologyException { - for (OWLAxiom ax : axioms) { - if (!getRootOntology().containsAxiomIgnoreAnnotations(ax, true)) { - return false; - } - } - return true; - } - - @SuppressWarnings("unused") - public boolean isEntailmentCheckingSupported(AxiomType axiomType) { - return false; - } - - public Node getTopClassNode() { - ensurePrepared(); - return classHierarchyInfo.getEquivalents(getDataFactory().getOWLThing()); - } - - public Node getBottomClassNode() { - ensurePrepared(); - return classHierarchyInfo.getEquivalents(getDataFactory().getOWLNothing()); - } - - public NodeSet getSubClasses(OWLClassExpression ce, boolean direct) throws InconsistentOntologyException, ClassExpressionNotInProfileException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - OWLClassNodeSet ns = new OWLClassNodeSet(); - if (!ce.isAnonymous()) { - ensurePrepared(); - return classHierarchyInfo.getNodeHierarchyChildren(ce.asOWLClass(), direct, ns); - } - return ns; - } - - public NodeSet getSuperClasses(OWLClassExpression ce, boolean direct) throws InconsistentOntologyException, ClassExpressionNotInProfileException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - OWLClassNodeSet ns = new OWLClassNodeSet(); - if (!ce.isAnonymous()) { - ensurePrepared(); - return classHierarchyInfo.getNodeHierarchyParents(ce.asOWLClass(), direct, ns); - } - return ns; - } - - public Node getEquivalentClasses(OWLClassExpression ce) throws InconsistentOntologyException, ClassExpressionNotInProfileException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - if (!ce.isAnonymous()) { - return classHierarchyInfo.getEquivalents(ce.asOWLClass()); - } - else { - return new OWLClassNode(); - } - } - - public NodeSet getDisjointClasses(OWLClassExpression ce) { - ensurePrepared(); - OWLClassNodeSet nodeSet = new OWLClassNodeSet(); - if (!ce.isAnonymous()) { - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLDisjointClassesAxiom ax : ontology.getDisjointClassesAxioms(ce.asOWLClass())) { - for (OWLClassExpression op : ax.getClassExpressions()) { - if (!op.isAnonymous()) { - nodeSet.addNode(getEquivalentClasses(op)); - } - } - } - } - } - return nodeSet; - } - - public Node getTopObjectPropertyNode() { - ensurePrepared(); - return objectPropertyHierarchyInfo.getEquivalents(getDataFactory().getOWLTopObjectProperty()); - } - - public Node getBottomObjectPropertyNode() { - ensurePrepared(); - return objectPropertyHierarchyInfo.getEquivalents(getDataFactory().getOWLBottomObjectProperty()); - } - - public NodeSet getSubObjectProperties(OWLObjectPropertyExpression pe, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - OWLObjectPropertyNodeSet ns = new OWLObjectPropertyNodeSet(); - ensurePrepared(); - return objectPropertyHierarchyInfo.getNodeHierarchyChildren(pe, direct, ns); - } - - public NodeSet getSuperObjectProperties(OWLObjectPropertyExpression pe, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - OWLObjectPropertyNodeSet ns = new OWLObjectPropertyNodeSet(); - ensurePrepared(); - return objectPropertyHierarchyInfo.getNodeHierarchyParents(pe, direct, ns); - } - - public Node getEquivalentObjectProperties(OWLObjectPropertyExpression pe) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - return objectPropertyHierarchyInfo.getEquivalents(pe); - } - - @SuppressWarnings("unused") - public NodeSet getDisjointObjectProperties(OWLObjectPropertyExpression pe) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - return new OWLObjectPropertyNodeSet(); - } - - public Node getInverseObjectProperties(OWLObjectPropertyExpression pe) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - OWLObjectPropertyExpression inv = pe.getInverseProperty().getSimplified(); - return getEquivalentObjectProperties(inv); - } - - public NodeSet getObjectPropertyDomains(OWLObjectPropertyExpression pe, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - - ensurePrepared(); - DefaultNodeSet result = new OWLClassNodeSet(); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLObjectPropertyDomainAxiom axiom : ontology.getObjectPropertyDomainAxioms(pe)) { - result.addNode(getEquivalentClasses(axiom.getDomain())); - if (!direct) { - result.addAllNodes(getSuperClasses(axiom.getDomain(), false).getNodes()); - } - } - - for (OWLObjectPropertyExpression invPe : getInverseObjectProperties(pe).getEntities()) { - for (OWLObjectPropertyRangeAxiom axiom : ontology.getObjectPropertyRangeAxioms(invPe)) { - result.addNode(getEquivalentClasses(axiom.getRange())); - if (!direct) { - result.addAllNodes(getSuperClasses(axiom.getRange(), false).getNodes()); - } - } - } - } - return result; - } - - public NodeSet getObjectPropertyRanges(OWLObjectPropertyExpression pe, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - DefaultNodeSet result = new OWLClassNodeSet(); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLObjectPropertyRangeAxiom axiom : ontology.getObjectPropertyRangeAxioms(pe)) { - result.addNode(getEquivalentClasses(axiom.getRange())); - if (!direct) { - result.addAllNodes(getSuperClasses(axiom.getRange(), false).getNodes()); - } - } - for (OWLObjectPropertyExpression invPe : getInverseObjectProperties(pe).getEntities()) { - for (OWLObjectPropertyDomainAxiom axiom : ontology.getObjectPropertyDomainAxioms(invPe)) { - result.addNode(getEquivalentClasses(axiom.getDomain())); - if (!direct) { - result.addAllNodes(getSuperClasses(axiom.getDomain(), false).getNodes()); - } - } - } - } - return result; - } - - public Node getTopDataPropertyNode() { - ensurePrepared(); - return dataPropertyHierarchyInfo.getEquivalents(getDataFactory().getOWLTopDataProperty()); - } - - public Node getBottomDataPropertyNode() { - ensurePrepared(); - return dataPropertyHierarchyInfo.getEquivalents(getDataFactory().getOWLBottomDataProperty()); - } - - public NodeSet getSubDataProperties(OWLDataProperty pe, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - OWLDataPropertyNodeSet ns = new OWLDataPropertyNodeSet(); - return dataPropertyHierarchyInfo.getNodeHierarchyChildren(pe, direct, ns); - } - - public NodeSet getSuperDataProperties(OWLDataProperty pe, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - OWLDataPropertyNodeSet ns = new OWLDataPropertyNodeSet(); - return dataPropertyHierarchyInfo.getNodeHierarchyParents(pe, direct, ns); - } - - public Node getEquivalentDataProperties(OWLDataProperty pe) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - return dataPropertyHierarchyInfo.getEquivalents(pe); - } - - public NodeSet getDisjointDataProperties(OWLDataPropertyExpression pe) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - DefaultNodeSet result = new OWLDataPropertyNodeSet(); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLDisjointDataPropertiesAxiom axiom : ontology.getDisjointDataPropertiesAxioms(pe.asOWLDataProperty())) { - for (OWLDataPropertyExpression dpe : axiom.getPropertiesMinus(pe)) { - if (!dpe.isAnonymous()) { - result.addNode(dataPropertyHierarchyInfo.getEquivalents(dpe.asOWLDataProperty())); - result.addAllNodes(getSubDataProperties(dpe.asOWLDataProperty(), false).getNodes()); - } - } - } - } - return result; - } - - public NodeSet getDataPropertyDomains(OWLDataProperty pe, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - DefaultNodeSet result = new OWLClassNodeSet(); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLDataPropertyDomainAxiom axiom : ontology.getDataPropertyDomainAxioms(pe)) { - result.addNode(getEquivalentClasses(axiom.getDomain())); - if (!direct) { - result.addAllNodes(getSuperClasses(axiom.getDomain(), false).getNodes()); - } - } - } - return result; - } - - public NodeSet getTypes(OWLNamedIndividual ind, boolean direct) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - DefaultNodeSet result = new OWLClassNodeSet(); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLClassAssertionAxiom axiom : ontology.getClassAssertionAxioms(ind)) { - OWLClassExpression ce = axiom.getClassExpression(); - if (!ce.isAnonymous()) { - result.addNode(classHierarchyInfo.getEquivalents(ce.asOWLClass())); - if (!direct) { - result.addAllNodes(getSuperClasses(ce, false).getNodes()); - } - } - } - } - return result; - } - - public NodeSet getInstances(OWLClassExpression ce, boolean direct) throws InconsistentOntologyException, ClassExpressionNotInProfileException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - DefaultNodeSet result = new OWLNamedIndividualNodeSet(); - if (!ce.isAnonymous()) { - OWLClass cls = ce.asOWLClass(); - Set clses = new HashSet(); - clses.add(cls); - if (!direct) { - clses.addAll(getSubClasses(cls, false).getFlattened()); - } - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLClass curCls : clses) { - for (OWLClassAssertionAxiom axiom : ontology.getClassAssertionAxioms(curCls)) { - OWLIndividual individual = axiom.getIndividual(); - if (!individual.isAnonymous()) { - if (getIndividualNodeSetPolicy().equals(IndividualNodeSetPolicy.BY_SAME_AS)) { - result.addNode(getSameIndividuals(individual.asOWLNamedIndividual())); - } - else { - result.addNode(new OWLNamedIndividualNode(individual.asOWLNamedIndividual())); - } - } - } - } - } - } - return result; - } - - public NodeSet getObjectPropertyValues(OWLNamedIndividual ind, OWLObjectPropertyExpression pe) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - OWLNamedIndividualNodeSet result = new OWLNamedIndividualNodeSet(); - Node inverses = getInverseObjectProperties(pe); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLObjectPropertyAssertionAxiom axiom : ontology.getObjectPropertyAssertionAxioms(ind)) { - if (!axiom.getObject().isAnonymous()) { - if (axiom.getProperty().getSimplified().equals(pe.getSimplified())) { - if (getIndividualNodeSetPolicy().equals(IndividualNodeSetPolicy.BY_SAME_AS)) { - result.addNode(getSameIndividuals(axiom.getObject().asOWLNamedIndividual())); - } - else { - result.addNode(new OWLNamedIndividualNode(axiom.getObject().asOWLNamedIndividual())); - } - } - } - // Inverse of pe - if (axiom.getObject().equals(ind) && !axiom.getSubject().isAnonymous()) { - OWLObjectPropertyExpression invPe = axiom.getProperty().getInverseProperty().getSimplified(); - if (!invPe.isAnonymous() && inverses.contains(invPe.asOWLObjectProperty())) { - if (getIndividualNodeSetPolicy().equals(IndividualNodeSetPolicy.BY_SAME_AS)) { - result.addNode(getSameIndividuals(axiom.getObject().asOWLNamedIndividual())); - } - else { - result.addNode(new OWLNamedIndividualNode(axiom.getObject().asOWLNamedIndividual())); - } - } - } - - } - } - // Could do other stuff like inspecting owl:hasValue restrictions - return result; - } - - /** - * Gets the data property values for the specified individual and data property. - * @param ind The individual that is the subject of the data property values - * @param pe The data property whose values are to be retrieved for the specified individual - * @return A set of OWLLiterals containing literals such that for each literal l in the - * set, either there is an explicit data property assertion in the set of reasoner axioms - * DataPropertyAssertion(pe, ind, l), or, there is an explicit - * data property assertion in the set of reasoner axioms DataPropertyAssertion(S, ind, l) and - * the set of reasoner axioms entails SubDataPropertyOf(S, pe). - * @throws InconsistentOntologyException if the imports closure of the root ontology is inconsistent - * @throws org.semanticweb.owlapi.reasoner.FreshEntitiesException - * if the signature of the individual and property is not contained within the signature - * of the imports closure of the root ontology and the undeclared entity policy of this reasoner is set to {@link org.semanticweb.owlapi.reasoner.FreshEntityPolicy#DISALLOW}. - * @throws ReasonerInterruptedException if the reasoning process was interrupted for any particular reason (for example if - * reasoning was cancelled by a client process) - * @throws TimeOutException if the reasoner timed out during a basic reasoning operation. See {@link #getTimeOut()}. - */ - public Set getDataPropertyValues(OWLNamedIndividual ind, OWLDataProperty pe) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - Set literals = new HashSet(); - Set superProperties = getSuperDataProperties(pe, false).getFlattened(); - superProperties.addAll(getEquivalentDataProperties(pe).getEntities()); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLDataPropertyAssertionAxiom axiom : ontology.getDataPropertyAssertionAxioms(ind)) { - if (superProperties.contains(axiom.getProperty().asOWLDataProperty())) { - literals.add(axiom.getObject()); - } - } - } - return literals; - } - - public Node getSameIndividuals(OWLNamedIndividual ind) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - ensurePrepared(); - Set inds = new HashSet(); - Set processed = new HashSet(); - List stack = new ArrayList(); - stack.add(ind); - while (!stack.isEmpty()) { - OWLNamedIndividual currentInd = stack.remove(0); - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLSameIndividualAxiom axiom : ontology.getSameIndividualAxioms(currentInd)) { - if (!processed.contains(axiom)) { - processed.add(axiom); - for (OWLIndividual i : axiom.getIndividuals()) { - if (!i.isAnonymous()) { - OWLNamedIndividual namedInd = i.asOWLNamedIndividual(); - if (!inds.contains(namedInd)) { - inds.add(namedInd); - stack.add(namedInd); - } - } - } - } - } - } - } - - return new OWLNamedIndividualNode(inds); - } - - @SuppressWarnings("unused") - public NodeSet getDifferentIndividuals(OWLNamedIndividual ind) throws InconsistentOntologyException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - return new OWLNamedIndividualNodeSet(); - } - - - protected OWLDataFactory getDataFactory() { - return getRootOntology().getOWLOntologyManager().getOWLDataFactory(); - } - /** - * @param showBottomNode true if bottom node is to be showed - */ - public void dumpClassHierarchy(boolean showBottomNode) { - dumpClassHierarchy(OWLClassNode.getTopNode(), 0, showBottomNode); - } - - private void dumpClassHierarchy(Node cls, int level, boolean showBottomNode) { - if (!showBottomNode && cls.isBottomNode()) { - return; - } - printIndent(level); - OWLClass representative = cls.getRepresentativeElement(); - System.out.println(getEquivalentClasses(representative)); - for (Node subCls : getSubClasses(representative, true)) { - dumpClassHierarchy(subCls, level + 1, showBottomNode); - } - } - - /** - * @param showBottomNode true if bottom node is to be showed - */ - public void dumpObjectPropertyHierarchy(boolean showBottomNode) { - dumpObjectPropertyHierarchy(OWLObjectPropertyNode.getTopNode(), 0, showBottomNode); - } - - private void dumpObjectPropertyHierarchy(Node cls, int level, boolean showBottomNode) { - if (!showBottomNode && cls.isBottomNode()) { - return; - } - printIndent(level); - OWLObjectPropertyExpression representative = cls.getRepresentativeElement(); - System.out.println(getEquivalentObjectProperties(representative)); - for (Node subProp : getSubObjectProperties(representative, true)) { - dumpObjectPropertyHierarchy(subProp, level + 1, showBottomNode); - } - } - - /** - * @param showBottomNode true if bottom node is to be showed - */ - public void dumpDataPropertyHierarchy(boolean showBottomNode) { - dumpDataPropertyHierarchy(OWLDataPropertyNode.getTopNode(), 0, showBottomNode); - } - - private void dumpDataPropertyHierarchy(Node cls, int level, boolean showBottomNode) { - if (!showBottomNode && cls.isBottomNode()) { - return; - } - printIndent(level); - OWLDataProperty representative = cls.getRepresentativeElement(); - System.out.println(getEquivalentDataProperties(representative)); - for (Node subProp : getSubDataProperties(representative, true)) { - dumpDataPropertyHierarchy(subProp, level + 1, showBottomNode); - } - } - - - private void printIndent(int level) { - for (int i = 0; i < level; i++) { - System.out.print(" "); - } - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////// - ////// HierarchyInfo - ////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - private abstract class HierarchyInfo { - - private RawHierarchyProvider rawParentChildProvider; - - /** - * The entity that always appears in the top node in the hierarchy - */ - private T topEntity; - - /** - * The entity that always appears as the bottom node in the hierarchy - */ - private T bottomEntity; - - private Set directChildrenOfTopNode = new HashSet(); - - private Set directParentsOfBottomNode = new HashSet(); - - private NodeCache nodeCache; - - - private String name; - - private int classificationSize; - - public HierarchyInfo(String name, T topEntity, T bottomEntity, RawHierarchyProvider rawParentChildProvider) { - this.topEntity = topEntity; - this.bottomEntity = bottomEntity; - this.nodeCache = new NodeCache(this); - this.rawParentChildProvider = rawParentChildProvider; - this.name = name; - } - - public RawHierarchyProvider getRawParentChildProvider() { - return rawParentChildProvider; - } - - /** - * Gets the set of relevant entities from the specified ontology - * @param ont The ontology - * @return A set of entities to be "classified" - */ - protected abstract Set getEntities(OWLOntology ont); - - /** - * Creates a node for a given set of entities - * @param cycle The set of entities - * @return A node - */ - protected abstract DefaultNode createNode(Set cycle); - - protected abstract DefaultNode createNode(); - - /** - * Gets the set of relevant entities in a particular axiom - * @param ax The axiom - * @return The set of relevant entities in the signature of the specified axiom - */ - protected abstract Set getEntitiesInSignature(OWLAxiom ax); - - - private Set getEntitiesInSignature(Set axioms) { - Set result = new HashSet(); - for (OWLAxiom ax : axioms) { - result.addAll(getEntitiesInSignature(ax)); - } - return result; - } - - public void computeHierarchy() { - pm.reasonerTaskStarted("Computing " + name + " hierarchy"); - pm.reasonerTaskBusy(); - nodeCache.clear(); - Map> cache = new HashMap>(); - Set entities = new HashSet(); - for (OWLOntology ont : getRootOntology().getImportsClosure()) { - entities.addAll(getEntities(ont)); - } - classificationSize = entities.size(); - pm.reasonerTaskProgressChanged(0, classificationSize); - updateForSignature(entities, cache); - pm.reasonerTaskStopped(); - } - - - private void updateForSignature(Set signature, Map> cache) { - HashSet> cyclesResult = new HashSet>(); - Set processed = new HashSet(); - nodeCache.clearTopNode(); - nodeCache.clearBottomNode(); - nodeCache.clearNodes(signature); - - directChildrenOfTopNode.removeAll(signature); - - Set equivTopOrChildrenOfTop = new HashSet(); - Set equivBottomOrParentsOfBottom = new HashSet(); - for (T entity : signature) { - if (!processed.contains(entity)) { - pm.reasonerTaskProgressChanged(processed.size(), signature.size()); - tarjan(entity, 0, new Stack(), new HashMap(), new HashMap(), cyclesResult, processed, new HashSet(), cache, equivTopOrChildrenOfTop, equivBottomOrParentsOfBottom); - throwExceptionIfInterrupted(); - } - } - // Store new cycles - for (Set cycle : cyclesResult) { - nodeCache.addNode(cycle); - } - - directChildrenOfTopNode.addAll(equivTopOrChildrenOfTop); - directChildrenOfTopNode.removeAll(nodeCache.getTopNode().getEntities()); - - directParentsOfBottomNode.addAll(equivBottomOrParentsOfBottom); - directParentsOfBottomNode.removeAll(nodeCache.getBottomNode().getEntities()); - - - // Now check that each found cycle has a proper parent an child - for (Set node : cyclesResult) { - if (!node.contains(topEntity) && !node.contains(bottomEntity)) { - boolean childOfTop = true; - for (T element : node) { - Collection parents = rawParentChildProvider.getParents(element); - parents.removeAll(node); - parents.removeAll(nodeCache.getTopNode().getEntities()); - if (!parents.isEmpty()) { - childOfTop = false; - break; - } - } - if (childOfTop) { - directChildrenOfTopNode.addAll(node); - } - - boolean parentOfBottom = true; - for (T element : node) { - Collection children = rawParentChildProvider.getChildren(element); - children.removeAll(node); - children.removeAll(nodeCache.getBottomNode().getEntities()); - if (!children.isEmpty()) { - parentOfBottom = false; - break; - } - } - if (parentOfBottom) { - directParentsOfBottomNode.addAll(node); - } - } - - } - - } - - /** - * Processes the specified signature that represents the signature of potential changes - * @param signature The signature - * @param added added axioms - * @param removed removed axioms - */ - @SuppressWarnings("unused") - public void processChanges(Set signature, Set added, Set removed) { - updateForSignature(signature, null); - } - - - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - - /** - * Applies the tarjan algorithm for a given entity. This computes the cycle that the entity is involved in (if - * any). - * @param entity The entity - * @param index index - * @param stack stack - * @param indexMap index map - * @param lowlinkMap low link map - * @param result result - * @param processed processed - * @param stackEntities stack entities - * @param cache A cache of children to parents - may be null if no caching is to take place. - * @param childrenOfTop A set of entities that have a raw parent that is the top entity - * @param parentsOfBottom A set of entities that have a raw parent that is the bottom entity - */ - public void tarjan(T entity, int index, Stack stack, Map indexMap, Map lowlinkMap, Set> result, Set processed, Set stackEntities, Map> cache, Set childrenOfTop, Set parentsOfBottom) { - throwExceptionIfInterrupted(); - if (processed.add(entity)) { - Collection rawChildren = rawParentChildProvider.getChildren(entity); - if (rawChildren.isEmpty() || rawChildren.contains(bottomEntity)) { - parentsOfBottom.add(entity); - } - } - pm.reasonerTaskProgressChanged(processed.size(), classificationSize); - indexMap.put(entity, index); - lowlinkMap.put(entity, index); - index = index + 1; - stack.push(entity); - stackEntities.add(entity); - - // Get the raw parents - cache if necessary - Collection rawParents = null; - if (cache != null) { - // We are therefore caching raw parents of children. - rawParents = cache.get(entity); - if (rawParents == null) { - // Not in cache! - rawParents = rawParentChildProvider.getParents(entity); - // Note down if our entity is a - if (rawParents.isEmpty() || rawParents.contains(topEntity)) { - childrenOfTop.add(entity); - } - cache.put(entity, rawParents); - - } - } - else { - rawParents = rawParentChildProvider.getParents(entity); - // Note down if our entity is a - if (rawParents.isEmpty() || rawParents.contains(topEntity)) { - childrenOfTop.add(entity); - } - } - - - for (T superEntity : rawParents) { - if (!indexMap.containsKey(superEntity)) { - tarjan(superEntity, index, stack, indexMap, lowlinkMap, result, processed, stackEntities, cache, childrenOfTop, parentsOfBottom); - lowlinkMap.put(entity, Math.min(lowlinkMap.get(entity), lowlinkMap.get(superEntity))); - } - else if (stackEntities.contains(superEntity)) { - lowlinkMap.put(entity, Math.min(lowlinkMap.get(entity), indexMap.get(superEntity))); - } - } - if (lowlinkMap.get(entity).equals(indexMap.get(entity))) { - Set scc = new HashSet(); - while (true) { - T clsPrime = stack.pop(); - stackEntities.remove(clsPrime); - scc.add(clsPrime); - if (clsPrime.equals(entity)) { - break; - } - } - if (scc.size() > 1) { - // We ADD a cycle - result.add(scc); - } - } - } - - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - public NodeSet getNodeHierarchyChildren(T parent, boolean direct, DefaultNodeSet ns) { - - try { - Node node = nodeCache.getNode(parent); - - if (node.isBottomNode()) { - return ns; - } - - - Set directChildren = new HashSet(); - for (T equiv : node) { - directChildren.addAll(rawParentChildProvider.getChildren(equiv)); - if(directParentsOfBottomNode.contains(equiv)) { - ns.addNode(nodeCache.getBottomNode()); - } - } - directChildren.removeAll(node.getEntities()); - - if (node.isTopNode()) { - // Special treatment - directChildren.addAll(directChildrenOfTopNode); - } - - for (Node childNode : nodeCache.getNodes(directChildren)) { - ns.addNode(childNode); - } - - - if (!direct) { - for (T child : directChildren) { - - getNodeHierarchyChildren(child, direct, ns); - } - } - } - catch (StackOverflowError e){ - //to catch StackOverflowError error - System.err.println("StackOverflowError in Structural reasoner!!"); - return ns; - } - - - return ns; - } - - public NodeSet getNodeHierarchyParents(T child, boolean direct, DefaultNodeSet ns) { - - try{ - - Node node = nodeCache.getNode(child); - - if (node.isTopNode()) { - return ns; - } - - - Set directParents = new HashSet(); - for (T equiv : node) { - directParents.addAll(rawParentChildProvider.getParents(equiv)); - if(directChildrenOfTopNode.contains(equiv)) { - ns.addNode(nodeCache.getTopNode()); - } - } - directParents.removeAll(node.getEntities()); - - if (node.isBottomNode()) { - // Special treatment - directParents.addAll(directParentsOfBottomNode); - } - - for (Node parentNode : nodeCache.getNodes(directParents)) { - ns.addNode(parentNode); - } - - if (!direct) { - for(T parent : directParents) { - getNodeHierarchyParents(parent, direct, ns); - } - } - } - catch (StackOverflowError e){ - //to catch StackOverflowError error - System.err.println("StackOverflowError in Structural reasoner!!"); - return ns; - } - return ns; - } - - public Node getEquivalents(T element) { - return nodeCache.getNode(element); - } - } - - - private static class NodeCache { - - private HierarchyInfo hierarchyInfo; - - private Node topNode; - - private Node bottomNode; - - private Map> map = new HashMap>(); - - protected NodeCache(HierarchyInfo hierarchyInfo) { - this.hierarchyInfo = hierarchyInfo; - clearTopNode(); - clearBottomNode(); - } - - public void addNode(Node node) { - for (T element : node.getEntities()) { - map.put(element, node); - if (element.isTopEntity()) { - topNode = node; - } - else if (element.isBottomEntity()) { - bottomNode = node; - } - } - } - - public Set> getNodes(Set elements) { - Set> result = new HashSet>(); - for (T element : elements) { - result.add(getNode(element)); - } - return result; - } - - - public Node getNode(T containing) { - Node parentNode = map.get(containing); - if (parentNode != null) { - return parentNode; - } - else { - return hierarchyInfo.createNode(Collections.singleton(containing)); - } - } - - public void addNode(Set elements) { - addNode(hierarchyInfo.createNode(elements)); - } - - public Node getTopNode() { - return topNode; - } - - public Node getBottomNode() { - return bottomNode; - } - - - public void clearTopNode() { - removeNode(hierarchyInfo.topEntity); - topNode = hierarchyInfo.createNode(Collections.singleton(hierarchyInfo.topEntity)); - addNode(topNode); - } - - public void clearBottomNode() { - removeNode(hierarchyInfo.bottomEntity); - bottomNode = hierarchyInfo.createNode(Collections.singleton(hierarchyInfo.bottomEntity)); - addNode(bottomNode); - } - - public void clearNodes(Set containing) { - for (T entity : containing) { - removeNode(entity); - } - } - - public void clear() { - map.clear(); - clearTopNode(); - clearBottomNode(); - } - - public void removeNode(T containing) { - Node node = map.remove(containing); - if (node != null) { - for (T object : node.getEntities()) { - map.remove(object); - } - } - } - } - - private class ClassHierarchyInfo extends HierarchyInfo { - - public ClassHierarchyInfo() { - super("class", getDataFactory().getOWLThing(), getDataFactory().getOWLNothing(), new RawClassHierarchyProvider()); - } - - - @Override - protected Set getEntitiesInSignature(OWLAxiom ax) { - return ax.getClassesInSignature(); - } - - @Override - protected DefaultNode createNode(Set cycle) { - return new OWLClassNode(cycle); - } - - @Override - protected Set getEntities(OWLOntology ont) { - return ont.getClassesInSignature(); - } - - @Override - protected DefaultNode createNode() { - return new OWLClassNode(); - } - } - - private class ObjectPropertyHierarchyInfo extends HierarchyInfo { - - public ObjectPropertyHierarchyInfo() { - super("object property", getDataFactory().getOWLTopObjectProperty(), getDataFactory().getOWLBottomObjectProperty(), new RawObjectPropertyHierarchyProvider()); - } - - @Override - protected Set getEntitiesInSignature(OWLAxiom ax) { - Set result = new HashSet(); - for (OWLObjectProperty property : ax.getObjectPropertiesInSignature()) { - result.add(property); - result.add(property.getInverseProperty()); - } - return result; - } - - @Override - protected Set getEntities(OWLOntology ont) { - Set result = new HashSet(); - for (OWLObjectPropertyExpression property : ont.getObjectPropertiesInSignature()) { - result.add(property); - result.add(property.getInverseProperty()); - } - return result; - } - - @Override - protected DefaultNode createNode(Set cycle) { - return new OWLObjectPropertyNode(cycle); - } - - @Override - protected DefaultNode createNode() { - return new OWLObjectPropertyNode(); - } - - /** - * Processes the specified signature that represents the signature of potential changes - * @param signature The signature - */ - @Override - public void processChanges(Set signature, Set added, Set removed) { - boolean rebuild = false; - for (OWLAxiom ax : added) { - if(ax instanceof OWLObjectPropertyAxiom) { - rebuild = true; - break; - } - } - if(!rebuild) { - for(OWLAxiom ax : removed) { - if(ax instanceof OWLObjectPropertyAxiom) { - rebuild = true; - break; - } - } - } - if(rebuild) { - ((RawObjectPropertyHierarchyProvider) getRawParentChildProvider()).rebuild(); - } - super.processChanges(signature, added, removed); - } - } - - private class DataPropertyHierarchyInfo extends HierarchyInfo { - - public DataPropertyHierarchyInfo() { - super("data property", getDataFactory().getOWLTopDataProperty(), getDataFactory().getOWLBottomDataProperty(), new RawDataPropertyHierarchyProvider()); - } - - @Override - protected Set getEntitiesInSignature(OWLAxiom ax) { - return ax.getDataPropertiesInSignature(); - } - - @Override - protected Set getEntities(OWLOntology ont) { - return ont.getDataPropertiesInSignature(); - } - - @Override - protected DefaultNode createNode(Set cycle) { - return new OWLDataPropertyNode(cycle); - } - - @Override - protected DefaultNode createNode() { - return new OWLDataPropertyNode(); - } - } - - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////////////////////////////////// - - /** - * An interface for objects who can provide the parents and children of some object. - * @param - */ - private interface RawHierarchyProvider { - - /** - * Gets the parents as asserted. These parents may also be children (resulting in equivalences). - * @param child The child whose parents are to be retrieved - * @return The raw asserted parents of the specified child. If the child does not have any parents - * then the empty set can be returned. - */ - Collection getParents(T child); - - /** - * Gets the children as asserted - * @param parent The parent whose children are to be retrieved - * @return The raw asserted children of the speicified parent - */ - Collection getChildren(T parent); - - } - - - private class RawClassHierarchyProvider implements RawHierarchyProvider { - - public Collection getParents(OWLClass child) { - Collection result = new HashSet(); - for (OWLOntology ont : getRootOntology().getImportsClosure()) { - for (OWLSubClassOfAxiom ax : ont.getSubClassAxiomsForSubClass(child)) { - OWLClassExpression superCls = ax.getSuperClass(); - if (!superCls.isAnonymous()) { - result.add(superCls.asOWLClass()); - } - else if (superCls instanceof OWLObjectIntersectionOf) { - OWLObjectIntersectionOf intersectionOf = (OWLObjectIntersectionOf) superCls; - for (OWLClassExpression conjunct : intersectionOf.asConjunctSet()) { - if (!conjunct.isAnonymous()) { - result.add(conjunct.asOWLClass()); - } - } - } - } - for (OWLEquivalentClassesAxiom ax : ont.getEquivalentClassesAxioms(child)) { - for (OWLClassExpression ce : ax.getClassExpressionsMinus(child)) { - if (!ce.isAnonymous()) { - result.add(ce.asOWLClass()); - } - else if (ce instanceof OWLObjectIntersectionOf) { - OWLObjectIntersectionOf intersectionOf = (OWLObjectIntersectionOf) ce; - for (OWLClassExpression conjunct : intersectionOf.asConjunctSet()) { - if (!conjunct.isAnonymous()) { - result.add(conjunct.asOWLClass()); - } - } - } - } - } - } - return result; - } - - public Collection getChildren(OWLClass parent) { - Collection result = new HashSet(); - for (OWLOntology ont : getRootOntology().getImportsClosure()) { - for (OWLAxiom ax : ont.getReferencingAxioms(parent)) { - if (ax instanceof OWLSubClassOfAxiom) { - OWLSubClassOfAxiom sca = (OWLSubClassOfAxiom) ax; - if (!sca.getSubClass().isAnonymous()) { - Set conjuncts = sca.getSuperClass().asConjunctSet(); - if (conjuncts.contains(parent)) { - result.add(sca.getSubClass().asOWLClass()); - } - } - } - else if (ax instanceof OWLEquivalentClassesAxiom) { - OWLEquivalentClassesAxiom eca = (OWLEquivalentClassesAxiom) ax; - for (OWLClassExpression ce : eca.getClassExpressions()) { - if (ce.containsConjunct(parent)) { - for (OWLClassExpression sub : eca.getClassExpressions()) { - if (!sub.isAnonymous() && !sub.equals(ce)) { - result.add(sub.asOWLClass()); - } - } - } - } - } - } - } - return result; - } - } - - - private class RawObjectPropertyHierarchyProvider implements RawHierarchyProvider { - - private OWLObjectPropertyManager propertyManager; - - private Map> sub2Super; - - private Map> super2Sub; - - public RawObjectPropertyHierarchyProvider() { - rebuild(); - } - - public void rebuild() { - propertyManager = new OWLObjectPropertyManager(getRootOntology().getOWLOntologyManager(), getRootOntology()); - sub2Super = propertyManager.getPropertyHierarchy(); - super2Sub = new HashMap>(); - for(OWLObjectPropertyExpression sub : sub2Super.keySet()) { - for(OWLObjectPropertyExpression superProp : sub2Super.get(sub)) { - Set subs = super2Sub.get(superProp); - if(subs == null) { - subs = new HashSet(); - super2Sub.put(superProp, subs); - } - subs.add(sub); - } - } - } - - public Collection getParents(OWLObjectPropertyExpression child) { - if(child.isBottomEntity()) { - return Collections.emptySet(); - } - Set propertyExpressions = sub2Super.get(child); - if(propertyExpressions == null) { - return Collections.emptySet(); - } - else { - return new HashSet(propertyExpressions); - } - - } - - public Collection getChildren(OWLObjectPropertyExpression parent) { - if(parent.isTopEntity()) { - return Collections.emptySet(); - } - Set propertyExpressions = super2Sub.get(parent); - if(propertyExpressions == null) { - return Collections.emptySet(); - } - else { - return new HashSet(propertyExpressions); - } - - } - } - - private class RawDataPropertyHierarchyProvider implements RawHierarchyProvider { - - public Collection getParents(OWLDataProperty child) { - Set properties = new HashSet(); - for (OWLDataPropertyExpression prop : child.getSuperProperties(getRootOntology().getImportsClosure())) { - properties.add(prop.asOWLDataProperty()); - } - return properties; - } - - public Collection getChildren(OWLDataProperty parent) { - Set properties = new HashSet(); - for (OWLDataPropertyExpression prop : parent.getSubProperties(getRootOntology().getImportsClosure())) { - properties.add(prop.asOWLDataProperty()); - } - return properties; - } - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasonerExtended.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasonerExtended.java deleted file mode 100644 index f1aec7cbc0..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/StructuralReasonerExtended.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning; - -import org.semanticweb.owlapi.reasoner.structural.*; - -import org.semanticweb.owlapi.model.*; -import org.semanticweb.owlapi.reasoner.*; -import org.semanticweb.owlapi.reasoner.impl.OWLClassNodeSet; - -/** - * Repairs a bugs in StructuralReasoner.getDisjointClasses - * @author ernesto - * - */ -public class StructuralReasonerExtended extends StructuralReasoner{ -//public class StructuralReasonerExtended extends StructuralReasoner2{ - - public StructuralReasonerExtended(OWLOntology rootOntology) { - super(rootOntology, new SimpleConfiguration(), BufferingMode.NON_BUFFERING); - } - - - /*public NodeSet getSubClasses(OWLClassExpression ce, boolean direct){ - try { - return super.getSubClasses(ce, direct); - } - catch (Exception e){ - - System.err.println(e.getMessage() + " " + e.getCause()); - e.printStackTrace(); - return null; - } - }*/ - - - /** - * It was an error in original method. the result set contained both the given class and its equivalents. - */ - public NodeSet getDisjointClasses(OWLClassExpression ce) { - //super.ensurePrepared(); - OWLClassNodeSet nodeSet = new OWLClassNodeSet(); - if (!ce.isAnonymous()) { - for (OWLOntology ontology : getRootOntology().getImportsClosure()) { - for (OWLDisjointClassesAxiom ax : ontology.getDisjointClassesAxioms(ce.asOWLClass())) { - for (OWLClassExpression op : ax.getClassExpressions()) { - if (!op.isAnonymous() && !op.equals(ce)) { //Op must be differnt to ce - nodeSet.addNode(getEquivalentClasses(op)); - } - } - } - } - } - - - - return nodeSet; - } - - - public boolean isSubClassOf(OWLClass cls1, OWLClass cls2) { - return getSubClasses(cls2, false).getFlattened().contains(cls1); - //Checks only asserted axioms!! - //isEntailed(super.getDataFactory().getOWLSubClassOfAxiom(cls1, cls2)); - } - - - public boolean areEquivalent(OWLClass cls1, OWLClass cls2) { - return (getEquivalentClasses(cls1).getEntities().contains(cls2)) || - (getEquivalentClasses(cls2).getEntities().contains(cls1)); - } - - - - public NodeSet getSubClasses(OWLClassExpression ce, boolean direct) throws InconsistentOntologyException, ClassExpressionNotInProfileException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - - OWLClassNodeSet ns = new OWLClassNodeSet(); - - try{ - //System.out.println("Class ok: " + ce.toString()); - return super.getSubClasses(ce, direct); - } - catch (StackOverflowError e){ - //to catch StackOverflowError error - System.err.println("StackOverflowError in Structural reasoner: getSubClasses for Class " + ce.toString()); - return ns; - } - } - - public NodeSet getSuperClasses(OWLClassExpression ce, boolean direct) throws InconsistentOntologyException, ClassExpressionNotInProfileException, FreshEntitiesException, ReasonerInterruptedException, TimeOutException { - - OWLClassNodeSet ns = new OWLClassNodeSet(); - - try{ - return super.getSuperClasses(ce, direct); - } - catch (StackOverflowError e){ - //to catch StackOverflowError error - System.err.println("StackOverflowError in Structural reasoner: getSuperClasses for Class " + ce.toString()); - return ns; - } - - - } - - - - public String getReasonerName(){ - return "Extended Structural Reasoner"; - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/BlackBoxExplanationExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/BlackBoxExplanationExtractor.java deleted file mode 100644 index 46ea8f6e45..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/BlackBoxExplanationExtractor.java +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning.explanation; - - -import java.util.Collections; -import java.util.Set; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLClassExpression; -import org.semanticweb.owlapi.reasoner.OWLReasoner; -import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; - -import org.semanticweb.owlapi.debugging.DebuggerClassExpressionGenerator; - -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; - -import com.clarkparsia.owlapi.explanation.*; - -/** - * - * This class uses and extends com.clarkparsia.owlapi.explanation.BlackBoxExplanation - * Integrated within the OWLAPI - * - * @author Ernesto Jimenez Ruiz - * Nov 12, 2011 - * - */ -public class BlackBoxExplanationExtractor { - - - BlackBoxExplanation bbexp; - - final ExplanationGenerator debugger; - - OWLDataFactory dataFactory; - - ExplanationProgressManager monitor; - - - public BlackBoxExplanationExtractor( - OWLOntology ontology, - OWLReasonerFactory reasonerFactory, - OWLReasoner reasoner, - int maxExplanations){ - this(ontology, reasonerFactory, reasoner, Collections.EMPTY_SET, maxExplanations); - } - - public BlackBoxExplanationExtractor( - OWLOntology ontology, - OWLReasonerFactory reasonerFactory, - OWLReasoner reasoner, - Set axioms2consider, //Only consider justifications with these axioms - int maxExplanations){ - - //dataFactory = OWLManager.getOWLDataFactory(); - dataFactory = SynchronizedOWLManager.createOWLDataFactory(); - - bbexp = new BlackBoxExplanation(ontology, reasonerFactory, reasoner); - - HSTExplanationGenerator hstGen = new HSTExplanationGenerator(bbexp); - - monitor = new ExplanationProgressManager(axioms2consider, maxExplanations); - hstGen.setProgressMonitor(monitor); - - debugger = hstGen; - - - - - } - - - public void handleExplanations(OWLAxiom ax){ - - monitor.setClearMonitor(); - - - SatisfiabilityConverter satCon = new SatisfiabilityConverter(dataFactory); - final OWLClassExpression desc = satCon.convert(ax); - debugger.getExplanations(desc); //Not necessary - - } - - public Set> getExplanations(){ - return monitor.getSetOfExplanantions(); - } - - - public int getNumberExplanations(){ - return monitor.getNumberExplanations(); - } - - public int getNumberExplanationSearch(){ - return monitor.getNumberExplanationSearch(); - } - - - public void setMaxExplanations(int maxExp){ - monitor.setMaxExplanations(maxExp); - } - - public void setMaxExplanationSearch(int maxSearch){ - monitor.setMaxExplanationSearch(maxSearch); - } - - public void setTimeOut(long miliseconds){ - monitor.setMaxTimeOut(miliseconds); - } - - public boolean isTimedOut(){ - return monitor.isCancelled(); - } - - - - /*public Set> getExplanations(OWLAxiom ax, int maxExplanations){ - - //In old codes, seems not bein used in owl api - //DebuggerClassExpressionGenerator gen = new DebuggerClassExpressionGenerator(dataFactory); - //ax.accept(gen); - - SatisfiabilityConverter satCon = new SatisfiabilityConverter(dataFactory); - final OWLClassExpression desc = satCon.convert(ax); - - - return debugger.getExplanations(desc, maxExplanations); - - //System.out.println(ax + " " + desc ); - //System.out.println(debugger); - - }*/ - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/ExplanationProgressManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/ExplanationProgressManager.java deleted file mode 100644 index 4edeed3bed..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/ExplanationProgressManager.java +++ /dev/null @@ -1,182 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning.explanation; - - -import java.util.Set; -import java.util.HashSet; - -import org.semanticweb.owlapi.model.OWLAxiom; - -import uk.ac.ox.krr.logmap2.io.LogOutput; - -import com.clarkparsia.owlapi.explanation.util.ExplanationProgressMonitor; - - -/** - * This class is necessary to monitor the extraction of justifications. - * Otherwise we are unable to track the complete extraction - * @author Ernesto Jimenez Ruiz - * Nov 20, 2011 - * - */ -public class ExplanationProgressManager implements ExplanationProgressMonitor { - - - private Set> SetOfJustAxioms = new HashSet>(); - - boolean cancelled=false; - - - //Max is important to speed up experiments - private int maxExplanations=50; - private int numberExplanations=0; - - private int maxExplanationSearch=500; //reduce if necessary - private int explanationSearch=0; - - private Set axioms2consider; - - //miliseconds - private long max_time = 60000; //60s - private long time_out; - - - public ExplanationProgressManager(Set axioms2consider, int maxExplanations){ - - this.axioms2consider = axioms2consider; - this.maxExplanations = maxExplanations; - cancelled=false; - } - - - - - - public boolean isCancelled() { - if (System.currentTimeMillis() > time_out){ - //LogOutput.print("Time out. Found explanations: " + numberExplanations); - cancelled=true; - } - - return cancelled; - - } - - - - public void foundExplanation(Set set) { - handleFoundExplanation(set); - } - - - public void foundAllExplanations() { - cancelled=true; - //LogOutput.print("Found All explanations: " + numberExplanations); - } - - - private void handleFoundExplanation(Set explanation){ - - if (cancelled)//Stop!! - return; - - explanationSearch++; - - - if (!SetOfJustAxioms.contains(explanation)){ - - //Intersection if axioms2consider is non empty - if (axioms2consider.size()>0) - explanation.retainAll(axioms2consider); - - - if (explanation.size()>0){ - - //LogOutput.print("EXP: " + explanation.toString()); - - SetOfJustAxioms.add(explanation); - - numberExplanations++; - //LogOutput.print("Found explanation: " + numberExplanations); - } - - } - //LogOutput.print("Found explanation (SEARCH): " + explanationSearch); - - - //Cancell situation - //Max of explanations + max number of equal explanantions for our interests - //if (numEqualSets>=maxNumEqualSets || numberExplanations>=maxExplanations){ - if (numberExplanations>=maxExplanations || explanationSearch > maxExplanationSearch - || System.currentTimeMillis() > time_out){ - //LogOutput.print("Time out. Found explanations: " + numberExplanations); - cancelled=true; - //foundAllExplanations(); - - } - } - - - public Set> getSetOfExplanantions(){ - return SetOfJustAxioms; - } - - public void setClearMonitor(){ - SetOfJustAxioms.clear(); - cancelled=false; - numberExplanations=0; - explanationSearch=0; - - time_out = System.currentTimeMillis() + max_time; - - - - } - - - public void setMaxExplanations(int maxExp){ - maxExplanations = maxExp; - } - - public void setMaxExplanationSearch(int maxSearch){ - maxExplanationSearch = maxSearch; - } - - - - public void setMaxTimeOut(long milisec){ - max_time = milisec; - } - - - - - public int getNumberExplanations(){ - return numberExplanations; - } - - public int getNumberExplanationSearch(){ - return explanationSearch; - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/PlanExtractor.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/PlanExtractor.java deleted file mode 100644 index c37a9a824d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/reasoning/explanation/PlanExtractor.java +++ /dev/null @@ -1,562 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning.explanation; - -import java.util.*; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.utilities.PrecomputeIndexCombination; - - -import org.semanticweb.owlapi.model.*; - - - -/** - * This class will extract repair plans of smallest size - * (Not all minimal plans are guaranteed to be extracted). - * @author Ernesto Jimenez Ruiz - * Nov 12, 2011 - * - */ -public class PlanExtractor { - - private Map ident2axiom;// = new HashMap(); - - private Map> axioms2justifications;// = new HashMap>(); - - - //Ordered by impact. - //private List listOrderedAxioms = new ArrayList(); - protected TreeSet listOrderedAxioms; - - - private PrecomputeIndexCombination precomputeIndexCombination = new PrecomputeIndexCombination(); - - - - //Ordered by size - private List> setOfRepairPlans_int;// = new ArrayList>(); - private List> setOfRepairPlans_ax;// = new ArrayList>(); - - - - private int num_justifications; - - /** - * We need to remove at least one axiom from each justifications. - * The key is to index in how many justification an axiom appears and then select - * small sets of axioms which cancel all justifications - * @param allJustifications - */ - public PlanExtractor(List> allJustifications){ - - ident2axiom = new HashMap(); - axioms2justifications = new HashMap>(); - setOfRepairPlans_int = new ArrayList>(); - setOfRepairPlans_ax = new ArrayList>(); - - - //We precompute indexes - precomputeIndexCombination.clearCombinations(); //Old calls - precomputeIndexCombination.preComputeIdentifierCombination(); - - - num_justifications = allJustifications.size(); - - - int ident=0; - - for (int index_just=0; index_just()); - //ident2axiom.put(ident, ax); - //ident++; - } - axioms2justifications.get(ax).add(index_just); - } - } - - //Order axioms by impact - orderAxiomsByImact(); - - Iterator it = listOrderedAxioms.iterator(); - - while (it.hasNext()){ - - //We add identifiers in order - ident2axiom.put(ident, it.next()); - ident++; - - } - - - - - - //LogOutput.print(axioms2justifications.toString()); - - } - - - /** - * We extract plans with a limit in number and size of axioms in plans - * @param maxNumberOfPlans - * @param maxSizeOfPlans - * @deprecated Not suitable for mappings assessment - */ - public void extractPlans_old(int maxNumberOfPlans, int maxSizeOfPlans){ - - setOfRepairPlans_int.clear(); - setOfRepairPlans_ax.clear(); - - Set> candidate_plans; - - int maxSize4Plans; - - LogOutput.printAlways("\tAxioms for plans: " + axioms2justifications.size()); - - //In case combination num is higher than num of axioms - if (maxSizeOfPlans>axioms2justifications.size()) - maxSize4Plans = axioms2justifications.size(); - else - maxSize4Plans = maxSizeOfPlans; - - - - /** - * We extract plans in order - */ - for (int size_plan=1; size_plan<=maxSize4Plans; size_plan++){ - - candidate_plans = precomputeIndexCombination.getIdentifierCombination(axioms2justifications.size(), size_plan); - - //LogOutput.print(candidate_plans.toString()); - LogOutput.print("Candidates size: " + candidate_plans.size()); - - //TODO Limit size!! - if (candidate_plans.size()>50000){//Max combination size! (for tests 50000) - - - //size_plan=maxSize4Plans-size_plan; - //LogOutput.printAlways("Reducing combinations number."); - //continue; //we limit number of candidates... - - setOfRepairPlans_int.add( - new HashSet( - precomputeIndexCombination.getMaxCombinationSet( - axioms2justifications.size()))); - - LogOutput.printAlways("Adding plan involving all axioms."); - break;//We delete all!! - - } - - //Remove from set those sets containing id's already in repair_plans - for (Set candidate_plan : candidate_plans){ - - if (isaGoodPlan(candidate_plan)){ - - //System.out.println(candidate_plan.size()); - setOfRepairPlans_int.add(new HashSet(candidate_plan)); - - } - - if (setOfRepairPlans_int.size()>=maxNumberOfPlans){ - break; //We do not look for best level of combination - } - } - - if (setOfRepairPlans_int.size()>=maxNumberOfPlans){ - break; //We do not look for best level of combination - } - - - //**We are not looking for all plans... - if (!setOfRepairPlans_int.isEmpty()) - break; - - - //System.out.println("Size candidate plan: " + size_plan + " " + maxSize4Plans); - - if (size_plan>=maxSize4Plans){ - if (setOfRepairPlans_int.isEmpty()){ - System.out.println("Incrementing size candidate plan: " + size_plan + " " + maxSize4Plans); - maxSize4Plans++;//we increment max size, till we find a plan - } - - } - - } - - - - for(int i=0; i(getAxioms4PlanIde(i))); - } - - - //return setOfRepairPlans; - - - } - - - - - /** - * We extract plans with a limit in number and size of axioms in plans - * @param maxNumberOfPlans - * @param maxSizeOfPlans - */ - public void extractPlans(){ - - setOfRepairPlans_int.clear(); - setOfRepairPlans_ax.clear(); - - Set> candidate_plans; - - int maxSize4Plans = 20; - - int combineOver; - - - - if (axioms2justifications.size()>20){ - combineOver = getNumberOfAxiomsWithHighImpact(1); - } - else{ - combineOver = axioms2justifications.size(); - } - - - //combineOver = getNumberOfAxiomsWithHighImpact(1); - - LogOutput.printAlways("\tAxioms for plans: " + axioms2justifications.size()); - LogOutput.printAlways("\tAxioms for plans (reduced): " + combineOver); - - //In case combination num is higher than num of axioms - if (combineOver > 150){ - maxSize4Plans = 1; - } - else if (combineOver > 50){ - maxSize4Plans = 2; - } - else if (combineOver > 20){ - maxSize4Plans = 3; - } - else if (combineOver > 15){ - maxSize4Plans = 4; - } - else { - maxSize4Plans = combineOver; - } - - - - /** - * We extract plans in order - */ - for (int size_plan=1; size_plan<=maxSize4Plans; size_plan++){ - - candidate_plans = precomputeIndexCombination.getIdentifierCombination(combineOver, size_plan); - - //LogOutput.print(candidate_plans.toString()); - LogOutput.print("Candidates size: " + candidate_plans.size()); - - - //Remove from set those sets containing id's already in repair_plans - for (Set candidate_plan : candidate_plans){ - - if (isaGoodPlan(candidate_plan)){ - - //System.out.println(candidate_plan.size()); - setOfRepairPlans_int.add(new HashSet(candidate_plan)); - - } - - } - - - //**We are not looking for all plans... - if (!setOfRepairPlans_int.isEmpty()) - break; - - - } - - //createIncrementalPlan(); - - //If no repair from combinations (e.g. too hard cases involving a huge number of combinations) - if (setOfRepairPlans_int.isEmpty()){ - - //We seek for plan - setOfRepairPlans_ax.add(new HashSet( - createIncrementalPlan())); //in the worst case all axioms will be added - - //ADD EVERYTHING: EASY OPTION - /*setOfRepairPlans_int.add( - new HashSet( - PrecomputeIndexCombination.getMaxCombinationSet( - axioms2justifications.size()))); - - LogOutput.printAlways("Adding plan involving all axioms.");*/ - - } - else{ - for(int i=0; i(getAxioms4PlanIde(i))); - - //System.out.println("PLAN " + i); - //for (OWLAxiom ax : getAxioms4PlanIde(i)){ - // System.out.println("\t"+ax); - //} - - } - - - - } - - - - - - - - - //return setOfRepairPlans; - - - } - - - - private int getNumberOfAxiomsWithHighImpact(int min_impact){ - - int count=0; - - for (OWLAxiom ax : axioms2justifications.keySet()){ - - if (getImpact(ax)>1) - count++; - - } - - return count; - - - } - - - - private Set justification_ids = new HashSet(); - - private boolean isaGoodPlan(Set candidate_plan){ - - justification_ids.clear(); - - for (Set repair : setOfRepairPlans_int){ - if (candidate_plan.containsAll(repair)){//new candidate is not minimal - return false; - } - } - - for (int ide_ax : candidate_plan){ - - justification_ids.addAll(axioms2justifications.get(ident2axiom.get(ide_ax))); - - if (justification_ids.size()==num_justifications){ - return true; //There are axioms involving all justifications - } - - } - - //Not a repair - return false; - - - - - } - - - private boolean isaGoodPlanAx(Set candidate_plan){ - - justification_ids.clear(); - - for (OWLAxiom ax : candidate_plan){ - - justification_ids.addAll(axioms2justifications.get(ax)); - - if (justification_ids.size()==num_justifications){ - return true; //There are axioms involving all justifications - } - - } - - //Not a repair - return false; - - - - - } - - - - - private List> getAllPlansInt(){ - - return setOfRepairPlans_int; - } - - - public List> getAllPlansAx(){ - - return setOfRepairPlans_ax; - } - - - - - /** - * We add axioms in order till we get a good plan. - * Not necessarily a minimal plan - */ - private Set createIncrementalPlan(){ - - Iterator it = listOrderedAxioms.iterator(); - - Set axioms_plan = new HashSet(); - - while (it.hasNext()){ - - axioms_plan.add(it.next()); - - if (isaGoodPlanAx(axioms_plan)) - break; - - } - - /*System.out.println("PLAN INCREMENTAL"); - for (OWLAxiom ax : axioms_plan){ - System.out.println("\t"+ax); - }*/ - - return axioms_plan; - - - } - - - - /** - * We order by impac, that is occurrence number in justifications - */ - private void orderAxiomsByImact(){ - - listOrderedAxioms = new TreeSet(new RepairMappingComparator()); - - for (OWLAxiom ax : axioms2justifications.keySet()){ - listOrderedAxioms.add(ax); - } - - /*Iterator it = listOrderedAxioms.iterator(); - while (it.hasNext()){ - - OWLAxiom ax = it.next(); - - System.out.println("Impact Axiom " + ax + " " + axioms2justifications.get(ax).size()); - - }*/ - - } - - - - - - - private Set set_axioms = new HashSet(); - private Set getAxioms4PlanIde(int idePlan){ - - set_axioms.clear(); - - for (int ide : setOfRepairPlans_int.get(idePlan)){ - set_axioms.add(ident2axiom.get(ide)); - } - - return set_axioms; - } - - - private Set getAxioms4PlanInt(Set plan_int){ - - set_axioms.clear(); - - for (int ide : plan_int){ - set_axioms.add(ident2axiom.get(ide)); - } - - return set_axioms; - } - - - - public int getImpact(OWLAxiom ax){ - - return axioms2justifications.get(ax).size(); - - } - - - /** - * Comparator - * @author Ernesto - * - */ - private class RepairMappingComparator implements Comparator { - - /** - * We order by Impact - */ - public int compare(OWLAxiom m1, OWLAxiom m2) { - - - if (getImpact(m1). - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.reasoning.profiles; - -import org.semanticweb.owlapi.profiles.*; -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.OntologyLoader; - -/** - * - * Checks the profile of the integrated ontology - * - * @author Ernesto - * - */ -public class CheckOWL2Profile { - - OWLOntology onto; - - OWL2DLProfile owl2dlchecker = new OWL2DLProfile(); - - OWL2ELProfile owl2elchecker = new OWL2ELProfile(); - - OWLProfileReport report; - - - public CheckOWL2Profile(OWLOntology onto){ - - this.onto=onto; - - } - - - public CheckOWL2Profile(){ - - } - - public boolean isInOWL2ELProfile(OWLOntology onto){ - - report = owl2elchecker.checkOntology(onto); - - for (OWLProfileViolation violation : report.getViolations()) { - - //Ignore dummy violations - if (violation.toString().startsWith("Use of undeclared class") || - violation.toString().startsWith("Use of undeclared object property") || - violation.toString().startsWith("Use of undeclared data property") || - violation.toString().startsWith("Use of data range not in profile: xsd:") || - //violation.toString().startsWith("Cannot pun between properties") || - violation.toString().startsWith("Not enough operands; at least two needed:") || - violation.toString().startsWith("Use of reserved vocabulary for class IRI: rdf:List")) - - continue; - - //System.out.println("Violations: " + violation.toString()); - return false; - - - } - - return true; - - - } - - - - - - public OWLProfileReport getReport4OWL2DL(){ - - return owl2dlchecker.checkOntology(onto); - - //for (OWLProfileViolation violation : report.getViolations()){ - // System.out.println(violation);// + " " + violation.getAxiom()); - //} - - } - - public OWLProfileReport getReport4OWL2EL(){ - - return owl2elchecker.checkOntology(onto); - - } - - - - public static void main(String[] args) { - - try { - //OntologyLoader loader = new OntologyLoader("http://dvcs.w3.org/hg/prov/raw-file/57833db7d5a4/ontology/ProvenanceOntology.owl"); - - OntologyLoader loader = new OntologyLoader("http://www.co-ode.org/ontologies/pizza/pizza.owl"); - - - CheckOWL2Profile checker = new CheckOWL2Profile(loader.getOWLOntology()); - - System.out.println("OWL 2 DL:\n" + checker.getReport4OWL2DL().isInProfile()); - System.out.println(""); - System.out.println("OWL 2 EL:\n" + checker.getReport4OWL2EL().isInProfile()); - - - - } - catch (Exception e){ - e.printStackTrace(); - } - - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorAssessment.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorAssessment.java deleted file mode 100644 index 0005d1428d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorAssessment.java +++ /dev/null @@ -1,1452 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.repair; - -import java.util.Calendar; - -import java.util.HashMap; -import java.util.Map; -import java.util.HashSet; -import java.util.PriorityQueue; -import java.util.Queue; -import java.util.Set; -import java.util.Vector; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; -import uk.ac.ox.krr.logmap2.mappings.CandidateMappingManager; -import uk.ac.ox.krr.logmap2.repair.hornSAT.DowlingGallierHornSAT; -import uk.ac.ox.krr.logmap2.repair.hornSAT.HornClause; -import uk.ac.ox.krr.logmap2.repair.hornSAT.Link; -import uk.ac.ox.krr.logmap2.utilities.PrecomputeIndexCombination; -import uk.ac.ox.krr.logmap2.io.*; - -/** - * This class will assess the validity of extracted anchors using D&G algorithm - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Oct 10, 2011 - * - */ -public class AnchorAssessment { - - - private DowlingGallierHornSAT dgSat; - - private Set hornMappings2Remove; - - /**Discarded mappings**/ - //private Map> generalIgnoreLinks; - - /**Used in repair to discover which mappings must be deleted*/ - private Map> ignoreLinks = new HashMap>(); - - - private IndexManager index; - - //private OntologyProcessing onto_process1; - //private OntologyProcessing onto_process2; - - private MappingManager mapping_extractor; - - - - private Set unSATvisited; - - private Set SATvisited; - - private Set SAT; - - //Temporal set - private Set allUNSAT = new HashSet(); - - - private Map unsatClasses2repaired; - - - //private Set plan = new HashSet(); - //private Set mappingsInrepair = new HashSet(); - - //private Set classes_with_hard_cases; - int hard_cases_still2solve=0; - - //private Map>> unsatClasses2repairMappingSet; - - private Map> unsatClasses2conflictiveMappings; - - //Global information about the repairs - private Map mapping2NumOfConflicts; - - - - double averageConflictiveMappings=0.0; - int maxConflictiveMappings=0; - int minConflictiveMappings=10000; - - double averageRepairMappings=0.0; - int maxRepairMappings=0; - - int minRepairMappings=10000; - - double averageSizeRepair=0.0; - int maxSizeRepair=0; - int minSizeRepair=10000; - - private PrecomputeIndexCombination precomputeIndexCombination = new PrecomputeIndexCombination(); - - - boolean useProjection=false; - boolean dealWithHardCases=false; - - - boolean repairInstanceMappings = false; - - - - - - //Must at least control 3 structures: mappings, fixed mappinsg and mappppimngs to ignore - //Will use structures from: onto processing (tax, disj, equiv, and general axioms) and index (to discover conflicts of new mappings) - //Note that currently index contains the most of structures (tax, dij, equiv...) - // - //Call from Lexical mapping extractor.... then structures are controled there - //We just need to create the methods - - - - /** - * Constructor - * @param index - * @param mapping_extractor - */ - public AnchorAssessment( - IndexManager index, - MappingManager mapping_extractor){ - - this.index=index; - this.mapping_extractor=mapping_extractor; - - - //We precompute indexes - precomputeIndexCombination.preComputeIdentifierCombination(); - - - - } - - - - private void initStructures(){ - - allUNSAT.clear(); - - unSATvisited=new HashSet(); - - SATvisited=new HashSet(); - - SAT=new HashSet(); - - //unsatIntervals_onto1=new HashSet(); - - unsatClasses2conflictiveMappings= new HashMap>(); - - //classes_with_hard_cases=new HashSet(); - hard_cases_still2solve=0; - - //unsatClasses2repairMappingSet = new HashMap>>(); - - //unsatClasses2sizerepair = new HashMap(); - - //mappings2Remove4onto1 = new HashSet(); - //mappings2Remove4onto2 = new HashSet(); - hornMappings2Remove = new HashSet(); - - unsatClasses2repaired = new HashMap(); - - ignoreLinks = new HashMap>(); - - - - } - - - - private void setDowlingAndGallier( - boolean useProjection, - Map> mappings2repair){ - - setDowlingAndGallier(useProjection, mappings2repair, false); - - } - - - - private void setDowlingAndGallier( - boolean useProjection, - Map> mappings2repair, - boolean addClassTypes){ - - Set mapped_entities = new HashSet(); - - //We include all entities. Note that we store both directions ofmappings - mapped_entities.addAll(mapping_extractor.getFixedMappings().keySet()); - // - mapped_entities.addAll(mappings2repair.keySet());//Do they represent mappings L2R or R2L? - - if (useProjection){ - index.setSmallProjection4MappedEntities(mapped_entities); - } - - - dgSat = new DowlingGallierHornSAT( - index.getDirectSubClasses(useProjection), - index.getEquivalentClasses(),//inludes both sides - index.getDirectDisjointClasses(), - index.getGeneralHornAxiom(), - addClassTypes, - index.getDirectIndividualClassTypes(), - mapping_extractor.getFixedMappings(), - mappings2repair, - hornMappings2Remove); - - - } - - - /** - * This method evaluates the satisfiability of the integration together withh the given mappings - * @param mappings2repair - * @throws Exception - */ - public void CountSatisfiabilityOfIntegration_DandG( - Map> mappings2repair) { - - - initStructures(); - if(mapping2NumOfConflicts == null) - mapping2NumOfConflicts = new HashMap(); - else - mapping2NumOfConflicts.clear(); - - - //--------------------------------------- - // ALL ONTOLOGY - //--------------------------------------- - LogOutput.print("\n\nCOUNT SAT ALL ONTOLOGY"); - LogOutput.print("-------------------------"); - useProjection=false; - dealWithHardCases=false; - - setDowlingAndGallier(useProjection, mappings2repair); - - //LogOutput.print("Repairing from Roots: " + index.getRootIdentifiers().size()); - CountSatisfiabilityOfIntegration_DandG(index.getRootIdentifiers()); - - - LogOutput.print("\tUNSATifiabilities found with Dowling and Gallier (approximation): " + unSATvisited.size()); - //LogOutput.print("UNSAT found (count): " + unSATvisited.size()); - //LogOutput.print("SAT found: " + SATvisited.size()); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - - for (HornClause mapping : mapping2NumOfConflicts.keySet()){ - LogOutput.printAlways(mapping + ", conflict: " + mapping2NumOfConflicts.get(mapping)); - } - - - - } - - - Set allSubClasses = new HashSet(); - - - private void getSubclasses4Identifiers(Set classes){ - - allSubClasses.addAll(classes); - - if (classes.size()<1) //exit condition - return; - - Set subClasses = new HashSet(); - - for (int ide : classes){ - subClasses.addAll(index.getDirectSubClasses4Identifier(ide, false)); - } - - - getSubclasses4Identifiers(subClasses); - - - } - - private void CountSatisfiabilityOfIntegration_DandG(Set classes){ - - boolean satisfiable; - - for (int cls : classes){ //end recursivity if empty set - - //Check if there is a superclass with same conflictive mappings - - - //if (unSAT_onto1.contains(cls) || SAT_onto1.contains(cls) || isClassInUnsatIntervals_onto1(cls)){ //we already know that is unsat or not (already visited) - //Already visited - if (unSATvisited.contains(cls) || SATvisited.contains(cls)){ //perhaps unsat in subclasses are caused by other pairs of mappings - continue; - } - - - satisfiable=dgSat.isSatisfiable(cls); - - - if (satisfiable){ - SATvisited.add(cls); - CountSatisfiabilityOfIntegration_DandG(index.getDirectSubClasses4Identifier(cls, useProjection)); - - } - else { //UNSAT - - //To keep conflictiveness - //Based on Alessandro's code - for (HornClause clause : dgSat.getMappingsInvolvedInError()) { - if(mapping2NumOfConflicts.containsKey(clause)){ - int updatedVal = 1+mapping2NumOfConflicts.get(clause); - mapping2NumOfConflicts.put(clause, updatedVal); - } - else - mapping2NumOfConflicts.put(clause, 1); - } - //end conflictiveness extraction - - - unSATvisited.add(cls); - - - //We check conflictive mappings of all classes - CountSatisfiabilityOfIntegration_DandG(index.getDirectSubClasses4Identifier(cls, useProjection)); - - //Uncommnent: if used for statistics only - //getSubclasses4Identifiers(index.getDirectSubClasses4Identifier(cls, useProjection)); - //unSATvisited.addAll(allSubClasses); - //allSubClasses.clear(); - - - } - - - } - - - - } - - - - - - - - /** - * This method evaluates the satisfiability of the integration together withh the given mappings - * @param mappings2repair - * @throws Exception - */ - public void CheckSatisfiabilityOfIntegration_DandG( - Map> mappings2repair) { - - - - averageConflictiveMappings=0.0; - maxConflictiveMappings=0; - minConflictiveMappings=10000; - - averageRepairMappings=0.0; - maxRepairMappings=0; - minRepairMappings=10000; - - averageSizeRepair=0.0; - maxSizeRepair=0; - minSizeRepair=10000; - - - long inittotal,init1,fin1; - - initStructures(); - - - //Optional check to count the total unsat classes - //LogOutput.print("INITIAL UNSATISFIABILITY"); - //CountSatisfiabilityOfIntegration_DandG(); - - - inittotal = Calendar.getInstance().getTimeInMillis(); - - //It is usefull when a huge number of unsat is found - boolean useSmallProjection=true; - if (useSmallProjection){ - //--------------------------------------- - //SMALL PROJECTION - //--------------------------------------- - LogOutput.print("\n\nSMALL PROJECTION"); - LogOutput.print("-------------------------"); - init1 = Calendar.getInstance().getTimeInMillis(); - useProjection=true; - dealWithHardCases=false; - - setDowlingAndGallier(useProjection, mappings2repair); - - - //LogOutput.print("Repairing from Roots: " + index.getRootIdentifiers().size()); - CheckSatisfiabilityOfIntegration_DandG(index.getRootIdentifiers()); - - SAT.addAll(SATvisited); - - - LogOutput.print("UNSAT found: " + unSATvisited.size()); - //LogOutput.print("SAT found: " + SATvisited.size()); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - LogOutput.print("Remaining hard cases onto from small projection (1 Iter): " + hard_cases_still2solve); - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime ckecking satisfiability with D&G (Small projection, simple cases) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - - //HARD CASES - //--------- - if (hard_cases_still2solve>0){ - - LogOutput.print("Solving hard cases..."); - - hard_cases_still2solve=0;//we reinit - - dealWithHardCases=true; //the unique difference is in the repair - init1 = Calendar.getInstance().getTimeInMillis(); - - CheckSatisfiabilityOfIntegration_DandG(index.getRootIdentifiers()); - - SAT.addAll(SATvisited); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - LogOutput.print("Remaining hard cases onto from small projection (2 Iter): " + hard_cases_still2solve); - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime ckecking satisfiability with D&G (Small projection, hard cases) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - } - } - - //We will visit all again if necessary - SAT.clear(); - - //--------------------------------------- - // ALL ONTOLOGY - //--------------------------------------- - LogOutput.print("\n\nALL ONTOLOGY"); - LogOutput.print("-------------------------"); - init1 = Calendar.getInstance().getTimeInMillis(); - useProjection=false; - dealWithHardCases=false; - - setDowlingAndGallier(useProjection, mappings2repair); - - - //LogOutput.print("Repairing from Roots: " + index.getRootIdentifiers().size()); - CheckSatisfiabilityOfIntegration_DandG(index.getRootIdentifiers()); - - SAT.addAll(SATvisited); - - LogOutput.print("UNSAT found: " + unSATvisited.size()); - //LogOutput.print("SAT found: " + SATvisited.size()); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - LogOutput.print("Remaining hard cases all onto (1 Iter): " + hard_cases_still2solve); - - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime ckecking satisfiability with D&G (Big projection, simple cases) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - - - //HARD CASES - //--------- - if (hard_cases_still2solve>0){ - - LogOutput.print("Solving hard cases..."); - - hard_cases_still2solve=0;//we reinit - - dealWithHardCases=true; - - init1 = Calendar.getInstance().getTimeInMillis(); - - CheckSatisfiabilityOfIntegration_DandG(index.getRootIdentifiers()); - - SAT.addAll(SATvisited); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - LogOutput.print("REMAINING HARD CASES for all onto (2 Iter): " + hard_cases_still2solve); - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time ckecking satisfiability with D&G (Big projection, hard cases) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - } - - //-------------------------------- - //REMOVE MAPPINGS FROM STRUCTURES - //--------------------------------- - remove_weaken_ConflictiveMappings2(mappings2repair); - - - - - //STATISTICS - LogOutput.print("\nAverage mappings per conflict: " + averageConflictiveMappings/(double)(unsatClasses2conflictiveMappings.size())); - LogOutput.print("Max mappings per conflict: " + maxConflictiveMappings); - LogOutput.print("Min mappings per conflict: " + minConflictiveMappings); - - LogOutput.print("Average size of repair: " + averageSizeRepair/(double)(unsatClasses2conflictiveMappings.size())); - LogOutput.print("Max size of repair: " + maxSizeRepair); - LogOutput.print("Min size of repair: " + minSizeRepair); - - LogOutput.print("Average mappings in repair: " + averageRepairMappings/(double)(unsatClasses2conflictiveMappings.size())); - LogOutput.print("Max mappings per repair: " + maxRepairMappings); - LogOutput.print("Min mappings per repair: " + minRepairMappings); - - - - } - - - - - - - - private void CheckSatisfiabilityOfIntegration_DandG(Set classes){ - - boolean satisfiable; - - boolean plan_was_found; - - for (int cls : classes){ //end recursivity if empty set - - //Check if there is a superclass with same conflictive mappings - - - //if (unSAT_onto1.contains(cls) || SAT_onto1.contains(cls) || isClassInUnsatIntervals_onto1(cls)){ //we already know that is unsat or not (already visited) - //Already visited - if (unSATvisited.contains(cls) || SATvisited.contains(cls)){ //perhaps unsat in subclasses are caused by other pairs of mappings - continue; - } - - //Known to be sat - if (SAT.contains(cls) || (unsatClasses2repaired.containsKey(cls) && unsatClasses2repaired.get(cls))) - satisfiable=true; - else { - satisfiable=dgSat.isSatisfiable(cls); - } - - - if (satisfiable){ - SATvisited.add(cls); - - //LogOutput.print("Subclasses: " + index.getDirectSubClasses4Identifier(cls, useProjection).size()); - CheckSatisfiabilityOfIntegration_DandG(index.getDirectSubClasses4Identifier(cls, useProjection)); - - } - else { //UNSAT - - unSATvisited.add(cls); - allUNSAT.add(cls); - - //We use all mappings in error - dgSat.setConflictiveMappingsAsInvolvedMappings(); - - - //In some cases there are side effecte between mappings and we need to collect more mappings - completeSetOfConflictiveMappings(cls, dgSat.getConflictiveMappings()); - - - //only if thre is not a class with same set of conflictive mappings - //We store unsat class with set of conflictive classes - //if (!unsatClasses2conflictiveMappings_onto1.values().contains(dgSat.getConflictiveMappings())){ - //if (!unsatClasses2conflictiveMappings_onto1.containsValue(dgSat.getConflictiveMappings())){ - - ///Note: superclasses may be repaired easier and the conflict still be present for the subclass - //It seems that this only happen in a few cases but still - - unsatClasses2conflictiveMappings.put(cls, new HashSet(dgSat.getConflictiveMappings())); - - - averageConflictiveMappings+=dgSat.getConflictiveMappings().size(); - if (dgSat.getConflictiveMappings().size()>maxConflictiveMappings) - maxConflictiveMappings=dgSat.getConflictiveMappings().size(); - if (dgSat.getConflictiveMappings().size()> mappings2repair) { - - - - averageConflictiveMappings=0.0; - maxConflictiveMappings=0; - minConflictiveMappings=10000; - - averageRepairMappings=0.0; - maxRepairMappings=0; - minRepairMappings=10000; - - averageSizeRepair=0.0; - maxSizeRepair=0; - minSizeRepair=10000; - - - long inittotal,init1,fin1; - - initStructures(); - - - //Optional check to count the total unsat classes - //LogOutput.print("INITIAL UNSATISFIABILITY"); - //CountSatisfiabilityOfIntegration_DandG(); - - - inittotal = Calendar.getInstance().getTimeInMillis(); - - - - //We will visit all again if necessary - SAT.clear(); - - //--------------------------------------- - // ALL ONTOLOGY - //--------------------------------------- - LogOutput.print("\n\nALL ONTOLOGY"); - LogOutput.print("-------------------------"); - init1 = Calendar.getInstance().getTimeInMillis(); - useProjection=false; - dealWithHardCases=false; - - setDowlingAndGallier(useProjection, mappings2repair, true); //we add indiv2classtypes - - - CheckSatisfiabilityOfIntegration_DandG_Individuals(index.getIndividuaIdentifierSet()); - - SAT.addAll(SATvisited); - - LogOutput.print("UNSAT found: " + unSATvisited.size()); - //LogOutput.print("SAT found: " + SATvisited.size()); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - LogOutput.print("Remaining hard cases all onto (1 Iter): " + hard_cases_still2solve); - - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime ckecking satisfiability with D&G (Big projection, simple cases) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - - - //HARD CASES - //--------- - if (hard_cases_still2solve>0){ - - LogOutput.print("Solving hard cases..."); - - hard_cases_still2solve=0;//we reinit - - dealWithHardCases=true; - - init1 = Calendar.getInstance().getTimeInMillis(); - - CheckSatisfiabilityOfIntegration_DandG(index.getIndividuaIdentifierSet()); - - SAT.addAll(SATvisited); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - LogOutput.print("REMAINING HARD CASES for all onto (2 Iter): " + hard_cases_still2solve); - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("Time ckecking satisfiability with D&G (Big projection, hard cases) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - } - - //-------------------------------- - //REMOVE MAPPINGS FROM STRUCTURES (individuals) - //--------------------------------- - removeConflictiveInstanceMappings(mappings2repair); - - - - - //STATISTICS - LogOutput.print("\nAverage mappings per conflict: " + averageConflictiveMappings/(double)(unsatClasses2conflictiveMappings.size())); - LogOutput.print("Max mappings per conflict: " + maxConflictiveMappings); - LogOutput.print("Min mappings per conflict: " + minConflictiveMappings); - - LogOutput.print("Average size of repair: " + averageSizeRepair/(double)(unsatClasses2conflictiveMappings.size())); - LogOutput.print("Max size of repair: " + maxSizeRepair); - LogOutput.print("Min size of repair: " + minSizeRepair); - - LogOutput.print("Average mappings in repair: " + averageRepairMappings/(double)(unsatClasses2conflictiveMappings.size())); - LogOutput.print("Max mappings per repair: " + maxRepairMappings); - LogOutput.print("Min mappings per repair: " + minRepairMappings); - - - - } - - - - - - - - private void CheckSatisfiabilityOfIntegration_DandG_Individuals(Set individuals){ - - boolean satisfiable; - - boolean plan_was_found; - - for (int indiv : individuals){ //end recursivity if empty set - - - //Already visited - if (unSATvisited.contains(indiv) || SATvisited.contains(indiv)){ //perhaps unsat in subclasses are caused by other pairs of mappings - continue; - } - - //Known to be sat - if (SAT.contains(indiv) || (unsatClasses2repaired.containsKey(indiv) && unsatClasses2repaired.get(indiv))) - satisfiable=true; - else { - satisfiable=dgSat.isSatisfiable(indiv); - } - - - if (satisfiable){ - SATvisited.add(indiv); - - } - else { //UNSAT - - unSATvisited.add(indiv); - allUNSAT.add(indiv); - - //We use all mappings in error - dgSat.setConflictiveMappingsAsInvolvedMappings(); - - - //In some cases there are side effecte between mappings and we need to collect more mappings - completeSetOfConflictiveMappings(indiv, dgSat.getConflictiveMappings()); - - - unsatClasses2conflictiveMappings.put(indiv, new HashSet(dgSat.getConflictiveMappings())); - - - averageConflictiveMappings+=dgSat.getConflictiveMappings().size(); - if (dgSat.getConflictiveMappings().size()>maxConflictiveMappings) - maxConflictiveMappings=dgSat.getConflictiveMappings().size(); - if (dgSat.getConflictiveMappings().size()> mappings2repair, Set classes2check) throws Exception{ - - - long inittotal,init1,fin1; - - - LogOutput.print("SAT visited all: " + SAT.size()); - LogOutput.print("All UNSAT visited all: " + allUNSAT.size()); - LogOutput.print("New classes to check: " + classes2check.size()); - for (int ide : classes2check){ - if (SAT.contains(ide)){ - LogOutput.print("\t" + ide + " was visited."); - } - - if (allUNSAT.contains(ide)){ - LogOutput.print("\t" + ide + " was unsat."); - } - } - - - initStructures(); - - - inittotal = Calendar.getInstance().getTimeInMillis(); - - //--------------------------------------- - // ALL ONTOLOGY - //--------------------------------------- - LogOutput.print("\n\nALL ONTOLOGY"); - LogOutput.print("-------------------------"); - init1 = Calendar.getInstance().getTimeInMillis(); - useProjection=false; - dealWithHardCases=false; - - setDowlingAndGallier(useProjection, mappings2repair); - - - //LogOutput.print("Repairing from Roots: " + index.getRootIdentifiers().size()); - CheckSatisfiabilityOfIntegration_DandG(classes2check); - - SAT.addAll(SATvisited); - - LogOutput.print("UNSAT found: " + unSATvisited.size()); - LogOutput.print("SAT found: " + SATvisited.size()); - - unSATvisited.clear(); //we need to clear structure - SATvisited.clear(); - - LogOutput.print("Remaining hard cases all onto: " + hard_cases_still2solve); - - - fin1 = Calendar.getInstance().getTimeInMillis(); - LogOutput.print("\tTime ckecking satisfiability with D&G (Small projection, simple cases) (s): " + (float)((double)fin1-(double)init1)/1000.0); - - - - - - } - - - - /** - * We complete the set of confluctive mappings - * @param entity - * @param onto - * @param mappings2ignore - */ - private void completeSetOfConflictiveMappings(int entity, Set mappings2ignore){ - - try{ - - //Ignore all mappings: if unsat -> add new ones# - ignoreLinks.clear(); - - for (HornClause clause : mappings2ignore){ - - if (clause.getDirImplication()==HornClause.L2R){ - - addParticularIgnoreLink( - clause.getLeftHS1(), - clause.getLabel(), - clause.getRightHS()); - - } - else { - - addParticularIgnoreLink( - clause.getRightHS(), - clause.getLabel(), - clause.getLeftHS1()); - - } - } - - - - //LogOutput.print(ignoreLinks.size() + " " + ignoreLinks); - - if (!dgSat.isSatisfiable(entity, ignoreLinks)){ - - LogOutput.print("Case with more erroneous mappings! " + entity + " " + dgSat.getConflictiveMappings().size()); - - //We add new mappings in error - dgSat.incrementConflictiveMappingsWithNewInvolvedMappings(); - - LogOutput.print("\t" + dgSat.getConflictiveMappings().size()); - - //We check again - //Review this stop condition.... - if (dgSat.getConflictiveMappings().size()!=mappings2ignore.size() && dgSat.getConflictiveMappings().size()>0){ - completeSetOfConflictiveMappings(entity, dgSat.getConflictiveMappings()); - } - else{ - LogOutput.print("No mappings detected in inconsistency. The ontology was probably inconsistent before alignment."); - } - } - } - catch (Exception e){ - System.err.println("ERROR: " + e.getMessage()); - } - - - } - - private void addParticularIgnoreLink(int origin, int label, int target){ - - if (!ignoreLinks.containsKey(origin)) - ignoreLinks.put(origin, new HashSet()); - - ignoreLinks.get(origin).add(new Link(label, target)); - - } - - - - /** - * Extract repair plans using the conflictive mappings reported by D&G - * @param entity - * @return - */ - private boolean createRepairPlans(int entity){ - - ignoreLinks.clear(); - - unsatClasses2repaired.put(entity, false); - - //Not used - //We create a new entry for the entity - //if (!unsatClasses2repairMappingSet.containsKey(entity)) - // unsatClasses2repairMappingSet.put(entity, new Vector>()); - - - RepairmentPlan selectedPlan = null; - boolean no_exit=true; - int size_plan=1; - - Vector conflictiveMappings = new Vector(dgSat.getConflictiveMappings()); - Set> mappingCombinations; - - //Note that we give preference to smaller plans (i.e. less mappins) - //So that if a repair plan with 1 mapping is found we do not look to plans with 2 mappings - while (selectedPlan == null && no_exit){ - - //Useful for hard cases. We remove everything - if (conflictiveMappings.size()<=size_plan){ - mappingCombinations = precomputeIndexCombination.getMaxCombination(conflictiveMappings.size()); - } - else{ - mappingCombinations = precomputeIndexCombination.getIdentifierCombination(conflictiveMappings.size(), size_plan); - } - - - Queue plans = orderPlans(mappingCombinations, conflictiveMappings); - - LogOutput.print("PLANS of size " + size_plan + " for entity "+ entity + ": " + plans.size()); - //LogOutput.print("Mappings to delete later: " + hornMappings2Remove.toString()); - //LogOutput.print("Mappings to delete now: " + dgSat.getGeneralLink2Ignore().toString()); - - while(!plans.isEmpty() && selectedPlan==null) { - - RepairmentPlan plan = plans.poll(); - - LogOutput.printAlways("Evaluating plan of size: " + plan.getMappings().size() + ", conflict: " + plan.getconflictiveness() + ", confidence: " + plan.getConfidence()); - - ignoreLinks.clear(); - for(HornClause mapping : plan.getMappings()) { - if (mapping.getDirImplication()==HornClause.L2R){ - addParticularIgnoreLink(mapping.getLeftHS1(), mapping.getLabel(), mapping.getRightHS()); - } else { - addParticularIgnoreLink(mapping.getRightHS(), mapping.getLabel(), mapping.getLeftHS1()); - } - } - if (dgSat.isSatisfiable(entity, ignoreLinks)){ - selectedPlan = plan; - LogOutput.printAlways("Plan found!"); - //unsatClasses2repairMappingSet.get(entity).add(plan.getMappings()); - } - } - //Stop while - - - - //Plan found: we repair on the fly - if(selectedPlan != null) { - //There is a plan - unsatClasses2repaired.put(entity, true); - - hornMappings2Remove.addAll(selectedPlan.getMappings());//For future D&G settings - - for (HornClause clausemap : selectedPlan.getMappings()){ //For current D&G setting - //General!Ignorelinks - //TODO we add both sides to easy cleaning - //TODO Later weakened mappings will be assessed again - /*if (clausemap.getDirImplication()==HornClause.L2R){ - dgSat.addGeneralLink2Ignore(clausemap.getLeftHS1(), clausemap.getLabel(), clausemap.getRightHS()); - } - else { - dgSat.addGeneralLink2Ignore(clausemap.getRightHS(), clausemap.getLabel(), clausemap.getLeftHS1()); - }*/ - dgSat.addGeneralLink2Ignore(clausemap.getLeftHS1(), clausemap.getLabel(), clausemap.getRightHS()); - dgSat.addGeneralLink2Ignore(clausemap.getRightHS(), clausemap.getLabel(), clausemap.getLeftHS1()); - - } - } - else{//No plan found - no_exit = continueWithNextPlan(entity, size_plan); - - if (no_exit){ - if (dealWithHardCases){ //we remove all involved mappings. No "easy" plan found for this case - size_plan = conflictiveMappings.size(); - } - else { - size_plan++;//Continue - } - } - } - - - }//end while plan search - - - - //STATISTICS - if (selectedPlan != null){ //plan found - - //Note that since mappingsinrepair is no longer computed, - //the size of the selected plan for repairment is used instead for statistics. - - averageRepairMappings+=selectedPlan.getMappings().size(); - if (selectedPlan.getMappings().size()>maxRepairMappings) - maxRepairMappings=selectedPlan.getMappings().size(); - if (selectedPlan.getMappings().size()maxSizeRepair) - maxSizeRepair=size_plan; - if (size_plan=dgSat.getConflictiveMappings().size()){ - //No plan - - //classes_with_hard_cases.add(entity); - - LogOutput.print("NO PLAN!!! " + entity + " " + dgSat.getConflictiveMappings().size() + " " + size_plan); - //LogOutput.print("Mappings in new error: " + dgSat.getMappingsInvolvedInError().size() + " "+ dgSat.getMappingsInvolvedInError()); - //LogOutput.print("Mappings in conflict: " + dgSat.getConflictiveMappings().size() + " "+ dgSat.getConflictiveMappings()); - //LogOutput.print("Ignored links: " + ignoreLinks.size() + " "+ ignoreLinks); - - unsatClasses2repaired.remove(entity); - //unsatClasses2repairMappingSet.remove(entity); - - if (dealWithHardCases){ - hard_cases_still2solve++; - } - - return false; //no_exit=false; - } - - else if (!dealWithHardCases && ((dgSat.getConflictiveMappings().size()>40 && size_plan>=1) || - (dgSat.getConflictiveMappings().size()>30 && size_plan>=2) || - (dgSat.getConflictiveMappings().size()>20 && size_plan>=3) || - (dgSat.getConflictiveMappings().size()>15 && size_plan>=4))){ - //|| (dgSat.getConflictiveMappings().size()>10 && size_plan>=6)){ - //hard case - //To avoid hard cases. they will be repaired later - - //classes_with_hard_cases.add(entity); - - LogOutput.print("HARD CASE!!!" + entity + " " + dgSat.getConflictiveMappings().size() + " " + size_plan); - unsatClasses2repaired.remove(entity); - //unsatClasses2repairMappingSet.remove(entity); - - hard_cases_still2solve++; - - return false; //no_exit=false; - - } - - else if (dealWithHardCases && ((dgSat.getConflictiveMappings().size()>40 && size_plan>=2) || - (dgSat.getConflictiveMappings().size()>30 && size_plan>=3) || - (dgSat.getConflictiveMappings().size()>25 && size_plan>=4) || - (dgSat.getConflictiveMappings().size()>15 && size_plan>=5))){ - //hard case again - //classes_with_hard_cases.add(entity); - - LogOutput.print("HARD CASE WITHOUT PLAN!!!" + entity + " " + dgSat.getConflictiveMappings().size() + " " + size_plan); - hard_cases_still2solve++; - - - return true; //no_exit=true; //Continue but deleting all - - } - else { //Continue with next group - return true; - } - } - - - private double getConfidence4Clause(HornClause mapping_clause){ - - //String ide1 = index.getLabel4ConceptIndex(mapping_clause.getLeftHS1()); - //String ide2 = index.getLabel4ConceptIndex(mapping_clause.getRightHS()); - //LogOutput.print("\tISUB: " + ide1 + " - " + ide2 + " " + mapping_clause.getDirImplication()); - //LogOutput.print("\tISUB: " + ide1 + " -> " + ide2 + " " + mapping_extractor.getISUB4Mapping(mapping_clause.getLeftHS1(), mapping_clause.getRightHS())); - //LogOutput.print("\tSCOPE: " + ide1 + " -> " + ide2 + " " + mapping_extractor.getScope4Mapping(mapping_clause.getLeftHS1(), mapping_clause.getRightHS())); - - return mapping_extractor.getConfidence4Mapping(mapping_clause.getLeftHS1(), mapping_clause.getRightHS()); - } - - - private double getConflictiness4Clause(HornClause mapping_clause){ - - if (mapping2NumOfConflicts!=null && mapping2NumOfConflicts.containsKey(mapping_clause)) - return mapping2NumOfConflicts.get(mapping_clause); - else{ - LogOutput.printAlways("\t"+mapping_clause + " without conflictness"); - return 0; - } - - } - - - /** - * Orders a set of candidate plans according to their confidences - * (computed for each plan by adding their mapping confidences) - * @param mappingCombinations Candidate plans (still not proven to repair the ontology) - * @param conflictiveMappings HornClauses representing all conflictive mappings. Integers in mappingCombinations refer to their index here. - * @return - * @author Anton Morant - * @date August, 2011 - */ - private Queue orderPlans(Set> mappingCombinations, - Vector conflictiveMappings) { - - Queue plans = new PriorityQueue(mappingCombinations.size(), new RepairmentPlanComparator()); - - for(Set combination : mappingCombinations) { - - Set mappings = new HashSet(); - double confidence = 0; - int conflictiveness = 0; - - for(int mappingId : combination) { - HornClause mapping = conflictiveMappings.get(mappingId); - mappings.add(mapping); - //confidence - confidence += getConfidence4Clause(mapping); - //conflictiveness - if (Parameters.extractGlobal_D_G_Info){ - conflictiveness += getConflictiness4Clause(mapping); - } - - } - plans.add(new RepairmentPlan(mappings, confidence, conflictiveness)); - - } - return plans; - } - - - - - - - - - - /** - * Remove/Weaken mappings from structures - */ - private void remove_weaken_ConflictiveMappings2(Map> mappings2repair){ - - int target; - int origin; - - int weakened=0; - int discarded=0; - - - //To check if both sides must be deleted - for (HornClause clause : hornMappings2Remove){ - - //In current setting we only delete HashMap (e.g. exact mappings), we do not maintain a new structure with MappingObjects - - - if (clause.getDirImplication()==HornClause.L2R){ - origin=clause.getLeftHS1(); - target=clause.getRightHS(); - - } - else{ - origin=clause.getRightHS(); - target=clause.getLeftHS1(); - } - - - - //Remove Conflictive clause - if (mappings2repair.containsKey(origin)){ - mappings2repair.get(origin).remove(target); - if (mappings2repair.get(origin).size()==0){ - mappings2repair.remove(origin); - } - } - - mapping_extractor.addSubMapping2ConflictiveAnchors(origin, target, true); - - - //Alessandro - 17 June 2014: you need to check if the input - //mapping was a subsumption, otherwise you will add the reversed - //mapping that was not in the input alignment! (added OR condition) - - //If the other side of the mappings was already discarded - if (mapping_extractor.isMappingInConflictiveSet(target, origin) - || !mapping_extractor.isMappingInAnchors(origin, target)){ //added second OR - weakened--; - discarded++; - - mapping_extractor.removeSubMappingFromWeakenedDandGMappings(origin, target); - - } - else{ - weakened++; - - //Remove other side as well (we only keep in weakened) - if (mappings2repair.containsKey(target)){ - if (mappings2repair.get(target).contains(origin)){ - mappings2repair.get(target).remove(origin); - if (mappings2repair.get(target).size()==0){ - mappings2repair.remove(target); - } - - //Add other side to weakend, "only" if it existed - //Bug detected by Alessandro Solinando. August 2014 - //fixed weakening for monodirectional mappings that was creating "phantom" mappings not in the input alignement - mapping_extractor.addSubMapping2WeakenedDandGAnchors(target, origin); - - } - } - - - //mapping_extractor.Mconf_dg++; - //if (mapping_extractor.isMappingInGoldStandard(origin, target) || mapping_extractor.isMappingInGoldStandard(target, origin)) - // mapping_extractor.Mconf_dg_ok++; - - } - - - - }//End for clauses - - - - - LogOutput.print("\nDISCARDED MAPPINGS: " + discarded + " - ");// + mapping_extractor.getDircardedAnchors().size()); - LogOutput.print("WEAKENED MAPPINGS: " + weakened + " - " + mapping_extractor.getWeakenedDandGMappings().size()); - LogOutput.print("Clauses 2 ignore: " + hornMappings2Remove.size()); - - } - - - - - /** - * Remove mappings from structures - */ - private void removeConflictiveInstanceMappings(Map> mappings2repair){ - - int target; - int origin; - - - //To check if both sides must be deleted - for (HornClause clause : hornMappings2Remove){ - - - if (clause.getDirImplication()==HornClause.L2R){ - origin=clause.getLeftHS1(); - target=clause.getRightHS(); - - } - else{ - origin=clause.getRightHS(); - target=clause.getLeftHS1(); - } - - - - //Remove Conflictive clause both sides - //Instance mappings will be only same_as axioms - - if (mappings2repair.containsKey(origin)){ - mappings2repair.get(origin).remove(target); - if (mappings2repair.get(origin).size()==0){ - mappings2repair.remove(origin); - } - } - if (mappings2repair.containsKey(target)){ - mappings2repair.get(target).remove(origin); - if (mappings2repair.get(target).size()==0){ - mappings2repair.remove(target); - } - } - - - }//End for clauses - - - } - - - - - - - - - - - - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorsAssessmentFullReasoning.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorsAssessmentFullReasoning.java deleted file mode 100644 index 2145bf6335..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/AnchorsAssessmentFullReasoning.java +++ /dev/null @@ -1,895 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.repair; - -import uk.ac.ox.krr.logmap2.indexing.IndexManager; -import uk.ac.ox.krr.logmap2.mappings.MappingManager; -import uk.ac.ox.krr.logmap2.reasoning.ReasonerAccess; -import uk.ac.ox.krr.logmap2.reasoning.ReasonerManager; -import uk.ac.ox.krr.logmap2.reasoning.StructuralReasonerExtended; -import uk.ac.ox.krr.logmap2.overlapping.OverlappingExtractor; -import uk.ac.ox.krr.logmap2.reasoning.explanation.*; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.utilities.ELAxiomVisitor; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - - - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.*; -import org.semanticweb.owlapi.reasoner.OWLReasoner; - -import java.util.*; - - -/** - * - * This class repairs all unsatisfiable concepts deleting conflictive mappings using full reasoning. - * - * @author Ernesto - * - */ -public class AnchorsAssessmentFullReasoning { - - private IndexManager index; - - private MappingManager mapping_extractor; - - private OverlappingExtractor overlappingExtractor; - - private ReasonerAccess reasoner_access; - - private BlackBoxExplanationExtractor explanations_onto; - - //We only want to fin an explanation involving an axiom - private int max_explanations = 1; - - //private int maxNumberOfPlans = 250; //Max number of plans - - //private int maxSizeOfPlans = 12; //Max size axioms of a plan - - private int reasoner_id = ReasonerManager.HERMIT; - - private List> justifications_unsat = new ArrayList>(); - - private List> repair_plans; - private PlanExtractor planExtractor; - - private Map owlclass2identifier = new HashMap(); - private Map owldprop2identifier = new HashMap(); - private Map owloprop2identifier = new HashMap(); - - private MappingAxiomVisitor mappingVisitor = new MappingAxiomVisitor(); - - private Set mappingAxioms = new HashSet(); - private Set mappingAxioms2repair = new HashSet(); - - - private boolean review_anchors=true; - - //For top order of unsat classes - private StructuralReasonerExtended strctReasoner; - - - private long init, fin; - - - /** - * - * @param index - * @param mapping_extractor - * @param overlappingExtractor - */ - public AnchorsAssessmentFullReasoning( - int ReasonerID, - IndexManager index, - MappingManager mapping_extractor, - OverlappingExtractor overlappingExtractor, - boolean review_anchors) throws Exception{ - - - this.reasoner_id = ReasonerID; - - this.index=index; - this.mapping_extractor=mapping_extractor; - this.overlappingExtractor=overlappingExtractor; - - this.review_anchors=review_anchors; - - setUpReasoner(false); - - - } - - - /** - * Checks unsatisfiability without classifying - * @throws Exception - */ - public void checkUnsatisfiability() throws Exception{ - - LogOutput.printAlways("\nUNSATISFIABILITY"); - - - //Transform mappings 2 owl - getOWLAxioms4Mappings(); - - //Reason - setUpReasoner(false); - - init = Calendar.getInstance().getTimeInMillis(); - - int unsat=0; - int unknown=0; - - int num_class=0; - - int state; - - for (OWLClass cls: reasoner_access.getOntology().getClassesInSignature()){ - - //LogOutput.printAlways("Is unsat?? " + cls.toString()); - - /*if (!reasoner_access.isSatisfiable(cls)){ - unsat++; - LogOutput.printAlways(cls + "- UNSAT"); - } - else{ - LogOutput.printAlways(cls + "- SAT"); - }*/ - - num_class++; - - state = reasoner_access.isSatisfiable_withTimeout(cls, 10); - - if (state == reasoner_access.UNSAT){ - unsat++; - //LogOutput.printAlways(cls + "- UNSAT"); - } - else if (state == reasoner_access.UNKNOWN){ - unknown++; - LogOutput.printAlways("\t" + cls.getIRI().toString() + "- UNKNOWN SAT. Test: " + num_class); - } - - - } - - fin = Calendar.getInstance().getTimeInMillis(); - - double time = (float)((double)fin-(double)init)/1000.0; - - - LogOutput.printAlways("\tUNSAT classes: " + unsat + " of " + reasoner_access.getOntology().getClassesInSignature().size()); - LogOutput.printAlways("\tUNKNOWN classes: " + unknown + " of " + reasoner_access.getOntology().getClassesInSignature().size()); - LogOutput.printAlways("\tTIME checking unsatisfiability (s): " + time + - ", Averageper class: " + Utilities.getRoundValue( - (time/((double)reasoner_access.getOntology().getClassesInSignature().size())), - 8)); - } - - - /** - * Checks unsatisfiability without classifying - * @throws Exception - */ - public boolean checkIfAnyUnsat() throws Exception{ - - LogOutput.printAlways("\nUNSATISFIABILITY"); - - long initlocal = Calendar.getInstance().getTimeInMillis(); - - - int state; - int num_class=0; - - for (OWLClass cls: reasoner_access.getOntology().getClassesInSignature()){ - - num_class++; - - state = reasoner_access.isSatisfiable_withTimeout(cls, 10); - - if (state == reasoner_access.UNSAT){ - return true; - } - else if (state == reasoner_access.UNKNOWN){ - LogOutput.printAlways("\t" + cls.getIRI().toString() + "- UNKNOWN SAT. Test: " + num_class); - } - - - } - - fin = Calendar.getInstance().getTimeInMillis(); - - double time = (float)((double)fin-(double)initlocal)/1000.0; - - return false; - - - } - - - - /** - * Classifies and repairs unsat - * @throws Exception - */ - public void classifyAndRepairUnsatisfiability() throws Exception{ - - - init = Calendar.getInstance().getTimeInMillis(); - - - //Reason - LogOutput.printAlways("\nCLASSIFYING"); - - //Transform mappings 2 owl - getOWLAxioms4Mappings(); - - setUpReasoner(true); - setUpBlackBosExplanationManager(); - - //Will be reused - strctReasoner = new StructuralReasonerExtended(reasoner_access.getOntology()); - - //ONLY Statistics - //LogOutput.printAlways("\nSTATISTICS EXPLANATIONS (UNSAT: " + reasoner_access.getUnsatisfiableClasses().size() + ")."); - //repairUnsatisfiability(50); - - - int it=0; - - LogOutput.printAlways("\nREPAIR GREEDY ALGO:"); - - while (reasoner_access.hasUnsatisfiableClasses()){ - - LogOutput.printAlways("\tUNSAT CLASSES iter " + it + ": " + reasoner_access.getUnsatisfiableClasses().size()); - - //Split unsat and solve!! - if (!repairUnsatisfiability()) - break; - - applyBestRepairPlan(); - - //Clear previous structures - clearStructures(); - - //Trasnform mappings 2 owl - getOWLAxioms4Mappings(); - - //Reason - //setUpReasoner(false); - //Any unsat - //if (checkIfAnyUnsat()){ //classify and reinit blackbox - // reasoner_access.classifyOntology(); - // setUpBlackBosExplanationManager(); - //} - //else{ //We are done - // reasoner_access.getUnsatisfiableClasses().clear(); - //} - - //Reason - LogOutput.printAlways("\tCLASSIFYING"); - setUpReasoner(true); - setUpBlackBosExplanationManager(); - - it++; - - } - - fin = Calendar.getInstance().getTimeInMillis(); - - double time = (float)((double)fin-(double)init)/1000.0; - LogOutput.printAlways("\tTIME GREEDY Repair Algorithm (s): " + time); - LogOutput.printAlways("\tUNSAT CLASSES after cleaning: " + reasoner_access.getUnsatisfiableClasses().size()); - - //We do not clean last reasoner - //It is necessary for index - - } - - - - public ReasonerAccess getReasoner(){ - return reasoner_access; - } - - - - - - - private void getOWLAxioms4Mappings(){ - - //owlclass2identifier.clear(); - //owldprop2identifier.clear(); - //owloprop2identifier.clear(); - - - mappingAxioms.clear(); - mappingAxioms2repair.clear(); - - //Non fixed mappings yet - if (review_anchors){ - - for (int ide1 : mapping_extractor.getLogMapMappings().keySet()){ - for (int ide2 : mapping_extractor.getLogMapMappings().get(ide1)){ - - if (ide1 topUnsat = new HashSet(); - - - //If bigger we need to reduce the number a bit random. There is no point of extracting all topunsat - if (reasoner_access.getUnsatisfiableClasses().size()<5000){ - - List initialUnsat = new ArrayList(); - Set excluded = new HashSet(); - - initialUnsat.addAll(reasoner_access.getUnsatisfiableClasses()); - - //Problem if unsat are >10,000!! - boolean isTop; - //boolean i_sub_j; - //boolean i_sup_j; - - - //Order classes and repair only top classes - for (int i=0; i=max_unsat4repair) //Will also improve times if we stop here... - break; - } - - }//for i - - initialUnsat.clear(); - excluded.clear(); - } - - - System.out.println("TopUnsat: " + topUnsat.size()); - - - if (topUnsat.isEmpty()){ - //topUnsat.addAll(reasoner_access.getUnsatisfiableClasses()); - topUnsat = reasoner_access.getUnsatisfiableClasses(); //we just make reference - } - - - - for (OWLClass cls : topUnsat){ - - //System.out.println("\nUNSAT CLASS: " + cls.getIRI().toString()); - - //Subclass of nothing - explanations_onto.handleExplanations( - index.getFactory().getOWLSubClassOfAxiom(cls, index.getFactory().getOWLNothing())); - - if (explanations_onto.isTimedOut()){ - //LogOutput.print("Time out in explanation extraction"); - //return false; //TODO Allow output... - } - - justifications_unsat.addAll(explanations_onto.getExplanations()); - - //We repair only max_repair unsat classes each time - num++; - if (num>max_unsat4repair) //only is all unsat classes is used. topUnsat contains at most 20 - break; - - } - - topUnsat.clear(); - - //LogOutput.print(("Justifications size: " + justifications_Cdel.get(0).size()); - //LogOutput.print(("\tJustifications:\n" + justifications_Cdel); - - //Get repairs plans P (a few of them) - planExtractor = new PlanExtractor(justifications_unsat); - planExtractor.extractPlans(); - repair_plans = planExtractor.getAllPlansAx(); - - LogOutput.printAlways("\tRepair plans number: " + repair_plans.size()); - - //LogOutput.print(("\tRepair plans:\n" + repair_plans); - //for (Set repair : repair_plans){ - // LogOutput.print(repair.toString()); - //} - - if (repair_plans.size()==0){ - LogOutput.print("No repairs were found!"); - return false; - } - - return true; - - - } - - - /** - * Gest the repair with less confidence - * @return - */ - private void applyBestRepairPlan(){ - - Set best_repair=null; - - double min_conf = 10000; - double conf; - - mappingVisitor.setDeleteAxiom(false);//used in confidence - - for (Set repair : repair_plans){ - - conf = getConfidence4Plan(repair); - - if (min_conf > conf){ - min_conf = conf; - best_repair = repair; - } - } - - mappingVisitor.setDeleteAxiom(true); - - for (OWLAxiom ax : best_repair){ - ax.accept(mappingVisitor); - //It also deletes axiom from structures - //TODO add to conflicts - } - - - - - - - } - - - private double getConfidence4Plan(Set repair){ - - double conf = 0.0; - - for (OWLAxiom ax : repair){ - ax.accept(mappingVisitor); - conf += mappingVisitor.conf; - } - - return conf; - } - - - - - - - - - public class MappingAxiomVisitor extends ELAxiomVisitor { - - public int ide1; - public int ide2; - public int type;//0 subclass, 1: equivclas, 2: oprop, 3: dprop - public double conf; - private boolean deleteAxiom=false; //Indicates if the axioms must be deleted from anchors - - public void setDeleteAxiom(boolean delete_axiom){ - deleteAxiom = delete_axiom; - } - - public void visit(OWLSubClassOfAxiom ax) { - ide1 = owlclass2identifier.get(ax.getSubClass().asOWLClass()); - ide2 = owlclass2identifier.get(ax.getSuperClass().asOWLClass()); - type = 0; - conf = mapping_extractor.getConfidence4Mapping(ide1, ide2); - - deleteSubMapping(); - - - } - - public void visit(OWLEquivalentClassesAxiom ax) { - ide1 = owlclass2identifier.get(ax.getClassExpressionsAsList().get(0).asOWLClass()); - ide2 = owlclass2identifier.get(ax.getClassExpressionsAsList().get(1).asOWLClass()); - type = 1; - conf = mapping_extractor.getConfidence4Mapping(ide1, ide2); - - deleteEquivMapping(); - - } - - - public void visit(OWLEquivalentObjectPropertiesAxiom ax) { - - Iterator it = ax.getProperties().iterator(); - - ide1 = owloprop2identifier.get(it.next().asOWLObjectProperty()); - ide2 = owloprop2identifier.get(it.next().asOWLObjectProperty()); - type = 2; - conf = mapping_extractor.getConfidence4ObjectPropertyAnchor(ide1, ide2); - - if (deleteAxiom){ - mapping_extractor.getObjectPropertyAnchors().remove(ide1); - } - - - } - - public void visit(OWLEquivalentDataPropertiesAxiom ax) { - - Iterator it = ax.getProperties().iterator(); - ide1 = owldprop2identifier.get(it.next().asOWLDataProperty()); - ide2 = owloprop2identifier.get(it.next().asOWLDataProperty()); - type = 3; - conf = mapping_extractor.getConfidence4DataPropertyAnchor(ide1, ide2); - - if (deleteAxiom){ - mapping_extractor.getDataPropertyAnchors().remove(ide1); - } - - } - - - private void deleteSubMapping(){ - - if (deleteAxiom){ - - if (review_anchors){ - mapping_extractor.removeSubMappingFromStructure(ide1, ide2); - } - else { - mapping_extractor.removeSubMappingFromMappings2Review(ide1, ide2); - } - - mapping_extractor.addSubMapping2ConflictiveAnchors(ide1, ide2); - - } - } - - private void deleteEquivMapping(){ - - if (deleteAxiom){ - - if (review_anchors){ - mapping_extractor.removeSubMappingFromStructure(ide1, ide2); - mapping_extractor.removeSubMappingFromStructure(ide2, ide1); - } - else { - mapping_extractor.removeSubMappingFromMappings2Review(ide1, ide2); - mapping_extractor.removeSubMappingFromMappings2Review(ide2, ide1); - } - - mapping_extractor.addSubMapping2ConflictiveAnchors(ide1, ide2); - mapping_extractor.addSubMapping2ConflictiveAnchors(ide2, ide1); - - } - } - - } - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlan.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlan.java deleted file mode 100644 index ef40d7fbdf..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlan.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.repair; - -import java.util.Set; - - -import uk.ac.ox.krr.logmap2.repair.hornSAT.HornClause; - -/** - * - * This class will store extracted plans and its confidence - * - * @author Anton Morant - * Created: August, 2011 - * - */ -public class RepairmentPlan { - - private Set mappings; - private double confidence; - private int conflictiveness; - - public RepairmentPlan(Set mappings, double confidence, int conflictiveness) { - this.mappings = mappings; - this.confidence = confidence; - this.conflictiveness = conflictiveness; - } - - - //Getters & setters - - public Set getMappings() { - return mappings; - } - - public double getConfidence() { - return confidence; - } - - public int getconflictiveness() { - return conflictiveness; - } - - public void setConfidence(double confidence) { - this.confidence = confidence; - } - - @Override - public boolean equals(Object plan) { - if(!(plan instanceof Object)) - return false; - return mappings.equals(((RepairmentPlan)plan).getMappings()); - } - - @Override - public int hashCode() { - return mappings.hashCode(); - } - - public String toString(){ - return mappings + " (Conf: " + confidence +")"; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlanComparator.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlanComparator.java deleted file mode 100644 index 823c640df2..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/RepairmentPlanComparator.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.repair; - -import java.util.Comparator; - -/** - * - * This class compares plans - * - * @author Anton Morant - * Created: August, 2011 - * - */ -public class RepairmentPlanComparator implements Comparator { - - @Override - public int compare(RepairmentPlan plan1, RepairmentPlan plan2) { - - //We first order by conflictiveness - if (plan1.getconflictiveness() > plan2.getconflictiveness()) - return -1; - else if (plan1.getconflictiveness() < plan2.getconflictiveness()) - return 1; - else { - //If equal conflictiveness we order by confidence - if(plan1.getConfidence() > plan2.getConfidence()) - return 1; - else if (plan1.getConfidence() < plan2.getConfidence()) - return -1; - else - return 0; - } - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/DowlingGallierHornSAT.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/DowlingGallierHornSAT.java deleted file mode 100644 index e692aef957..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/DowlingGallierHornSAT.java +++ /dev/null @@ -1,1010 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.repair.hornSAT; - -import java.util.*; - - - -import uk.ac.ox.krr.logmap2.io.LogOutput; - - - - - -/** - * - * This class implements the Dowling and Gallier algorithm (1984) to check the - * satisfiability of Propositional Horn formulae - * - * @author ernesto - * - * - */ -public class DowlingGallierHornSAT { - - //Keep only disjointness and mappings?? aasasa - private Map clauses = new HashMap(); - - private Set conflictive_disjointness = new HashSet(); ///temporal... - private Set conflictive_mappings = new HashSet(); - private Set mappings_involved_in_error = new HashSet(); - private Set disjointness_involved_in_error = new HashSet(); - - //Propositions to 'parents'(targets) - private Map> FS = new HashMap>(); - //Links to ignore - private Map> additionalIgnoreFS = new HashMap>(); - private Map> generalIgnoreFS = new HashMap>(); - - private Vector N = new Vector(); - private Vector N_copy;// = new Vector(); - - private Stack Q = new Stack(); - - //Not necessary (optional) - private Set R = new HashSet(); - - - - //Ontology concepts are indexed from '0' onwards - private int TRUE = -1; //Node true - private int FALSE = -2; //Node false - - private int clause_num=0; - - private int last_onto1_id; - - - //private IndexManager index; - - - /** - * General Test constructor - * @param fromTrue - * @param taxonomyReversed - * @param disjointness - */ - public DowlingGallierHornSAT( - Set fromTrue, - Map> taxonomyReversed, - Map> disjointness){ - - - clause_num=0; - FS.put(TRUE, new HashSet()); - - addTrueClauses(fromTrue, 0); - - addTaxClauses(taxonomyReversed, 0); - - addDisjClauses(disjointness, 0); - - - Q.addAll(fromTrue); - R.addAll(fromTrue); - - LogOutput.print(FS.toString()); - LogOutput.print(N.toString()); - LogOutput.print(Q.toString()); - - //Pi1 ^ Pi2 -> Pj (Not considered yet) - - } - - - - - - - - /** - * - * Sets up info for Ontologies. This method contains fixed mappings - * @param taxonomyReversed1 class 2 set of parents onto1 - * @param taxonomyReversed2 class 2 set of parents onto2 - * @param disjointness1 class 2 set of disjoint classes onto1 - * @param disjointness2 class 2 set of disjoint classes onto2 - * @param fixedmappings fixed mappings already repaired - * @param mappings set of mappings 1:n - * @param mappings2remove Already known as conflictive mappings - * @deprecated - */ - public DowlingGallierHornSAT( - //IndexManager index, - Map> taxonomyReversed1, - Map> taxonomyReversed2, - Map> disjointness1, - Map> disjointness2, - Map, Integer> generalHornAxioms1, - Map, Integer> generalHornAxioms2, - Map> fixedmappings, - Map> mappings, - Set mappings2ignore){ - - - //Currently used to know to which ontology belongs and identifier (the order) - //this.index=index; - - - clause_num = 0; - - - //*FS.put(TRUE, new HashSet()); - //addTrueClauses(fromTrue1, 0); - //addTrueClauses(fromTrue2, shift); - - - addTaxClauses(taxonomyReversed1, HornClause.ONTO); - addTaxClauses(taxonomyReversed2, HornClause.ONTO); - - - addDisjClauses(disjointness1, HornClause.ONTO); - addDisjClauses(disjointness2, HornClause.ONTO); - - - //Pi1 ^ Pi2 -> Pj (Not considered yet) - addGeneralHornAxioms(generalHornAxioms1, HornClause.ONTO); - addGeneralHornAxioms(generalHornAxioms2, HornClause.ONTO); - - //Mappings to review - addMappingClauses1N(mappings,mappings2ignore, false); - - //Fixed mappings - addMappingClauses1N(fixedmappings,mappings2ignore, true); - - - N.add(0);//We add the space for T->P - - - - - } - - - - /** - * /** - * Sets up info for Ontologies. This method contains fixed mappings - * @param taxonomy ide 2 set of ""children"" - * @param disjointness class 2 set of disjoint classes onto1 - * @param generalHornAxioms axioms p^q->r - * @param indivClassTypes individuals are treated as prop variables and types as superclasses - * @param fixedmappings fixed mappings already repaired - * @param mappings set of mappings 1:n - * @param mappings2remove Already known as conflictive mappings - */ - public DowlingGallierHornSAT( - Map> taxonomy, - Map> equivalences, - Map> disjointness, - Map, Integer> generalHornAxioms, - boolean addClassTypes, - Map> indivClassTypes, - Map> fixedmappings, - Map> mappings, - Set mappings2ignore){ - - - //Currently used to know to which ontology belongs and identifier (the order) - //this.index=index; - - - clause_num = 0; - - - //*FS.put(TRUE, new HashSet()); - //addTrueClauses(fromTrue1, 0); - //addTrueClauses(fromTrue2, shift); - - - addTaxClauses(taxonomy, HornClause.ONTO); - - if (addClassTypes){ - addIndivClassTypeClauses(indivClassTypes, HornClause.ONTO); - } - - - addEquivalentClauses(equivalences, HornClause.ONTO); - - addDisjClauses(disjointness, HornClause.ONTO); - - - //Pi1 ^ Pi2 -> Pj (Not considered yet) - addGeneralHornAxioms(generalHornAxioms, HornClause.ONTO); - - - //Mappings to review - addMappingClauses1N(mappings,mappings2ignore, false); - - //Fixed mappings - addMappingClauses1N(fixedmappings,mappings2ignore, true); - - - N.add(0);//We add the space for T->P - - - - - } - - - - - - - /** - * For general constructor - * @return - */ - public boolean isSatisfiable(){ - - /*Set error_clauses = VisitGraph(); - if (error_clauses.size()>0){ - LogOutput.print("These clauses are the cause of error: "); - LogOutput.print(error_clauses); - return false; - } - return true;*/ - - boolean satisfiable=VisitGraph(); - - if (!satisfiable){ - LogOutput.print("These clauses are the cause of error: "); - LogOutput.print(mappings_involved_in_error.toString()); - LogOutput.print(disjointness_involved_in_error.toString()); - } - - return satisfiable; - - - } - - - - public boolean isSatisfiable(int entity){ - return isSatisfiable(entity, Collections.EMPTY_MAP); - } - - - /** - * Check is the entity is unsatisfiable - * @param entity - * @param onto - * @param ignoreLinks We use to this structure to ignore mappings in the checking. - * This will be useful to find repair plans - * @return - */ - public boolean isSatisfiable(int entity, Map> ignoreLinks){ - - - - - - //Cannot be here! - //conflictive_mappings.clear(); - - mappings_involved_in_error.clear(); - disjointness_involved_in_error.clear(); - - //Reinit - N_copy = new Vector(N); - Q.clear(); - R.clear(); - R.add(entity); - Q.add(entity); - - Link link = new Link(clause_num, entity); - - FS.put(TRUE, new HashSet()); //We remove ir each time - FS.get(TRUE).add(link); - - additionalIgnoreFS=ignoreLinks; - //LogOutput.print(ignoreFS); - - //LogOutput.print(N.size() + " " + clause_num); - - //N.add(0); //In mconstructor - //clause_num++; //Not necessary? - - boolean satisfiable=VisitGraph(); - - /*if (!satisfiable){ - LogOutput.print("UNSAT Entity : " + entity + ", from Onto: " + onto); - LogOutput.print(conflictive_mappings); - LogOutput.print(disjoint_clauses); - }*/ - - return satisfiable; - - } - - - - - - - - - /** - * We add general mappings/links to ignore. Mappings which are known that are conflictive - * @param cls - * @param link - */ - public void addGeneralLink2Ignore(int origin, int label, int target){ - if (!generalIgnoreFS.containsKey(origin)) - generalIgnoreFS.put(origin, new HashSet()); - - generalIgnoreFS.get(origin).add(new Link(label, target)); - - } - - public Map> getGeneralLink2Ignore(){ - return generalIgnoreFS; - } - - - - - - /** - * D&G returns the set of mappings that in the paths to get an unsatisfiability error, but some - * of them may not be involved in the conflict (not sure about that...) - * @return - */ - public Set getMappingsInvolvedInError(){ - return mappings_involved_in_error; - } - - - public void setConflictiveMappingsAsInvolvedMappings(){ - conflictive_mappings.clear(); - conflictive_mappings.addAll(mappings_involved_in_error); - } - - public void incrementConflictiveMappingsWithNewInvolvedMappings(){ - conflictive_mappings.addAll(mappings_involved_in_error); - } - - - - public void setConflictiveDisjointnessAsInvolvedDisjointness(){ - conflictive_disjointness.clear(); - conflictive_disjointness.addAll(disjointness_involved_in_error); - } - - - /** - * Returns the real set of mappings involved in the conflict - * @return - */ - public Set getConflictiveMappings(){ - return conflictive_mappings; - } - - public Set getConflictiveDisjointness(){ - return conflictive_disjointness; - } - - public void addConflictiveMapping(HornClause mapping){ - conflictive_mappings.add(mapping); - } - - public void clearConflictiveMappings(){ - conflictive_mappings.clear(); - } - - public Set getDisjointnessInvolvedInError(){ - return disjointness_involved_in_error; - } - - - - - - - //Only for test constructor - //True clauses ar only added to check the satisfiability of an entity - private void addTrueClauses(Set fromTrue, int shift){ - - //P -> True - for (int init : fromTrue){ - - FS.get(TRUE).add(new Link(clause_num, init+shift)); - N.add(0); - clause_num++; - - } - } - - - private void addTaxClauses(Map> taxonomy, int origin){ - - //child -> parent - for (int parent : taxonomy.keySet()){ - - for (int child : taxonomy.get(parent)){ - - clauses.put(clause_num, new HornClause(child, parent, clause_num, origin, HornClause.L2R)); - - if (!FS.containsKey(child)){ - FS.put(child, new HashSet()); - } - - FS.get(child).add(new Link(clause_num, parent)); //A link for each parent - N.add(1); //Archs with this clause number (clause_num) - clause_num++; - - } - } - - LogOutput.print("TAX clause num: " + clause_num); - - } - - private void addIndivClassTypeClauses(Map> classTypes, int origin){ - - //indiv -> types - for (int indiv_child : classTypes.keySet()){ - - for (int cls_parent : classTypes.get(indiv_child)){ - - clauses.put(clause_num, new HornClause(indiv_child, cls_parent, clause_num, origin, HornClause.L2R)); - - if (!FS.containsKey(indiv_child)){ - FS.put(indiv_child, new HashSet()); - } - - FS.get(indiv_child).add(new Link(clause_num, cls_parent)); //A link for each parent - N.add(1); //Archs with this clause number (clause_num) - clause_num++; - - } - } - - LogOutput.print("INDIV CLASS TYPES clause num: " + clause_num); - - } - - - private void addEquivalentClauses(Map> equivalents, int origin_clause){ - - //child -> parent - for (int origin : equivalents.keySet()){ - - for (int target : equivalents.get(origin)){ - - clauses.put(clause_num, new HornClause(origin, target, clause_num, origin_clause, HornClause.L2R)); - - if (!FS.containsKey(origin)){ - FS.put(origin, new HashSet()); - } - - FS.get(origin).add(new Link(clause_num, target)); //A link for each parent - N.add(1); //Archs with this clause number (clause_num) - clause_num++; - - } - } - - LogOutput.print("Equiv clause num: " + clause_num); - - - - } - - - /** - * - * @param disjointness - * @param origin - */ - private void addDisjClauses(Map> disjointness, int origin){ - - //TODO Can we have dijointness involving entities from two ontologies?? - - //To avoid the addition of duplicate clauses: P^Q -> False and Q^P -> False - Set disj_clauses = new HashSet(); - Pair pair1; - //Pair pair2; - - - //Pi ^ Pj -> False - for (int ent : disjointness.keySet()){ - - if (!FS.containsKey(ent)){ - FS.put(ent, new HashSet()); - } - - for (int disj : disjointness.get(ent)){ - - pair1 = new Pair(ent, disj); - - - if (disj_clauses.contains(pair1)) - continue; - - disj_clauses.add(pair1); - //pair2 = new Pair(disj+shift, ent+shift); - //disj_clauses.add(pair2); - - - clauses.put(clause_num, new HornClause(ent, disj, FALSE, clause_num, origin, HornClause.L2R)); - - FS.get(ent).add(new Link(clause_num, FALSE)); //A link to FALSE for each clause but different labels - - if (!FS.containsKey(disj)){ - FS.put(disj, new HashSet()); - } - FS.get(disj).add(new Link(clause_num, FALSE)); - - N.add(2); //Only 2 in the disjointness - clause_num++; - - - - } - } - - //LogOutput.print("Disj clauses: " + disj_clauses.size()); - //LogOutput.print("Disj clauses: " + disj_clauses); - disj_clauses.clear(); - - LogOutput.print("D&G DISJ clause num: " + clause_num); - } - - - - private void addGeneralHornAxioms(Map, Integer> generalHornAxioms, int origin){ - - int head; - - for (Set body : generalHornAxioms.keySet()){ - - head = generalHornAxioms.get(body); - - for (Integer ent : body){ - - if (!FS.containsKey(ent)){ - FS.put(ent, new HashSet()); - } - - //must accept a set!! - clauses.put(clause_num, new HornClause(body, head, clause_num, origin, HornClause.L2R)); - - FS.get(ent).add(new Link(clause_num, head)); - //A link to head for each entity in body (same labels: clasue_num) - - - } - - N.add(body.size()); - clause_num++; - - - } - - LogOutput.print("D&G general axioms clause num: " + clause_num); - - } - - - - - private void addMappingClauses1N( - Map> mappings, - Set mappings2ignore, - boolean fixedMap){ - - int type_mapping; - int clause_type; - - if (fixedMap) { - type_mapping=HornClause.FIXEDMAP; - } - else { - type_mapping=HornClause.MAP; - } - - //type_mapping=HornClause.MAP; - - - HornClause clause; - - - int num=0; - - for (int origin : mappings.keySet()){ //From onto1 or onto2 - - - for (int target : mappings.get(origin)){//To onto1 or 2 - - //To know the order of the ontologies of the involved entities - //if (index.getClassIndex(origin).getOntologyId()()); - } - - - clauses.put(clause_num, clause); - //clauses.get(clause_num).setLabelPair(clause_num+1); //nOT USED ANYMORE - - FS.get(origin).add(new Link(clause_num, target)); - N.add(1); - clause_num++; - } - - - - }//end for ent2 - }//ent for ent1 - - LogOutput.print("D&G mappings clause num: " + clause_num); - LogOutput.print("D&G mapping links: " + num + " " + mappings2ignore.size()); - - } - - - - - - - - /** - * - * @return if the graph is satisfiable or not - */ - private boolean VisitGraph(){ - - //private Set Q2 = new HashSet(); - int P; - - boolean satisfiable=true; - - while (!Q.empty()){ - - P = Q.pop(); - - if (FS.containsKey(P)){ - - for (Link link : FS.get(P)){ - - - //LogOutput.print("Visited link: " + link); - - if (generalIgnoreFS.containsKey(P)){ - if (generalIgnoreFS.get(P).contains(link)){ - //LogOutput.print("Ignored: " + link); - continue; - } - } - - //We ignore given link, and we do not visit it - if (additionalIgnoreFS.containsKey(P)){ - if (additionalIgnoreFS.get(P).contains(link)){ - //LogOutput.print("Ignored: " + link); - continue; - } - } - - - //TODO: Analyze for LogMap2 (*) - //MUST BE COMMENTED - //Only mappings. Mapping in conflict! - //Too many mappings per conflict?? - //if (clauses.get(link.getLabelLink()).getOrigin()==HornClause.MAP){ - // mappings_involved_in_error.add(clauses.get(link.getLabelLink())); - //} - - - - //Replaces element - N_copy.set(link.getLabelLink(), N_copy.get(link.getLabelLink())-1); - - if (N_copy.get(link.getLabelLink())==0){ //We get false from all paths possibles - - - if (link.getTargetLink()==FALSE){ - disjointness_involved_in_error.add(clauses.get(link.getLabelLink())); - satisfiable=false; - //return visitied_clauses; do not return!! - } - else if (!R.contains(link.getTargetLink())){ - //if (!R.contains(link.getTargetLink())){ - Q.push(link.getTargetLink()); - R.add(link.getTargetLink()); - - //Only mappings - //TODO put it back if necessaru (*) - if (clauses.get(link.getLabelLink()).getOrigin()==HornClause.MAP){ - mappings_involved_in_error.add(clauses.get(link.getLabelLink())); - - //NOT USED, MAPPING CLAUSES ARE INSERTED INDEPENDENTLY.... - //We add both direction of the mappings if it has two - //Maybe it is not necessary anymore - /*if (clauses.get(link.getLabelLink()).getLabelPair()>-1){ - mappings_involved_in_error.add( - clauses.get( - clauses.get(link.getLabelLink()).getLabelPair())); //They are inserted in order - }*/ - } - - } - - } - } - } - //else - // LogOutput.print("lala " + P); - } - - //if (satisfiable) - // return Collections.emptySet(); - - return satisfiable; - - - } - - - - public static void main(String[] args) { - - Set fromTrue1 = new HashSet(); - Map> tax1 = new HashMap>(); - Map> disjointness1 = new HashMap>(); - - Map> types = new HashMap>(); - - Set fromTrue2 = new HashSet(); - - - Map> mappings= new HashMap>(); - - - disjointness1.put(2, new HashSet()); - disjointness1.get(2).add(3); - - disjointness1.put(7, new HashSet()); - disjointness1.get(7).add(10); - - - tax1.put(1, new HashSet()); - tax1.put(2, new HashSet()); - tax1.put(3, new HashSet()); - tax1.put(4, new HashSet()); - tax1.get(1).add(2); - tax1.get(1).add(3); - tax1.get(3).add(4); - tax1.get(4).add(5); - - - tax1.put(6, new HashSet()); - tax1.put(7, new HashSet()); - tax1.get(6).add(7); - tax1.get(6).add(10); - tax1.get(7).add(8); - tax1.get(7).add(9); - - - mappings.put(3, new HashSet()); - mappings.get(3).add(7); - - mappings.put(4, new HashSet()); - mappings.get(4).add(10); - - mappings.put(7, new HashSet()); - mappings.get(7).add(3); - - mappings.put(10, new HashSet()); - mappings.get(10).add(4); - - /*mappings.put(2, new HashSet()); - mappings.get(2).add(8); - mappings.put(8, new HashSet()); - mappings.get(8).add(2);*/ - - //fromTrue1.add(1); - //fromTrue2.add(1); - - //fromTrue1.add(1); - //fromTrue2.add(3); - - //fromTrue.add(5); - //fromTrue.add(6); - //fromTrue.add(1); - //fromTrue1.add(2); - //fromTrue.add(4); - - Map> ignoreFS = new HashMap>(); - ignoreFS.put(4, new HashSet()); - ignoreFS.get(4).add(new Link(13, 10)); - ignoreFS.put(10, new HashSet()); - ignoreFS.get(10).add(new Link(15, 4)); - //ignoreFS.put(9, new HashSet()); - //ignoreFS.get(9).add(new Link(11, 1)); - - //DowlingGallierHornSAT dgSat = new DowlingGallierHornSAT(fromTrue, tax, disjointness); - - - //DowlingGallierHornSAT dgSat = new DowlingGallierHornSAT(fromTrue1, fromTrue2, tax1, tax2, disjointness1, disjointness2, mappings, shift); - //LogOutput.print("Is sat?: " + dgSat.isSatisfiable()); - - Map, Integer> generalHornAxioms1 = new HashMap, Integer>(); - Map> fixedmappings = new HashMap>(); - Map> equiv = new HashMap>(); - equiv.put(4, new HashSet()); - equiv.get(4).add(44); - equiv.put(44, new HashSet()); - equiv.get(44).add(4); - - Set mappings2ignore = new HashSet(); - - LogOutput.showOutpuLog(true); - - DowlingGallierHornSAT dgSat = new DowlingGallierHornSAT(tax1, equiv, disjointness1, generalHornAxioms1, false, types, fixedmappings, mappings, mappings2ignore); - LogOutput.print("Is sat 1?: " + dgSat.isSatisfiable(1)); - - LogOutput.print("Is sat 1i?: " + dgSat.isSatisfiable(1, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 2?: " + dgSat.isSatisfiable(2)); - LogOutput.print("Is sat 2i?: " + dgSat.isSatisfiable(2, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 3?: " + dgSat.isSatisfiable(3)); - LogOutput.print("Is sat 3i?: " + dgSat.isSatisfiable(3, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 4?: " + dgSat.isSatisfiable(4)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - LogOutput.print("Is sat 4i?: " + dgSat.isSatisfiable(4, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 44?: " + dgSat.isSatisfiable(44)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - LogOutput.print("Is sat 44i?: " + dgSat.isSatisfiable(44, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 5?: " + dgSat.isSatisfiable(5)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - LogOutput.print("Is sat 5i?: " + dgSat.isSatisfiable(5, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 6?: " + dgSat.isSatisfiable(6)); - LogOutput.print("Is sat 6i?: " + dgSat.isSatisfiable(6, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 7?: " + dgSat.isSatisfiable(7)); - LogOutput.print("Is sat 7i?: " + dgSat.isSatisfiable(7, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 8?: " + dgSat.isSatisfiable(8)); - LogOutput.print("Is sat 8i?: " + dgSat.isSatisfiable(8, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 9?: " + dgSat.isSatisfiable(9)); - LogOutput.print("Is sat 9i?: " + dgSat.isSatisfiable(9, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - LogOutput.print("Is sat 10?: " + dgSat.isSatisfiable(10)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - LogOutput.print("Is sat 10i?: " + dgSat.isSatisfiable(10, ignoreFS)); - LogOutput.print(dgSat.getMappingsInvolvedInError().toString()); - - } - - - protected class Pair{ - - int elem1; - int elem2; - - - public Pair(int el1, int el2){ - - elem1=el1; - elem2=el2; - - } - - public int getElement1(){ - return elem1; - } - public int getElement2(){ - return elem2; - } - - public boolean equals(Object o){ - - //System.out.print(this + " =?" + o); - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof Pair)) - return false; - - Pair i = (Pair)o; - - return equals(i); - - } - - - - public boolean equals(Pair i){ - - if (elem1==i.getElement1() && elem2==i.getElement2()){ - //System.out.print(this + " ==" + i); - return true; - } - - if (elem1==i.getElement2() && elem2==i.getElement1()){ - //System.out.print(this + " ==" + i); - return true; - } - - //System.out.print(this + " !=" + i); - return false; - - } - - public int hashCode() { - int code = 10; - code = 40 * code * elem1 * elem2; - return code; - } - - - public String toString(){ - return "<" + elem1 +", "+elem2 +">"; - } - - - } - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/HornClause.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/HornClause.java deleted file mode 100644 index 52fd82a908..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/HornClause.java +++ /dev/null @@ -1,331 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.repair.hornSAT; - -import java.util.*; - - - - -public class HornClause{ - - private int labelh; - private int labelh_pair=-1; //when it is not set - - private Set leftHandSideSet = new HashSet(); - //For practical issues, we only consider clauses of the type p1^p2->p3 at most (only three propositions)??? - private int leftHandSide1; - private int leftHandSide2; - private int rightHandSide; - - private int origin; //onto1, onto2, mapping - private int dirImplication; - - public static final int MAP=0; - public static final int ONTO=1; - //public static int ONTO1=1; - //public static int ONTO2=2; - public static final int FIXEDMAP=3; - - //DIR IMPLICATION - public static final int L2R=0; //P->Q - public static final int R2L=-1; //P<-Q - - - - //Ontology concepts are indexed from '0' onwards - private int TRUE = -1; //Node true - private int FALSE = -2; //Node false - - - - /** - * Cases p->q - * @param lefttHS1 Origin proposition - * @param rightHS Target proposition - * @param label Label of the clause used in D&Galgorithm - * @param type Origin of clause: onto1, onto2, or mappings - */ - public HornClause(int leftHS1, int rightHS, int label, int type){ - - this(leftHS1, rightHS, label, type, L2R); //Default - - } - - - /** - * Cases p->q or p<-q - * @param lefttHS1 Origin proposition - * @param rightHS Target proposition - * @param label Label of the clause used in D&Galgorithm - * @param type Origin of clause: onto1, onto2, or mappings - * @param dir Direction of implication - */ - public HornClause(int leftHS1, int rightHS, int label, int type, int dir){ - - labelh=label; - leftHandSide1=leftHS1; - leftHandSide2=TRUE;//we intersect with TRUE/TOP - rightHandSide=rightHS; - origin=type; - - dirImplication=dir; - - } - - - - - - - /** - * Cases p^q->r or p^q->false - * @param lefttHS1 Origin proposition 1 - * @param lefttHS2 Origin proposition 2 - * @param rightHS Target proposition - * @param label Label of the clause used in D&Galgorithm - * @param type Origin of clause: onto1, onto2, or mappings - */ - public HornClause(int leftHS1, int leftHS2, int rightHS, int label, int type, int dir){ - - - labelh=label; - leftHandSide1=leftHS1; - leftHandSide2=leftHS2; - rightHandSide=rightHS; - origin=type; - - dirImplication=dir; - - } - - /** - * Cases p^q->r or p^q->false - * @param lefttHS1 Origin proposition 1 - * @param lefttHS2 Origin proposition 2 - * @param rightHS Target proposition - * @param label Label of the clause used in D&Galgorithm - * @param type Origin of clause: onto1, onto2, or mappings - */ - public HornClause(Set leftHS_set, int rightHS, int label, int type, int dir){ - - - labelh=label; - leftHandSideSet=leftHS_set; //Only in this case is not empty - rightHandSide=rightHS; - origin=type; - - dirImplication=dir; - - } - - - - public int getLabel(){ - return labelh; - } - - - /** - * Only for equivalence mappings since we split between p->q and p<-q - * @return - */ - public int getLabelPair(){ - return labelh_pair; - } - - public void setLabelPair(int label){ - labelh_pair=label; - } - - - - public Set getLeftHSSet(){ - return leftHandSideSet; - } - - - public int getLeftHS1(){ - return leftHandSide1; - } - - - - public int getLeftHS2(){ - return leftHandSide2; - } - - - public int getRightHS(){ - return rightHandSide; - } - - - public int getOrigin(){ - return origin; - } - - public int getDirImplication(){ - return dirImplication; - } - - - public String toString(){ - - //int shift=DowlingGallierHornSAT.shift_onto2; - - String str=""; - int LHS1; - int LHS2=TRUE; - int RHS=FALSE; - - if (leftHandSideSet.size()>0){ - RHS=rightHandSide; - for (int lhs: leftHandSideSet){ - str+=lhs+"^"; - } - } - else{ - LHS1=leftHandSide1; - - if (origin==ONTO){ - LHS2=leftHandSide2; - RHS=rightHandSide; - - } - - else if (origin==MAP || origin==FIXEDMAP){ - if (rightHandSide>FALSE) - RHS=rightHandSide;//-shift; - } - - - str=String.valueOf(LHS1); - - if (LHS2>TRUE){ - str+="^"+LHS2; - } - } - - - - if (dirImplication==L2R) - str+=" -> " + RHS + " (" + origin +")" + " (" + labelh +")"; - else - str+=" <- " + RHS + " (" + origin +")" + " (" + labelh +")"; - - return str; - - } - - - - public boolean equals(Object o){ - - //System.out.print(this + " =?" + o); - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof HornClause)) - return false; - - HornClause hc = (HornClause)o; - - return equals(hc); - - } - - - - public boolean equals(HornClause hc){ - - //For equality we do not consider the labels (it is dependent to the current d&g setting) - - if (leftHandSideSet.size()>0){ - - if (//labelh!=hc.getLabel() || - leftHandSideSet.equals(hc.getLeftHSSet()) || - rightHandSide!=hc.getRightHS() || - //origin!=hc.getOrigin() || - dirImplication!=hc.getDirImplication()){ - return false; - } - } - - else if (//labelh!=hc.getLabel() || - leftHandSide1!=hc.getLeftHS1() || - leftHandSide2!=hc.getLeftHS2() || - rightHandSide!=hc.getRightHS() || - //origin!=hc.getOrigin() || - dirImplication!=hc.getDirImplication()){ - return false; - } - - return true; - - } - - public int hashCode() { - - int code = 10; - - if (leftHandSideSet.size()>0){ - code = 50 * code + leftHandSideSet.hashCode(); - } - else{ - //code = 40 * code + labelh; - code = 50 * code + leftHandSide1; - code = 60 * code + leftHandSide2; - } - code = 70 * code + rightHandSide; - //code = 80 * code + (origin+5); - code = 90 * code + dirImplication; - return code; - } - - - - public static void main(String[] args) { - - Set set1 = new HashSet(); - Set set2 = new HashSet(); - - - - HornClause h1 = new HornClause(45, 1902, 1, MAP, L2R); - HornClause h2 = new HornClause(45, 1902, 3, MAP, L2R); - - set1.add(h1); - //set1.add(h2); - - set2.add(h2); - - System.out.println(h1.equals(h2)); - System.out.println(h2.equals(h1)); - - System.out.println(set2.contains(h1)); - System.out.println(set1.contains(h2)); - - - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/Link.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/Link.java deleted file mode 100644 index cc823b03b2..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/repair/hornSAT/Link.java +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.repair.hornSAT; - - -public class Link { - - - private int labelH; - private int target; - - - public Link(int label, int targetlink){ - labelH=label; - target=targetlink; - } - - public int getLabelLink(){ - return labelH; - } - - public int getTargetLink(){ - return target; - } - - - public String toString(){ - return "< h=" + labelH + ", t="+target + " >"; - } - - - - public boolean equals(Object o){ - - //System.out.print(this + " =?" + o); - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof Link)) - return false; - - Link i = (Link)o; - - return equals(i); - - } - - - - public boolean equals(Link i){ - - if (labelH!=i.getLabelLink() || target!=i.getTargetLink()){ - return false; - } - - return true; - - } - - public int hashCode() { - int code = 10; - code = 40 * code + labelH; - code = 50 * code + target; - return code; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/statistics/StatisticsManager.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/statistics/StatisticsManager.java deleted file mode 100644 index e628ac62b0..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/statistics/StatisticsManager.java +++ /dev/null @@ -1,355 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.statistics; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.mappings.*; -import uk.ac.ox.krr.logmap2.interactive.objects.MappingObjectInteractivity; - -/** - * This class will manage the set of statistics produced by LogMap - * @author Ernesto - * - */ -public class StatisticsManager { - - - public static int MFinal; - public static int MFinal_ok; - public static int MMissing; - - - public static int Mall = 0; - public static int Mall_ok = 0; - - public static int Manchors = 0; - public static int Manchors_ok = 0; - - public static int Mask = 0; - public static int Mask_ok = 0; - - public static int Mask_heur = 0; - - public static int Msplit = 0; - public static int Msplit_ok = 0; - - public static int Mdisc = 0; - public static int Mdisc_ok = 0; - - public static int Mharddisc = 0; - public static int Mharddisc_ok = 0; - - public static int Mconf = 0; - public static int Mconf_ok = 0; - - public static int Mconf_dg = 0; - public static int Mconf_dg_ok = 0; - - public static double precision_anc = 0.0; - public static double recall_anc = 0.0; - public static double fmeasure_anc = 0.0; - - - - - - public static MappingManager mapping_manager; - - - public static void setMappingManager(MappingManager m_manager){ - mapping_manager = m_manager; - } - - - - - - public static void extractStatisticsAnchors(){ - - //Initial number - for (int ide1 : mapping_manager.getLogMapMappings().keySet()){ - for (int ide2 : mapping_manager.getLogMapMappings().get(ide1)){ - if (mapping_manager.isId1SmallerThanId2(ide1, ide2)){ - - Manchors++; - - if (mapping_manager.isMappingInGoldStandard(ide1, ide2)){ - Manchors_ok++; - } - - } - } - } - - } - - - public static void extractStatisticsMappings2Ask(){ - Mask=mapping_manager.getListOfMappingsToAskUser().size(); - //for (int i=0; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.utilities; - -import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; -import org.semanticweb.owlapi.model.OWLAnnotationPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLAnnotationPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLAxiomVisitor; -import org.semanticweb.owlapi.model.OWLClassAssertionAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLDatatypeDefinitionAxiom; -import org.semanticweb.owlapi.model.OWLDeclarationAxiom; -import org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom; -import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLDisjointUnionAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; -import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLHasKeyAxiom; -import org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom; -import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom; -import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom; -import org.semanticweb.owlapi.model.OWLReflexiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLSameIndividualAxiom; -import org.semanticweb.owlapi.model.OWLSubAnnotationPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; -import org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom; -import org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom; -import org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom; -import org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom; -import org.semanticweb.owlapi.model.SWRLRule; - -public abstract class ELAxiomVisitor implements OWLAxiomVisitor { - - - //Unique axioms used in EL - public abstract void visit(OWLSubClassOfAxiom arg0); - public abstract void visit(OWLEquivalentClassesAxiom arg0); - - - public void visit(OWLAnnotationAssertionAxiom arg0) { - - } - - public void visit(OWLSubAnnotationPropertyOfAxiom arg0) { - - } - - public void visit(OWLAnnotationPropertyDomainAxiom arg0) { - - } - - public void visit(OWLAnnotationPropertyRangeAxiom arg0) { - - } - - public void visit(OWLDeclarationAxiom arg0) { - - } - - - public void visit(OWLNegativeObjectPropertyAssertionAxiom arg0) { - - } - - public void visit(OWLAsymmetricObjectPropertyAxiom arg0) { - - } - - public void visit(OWLReflexiveObjectPropertyAxiom arg0) { - - } - - - public void visit(OWLDisjointClassesAxiom arg0) { - - } - - public void visit(OWLDataPropertyDomainAxiom arg0) { - - } - - public void visit(OWLObjectPropertyDomainAxiom arg0) { - - } - - public void visit(OWLEquivalentObjectPropertiesAxiom arg0) { - - } - - public void visit(OWLNegativeDataPropertyAssertionAxiom arg0) { - - } - - - public void visit(OWLDifferentIndividualsAxiom arg0) { - - } - - public void visit(OWLDisjointDataPropertiesAxiom arg0) { - - } - - public void visit(OWLDisjointObjectPropertiesAxiom arg0) { - - } - - public void visit(OWLObjectPropertyRangeAxiom arg0) { - - } - - public void visit(OWLObjectPropertyAssertionAxiom arg0) { - - } - - public void visit(OWLFunctionalObjectPropertyAxiom arg0) { - - } - - public void visit(OWLSubObjectPropertyOfAxiom arg0) { - - } - - public void visit(OWLDisjointUnionAxiom arg0) { - - } - - public void visit(OWLSymmetricObjectPropertyAxiom arg0) { - - } - - - public void visit(OWLDataPropertyRangeAxiom arg0) { - - } - - public void visit(OWLFunctionalDataPropertyAxiom arg0) { - - } - - public void visit(OWLEquivalentDataPropertiesAxiom arg0) { - - } - - public void visit(OWLClassAssertionAxiom arg0) { - - } - - public void visit(OWLDataPropertyAssertionAxiom arg0) { - - } - - - public void visit(OWLTransitiveObjectPropertyAxiom arg0) { - - } - - public void visit(OWLIrreflexiveObjectPropertyAxiom arg0) { - - } - - public void visit(OWLSubDataPropertyOfAxiom arg0) { - - } - - public void visit(OWLInverseFunctionalObjectPropertyAxiom arg0) { - - } - - - public void visit(OWLSameIndividualAxiom arg0) { - - } - - - public void visit(OWLSubPropertyChainOfAxiom arg0) { - - } - - - public void visit(OWLInverseObjectPropertiesAxiom arg0) { - - } - - - public void visit(OWLHasKeyAxiom arg0) { - - } - - - public void visit(OWLDatatypeDefinitionAxiom arg0) { - - } - - - public void visit(SWRLRule arg0) { - - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Lib.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Lib.java deleted file mode 100644 index 367ae7760b..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Lib.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.utilities; - -import java.io.*; - -import uk.ac.ox.krr.logmap2.io.LogOutput; - - -public class Lib { - - private final static double EPS = 1e-6; - - public static int dcmp(double x) - { - if (x < -EPS) return -1; - else if (x > EPS) return 1; - else return 0; - } - - public static void debuginfo(String s) - { - LogOutput.print("aoaoaoaoao~~~~~ " + s); - } - - private static BufferedWriter writer = null; - - public static void logInfo(String info) - { - try { - if (writer == null) - writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/auto/users/yzhou/log.txt"))); - - writer.write(info + "\n"); - - } catch (IOException e) { - e.printStackTrace(); - } - } - - public static void closeLog() - { - if (writer != null) - try { - writer.close(); - } catch (IOException e) { - e.printStackTrace(); - } - writer = null; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Pair.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Pair.java deleted file mode 100644 index b634b2a67d..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Pair.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.utilities; - -import java.util.Comparator; - -public class Pair implements Comparable< Pair > { - protected final T1 m_key; - protected final T2 m_value; - - public Pair(T1 key, T2 value) { - m_key = key; - m_value = value; - } - - public T1 getKey() { - return m_key; - } - - public T2 getValue() { - return m_value; - } - - public String toString() { - //System.out.println("in toString()"); - StringBuffer buff = new StringBuffer(); - buff.append("Key: "); - buff.append(m_key); - buff.append("\tValue: "); - buff.append(m_value); - return(buff.toString() ); - } - public int compareTo( Pair p1 ) { - //System.out.println("in compareTo()"); - if ( null != p1 ) { - if ( p1.equals(this) ) { - return 0; - } else if ( p1.hashCode() > this.hashCode() ) { - return 1; - } else if ( p1.hashCode() < this.hashCode() ) { - return -1; - } - } - return(-1); - } - - @SuppressWarnings("unchecked") - public boolean equals( Object o ) { - return equals((Pair)o); - } - - public boolean equals( Pair p1 ) { -// System.out.println("in equals()"); - if ( null != p1 ) { - if ( p1.m_key.equals( this.m_key ) && p1.m_value.equals( this.m_value ) ) { - return(true); - } - } - return(false); - } - - public int hashCode() { - int hashCode = m_key.hashCode() + (31 * m_value.hashCode()); - //System.out.println("in hashCode() [" + Integer.toString(hashCode) + "]"); - return(hashCode); - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombination.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombination.java deleted file mode 100644 index 4946aa57a2..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombination.java +++ /dev/null @@ -1,189 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.utilities; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - - -/** - * This class will precompute and manage the index combination for: - * 1. Weak mappings (combination of words to be dropped) - * 2. Repair plans from a given input of mappings - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 10, 2011 - * - */ -public class PrecomputeIndexCombination { - - - //The position of the list is the size of the combinations, then the entry/key of the hashmap is the elements to be combined - private List>>> precomputedCombinations = new ArrayList>>>(); - - - private Set> maxIdentifierCombination = new HashSet>(); - private Set> identifierCombination = new HashSet>(); - private Set combination = new HashSet(); - - private int size_combination=3; //Size of plan or size of words to be dropped - - private int size_input=10; //Eaither size of mappings or size of words - - - public void clearCombinations(){ - precomputedCombinations.clear(); - } - - - public Set> getIdentifierCombination(int size_object, int size_combo){ - - //Objects are inserted from position 0! - - if (precomputedCombinations.size()<=size_combo-1){ - - extractIdentifierCombination(size_object, size_combo); - - //We are supposed to add in order: e.g. we look for plans of 2 before plans of 3 - precomputedCombinations.add(size_combo-1, new HashMap>>()); - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - - } - else if (!precomputedCombinations.get(size_combo-1).containsKey(size_object)){ - extractIdentifierCombination(size_object, size_combo); - - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - } - - - return precomputedCombinations.get(size_combo-1).get(size_object); - - - } - - - public void setDefaultSizes(int sizeinput, int sizecombination){ - size_input = sizeinput; - size_combination=sizecombination; - } - - - - - public void preComputeIdentifierCombination(){ - - for (int j=1; j<=size_combination; j++){//subgroup - - precomputedCombinations.add(j-1, new HashMap>>()); - - for (int i=2; i<=size_input; i++){//size - - extractIdentifierCombination(i, j); - - //System.out.println(j + " " + i + " " +identifierCombination); - - //We insert in position 0 - - precomputedCombinations.get(j-1).put(i, new HashSet>(identifierCombination)); - - - } - - } - - //System.out.println(precomputedCombinations.size()); - //System.out.println(precomputedCombinations); - - } - - /** - * Creates set of combinations of given size from a set of elements - * @param numElements - * @param sizeCombinations - */ - private void extractIdentifierCombination(int numElements, int sizeCombinations){ - identifierCombination.clear(); - combination.clear(); - if (numElements==sizeCombinations){ - for (int i=0; i(combination)); - } else { - extractIdentifierCombination(numElements, sizeCombinations, 0, 0); - } - } - - - - public Set> getMaxCombination(int size){ - maxIdentifierCombination.clear(); - combination.clear(); - for (int i=0; i(combination)); - return maxIdentifierCombination; - } - - - public Set getMaxCombinationSet(int size){ - combination.clear(); - for (int i=0; i(combination)); - combination.remove(i); - } else { - combination.add(i); - extractIdentifierCombination(numElements, sizeCombinations, i+1, level+1); - combination.remove(i); - } - } - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombinationStatic.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombinationStatic.java deleted file mode 100644 index a43dfa6e94..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/PrecomputeIndexCombinationStatic.java +++ /dev/null @@ -1,190 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.utilities; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - - -/** - * Static class: not recommended for web service - * This class will precompute and manage the index combination for: - * 1. Weak mappings (combination of words to be dropped) - * 2. Repair plans from a given input of mappings - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 10, 2011 - * - */ -public class PrecomputeIndexCombinationStatic { - - - //The position of the list is the size of the combinations, then the entry/key of the hashmap is the elements to be combined - private static List>>> precomputedCombinations = new ArrayList>>>(); - - - private static Set> maxIdentifierCombination = new HashSet>(); - private static Set> identifierCombination = new HashSet>(); - private static Set combination = new HashSet(); - - private static int size_combination=3; //Size of plan or size of words to be dropped - - private static int size_input=10; //Eaither size of mappings or size of words - - - public static void clearCombinations(){ - precomputedCombinations.clear(); - } - - - public static Set> getIdentifierCombination(int size_object, int size_combo){ - - //Objects are inserted from position 0! - - if (precomputedCombinations.size()<=size_combo-1){ - - extractIdentifierCombination(size_object, size_combo); - - //We are supposed to add in order: e.g. we look for plans of 2 before plans of 3 - precomputedCombinations.add(size_combo-1, new HashMap>>()); - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - - } - else if (!precomputedCombinations.get(size_combo-1).containsKey(size_object)){ - extractIdentifierCombination(size_object, size_combo); - - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - } - - - return precomputedCombinations.get(size_combo-1).get(size_object); - - - } - - - public static void setDefaultSizes(int sizeinput, int sizecombination){ - size_input = sizeinput; - size_combination=sizecombination; - } - - - - - public static void preComputeIdentifierCombination(){ - - for (int j=1; j<=size_combination; j++){//subgroup - - precomputedCombinations.add(j-1, new HashMap>>()); - - for (int i=2; i<=size_input; i++){//size - - extractIdentifierCombination(i, j); - - //System.out.println(j + " " + i + " " +identifierCombination); - - //We insert in position 0 - - precomputedCombinations.get(j-1).put(i, new HashSet>(identifierCombination)); - - - } - - } - - //System.out.println(precomputedCombinations.size()); - //System.out.println(precomputedCombinations); - - } - - /** - * Creates set of combinations of given size from a set of elements - * @param numElements - * @param sizeCombinations - */ - private static void extractIdentifierCombination(int numElements, int sizeCombinations){ - identifierCombination.clear(); - combination.clear(); - if (numElements==sizeCombinations){ - for (int i=0; i(combination)); - } else { - extractIdentifierCombination(numElements, sizeCombinations, 0, 0); - } - } - - - - public static Set> getMaxCombination(int size){ - maxIdentifierCombination.clear(); - combination.clear(); - for (int i=0; i(combination)); - return maxIdentifierCombination; - } - - - public static Set getMaxCombinationSet(int size){ - combination.clear(); - for (int i=0; i(combination)); - combination.remove(i); - } else { - combination.add(i); - extractIdentifierCombination(numElements, sizeCombinations, i+1, level+1); - combination.remove(i); - } - } - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Timer.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Timer.java deleted file mode 100644 index 5c0221932a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Timer.java +++ /dev/null @@ -1,64 +0,0 @@ -package uk.ac.ox.krr.logmap2.utilities; - -/** - * - *Class adapted/reused from Pagoda - * - */ -public class Timer { - - double pastTime = 0; - boolean active = false; - - long startTime; - - public Timer() { - resume(); - } - - public void resume() { - if (active) return; - startTime = System.currentTimeMillis();; - active = true; - } - - public double duration() { - double time = pastTime; - if (active) - time += (System.currentTimeMillis() - startTime) / 1000.; - return time; - } - - public double durationMilisecons() { - double time = pastTime; - if (active) - time += (System.currentTimeMillis() - startTime); - return time; - } - - public void pause() { - if (!active) return ; - pastTime = duration(); - active = false; - } - - public double reset() { - double ret = duration(); - pastTime = 0; - active = false; - resume(); - return ret; - } - - double timeout = -1; - - public boolean timeOut() { - if (timeout < 0) return false; - return duration() > timeout; - } - - public void setTimeout(double timeout) { - this.timeout = timeout; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Utilities.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Utilities.java deleted file mode 100644 index 593b3f2121..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap2/utilities/Utilities.java +++ /dev/null @@ -1,619 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap2.utilities; - -import java.util.ArrayList; - - -import java.util.Calendar; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.HashSet; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.util.NamespaceUtil; -import org.semanticweb.owlapi.util.OntologyIRIShortFormProvider; - -import uk.ac.ox.krr.logmap2.indexing.labelling_schema.Interval; -import uk.ac.ox.krr.logmap2.io.LogOutput; - - -public class Utilities { - - - //LOGMAP VERSION - public static final int LOGMAP = 0; - public static final int LOGMAPMENDUM = 1; - public static final int LOGMAPLITE = 2; - public static final int LOGMAPINTERACTIVITY = 3; - - - //WEAK MAPPINGS LEVELS - public static final int WEAK_LEVEL1=1; - public static final int WEAK_LEVEL2=2; - public static final int WEAK_LEVEL3=3; - - //ORIGIN of AXIOM CLAUSE - public static final int MAP=0; - public static final int ONTO1=1; - public static final int ONTO2=2; - - //DIR IMPLICATION - public static final int L2R=0; //P->Q - public static final int R2L=-1; //P<-Q - public static final int EQ=-2; //P<->Qversion = Utilities.LOGMAPMENDUM; - public static final int NoMap=-3; - public static final int Flagged=-4; //Flagged mappinsg in Largebio - - - //TYPE OF MAPPING - public static final int CLASSES=0; - public static final int DATAPROPERTIES=1; - public static final int OBJECTPROPERTIES=2; - public static final int INSTANCES=3; - public static final int UNKNOWN=4; - - public static final String CLASSES_STR="CLS"; - public static final String DATAPROPERTIES_STR="DPROP"; - public static final String OBJECTPROPERTIES_STR="OPROP"; - public static final String INSTANCES_STR="INST"; - - - //Reasoner - public static final int STRUCTURAL_REASONER=0; - public static final int HERMIT_REASONER=1; - public static final int CONDOR_INPUT=2; - - //Ontos - public static final int FMA=0; - public static final int NCI=1; - public static final int SNOMED=2; - public static final int Chemo=3; - public static final int NCIAn=4; - public static final int Mouse=5; - public static final int ontoA=6; - public static final int ontoB=7; - - //Pairs - public static final int FMA2NCI=0; - public static final int FMA2SNOMED=1; - public static final int SNOMED2NCI=2; - public static final int SNOMED2LUCADA=3; - public static final int OntoA2OntoB=4; - public static final int MOUSE2HUMAN=5; - public static final int NCIpeque2FMA=6; - public static final int NCI2FMApeque=7; - public static final int NCI2LUCADA=8; - public static final int FMA2LUCADA=9; - public static final int LIBRARY=10; - public static final int CONFERENCE=11; - public static final int INSTANCE=12; - public static final int MULTILINGUAL=13; - - - public static final int CONFLICT=0; - public static final int DANG_EQUIV=1; - public static final int DANG_SUB=2; - - public static final int NOCONFLICT=3; - - public static final int DISPARATE=4; - //public static final int DISP_PATH=5; - - public static final int COMPATIBLE=6; - - - public static String getStringRepresentation4Dir(int dir){ - - if (dir == EQ){ - return "="; - } - else if (dir == L2R){ - return "<"; - } - else{ - return ">"; - } - - } - - - public static int getIntegerRepresentation4Dir(String dir){ - - if (dir.equals("=")){ - return EQ; - } - else if (dir.equals("<")){ - return L2R; - } - else{ - return R2L; - } - - } - - - public static double getRoundValue(double value, int decimals){ - //double aux = 10.0 * ((double)decimals); - double aux = Math.pow(10.0, (double)decimals); - - return (double)Math.round(value*aux)/aux; - } - - public static String serializeIntervals(List listIntervals){ - - String intervalsStr=""; - - for (int i=0; i0) - intervalsStr+=listIntervals.get(listIntervals.size()-1).serialize(); - - return intervalsStr; - } - - /** - * (Anton) - * @param listIntervals - * @return - */ - public static String serializeIntervals(Set setIntervals){ - String intervalsStr=""; - Iterator it = setIntervals.iterator(); - - if(it.hasNext()) - intervalsStr += it.next().serialize(); - - while(it.hasNext()) { - Interval i = it.next(); - intervalsStr += "," + i.serialize(); - } - - return intervalsStr; - } - - - - public static Set deserializeIntervals(String intervalsStr){ - //List listIntervals = new ArrayList(); - Set listIntervals = new HashSet(); - - - String[] listIndexes = intervalsStr.split(","); - - for (int i=0; i list){ - - String liststr=""; - - if (list.size()>0){ - for (int i=0; i set){ - String setstr=""; - Iterator it = set.iterator(); - - if(it.hasNext()) - setstr += it.next(); - - while(it.hasNext()) { - int i = it.next(); - setstr += "," + i; - } - - return setstr; - } - - - //private static Set list_int = new HashSet(); - //private static Set list_str = new HashSet(); - - public static Set deserializeListIntegers(String serializedlist){ - - Set list_int = new HashSet(); - //list_int.clear(); - - String[] elements; - - if (serializedlist.indexOf(",")>0){ - elements=serializedlist.split(","); - for (int i=0; i list){ - - String liststr=""; - - if (list.size()>0){ - for (int i=0; i deserializeListStrings(String serializedlist){ - - Set list_str = new HashSet(); - //list_str.clear(); - - String[] elements; - - if (serializedlist.indexOf(",")>0){ - elements=serializedlist.split(","); - for (int i=0; i list_str = new HashSet(); - String str=""; - //list_str.clear(); - - String[] elements; - - if (serializedlist.indexOf(",")>0){ - elements=serializedlist.split(","); - for (int i=0; i=0) - return uriStr.split("#")[1]; - return uriStr; - } - - - public static String getEntityLabelFromURI(String uriStr){ - - //LogOutput.print(uriStr + " " + uriStr.indexOf("#") + " " + uriStr.split("#").length); - - if (uriStr.indexOf("#")>=0){// && uriStr.indexOf("#")1){ - //LogOutput.print(uriStr.split("#")[1]); - return uriStr.split("#")[1]; - } - else{ - LogOutput.print("Empty label: " + uriStr); - return "empty"+ Calendar.getInstance().getTimeInMillis(); - } - } - //else { - //For URIS like http://ontology.dumontierlab.com/hasReference - int index = uriStr.lastIndexOf("/"); - if (index>=0){ - //LogOutput.print(uriStr.substring(index+1)); - //if - return uriStr.substring(index+1); - } - //} - LogOutput.print("Complete URI: " + uriStr); - - return uriStr; - } - - - /** - * @deprecated - * @param uriStr - * @return - */ - public static String getNameSpaceFromURI_original(String uriStr){ - if (uriStr.startsWith("http")){ - if (uriStr.indexOf("#")>=0) - return uriStr.split("#")[0]; - else - return uriStr; - } - else - return ""; - - } - - - public static String getNameSpaceFromURI(String uriStr){ - if (uriStr.startsWith("http")){ - if (uriStr.indexOf("#")>=0){ - return uriStr.split("#")[0]; - } - else { - //For URIS like http://ontology.dumontierlab.com/hasReference - int index = uriStr.lastIndexOf("/"); - if (index>=0){ - return uriStr.substring(0, index+1); - } - } - return uriStr; - } - else - return ""; - - } - - - - - public static String[] splitStringByCapitalLetter(String str){ - - //We first capital prepositions - str = capitalPrepositions(str); - - String pattern = - - "(?<=[^\\p{Upper}])(?=\\p{Upper})" - // either there is anything that is not an uppercase character - // followed by an uppercase character - - + "|(?<=[\\p{Lower}])(?=\\d)" - // or there is a lowercase character followed by a digit - - //+ "|(?=\\d)(?<=[\\p{Lower}])" - ; - - return str.split(pattern); - //return str.split("(?=\\p{Upper})"); - - } - - public static String capitalPrepositions(String str){ - - //In some cases "of", "by", "with", "and", "for" are not in capitals within the label - - str = str.replaceAll("of(?=\\p{Upper})", "Of"); - str = str.replaceAll("with(?=\\p{Upper})", "With"); - str = str.replaceAll("for(?=\\p{Upper})", "For"); - str = str.replaceAll("and(?=\\p{Upper})", "And"); - str = str.replaceAll("by(?=\\p{Upper})", "By"); - str = str.replaceAll("to(?=\\p{Upper})", "To"); - str = str.replaceAll("on(?=\\p{Upper})", "On"); - str = str.replaceAll("in(?=\\p{Upper})", "In"); - - return str; - - } - - - - - - - - public static void main(String[] args) { - - - OntologyIRIShortFormProvider xutils = new OntologyIRIShortFormProvider(); - - System.out.println(xutils.getShortForm(IRI.create("http://eu.optique.ontology/statoil_sota_ontology_demo.owl#lalal"))); - - System.out.println(xutils.getShortForm(IRI.create("http://www.optique-project.eu/resource/NPD_small_schema_demo/npd_schema/wellbore_exploration_all#lalal2"))); - - - if (true) - return; - - //"AJCCStagingSystem7thEd"; - - Date d1 = new Date("1913-09-13"); - Date d2 = new Date("13, Sep 1913"); - - - System.out.println(d1.toString()); - System.out.println(d2.toString()); - - - //String regex="[&\\.,;(]|is|are|was|were"; - String regex="([&\\.,;(]|is|are|was|were)"; - - System.out.println ("123&345: " + "123&345".matches(".*"+regex+".*") + " ." + "123&345".split(regex)[0] + " -- " + "123&345".split(regex)[1]); - System.out.println ("123.345: " + "123.345".matches(".*"+regex+".*") + " ." + "123.345".split(regex)[0] + " -- " + "123.345".split(regex)[1]); - System.out.println ("123,345: " + "123,345".matches(".*"+regex+".*") + " ." + "123,345".split(regex)[0] + " -- " + "123,345".split(regex)[1]); - System.out.println ("123;345: " + "123;345".matches(".*"+regex+".*") + " ." + "123;345".split(regex)[0] + " -- " + "123;345".split(regex)[1]); - System.out.println ("123(345: " + "123(345".matches(".*"+regex+".*") + " ." + "123(345".split(regex)[0] + " -- " + "123(345".split(regex)[1]); - System.out.println ("123 is 345: " + "123 is 345".matches(".*"+regex+".*") + " ." + "123 is 345".split(regex)[0] + " -- " + "123 is 345".split(regex)[1]); - System.out.println ("123 was 345: " + "123 was 345".matches(".*"+regex+".*") + " ." + "123 was 345".split(regex)[0] + " -- " + "123 was 345".split(regex)[1]); - System.out.println ("123 were 345: " + "123 were 345".matches(".*"+regex+".*") + " ." + "123 were 345".split(regex)[0] + " -- " + "123 were 345".split(regex)[1]); - System.out.println ("123 are 345: " + "123 are 345".matches(".*"+regex+".*") + " ." + "123 are 345".split(regex)[0] + " -- " + "123 are 345".split(regex)[1]); - - - System.out.println("Name for http://www.opengis.net/citygml/appearance/2.0/ : '" + getEntityLabelFromURI("http://www.opengis.net/citygml/appearance/2.0/") + "'"); - System.out.println("NS for http://www.opengis.net/citygml/appearance/2.0/ : '" + getNameSpaceFromURI("http://www.opengis.net/citygml/appearance/2.0/") + "'"); - - int classId = 345; - - Interval descOrderInterval = new Interval(-classId,-classId); - - System.out.println("Interval negative: " + descOrderInterval + " " + (descOrderInterval.getLeftBound()<0)); - - - if (true) - return; - - - String reg_ex=".*(.)\\1+.*"; - - String reg_ex2 = ".*(.)\\1\\1.*"; - String reg_ex3 = ".*(\\s)\\1\\1.*"; - - System.out.println (" laaala lalaaa".matches(reg_ex3)); - System.out.println ("laaala lalaaa".matches(reg_ex3)); - System.out.println ("laaala lalaaa".matches(reg_ex3)); - System.out.println(""); - - - /*System.out.println("cool: " + "cool".matches(reg_ex)); - System.out.println("aa: " + "aa".matches(reg_ex)); - System.out.println("aaa: " + "aaa".matches(reg_ex)); - System.out.println("aba: " + "aba".matches(reg_ex)); - - System.out.println("");*/ - - System.out.println("cool: " + "cool".matches(reg_ex2)); - System.out.println("aa: " + "aa".matches(reg_ex2)); - System.out.println("aaa: " + "aaa".matches(reg_ex2)); - System.out.println("aba: " + "aba".matches(reg_ex2)); - System.out.println("ccaaadd: " + "ccaaadd".matches(reg_ex2)); - System.out.println("ccaadd: " + "ccaadd".matches(reg_ex2)); - System.out.println("jaaabbbj: " + "jaaabbj".matches(reg_ex2)); - - String str = "assddffffadfdd..o"; - - System.out.println (str.matches(reg_ex)); - //System.out.println (str.replaceAll(reg_ex, "$1")); - - - //System.out.println (str.matches(reg_ex2)); - //System.out.println (str.replaceAll(reg_ex2, "$1")); - - - if (true) return; - - - String uri ="http://ontology.dumontierlab.com/inheresIn"; - System.out.println(getEntityLabelFromURI(uri)); - System.out.println(getNameSpaceFromURI(uri)); - - - String uri2 ="http://ontology.dumontierlab.com/onto.owl#inheresIn"; - System.out.println(getEntityLabelFromURI(uri2)); - System.out.println(getNameSpaceFromURI(uri2)); - - if (true) - return; - - String[] words = splitStringByCapitalLetter("AJCCStagingSystem7thEd"); - - for (int i=0; i. - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite; - - -import java.net.URL; - - - -import java.util.Calendar; -import java.util.HashSet; -import java.util.Set; -import java.util.HashMap; -import java.util.Map; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; - -//import uk.ac.manchester.syntactic_locality.ModuleExtractor; -import uk.ac.manchester.syntactic_locality.OntologyModuleExtractor; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.reasoning.SatisfiabilityIntegration; -import uk.ac.ox.krr.logmap_lite.io.ReadFile; -import uk.ac.ox.krr.logmap_lite.io.OAEIAlignmentOutput; -import uk.ac.ox.krr.logmap_lite.io.OWLAlignmentFormat; -import uk.ac.ox.krr.logmap_lite.io.RDFAlignmentFormat; - - -/** - * - * This class includes the basic lexical capabilities of LogMap: - * overlapping extraction and intersection of inverted files - * - * @author Ernesto Jimenez Ruiz - * - */ -public class LogMap_Lite { - - - - //DIR IMPLICATION - public static final int L2R=0; //P->Q - public static final int R2L=-1; //P<-Q - public static final int EQ=-2; //P<->Q - - - private long init_tot, init, fin; - private double time_loading=0.0; - private double total_time=0.0; - - private OntologyLoader onto_loader1; - private OntologyLoader onto_loader2; - - private OntologyProcessing onto_proc1; - private OntologyProcessing onto_proc2; - - private boolean extract_overlapping=false; - private boolean check_with_gold_standard=false; - - private OWLOntology module1_overlapping; - private OWLOntology module2_overlapping; - private OWLOntology mappings_owl; - - private OAEIAlignmentOutput alignment_output; - - private Map> mappings; - private Map> mappingsOProp; - private Map> mappingsDProp; - private Map> mappingsIndiv; - - - private boolean outPutOnlyIndiv; - private String output_path; - - - /** - * Constructor OAEI - */ - public LogMap_Lite(){ - - extract_overlapping=false; - check_with_gold_standard=false; - - } - - - /** - * General constructor - * @param iri1_str - * @param iri2_str - * @param extract_overlapping - */ - public LogMap_Lite( - String iri1_str, - String iri2_str, - String gs_mappings_file, - boolean create_owl_mappings_onto, - boolean extract_overlapping, - boolean eval_impact){ - - - this.extract_overlapping=extract_overlapping; - - try { - - outPutOnlyIndiv=false; - - - init_tot = Calendar.getInstance().getTimeInMillis(); - loadingAndProcessingOntologies(iri1_str, iri2_str); - - if (!gs_mappings_file.equals("")) - check_with_gold_standard=true; - - - computeMappings(); - - - if (check_with_gold_standard){ - - loadMappingsGS(gs_mappings_file); - - getPrecisionAndRecallMappings(); - - } - - - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Matching Time (s): " + (float)((double)fin-(double)init_tot)/1000.0); - total_time = (float)((double)fin-(double)init_tot)/1000.0; - total_time = total_time - time_loading; - System.out.println("Time loading ontos (s): " + time_loading); - System.out.println("LogMap Lite Matching Time (s): " + total_time); - - - if (create_owl_mappings_onto) - createOWLOntology4Mappings(); - - - if (extract_overlapping){ - computeOveralapping(); //Module1 and Module2 - } - - if (eval_impact){ - init = Calendar.getInstance().getTimeInMillis(); - impactIntegration(); - fin = Calendar.getInstance().getTimeInMillis(); - total_time = (float)((double)fin-(double)init)/1000.0; - System.out.println("Time checking impact (s): " + total_time); - } - - - } - catch (Exception e){ - e.printStackTrace(); - } - - - - - } - - - /** - * Constructor for Individual matching - * @param iri1_str - * @param iri2_str - * @param gs_mappings_file - * @param output_path - */ - public LogMap_Lite( - String iri1_str, - String iri2_str, - String gs_mappings_file, - String output_path){ - - - try { - - outPutOnlyIndiv=true; - - this.output_path = output_path; - - - init_tot = Calendar.getInstance().getTimeInMillis(); - loadingAndProcessingOntologies(iri1_str, iri2_str); - - if (!gs_mappings_file.equals("")) - check_with_gold_standard=true; - - - computeMappings(); - - - if (check_with_gold_standard){ - - loadMappingsGS(gs_mappings_file); - - getPrecisionAndRecallMappings(); - - } - - createOWLOntology4Mappings(); - - - saveExtractedIndividualMappings("logmap_lite"); - - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Matching Time (s): " + (float)((double)fin-(double)init_tot)/1000.0); - total_time = (float)((double)fin-(double)init_tot)/1000.0; - total_time = total_time - time_loading; - System.out.println("Time loading ontos (s): " + time_loading); - System.out.println("LogMap Lite Matching Time (s): " + total_time + "\n"); - - - - - - - - } - catch (Exception e){ - e.printStackTrace(); - } - - - - - } - - - /** - * Method OAEI - * @param source - * @param target - * @throws Exception - */ - public void align(URL source, URL target) throws Exception{ - - - init_tot = Calendar.getInstance().getTimeInMillis(); - - loadingAndProcessingOntologies(source.toURI().toString(), target.toURI().toString()); - - computeMappings(); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Matching Time (s): " + (float)((double)fin-(double)init_tot)/1000.0); - total_time = (float)((double)fin-(double)init_tot)/1000.0; - total_time = total_time - time_loading; - System.out.println("Time loading ontos (s): " + time_loading); - System.out.println("LogMap Lite Matching Time (s): " + total_time); - - - } - - - /** - * Method OAEI - * @return - * @throws Exception - */ - public URL returnAlignmentFile() throws Exception{ - - - alignment_output = new OAEIAlignmentOutput("alignment", onto_loader1.getOntologyIRIStr(), onto_loader2.getOntologyIRIStr()); - - - for (int ide1 : mappings.keySet()){ - for (int ide2 : mappings.get(ide1)){ - - alignment_output.addClassMapping2Output( - onto_proc1.getIRI4identifier(ide1), - onto_proc2.getIRI4identifier(ide2), - LogMap_Lite.EQ, - 1.0 - ); - } - } - - for (int ide1 : mappingsDProp.keySet()){ - for (int ide2 : mappingsDProp.get(ide1)){ - - alignment_output.addDataPropMapping2Output( - onto_proc1.getIRI4DPropIdentifier(ide1), - onto_proc2.getIRI4DPropIdentifier(ide2), - LogMap_Lite.EQ, - 1.0 - ); - } - } - - for (int ide1 : mappingsOProp.keySet()){ - for (int ide2 : mappingsOProp.get(ide1)){ - - alignment_output.addObjPropMapping2Output( - onto_proc1.getIRI4OPropIdentifier(ide1), - onto_proc2.getIRI4OPropIdentifier(ide2), - LogMap_Lite.EQ, - 1.0 - ); - } - } - - for (int ide1 : mappingsIndiv.keySet()){ - for (int ide2 : mappingsIndiv.get(ide1)){ - alignment_output.addInstanceMapping2Output( - onto_proc1.getIRI4Individual(ide1), - onto_proc2.getIRI4Individual(ide2), - 1.0 - ); - } - } - - - - - - alignment_output.saveOutputFile(); - - return alignment_output.returnAlignmentFile(); - - } - - - /** - * So far only instance - * @param file_name - * @throws Exception - */ - private void saveExtractedIndividualMappings(String file_name) throws Exception{ - - RDFAlignmentFormat rdf_output = new RDFAlignmentFormat( - output_path + "/" + file_name + ".rdf", onto_loader1.getOntologyIRIStr(), onto_loader2.getOntologyIRIStr()); - - //rdf_output. - - for (int ide1 : mappingsIndiv.keySet()){ - for (int ide2 : mappingsIndiv.get(ide1)){ - rdf_output.addInstanceMapping2Output( - onto_proc1.getIRI4Individual(ide1), - onto_proc2.getIRI4Individual(ide2), - 1.0 - ); - } - } - - - rdf_output.saveOutputFile(); - - - - - } - - - - - private void loadingAndProcessingOntologies(String iri1_str, String iri2_str) throws Exception{ - //Loading Ontology 1 and Light processing - init = Calendar.getInstance().getTimeInMillis(); - onto_loader1 = new OntologyLoader(iri1_str); - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time loading ontology 1 (s): " + (float)((double)fin-(double)init)/1000.0); - time_loading += (float)((double)fin-(double)init)/1000.0; - - init = Calendar.getInstance().getTimeInMillis(); - onto_proc1 = new OntologyProcessing(onto_loader1.getOWLOntology(), extract_overlapping); - - onto_loader1.createAxiomSet(); //we only keep set of axioms - onto_loader1.clearOntology(); - onto_proc1.clearOntoloy(); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time processing ontology 1 (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Loading Ontology 2 and Light processing - init = Calendar.getInstance().getTimeInMillis(); - onto_loader2 = new OntologyLoader(iri2_str); - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time loading ontology 2 (s): " + (float)((double)fin-(double)init)/1000.0); - time_loading += (float)((double)fin-(double)init)/1000.0; - - init = Calendar.getInstance().getTimeInMillis(); - onto_proc2 = new OntologyProcessing(onto_loader2.getOWLOntology(), extract_overlapping); - - onto_loader2.createAxiomSet(); - onto_loader2.clearOntology(); - onto_proc2.clearOntoloy(); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time processing ontology 2 (s): " + (float)((double)fin-(double)init)/1000.0); - } - - - - - - - private void computeMappings(){ - - - computeClassMappings(); - - computeDataPropMappings(); - - computeObjPropMappings(); - - compuetIndividualMappings(); - - //System.out.println("Number of mappings: "+ mappings_ll.size()); - - } - - - private void computeClassMappings(){ - - Set> if_exact_intersect; - - init = Calendar.getInstance().getTimeInMillis(); - //We perform intersection an we only keep in inverted file the intersected elements - if_exact_intersect = onto_proc1.getInvertedFileExact().keySet(); - if_exact_intersect.retainAll(onto_proc2.getInvertedFileExact().keySet()); - onto_proc2.getInvertedFileExact().keySet().retainAll(if_exact_intersect); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time intersecting IF exact classes (s): " + (float)((double)fin-(double)init)/1000.0); - - mappings = new HashMap>(); - - for (Set entry : if_exact_intersect){ - - if (entry.isEmpty()){ - System.out.println("EMPTY SET IN IF CLASSES"); - continue; - } - - for (int ide1 : onto_proc1.getInvertedFileExact().get(entry)){ - - if (!mappings.containsKey(ide1)) - mappings.put(ide1, new HashSet()); - - for (int ide2 : onto_proc2.getInvertedFileExact().get(entry)){ - mappings.get(ide1).add(ide2); - - } - - } - } - - //For local comparison - if (check_with_gold_standard && !outPutOnlyIndiv){ - - for (int ide1 : mappings.keySet()){ - for (int ide2 : mappings.get(ide1)){ - - mappings_ll.add(new MappingObjectStr( - onto_proc1.getIRI4identifier(ide1), - onto_proc2.getIRI4identifier(ide2))); - - } - } - - } - } - - - - - - private void compuetIndividualMappings(){ - - - Set> if_exact_intersect_indiv; - - init = Calendar.getInstance().getTimeInMillis(); - //We perform intersection an we only keep in inverted file the intersected elements - if_exact_intersect_indiv = onto_proc1.getInvertedFileExactIndividuals().keySet(); - if_exact_intersect_indiv.retainAll(onto_proc2.getInvertedFileExactIndividuals().keySet()); - onto_proc2.getInvertedFileExactIndividuals().keySet().retainAll(if_exact_intersect_indiv); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time intersecting IF exact classes (s): " + (float)((double)fin-(double)init)/1000.0); - - mappingsIndiv = new HashMap>(); - - for (Set entry : if_exact_intersect_indiv){ - - if (entry.isEmpty()){ - System.out.println("EMPTY SET IN IF CLASSES"); - continue; - } - - for (int ide1 : onto_proc1.getInvertedFileExactIndividuals().get(entry)){ - - if (!mappingsIndiv.containsKey(ide1)) - mappingsIndiv.put(ide1, new HashSet()); - - for (int ide2 : onto_proc2.getInvertedFileExactIndividuals().get(entry)){ - mappingsIndiv.get(ide1).add(ide2); - - } - - } - } - - //For local comparison - if (check_with_gold_standard){ - for (int ide1 : mappingsIndiv.keySet()){ - for (int ide2 : mappingsIndiv.get(ide1)){ - - mappings_ll.add(new MappingObjectStr( - onto_proc1.getIRI4Individual(ide1), - onto_proc2.getIRI4Individual(ide2))); - - } - } - } - - - } - - - private void computeDataPropMappings(){ - - Set> if_exact_intersect; - - init = Calendar.getInstance().getTimeInMillis(); - //We perform intersection an we only keep in inverted file the intersected elements - if_exact_intersect = onto_proc1.getInvertedFileExactDataProp().keySet(); - if_exact_intersect.retainAll(onto_proc2.getInvertedFileExactDataProp().keySet()); - onto_proc2.getInvertedFileExactDataProp().keySet().retainAll(if_exact_intersect); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time intersecting IF exact dProp (s): " + (float)((double)fin-(double)init)/1000.0); - - mappingsDProp = new HashMap>(); - - for (Set entry : if_exact_intersect){ - for (int ide1 : onto_proc1.getInvertedFileExactDataProp().get(entry)){ - - if (!mappingsDProp.containsKey(ide1)) - mappingsDProp.put(ide1, new HashSet()); - - for (int ide2 : onto_proc2.getInvertedFileExactDataProp().get(entry)){ - mappingsDProp.get(ide1).add(ide2); - - } - - } - } - - //For local comparison - if (check_with_gold_standard && !outPutOnlyIndiv){ - - for (int ide1 : mappingsDProp.keySet()){ - for (int ide2 : mappingsDProp.get(ide1)){ - - mappings_ll.add(new MappingObjectStr( - onto_proc1.getIRI4DPropIdentifier(ide1), - onto_proc2.getIRI4DPropIdentifier(ide2))); - - } - } - - } - } - - private void computeObjPropMappings(){ - - Set> if_exact_intersect; - - init = Calendar.getInstance().getTimeInMillis(); - //We perform intersection an we only keep in inverted file the intersected elements - if_exact_intersect = onto_proc1.getInvertedFileExactObjectProp().keySet(); - if_exact_intersect.retainAll(onto_proc2.getInvertedFileExactObjectProp().keySet()); - onto_proc2.getInvertedFileExactObjectProp().keySet().retainAll(if_exact_intersect); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("Time intersecting IF exact oProp (s): " + (float)((double)fin-(double)init)/1000.0); - - mappingsOProp = new HashMap>(); - - for (Set entry : if_exact_intersect){ - for (int ide1 : onto_proc1.getInvertedFileExactObjectProp().get(entry)){ - - if (!mappingsOProp.containsKey(ide1)) - mappingsOProp.put(ide1, new HashSet()); - - for (int ide2 : onto_proc2.getInvertedFileExactObjectProp().get(entry)){ - mappingsOProp.get(ide1).add(ide2); - - } - - } - } - - - //For local comparison - if (check_with_gold_standard && !outPutOnlyIndiv){ - - for (int ide1 : mappingsOProp.keySet()){ - for (int ide2 : mappingsOProp.get(ide1)){ - - mappings_ll.add(new MappingObjectStr( - onto_proc1.getIRI4OPropIdentifier(ide1), - onto_proc2.getIRI4OPropIdentifier(ide2))); - - } - } - - } - - - } - - - private void computeOveralapping(){ - init = Calendar.getInstance().getTimeInMillis(); - - Set> if_weak_intersect; - - //We perform intersection an we only keep in inverted file the intersected elements - if_weak_intersect = onto_proc1.getWeakInvertedFile().keySet(); - if_weak_intersect.retainAll(onto_proc2.getWeakInvertedFile().keySet()); - onto_proc2.getWeakInvertedFile().keySet().retainAll(if_weak_intersect); - - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("\tTime intersecting IF weak (s): " + (float)((double)fin-(double)init)/1000.0); - - - Set entities1 = new HashSet(); - Set entities2 = new HashSet(); - - for (Set str_set: if_weak_intersect){ - for (int ide1 : onto_proc1.getWeakInvertedFile().get(str_set)){ - entities1.add(onto_proc1.getOWLClass4identifier(ide1)); - } - for (int ide2 : onto_proc2.getWeakInvertedFile().get(str_set)){ - entities2.add(onto_proc2.getOWLClass4identifier(ide2)); - } - - } - - //LogOutput.print("\tSize entities 1: " + entities1.size()); - //LogOutput.print("\tSize entities 2: " + entities2.size()); - - //We empty overlapping structures - onto_proc1.clearStructures(); - onto_proc2.clearStructures(); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("\tTime extracting entities4modules (s): " + (float)((double)fin-(double)init)/1000.0); - - - //Extract module (create new constructor) - //Give onto IRI to module - init = Calendar.getInstance().getTimeInMillis(); - - //Old module extractor - //ModuleExtractor module_extractor1 = new ModuleExtractor( - // onto_loader1.getAxiomSet(), SynchronizedOWLManager.createOWLOntologyManager(), false, false, true, true, false); - //module1_overlapping = module_extractor1.getLocalityModuleForSignatureGroup(entities1, onto_loader1.getOntologyIRIStr(), false); - OntologyModuleExtractor module_extractor1 = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - onto_loader1.getAxiomSet(), - true, - false, - true); - try { - module1_overlapping = module_extractor1.extractAsOntology( - entities1, - IRI.create(onto_loader1.getOntologyIRIStr())); - } catch (OWLOntologyCreationException e) { - LogOutput.print("Error when creating module ontology 1"); - //e.printStackTrace(); - } - - - module_extractor1.clearStrutures(); - - - onto_loader1.clearAxiomSet(); - entities1.clear(); - - //ModuleExtractor module_extractor2 = new ModuleExtractor( - // onto_loader2.getAxiomSet(), SynchronizedOWLManager.createOWLOntologyManager(), false, false, true, true, false); - //module2_overlapping = module_extractor2.getLocalityModuleForSignatureGroup(entities2, onto_loader2.getOntologyIRIStr(), false); - OntologyModuleExtractor module_extractor2 = - new OntologyModuleExtractor( - SynchronizedOWLManager.createOWLOntologyManager(), - onto_loader2.getAxiomSet(), - true, - false, - true); - try { - module2_overlapping = module_extractor2.extractAsOntology( - entities2, - IRI.create(onto_loader2.getOntologyIRIStr())); - } catch (OWLOntologyCreationException e) { - LogOutput.print("Error when creating module ontology 2"); - //e.printStackTrace(); - } - - - module_extractor2.clearStrutures(); - - onto_loader2.clearAxiomSet(); - entities2.clear(); - - fin = Calendar.getInstance().getTimeInMillis(); - //System.out.println("\tSize module 1: " + module1_overlapping.getSignature().size() + " " + onto_loader1.getSignatureSize()); - //System.out.println("\tSize module 2: " + module2_overlapping.getSignature().size() + " " + onto_loader2.getSignatureSize()); - //System.out.println("\tSize classes module 1: " + module1_overlapping.getClassesInSignature().size() + " " + onto_loader1.getClassesInSignatureSize()); - //System.out.println("\tSize classes module 2: " + module2_overlapping.getClassesInSignature().size() + " " + onto_loader2.getClassesInSignatureSize()); - //System.out.println("\tTime extracting modules (s): " + (float)((double)fin-(double)init)/1000.0); - - } - - - public OWLOntology getModule1(){ - return module1_overlapping; - } - public OWLOntology getModule2(){ - return module2_overlapping; - } - - public OWLOntology getOWLMappingsOntology(){ - return mappings_owl; - } - - - private void createOWLOntology4Mappings() throws Exception{ - - - OWLAlignmentFormat owl_alignment_output = new OWLAlignmentFormat("alignment.owl"); - - - for (int ide1 : mappings.keySet()){ - for (int ide2 : mappings.get(ide1)){ - - owl_alignment_output.addClassMapping2Output( - onto_proc1.getIRI4identifier(ide1), - onto_proc2.getIRI4identifier(ide2), - LogMap_Lite.EQ, - 1.0 - ); - } - } - - for (int ide1 : mappingsDProp.keySet()){ - for (int ide2 : mappingsDProp.get(ide1)){ - - owl_alignment_output.addDataPropMapping2Output( - onto_proc1.getIRI4DPropIdentifier(ide1), - onto_proc2.getIRI4DPropIdentifier(ide2), - LogMap_Lite.EQ, - 1.0 - ); - } - } - - for (int ide1 : mappingsOProp.keySet()){ - for (int ide2 : mappingsOProp.get(ide1)){ - - owl_alignment_output.addObjPropMapping2Output( - onto_proc1.getIRI4OPropIdentifier(ide1), - onto_proc2.getIRI4OPropIdentifier(ide2), - LogMap_Lite.EQ, - 1.0 - ); - } - } - - - for (int ide1 : mappingsIndiv.keySet()){ - for (int ide2 : mappingsIndiv.get(ide1)){ - owl_alignment_output.addInstanceMapping2Output( - onto_proc1.getIRI4Individual(ide1), - onto_proc2.getIRI4Individual(ide2), - 1.0 - ); - } - } - - - mappings_owl = owl_alignment_output.getOWLOntology(); - - - } - - - //For precission and recall - private Set mappings_gs = new HashSet(); - private Set mappings_ll = new HashSet(); - - /** - * Load Gold Standard Mappings - * @throws Exception - */ - private void loadMappingsGS(String gs_mappings) throws Exception{ - - ReadFile reader = new ReadFile(gs_mappings); - - - String line; - String[] elements; - - line=reader.readLine(); - - while (line!=null) { - - //if (line.indexOf("|")<0){ - if (line.indexOf("|")<0 && line.indexOf("\t")<0){ - line=reader.readLine(); - continue; - } - - //elements=line.split("\\|"); - if (line.indexOf("|")>=0) - elements=line.split("\\|"); - else { // if (line.indexOf("\t")>=0){ - elements=line.split("\\t"); - } - - mappings_gs.add(new MappingObjectStr(elements[0], elements[1])); - - - line=reader.readLine(); - } - - reader.closeBuffer(); - - } - - - - public Map> getClassMappings(){ - return mappings; - } - - - public Map> getDataPropMappings(){ - return mappingsDProp; - } - - - public Map> getObjectPropMappings(){ - return mappingsOProp; - } - - public Map> getInstanceMappings(){ - return mappingsIndiv; - } - - - - - - double precision=0.0; - double recall=0.0; - double fmeasure=0.0; - - public double getPrecision(){ - return precision; - } - public double getRecall(){ - return recall; - } - public double getFmeasure(){ - return fmeasure; - } - - private void getPrecisionAndRecallMappings() throws Exception{ - - - Set intersection; - - - - //ALL UMLS MAPPINGS - intersection=new HashSet(mappings_gs); - intersection.retainAll(mappings_ll); - - precision=((double)intersection.size())/((double)mappings_ll.size()); - recall=((double)intersection.size())/((double)mappings_gs.size()); - - fmeasure=(2*recall*precision)/(precision+recall); - - - System.out.println("WRT GS MAPPINGS"); - System.out.println("\tPrecision Mappings: " + precision); - System.out.println("\tRecall Mapping: " + recall); - System.out.println("\tF measure: " + (2*recall*precision)/(precision+recall)); - - - - Set difference; - difference=new HashSet(mappings_gs); - difference.removeAll(mappings_ll); - System.out.println("Difference in GS: " + difference.size()); - - Set difference2; - difference2=new HashSet(mappings_ll); - difference2.removeAll(mappings_gs); - System.out.println("Difference in Candidates: " + difference2.size()); - - - - } - - - public Set getLogMapLiteMappings(){ - return mappings_ll; - } - - - private int num_unsat = 0; - - private void impactIntegration() throws Exception { - - - System.out.println(module1_overlapping.getAxiomCount()); - System.out.println(module2_overlapping.getAxiomCount()); - System.out.println(mappings_owl.getAxiomCount()); - - - - SatisfiabilityIntegration sat_checker = new SatisfiabilityIntegration( - module1_overlapping, - module2_overlapping, - mappings_owl, - false,//Time_Out_Class - false); //factory - - num_unsat = sat_checker.getNumUnsatClasses(); - - System.out.println("Num unsat classes: " + num_unsat); - } - - - public boolean hasUnsatClasses(){ - return num_unsat>0; - } - - public int getNumUnsatClasses(){ - return num_unsat; - } - - - - /** - * @param args - */ - public static void main(String[] args) { - - String uri1; - String uri2; - String gs_mappings; - int ontos = 1; - - if (ontos==1){ - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_whole_ontology.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_FMA_NCI_cleantDG.txt"; - } - else if (ontos==2){ - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_FMA_whole_ontology.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snomed20090131_replab.owl"; - gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_FMA_SNOMED_cleantDG.txt"; - } - else if (ontos==3){ - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/snomed20090131_replab.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/OAEI_datasets/fma2nci_dataset/oaei2012_NCI_whole_ontology.owl"; - gs_mappings = "/usr/local/data/DataUMLS/UMLS_source_data/onto_mappings_SNOMED_NCI_cleantDG.txt"; - } - else{ - //uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/mouse_anatomy_2010_norm.owl"; - //uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/nci_anatomy_2010_norm.owl"; - uri1= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/mouse_anatomy_2010.owl"; - uri2= "file:/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/nci_anatomy_2010.owl"; - gs_mappings = "/usr/local/data/DataUMLS/UMLS_Onto_Versions/Anatomy/GSAll_Anatomy_2010.txt"; - } - boolean overlapping = false; - boolean create_owl_mappings_onto = false; - boolean eval_impact = false; - - - - uri1 = "file:/usr/local/data/Benchmark_Track/onto101.owl"; - uri2 = "file:/usr/local/data/Benchmark_Track/onto201.owl"; - - uri1 = "http://seals-test.sti2.at/tdrs-web/testdata/persistent/biblio-dataset/biblio-dataset-r1/suite/101/component/source"; - uri2 = "http://seals-test.sti2.at/tdrs-web/testdata/persistent/biblio-dataset/biblio-dataset-r1/suite/202/component/target"; - - gs_mappings = ""; - - LogMap_Lite logmap = new LogMap_Lite(uri1, uri2, gs_mappings, create_owl_mappings_onto, overlapping, eval_impact); - //logmap.getModule1(); - //logmap.getModule2(); - //logmap.getOWLMappingsOntology(); - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/MappingObjectStr.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/MappingObjectStr.java deleted file mode 100644 index f7edca31ba..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/MappingObjectStr.java +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite; - - -public class MappingObjectStr { - - String Iri_ent1_str; - String Iri_ent2_str; - double confidence; - int sourceMapping; //0: exact, l1, l2, l3 - - - - public MappingObjectStr(String iri_ent1, String iri_ent2){ - - Iri_ent1_str=iri_ent1; - Iri_ent2_str=iri_ent2; - confidence=1.0; - sourceMapping=0; - } - - public MappingObjectStr(String iri_ent1, String iri_ent2, double conf){ - - Iri_ent1_str=iri_ent1; - Iri_ent2_str=iri_ent2; - confidence=conf; - sourceMapping=0; - - } - -public MappingObjectStr(String iri_ent1, String iri_ent2, double conf, int sourcemapping){ - - Iri_ent1_str=iri_ent1; - Iri_ent2_str=iri_ent2; - confidence=conf; - sourceMapping=sourcemapping; - - } - - - public int getSourcemapping(){ - return sourceMapping; - } - - public String getIRIStrEnt1(){ - return Iri_ent1_str; - - } - - public String getIRIStrEnt2(){ - return Iri_ent2_str; - - } - - public double getConfidence(){ - return confidence; - - } - - - public boolean equals(Object o){ - - if (o == null) - return false; - if (o == this) - return true; - if (!(o instanceof MappingObjectStr)) - return false; - - MappingObjectStr i = (MappingObjectStr)o; - - return equals(i); - - } - - - public boolean equals(MappingObjectStr m){ - - //TODO: maybe the mapping is in the other from ent2 to ent1 - if (!Iri_ent1_str.equals(m.getIRIStrEnt1()) || !Iri_ent2_str.equals(m.getIRIStrEnt2())){ - return false; - } - return true; - } - - public String toString(){ - return "<"+Iri_ent1_str+"=="+Iri_ent2_str+">"; - } - - public int hashCode() { - int code = 10; - code = 40 * code + Iri_ent1_str.hashCode(); - code = 40 * code + Iri_ent2_str.hashCode(); - return code; - } - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyLoader.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyLoader.java deleted file mode 100644 index 257116687a..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyLoader.java +++ /dev/null @@ -1,181 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite; - -import org.semanticweb.owlapi.apibinding.OWLManager; - -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLOntologyCreationException; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; -import uk.ac.ox.krr.logmap2.utilities.Utilities; - -import java.util.List; -import java.util.HashSet; -import java.util.Set; - - - -/** - * This class will manage the loaded ontology - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 6, 2011 - * - */ -public class OntologyLoader { - - protected OWLDataFactory dataFactory; - protected OWLOntologyManager managerOnto; - protected OWLOntology onto; - - protected String iri_onto_str; - - protected int size_signature; - protected int size_classes; - - protected Set axiomSet = new HashSet(); - - - - public OntologyLoader(String phy_iri_onto) throws OWLOntologyCreationException{ - //managerOnto = OWLManager.createOWLOntologyManager(); - managerOnto = SynchronizedOWLManager.createOWLOntologyManager(); - dataFactory=managerOnto.getOWLDataFactory(); - - loadOWLOntology(phy_iri_onto); - - } - - - private String getURIFromClasses(){ - for (OWLClass cls : onto.getClassesInSignature()){ - return Utilities.getNameSpaceFromURI(cls.getIRI().toString()); - } - - //Just in case we return default IRI - return "http://logmap.cs.ox.ac.uk/ontology.owl"; - - } - - - public void loadOWLOntology(String phy_iri_onto) throws OWLOntologyCreationException { - - try { - //If import cannot be loaded - //TODO: deprecated?? - managerOnto.setSilentMissingImportsHandling(true); - - onto = managerOnto.loadOntology(IRI.create(phy_iri_onto)); - - //The preclassification with condor has no ontology id - if (onto.getOntologyID().getOntologyIRI()!=null){ - iri_onto_str=onto.getOntologyID().getOntologyIRI().toString(); //Give this iri to module - } - else { - iri_onto_str=getURIFromClasses(); - } - - LogOutput.print("IRI: " + iri_onto_str); - - size_signature = onto.getSignature(true).size(); - size_classes = onto.getClassesInSignature(true).size(); - - //LogOutput.print(iri_onto); - - - } - catch(Exception e){ - System.err.println("Error loading OWL ontology: " + e.getMessage()); - e.printStackTrace(); - throw new OWLOntologyCreationException(); //any error - } - } - - public void createAxiomSet(){ - axiomSet.addAll(onto.getAxioms()); - } - - public void clearAxiomSet(){ - axiomSet.clear(); - } - - public Set getAxiomSet(){ - return axiomSet; - } - - - public void clearOntology(){ - managerOnto.removeOntology(onto); - onto=null; - managerOnto=null; - } - - public OWLOntology getOWLOntology(){ - return onto; - } - - public String getOntologyIRIStr(){ - return iri_onto_str; - } - - public IRI getOntologyIRI(){ - return IRI.create(iri_onto_str); - } - - - public Set getClassesInSignature(){ - return onto.getClassesInSignature(); - } - - public int getSignatureSize(){ - return size_signature; - } - - public int getClassesInSignatureSize(){ - return size_classes; - } - - public void applyChanges(List listchanges){ - managerOnto.applyChanges(listchanges); - } - - public OWLDataFactory getDataFactory(){ - return dataFactory; - } - - - public void saveOntology(String phy_iri_onto) throws Exception{ - - managerOnto.saveOntology(onto, new RDFXMLOntologyFormat(), IRI.create(phy_iri_onto)); - - } - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyProcessing.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyProcessing.java deleted file mode 100644 index 9c34209d51..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/OntologyProcessing.java +++ /dev/null @@ -1,1179 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; -import org.semanticweb.owlapi.model.OWLAnonymousIndividual; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLIndividual; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLLiteral; -import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; -import org.semanticweb.owlapi.model.OWLOntology; - -import uk.ac.ox.krr.logmap2.Parameters; -import uk.ac.ox.krr.logmap2.io.LogOutput; -import uk.ac.ox.krr.logmap2.utilities.Utilities; -import uk.ac.ox.krr.logmap_lite.io.ReadFile; - -import org.semanticweb.owlapi.apibinding.OWLManager; - -public class OntologyProcessing { - - /** Inverted file for weak correspondences */ - private Map, Set> invertedFileExactLabels = new HashMap, Set>(); - private Map, Set> invertedFileExactLabels_dProp = new HashMap, Set>(); - private Map, Set> invertedFileExactLabels_oProp = new HashMap, Set>(); - private Map, Set> invertedFileExactLabels_indiv = new HashMap, Set>(); - - private Map, Set> invertedFileWeakLabels = new HashMap, Set>(); - private Map>> identifier2labels = new HashMap>>(); - - - /** List of OWLClass. Each position represents a class index*/ - private List listofOWLClass = new ArrayList(); - private List listofOWLDProp = new ArrayList(); - private List listofOWLOProp = new ArrayList(); - private List listofOWLIndividual = new ArrayList(); - - - protected String rdf_label_uri = "http://www.w3.org/2000/01/rdf-schema#label"; - public String rdf_comment_uri = "http://www.w3.org/2000/01/rdf-schema#comment"; - protected String synonym_iri ="http://oaei.ontologymatching.org/annotations#synonym"; - private String hasRelatedSynonym_uri = "http://www.geneontology.org/formats/oboInOwl#hasRelatedSynonym"; - private String hasExactSynonym_uri = "http://www.geneontology.org/formats/oboInOwl#hasExactSynonym"; - private String hasExactSynonym_uri2 = "http://www.geneontology.org/formats/oboInOWL#hasExactSynonym"; - - private String skos_pref_label = "http://www.w3.org/2004/02/skos/core#prefLabel"; - private String skos_alt_label = "http://www.w3.org/2004/02/skos/core#altLabel"; - - - private String name_dprop_im_uri = "http://oaei.ontologymatching.org/2012/IIMBTBOX/name"; - private String article_dprop_im_uri = "http://oaei.ontologymatching.org/2012/IIMBTBOX/article"; - private String has_value_dprop_im_uri = "http://www.instancematching.org/IIMB2012/ADDONS#has_value"; - - private String article_oprop_im_uri = "http://www.instancematching.org/IIMB2012/ADDONS#article"; - private String name_oprop_im_uri = "http://www.instancematching.org/IIMB2012/ADDONS#name"; - - //oaei2013 - //It may not be useful since numbers are not considered as good labels - private String population_dprop_im_uri = "http://dbpedia.org/ontology/populationTotal"; - private String birthName_dprop_im_uri = "http://dbpedia.org/ontology/birthName"; - - private String label_oprop_im_uri = "http://www.instancematching.org/label"; - private String curriculum_oprop_im_uri = "http://www.instancematching.org/curriculum"; - private String places_oprop_im_uri = "http://www.instancematching.org/places"; - - private String name_dprop_im_uri_2015 = "http://islab.di.unimi.it/imoaei2015#name"; - - - - private OWLOntology onto; - - private Set stopwordsSet = new HashSet(); - - private boolean extract_overlapping; - - private PrecomputeIndexCombination precomputeIndexCombination = new PrecomputeIndexCombination(); - - public OntologyProcessing(OWLOntology ont, boolean extract_overlapping) throws Exception{ - - onto=ont; - this.extract_overlapping=extract_overlapping; - precomputeIndexCombination.preComputeIdentifierCombination(); - loadStopWords(); - - processOntologyClassLabels(); - processOntologyObjPropLabels(); - processOntologyDataPropLabels(); - //New - processOntologyIndividualsLabels(); - - precomputeIndexCombination.clearStructures(); - - } - - - public void clearOntoloy(){ - onto=null; - } - - - /** - * This method will also associate an index to each class - */ - private void processOntologyClassLabels() { - - - - Set words=new HashSet(); - - int ident=0; - - //CLASSES - //First we give a identifier to each class - for (OWLClass cls : onto.getClassesInSignature(true)){ //Also imports - - if (!cls.isTopEntity() && !cls.isBottomEntity()){ - - listofOWLClass.add(cls); - if (extract_overlapping){ - identifier2labels.put(ident, new HashSet>()); - } - - //We extract a fix number of labels (at most). - for (String label : extractLabels4OWLEntity(cls, 6)){ - - words.addAll(cleanLabel(label)); - - if (words.size()>0){ - - if (!invertedFileExactLabels.containsKey(words)) - invertedFileExactLabels.put(new HashSet(words), new HashSet()); - - invertedFileExactLabels.get(words).add(ident); - - if (extract_overlapping){ - if (!invertedFileWeakLabels.containsKey(words)) - invertedFileWeakLabels.put(new HashSet(words), new HashSet()); - - invertedFileWeakLabels.get(words).add(ident); - - identifier2labels.get(ident).add(new ArrayList(words)); - } - - } - - //init - words.clear(); - - }//for labels - - ident++; - - }//if top-bottom - - }//for classes - - //System.out.println("\t\tClasses index: " + listofOWLClassIRIs.size()); - - - - if (extract_overlapping){ - setInvertedFileWeak4Overlapping(); - } - - } - - - /** - * This method will also associate an index to each dprop - */ - private void processOntologyDataPropLabels() { - - - - Set words=new HashSet(); - - int ident=0; - - //DATA Prop - //First we give a identifier to each class - for (OWLDataProperty dProp : onto.getDataPropertiesInSignature(true)){ //also imports - - if (!dProp.isTopEntity() && !dProp.isBottomEntity()){ - - listofOWLDProp.add(dProp); - - //We extract a fix number of labels (at most). - for (String label : extractLabels4OWLEntity(dProp, 1)){ - - words.addAll(cleanLabel(label)); - - if (words.size()>0){ - - if (!invertedFileExactLabels_dProp.containsKey(words)) - invertedFileExactLabels_dProp.put(new HashSet(words), new HashSet()); - - invertedFileExactLabels_dProp.get(words).add(ident); - - } - - //init - words.clear(); - - }//for labels - - ident++; - - }//if top-bottom - - }//for dProp - } - - - /** - * This method will also associate an index to each dprop - */ - private void processOntologyObjPropLabels() { - - Set words=new HashSet(); - - int ident=0; - - //Object PROP - //First we give a identifier to each class - for (OWLObjectProperty oProp : onto.getObjectPropertiesInSignature(true)){ //also imports - - if (!oProp.isTopEntity() && !oProp.isBottomEntity()){ - - listofOWLOProp.add(oProp); - - //We extract a fix number of labels (at most). - for (String label : extractLabels4OWLEntity(oProp, 1)){ - - words.addAll(cleanLabel(label)); - - if (words.size()>0){ - - if (!invertedFileExactLabels_oProp.containsKey(words)) - invertedFileExactLabels_oProp.put(new HashSet(words), new HashSet()); - - invertedFileExactLabels_oProp.get(words).add(ident); - - } - - //init - words.clear(); - - }//for labels - - ident++; - - }//if top-bottom - - }//for dProp - } - - - - - - private void processOntologyIndividualsLabels(){ - - //TODO - //Intersect IF - - int ident=0; - - - Set words=new HashSet(); - - ExtractAcceptedLabelsFromRoleAssertions indivLabelExtractor = - new ExtractAcceptedLabelsFromRoleAssertions(); - - - for (OWLNamedIndividual indiv : onto.getIndividualsInSignature(true)){//also imports - - listofOWLIndividual.add(indiv); - - //Ignore them - if (indivLabelExtractor.isDummyIndividual(indiv)){ - //LogOutput.printAlways("DUMMY individual: " + indiv.getIRI().toString()); - ident++; - continue; - } - - - - - for (String label : indivLabelExtractor.extractLexiconFromRoleAssertions(indiv)){ - - words.addAll(cleanLabel(label)); - - if (words.size()>0){ - - if (!invertedFileExactLabels_indiv.containsKey(words)) - invertedFileExactLabels_indiv.put(new HashSet(words), new HashSet()); - - invertedFileExactLabels_indiv.get(words).add(ident); - - } - - //init - words.clear(); - - }//for labels - - - ident++; - - }//for indiv - - - } - - - - - - public Map, Set> getInvertedFileExact(){ - return invertedFileExactLabels; - } - - public Map, Set> getInvertedFileExactIndividuals(){ - return invertedFileExactLabels_indiv; - } - - public Map, Set> getInvertedFileExactDataProp(){ - return invertedFileExactLabels_dProp; - } - - public Map, Set> getInvertedFileExactObjectProp(){ - return invertedFileExactLabels_oProp; - } - - public Map, Set> getWeakInvertedFile(){ - return invertedFileWeakLabels; - } - - - public String getIRI4identifier(int ident){ - return listofOWLClass.get(ident).getIRI().toString(); - } - - public String getIRI4DPropIdentifier(int ident){ - return listofOWLDProp.get(ident).getIRI().toString(); - } - - public String getIRI4OPropIdentifier(int ident){ - return listofOWLOProp.get(ident).getIRI().toString(); - } - - public String getIRI4Individual(int ident){ - return listofOWLIndividual.get(ident).getIRI().toString(); - } - - public String getLabel4identifier(int ident){ - return Utilities.getEntityLabelFromURI(listofOWLClass.get(ident).getIRI().toString()); - } - - - public OWLClass getOWLClass4identifier(int ident){ - return listofOWLClass.get(ident); - } - - - - - public void clearStructures(){ - invertedFileExactLabels.clear(); - invertedFileExactLabels_indiv.clear(); - invertedFileExactLabels_dProp.clear(); - invertedFileExactLabels_oProp.clear(); - invertedFileWeakLabels.clear(); - listofOWLClass.clear(); - listofOWLDProp.clear(); - listofOWLOProp.clear(); - stopwordsSet.clear(); - } - - - - private Set extractLabels4OWLEntity(OWLEntity ent, int max_size){ - - Set labels = new HashSet(); - OWLAnonymousIndividual geneid_value; - - - //We look for label first - for (OWLAnnotationAssertionAxiom annAx : ent.getAnnotationAssertionAxioms(onto)){ - - if (annAx.getAnnotation().getProperty().getIRI().toString().equals(rdf_label_uri) || - annAx.getAnnotation().getProperty().getIRI().toString().equals(synonym_iri) || - annAx.getAnnotation().getProperty().getIRI().toString().equals(skos_pref_label) || - annAx.getAnnotation().getProperty().getIRI().toString().equals(skos_alt_label)){ - - labels.add(((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral()); //No lower case yet - - - } - - //Annotations in original Mouse Anatomy and NCI Anatomy - //--------------------------------------------- - else if (annAx.getAnnotation().getProperty().getIRI().toString().equals(hasRelatedSynonym_uri) || - annAx.getAnnotation().getProperty().getIRI().toString().equals(hasExactSynonym_uri) || - annAx.getAnnotation().getProperty().getIRI().toString().equals(hasExactSynonym_uri2)) - { - - try{ - - //It is an individual - geneid_value=((OWLAnonymousIndividual)annAx.getAnnotation().getValue()).asOWLAnonymousIndividual();//.getID() - - for (OWLAnnotationAssertionAxiom annGeneidAx : onto.getAnnotationAssertionAxioms(geneid_value)){ - - - if (annGeneidAx.getAnnotation().getProperty().getIRI().toString().equals(rdf_label_uri)){ - - labels.add(((OWLLiteral)annGeneidAx.getAnnotation().getValue()).getLiteral().toString());//.toLowerCase(); - - - } - } - } - - //Consider other cases with direct value - catch (Exception e){ - try { - labels.add(((OWLLiteral)annAx.getAnnotation().getValue()).getLiteral()); //No lower case yet - } - catch (Exception e1) { - System.err.println("Error accessing annotation: hasRelatedSynonym_uri or hasExactSynonym_uri"); - } - } - - } - - if (labels.size()>=max_size) - break; - } - - - //If it doesn't exist any label then we use entity name - if (labels.isEmpty()){ - labels.add(Utilities.getEntityLabelFromURI(ent.getIRI().toString())); - - } - - return labels; - - } - - - /*private String getEntityLabelFromURI(String uriStr){ - //System.err.println("Error processing URI: "+ uriStr); - try{ - if (uriStr.indexOf("#")>=0 && uriStr.indexOf("#") cleanLabel(String label_value){ - - List cleanWords=new ArrayList(); - - String[] words; - - label_value=label_value.replace(",", ""); - - if (label_value.indexOf("_")>0){ //NCI and SNOMED - words=label_value.split("_"); - } - else if (label_value.indexOf(" ")>0){ //FMA - words=label_value.split(" "); - } - //Split capitals... - else{ - words=splitStringByCapitalLetter(label_value); - } - //else { - // words=new String[1]; - // words[0]=label_value; - //} - - //To lowercase - - - for (int i=0; i0){ - - if (!getStopwordsSet().contains(words[i])){ - //if (!LexicalUtilities.getStopwordsSetExtended().contains(words[i])){ - //words[i].length()>2 && Not for exact IF: it may contain important numbers - cleanWords.add(words[i]); - } - } - } - - - - return cleanWords; - - } - - - private void setInvertedFileWeak4Overlapping(){ - - setInvertedFileWeakLabels(); - - identifier2labels.clear(); - - //System.out.println("\t\tSize inverted file: " + invertedFileWeakLabels.size()); - - } - - - - private void setInvertedFileWeakLabels(){ - - //List words; - int max_size_labels=6; - int max_size_words_missing=2; - - //for (int ident=0; ident < listofClassLabels.size(); ident++){ - for (int ident : identifier2labels.keySet()){ - - //words = listofClassLabels.get(ident); - for (List words : identifier2labels.get(ident)){ - - - if (words.size()>max_size_labels) - continue; - - if (words.size()>1){ //Smaller case 1 out of 2 - - createWeakLabels4Identifier(words, ident, 1);// 1 missing word - - if (words.size()>3 && max_size_words_missing>1){ //Smaller case 2 out of 4 - - createWeakLabels4Identifier(words, ident, 2); - - if (words.size()>5 && max_size_words_missing>2){ //Smaller case 3 out of 6 - - createWeakLabels4Identifier(words, ident, 3); - - if (words.size()>7 && max_size_words_missing>3){ //Smaller case 4 out of 8 - - createWeakLabels4Identifier(words, ident, 4); - } - } - } - - } - } - } - - - } - - - - - /** Combines the words in given list with 'x' missing words and stores the results in IF - * - * @param cleanWords Clean label of concept - * @param ident Identifier of concepts - * @param missing_words Number of words to be discarded - */ - private void createWeakLabels4Identifier(List cleanWords, int ident, int missing_words){ - - Set combo = new HashSet(); - - //Fills identifierCombination - - //Set> combination_set = getIdentifierCombination(cleanWords.size(), missing_words); - Set> combination_set = precomputeIndexCombination.getIdentifierCombination(cleanWords.size(), missing_words); - - for(Set toExclude : combination_set){ - - for (int pos=0; pos(combo), new HashSet()); - - invertedFileWeakLabels.get(combo).add(ident); - - combo.clear(); - - } - - - } - - - - private void loadStopWords() throws Exception{ - - String line; - - ReadFile reader = new ReadFile(OntologyProcessing.class.getResourceAsStream("stopwords.txt")); - - while ((line = reader.readLine()) != null){ - if (!line.startsWith("#")) - stopwordsSet.add(line); - } - reader.closeBuffer(); - - } - - - private Set getStopwordsSet(){ - return stopwordsSet; - } - - - - - - - - - - - - - - /** - * - * Manages the extraction of the lexicon associated to an Individual that s presented as data asserion axioms - * or object asssertion axioms. Currently is based on the IM track of the OAEI 2012 - * - * @author Ernesto - * - */ - private class ExtractAcceptedLabelsFromRoleAssertions{ - - - Set lexiconValues4individual = new HashSet(); - Set accepted_data_uris = new HashSet(); - Set accepted_obj_uris = new HashSet(); - Set accepted_data_uris_deep2 = new HashSet(); - String label_value; - - int max_size_name_label=0; - int min_size_name_label=5000; - - - ExtractAcceptedLabelsFromRoleAssertions(){ - - - - accepted_data_uris.add(article_dprop_im_uri); - accepted_data_uris.add(name_dprop_im_uri); - accepted_data_uris.add(birthName_dprop_im_uri); - accepted_data_uris.add(population_dprop_im_uri); - - accepted_data_uris.add(name_dprop_im_uri_2015); - - - - accepted_obj_uris.add(article_oprop_im_uri); - accepted_obj_uris.add(name_oprop_im_uri); - accepted_obj_uris.add(label_oprop_im_uri); - accepted_obj_uris.add(places_oprop_im_uri); - accepted_obj_uris.add(curriculum_oprop_im_uri); - - - - accepted_data_uris_deep2.add(has_value_dprop_im_uri); - - } - - - - protected Set extractLexiconFromRoleAssertions(OWLNamedIndividual indiv){ - - lexiconValues4individual.clear(); - - - //Add label name - label_value = Utilities.getEntityLabelFromURI(indiv.getIRI().toString()); - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - - - //We also add from rdfs:comments or rdfs:label - //----------------------------------------- - //Since the comments may be long we need to pre-process them - for (OWLAnnotationAssertionAxiom indivAnnAx : indiv.getAnnotationAssertionAxioms(onto)){ - - - String uri_ann = indivAnnAx.getAnnotation().getProperty().getIRI().toString(); - - - if (rdf_comment_uri.equals(uri_ann) || rdf_label_uri.equals(uri_ann)){ - - try{ - label_value = processLabel( - ((OWLLiteral)indivAnnAx.getAnnotation().getValue()).getLiteral().toLowerCase()); - } - catch (Exception e){ - //In case of error. - label_value = ""; - } - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>0 && label_value.length() < min_size_name_label){ - min_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - - } - - }//end extraction of comments - - - - //Datatype assertion - for (String uri_indiv_ann : accepted_data_uris){ - - for (OWLLiteral assertion_value : indiv.getDataPropertyValues( - OWLManager.getOWLDataFactory().getOWLDataProperty(IRI.create(uri_indiv_ann)), onto)){ - - - //LogOutput.print(indiv.getIRI().toString()); - - label_value = processLabel( - assertion_value.getLiteral().toLowerCase()); - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>0 && label_value.length() < min_size_name_label){ - min_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - } - } - - //OBject property assertions deep 1 - //------------------------------------- - for (String uri_indiv_ann_deep1 : accepted_obj_uris){ - - for (OWLIndividual assertion_value_indiv : indiv.getObjectPropertyValues( - OWLManager.getOWLDataFactory().getOWLObjectProperty(IRI.create(uri_indiv_ann_deep1)), onto)){ - - //We only consider named individuals - if (assertion_value_indiv.isNamed()){ - - //Datatype assertion deep 2: has_value and others - //---------------------------------------- - for (String uri_indiv_ann_deep2 : accepted_data_uris_deep2){ - - for (OWLLiteral assertion_value_deep2 : assertion_value_indiv.asOWLNamedIndividual().getDataPropertyValues( - OWLManager.getOWLDataFactory().getOWLDataProperty(IRI.create(uri_indiv_ann_deep2)), onto)){ - - - label_value = processLabel( - assertion_value_deep2.getLiteral().toLowerCase()); - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - } - }//end data assertions - - //Extract comment level 2 - //--------------------- - for (OWLAnnotationAssertionAxiom indivAnnAx_level2 : assertion_value_indiv.asOWLNamedIndividual().getAnnotationAssertionAxioms(onto)){ - - - String uri_ann = indivAnnAx_level2.getAnnotation().getProperty().getIRI().toString(); - - - if (rdf_comment_uri.equals(uri_ann)){ - - try{ - label_value = processLabel( - ((OWLLiteral)indivAnnAx_level2.getAnnotation().getValue()).getLiteral().toLowerCase()); - } - catch (Exception e){ - //In case of error. - label_value = ""; - } - - //Statistics - if (label_value.length() > max_size_name_label){ - max_size_name_label=label_value.length(); - } - - if (label_value.length()>0 && label_value.length() < min_size_name_label){ - min_size_name_label=label_value.length(); - } - - if (label_value.length()>2){ - lexiconValues4individual.add(label_value); - } - - - } - - }//end extraction of comments - - } - - } - } - - - return lexiconValues4individual; - } - - - /** - * - * @param value - * @return Empty string if it is not valid - */ - private String processLabel(String value){ - - String processedLabel=""; - - //Reg expression to split text: //Split up to "&", ".", "(", "," ";", is, was, are, were - //String reg_ex_split = "[&\\.,;(]"; - String reg_ex_split="[&\\,;(/]|(\\s)is(\\s)|(\\s)are(\\s)|(\\s)was(\\s)|(\\s)were(\\s)|(\\s)est(\\s)|(\\s)fut(\\s)|(\\s)un(\\s)|(\\s)a(\\s)|(\\s)an(\\s)"; - //No filter by point : St. Georges or St. John - - //Removing annoying acronyms - //order of the British empire - //processedLabel = value.replaceAll("obe", ""); - //fellow royal society - //processedLabel = processedLabel.replaceAll("frs", ""); - - int manegeable_lenght = 65; - - //short data assertion strings - if (processedLabel.length()<=manegeable_lenght && !processedLabel.contains("

    ") && !processedLabel.contains("

    ")){ - - //We still want to split and trim - //we keep/split string up to the given character - processedLabel = processedLabel.split(reg_ex_split)[0]; - //we remove white spaces at the end and begining of label - processedLabel = processedLabel.trim(); - - - if (!isGoodLabel(processedLabel)){ - //LogOutput.print("Filtered: "+ value); - return ""; //bad label - } - else{ - //LogOutput.print("GOOD: "+ value); - return processedLabel; - } - - } - //Text with several paragraphs -> filter - else { - - //Detect if it starts with

    if not then it has been split - if (processedLabel.startsWith("

    ")){ - - processedLabel = processedLabel.split("

    ")[1]; - - //we keep/split string up to the given character - processedLabel = processedLabel.split(reg_ex_split)[0]; - - //we remove white spaces ate the endand beginning oflabel - processedLabel = processedLabel.trim(); - - if (processedLabel.length()<=manegeable_lenght){ - - if (isGoodLabel(processedLabel)){ - //LogOutput.print("GOOD: "+ processedLabel); - return processedLabel; - } - } - - //LogOutput.print("Filtered: "+ processedLabel); - return ""; - - } - else { - - //For comments in RDFT oaei 2013. They do not contain

    - - //we keep/split string up to the given character - processedLabel = processedLabel.split(reg_ex_split)[0]; - - //we remove white spaces at the end and begining of label - processedLabel = processedLabel.trim(); - - if (processedLabel.length()<=manegeable_lenght){ - - if (isGoodLabel(processedLabel)){ - //LogOutput.printAlways("GOOD: "+ processedLabel); - return processedLabel; - } - else{ - LogOutput.printAlways("BAD: "+ processedLabel); - } - } - else{ - - processedLabel = processedLabel.substring(0, manegeable_lenght); - - if (isGoodLabel(processedLabel)){ - //LogOutput.printAlways("REDUCED label 0-"+manegeable_lenght+": "+ processedLabel); - return processedLabel; - } - - } - - LogOutput.printAlways("Filtered: "+ processedLabel.substring(0, 50)); - - - - return ""; - } - - - }//if lenght - - - } - - - - private boolean isGoodLabel(String label){ - - //REGULAR EXPRESSIONS - - //we do not consider "y" as consonant for filtering purposes. After all "y" may have vowel phonetics. - String consonant_regex = "[b-df-hj-np-tv-xz]"; - String more3_consonants_regex = consonant_regex + consonant_regex + consonant_regex + consonant_regex + "+"; - String more5_consonants_regex = consonant_regex + consonant_regex + consonant_regex + consonant_regex + consonant_regex + consonant_regex + "+"; - String vowel_regex = "[aeiou]"; //accented?? so far we are considering only "english" - String more3_vowels_regex = vowel_regex + vowel_regex + vowel_regex + vowel_regex + "+"; - String same_character_3_times = ".*(.)\\1\\1.*"; - //String space_character_3_times = ".*([ \t])\\1\\1.*"; - String space_character_3_times = ".*(\\s)\\1\\1.*"; - - - String[] words; - - //Detect if label has been randomly generated - - if (label.length()<3){ //very short strings - return false; - } - - if (label.contains("!") || label.contains("?")) - return false; - - - if (label.matches(space_character_3_times)) - return false; - - - - //Split in words - words = label.split(" "); - - //At least one word with size >1 - boolean has_min_size_word = false; - - //has_min_size_word=true; - - for (String word : words){ - - word = word.toLowerCase(); - //Accept roman numbers NOt in LogMap Lite - //if (NormalizeNumbers.getRomanNumbers10().contains(word)){ - // continue; - //} - //to also avoid : or other characteres after a rman number - //if (word.length()>1 && NormalizeNumbers.getRomanNumbers10().contains(word.substring(0, word.length()-1))){ - //LogOutput.print(word + " " + word.substring(0, word.length()-1) + " " + word.substring(0, word.length()-2)); - // continue; - //} - - if (word.equals("st")) //st johns - continue; - - - //Single characters different from "a" - if (word.length()<2){ //if any of the contained words is a single character - if (word.equals("a")){ - //LogOutput.print(word); - continue; - } - return false; - } - else{ - has_min_size_word=true; - } - - - - if (word.matches(same_character_3_times)){ //Any character occurring three or more times together - return false; - } - - - - //Strange words - //In english it is very rare to have more than 4 consonant together (e.g. angsts). In compounds words 5 it is possible (e.g. handspring) - //Starting the word cluster is three consonants is the maximum number, as in "split". - //More than 3 vowels together is also strange - if (!word.startsWith("mc") && word.matches(more3_consonants_regex + ".*")){ //Starting with more thn 3 cons. //Mc surname like McGregor include - return false; - } - if (word.matches(".*" + more5_consonants_regex + ".*")){ //more than 5 inside word - return false; - } - if (word.matches(".*" + more3_vowels_regex + ".*")){ //more than three vowels - return false; - } - //only consonants or only vowels - if (word.matches(consonant_regex + "+") || word.matches(vowel_regex + "+")){ - return false; - } - } - - if (!has_min_size_word) - return false; - - - return true; - - } - - - - protected boolean isDummyIndividual(OWLNamedIndividual indiv){ - - OWLObjectPropertyAssertionAxiom opaa; - String prop_uri; - - - //Check for oject property assertions deep 1 referenceing given individual - //------------------------------------------------------------------------- - //If referenced it is a dummy individual which should not be considered in the matching - for (OWLAxiom refAx : onto.getReferencingAxioms(indiv, true)){ - - if (refAx instanceof OWLObjectPropertyAssertionAxiom){ - - opaa = (OWLObjectPropertyAssertionAxiom)refAx; - - //Not the searched individual - if (opaa.getObject().isAnonymous()) - continue; - - //Not the searched individual as assertion object - if (!indiv.equals(opaa.getObject().asOWLNamedIndividual())) - continue; //with next axiom - - //Check if object property is the used for dummy individuals - if (!opaa.getProperty().isAnonymous()){ - - prop_uri = opaa.getProperty().asOWLObjectProperty().getIRI().toString(); - - for (String op4indiv : Parameters.accepted_object_assertion_URIs_for_individuals){ - - //The property is the one - if (prop_uri.equals(op4indiv)){ - return true; - } - - } - - } - - - } - - } - - return false; - - - - } - - - - }//end class - - - - - - - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombination.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombination.java deleted file mode 100644 index f0710364a1..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombination.java +++ /dev/null @@ -1,164 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite; - -import java.util.ArrayList; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - - -/** - * This class will precompute and manage the index combination for: - * 1. Weak mappings (combination of words to be dropped) - * 2. Repair plans from a given input of mappings - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 10, 2011 - * - */ -public class PrecomputeIndexCombination { - - - private List>>> precomputedCombinations = new ArrayList>>>(); - - - private Set> identifierCombination = new HashSet>(); - private Set combination = new HashSet(); - - private int size_combination=3; //Size of plan or size of words to be dropped - - private int size_input=10; //Eaither size of mappings or size of words - - - - public void clearStructures(){ - precomputedCombinations.clear(); - identifierCombination.clear(); - combination.clear(); - - } - - - public Set> getIdentifierCombination(int size_object, int size_combo){ - - //Objects are inserted from position 0! - - if (precomputedCombinations.size()<=size_combo-1){ - - extractIdentifierCombination(size_object, size_combo); - - //We are supposed to add in order: e.g. we look for plans of 2 before plans of 3 - precomputedCombinations.add(size_combo-1, new HashMap>>()); - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - - } - else if (!precomputedCombinations.get(size_combo-1).containsKey(size_object)){ - extractIdentifierCombination(size_object, size_combo); - - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - } - - - return precomputedCombinations.get(size_combo-1).get(size_object); - - - } - - - public void setDefaultSizes(int sizeinput, int sizecombination){ - size_input = sizeinput; - size_combination=sizecombination; - } - - - - - public void preComputeIdentifierCombination(){ - - for (int j=1; j<=size_combination; j++){//subgroup - - precomputedCombinations.add(j-1, new HashMap>>()); - - for (int i=2; i<=size_input; i++){//size - - extractIdentifierCombination(i, j); - - //System.out.println(j + " " + i + " " +identifierCombination); - - //We insert in position 0 - - precomputedCombinations.get(j-1).put(i, new HashSet>(identifierCombination)); - - - } - - } - - //System.out.println(precomputedCombinations.size()); - //System.out.println(precomputedCombinations); - - } - - /** - * Creates set of combinations of given size from a set of elements - * @param numElements - * @param sizeCombinations - */ - private void extractIdentifierCombination(int numElements, int sizeCombinations){ - identifierCombination.clear(); - combination.clear(); - if (numElements==sizeCombinations){ - for (int i=0; i(combination)); - } else { - extractIdentifierCombination(numElements, sizeCombinations, 0, 0); - } - } - - /** - - * @param numElements - * @param sizePlan - * @param current_number - * @param level - */ - private void extractIdentifierCombination(int numElements, int sizeCombinations, int current_number, int level){ - for (int i=current_number; i(combination)); - combination.remove(i); - } else { - combination.add(i); - extractIdentifierCombination(numElements, sizeCombinations, i+1, level+1); - combination.remove(i); - } - } - } - - - - -} - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombinationStatic.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombinationStatic.java deleted file mode 100644 index b9da779a75..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/PrecomputeIndexCombinationStatic.java +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - - -/** - * Static class: not recommended when using from web service - * This class will precompute and manage the index combination for: - * 1. Weak mappings (combination of words to be dropped) - * 2. Repair plans from a given input of mappings - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 10, 2011 - * - */ -public class PrecomputeIndexCombinationStatic { - - - private static List>>> precomputedCombinations = new ArrayList>>>(); - - - private static Set> identifierCombination = new HashSet>(); - private static Set combination = new HashSet(); - - private static int size_combination=3; //Size of plan or size of words to be dropped - - private static int size_input=10; //Eaither size of mappings or size of words - - - - - public static Set> getIdentifierCombination(int size_object, int size_combo){ - - //Objects are inserted from position 0! - - if (precomputedCombinations.size()<=size_combo-1){ - - extractIdentifierCombination(size_object, size_combo); - - //We are supposed to add in order: e.g. we look for plans of 2 before plans of 3 - precomputedCombinations.add(size_combo-1, new HashMap>>()); - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - - } - else if (!precomputedCombinations.get(size_combo-1).containsKey(size_object)){ - extractIdentifierCombination(size_object, size_combo); - - precomputedCombinations.get(size_combo-1).put(size_object, new HashSet>(identifierCombination)); - } - - - return precomputedCombinations.get(size_combo-1).get(size_object); - - - } - - - public static void setDefaultSizes(int sizeinput, int sizecombination){ - size_input = sizeinput; - size_combination=sizecombination; - } - - - - - public static void preComputeIdentifierCombination(){ - - for (int j=1; j<=size_combination; j++){//subgroup - - precomputedCombinations.add(j-1, new HashMap>>()); - - for (int i=2; i<=size_input; i++){//size - - extractIdentifierCombination(i, j); - - //System.out.println(j + " " + i + " " +identifierCombination); - - //We insert in position 0 - - precomputedCombinations.get(j-1).put(i, new HashSet>(identifierCombination)); - - - } - - } - - //System.out.println(precomputedCombinations.size()); - //System.out.println(precomputedCombinations); - - } - - /** - * Creates set of combinations of given size from a set of elements - * @param numElements - * @param sizeCombinations - */ - private static void extractIdentifierCombination(int numElements, int sizeCombinations){ - identifierCombination.clear(); - combination.clear(); - if (numElements==sizeCombinations){ - for (int i=0; i(combination)); - } else { - extractIdentifierCombination(numElements, sizeCombinations, 0, 0); - } - } - - /** - - * @param numElements - * @param sizePlan - * @param current_number - * @param level - */ - private static void extractIdentifierCombination(int numElements, int sizeCombinations, int current_number, int level){ - for (int i=current_number; i(combination)); - combination.remove(i); - } else { - combination.add(i); - extractIdentifierCombination(numElements, sizeCombinations, i+1, level+1); - combination.remove(i); - } - } - } - - - - -} - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OAEIAlignmentOutput.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OAEIAlignmentOutput.java deleted file mode 100644 index 1504b22365..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OAEIAlignmentOutput.java +++ /dev/null @@ -1,152 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite.io; - - -import java.io.File; - - -import java.io.FileWriter; -import java.net.URL; - -import uk.ac.ox.krr.logmap_lite.LogMap_Lite; - -public class OAEIAlignmentOutput extends OutputMappingsFormat { - - - File alignmentFile; - FileWriter fw; - - /** - * Same format than OAEIRDFAlignmentFormat, but with different ouput. - * SEALS requires the creation of a temporal file and returning its URL - * @param name - */ - public OAEIAlignmentOutput(String name, String oiri1, String oiri2) throws Exception{ - super(name); - - setOutput(); - - printHeader(oiri1, oiri2); - - } - - - protected void setOutput() throws Exception { - - alignmentFile = File.createTempFile(output_file, ".rdf"); - fw = new FileWriter(alignmentFile); - - - } - - - private void printHeader(String oiri1, String oiri2) throws Exception{ - fw.write("\n"); - - fw.write("\n"); - - fw.write("\n"); - - fw.write("\n"); - fw.write("yes\n"); - fw.write("0\n"); - fw.write("??\n"); - - fw.write("" + oiri1 +"\n"); - fw.write("" + oiri2 +"\n"); - fw.write("" + oiri1 +"\n"); - fw.write("" + oiri2 +"\n"); - - } - - private void printTail() throws Exception{ - - fw.write("\n"); - fw.write("\n"); - - } - - - - public void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, LogMap_Lite.EQ, conf); - } - - - - private void addMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - - fw.write("\n"); - fw.write("\t\n"); - - fw.write("\t\t\n"); - fw.write("\t\t\n"); - - fw.write("\t\t" + getRoundConfidence(conf) + "\n"); - - if (dir_mapping==LogMap_Lite.EQ){ - - fw.write("\t\t=\n"); - - } - else if (dir_mapping==LogMap_Lite.L2R){ //Subclass - - fw.write("\t\t<\n"); - } - - else{ //if (dir_mapping==LogMap_Lite.R2L){ //Superclass - - fw.write("\t\t>\n"); - - } - - fw.write("\t\n"); - fw.write("\n"); - - } - - - public void saveOutputFile() throws Exception{ - - printTail(); - - fw.flush(); - fw.close(); - - } - - public URL returnAlignmentFile() throws Exception{ - return alignmentFile.toURI().toURL(); - } -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OWLAlignmentFormat.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OWLAlignmentFormat.java deleted file mode 100644 index 9fa650f328..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OWLAlignmentFormat.java +++ /dev/null @@ -1,263 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite.io; - -import java.util.ArrayList; - - - - -import java.util.List; - -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; -import org.semanticweb.owlapi.model.AddAxiom; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLAxiom; -import org.semanticweb.owlapi.model.OWLNamedIndividual; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLDataProperty; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLOntologyChange; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.ox.krr.logmap_lite.LogMap_Lite; -import uk.ac.ox.krr.logmap2.owlapi.SynchronizedOWLManager; - - -public class OWLAlignmentFormat extends OutputMappingsFormat { - - - List listAxioms2Add= new ArrayList(); - - String logical_iri="http://www.cs.ox.ac.uk/isg/projects/LogMap/mappings.owl"; - - OWLOntologyManager managerMappingsOnto; - OWLOntology mappingsOnto; - OWLDataFactory factory; - - - public OWLAlignmentFormat(String output_file_str) throws Exception{ - super(output_file_str); - - setOutput(); - - //TODO: add annotation with confidence - } - - /** - * Sets the manager and onto for OWL ontology - */ - protected void setOutput() throws Exception{ - - //TODO!! This might be important in WEB logmap - //managerMappingsOnto = OWLManager.createOWLOntologyManager(); - managerMappingsOnto = SynchronizedOWLManager.createOWLOntologyManager(); - mappingsOnto = managerMappingsOnto.createOntology(IRI.create(logical_iri)); - - factory = managerMappingsOnto.getOWLDataFactory(); - - } - - - private OWLAxiom createEquivalenceMapping(OWLClass cls1, OWLClass cls2){ - - return factory.getOWLEquivalentClassesAxiom(cls1, cls2); - - } - - - private OWLAxiom createDataPropertyEquivalenceMapping(OWLDataProperty dprop1, OWLDataProperty dprop2){ - - return factory.getOWLEquivalentDataPropertiesAxiom(dprop1, dprop2); - - } - - private OWLAxiom createObjectPropertyEquivalenceMapping(OWLObjectProperty oprop1, OWLObjectProperty oprop2){ - - return factory.getOWLEquivalentObjectPropertiesAxiom(oprop1, oprop2); - - } - - - private OWLAxiom createSubClassOfMapping(OWLClass cls1, OWLClass cls2){ - - return factory.getOWLSubClassOfAxiom(cls1, cls2); - - } - - - private OWLAxiom createSubDataPropertyMapping(OWLDataProperty dprop1, OWLDataProperty dprop2){ - - return factory.getOWLSubDataPropertyOfAxiom(dprop1, dprop2); - - } - - private OWLAxiom createSubObjectPropertyMapping(OWLObjectProperty oprop1, OWLObjectProperty oprop2){ - - return factory.getOWLSubObjectPropertyOfAxiom(oprop1, oprop2); - - } - - - private OWLAxiom createSuperClassOfMapping(OWLClass cls1, OWLClass cls2){ - - return factory.getOWLSubClassOfAxiom(cls2, cls1); - - } - - private OWLAxiom createSuperDataPropertyMapping(OWLDataProperty dprop1, OWLDataProperty dprop2){ - - return factory.getOWLSubDataPropertyOfAxiom(dprop2, dprop1); - - } - - private OWLAxiom createSuperObjectPropertyMapping(OWLObjectProperty oprop1, OWLObjectProperty oprop2){ - - return factory.getOWLSubObjectPropertyOfAxiom(oprop2, oprop1); - - } - - private OWLAxiom createSameIndividualMapping(OWLNamedIndividual indiv1, OWLNamedIndividual indiv2){ - - return factory.getOWLSameIndividualAxiom(indiv1, indiv2); - } - - - /** - * Creates OWL axioms for mapping and adds it to the list - */ - public void addClassMapping2Output(String iri1, String iri2, int dir_mapping, double conf) { - - if (dir_mapping==LogMap_Lite.EQ){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createEquivalenceMapping( - factory.getOWLClass(IRI.create(iri1)), - factory.getOWLClass(IRI.create(iri2))))); - } - else if (dir_mapping==LogMap_Lite.L2R){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSubClassOfMapping( - factory.getOWLClass(IRI.create(iri1)), - factory.getOWLClass(IRI.create(iri2))))); - } - else{ //if (dir_mapping==LogMap_Lite.R2L){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSuperClassOfMapping( - factory.getOWLClass(IRI.create(iri1)), - factory.getOWLClass(IRI.create(iri2))))); - } - } - - - /** - * Creates OWL axioms for mapping and adds it to the list - */ - public void addDataPropMapping2Output(String iri1, String iri2, int dir_mapping, double conf) { - - if (dir_mapping==LogMap_Lite.EQ){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createDataPropertyEquivalenceMapping( - factory.getOWLDataProperty(IRI.create(iri1)), - factory.getOWLDataProperty(IRI.create(iri2))))); - } - else if (dir_mapping==LogMap_Lite.L2R){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSubDataPropertyMapping( - factory.getOWLDataProperty(IRI.create(iri1)), - factory.getOWLDataProperty(IRI.create(iri2))))); - } - else{ //if (dir_mapping==LogMap_Lite.R2L){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSuperDataPropertyMapping( - factory.getOWLDataProperty(IRI.create(iri1)), - factory.getOWLDataProperty(IRI.create(iri2))))); - } - } - - - - /** - * Creates OWL axioms for mapping and adds it to the list - */ - public void addObjPropMapping2Output(String iri1, String iri2, int dir_mapping, double conf) { - - if (dir_mapping==LogMap_Lite.EQ){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createObjectPropertyEquivalenceMapping( - factory.getOWLObjectProperty(IRI.create(iri1)), - factory.getOWLObjectProperty(IRI.create(iri2))))); - } - else if (dir_mapping==LogMap_Lite.L2R){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSubObjectPropertyMapping( - factory.getOWLObjectProperty(IRI.create(iri1)), - factory.getOWLObjectProperty(IRI.create(iri2))))); - } - else{ //if (dir_mapping==LogMap_Lite.R2L){ - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSuperObjectPropertyMapping( - factory.getOWLObjectProperty(IRI.create(iri1)), - factory.getOWLObjectProperty(IRI.create(iri2))))); - } - } - - - public void addInstanceMapping2Output(String iri1, String iri2, double conf) throws Exception { - listAxioms2Add.add(new AddAxiom( - mappingsOnto, - createSameIndividualMapping( - factory.getOWLNamedIndividual(IRI.create(iri1)), - factory.getOWLNamedIndividual(IRI.create(iri2)) - ) - )); - } - - - /** - * Saves owl ontology with mappings - */ - public void saveOutputFile() throws Exception{ - - managerMappingsOnto.applyChanges(listAxioms2Add); - managerMappingsOnto.saveOntology(mappingsOnto, new RDFXMLOntologyFormat(), IRI.create(output_file)); - - } - - public OWLOntology getOWLOntology() throws Exception{ - managerMappingsOnto.applyChanges(listAxioms2Add); - return mappingsOnto; - - } - - - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OutputMappingsFormat.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OutputMappingsFormat.java deleted file mode 100644 index cf30f6af85..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/OutputMappingsFormat.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite.io; - - -public abstract class OutputMappingsFormat { - - protected String output_file; - - - protected OutputMappingsFormat(String output_file_str){ - - output_file=output_file_str; - - } - - - protected abstract void setOutput() throws Exception; - - - protected abstract void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception; - - protected abstract void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception; - - protected abstract void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception; - - protected abstract void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception; - - protected abstract void saveOutputFile() throws Exception; - - - /** - * Rounded and shifted to [0-1] interval - * @param conf - * @return - */ - protected double getRoundConfidence(double conf){ - //return (double)Math.round(conf*10.0)/1000.0; - return (double)Math.round(conf*100.0)/100.0; //two decimals - } - - -} diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/RDFAlignmentFormat.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/RDFAlignmentFormat.java deleted file mode 100644 index 566fba5b98..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/RDFAlignmentFormat.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite.io; - - -import uk.ac.ox.krr.logmap_lite.LogMap_Lite; - -/** - * RDF Alignment format - * - * - * @author Ernesto Jimenez-Ruiz - * Created: Sep 11, 2011 - * - */ -public class RDFAlignmentFormat extends OutputMappingsFormat { - - WriteFile writer; - - - public RDFAlignmentFormat(String output_file_str, String oiri1, String oiri2) throws Exception{ - super(output_file_str); - - setOutput(); - - printHeader(oiri1, oiri2); - - } - - - protected void setOutput() throws Exception { - - writer = new WriteFile(output_file); - - - } - - - private void printHeader(String oiri1, String oiri2){ - writer.writeLine(""); - - writer.writeLine(""); - - writer.writeLine(""); - - writer.writeLine(""); - writer.writeLine("yes"); - writer.writeLine("0"); - writer.writeLine("??"); - - writer.writeLine("" + oiri1 +""); - writer.writeLine("" + oiri2 +""); - writer.writeLine("" + oiri1 +""); - writer.writeLine("" + oiri2 +""); - - } - - private void printTail(){ - - writer.writeLine(""); - writer.writeLine(""); - - } - - - public void addClassMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addDataPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addObjPropMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) throws Exception{ - addMapping2Output(iri_str1, iri_str2, dir_mapping, conf); - } - - public void addInstanceMapping2Output(String iri_str1, String iri_str2, double conf) throws Exception { - addMapping2Output(iri_str1, iri_str2, LogMap_Lite.EQ, conf); - } - - - - private void addMapping2Output(String iri_str1, String iri_str2, int dir_mapping, double conf) { - - writer.writeLine(""); - writer.writeLine("\t"); - - writer.writeLine("\t\t"); - writer.writeLine("\t\t"); - - writer.writeLine("\t\t" + getRoundConfidence(conf) + ""); - - if (dir_mapping==LogMap_Lite.EQ){ - - writer.writeLine("\t\t="); - - } - else if (dir_mapping==LogMap_Lite.L2R){ //Subclass - - writer.writeLine("\t\t<"); - } - - else{ //if (dir_mapping==Utilities.R2L){ //Superclass - - writer.writeLine("\t\t>"); - - } - - writer.writeLine("\t"); - writer.writeLine(""); - - } - - - public void saveOutputFile() throws Exception { - - printTail(); - - writer.closeBuffer(); - - } - -} \ No newline at end of file diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/ReadFile.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/ReadFile.java deleted file mode 100644 index 09546aa75f..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/ReadFile.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite.io; - -import java.io.BufferedReader; - -import java.io.File; -import java.io.FileReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.InputStream; - - - -/** - * This program reads a text file line by line, using a BufferedReader - * - */ -public class ReadFile { - - private BufferedReader rBuffer=null; - - - public ReadFile (InputStream isr_file) throws Exception { - - //try { - rBuffer = new BufferedReader(new InputStreamReader(isr_file)); - //} - //catch (Exception e) { - // e.printStackTrace(); - //} - } - - public ReadFile (String fstring) throws FileNotFoundException{ - - //System.err.println(fstring); - - File file = new File(fstring); - //System.out.print("File " + file.exists()); - - if (file.exists()){ - try { - rBuffer = new BufferedReader(new FileReader(fstring)); - - } - catch (IOException e) { - e.printStackTrace(); - } - } - else { - throw new FileNotFoundException("The file '"+ fstring + "' doesn't exist."); - //new Exception("The file '"+ fstring + "' doesn't exist."); - - } - } - - public String readLine(){ - try { - return rBuffer.readLine(); - - } - catch (Exception e) { - System.err.println("An error occurred reading the file: " + e.getMessage()); - //e.printStackTrace(); - } - return ""; - - - - } - - public void closeBuffer(){ - try { - rBuffer.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - } -} - - - diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/WriteFile.java b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/WriteFile.java deleted file mode 100644 index fbbec5bc2b..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/io/WriteFile.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright 2012 by the Department of Computer Science (University of Oxford) - * - * This file is part of LogMap. - * - * LogMap is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LogMap is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with LogMap. If not, see . - ******************************************************************************/ -package uk.ac.ox.krr.logmap_lite.io; - -import java.io.BufferedWriter; - - -//import java.io.File; -import java.io.FileWriter; -import java.io.File; -//import java.io.FileNotFoundException; -import java.io.IOException; - -/** -* This program writes a text file line by line, using a BufferedWritter -* -*/ -public class WriteFile { - - private BufferedWriter wBuffer=null; - - public WriteFile (String fstring){ - - this(fstring, false); - } - - - - public WriteFile (String fstring, boolean append){ - - //System.err.println(fstring); - File file = new File(fstring); - if (!file.exists()){ - append=false; - } - - try { - wBuffer = new BufferedWriter(new FileWriter(fstring, append)); - - } - catch (IOException e) { - e.printStackTrace(); - } - //} - //else { - // new FileNotFoundException("The file '"+ fstring + "' doesn't exist."); - //} - - } - - - public void writeLine(String line){ - try { - wBuffer.write(line+"\n"); - - } - catch (IOException e) { - System.err.println("An error occurred writing the file: " + e.getLocalizedMessage() + " " +e.getMessage()); - e.printStackTrace(); - } - return; - - - - } - - public void closeBuffer(){ - try { - wBuffer.close(); - } - catch (IOException e) { - e.printStackTrace(); - } - } - - - - -} \ No newline at end of file diff --git a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/stopwords.txt b/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/stopwords.txt deleted file mode 100644 index b48940d791..0000000000 --- a/components/klab.component.alignment/src/main/java/uk/ac/ox/krr/logmap_lite/stopwords.txt +++ /dev/null @@ -1,774 +0,0 @@ -#a -#b -#c -#d -#e -#f -#g -#h -#i -#j -#k -#l -#m -#n -#o -#p -#q -#r -#s -#t -#u -#v -#w -#x -#y -#z -able -about -#above -abroad -according -accordingly -across -after -afterwards -again -against -ago -ahead -all -almost -alone -along -already -also -although -always -among -an -and -another -#anterior -any -anybody -anyone -anything -anywhere -apart -appear -appreciate -appropriate -are -#area -#areas -around -as -ask -asked -asking -asks -associated -at -available -away -#back -backed -backing -backs -backward -backwards -be -became -because -become -becomes -been -beforehand -before -began -behind -being -beings -#below -beside -besides -best -better -between -beyond -#big -#bigger -both -brief -but -by -came -can -cannot -#case -#cases -caption -cause -causes -changes -certain -certainly -#clear -clearly -come -comes -concerning -consequently -consider -considering -contain -containing -contains -corresponding -could -course -currently -dare -definitely -described -despite -did -differ -different -differently -directly -do -does -done -#down -downed -downing -downs -during -each -#early -#eight -either -else -elsewhere -end -ended -ending -ends -enough -even -evenly -ever -every -everybody -everyone -everything -everywhere -exactly -example -except -fact -facts -fairly -far -farther -felt -few -#fifth -#first -#five -find -finds -followed -following -follows -for -forever -former -formerly -forth -forward -found -#four -#fourth -from -full -fully -further -furthermore -furthered -furthering -furthers -gave -#general -#generally -get -gets -give -given -gives -go -goes -going -good -goods -got -got -gotten -#great -#greater -greatest -greetings -#group -#grouped -#grouping -#groups -had -#half -happens -hardly -has -have -having -he -help -hence -her -here -hereafter -hereby -herein -hereupon -herself -#high -#higher -highest -him -himself -his -hither -hopefully -how -howbeit -however -hundred -if -ignored -immediate -important -in -indeed -indicate -indicated -indicates -#inferior -#inner -#inside -insofar -instead -interest -interested -interesting -interests -into -inward -is -it -its -itself -just -keep -keeps -kind -knew -know -known -knows -#large -largely -#last -later -latest -least -#left -less -let -lets -like -likely -like -liked -likely -likewise -#little -#long -longer -longest -look -looking -looks -#low -#lower -made -mainly -make -making -#man -many -may -me -#mean -meantime -meanwhile -#member -#members -#men -might -mine -minus -miss -more -moreover -most -mostly -mr -mrs -much -must -my -myself -name -namely -#near -nearly -#necessary -need -needed -needing -needs -neither -never -nevertheless -new -newer -newest -next -#nine -ninety -#no -nobody -noc -#non -nonetheless -noone -nor -normally -nos -#not -nothing -novel -now -nowhere -#number -#numbers -obviously -of -off -often -old -older -oldest -on -once -#one -only -onto -#opposite -#open -#opened -#opening -#opens -or -#order -#ordered -#ordering -#orders -other -others -otherwise -ought -our -out -over -#pair -#pairs -#part -parted -particular -particularly -parting -#parts -past -per -perhaps -#place -#places -plus -#point -pointed -pointing -#points -possible -#posterior -#present -presented -presenting -#presents -probably -#problem -#problems -provided -provides -put -puts -quite -rather -really -reasonably -recent -recently -regarding -regardless -regards -#region -#regions -relatively -respectively -#right -#room -#rooms -#round -said -same -saw -say -says -#second -secondly -seconds -see -seem -seemed -seeming -seems -sees -#self -selves -#sensible -sent -#serious -seriously -#set -#sets -#seven -#several -shall -she -should -show -showed -showing -shows -#side -#sides -since -#six -#sixth -#small -#smaller -#smallest -so -some -somebody -someday -somehow -someone -something -sometime -sometimes -somewhat -somewhere -soon -sorry -specified -specify -specifying -#state -#states -still -still -sub -such -#superior -sure -take -taken -tell -tends -than -thank -thanks -thanx -that -the -their -them -then -there -thereafter -thereby -therefore -theres -thereupon -these -they -thing -things -think -thinks -#third -this -those -though -thought -thoughts -#three -through -thus -to -today -together -too -took -toward -towards -tried -tries -truly -try -trying -turn -turned -turning -turns -twice -#two -under -underneath -undoing -unfortunately -unless -unlike -unlikely -until -unto -up -upon -upwards -us -use -used -useful -uses -using -usually -value -various -versus -very -via -want -wanted -wanting -wants -was -way -ways -we -welcome -well -wells -went -were -what -whatever -when -whence -where -whereafter -whereas -whereby -wherein -whereupon -wherever -whether -which -whichever -while -whilst -whither -who -whoever -whole -whose -why -will -with -within -without -work -worked -working -works -would -year -years -yes -yet -you -#young -younger -youngest -your -yours -yourself -yourselves -#zero -#French -alors -au -aucuns -aussi -autre -avant -avec -avoir -bon -car -ce -cela -ces -ceux -chaque -ci -comme -comment -dans -des -du -dedans -dehors -depuis -deux -devrait -doit -donc -dos -droite -début -elle -elles -en -encore -essai -est -et -eu -fait -faites -fois -font -force -haut -hors -ici -il -ils -je -juste -la -le -les -leur -là -ma -maintenant -mais -mes -mine -moins -mon -mot -même -ni -nommés -notre -nous -nouveaux -ou -où -par -parce -parole -pas -personnes -peut -peu -pièce -plupart -pour -pourquoi -quand -que -quel -quelle -quelles -quels -qui -sa -sans -ses -seulement -si -sien -son -sont -sous -soyez -sujet -sur -ta -tandis -tellement -tels -tes -ton -tous -tout -trop -très -tu -valeur -voie -voient -vont -votre -vous -vu -ça -étaient -état -étions -été -être \ No newline at end of file diff --git a/components/klab.component.alignment/src/main/resources/stub.txt b/components/klab.component.alignment/src/main/resources/stub.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/components/klab.component.alignment/src/test/java/stub.txt b/components/klab.component.alignment/src/test/java/stub.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/components/klab.component.alignment/src/test/resources/stub.txt b/components/klab.component.alignment/src/test/resources/stub.txt deleted file mode 100644 index e69de29bb2..0000000000

6F>Ns?l~R7zEkvQCLE>rH%OEwMw26Odl9+48wp<8vy_cqgnTCd{ zM7O^3nph`$e5wu5!VOI*^UZG(qGE-b9c}A|P3(cBs66HOBHFh5DC6Z~IhL#W$k_6d7LSl^42{H{%w8c zn}sa#SCt(KH%1#gWoEabgwVN3YkxZ(7;xzq;h z#60XG2Ee=OsguFSM-OGg!K%wff(Qod_B=@uc1M0(Pc>mr1v+ZlmbQr z+OABUSY(qIFLK}2@K+64BW!l8Bfhv}Up==KGJ{{r{KJ`qgge8TAg7Wjof*>j5W)5; zXWOB3>nZ0^D?GlognYpbG165)`bhm;k-RW0B<(ZoyfP0ju;MzMGDfSSrNR)tF*a9O zu?0~f?Qd8?Ct+9c)Onx-JE9v>YqRVeJk3@K)1zbZ+X`UEOJ9%$t9Y7pJaH~IP zv2kWCf&sNdx77-WzIn_7e;jAD(nrjUpJk&jThgU8r1z6>crY26Q4Ej-@D-HA=O!l= zN@m#7PSwyZ#+xYCw3xYA&wp_SgvQqZ64Xn!km$A|M!Lp&t~R^oG1mqUt8XZOi4R(gdk>(CyA^Ly_f4u4(|tnkLu2c2Az!xANUa6^OgYj}{5lZ-D)cOAPsWbn zdIRmazjFG-l6{!>!4O`_QNlL0Xe9&$P6^xx4_uAtlXcP{&>3rz()?3NF4_MXLy&<_ z?^Z|IyQP_mwM5sy)6^Qyra`|N=_$v@RM7>en`db>Wh{b3z6M83E)o|S*W&u6^1Oxq z01O)|Dm77h^Y_@2TdDW0Ka8HLreztjjQ$aVDDWlmh9psb?@kyO=NB&M+^?zks#1SX zB*vBK5P{)`MNaOD6Yk2EF2|9A3-V%IZTNm{s-|=;uU(xoSIxxN4@VJ1?qoS!&EMm! z#beI+B)OE0cot@BS44iyB*}gZs`Pk2DsrRZ^myynj#8*bnxdkltp4>lEMZk|42yb2 zgj1=(v0-^%Bj%#z@f1L2fGakfxpwN0PVoUwSc)W(H!r_8E3hFUBkk~nyVKRY+QK)!d|pacsrBh)_PSrs#Y)_8#OsLL(al*zSHc$<1bBJu%~J!6j3<8P zQ1!m2UPD8AIBd~WTVDyRXYRWbsi!A*c7o`IK3Gvmk{YE;hd$#6;iWCT^Bk2#<;ko$R&CYvHO`+MF0VKu~ihZqJ4hX=Ko z<$NE&b~k|Jj)|$xVywZ#sk`|8#N8%MLx!*C=rMGZPbnDKAgqy#ocstJIV?#MJ~h%z zdBfh!aD7Yh2eTW*t{0TZiFzV_Uh0zK4dbIIwe$V>ULz=IHsnr$F}d`P(%^usYpP=< zodMo(%xqH18vF!I6R6Q!kQ8Gj-K=!-69O>iiFvlkSt3?!Nv7(JG-_S-sTv+Aq6caO zm^Z}JTEYSh9tPQqfqi8`A?&+pggYYNL4z=IkBh;4c?dNGR5&P;Gvso*yT*grEJF~} zN}46I9wL3Fs^3Sy`z)nj#zdWpiensg=7L#pWoI$D6fv!Uq-JHn#p!$xZWv?XJY%KZ zwJ5N^ZFLu|b~F`tdIpl9hT>C_v)t{FC__dIsWX6`g`Nxpi3ibh_<_>uwCdFRU|ROy zz-0UD(|XLf#{_OjMXQ2ol&GUAVy-pjSJnRKSoo9j-tT*rPcb5_?5u zgJ+Wg9rInZTB{A_qE2tshI49>L|7`+`kG|u zT0}sqF)!==?7~~LeQ99?B0J#nVxd*^%mOOh!#9`2o=aRN>f$$N47^;`G^#fprak6! zgKCgGcE0f^<)~>;7hn6-VLX>t`vfb?>TdjSfo2f0`kABvM61~55|>b#_7}qmK@QW( zZI07^9pNg`^g-~;qDc>*w2BKLOCX!h-J!Me!vzO11>>StAi!w~Y29>U&nY^0*d)2; z66jqQLR7s!uYR2};*s#rz*vNCiF6vTu%k_oaND4#BL^izC~5(IZm}HFYp|W8yZJf9 z`E^^CdfrP=2!e$yg$6uqL5miTzp4C}$(tB}F3?A7rI(m*=wt>y3PXtL%@B`r;|)SE zzd6?Lk-=lqT@2;5@@l*c`>OS>P@+Mgne15JHd4_H0Ln_Fdir&QPdKqN(V%(aO-Tg+KO&cdQ>d+>9S0!MQ7zPsem4?Zs%7MgY$X= zbW{2kc!!}T_@59oxz|+To6OS^p!~1*vAKH9b{s_sMF-#WCs1B<0MDPI6F&da7+;Py zPkS73It`hAhQpxt|e_346B6Tdd^v2Zr+d+JWps~!jSO} zvNu{JHi0Vnnny$|F*RnOj*u{5JFHRJj1rB5C)z>IA$B|*&>4Mt;&N#d)d5iU^rfZO z+9Na;B4T4tJO~Ojj-V*+R<*9iYqsh<=t@*#5vgjj%DVdLqh~-}?%CI$$x_?+AQb}p z!bZ%vQ!22vQ=v^y!>Ce~q}%xSOkf}PzqbXmcVVbKQomtj?jL4|s|3_p2sXv}&cLKd zS?9t9K(=GnrsBs&cm&Z*pEik)cRV1}dB!zB-EDP%y0-$&_cV1EXbYQgwHS5*%kr`1 zcK&yJdeJ;+;!!gph3;~u-T-?+!q(iAr%}!buhz%o)edSaZXK;`jZ{9-$II)k6BS-K z4cWlgFUnQzG;RNLb&6Fe_a&;xTw1#}!_m8;+F$yW7%p3gf@VFN zpT?})+a%2#(4m!CUuV6&dQQ?2woqxdyCttXTx7vveUXq0NH|#ybO<6`#wO?#Ui^TX z4kceL6T!yVG(7N{jD3mOex(&A0Qjq3+&BHc5r<1Falzudy<6A{tJ6Weg1PC2&%jm3 z)c+=D8)gm9b?cp(dCJa8Nah(DYBVheRjY(-4+GoG$ooE@@LgTE@a$P&sz_5T5{&eY zA$l7I?KT70+n--m%H#J!8;Cv4F(Q3DvF1Bq!`kF&(YSr!H*3xSQr#&FbV<=8x&(&@ z;MUELmT^0N%!3)5L27)mVJ1@yl3Bj0;bGFW>8wx{vYVs0Rbc|}Pte}eQGH@aGZ4@8 zma<^&$KFNM;=_j?1M*4a&>8Ecktf=q>1SWWdZ1S2>4o^#4FeOrjgNY{?j|AiUD>Mo zEVGbBZ2sN7HI%(p0ya`K=Ix?gn-sPT&N{4ko>`$mvw4g2i_1uZxRLlx6-y51f=~ST zX!7M-mJ73i3NvCqYQASSm|Z^MMnj*e=3yGiXdO zA&OCKZeGuMULo4O&6_*4I|_F0(Zb|^@71~c^t`yq8uMg#s=3XTcx5o$4_&>54v_vTV`{F9{8`C52vZfPIr+ykFQG= zLq-|XrvG2$n9xJhkWHmaM#&0L=I9O{%9odE*uCZc+3{o}Yx=c63!|{%C!4k=R=KU~ z2W105kxf3^Gr~ZPD35#?9hVJ~bUP>!Otp?bM>cs!C7geBJy$ljeoq14FMgHbMkB|g zLfJLAK@8Kau)PYWWA!oYhEJJoJbtS|UWYljNNs->(TjgaMwzP#VCsC~0w@fNr3y8N zmd=H76!7vM$+*V|IzZ3$b%vlrSfI#S!sj}R@F!moFP`?EVSjR=BJ-awJ&!{pf8v&9 z4Sd>2T(S=iTM41~r3W1TSsHUNQk;mF89Ev33mja4kheK2EQn@=A{NKWv6Lk?^^5f$7!n1`e;`t|lmDh)W#?!Am7 z{a>l>7v34NxBoR+4+o(Ttgg0t64Or24$fVnvQW40E@YMx^nhsJUWRraR-60@V7S@1F14xtCF=5Ej&XCY%?!`PlCx7J~jsYi!gD~;euD}b? zgD5uCgyq|}^>N*}Z>N5-v~Y8iY`)ywlBLCFJ)`@72^z6_<8RgzcKr% ze>3A-HLWYN$>|BTIb#VTRZ7ATQSd4txcp@~8X{Wo-$BG!uBzSCVYWLWglLV<)*(e< z{_>P4{HIQZMi`?qrnTVtELaYWDsAY~y8ml&Q^o&bjs z03%0tK&8iUP}&v5!ugrT3E%^FcC;qbmYHbax9ytiTe83X`KuViHCmQ5zHwX~nN#%A zKB1WS=Wb|=n}2&^!DrE75F)-N1-^eb$PZ?7aVl#Oq9633-uviDLl1FaMPS2lL9>$s z;l1!{R_31-J)PKk@8Gv}-dn}7#1mR3w!OU9N^^}>p{;QdGS$|O1Cbnm`&_1rj%q9L z5(@-lZ4V?oJ~`TJZ{vnmsYrBv58i(%3oun04sImO?O*BhdLZ65{c0JDlzck=c{}@( zV;?eLJherW#yssLx%wT%fI4JB^^KlPle2ZO04-!7bbP^vT1veLb+m@2fUVu|By6EF3%R9OVKBkSF_OwD^}RRUs|M0&~5ybkkj^nn_d zoX3ZODA3YDTTEc!5~qv+mX<>;3&(v0Xl)2gRoB-_(RVRNdBl=Bfv-zUkYR`?*M3i* z2K^oA3@gQIuRHD6kU}q9|EVo}0trSDcNZjbO(;?CDfx;U9j@#{D-7r;(!OisF^Kh2Ibe^U{-F;Sq$FH zjq+?o6yUgnx;d_H)vyXRUvfL`C!sz14M=VY!v#%}96qUGc>kyDf*G3b-*=LE(&L-O zmw3*Dcmzk{ry4n~G8W*;Ue^$7n%E(Pr+#u0TD_P8kUzC>Gfw@Rp^f$jVzgU?wd)?V zJjEm*Bl;%h@eeW7$M!qKC=m^D$$(N)W70QB-W`4X=CnftG=%D@zyCb@gUXa1YU^&J!@ z@@Urcxnwe-!@Hhb!cf{-Er6!NMr;c^XHX_&8RH7A_X}3(K@Xd_XyNxSn^~V-veyUI4Nygf${!@>I$m_^kkqx zG8%JZ2zu@(bAAXPcl*#y!-q5Orel#UN}lv_7QxKemT+B23tjyf`&&!@ftdq`3C#i;Iw@P|Xi#5Q ztn#pMsMgVbabpq=i+s6>S`r)*bImBk{Nw(I<}0;bqm@=^g49PK>SggXC81Ibl3aAW z55Ly2^ATF)nS%s;5tV|O8fA@b_F4maXpaE9Tue=;8 zH1)xG)FcEn*X<|k3B25)ii^6S2X9Alts}MP0MrxL)Q#$H?$1wgFqQ>gKj1P*LNp{l z2+a6sPRj==<#bg{x&F`^e9q#6Sz4R*)uX-yvHT2pVn49#lO>==J{>HFMbDvRoxJY) zjr!U?tzd6hI?y=vr-Ep_N>v&ul;DIlj?@O|MSirQAcCpJ+Q+W_$wTV`kWt&-thVbKwcBO-kz%E8rAFW zzBg-xF&Zq#(0K=ZHam6@)7APGu53n?y+@L7brJjz!}_qDU5K&<5UysICr)Cvmxa{y z^WPyH);d4AUP2Cy8^TKX2)%Fq9IJ%lwK&4N)Ejs$XxQ1HFAAIlI3KwQ+9Z!ySVDTz zVen+c`V@j1dX+Z1F^K|T)`|M~=T^2mAJMuuKEM|%?-;(j>>`Ft?L3{^c$BvfV$}(4 z_Soys2VfsDj!RI0qcYiQLI^<@2nm&UN~<-}aOVWEJ$s`a3AOZyCRkEun}_Rw|7?`9 zY@b7g<=Zv2t|rG`?`ZyRVF{{sWuZ0rB)hWxv*?`I%tW)AwFR!4%q~&yyi3r>klV;$w3Tm z0~b7$;!^rdGbGxnczs`a@4EzEbecwc1#Qlf_fY&4GiS%*6+`@H_Ki=)gn|a}sJrUM zb;|0}02+X%%d4d2Y@4^>5IypYh+p(?!|+6_C_kZ&HQEj^Gzp6%$C2A)*&SwW$^wtN zg|W7kE%uOdmEvsC-*|)7H%?0m%&I2Uw5Abn7}lSmWG}tjzhhd`a z2V3-tdc`GpQhe*?>xI%%J({&i#QG+Mz%ks=moLI}9=vK>>Z`u;Ku(1=WJZWk8pdF7(vPYX0Th@9c3u5n_*WEsKjB z)@@;4vc&CR^v{^#EO8OpU!|;H&z9gpAfVcMQk zR}tHFtLrrlOp3vP8R*QJnjdoJE6dR%sKMRvYsLl|6k{kfnOQgw3F$Arw;cJZmy9*s z!7j_+@xgH+x52KT@NVfXb#Yw(srH$O6;|-yhUQ4IItl0(d;fSKs`jdDl)`5PSkJ}Mp7-$&oced` zkQX9glZn4Kvmr^h;gjfHrO1t}LG(4#@SR?Sf^|82it&?JP9Sq&#M3xWWpY%CvzUEc z%6l#!Katr68Kk0=;w{6RbHwaW#GR%sZsTJdAP2ML9_`P1MWR8k`wX$sV5VOVOscRa zO}t+rD?VGK^YZ|6&@ao5!U`ky*~DR5s6Dq%2^)^Me{YZv1c09|jzS>^NS3XHs?N1p<0m5J^64f6gcmv$7CnV=XW_?DTi;0;1~`+ z3CGHHOgbYDMB0~++|FM$G?;#2r@^oPNTPQ!GEd3~s$n!-zoBmgMWf#b4SYw&;35GR zUV_t-Yl_(CupA#&Igbx%w-+9)MZS`+OrELBUru+K!z)@6um1Lc{?n)o-Js zCoZ?=v>nN&Abz{kSX%o;AIcT{4n_ub)XYMRXb=ti{=8(4+x5%;#No_W(&ZVX^HvE1 z8xXP3P4IA2i76hyZKBA+o^cIsW&-e{CXd!+HAKtwHx$!C5hSI`34 z-43p2vbwE@0_F!vRKHR@V@X34Mml&^6B@R#G7_;h+UF|EKI0<%@{X^UpXQ0;3)vNN z2qG~vjHOo=ZUk5np@wiACv6Y*RsDtFsJ67VL}B)#-He zD;JT9hlKZ_0JgzTRA8_SkIy1RHt7H7{cL!#Izta8+L;@!w@_Y$SdVl$L##bT$oEVfV^2AsUI|KHWs=^(vD{ z@!aq7MzM)n_|gkJSi7x_-9+|p#cmZ1MJ7(<&iIpZy)J6GTBNY2>mVRU2xiXRW?ZSO zx@G=?b9GyT!Isf)&X8>!dNbVCS6E^R=M;yzAN6-w<9=6Xal?Y%HE&UponpdDPcsG> z)L;scMcyMA-T|UWqU0- z@afFXVNSx)<@UQiQP-}cwM|V8IsMULNGkU9Hy31moLn{Vj6VfqqsDP1*Jb3q{r)%d zC4&f_@jCePAX}|W<_N7h0%jQ&y=HT@LNWut7W-_`$EPJjaV||;7kp5fYtYbqm@4@t zWJBd?)^DcZPyOd51XB`amjwe0Ftt~ z>c2gHUD)x697;z@PzG7bH;G}pbv-7_1ckR=48Ck^A!yxqKy!HdtE!f}%TSR^pNPBa z#ZbvoQ}&|;X%~u^G@E?G##|9wxM~rjq}lMGqYV#2NAjl~_zB*hbCo%i=$rrzc7F2t zCtGJ&VQ1$l0?V@r-wZH{<;V+!(}9cs>IbLSjU3k-PZp!YVuYySCYn<#%}GxFvQG|h zUc-DKYybC{%Gq~Tl}=t0fM-^W>E1ZKUM}Cg@6_|82YIB3PvSeQ)!r8R?ra1c{^5j) zW(X|Gu3V_kRqXqK z-P*58eA_~Z(VxFy01-~}6)%sn(_$xrUP#?w_q{%&Fo`4P@C?49aGl%W&1Xog944UNn_bW1sXqeXSJv43@xYS(1E?teQ_C?O(*q5ngJoXQUJ zAcmVQmrM~jsQ>e}sM$_g(xdveq|-x=dZ)nEDF|fRvkSNVPGneRwu4lauyajU=zGHZ zpBV-3=-kz1f0;=f?tc%IvB~Zmvx1n?Fh0q-?mZC=sad(m=xgaYdoXwOMj#;NkYfMp z8XHkZxs~4RS5B&hlPB>xp) zZm2nL^IycGx@ZmwlDbQ{W^*z{sU(&iD*F;;DE{vUO0LTX8gMK03v}T2SC_mSycAVc zK_4J+pt+sDaW!i+*qIaKCUPI}TQu?VnHn+Tn&bOpeE(<6e9LRvCy>c>wpvU!;u#o` zs0!CD(At{?dNd1GAc^;yr{OJF6NVeAP;d@Dc@v%QDAK+TFoBnxgg2*Q**q$F5ce$rc)v%mH25%& zoOjxU8(fogHvTf|4!l19_-nKFmyO&jyLc_Z_D5r_s5x!nZ!|VE>Nfw#|L`I_6)^c= zlu;>fQncy^o9;;LnR zR|%=oJiAUByiQ;xNQfRkdg3KUu7hQ8sU3#WUZ|Y%xJ4jS0ydRZb z+kk252Oh#abJ!lSVc^~>=trW~wBiSKz$DRy@`39&?hneK`07M<9(+x%a`6s-Qtcrp z{!vj&iX`=88aPpRxN~~9QKo+iFqfQ;fvNRciveYP^s*>+Q<|{)EzzptIcvsGM`@K*%4wH(Uh}}ErCc& z_O#W&#t|h;92Avj>PwrEF8d}g!En(_wo4O_&lq5&C!|{Y?~cR0uqPv3CiondXlR9U zN~!lCmpc}TzEUsGu5=slLV!j2hng=n7Q)jAghafyj>0>d`VZ3 zclO*YZsKBQtn8m*u~;GBrR-5ORA;O~=7+Wk8$|+zk1ze(_~Dc@)$~~|zVAygvVlk0 z{sZ*KoWKx-j^)Vr&5A53A9z&~dWmESf*ubk5iP{cJG_+4#A&UN-^~cXsHnh)an#e0 zzFXuy0LRQI+s`<=$^5y>i}>Ny7Q8aW%;@6c`N|3L?22{)^oSWe`T{uSW4IxDB28M% zXeYh#(q3nuaKB6qo8s0fdT`hdq@rgNL*76Acb&04PZ4C+gLLynFfJr$5SB3*j2gE) z-Ph0dAY))C?&HoH$M+Dp1yHWKelQ)xPCDgx0|qH|!=i6$b!y)z!EbN^*@Z36>T}dV z!!O8P^xZGoD3y%UJ_+6fwThuHaz<|vpSDmd5URRy>pP!>hLft+l!GbT<+J-kBX#er z^%(6nDS$j3*S~vJtH%g?VwD>664rMV8=*!6A;M&!_lSvC`A`y}XtJCOWmqZ1jZYHf z%vFlwod_XOv1UQSj8B@3M1e--9IOxI^d(=3>B>f_8uW97=-~aGSPV7Vh^^Uo;eb$y zWcTvhT6!01&nK{7m|Ut0I4^cUg<|NJ7nnkA`>LHE1==}yCyW9ydV7w{;AiZuYuGPy zs!Vi)^cwpj1@X)q#~pfv2B=(17>kJDZ2}IENN8&7bz^QWSS2JYLnQ$k_ov%(-*UL( z=*oW!>=R4K+92m7_6_vnh}?r1*`wF-3``hSo`8CPuHG}+!mRdM3F2jZl#DIa8&iiS zl{TQJLk{7*EBo@Pq~CTXmbbN?_ZDuq%sryqpPS-T=35Zg&PTdT&6sCxIi|OISq9k` zK^d04AR$?7C3sR7EZGaWHaq9Q3=1yyepW{L>{}ev15Y>#CR#5bHkQo5D213Q$wwOe z?9cT|jCMDeTGJd$r*lx)u8UFQ6)3n&Ky#OZ99vK*W&Py{9*nfjopa`Gb4HO`*c{Eh z{>sbX`9d*f)XDR()e^_Nq~yAjWh1|kyfAO*UOV7)CB?34RWb;56?k3Q1gbOWJooJy z?QmrrpAOsIHFSKc3eZG1p6s@r#Cw-kwW~(f$p+wqvy=~Okv=gZi*4-80NP_*uuZc; zHT~v0z=EddKZcG_j)i{ss_Ao!`B!G+a0cbv11(kK5#o;bec>m33aK%GG!iNGQ5o@A zBs=(8!!pStWU4tAoezq=Zv;wzL>tpJ7Crw$1loaqUd}MR4=7F0D)6{Txa+Qrz%;tH z`STx`jY9ioQy`02S7{E%UCW!e2((?}7E7X%>R)3T5^)NGvL`WQ^CqoA!lo9U=p+3b zqnJH1y2pqe_VMRaKStdHe*flj5Zo{-+@kS*4$=d^bIFDwX@(zSsN}8vVTKP5>fhV{ ztAD-z%sC=SVePn6U3b7zEGwMYShFy|-;$D(ydQF&e!9DJ@{USHf!Etwl{52)pXa`w zv1-U*!`Q_k&eh8iKjBaR^jwO~u@C*r9R>RD&M%KIHUx@0n5W zpFO5<^nl_uWb?kJn=~;5=su6{<>B3dlK;-pET%fL0f;!1l+&rwJbi|6Gzd-S%cvGu zDLKu*gRpjr>LBDXul|2DU3Way-~UfSc6K7NB_n%NB*`j!6Qb;q)iolrva?r+jO@M3 z-pby4WbY9!zjN;A`}%E~+(hO~L$nbaZr=~htMB)jihxskgAVzm;x$)f{BImw0}~h2zr2@TqmhsUamyg(0q$Z`cHl&4E(2^aR@CFgvReTI zS}#47ULEqCQgRBa0m`gPJiM93nScORK~}1&wD)4V-AZ9?{egIm6?tLYGDY{qf-@^V z>601NsH*=)x|BZ+nCh}5(4wXiVy54nXDQ~3pl%)=sd4KMm8~}Fg2?GFCXZZd9%wSaOp(wJz;{JD#pLX1>G|^lK z6bt8~@Iq;{Qrh>%l>Fe!b(x%^dVjUnTONY)-^2n>_ORs)OH2^z+qg)1?YP#WZ%>sW z(wTWl&Q>in|LiMli!C@T2N#8Ew}PHM>@Ket^xbw$y2WEM1Rh4*ciVUMmboAo$^Ze$ z((yw$bw3R%^$bUZ+JTh{dU1A;E@mphVj#NdRmoaSCH{F;|as|Kb00tgw+{i+p8zt^+Bwv~)0Lmt+(60DL1Q$Sj!5_}tAKYy5ooI{9N` z6+jFvWz0m80Ecij&VrfblqG&~n$o+!;c=r=1E}Zi7oHYs&ekG(8%-!zYdBNn{(ztu z(1AViyW^f%--QqXd{VrvUTiDKR`w;L9C^?yTp?r_z=<3-Prl+ z^FDmC22Rk~Zq^kaMz?Ug=OQb}nwg5)4N^VVdR=%`tlj_Xdb zE&Wq*QvUdHHs26IzVyAfXGuy>@=3}C!vpeN~BV$LOUs`)|c8+(|v zFlh*B94potxBPwfc}wl8UV>~t>G5@d5UIHEAG4Xgrqd`!6>>O8lavC*lAv#r=(>vT z5`~*We%8!9wS4Q?K9wQquf$uwV2X0L^&QX@%Z_+;EbAX;?XzWPGEE10^+(TGSg8UW zBVe0`F4EC?eNKk#4k0%9m#9alL8gW=z)h#@?H_lDv}!-O38FBwTVAnu_)1+s-cd|M zW-H6-ybHng`d?=1_JTwo|8N^8seU=YH_zj0%^|jg1Gdl1@*74sS-E%uLB%FPx;I@- zk-@s!?9r)}(8oaBDLnj!?ghm%RJ~nNwF{ZYxVwsm@5w*)CHqz($z#W4(}(u?#oz0! zTQ}f`uq3I5MqA9u!M&pBo@Gk84{yWB-ypEyKIguz6_`-7<@O`hd#atZ1IA|JL`Eg0 zRTwy<6@kywofBYOaOZAfHR@B*j6d~6Rfs;lLH{0of!2JW+VLZ#z~QuSE(t$dD` zcMfICGn_8}_1|U-W}c{?e0-;Rf#UIMzs8#IK&t$P<2AY4sJcFZ?N`^vp5NM%8v)4W zOs(w~8mgc_G4)#-!+HPV?EX^Ka~S?QPBju#mfqqFhuu**SC~xn49wGA5N5va8N$QW zQsIg_Vbme_67w@~{@X*0Wy80C*BAkF{K<7Wuu+)eOp`V58Hpu~v)Jh_nMr2eBaBX> zFZm@G7&BTrl2MH>cOttLQYaq5d}QIE(9NZzHMs>MJ_$!FJZ^|PAQX!iI#~bmrXSV+ zY!p;yk^mK%n3x!`OKNtWoPJ2_->Wei*cl6D*jen0zMeH5h?P%YB%c!CU{)P|6Z*jb zAlH~UX~k-e+#%m_6i^;WB|TRT?z2Kg9j$aYtuyx)Qi)L`lW$9T`X1jUK;Ea=@BfWa zk`88IomG*#fB5zdzQA5QUL@6*;hEOg#;~ZiQsE`H-6>VJ`av5PY3_&k{kZ(8fifc) zxc*Tx(&)5MKtf(3E3YMWw2Zrisc12#fcn8dvkNzP?PCIAKG)Gz{ECJDQXH;v>=)A( zuiMRPkVq+HQ+cHFdoXiaF2MHFPY1826Cc%l7tG3p+EFz*-z3u=WJKp&J=ryDh&LVB#ZuH52^`Z zMt#;>%Igb{0o>~`AFUHb&Vu-P&>ltUBHFcXX%VId8+~=3sX8T|-ay?-UHUd>gk_)h*S`7Cl}Rj(#?;JWloHOKZeGC~=xqspVsODg4JjXGD?uUXiO3I-jpEJQ~K` z4;cEXhk}}f8pV=3l$iDh13nbNc9{Z^o0UEQP5jg?WXi%z!p(gP+@35TZ)GQv`~=1N zn0GZYKSC|#t{DQv>*K}3c~Zk#yulbQ$(Fn9+2-TQ4-a4VK?55!47fzp1!ufRIJPT zOUs6U4X8~@=z)An`0Ewpf7FP|mc5k$(YFAcxh}@!G{d)0V1o&Q*s)lZIK)SSpOq`LbLz=jjw*s@hZAjJC2ir^SDu+d%`QEy*Yj|$d{2h2>p#G=#!gL6*_ zn>@@wuwFJ_wP zk_veC^ih2ZN>|J)IGF!>SFb(Dmb*B@d$)&b$KKML^9aEZTa&?tqU3y5C^H_N+yc_p zfa-^~rSFtEz(!~pS3e3={0y+wGW_lQbhb4_AI!y-6gw$KqeQYRxLTtrKoI|>d``w+ zT5Rjlx12lc%K1u3#9o*V# z9B=kgq4DQ_-Ilk?vSBisa#y0}B|FDU|H1F?p0!yj?Lh8@Dm?@qO`ctwZPuA_7lIbb zNB*$P+*OHiVLt)J?ad71)I$cHAJ?cs=+Mj(+9j>>KpX%8%%mw^*6)*iLO0?APEgi^ z&!0_uFk7Chz7M`t@6Rm~fgcsvekkekbFCJr){s3gno=~)r@LHGPsov;-_TvtgGVAFQ^%IBxEUFjRa9YojQWdJ|_VC2Y-d@ISJO~(* za2(R^Mn6NcRsA5sk1$!5uU${A7WyZGDe;ljGT&~VrF338{UtlfWcwNB{TkO_7zTZq z#9k7uE#wwK17{lWCGF*S^fDFLPJ}`HU44afCvh{H@Bd?uMj{5 z$wl}O^^519kV*ToEbm}ZaM0^hu4#nc4hsslNt*BQ-&A9nXa>b~GwdXG7%2@eK?XeAwr<0LN%9-8Pi%wI)G^1YABxd_ zWMfYEf4XR&-!^QXc8`I43^f(O;mm3t{UVAPn$W-#+kcr=75h4+&>k5krh+be3#ezkJtdG|YvtuH&ROLkI54s>Hh536eP;|3C+z}>aU5dblo1S(UIc)6w1eOXN4q^);C8a?@ zQTV|HPCzQoL72YanZ^D(bMbB>01L>+)(s`>l+vbfQHd|L(RDIT`wU`#k!Bvj7o=B_ z6tdM(!*HO-j4koIf|W6<7{9?>$Yy`v5%#`iCNsuI2mbN$hQs9KwSksL>K2-I{~=$m zjX#;vAsCzR{JR7djXQ3DlF~X(%Hy?^J4?YkZ)SQ%&XoDx>%XxHe*}2icQ5|MGmGME z)F_Pb#p!f+aGgORthiv1zAdREqmXsZ=A~b0ylj+X`z5G1r6fC5GXn^@d|P$A3fEiM zIiMRZ%UV)5`1ufGe!9qW;dXo}iI&fQ7Qt{0Q-OHF`nvdoumP$Sh-HuqH0Hmr4xmEK z*QCl79N&9z{KgebZP}7{HaWYw$@D>uSmg2RJaU3f>~7Xg5rxP9Yh5iC`ep8-u!Cx} zm>-mV8yJK@0nuG%vqN))7#}NQ_M4#!b(v)~{xTRimA(POtw9ZEMq?kajbIA=k~Zt*g(cVVxgWt5 z*_gpXV;ke;gZss;oEyZeg!(1Hr#Uc+U^L@prQWoklq;T;gj?r`lnlzNo4Wmx8naA7 zW@Bfth_EQHg-aA36Grq$9?c_dPEwT2T3T^4MRg2IO!9oqzrY#iV*O>Bx50*DQ?^nxf93!ZdfBHo zMpbS3r+J2c-?$B_H@e9wD@12;2KT$mSp==Ljo1;7fmK{>?zsg6131<^X=75E<$;&Bm58&wf7nr=s77= zcY6LKjQg+#Tv&hVd#soj#LREP2{{7FbkA5vW3CpOx`obPm2P9zY6h zvd+F2Af+!iV1cpkkm6J&NL2_Xbt`9*CGwo1OM>_A#+QKeC%vN@EQc~r6;&H1>9fC} zYx$z=#a_A{{&y7R-|+;WMXpGo<}!Z<*1Y~Bu&`^21yYd*$nH^^69iEyKm6B=-zwvh zwRN{N=KzsoKwaW`swlNLmp+JbfR2&(%tt7>PysmXvtNv>_Cj=`*JjO#A%XTKbAiGV zj3(tjlIU#PLgptC-%?o*P11wASVYvYumQ=~Hjayu`_Gtle@#$U<^_1~<}+<|2Ns}MJouG|itKBB zbA|IN+oF04E2}?jY7QNCVY3mLt4KHJ9~saSd&{x7>4GgPD}o5T?nBX-*k#xkxp^o# zhefPp0!?eeaW&gLDg`os6BvV4ocXWc96w_sscC>P#?GPP5O;01JJ;(50!;Y`%HrXh z`ho7O>Rz@Q_-ZU}&z;~~VhGw6rq%rE;w?g%D2(lkTII3_(3c802~ju1-Ik(7!Kqw- zY^#zY%AFqGu-4#Ysf)Y0@{X8%>;IZSZ-09s8o@laKe(AyowS) z3>COs!r2dCrlz$nnRBM{j1mogKC|(c`VsHiu?UC_T5NgTS6i5=pcU7>rxrz#`K>_j z)1Qa0S`4QU%=slC_yLm+mc-J7t$qm@&Imi8py_f)a za)-RWlK`g@>w@H%Mwg*KWG8kQ_7Yk zaKZFRt}y9>fqvS@^5Ceee@RVoA6g9m+A2{_MLbWc2BRh1lwAg`^7d*Bmg{%`IEvKm zIpR8!qv5axNrnme&qzT5I3TRE-e_h$SpT573}uMPhMs)AU_VI!d>f$dl^TRw=O3sa z0XCdDaGCTw!^wb|#edC_qM*xJoUe!&J9qu@Ym z<{dh~0u@)&%=oN|?QI9Drd2BZEzt55#eDDkmoBxes#uL>=Zpkg)6H0suwJ>T_AIaA z4&J^kL14MT#*3 zi5nG-dZo`jJ0Ky$r;DPz{T2Gc*=>k7bMh(UyTw-pho3->B9nC|2epMu0|LPqZsYx% zClXGUg-@xe!Hq3}mC5m6yqx#nJ@U`{UDq6Y=f}Wx*Lhb5H-9`IFe08jo>=`w7af%t zy}+Zm2ycud->LsKl__V@zn_~4kGfDnC*HLV`?&3cNL#&fn{3|LVhK0T=uZ$m5p?11 zHV^Ye8`)~HDY-3wd-A761m0d+EvFhd%?8>=S2%veXtTO)B3&;Z!SDVfkc`Lf*8)~NY{+Q4* zip=$HreVKZ@(4F9OXS5X`jtGr)QjjD>^Q4pINKBc6NX4XJs&MsD-gVWH?TNmy~foo z;=~dnU5T%7hS-X*)O64$gtI%$u=V&lA%vn9UUyKXdrtb~3eRku{u+79g zg&vxVf2cWhzvRy~IAEuf@oB<5KQ0fFZlIk?_Y2)QS~Kq(?AQwAKPaPm$%-ze zQ<4H_Bn7s)r{2AOu(Jn9l|ez`#iZH7jVI9Thg@>EzyCOdCIh|0tE*K@wB^+y9N9iN zR!4EKzmQVRHg$S%JW|M1c*h0iKAHZ4lHQP;Lj^Yodh@{zaQ8+gp+KF>Q~ytptdB$SJvL>Q z7SRzTFQ~E>Ex3JMrv9UzVE|B3l>`nuX&1e)$KIvmei}KYbQd!NREXb z^QTYPnNUv-3HpL{3;3Xz@ZWrH@!3(ZXU;o%Jdvdt1D_;z0~Sf<6uTx})VpaPL+i2E z`E2M7suT9MO$BL9b#*O|A;r_wwF?WgJDma<8|7X>*J|m+9Rh`>h2Z0i(1k$tj(J1C9#5cS>Q;D zVY$sFCI@{qObB)>-+J3OaZE3XZb0^zM>fC9dxa?`-@-yy+RWFI(I>Tc!AYcOZwpNu zqspP=Rin2n_JWt~{Y!@>mA7rH67w%J3xbY+D8&n@3BW+e=iIlM;<4V~FQ2&`JZ77F zIj(;Dy)^qY_OY3eb)d%vt#jA0JM|hgLsK?&nGR38k#CFil-NY2 zpW66!6ih0U6|ITg$yL=pfE|mMQ`r?)&j}VJ@NRtvn)jdTv++B;U*!!b9%%cv=pH`g zgqkJGu;!!(!(EJR)K|M*Rt!IgB@^L=sXsG?!^}LM*yAO^#9m1MhNU#Zehd>eJ*22V zPwVL3?`SW|3yVek*}qm5lJ_OgqZPk@8_IJ?RdxI%B7!`}P6D|~qF z7P#f=AX47)gnB2l_>lTUMnquY(`!^65Gjp4i}qIC3ZjGMm-l1a7wi84li^#kH^c3Sr@?$m;u?crdX%1zByJT#$mr16!caVh zazj7cWL*UG7dElUi-wj(e$NC{u{>U{E2*A^q~XHKjKEnXFR5}-iN>#08R}zk(7hyQ zBii~a8mohR3A+YW5m30&(X%t5FD?K#g?3(G*!cJ(3@R7w#!vxJ&ehb%tkVTiSUFlC zCymPpVxY%{y+oYmGv8=?;b*SXbk(%Kexgc`Dq%BmP)3o08Rd_5*P{4Xj1C45JrUD_5yt3Nt3? zKTqGB52WDb3I+jyB@&}y|ET)(r()N)6MBGVGv0`vzUm3vCv1k0-XiJLg)~!&AFzoF zi==n0PClLGiM7IxnI9#?lE+TWg%~g-B`NW3RFid5+)=!Rg8kPdU-zc{>_lH^*+8L2 zO0}QD?9<;^9++ME}*K3yE$3hRrTyS`f3bKsb)?tAb*H6jb&>+ z;?&(6q(*@$Yqm8GrnLE}y!(18x?80Ly2ol3);%=c=VyfWujs*k+#&tx)pl3TSNSUl zU9oYI90clYcKz4vyCXpg5#D9-I4`){)&*wcqcL1u$$-G(mSeM}b!Lz~>S7lT_lx<+ zr6yKyYGP}_K|=x=Gw0`|4cHKeq{zDFBG8>-s!lI>=lwLJR_i!vW#Uh+no}1T@)^YE ze;Dj{LxtN7M0WmaxS3rF?6K`2+48kJQnc^A`O)2xqwYlKO1+$on_&Q?zC1&xUZT=R z%AEDOAVF%%>)R5et2p3?sF16i zg_EUP)8@DFs6O@Zy<9?WcrgXun0;8edsMKjL;@Y@U5S<*?P_JKLmMMNOh#erZ%b15 zFXv=xp^Z)6%YZ)2j%3ISS;#lKP-&X|Ek-s;g%w$Uqc%LS>V)shZ0qV&IyIiQas>HV z;S25RhUc-*P{l_t4NdCbOcEmG&U7T2XRCD-J6Ukps(d`8jHKW6B|%*I;8jF@Zv9Wt zIm}@qk-WZhAgLn#4x&Kz)1Py{m~-fW?$O>Ou8<2OFmTuNa|`i+y)x+NHMqLl_26!S z#!)|D(|gGcW5EyYw5!iL@;2wI-XKhIzGUFKI<}6YitVB|2+XO^rn_jHQKVJZ&F7_h zc}UI&U_bIFS&>>jH72JJNR5(zm>RTVCy^IRv1a}XZegoBXDCR8pmh{|_Kz*9A;D{@ zuBD!wt{}^d!S&_Cs@F{htCHP46>sY!zNQi0(3@UlfsV@*SsKqPkj{7N$-HS_!pq}TZ< z>>2H{FvkaLaKLFuAx2>cmnQB zdI%;`1gIakKWS}u@OLd|0exURH$Hx;RL@k@%pxoQ9R#VCu zQ4FKB5UQ^${+esvGH?=lZMKH(=mr?nmDhjdcDS1UBU&w`5*EofX!~9-U{t_i%8ApQ zE&}6DTsTcWG`kt*=J9EkDb~ges$KDbS8q*hOW`k=3yl=I=zA61&iK_+JgxtBkWPuG6SoI}2)-w7QLxymW!4v#rqP7u zkj!4mkmlg))Q#D@#q)pQGpr|qmUk#o>6qZV=4iK;e!s_{yM#l}j%gMj>SXeztfoP* z!jHFrS8X9F==LVYgl!++zeCX7rq6Aae-N3SthWR1U9vBObN4-$_oa<1^f3V zFWkUD^?meTDys)A<3f4e%^q{7=(-pfn*{UTJ8u9**j+L-KoPb}%2vg@ zau>y5LaXXp>=>nKn%9lwN1^v(4s0l^UTM=+Bta$q;P7OWnZ^s!NtdF(GB6; zsM}!phryMXT_1Vz032v`CYb$1zEualt0Pj^+51kJmNO*p(+87hWLm>S|FQQ`SPm{N z#JRxr>;1b@^!y2XK?Q^!E}UM+Am_%d1d@Xz)43TY$+LD0NgB5fU8;(cPctBIOTPWG zk=4`aOA)x^loj$Fw%$M!h&jpic0{Y0EnkAYPxF$v_|nb73!x1kJkrA@axZp_2?kZW zw|kO9k7rcDG3G8f0DKA5pp*qK8}S9G+wTvt1L0T;n)?YaM6GRAl?}( zi2~ek5c;8$b%KDrn+$#IZJKjaz+M zHrJ30elzQ8LZ8#253qTm&oo|YMn2occPzNlSsFG7R0Q@K!nh6_Y2LsPkqy-;lX1%48~Ke7_pzVGWE5 z=@FYP0TVszqtv3f@V`Wm&ygx6d6S_y{|1b91coI)gig7C1_qj^nNusfHb5N>FhRRH z>bAS>H71$yefjM{7%`a2gjeIx_iFK)_(NgotUz(i)|Z_ zf11c1%TofYn>b=UyIZ$n-$H9MF?al!S&nTV)rr;GW?60c8`x}Y%lmdFX-4dVMW{Z` z7cc*rh2@z9j>0<(6CUpo+IVt>y#g2N^dxUIjw0N!UqdtQciB%Ld(sZAnNC8aSvsEu zn4=#sR0}n!T_PGo0dN_OqzE@^U+5J__?&_)??4fGg)K?Z&4Zbd@%l%RQR=XR3*f&u z8o(25X#Io70~qSe?(KpgGiy%#2DSoqW58aX>l}|M5wD%R4L%AO{o6>Um@8jjEWWPj z%ADl-d(Mn!K(rG&HlKAHB=hPL`SJ&CsvZn`!?*?Y`ryQNSd#EH6Oz-m;sfklV;)&o z3B#I9eKsgFu+iuom>COgon5#JOW`AH;68ovy8>UX##1__9HE(@@B9uX*1QG1ZPQz# zs;*b`x`!yb=hMfbvc)0S02jK6gkN2u@(>5?ODc-F;+z59Z4s2GmctIqQy%~()MVNd z_(vIfIC-RXe5Z6is)4;Ky7)97;7{?zZ7+ur)fJX7aQx%d)ukd==np|AW6bh%LHmCy zD8oI;5SQepvfC0>Bp-XVewj5l0InmH%X>Sh`NV)5I zdefahuw73OAK*2r`Ce=i-@I!A;?NO`1yir>J1p%Vz!K9!p~i0ba&#R@DJf7Uf6yMi_z@@1q)hvSCVh9N|v5RTH&Ur z4o=hi%U-uN>d=hTj+ZNm`thUQa$w=0q7n65IJ|UCZ7T0@XKEcc zLk-iDh?F}S1eGj#|@nV0;ZrYgzaZ&|kq&f{JNvqQY}_IQ3mDmTBc z$0SLuuRa=l!aJrHLMHPr~urEeI9pOM~DJgqjZCyc|v zic_9W?QKmt$7RF`FnhP~rXpF4MV9sN-cBWjuAxs+G3m7L_tc&b;@Tn6u68k z(&03Ov(i!34(1cerPGl6fSu1d|JkX!g+=`L#=T{XxY+hGxuiS~p>ePHWV8NGBAoZN zYSh9bXJo!1Oz%9oaXj=_!f(Ql+WKpTCW_*T1z*pNKi5V6b6g7!1X9*tJ?U1KDhIdB z51~0a*+k5qW`aE*neajOe1QNgRAamTFp7p0gV-;?%w?Oi9?y@hAf90mp^Pr-JE;;^gbe*S^Vb zXQ*;DmLu%{JfiE+r2E#^P&$(5qx9&TBSHK73l*)utJ>jW1S57ngisDLEi zR*rlOQG+f1Yb*L+N)!XBYUAE7Y8|+hrv$STcUFK1N5;N1Ofc>t$pSCXb(igYQpMq8hfMPt$ehPr z!PyV#J+Mjyk4TGiobC~y6Bd>#-bMcH>eILZ&ih|F>t-L^AJ<1)RFbm2WcuErnKxry zw)-b~+M3jaeopmoADOvR!gY<+&oSO^KWH^5$Ytljqjfx~Sl`N-2h!eA=zOZ8)q*X8 z7E!S69#weg|TP=Qn!hg!$RX@ch0- zkhN_)deG_~i2)W{*IH{GtXqc;wij2TmB?|^i__KbtAWTmQa^0Ev?gDW0`bMfi0Me{ zZVe)`vV^xU`=nw)^QHZLZahBUkKD;tI*x*BP@U~H65Z%VJ+)9#hYeG!Ao_irs~6Ira-)2M1kk$-wx`RR0qTkeOeB&!<^{$lSfUZtcYF{~F4x{27y_DBdHm zjIwl+Vf#h@^i3z?_};I~DQzy>`szCtj_99(vf3=o@NHzcF~IjWsToTwMRJl0#Qgq) zKL%`7rSI=z-|$NIA%tl9HG3e21|g%ypye1X_Oei4vafd8SQmbj#LFAvPD_7Sv-6{&Ah_0i};6&g>hr2=x}+otF(Mn~B#MpLaan zj@>pYoEACF)Wte-$zF4=d$&5+AaE4}U6asFe1FMm{HOo#^)oas9UTlPOWW{L+kB89vm;W_g3}! zMqN)RJ}=tIoA%a;x8w~=spw$aZOS94Q7o<3`E{2h`BuviGG~qWp>24_(`(B;;;Wds z@hKgSDvx+w`jyQ^udac&&O;+D&BUzo!tyDz7k*qy z4Nq)43i2;ZnrdXq$vN$ zhp0-+#fm7^=7Tl$`JA)#pdGv%)ZB=|0*n0GoxQ^DIo(zlR_@(q$4zLyhJC=OTn(d< zSQ-^;#T{nHbwUs~aIR@)#&-8o>nXpJx>Y!Jp0YieQTp+qSx4e*Vd0}uD~_T3x|GW$y*uN^tVij& z`P`QTx60!ON8K(fxEy;pK`Bw(YVFhI!U9x?<`5{kQsTL0va_jf^GqUiObyYkg1TbP zUL#^f#-R&vfo=@TS+!%j7x17}Pu3<!sg=&QIXyrdqEU=Ckv2SYQ$P1`*LH?{gG?8{H0cL&N->M!XEP7gQ2Wsxp)lc7g zAT%e#v>KA!X`Wy0@qo;Z=XEC(&w(d2~{8-G2_Ki zhX!A0Xf|{5XC3CFbYH9aON+m0kMZw|HYou^H1~Qfg*I_Vk(@`; zyu`e-%1LuzB&s!4?WOU3#>)5O6YTgN>SV5D;p=%&@40tI-fS3mGnYae;z4cEw<9lY z5D&%V{SA#3Dux&HH-GgYo%7uu6NxkSyi>1+8k&iyUd^}c9aotA3ZD^;&>e1#c-7jN zfAIJfm)8^P;8+))%+j2*#9@yvm=1iFI$qYDU(1CbF5Yxml1M*#%mYm+$;rH)Vdb=+ z1e5LTLlVJR!CEg&rL{j=Tk9sT{yqZYEE&~5k&yZn{^dfOyJ(V}KE+u0>yOW%1C_pX z|0(*9*zKdYUXvOt*Id&{eBu}`Xq3v6{cx;qr0Y%FADE7gi+4N$b|YZ2KFmfNWzG4` zu2yp!-_`SvW`O13rna~vM4cwvYO+vD-zqVO+)`=aYN5|tGN5tV&kmc+NL@PaV2Q7; zth_X4w!INZ%(LF8SHpGGJM|GCoK?<2lVwY9NPkMy^*a^`Dp%)@qqNV__0SU^lQjr! z)A?hGCH%rAEj0RFxV?RGK^pc`pf!FCp>d-0b1}d~lbS2KoJgXC=uzinN97?} z`e*S&?-*B%G{b!z#CaknSgMV(GcqSP-#{;&gqU0Q`TE3Ujv%cD5G&)EOPB1eIr@l@ zYhA^4h|1oat@omTk>Ys>mN|RkbnVN(e`Sj+-=Q2{68Wi-EFK#0R+RNmH`a}8XhOhR z`lh=l+Hdh`s>uK?jon68h&pHjG7RZgC=pS=Icvcw9|R6!$?9b};Tx~?+K!6}o~SxZ zSq3*3YS%9ln@RYsaksmbG$g3n8UgdxbpCpB zC2yQq4p;)^X~W?e_qRA8kvzP~Yj`ikt-*W}tVbqYIE2hBD0(Fy(&k4&m=SC6)bAd|g;fr+ER z7dy2te(wO!#gls`bVMlMPUX>J#;8WD$Fzndj{WT@sF5@VHdO0o@y+Y-H--BtE;lTc z5Kn*%QoI@%uG{hjkBa0J+OA8Iw;n;MNmqRxO<1peWg&r|n>TQ_WQL`pCucQVqP+C3 zz={t@)(8{&{UU}cJCxZx&+5!_C{)%x6;ywE8XP9)n& z?{=#9ps=J(|GR3MV8wov3%58J3^p^LHh^;Yu2FD^V2QTJ>MkpK$h=ScwMI=p;rS;l zj0^wn_A41AGzG|iBT-q<)pjp!WjLvu9mYC{{0zh?6nR~$rl;rh0$SBTgsOc;Q(Xu# zjAc^t3aM&8l8xW|`fa0feu-nnP73@`Ti|8iXqU|v@EQRWq0#|Pt2WbyTX`lZclw=Q zXuLGt8>l1=^3;aV-TlObW_FNPd#c*7an!6^1(;jP>agkIJ4iw`A%YttYNzNpH8TaP zy~FD_K7eg(@u;d;T{rGmxeuZr?lYIVyFH|sD62^0X!*~>V%sbjNJjtk4p}=9Kb8YJ zkU_t5E`wf;&l#!Orev<#XD?1Kd83>6SfIc^I4PERS=#a$o9fvYdfk~$pHg&w`urV9 zXmfcSxTtuIOdwRk{hdYdq~#`%GgS-EO=12o9*LH43rGJ6PKMSJKAltnW>8r<*JJXC z`uzYkq92-8yB}36W63u4)iaFH`+uuMhR_&Iwkc~RI9>zk0$YQI%eF~rUJpMn*o}k; z#LMKw{mYL%Ab`f@QV@yrz@7j0;ZszY^=79Rl-LKWT1V$?ec)nFjI`8$d)-Z}=1j6T zSKL$M8UCf<$lfHspee|wbO2v6TQgAoo>#1)2lp!|x!~pCd|n>F22npRiV{O%{9m4cH;$Ry6;f)L~Vx zZ~Da9;+`mBh_Qsw>RHz`xf{T5O3geEUSt6Nv@YH!b@*u| z8ZZTBuc))QI8u7yo}SVyX4>@5uz)B-ugc3HWUuSN6;^E~V(>_}wDlSYV#Vxct%J|S zQ1--q)nLXogs2g-7ir!J^!n$8oW&XVBaJxD~60@b@Rdx=M`Pw9T(@P_L5qrQ)%hJnYQ$@PWS+#10g1x}M& zKUkFJF|Ve+4{#BFi28p66B!cFU1XjgJwfv1>BDgT!O6TC7uBwsP|yb!OaV<%O_*DB zel~ww{{i~0s`f{U+NDIdf$k<5>8j87MnLU|-{0r9baaCz>-4TZg_{Hia>^~&ao|moWO3BPHWEc}M3q4^Lp(EiPWD$rWB_VPrx5-2hMzGj9pvD>8w4RA_Agb?+4y=wp(d?|e$%1hw&q4mnnOV#2 zm=PFXPu0&x%$}81POd^VkM%?8v+g_}!5o9?4k=o}wK8mw= znX=e^db*TCJkZ{NSPZP!Zyz}N-h^)Ka6_LnS^On*cQmS3^^M6J#*B>CFf3e{Dcrj6 z0d?Ge)_F9Gqr%D&S|r|+goay|j&;DxNGozHiCS+j#+&i3z-Ow&e)904$nK?;<70L3 zt522F&pLFUZ2j730V+G-!s#0C{)$ismDVgv{5zZ-j!?ZFlf_P3gqTy?6|Jf5mODsw z>tCP2cBTH)_`$}`ApDh5_%%{9F#JVmUGc$iF)_m_B^J)&UPwPl3z}TxbP&IL}U|eTjfvoWB z-yG4C3Le448*J2A*AG^z3+IrV9_1NNPqHc`OhH7@g3G_}wN>k7DC+2U3s}iR+t|xC zTsPcQBjA05xD39&{KL@d90enZ-;JAjNNE`5d`Y>sF)*tDPk)NG*RP>3k#d@D0H~?U z&T~4BM-7AX?9ZNtG_JcBG#3aVCKCiecGfbvr!@4V>}m~0JY@V;XDh~L^e2osL@%SZ z7c(0TgwU+_Xzfs^p;x0i>yc&fWj5$lmZ-cyWgYRw=k_Gg%zOdr{cIle=Wl|4&>Q@H z`@ZJrowbeVy60pn^Z3+0&c$y;oKAD}_*)2@?d3+`e<$1Hof-O6&fAX%LLH*-)UvgU zb|23N@^d&~CbKNa&cBK}E#8#prHhsypWH8@lnvSvNFK+5MTG((n%*oSNf3q0NUoBZ zX0FP^ba};-OJaoK9C0Z`%eC$Lr|xJ5TTMvnq2p>)>gmG9;pdM)6rb zm0iAq?;DS}Dl|j(-oeL7B9#u||E5Pe{X9J}hwU;y?eqJXx_?oF@)RlU6A%mIQ{ao` ztb`KWQ@;5ytG;5s80rVdpL(Dj=S&XjuL+8Sih&t*ml8d-wje4_eI1(IBiNYKS%^kO9GslyYkF(7BZ#YpvCpq1)KavarDVp28M-KNruC+d3eebyd zFhyw&n0Go_x_|d9H5<7exS!IKBnxq2Eq**%rF*??W`{bfJNT zD~(Hh5NH5#U5~4;;Eg`^-Ve*nZi>`@L=P7m3x|Kr>|nr@WE()uO6zcy^5fUcC0{_Z zLLsK&p*8u-3}P83!s-^APl0P;+4gAMi&`*?VgdndKX%%h^P8wk$@+Ic5xjblIx z4Pe^O+PXY*Lw6zbJmu7JJd4i3tDUQZfJD>XB0`$xrQ4BVH{56;I^6nk%;`QRB}AlZ z8VmB{@%2D*q5T`FXnjYt32W@;lg@6D+U6WlL5c%9n45oZoN_Ntow)Zh$f_^GyujL8 zHU%5_a3QIG)fE(O0R4H%DfD9f=(O6V_u(CA2C(bBs2V|MKqw|S#GG<_QH|pn?0x`& zHr21cU(ZZ1w1)P3*`QMF_OHinJx=wP_FRb+*tHyw29zNkVg`6 z<@ufanX4AmH4J&qfm0oxv$Su2B|7Gz+4U$KV9@q0FMs7WuhrS&Y{dI%J{uxoTq;En z25G)H6zkn~ncS6l$SdW8ilFAj*IHAYzL5~`eKtVb(p*$Vw9y)gY`?~Y!Q zHe0eVChV1Fy|bQ8-X;Md$k?Lej7=t({*)~A^Z+RMiVQyfK=efLJc25_F{gdYCn47` zXT||XWl=W_R)AgGx<9XO=Ggffb;&E~o_n)^J#%%n>Qw=n)yX(}H=rcDGtsQ6 zj-6-FCx-{PiT$1MswdyJ0na~+FYBvqb{eG2yA83WU%Kl5$aKchRv!UF(o}!hr};(r z0GOdCVyRVO`i8Dz5c!MUQ+t)9hl;-N4JM5@|2|`3G`3)Dm~zC64~Z9&g+SQyQNj?_ zZZ|^@ix#l&a{>NiVff#t^SS(xga1{&W0O6z24)=KD{f=WX3N%oPYJ5F=R~EOt3TVf z@*k>XK$NKZs-}GU(yR>~0G^L~(8>(?So&^TNQ5w;pw=$`mQpTDkjT_4k4}vw+UO_a zO0J@kj_7k)rztW6n?Rs}8S&>WMBkdb`}F#g;(_e&rPMaAr$o6W)_OucVqs{ME@iX+ zGzemBjP~?%!JYOTF89_%v^5@>2f6ZvmL~p|{&o2X1sdJ=Fr0n;=qq>X{}J`&@lbwW z{B2Scl~CD|vV17XzPD1@lCm$AP}UgxSVBlb3)uwa} z@AUose*e`AGtYCMd(U~F_xpX$vyWag>5~?fLlcV@96!taF*Ma|UVWvSvRV6Raqqvt zbc9IN7){Wt3QW)T7|LDj`w;!z-D2KP%Vv(eySeGJ>EGVwOi?}cHG6k&?C!W`|Bf@& zf3oGlrmpG?t=WHp7CNe|b|k0Wj#~NwT)A8VCTb!s@s7Lx8+vuzoV|!HG*Ue=H&;DK zlN@v9-S--mKdgy_mGN}*yg`k%r-vk$7X7+&k==#pH3LKAlU|@~{_W8*d#6B*xdnux z&spM!i&pDzb8Ex8`8ZUxrV;l|y6X`X+&LhW} zKqB~L8FsIxIswZGnXsiM3vV}KYd$~J7#hRba4#|wcKxg%N5+@qS`)afH;`V2INvQ&P*b2*k*eL(n`$J>Ky^$Pfl`0Rv_+vamk38(jf=j>Wa zK6#sR=0Z{FyZS0@5+u7aysRvl(0pIQWWOsAhWD|?H zE1)*a39FCKXm_(KTK)qzM=)PzS}a%T3*wQl@Isi?MI0(i;;CZA$6tRSA6qKsM#x-& z>FRxd`xNgbSkN&35LNZDI~djp%eO8X2K}HgxfCSMusHH$7hCux`N*y3BN^aC@Q^&w znr)Ezwu*KB zbgIEqzJ1oz*tJ0HikQljfWfakLAw(Vft4V6!_zAn9S*My{r4naqf8E{bj&CJN--+L z0J1Ugj7H6a=?ETUA@~au>LThYB(KCQLTd|DW=gp?kF#zq-^~yJDBwwrS>_^B$3aLO z)DdlWO9ya@0NcO#8vUu!^5XH{L!F#8d_{tiB#ARekI{n{5sT)T8F}ymQt-@?nRlH+ z%8YT$UeO@beEZvbjXPxH+w3kLk^~PuiFdMxlSa4zFHp;~c+=m{zP&g0dNuwBkSbn> zGSFDQd+VLLtqB#NKZmQAuC{+GvEB}WyTy4vDf`51*7wi}7g#qkZwC?kZ^NxI(~ceC z!I-(p2poj(A5%Ky8S5__puG zs@)Sj?{?PHw`s8eNs48109=_0iAzO`-VFq zOLDgiR+6JC3tW+}92Zp&fDNoMQXohEQ9{@`1il+3rzzNhH$p{0zR_!=&KOyv2C`!u z#@D9Zre-iPP5lHEk|mW2F36;ueI#(~LMhiwv~mh71XC2h@oC>yvvQbFeqCne#Gsw$)0R zzVU5_FRK^tV~;%d*Et&ZZJ6UpktkSS`N|(nHn&REoMBLv-?J7;l0lBkK!U18G|hH) zWnh7ic|M!XcydFV*a(mdoR zmn@T{4WLVaUR;TM$S40iPChrslOf3OdK;zR*H`{Q6}g`Ka~rJ1mnS`iecnQ8tP7j{ zI}g|6``F156xj{OrOW)6MF*MYdFVMZanSDpmi?jdJK?kGS*NAT3-nLxj_x5djA$ee zo?!wWlN<*3%+T9TVM<}wZ;po{2}`ewX{Au3o@KAj?iVecE!=wwo*}$LqK!1=(h>P* z`%3312ds=XzD81R_OJex6`zEg<1or>h6^zw0vOrEVds)HL&Wd}gv57v)2$U~#NY^v z%GHv=>JCkC@mjQn*|7Q{PC?^fSe8*~n9()!KHiI8K|H!MQ5F+ly$9@eT{c<}Yl7vp zE}a_QjubVg=$>+G*IG%C8>@2Oeo0~tX8i!^ulHeRR0FK1zW@pe7!kPZGBGDPB>-3l zd{VT9GV1}(pboG#w73gNo<|4KaXEBu$#O(Q>{5$1to?nekIel^2y%kp@XuOdq>0@T zK~OKWUW=b0_{#{)3M!dv*P0SMYvxozfFX1ND)yTY1|1nr~KU;on%xd3xE2kD`kS$}hQ z@+Ugaq0!Db6`N+*tqKKH?^uU?y~h*BLE*$LURV8+oSP>5&`$ZyL7AYujfA&3y+6bI znMKY+Y z`P@rH0Eih2w#cR)D;~CQp<}jN;`ULi@SJ81j!`3{7=bxbx+XM-EQP0 zJq_qrDeQEawKi0OgFkuh>5;M9&qK2=TNS|#8Zpt2^T^JVs__2D?NDV0%65!XWeEnj z(H}5~J|7_YcuC7AL2SY|ydeM@o*9U^#5>m4CKjg;4*({*7~o9Pbr zgdjSfX!J9{aOXVzfU}~Kerv-O_%_y$TkDGU0m}QWs(brM9a~*XS+O5d>4CEQ>&LJT zncx^J`juO&gx;C8gkr=rNsBrl9zz!yDmdGwtxZt5)q>T|IP8Nn`Rt1T56;)^%VR|jMm^N)wU24S$K6#~eFss-G zuLJ}WW=a``C%+H>0B}w>TlMOQZAq=1fJamF2`n;3bo#<|X&ud%&1{$ir^b6H#FHyU z-i{sCCA23+i|()MVQE=nzF@0J4Vnf4`$DH)!SddYJNya37Dumjyu8lx9yg*Hfw*!!F-#Jt-;>#fTtFD_?PgCLAv&ZQ&DeJ{@~0p$f#y~Dmxss{kfbW zYFd&7;rqFH!_5KPd=BJi$rK5B$2R^MSbPbM4GtnhuL2Lo_9grC-YvIQ-i_Xv{_8!l zKb875f4wW~DS)&u>|Oj$tBiIlKi&8vUy-tW9VgRQRGYt8TeC22fu( z^RSI4ep%n&o4n|_u2vZUW#W>{Pn(!cf6oqtK#5(T!*D%V@bOcS=w%fgA8wP{${#xd zzfFJK*3xQvXtfAF zU7oLA=XPVepsw6` zWMSvD+@v3Y_+XUisHXlKaw+K{YNds{r9@*}-h}b@bWhtk`+;G^uk3J_q0#lS0Sn@2Xq$c0j9@4mo^kwcjPm~;+_*|g}8AB@K|NWLp`vf zO`+fl!o$Du^<5DPgMKp+om(!9Kg~@KfsO8)vWKr1{VqV3esEn<9WPEFQi|uA0c$oE zXyc!#XR@GR3!&12-x_rV6H)UY6PG3<-SJR|tuCTfHfY~F?Zt3wasP=eqw=~>aPPPQl+Aixcn>hOG^0Q@2oI>KScnRQero9e(Tvx=>w%Q zeOlkb-XLcEmNm3fY2g#|j+wCmT46iy>@elA* zx8ry@^+_UBm|D%i?8d>~Oy!H9UX|W39*!_;%m*(_c;+Id1SEe3^C=Q4OE&Ru9f%{H z$(pvwtP`Da;y>w@7(Chi28szG>jm*CCpqTBULf}AMlSv-n&7CSnRi2Q_$etCH5gA6 z0CDIH-|u-(>SL8cWf1QCyk;kDkA?#;&)}P_uRVhczehVHKLYYEOOKMaE)hUX8vP7E zRf|_#)fVwc35sDJPF#_rCNnlrQhxI5S}KaaD6n+H6aqnDW{$GMI?az`hU1vS=>m}w z(@6jNNpNspe(*j+>>WP4AJn8%;a>~e?Ni}(t^}TIe`3xQoCS*ymTbe)%%o|En>A|W zZ0(fI!In8QoNY>>whaFP$TM_HeS$TAv+Z8_YV>8!90nLMwEy<@Tc7NPkg%0zWR_66 zxdIhP7nS#Jdhw%60$kVb71gOxQD(oFO_|%Wq0aynPaR0g+p%>V*$+xkl@oXLG*70% z3#g$icg6L4z=Y8#e?zwXe!UhKxUcQXsBEW5Yu;>N9h6XgC*Iayw^IXcgk8P^BbQcX zMxsv`(>-#xP+k4B{x^u1hHQK=$_?M~lO|t2EEN1KXLP5zP<*l-?lJKVeAc(}8^A1b zTzty4o-evXf4E(y@?d!sZcbKZY- zY!*M>0cR}LMQ)pn-o$e#exh?apNdUBpL7v|FwRPag=@RdOv0!ENMY<2tNW;mZvV~j znMUGN=u-cvd5=1ag6Y7gXgbC!Z*zVuR+EtK+CT{EKw z3hX2eKf-Pfr~CH#za1=VSYQn#K&iEfl~t7o)zU<%Z?m^$p&+zIrG~%qf8Vv1azu*d zlHAk&W<3jHQC|l1Vxglqo2@O~j=@4l{?=B=uw$%mZvxqgUg{_*>c)Hhgaz7?&fl(` znV&oFiEjia2WSryiEpn43mnj6Ip{fLfIa>EJU~#b^;Fl0fwYI9(!L-bhBvjHKf#i8 zGJTXVt&S+sfC~7X*Gzgx&IbLF`1Y{27FBmb2_b0=qg~Vd3%P)wxvQ+*FpxC)bUU_a zM+4L-f#{%`bq3LMkieVr^*s!bV-EK%V>jEhAuAd{fbS*LH|Wy=r6~qq@=^8JE9HaG zCZq0iqldv6Vxj9=3?;g{o4b!&;-AWJN>)4m1(-)fsP&RP{AnZM5|y0+9QYj0%`78S z+XyIceoht3z9nCZ<6#Ghtsz`Ti?`2vlN`)bOKF9Mpu@bXgfP;luB6rSwwdzJCrHz%rj%G6?^k@6mdobmTaBR*NA zBJY2YgV(j20pyb-^g`8PbGHxjBCvLVpq41zlS0NgBln#JE|vyaRt^vh zL~}}U+mUuo77<&4x$wRJM|R$Q*VA9MGD@OYtn1o=2z}S~iIRA*^}bEhP|I_JaT%Xt zIIaYMvp$mJ*xDxtj{ttC23e?<3GMXbK@XD9UrNfy=_z2Qt;?6vY1&HT{|qlfyG~nM zmBCu34Orm>BjwJsFvbj)5(eLLB*RTUdP-__xyXHc4Z^vv=$#%1jgBlj9f>+!Y3?_m z+Xg-3BEIPP%d6Ja;{X?c{opiDER-}50(BcuT{@=n*J2oeo7r&L%zK`Avk}%hE~9?m zgnsW^(?}2ysQqshNjxwMk#?2lCvmpQ!2{qAeLpn#K4h9q1uQ`}-*}nwCm~4zaCDgY zx~fP_*WR5#J^G`kql~w)-cE#?{PB)Xsi!{=8@Dx{p%)gxNas=yRwnT5nmqg(lJ^Im zl-d6rO4^nlZ?hv3`C%u3-W;+^HTOyhCv@9!lB^8)^35!?7vll%IcDb~Ccna)kB() zS!`T&rvvRTP3qY3P)EB-Wsn%s`R-)=ov`#b`E5iONsgnOpZ!|QlB^V@mylt|P9tR} z=y^RpYUAKYdjnFEUieFLAbIL2lFyY+*Nkk|2g~k8r`yuE-o_ke=PT9VUjpiVbyl-X zfgX2HTyHICTT}*TOMWcrFLzx(2OSigDaxwj1pG~!g>F#Lc-+#~eFSF!z0Mgv%O`3c zqANR1ODpF5!umGE%~>{F^r=_nljq^9f9MC^A&`J}ESf3>PNcNhTNjY(#qb&Fc3^ICrW>wMUfa(bI{MBtyUbcKZeBrQ)6|4#v7jpQ~xyX4z82(T`FUQCs z$mza||DN6%ul~N8>(F71E*(*S9wFd$;?^mMzS1G@98|fx!zYCvF z$C<A1ImGLwT^o{NPJR$88o!%}*U}b{2AP3@*=1 zCk2hWN>V3aSIPjknj6zK4RMVQ0c8_;z=qVs0RGr-8SJXNA4f6>+M?N3v-dVJ#RtBLfgM(5Wr?hFbv zr*RRICfhyi3V(zHRmS;SdizN1jzur#n1DLhGj3BclBZNu!dXV@CHj4Mx!F9EjwdG5 z11}*u>3BxZGth()&K${cO`HR{X$661lNXhDbDn-O(Ny*RB2lClpczgqdroW(U?sgZ zeqF5(n{0wBj0hvg2XBTE(0xDyU6&ei5kEqc0u$ z_H%%}mqa!6Dc`?{&$5`gpK!RwiSk2axiT*J-V}dYR`OqQNQKxH9j5-~rI)66MZeF5 zu&Eg7e4tuWI$n2QKyhZMHi&k%mOr4|p-JOMU2Tx%i4YofRBfRpYhDs|hC=Cb5P^&l z&q}*j6?m=Yi<5K9-vmV&C1)b4R9@nx}`=j2{4R*>mCa0C#i zTo(aj_*39I|M4g<*0pbrZC;^ti4{9H@bdu^gy_p{)s%0Nt%eMA=1ZARKG$9^Zo3ES zJtN{8$}xF=1?V-iM+chv;(JX!1nM-;o`k|`nc$ZX;o@>)!neo0O}5nNy%!JVXmPBQ z{M}^xZL5(DDM}`%J}l=s&CL4AnJ8nH5=)j%x@DcM{pu?Z^;yZIg{0({&F?%jM4B-4 z&g9mwlPm9Eqai!?vRU57a-&w#xU3w8oY>h{dS^nOMl-0=fohgYgt(KVVd*SApm8w7_}ySv9~epW*J5EuC)5a~FK}7+AW+W0v$H zrznXa5TyoxjFMSr{3rTp)HKy@c^nG6@>9Qumzs|@Eb)LhV7>YWRd%!{t&M}O$$9Qy zb+ha+MQSs3zHPEC>oE8H42#vJ2lhB(i-apE4FP5m8!H`&tIfU!7&G(m?GHF3>V;qc zHN#lR{wh)`=RczvwCM4xLMQq3cQFX=dT6yr7svbXX(u5GIRCA%EK2DmJ;z;0-5IjC z72SOb`x6$|GR%)f?HT&$+_Fb*a#FKqmdl0DK(3w zUaC;0@H)*YP8=gnS_?=*7US79i$A#}CncYy49S`l2tPYNu=%L&+?s}rxp5?Ze#bpa zGUbLj?kGHp3nO_~-UUi967DrA8o#RP z_Gm;KUUX9O3`6%UPpCgRA}M*(1{PGJsWZicF*2+4wEmV?v=nF5=5Gf;etpnv2rY^`02lcUD(r|q`Ho}@7CuJ7 zQ895ZW7&0=*ne#w1X)?{Nq^>R=@)H=U>aOJ;bfvM@yPEB()b}eTm z8P(RK88B7#%=sEPU0PpBhO|Vqw)8Y&)9xod%UsY6?>PBXZC4LgW83(`1dFmPr zZ(zTb92NwJgL8D^`N%8$!{E%d?`X3Ck-mUVDh_hM$^$vX(eJ(tsYZBmgwBV zJ-0}bZ-vihv!Nk&YY2Dr5#;wY@uA+hll{GPX=u)4Go?dG(jOhqcOIn7M$T*pe7A$e zq1%AQOXJJ@IAtjbk9-|-i_>(AHsuH?gl6aMb4q;*Qesfi0q=VlIq$BlpR|eENVmwH zt?ZiPgECpGQ1L{PSfZ72S z?myQ|dztqUSEHHR&ko6^5;OZjo6(0NO~(OUf70@Bf6yn^lvf_Zzw0%InFn7%_PI9x z_?fx!J|*WTt*XM1vuihEYt89`m@81*w8ouiGfzu;c70@@_f`9yPW7IV7XK|ATf=&) zOs@vT28;E(xX=b+1xn6hIH8-!aj*+$*@BUuJY0s~#zzC0r0UE#K7(&8UA6uK^-$6W zOADUXc;|P*LH0h)sra`j-W=ey%3I&Zsef-0mN9Mk=Dd*?F7gQR!;qrA`RsMAef9i5 zef;XAqk+XK4S3`m@3(X8_x@+7v(PGxF2kSSAHnCcJTtejb&YfU#rnO(_jjP^C+c4u z*QpQ5t0oU6rcS3K_hVI%n|oVg;oKUe9`YV~IQK>&?mcE&)QxSS^XIZ&Gd_$1r;G8?nF9`3`~O?>8BN#352wqMa~g zp`WO!wv<{Ja3ZeI+1T~z3ZX|TBJe>=xB-*g-AYyH6W5@4Xg_;MoT=K(qs!)nazY|B zT!ARyL0*6Gj^6#N>4wEpZbBE>(bMyH`#(UatWT<$-?5)&g8J!1>)PsoG3Te3kW%FI z+npGmu2&*DO$mMm>c}OM+<1dSb3R_%ddZjWD>6wyp~kK1!`a)cVO7IQ67<+&89?PyL65;`5^1SL?u1e$%<bzzw<#q;LzUsi?Y(P{9USLjrH6o?8jJjm$}5PTQofLxz} zVtEoo#m%EAS*5Sl&%H~KafuV9f1lm$s4%Fq85kL!I@bbKsSRRm�)A=_%;>l#Z=P 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