# metamodel_version: 1.7.0
enum AddgeneSequenceType
  {
    depositor__HYPHEN_MINUS__full
    addgene__HYPHEN_MINUS__full
  }

enum AnnotationTool
  {
    plannotate
  }

enum AssociatedFileType
  {
    Sequencing_file
  }

enum Collection
  {
    AddgenePlasmid
    OligoPair
  }

enum CollectionOptionType
  {
    OligoPair
    AddgenePlasmid
  }

enum GatewayReactionType
  {
    LR
    BP
  }

enum RepositoryName
  {
    addgene
    genbank
    benchling
    snapgene
    euroscarf
    igem
    wekwikgene
    seva
  }

enum SequenceFileFormat
  {
    fasta
    genbank
    snapgene
    embl
  }

type AddgeneIdSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryId: String!
    repositoryName: RepositoryName!
    sequenceFileUrl: String
    addgeneSequenceType: AddgeneSequenceType
  }

type AnnotationReport
  {
    type: String
  }

type AnnotationSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    annotationTool: AnnotationTool!
    annotationToolVersion: String
    annotationReport: [AnnotationReport]
  }

type AssemblyFragment
  {
    sequence: Sequence!
    leftLocation: SimpleSequenceLocation
    rightLocation: SimpleSequenceLocation
    reverseComplemented: Boolean!
  }

type AssemblySource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type AssociatedFile
  {
    type: String
    sequenceId: Sequence!
    fileName: String!
    fileType: AssociatedFileType!
  }

type BenchlingUrlSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryName: RepositoryName!
    repositoryId: String!
  }

type CloningStrategy
  {
    sequences: [Sequence]!
    sources: [Source]!
    primers: [Primer]
    description: String
    files: [AssociatedFile]
  }

type CollectionOption
  {
    name: String!
    source: Source!
    info: CollectionOptionInfo
  }

type CollectionOptionInfo
  {
    name: String
    description: String
    type: CollectionOptionType
    resistance: String
    well: String
  }

type CollectionSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    categoryId: String
    title: String!
    description: String
    image: [String]
    options: [CollectionOption]
  }

type CreLoxRecombinationSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type CRISPRSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
    guides: [Primer]!
  }

type DatabaseSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer!
  }

type EuroscarfSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryName: RepositoryName!
    repositoryId: String!
  }

type GatewaySource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
    reactionType: GatewayReactionType!
    greedy: Boolean
  }

type GenomeCoordinatesSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    assemblyAccession: String
    sequenceAccession: String!
    locusTag: String
    geneId: Integer
    start: Integer!
    end: Integer!
    strand: Integer!
  }

type GibsonAssemblySource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type HomologousRecombinationSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type IGEMSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryName: RepositoryName!
    sequenceFileUrl: String!
    repositoryId: String!
  }

type InFusionSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type InVivoAssemblySource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type LigationSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type ManuallyTypedSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    overhangCrick3prime: Integer
    overhangWatson3prime: Integer
    userInput: String!
    circular: Boolean
  }

type NamedThing
  {
    id: Integer!
  }

type OligoHybridizationSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    overhangCrick3prime: Integer
    forwardOligo: Primer!
    reverseOligo: Primer!
  }

type OverlapExtensionPCRLigationSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
  }

type PCRSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
    addPrimerFeatures: Boolean
  }

type PlannotateAnnotationReport
  {
    type: String
    sseqid: String
    startLocation: Integer
    endLocation: Integer
    strand: Integer
    percentIdentity: Float
    fullLengthOfFeatureInDb: Integer
    lengthOfFoundFeature: Integer
    percentMatchLength: Float
    fragment: Boolean
    database: String
    feature: String
    type: String
    description: String
    sequence: String
  }

type PolymeraseExtensionSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
  }

type Primer
  {
    id: Integer!
    type: String
    name: String
    databaseId: Integer
    sequence: String
  }

type RepositoryIdSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryId: String!
    repositoryName: RepositoryName!
  }

type RestrictionAndLigationSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    circular: Boolean
    assembly: [AssemblyFragment]
    restrictionEnzymes: [String]!
  }

type RestrictionEnzymeDigestionSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    leftEdge: RestrictionSequenceCut
    rightEdge: RestrictionSequenceCut
  }

type RestrictionSequenceCut
  {
    cutWatson: Integer!
    overhang: Integer!
    restrictionEnzyme: String!
  }

type ReverseComplementSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
  }

interface Sequence
  {
    id: Integer!
    type: String
  }

type SequenceCut
  {
    cutWatson: Integer!
    overhang: Integer!
  }

type SequenceCutSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    leftEdge: SequenceCut
    rightEdge: SequenceCut
  }

type SequencingFile
  {
    type: String
    sequenceId: Sequence!
    fileName: String!
    fileType: AssociatedFileType!
    alignment: [String]!
  }

type SEVASource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryName: RepositoryName!
    sequenceFileUrl: String!
    repositoryId: String!
  }

type SimpleSequenceLocation
  {
    start: Integer!
    end: Integer!
    strand: Integer
  }

type SnapGenePlasmidSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryName: RepositoryName!
    repositoryId: String!
  }

interface Source
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
  }

type TemplateSequence
  {
    id: Integer!
    type: String
    circular: Boolean
    primerDesign: String
  }

type TextFileSequence
  {
    id: Integer!
    type: String
    sequenceFileFormat: SequenceFileFormat!
    overhangCrick3prime: Integer
    overhangWatson3prime: Integer
    fileContent: String
  }

type UploadedFileSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    sequenceFileFormat: SequenceFileFormat!
    fileName: String
    indexInFile: Integer
    circularize: Boolean
    coordinates: SimpleSequenceLocation
  }

type WekWikGeneIdSource
  {
    id: Integer!
    input: [Sequence]
    output: Sequence
    type: String
    outputName: String
    databaseId: Integer
    repositoryName: RepositoryName!
    sequenceFileUrl: String
    repositoryId: String!
  }
