 syntax="proto3";
 package
// metamodel_version: 1.7.0
// Represents the source of a sequence that is identified by an Addgene id
message AddgeneIdSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  string repositoryId = 0
  repositoryName repositoryName = 0
  string sequenceFileUrl = 0
  addgeneSequenceType addgeneSequenceType = 0
 }
// Represents a report of an annotation step
message AnnotationReport
 {
  string type = 0
 }
// Represents a computational step in which sequence features are annotated in a sequence
message AnnotationSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  annotationTool annotationTool = 0
  string annotationToolVersion = 0
 repeated  annotationReport annotationReport = 0
 }
// Represents a fragment in an assembly
message AssemblyFragment
 {
  sequence sequence = 0
  simpleSequenceLocation leftLocation = 0
  simpleSequenceLocation rightLocation = 0
  boolean reverseComplemented = 0
 }
// Represents the source of a sequence that is an assembly of other sequences
message AssemblySource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents a file associated with a sequence
message AssociatedFile
 {
  string type = 0
  sequence sequenceId = 0
  string fileName = 0
  associatedFileType fileType = 0
 }
// Represents the source of a sequence that is identified by a Benchling URL
message BenchlingUrlSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  repositoryName repositoryName = 0
  string repositoryId = 0
 }
// Represents a cloning strategy
message CloningStrategy
 {
 repeated  sequence sequences = 0
 repeated  source sources = 0
 repeated  primer primers = 0
  string description = 0
 repeated  associatedFile files = 0
 }
// Represents an option in a collection
message CollectionOption
 {
  string name = 0
  source source = 0
  collectionOptionInfo info = 0
 }
// Additional information about a collection option
message CollectionOptionInfo
 {
  string name = 0
  string description = 0
  collectionOptionType type = 0
  string resistance = 0
  string well = 0
 }
// Represents a collection of possible sources in a template
message CollectionSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  string categoryId = 0
  string title = 0
  string description = 0
 repeated  string image = 0
 repeated  collectionOption options = 0
 }
// Represents the source of a sequence that is generated by Cre - Lox recombination
message CreLoxRecombinationSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents the source of a sequence that is generated by CRISPR
message CRISPRSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 repeated  primer guides = 0
 }
// Represents the source of a sequence that is identified by a database id
message DatabaseSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
 }
// Represents the source of a sequence from the Euroscarf plasmid library
message EuroscarfSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  repositoryName repositoryName = 0
  string repositoryId = 0
 }
// Represents the source of a sequence that is generated by Gateway cloning
message GatewaySource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
  gatewayReactionType reactionType = 0
  boolean greedy = 0
 }
// Represents the source of a sequence that is identified by genome coordinates, requested from NCBI
message GenomeCoordinatesSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  string assemblyAccession = 0
  string sequenceAccession = 0
  string locusTag = 0
  integer geneId = 0
  integer start = 0
  integer end = 0
  integer strand = 0
 }
// Represents the source of a sequence that is generated by Gibson assembly
message GibsonAssemblySource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents the source of a sequence that is generated by homologous recombination
message HomologousRecombinationSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents the source of a sequence from an iGEM collection
message IGEMSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  repositoryName repositoryName = 0
  string sequenceFileUrl = 0
  string repositoryId = 0
 }
// Represents the source of a sequence that is generated by In-Fusion cloning by Takara Bio
message InFusionSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents the source of a sequence that is generated by in vivo assembly. Algorithmically equivalent to Gibson assembly.
message InVivoAssemblySource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents the source of a sequence that is generated by ligation with sticky or blunt ends.
message LigationSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents the source of a sequence that is manually typed by the user
message ManuallyTypedSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  integer overhangCrick3prime = 0
  integer overhangWatson3prime = 0
  string userInput = 0
  boolean circular = 0
 }
message NamedThing
 {
  integer id = 0
 }
// Represents the source of a sequence that is generated by oligo hybridization
message OligoHybridizationSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  integer overhangCrick3prime = 0
  primer forwardOligo = 0
  primer reverseOligo = 0
 }
// Represents the source of a sequence that is generated by ligation of PCR products as part of overlap extension PCR. Algorithmically equivalent to Gibson assembly.
message OverlapExtensionPCRLigationSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 }
// Represents the source of a sequence that is generated by PCR
message PCRSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
  boolean addPrimerFeatures = 0
 }
// Represents a report of an annotation step using Plannotate
message PlannotateAnnotationReport
 {
  string type = 0
  string sseqid = 0
  integer startLocation = 0
  integer endLocation = 0
  integer strand = 0
  float percentIdentity = 0
  integer fullLengthOfFeatureInDb = 0
  integer lengthOfFoundFeature = 0
  float percentMatchLength = 0
  boolean fragment = 0
  string database = 0
  string feature = 0
  string type = 0
  string description = 0
  string sequence = 0
 }
// Represents the source of a sequence that is generated by polymerase extension
message PolymeraseExtensionSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
 }
// An oligonucleotide or primer
message Primer
 {
  integer id = 0
  string type = 0
  string name = 0
  integer databaseId = 0
  string sequence = 0
 }
// Represents the source of a sequence that is identified by a repository id
message RepositoryIdSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  string repositoryId = 0
  repositoryName repositoryName = 0
 }
// Represents the source of a sequence that is generated by restriction and ligation
message RestrictionAndLigationSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  boolean circular = 0
 repeated  assemblyFragment assembly = 0
 repeated  string restrictionEnzymes = 0
 }
// Represents the source of a sequence that is a subfragment of another sequence, generated by sequence cutting using restriction enzymes.
message RestrictionEnzymeDigestionSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  restrictionSequenceCut leftEdge = 0
  restrictionSequenceCut rightEdge = 0
 }
// Represents a cut in a DNA sequence that is made by a restriction enzyme
message RestrictionSequenceCut
 {
  integer cutWatson = 0
  integer overhang = 0
  string restrictionEnzyme = 0
 }
// Represents the in-silico transformation of a sequence into its reverse complement
message ReverseComplementSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
 }
// Represents a cut in a DNA sequence
message SequenceCut
 {
  integer cutWatson = 0
  integer overhang = 0
 }
// Represents the source of a sequence that is a subfragment of another sequence, generated by sequence cutting.
message SequenceCutSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  sequenceCut leftEdge = 0
  sequenceCut rightEdge = 0
 }
// Represents a sequencing file and its alignment to a sequence
message SequencingFile
 {
  string type = 0
  sequence sequenceId = 0
  string fileName = 0
  associatedFileType fileType = 0
 repeated  string alignment = 0
 }
// Represents the source of a sequence that is identified by a SEVA id
message SEVASource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  repositoryName repositoryName = 0
  string sequenceFileUrl = 0
  string repositoryId = 0
 }
// Represents a location within a sequence, for now support for ranges only
message SimpleSequenceLocation
 {
  integer start = 0
  integer end = 0
  integer strand = 0
 }
// Represents the source of a sequence from the SnapGene plasmid library identified by a SnapGene subpath of https://www.snapgene.com/plasmids/
message SnapGenePlasmidSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  repositoryName repositoryName = 0
  string repositoryId = 0
 }
// Represents a sequence that is part of a template, where the actual sequence content will be determined by the user's actions
message TemplateSequence
 {
  integer id = 0
  string type = 0
  boolean circular = 0
  string primerDesign = 0
 }
// A sequence (may have features) defined by the content of a text file
message TextFileSequence
 {
  integer id = 0
  string type = 0
  sequenceFileFormat sequenceFileFormat = 0
  integer overhangCrick3prime = 0
  integer overhangWatson3prime = 0
  string fileContent = 0
 }
// Represents the source of a sequence that is uploaded as a file
message UploadedFileSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  sequenceFileFormat sequenceFileFormat = 0
  string fileName = 0
  integer indexInFile = 0
  boolean circularize = 0
  simpleSequenceLocation coordinates = 0
 }
// Represents the source of a sequence that is identified by a WekWikGene id
message WekWikGeneIdSource
 {
  integer id = 0
 repeated  sequence input = 0
  sequence output = 0
  string type = 0
  string outputName = 0
  integer databaseId = 0
  repositoryName repositoryName = 0
  string sequenceFileUrl = 0
  string repositoryId = 0
 }
