"""Microscope objective"""
type ObjectiveElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
  magnification: Float
  numericalAperture: Float
  brand: String
  model: String
  workingDistanceMm: Float
}

"""Common interface for all optical elements"""
interface OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
}

enum ElementKind {
  SOURCE
  DETECTOR
  MIRROR
  BEAM_SPLITTER
  LENS
  OBJECTIVE
  FILTER
  POLARIZER
  WAVEPLATE
  APERTURE
  SHUTTER
  SAMPLE
  OTHER
}

"""Optional 3D pose; position and/or orientation can be omitted"""
type Pose3D {
  position: Vec3
  orientation: Euler
}

"""3D vector or point in space"""
type Vec3 {
  x: Float
  y: Float
  z: Float
}

"""Euler angles for 3D orientation"""
type Euler {
  rx: Float
  ry: Float
  rz: Float
}

"""Optical port on an element"""
type LightPort {
  id: ID!
  name: String!
  role: PortRole!
  channel: ChannelKind!
  spectrum: Spectrum
  maxIncomingEdges: Int
}

enum PortRole {
  INPUT
  OUTPUT
}

enum ChannelKind {
  FREE_SPACE
  FIBER_SM
  FIBER_MM
  WAVEGUIDE
}

"""Spectral window in nanometers"""
type Spectrum {
  minNm: Float!
  maxNm: Float!
}

"""Thin lens"""
type LensElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
  focalLengthMm: Float!
}

"""Mirror"""
type MirrorElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
  angleDeg: Float
  band: Spectrum
}

"""Beam splitter"""
type BeamSplitterElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
  rFraction: Float!
  tFraction: Float!
  band: Spectrum
}

"""Detector"""
type DetectorElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
  nepdWPerSqrtHz: Float
}

"""Light source"""
type SourceElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
  nominalWavelengthNm: Float
  powerMw: Float
  channel: ChannelKind
}

"""The sample"""
type SampleElement implements OpticalElement {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3D
  ports: [LightPort!]!
}

scalar _Any

type Query {
  _entities(representations: [_Any!]!): [_Entity]!
  _service: _Service!
  images(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  rois(filters: ROIFilter, order: ROIOrder, pagination: OffsetPaginationInput): [ROI!]!
  myimages(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  datasets(filters: DatasetFilter, pagination: OffsetPaginationInput): [Dataset!]!
  mydatasets(filters: DatasetFilter, pagination: OffsetPaginationInput): [Dataset!]!
  timepointViews(filters: TimepointViewFilter, pagination: OffsetPaginationInput): [TimepointView!]!
  labelViews: [LabelView!]!
  channelViews: [ChannelView!]!
  continousScanViews(filters: ContinousScanViewFilter, pagination: OffsetPaginationInput): [ContinousScanView!]!
  wellPositionViews(filters: WellPositionViewFilter, pagination: OffsetPaginationInput): [WellPositionView!]!
  acquisitionViews: [AcquisitionView!]!
  rgbViews(filters: RGBViewFilter, pagination: OffsetPaginationInput): [RGBView!]!
  affineTransformationViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!
  scaleViews: [ScaleView!]!
  eras(filters: EraFilter, pagination: OffsetPaginationInput): [Era!]!
  myeras(filters: EraFilter, pagination: OffsetPaginationInput): [Era!]!
  stages(filters: StageFilter, pagination: OffsetPaginationInput): [Stage!]!
  renderTrees(filters: RenderTreeFilter, order: RenderTreeOrder, pagination: OffsetPaginationInput): [RenderTree!]!
  experiments(filters: ExperimentFilter, pagination: OffsetPaginationInput): [Experiment!]!
  rgbcontexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!
  instruments: [Instrument!]!
  multiWellPlates(filters: MultiWellPlateFilter, pagination: OffsetPaginationInput): [MultiWellPlate!]!
  objectives: [Objective!]!
  myobjectives: [Objective!]!
  tables(filters: TableFilter, pagination: OffsetPaginationInput): [Table!]!
  mytables(filters: TableFilter, pagination: OffsetPaginationInput): [Table!]!
  snapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!
  mysnapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!
  files(filters: FileFilter, pagination: OffsetPaginationInput): [File!]!
  myfiles(filters: FileFilter, pagination: OffsetPaginationInput): [File!]!
  randomImage: Image!
  labelAccessors: [LabelAccessor!]!
  imageAccessors: [ImageAccessor!]!
  meshes(filters: MeshFilter, pagination: OffsetPaginationInput): [Mesh!]!
  children(parent: ID!, filters: DatasetChildrenFilter = null, pagination: ChildrenPaginationInput = null): [DatasetImageFile!]!
  rows(table: ID!, filters: RowFilter = null, pagination: TablePaginationInput = null): [MetricMap!]!

  """Get permissions for a specific object"""
  permissions(identifier: String!, object: ID!): [UserObjectPermission!]!

  """Get available permissions for a specific identifier"""
  availablePermissions(identifier: String!, search: String = null, values: [ID!] = null): [PermissionOption!]!
  rgbView(
    """The unique identifier of an object"""
    id: ID!
  ): RGBView!
  tableRows(filters: TableRowFilter!, pagination: OffsetPaginationInput!): [TableRow!]!
  tableCells(filters: TableCellFilter!, pagination: OffsetPaginationInput!): [TableCell!]!
  mesh(
    """The unique identifier of an object"""
    id: ID!
  ): Mesh!
  maskedPixelInfo(
    """The unique identifier of an object"""
    id: ID!
  ): MaskedPixelInfo!

  """Returns a single image by ID"""
  image(
    """The unique identifier of an object"""
    id: ID!
  ): Image!

  """Returns a single image by ID"""
  lightpathView(
    """The unique identifier of an object"""
    id: ID!
  ): LightpathView!
  tableCell(
    """The unique identifier of an object"""
    id: ID!
  ): TableCell!
  tableRow(
    """The unique identifier of an object"""
    id: ID!
  ): TableRow!
  roi(
    """The unique identifier of an object"""
    id: ID!
  ): ROI!
  renderTree(
    """The unique identifier of an object"""
    id: ID!
  ): RenderTree!
  rgbcontext(
    """The unique identifier of an object"""
    id: ID!
  ): RGBContext!
  objective(
    """The unique identifier of an object"""
    id: ID!
  ): Objective!
  camera(
    """The unique identifier of an object"""
    id: ID!
  ): Camera!
  snapshot(
    """The unique identifier of an object"""
    id: ID!
  ): Snapshot!
  file(
    """The unique identifier of an object"""
    id: ID!
  ): File!
  table(
    """The unique identifier of an object"""
    id: ID!
  ): Table!
  instrument(
    """The unique identifier of an object"""
    id: ID!
  ): Instrument!
  dataset(
    """The unique identifier of an object"""
    id: ID!
  ): Dataset!
  multiWellPlate(
    """The unique identifier of an object"""
    id: ID!
  ): MultiWellPlate!
  stage(
    """The unique identifier of an object"""
    id: ID!
  ): Stage!
  experiment(
    """The unique identifier of an object"""
    id: ID!
  ): Experiment!
  channelsFor(
    """The unique identifier of an object"""
    image: ID!
    filters: ChannelInfoFilter = null
  ): [ChannelInfo!]!
}

union _Entity = File | Image | Table

type File {
  id: ID!
  name: String!
  origins(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  store: BigFileStore!
  views: [FileView!]!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!

  """The user who created this file"""
  creator: User!

  """The organization this file belongs to"""
  organization: Organization!
}

type Image {
  id: ID!

  """The name of the image"""
  name: String!

  """The store where the image data is stored."""
  store: ZarrStore!

  """All views of this image"""
  views(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!

  """Associated snapshots"""
  snapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!

  """Associated videos"""
  videos(pagination: OffsetPaginationInput): [Video!]!

  """The dataset this image belongs to"""
  dataset: Dataset

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!

  """The affine transformation views describing position and scale"""
  affineTransformationViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!

  """Label views mapping channels to labels"""
  labelViews: [LabelView!]!

  """Channel views relating to acquisition channels"""
  channelViews: [ChannelView!]!

  """Timepoint views describing temporal relationships"""
  timepointViews(filters: TimepointViewFilter, pagination: OffsetPaginationInput): [TimepointView!]!

  """Optics views describing acquisition settings"""
  opticsViews(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!

  """
  Structure views relating other Arkitekt types to a subsection of the image
  """
  maskViews(filters: MaskViewFilter, pagination: OffsetPaginationInput): [MaskView!]!

  """
  Instance mask views relating other Arkitekt types to a subsection of the image
  """
  instanceMaskViews(filters: InstanceMaskViewFilter, pagination: OffsetPaginationInput): [InstanceMaskView!]!

  """Scale views describing physical dimensions"""
  scaleViews: [ScaleView!]!

  """Histogram views describing pixel value distribution"""
  histogramViews: [HistogramView!]!

  """Reference views describing relationships to other views"""
  referenceViews(filters: ReferenceViewFilter, pagination: OffsetPaginationInput): [ReferenceView!]!

  """When this image was created"""
  createdAt: DateTime!

  """Who created this image"""
  creator: User

  """RGB rendering contexts"""
  rgbContexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!

  """Scale views derived from this image"""
  derivedScaleViews: [ScaleView!]!

  """Views derived from this image"""
  derivedViews: [DerivedView!]!

  """Region of interest views"""
  roiViews: [ROIView!]!

  """File views relating to source files"""
  fileViews: [FileView!]!

  """Views this image was derived from"""
  derivedFromViews: [DerivedView!]!

  """Lightpath views describing the lightpath used to acquire this image"""
  lightpathViews(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [LightpathView!]!

  """The channels of this image"""
  channels: [ChannelInfo!]!

  """The channels of this image"""
  frames: [FrameInfo!]!

  """The channels of this image"""
  planes: [PlaneInfo!]!

  """The latest snapshot of this image"""
  latestSnapshot: Snapshot

  """Is this image pinned by the current user"""
  pinned: Boolean!

  """The tags of this image"""
  tags: [String!]!
  renders(filters: ViewFilter, types: [RenderKind!]): [Render!]!
  rois(filters: ROIFilter): [ROI!]!
}

type ZarrStore {
  id: ID!

  """The path to the data. Relative to the bucket."""
  path: String

  """The shape of the data."""
  shape: [Int!]

  """The dtype of the data."""
  dtype: String

  """The bucket where the data is stored."""
  bucket: String!

  """The key where the data is stored."""
  key: String!

  """The chunks of the data."""
  chunks: [Int!]

  """Whether the zarr store was populated (e.g. was a dataset created)."""
  populated: Boolean!

  """The version of the zarr store (e.g. the version of the dataset)."""
  version: String!
}

interface View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
}

input ViewFilter {
  isGlobal: Boolean
  AND: ViewFilter
  OR: ViewFilter
  NOT: ViewFilter
  DISTINCT: Boolean
}

enum ViewKind {
  CHANNEL
  LABEL
  AFFINE_TRANSFORMATION
  TIMEPOINT
  OPTICS
  HISTOGRAM
  MASK_VIEW
  INSTANCE_MASK_VIEW
  REFERENCE
}

type Snapshot implements Render {
  createdAt: DateTime!
  creator: User
  id: ID!
  store: MediaStore!
  name: String!
  majorColor: [Float!]
}

interface Render {
  createdAt: DateTime!
  creator: User
}

"""Date with time (isoformat)"""
scalar DateTime

type User {
  sub: String!
  preferredUsername: String!
  activeOrganization: Organization
}

type Organization {
  id: String!
  slug: String!
}

type MediaStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
  presignedUrl(host: String = null): String!
}

input SnapshotFilter {
  name: StrFilterLookup
  ids: [ID!]
  AND: SnapshotFilter
  OR: SnapshotFilter
  NOT: SnapshotFilter
  DISTINCT: Boolean
}

input StrFilterLookup {
  exact: String
  iExact: String
  contains: String
  iContains: String
  inList: [String!]
  gt: String
  gte: String
  lt: String
  lte: String
  startsWith: String
  iStartsWith: String
  endsWith: String
  iEndsWith: String
  range: [String!]
  isNull: Boolean
  regex: String
  iRegex: String
}

input OffsetPaginationInput {
  offset: Int! = 0
  limit: Int
}

type Video implements Render {
  createdAt: DateTime!
  creator: User
  id: ID!
  store: MediaStore!
  thumbnail: MediaStore!
}

type Dataset {
  id: ID!
  images(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  files(filters: FileFilter, pagination: OffsetPaginationInput): [File!]!
  parent: Dataset
  children(filters: DatasetFilter, pagination: OffsetPaginationInput): [Dataset!]!
  description: String
  name: String!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  isDefault: Boolean!
  createdAt: DateTime!
  creator: User
  pinned: Boolean!
  tags: [String!]!
}

input ImageFilter {
  scope: ScopeFilter = null
  name: StrFilterLookup
  ids: [ID!]
  store: ZarrStoreFilter
  dataset: DatasetFilter
  transformationViews: AffineTransformationViewFilter
  timepointViews: TimepointViewFilter
  notDerived: Boolean = null
  search: String = null
  AND: ImageFilter
  OR: ImageFilter
  NOT: ImageFilter
  DISTINCT: Boolean
}

input ScopeFilter {
  public: Boolean = null
  org: Boolean = null
  shared: Boolean = null
  me: Boolean = null
}

input ZarrStoreFilter {
  shape: IntFilterLookup
  AND: ZarrStoreFilter
  OR: ZarrStoreFilter
  NOT: ZarrStoreFilter
  DISTINCT: Boolean
}

input IntFilterLookup {
  exact: Int
  iExact: Int
  contains: Int
  iContains: Int
  inList: [Int!]
  gt: Int
  gte: Int
  lt: Int
  lte: Int
  startsWith: Int
  iStartsWith: Int
  endsWith: Int
  iEndsWith: Int
  range: [Int!]
  isNull: Boolean
  regex: String
  iRegex: String
}

input DatasetFilter {
  ids: [ID!]
  search: String
  scope: ScopeFilter = null
  id: ID
  name: StrFilterLookup
  parentless: Boolean = null
  AND: DatasetFilter
  OR: DatasetFilter
  NOT: DatasetFilter
  DISTINCT: Boolean
}

input AffineTransformationViewFilter {
  isGlobal: Boolean
  AND: AffineTransformationViewFilter
  OR: AffineTransformationViewFilter
  NOT: AffineTransformationViewFilter
  DISTINCT: Boolean
  stage: StageFilter
  pixelSize: FloatFilterLookup
}

input StageFilter {
  ids: [ID!]
  search: String
  id: ID
  kind: String
  name: StrFilterLookup
  AND: StageFilter
  OR: StageFilter
  NOT: StageFilter
  DISTINCT: Boolean
}

input FloatFilterLookup {
  exact: Float
  iExact: Float
  contains: Float
  iContains: Float
  inList: [Float!]
  gt: Float
  gte: Float
  lt: Float
  lte: Float
  startsWith: Float
  iStartsWith: Float
  endsWith: Float
  iEndsWith: Float
  range: [Float!]
  isNull: Boolean
  regex: String
  iRegex: String
}

input TimepointViewFilter {
  isGlobal: Boolean
  AND: TimepointViewFilter
  OR: TimepointViewFilter
  NOT: TimepointViewFilter
  DISTINCT: Boolean
  era: EraFilter
  msSinceStart: Float
  indexSinceStart: Int
}

input EraFilter {
  id: ID
  begin: DateTime
  AND: EraFilter
  OR: EraFilter
  NOT: EraFilter
  DISTINCT: Boolean
}

input ImageOrder {
  createdAt: Ordering
}

enum Ordering {
  ASC
  ASC_NULLS_FIRST
  ASC_NULLS_LAST
  DESC
  DESC_NULLS_FIRST
  DESC_NULLS_LAST
}

input FileFilter {
  id: ID
  name: StrFilterLookup
  AND: FileFilter
  OR: FileFilter
  NOT: FileFilter
  DISTINCT: Boolean
  scope: ScopeKind
  search: String
  ids: [ID!]
}

enum ScopeKind {
  PUBLIC
  ORG
  SHARED
  ME
}

"""A provenance event for a model."""
type ProvenanceEntry {
  client: Client

  """User who made the change."""
  user: User

  """The type of change that was made."""
  kind: HistoryKind!

  """The date of the change."""
  date: DateTime!

  """
  The assignation ID during which the change occurred. If it was happening outside of an assignation, it will be None.
  """
  during: String

  """The ID of the history entry."""
  id: ID!

  """The effective changes made to the model."""
  effectiveChanges: [ModelChange!]!
}

type Client {
  clientId: String!
  name: String!
}

"""The type of change that was made."""
enum HistoryKind {
  CREATE
  UPDATE
  DELETE
}

"""A change made to a model."""
type ModelChange {
  """The field that was changed."""
  field: String!

  """The old value of the field."""
  oldValue: String

  """The new value of the field."""
  newValue: String
}

type AffineTransformationView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  stage: Stage!
  affineMatrix: FourByFourMatrix!
  pixelSize: ThreeDVector!
  pixelSizeX: Micrometers!
  isotropic: Boolean!
  pixelSizeZ: Micrometers!
  pixelSizeY: Micrometers!
  position: ThreeDVector!
}

type Stage {
  id: ID!
  affineViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!
  description: String
  name: String!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  pinned: Boolean!
}

"""
The `FourByFourMatrix` scalar type represents a matrix values as specified by
"""
scalar FourByFourMatrix

"""The `Vector` scalar type represents a matrix values as specified by"""
scalar ThreeDVector

"""
The `Micrometers` scalar type represents a matrix valuesas specified by
"""
scalar Micrometers

type LabelView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  label: String!
}

type ChannelView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!

  """The name of the channel """
  name: String

  """The emission wavelength of the channel in nanometers"""
  emissionWavelength: Float

  """The excitation wavelength of the channel in nanometers"""
  excitationWavelength: Float

  """The acquisition mode of the channel"""
  acquisitionMode: String
}

type TimepointView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  era: Era!
  msSinceStart: Milliseconds
  indexSinceStart: Int
}

type Era {
  id: ID!
  begin: DateTime
  views(filters: TimepointViewFilter, pagination: OffsetPaginationInput): [TimepointView!]!
  name: String!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
}

"""The `Matrix` scalar type represents a matrix values as specified by"""
scalar Milliseconds

type OpticsView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  instrument: Instrument
  camera: Camera
  objective: Objective
}

type Instrument {
  id: ID!
  name: String!
  model: String
  serialNumber: String!
  views(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!
  manufacturer: String
  organization: DjangoModelType!
}

input OpticsViewFilter {
  isGlobal: Boolean
  AND: OpticsViewFilter
  OR: OpticsViewFilter
  NOT: OpticsViewFilter
  DISTINCT: Boolean
  instrument: InstrumentFilter
  objective: ObjectiveFilter
  camera: CameraFilter
}

input InstrumentFilter {
  id: ID
  name: String
  AND: InstrumentFilter
  OR: InstrumentFilter
  NOT: InstrumentFilter
  DISTINCT: Boolean
}

input ObjectiveFilter {
  id: ID
  name: String
  AND: ObjectiveFilter
  OR: ObjectiveFilter
  NOT: ObjectiveFilter
  DISTINCT: Boolean
}

input CameraFilter {
  id: ID
  name: String
  AND: CameraFilter
  OR: CameraFilter
  NOT: CameraFilter
  DISTINCT: Boolean
}

type DjangoModelType {
  pk: ID!
}

type Camera {
  id: ID!
  name: String!
  serialNumber: String!
  views(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!
  model: String
  bitDepth: Int
  pixelSizeX: Micrometers
  pixelSizeY: Micrometers
  sensorSizeX: Int
  sensorSizeY: Int
  manufacturer: String

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  organization: DjangoModelType!
}

type Objective {
  id: ID!
  name: String!
  serialNumber: String!
  na: Float
  magnification: Float
  immersion: String
  views(filters: OpticsViewFilter, pagination: OffsetPaginationInput): [OpticsView!]!
  organization: DjangoModelType!
}

type MaskView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  referenceView: ReferenceView!
}

type ReferenceView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
}

input MaskViewFilter {
  ids: [ID!]
  search: String = null
  id: ID
  image: ID = null
  AND: MaskViewFilter
  OR: MaskViewFilter
  NOT: MaskViewFilter
  DISTINCT: Boolean
}

type InstanceMaskView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  referenceView: ReferenceView!
  operation: String
}

input InstanceMaskViewFilter {
  ids: [ID!]
  search: String = null
  id: ID
  image: ID = null
  AND: InstanceMaskViewFilter
  OR: InstanceMaskViewFilter
  NOT: InstanceMaskViewFilter
  DISTINCT: Boolean
}

type ScaleView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  parent: Image!
  scaleX: Float!
  scaleY: Float!
  scaleZ: Float!
  scaleT: Float!
  scaleC: Float!
}

type HistogramView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  bins: [Float!]!
  min: Float!
  max: Float!
  histogram: [Float!]!
}

input ReferenceViewFilter {
  ids: [ID!]
  search: String = null
  id: ID
  image: ID = null
  AND: ReferenceViewFilter
  OR: ReferenceViewFilter
  NOT: ReferenceViewFilter
  DISTINCT: Boolean
}

type RGBContext {
  id: ID!
  name: String!
  image: Image!
  snapshots(filters: SnapshotFilter, pagination: OffsetPaginationInput): [Snapshot!]!
  blending: Blending!
  z: Int!
  t: Int!
  c: Int!
  pinned: Boolean!
  views: [RGBView!]!
}

enum Blending {
  ADDITIVE
  MULTIPLICATIVE
}

type RGBView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  contexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!
  colorMap: ColorMap!
  gamma: Float
  contrastLimitMin: Float
  contrastLimitMax: Float
  active: Boolean!
  baseColor: [Int!]
  fullColour(format: ColorFormat = RGB): String!
  name(long: Boolean! = false): String!
}

input RGBContextFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: RGBContextFilter
  OR: RGBContextFilter
  NOT: RGBContextFilter
  DISTINCT: Boolean
}

enum ColorMap {
  VIRIDIS
  PLASMA
  INFERNO
  MAGMA
  RED
  GREEN
  BLUE
  INTENSITY
  CYAN
  MAGENTA
  YELLOW
  BLACK
  WHITE
  ORANGE
  PURPLE
  PINK
  BROWN
  GREY
  RAINBOW
  SPECTRAL
  COOL
  WARM
}

enum ColorFormat {
  RGB
  HSL
}

type DerivedView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  originImage: Image!
  operation: String
}

type ROIView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  roi: ROI!
}

type ROI {
  id: ID!
  image: Image!
  kind: RoiKind!
  vectors: [FiveDVector!]!
  createdAt: DateTime!
  creator: User

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  pinned: Boolean!
  name: String!
}

enum RoiKind {
  ELLIPSIS
  POLYGON
  LINE
  RECTANGLE
  SPECTRAL_RECTANGLE
  TEMPORAL_RECTANGLE
  CUBE
  SPECTRAL_CUBE
  TEMPORAL_CUBE
  HYPERCUBE
  SPECTRAL_HYPERCUBE
  PATH
  FRAME
  SLICE
  POINT
}

"""The `Vector` scalar type represents a matrix values as specified by"""
scalar FiveDVector

type FileView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  seriesIdentifier: String
  file: File!
}

type LightpathView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!

  """
  The lightpath graph describing the lightpath used to acquire this image
  """
  graph: LightpathGraph!
}

"""Graph of optical elements and edges"""
type LightpathGraph {
  elements: [OpticalElement!]!
  edges: [LightEdge!]!
}

"""Directed edge connecting two ports"""
type LightEdge {
  id: ID!
  sourceElementId: ID!
  sourcePortId: ID!
  targetElementId: ID!
  targetPortId: ID!
  pathLengthMm: Float
  medium: String
  lossDb: Float
  beam: BeamState
}

"""Beam properties carried on a light edge"""
type BeamState {
  wavelengthNm: Float
  powerMw: Float
  polarization: String
  modeHint: String
}

"""A channel descriptor"""
type ChannelInfo {
  label(withColorName: Boolean! = false): String!
  index: Int!
}

"""A channel descriptor"""
type FrameInfo {
  label: String!
}

"""A channel descriptor"""
type PlaneInfo {
  label: String!
}

enum RenderKind {
  VIDEO
  SNAPSHOT
}

input ROIFilter {
  ids: [ID!]
  id: ID
  kind: RoiKindChoices
  image: ID = null
  search: String
  AND: ROIFilter
  OR: ROIFilter
  NOT: ROIFilter
  DISTINCT: Boolean
}

enum RoiKindChoices {
  ELLIPSIS
  POLYGON
  LINE
  RECTANGLE
  SPECTRAL_RECTANGLE
  TEMPORAL_RECTANGLE
  CUBE
  SPECTRAL_CUBE
  TEMPORAL_CUBE
  HYPERCUBE
  SPECTRAL_HYPERCUBE
  PATH
  UNKNOWN
  FRAME
  SLICE
  POINT
}

type BigFileStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
  filename: String!
  presignedUrl: String!
}

type Table {
  id: ID!
  name: String!
  origins(filters: ImageFilter, order: ImageOrder, pagination: OffsetPaginationInput): [Image!]!
  store: ParquetStore!
  columns: [TableColumn!]!
  rows: [MetricMap!]!
  accessors(filters: AccessorFilter, types: [AccessorKind!]): [Accessor!]!
}

type ParquetStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
}

"""A column descriptor"""
type TableColumn {
  name: String!
  type: DuckDBDataType!
  nullable: Boolean!
  key: String
  default: String
  accessors(filters: AccessorFilter, types: [AccessorKind!]): [Accessor!]!
}

enum DuckDBDataType {
  """Represents a True/False value"""
  BOOLEAN

  """Very small integer (-128 to 127)"""
  TINYINT

  """Small integer (-32,768 to 32,767)"""
  SMALLINT

  """Standard integer (-2,147,483,648 to 2,147,483,647)"""
  INTEGER

  """Large integer for large numeric values"""
  BIGINT

  """Extremely large integer for very large numeric ranges"""
  HUGEINT

  """Single-precision floating point number"""
  FLOAT

  """Double-precision floating point number"""
  DOUBLE

  """Variable-length string (text)"""
  VARCHAR

  """Binary large object for storing binary data"""
  BLOB

  """Date and time with precision"""
  TIMESTAMP

  """Specific date (year, month, day)"""
  DATE

  """Specific time of the day (hours, minutes, seconds)"""
  TIME

  """Span of time between two dates or times"""
  INTERVAL

  """Exact decimal number with defined precision and scale"""
  DECIMAL

  """Universally Unique Identifier used to uniquely identify objects"""
  UUID

  """A list of values of the same data type"""
  LIST

  """A collection of key-value pairs where each key is unique"""
  MAP

  """Enumeration of predefined values"""
  ENUM

  """Composite type grouping several fields with different data types"""
  STRUCT

  """JSON object, a structured text format used for representing data"""
  JSON
}

interface Accessor {
  id: ID!
  table: Table!
  keys: [String!]!
  minIndex: Int
  maxIndex: Int
}

input AccessorFilter {
  keys: JSON
  AND: AccessorFilter
  OR: AccessorFilter
  NOT: AccessorFilter
  DISTINCT: Boolean
}

"""
The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf).
"""
scalar JSON

enum AccessorKind {
  LABEL
  IMAGE
}

"""The `MetricMap` scalar type represents a matrix values as specified by"""
scalar MetricMap

type _Service {
  sdl: String!
}

input ROIOrder {
  createdAt: Ordering
}

type ContinousScanView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  direction: ScanDirection!
}

enum ScanDirection {
  ROW_COLUMN_SLICE
  COLUMN_ROW_SLICE
  SLICE_ROW_COLUMN
  ROW_COLUMN_SLICE_SNAKE
  COLUMN_ROW_SLICE_SNAKE
  SLICE_ROW_COLUMN_SNAKE
}

input ContinousScanViewFilter {
  isGlobal: Boolean
  AND: ContinousScanViewFilter
  OR: ContinousScanViewFilter
  NOT: ContinousScanViewFilter
  DISTINCT: Boolean
  direction: ContinousScanDirection
}

enum ContinousScanDirection {
  ROW_COLUMN_SLICE
  COLUMN_ROW_SLICE
  SLICE_ROW_COLUMN
  ROW_COLUMN_SLICE_SNAKE
  COLUMN_ROW_SLICE_SNAKE
  SLICE_ROW_COLUMN_SNAKE
}

type WellPositionView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  well: MultiWellPlate
  row: Int
  column: Int
}

type MultiWellPlate {
  id: ID!
  views(filters: WellPositionViewFilter, pagination: OffsetPaginationInput): [WellPositionView!]!
  name: String
  description: String
  rows: Int
  columns: Int
}

input WellPositionViewFilter {
  isGlobal: Boolean
  AND: WellPositionViewFilter
  OR: WellPositionViewFilter
  NOT: WellPositionViewFilter
  DISTINCT: Boolean
  well: MultiWellPlateFilter
  row: Int
  column: Int
}

input MultiWellPlateFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: MultiWellPlateFilter
  OR: MultiWellPlateFilter
  NOT: MultiWellPlateFilter
  DISTINCT: Boolean
}

type AcquisitionView implements View {
  image: Image!
  zMin: Int
  zMax: Int
  xMin: Int
  xMax: Int
  yMin: Int
  yMax: Int
  tMin: Int
  tMax: Int
  cMin: Int
  cMax: Int
  isGlobal: Boolean!

  """The accessor"""
  accessor: [String!]!

  """All views of this image"""
  congruentViews(
    """A filter to selected the subset of views"""
    filters: ViewFilter
    types: [ViewKind!]
  ): [View!]!
  id: ID!
  description: String
  acquiredAt: DateTime
  operator: User
}

input RGBViewFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: RGBViewFilter
  OR: RGBViewFilter
  NOT: RGBViewFilter
  DISTINCT: Boolean
}

type RenderTree {
  id: ID!
  name: String!
  linkedContexts(filters: RGBContextFilter, pagination: OffsetPaginationInput): [RGBContext!]!
}

input RenderTreeFilter {
  id: ID
  AND: RenderTreeFilter
  OR: RenderTreeFilter
  NOT: RenderTreeFilter
  DISTINCT: Boolean
}

input RenderTreeOrder {
  createdAt: Ordering
}

type Experiment {
  id: ID!
  name: String!
  description: String

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  createdAt: DateTime!
  creator: User
}

input ExperimentFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: ExperimentFilter
  OR: ExperimentFilter
  NOT: ExperimentFilter
  DISTINCT: Boolean
}

input TableFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: TableFilter
  OR: TableFilter
  NOT: TableFilter
  DISTINCT: Boolean
}

type LabelAccessor implements Accessor {
  id: ID!
  table: Table!
  keys: [String!]!
  minIndex: Int
  maxIndex: Int
  maskView: MaskView!
}

type ImageAccessor implements Accessor {
  id: ID!
  table: Table!
  keys: [String!]!
  minIndex: Int
  maxIndex: Int
}

type Mesh {
  id: ID!
  name: String!
  store: MeshStore!
}

type MeshStore {
  id: ID!
  path: String!
  bucket: String!
  key: String!
  presignedUrl(host: String = null): String!
}

input MeshFilter {
  ids: [ID!]
  search: String
  id: ID
  AND: MeshFilter
  OR: MeshFilter
  NOT: MeshFilter
  DISTINCT: Boolean
}

union DatasetImageFile = Dataset | Image | File

input DatasetChildrenFilter {
  showChildren: Boolean = null
}

input ChildrenPaginationInput {
  limit: Int = 200
  offset: Int = 0
}

input RowFilter {
  clause: String = null
}

input TablePaginationInput {
  limit: Int = 200
  offset: Int = 0
}

type UserObjectPermission {
  user: User!
  permission: String!
}

type PermissionOption {
  value: ID!
  label: String!
}

"""A cell of a table"""
type TableRow {
  id: ID!
  table: Table!
  rowId: Int!
  columns: [TableColumn!]!
  values: [Any!]!
  name: String!
}

"""The `Any` scalar any type"""
scalar Any

input TableRowFilter {
  search: String = null
  ids: [ID!] = null
}

"""A cell of a table"""
type TableCell {
  id: ID!
  table: Table!
  rowId: Int!
  columnId: Int!
  value: Any!
  column: TableColumn!
  name: String!
}

input TableCellFilter {
  search: String = null
  ids: [ID!] = null
}

type MaskedPixelInfo {
  label: String!
  color: String!
}

input ChannelInfoFilter {
  search: String = null
  ids: [ID!] = null
}

type Mutation {
  """Relate an image to a dataset"""
  relateToDataset(id: ID!, other: ID!): Image!

  """Request credentials to upload a new image"""
  requestUpload(input: RequestUploadInput!): Credentials!

  """Request credentials to access an image"""
  requestAccess(input: RequestAccessInput!): AccessCredentials!

  """Request credentials for media file upload"""
  requestMediaUpload(input: RequestMediaUploadInput!): PresignedPostCredentials!

  """Request credentials to upload a new table"""
  requestTableUpload(input: RequestTableUploadInput!): Credentials!

  """Request credentials to access a table"""
  requestTableAccess(input: RequestTableAccessInput!): AccessCredentials!

  """Request presigned credentials for mesh upload"""
  requestMeshUpload(input: RequestMeshUploadInput!): PresignedPostCredentials!

  """Request credentials to upload a new file"""
  requestFileUpload(input: RequestFileUploadInput!): Credentials!

  """Request presigned credentials for file upload"""
  requestFileUploadPresigned(input: RequestFileUploadInput!): PresignedPostCredentials!

  """Request credentials to access a file"""
  requestFileAccess(input: RequestFileAccessInput!): AccessCredentials!

  """Create a new view for affine transformation data"""
  createAffineTransformationView(input: AffineTransformationViewInput!): AffineTransformationView!

  """Create a new view for histogram data"""
  createHistogramView(input: HistogramViewInput!): HistogramView!

  """Create an image from array-like data"""
  fromArrayLike(input: FromArrayLikeInput!): Image!

  """Pin an image for quick access"""
  pinImage(input: PinImageInput!): Image!

  """Update an existing image's metadata"""
  updateImage(input: UpdateImageInput!): Image!

  """Delete an existing image"""
  deleteImage(input: DeleteImageInput!): ID!

  """Create a new render tree for image visualization"""
  createRenderTree(input: RenderTreeInput!): RenderTree!

  """Create a table from parquet-like data"""
  fromParquetLike(input: FromParquetLike!): Table!

  """Create a new mesh"""
  createMesh(input: MeshInput!): Mesh!

  """Delete an existing mesh"""
  deleteMesh(input: DeleteMeshInput!): ID!

  """Pin a mesh for quick access"""
  pinMesh(input: DeleteMeshInput!): Snapshot!

  """Create a file from file-like data"""
  fromFileLike(input: FromFileLike!): File!

  """Delete an existing file"""
  deleteFile(input: DeleteFileInput!): ID!

  """Create a new stage for organizing data"""
  createStage(input: StageInput!): Stage!

  """Pin a stage for quick access"""
  pinStage(input: PinStageInput!): Stage!

  """Delete an existing stage"""
  deleteStage(input: DeleteStageInput!): ID!

  """Create a new RGB context for image visualization"""
  createRgbContext(input: CreateRGBContextInput!): RGBContext!

  """Delete an existing RGB context"""
  deleteRgbContext(input: DeleteRGBContextInput!): ID!

  """Update settings of an existing RGB context"""
  updateRgbContext(input: UpdateRGBContextInput!): RGBContext!

  """Create a new dataset to organize data"""
  createDataset(input: CreateDatasetInput!): Dataset!

  """Create a new dataset to organize data"""
  ensureDataset(input: CreateDatasetInput!): Dataset!

  """Update dataset metadata"""
  updateDataset(input: ChangeDatasetInput!): Dataset!

  """Revert dataset to a previous version"""
  revertDataset(input: RevertInput!): Dataset!

  """Pin a dataset for quick access"""
  pinDataset(input: PinDatasetInput!): Dataset!

  """Delete an existing dataset"""
  deleteDataset(input: DeleteDatasetInput!): ID!

  """Add datasets as children of another dataset"""
  putDatasetsInDataset(input: AssociateInput!): Dataset!

  """Remove datasets from being children of another dataset"""
  releaseDatasetsFromDataset(input: DesociateInput!): Dataset!

  """Add images to a dataset"""
  putImagesInDataset(input: AssociateInput!): Dataset!

  """Remove images from a dataset"""
  releaseImagesFromDataset(input: DesociateInput!): Dataset!

  """Add files to a dataset"""
  putFilesInDataset(input: AssociateInput!): Dataset!

  """Remove files from a dataset"""
  releaseFilesFromDataset(input: DesociateInput!): Dataset!

  """Create a new multi-well plate configuration"""
  createMultiWellPlate(input: MultiWellPlateInput!): MultiWellPlate!

  """Ensure a multi-well plate exists, creating if needed"""
  ensureMultiWellPlate(input: MultiWellPlateInput!): MultiWellPlate!

  """Pin a multi-well plate for quick access"""
  pinMultiWellPlate(input: PintMultiWellPlateInput!): MultiWellPlate!

  """Delete an existing multi-well plate configuration"""
  deleteMultiWellPlate(input: DeleteMultiWellInput!): ID!

  """Create a new collection of views to organize related views"""
  createViewCollection(input: ViewCollectionInput!): ViewCollection!

  """Pin a view collection for quick access"""
  pinViewCollection(input: PinViewCollectionInput!): ViewCollection!

  """Delete an existing view collection"""
  deleteViewCollection(input: DeleteViewCollectionInput!): ID!

  """Create a new era for temporal organization"""
  createEra(input: EraInput!): Era!

  """Pin an era for quick access"""
  pinEra(input: PinEraInput!): Era!

  """Delete an existing era"""
  deleteEra(input: DeleteEraInput!): ID!

  """Create a new view for label data"""
  createLabelView(input: LabelViewInput!): LabelView!

  """Create a new view for temporal data"""
  createTimepointView(input: TimepointViewInput!): TimepointView!

  """Create a new view for file data"""
  createFileView(input: FileViewInput!): FileView!

  """Create a new view for region of interest data"""
  createRoiView(input: ROIViewInput!): ROIView!

  """Create a new view for optical settings"""
  createOpticsView(input: OpticsViewInput!): OpticsView!

  """Create a new view for RGB image data"""
  createRgbView(input: RGBViewInput!): RGBView!

  """Update an existing RGB view"""
  updateRgbView(input: UpdateRGBViewInput!): RGBView!

  """Delete an existing RGB view"""
  deleteRgbView(input: DeleteViewInput!): ID!

  """Create a new view for channel data"""
  createChannelView(input: ChannelViewInput!): ChannelView!

  """Create a new view for masked data"""
  createMaskView(input: MaskViewInput!): MaskView!

  """Create a new view for instance mask data"""
  createInstanceMaskView(input: InstanceMaskViewInput!): InstanceMaskView!

  """Create a new reference view for image data"""
  createReferenceView(input: ReferenceViewInput!): ReferenceView!

  """Create a new view for well position data"""
  createWellPositionView(input: WellPositionViewInput!): WellPositionView!

  """Create a new view for continuous scan data"""
  createContinousScanView(input: ContinousScanViewInput!): ContinousScanView!

  """Delete an existing histogram view"""
  deleteHistogramView(input: DeleteViewInput!): ID!

  """Delete an existing affine transformation view"""
  deleteAffineTransformationView(input: DeleteViewInput!): ID!

  """Delete an existing channel view"""
  deleteChannelView(input: DeleteViewInput!): ID!

  """Delete an existing timepoint view"""
  deleteTimepointView(input: DeleteViewInput!): ID!

  """Delete an existing optics view"""
  deleteOpticsView(input: DeleteViewInput!): ID!

  """Delete any type of view"""
  deleteView(input: DeleteViewInput!): ID!

  """Pin a view for quick access"""
  pinView(input: PinViewInput!): View!

  """Create a new instrument configuration"""
  createInstrument(input: InstrumentInput!): Instrument!

  """Delete an existing instrument"""
  deleteInstrument(input: DeleteInstrumentInput!): ID!

  """Pin an instrument for quick access"""
  pinInstrument(input: PinInstrumentInput!): Instrument!

  """Ensure an instrument exists, creating if needed"""
  ensureInstrument(input: InstrumentInput!): Instrument!

  """Create a new microscope objective configuration"""
  createObjective(input: ObjectiveInput!): Objective!

  """Delete an existing objective"""
  deleteObjective(input: DeleteObjectiveInput!): ID!

  """Pin an objective for quick access"""
  pinObjective(input: PinObjectiveInput!): Objective!

  """Ensure an objective exists, creating if needed"""
  ensureObjective(input: ObjectiveInput!): Objective!

  """Create a new camera configuration"""
  createCamera(input: CameraInput!): Camera!

  """Delete an existing camera"""
  deleteCamera(input: DeleteCameraInput!): ID!

  """Pin a camera for quick access"""
  pinCamera(input: PinCameraInput!): Camera!

  """Ensure a camera exists, creating if needed"""
  ensureCamera(input: CameraInput!): Camera!

  """Create a new state snapshot"""
  createSnapshot(input: SnapshotInput!): Snapshot!

  """Delete an existing snapshot"""
  deleteSnapshot(input: DeleteSnaphotInput!): ID!

  """Pin a snapshot for quick access"""
  pinSnapshot(input: PinSnapshotInput!): Snapshot!

  """Create a new region of interest"""
  createRoi(input: RoiInput!): ROI!

  """Update an existing region of interest"""
  updateRoi(input: UpdateRoiInput!): ROI!

  """Pin a region of interest for quick access"""
  pinRoi(input: PinROIInput!): ROI!

  """Delete an existing region of interest"""
  deleteRoi(input: DeleteRoiInput!): ID!

  """Assign a user permission to an object"""
  assignUserPermission(input: AssignUserPermissionInput!): [UserObjectPermission!]!
}

"""
Temporary Credentials for a file upload that can be used by a Client (e.g. in a python datalayer)
"""
type Credentials {
  status: String!
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  datalayer: String!
  bucket: String!
  key: String!
  store: String!
}

input RequestUploadInput {
  key: String!
  datalayer: String!
}

"""
Temporary Credentials for a file download that can be used by a Client (e.g. in a python datalayer)
"""
type AccessCredentials {
  accessKey: String!
  secretKey: String!
  sessionToken: String!
  bucket: String!
  key: String!
  path: String!
}

input RequestAccessInput {
  store: ID!
  duration: Int = null
}

"""
Temporary Credentials for a file upload that can be used by a Client (e.g. in a python datalayer)
"""
type PresignedPostCredentials {
  key: String!
  xAmzAlgorithm: String!
  xAmzCredential: String!
  xAmzDate: String!
  xAmzSignature: String!
  policy: String!
  datalayer: String!
  bucket: String!
  store: String!
}

input RequestMediaUploadInput {
  fileName: String!
  datalayer: String!
}

input RequestTableUploadInput {
  key: String!
  datalayer: String!
}

input RequestTableAccessInput {
  store: ID!
  duration: Int
}

input RequestMeshUploadInput {
  key: String!
  datalayer: String!
}

input RequestFileUploadInput {
  fileName: String!
  datalayer: String!
}

input RequestFileAccessInput {
  store: ID!
  duration: Int
}

input AffineTransformationViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  stage: ID = null
  affineMatrix: FourByFourMatrix!
  image: ID!
}

input HistogramViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  histogram: [Float!]!
  bins: [Float!]!
  min: Float!
  max: Float!
  image: ID!
}

"""Input type for creating an image from an array-like object"""
input FromArrayLikeInput {
  """The array-like object to create the image from"""
  array: ArrayLike!

  """The name of the image"""
  name: String!

  """Optional dataset ID to associate the image with"""
  dataset: ID = null

  """Optional list of channel views"""
  channelViews: [PartialChannelViewInput!] = null

  """Optional list of affine transformation views"""
  transformationViews: [PartialAffineTransformationViewInput!] = null

  """Optional list of acquisition views"""
  acquisitionViews: [PartialAcquisitionViewInput!] = null

  """Optional list of mask views"""
  maskViews: [PartialMaskViewInput!] = null

  """Optional list of reference views"""
  referenceViews: [PartialReferenceViewInput!] = null

  """Optional list of instance mask views"""
  instanceMaskViews: [PartialInstanceMaskViewInput!] = null

  """Optional list of RGB views"""
  rgbViews: [PartialRGBViewInput!] = null

  """Optional list of timepoint views"""
  timepointViews: [PartialTimepointViewInput!] = null

  """Optional list of optics views"""
  opticsViews: [PartialOpticsViewInput!] = null

  """Optional list of scale views"""
  scaleViews: [PartialScaleViewInput!] = null

  """Optional list of tags to associate with the image"""
  tags: [String!] = null

  """Optional list of ROI views"""
  roiViews: [PartialROIViewInput!] = null

  """Optional list of file views"""
  fileViews: [PartialFileViewInput!] = null

  """Optional list of derived views"""
  derivedViews: [PartialDerivedViewInput!] = null

  """Optional list of lightpath views"""
  lightpathViews: [PartialLightpathViewInput!] = null
}

"""
The `ArrayLike` scalar type represents a reference to a store previously created by the user n a datalayer
"""
scalar ArrayLike

input PartialChannelViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null

  """The emission wavelength of the channel in nanometers"""
  emissionWavelength: Float = null

  """The excitation wavelength of the channel in nanometers"""
  excitationWavelength: Float = null

  """The acquisition mode of the channel"""
  acquisitionMode: String = null

  """The name of the channel"""
  name: String = null
}

input PartialAffineTransformationViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  stage: ID = null
  affineMatrix: FourByFourMatrix!
}

input PartialAcquisitionViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  description: String = null
  acquiredAt: DateTime = null
  operator: ID = null
}

input PartialMaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
}

input PartialReferenceViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
}

input PartialInstanceMaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
}

input PartialRGBViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  context: ID = null
  gamma: Float = null
  contrastLimitMin: Float = null
  contrastLimitMax: Float = null
  rescale: Boolean = null
  scale: Float = null
  active: Boolean = null
  colorMap: ColorMap = null
  baseColor: [Float!] = null
}

input PartialTimepointViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  era: ID = null
  msSinceStart: Milliseconds = null
  indexSinceStart: Int = null
}

input PartialOpticsViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  instrument: ID = null
  objective: ID = null
  camera: ID = null
}

input PartialScaleViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  parent: ID = null
  scaleX: Float = null
  scaleY: Float = null
  scaleZ: Float = null
  scaleT: Float = null
  scaleC: Float = null
}

input PartialROIViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  roi: ID!
}

input PartialFileViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  file: ID!
  seriesIdentifier: String = null
}

input PartialDerivedViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  originImage: ID!
}

input PartialLightpathViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  graph: LightpathGraphInput!
}

"""Bulk input for a full lightpath graph, including elements and edges."""
input LightpathGraphInput {
  elements: [OpticalElementInput!]!
  edges: [LightEdgeInput!]!
}

"""
Input for creating or updating any optical element. Fill only fields relevant to the chosen `kind`.
"""
input OpticalElementInput {
  id: ID!
  label: String!
  kind: ElementKind!
  pose: Pose3DInput = null
  ports: [LightPortInput!]!
  nominalWavelengthNm: Float = null
  powerMw: Float = null
  channel: ChannelKind = null
  nepdWPerSqrtHz: Float = null
  angleDeg: Float = null
  bandMinNm: Float = null
  bandMaxNm: Float = null
  rFraction: Float = null
  tFraction: Float = null
  focalLengthMm: Float = null
  magnification: Float = null
  numericalAperture: Float = null
  brand: String = null
  model: String = null
  workingDistanceMm: Float = null
}

"""A 3D pose consisting of position and orientation."""
input Pose3DInput {
  position: Vec3Input = null
  orientation: EulerInput = null
}

"""A 3D vector representing a point or offset in space."""
input Vec3Input {
  x: Float = null
  y: Float = null
  z: Float = null
}

"""Euler angles representing rotation in 3D space."""
input EulerInput {
  rx: Float = null
  ry: Float = null
  rz: Float = null
}

"""Input definition for an optical port on an element."""
input LightPortInput {
  id: ID!
  name: String!
  role: PortRole!
  channel: ChannelKind! = FREE_SPACE
  spectrum: SpectrumInput = null
}

"""Spectral window in nanometers for wavelength-dependent components."""
input SpectrumInput {
  minNm: Float!
  maxNm: Float!
}

"""Input for connecting two optical ports."""
input LightEdgeInput {
  id: String!
  sourceElementId: ID!
  sourcePortId: ID!
  targetElementId: ID!
  targetPortId: ID!
  pathLengthMm: Float = null
  medium: String = "AIR"
  lossDb: Float = 0
  beam: BeamStateInput = null
}

"""State of the optical beam on a particular path segment."""
input BeamStateInput {
  wavelengthNm: Float = null
  powerMw: Float = null
  polarization: String = null
  modeHint: String = null
}

input PinImageInput {
  id: ID!
  pin: Boolean!
}

input UpdateImageInput {
  id: ID!
  tags: [String!] = null
  name: String = null
}

input DeleteImageInput {
  id: ID!
}

input RenderTreeInput {
  tree: TreeInput!
  name: String!
}

input TreeInput {
  id: String = "root"
  children: [TreeNodeInput!]!
}

input TreeNodeInput {
  kind: RenderNodeKind!
  label: String = null
  context: String = null
  gap: Int = null
  children: [TreeNodeInput!]
}

enum RenderNodeKind {
  CONTEXT
  OVERLAY
  GRID
  SPIT
}

input FromParquetLike {
  """The parquet dataframe to create the table from"""
  dataframe: ParquetLike!

  """The name of the table"""
  name: String!

  """The IDs of tables this table was derived from"""
  origins: [ID!] = null

  """The dataset ID this table belongs to"""
  dataset: ID = null

  """Label accessors to create for this table"""
  labelAccessors: [PartialLabelAccessorInput!] = null

  """Image accessors to create for this table"""
  imageAccessors: [PartialImageAccessorInput!] = null
}

"""
The `ParquetLike` scalar type represents a reference to a parquet objected stored previously created by the user on a datalayer
"""
scalar ParquetLike

input PartialLabelAccessorInput {
  keys: [String!]!
  minIndex: Int = null
  maxIndex: Int = null
  pixelView: ID!
}

input PartialImageAccessorInput {
  keys: [String!]!
  minIndex: Int = null
  maxIndex: Int = null
  image: ID!
}

input MeshInput {
  mesh: MeshLike!
  name: String!
}

"""
The `MeshLike` scalar type represents a reference to a mesh previously created by the user n a datalayer
"""
scalar MeshLike

input DeleteMeshInput {
  id: ID!
}

input FromFileLike {
  file: FileLike!
  fileName: String!
  dataset: ID = null
  origins: [ID!] = null
}

"""
The `FileLike` scalar type represents a reference to a big file storage previously created by the user n a datalayer
"""
scalar FileLike

input DeleteFileInput {
  id: ID!
}

input StageInput {
  name: String!
  instrument: ID = null
}

input PinStageInput {
  id: ID!
  pin: Boolean!
}

input DeleteStageInput {
  id: ID!
}

input CreateRGBContextInput {
  name: String = null
  thumbnail: ID = null
  image: ID!
  views: [PartialRGBViewInput!] = null
  z: Int = null
  t: Int = null
  c: Int = null
}

input DeleteRGBContextInput {
  id: ID!
}

input UpdateRGBContextInput {
  id: ID!
  name: String = null
  thumbnail: ID = null
  views: [PartialRGBViewInput!] = null
  z: Int = null
  t: Int = null
  c: Int = null
}

input CreateDatasetInput {
  name: String!
  parent: ID = null
}

input ChangeDatasetInput {
  name: String!
  parent: ID = null
  id: ID!
}

input RevertInput {
  id: ID!
  historyId: ID!
}

input PinDatasetInput {
  id: ID!
  pin: Boolean!
}

input DeleteDatasetInput {
  id: ID!
}

input AssociateInput {
  selfs: [ID!]!
  other: ID!
}

input DesociateInput {
  selfs: [ID!]!
  other: ID!
}

input MultiWellPlateInput {
  name: String!
  columns: Int = null
  rows: Int = null
}

input PintMultiWellPlateInput {
  id: ID!
  pin: Boolean!
}

input DeleteMultiWellInput {
  id: ID!
}

type ViewCollection {
  id: ID!
  name: String!
  views: [View!]!

  """Provenance entries for this camera"""
  provenanceEntries(pagination: OffsetPaginationInput): [ProvenanceEntry!]!
  affineTransformationViews(filters: AffineTransformationViewFilter, pagination: OffsetPaginationInput): [AffineTransformationView!]!
  labelViews: [LabelView!]!
  channelViews: [ChannelView!]!
}

input ViewCollectionInput {
  name: String!
}

input PinViewCollectionInput {
  id: ID!
  pin: Boolean!
}

input DeleteViewCollectionInput {
  id: ID!
}

input EraInput {
  name: String!
  begin: DateTime = null
}

input PinEraInput {
  id: ID!
  pin: Boolean!
}

input DeleteEraInput {
  id: ID!
}

input LabelViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  label: String!
  image: ID!
}

input TimepointViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  era: ID = null
  msSinceStart: Milliseconds = null
  indexSinceStart: Int = null
  image: ID!
}

input FileViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  file: ID!
  seriesIdentifier: String = null
  image: ID!
}

input ROIViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  roi: ID!
  image: ID!
}

input OpticsViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  instrument: ID = null
  objective: ID = null
  camera: ID = null
  image: ID!
}

input RGBViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  context: ID!
  gamma: Float = null
  contrastLimitMin: Float = null
  contrastLimitMax: Float = null
  rescale: Boolean = null
  scale: Float = null
  active: Boolean = null
  colorMap: ColorMap = null
  baseColor: [Float!] = null
  image: ID!
}

input UpdateRGBViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  context: ID = null
  gamma: Float = null
  contrastLimitMin: Float = null
  contrastLimitMax: Float = null
  rescale: Boolean = null
  scale: Float = null
  active: Boolean = null
  colorMap: ColorMap = null
  baseColor: [Float!] = null

  """The ID of the RGB view to update"""
  id: ID!
}

input DeleteViewInput {
  id: ID!
}

input ChannelViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null

  """The emission wavelength of the channel in nanometers"""
  emissionWavelength: Float = null

  """The excitation wavelength of the channel in nanometers"""
  excitationWavelength: Float = null

  """The acquisition mode of the channel"""
  acquisitionMode: String = null

  """The name of the channel"""
  name: String = null

  """The ID of the image this view is for"""
  image: ID!
}

input MaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
  image: ID!
  labels: [ID!] = null
}

input InstanceMaskViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  referenceView: ID = null
  image: ID!
  instanceLabels: [ID!] = null
}

input ReferenceViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  image: ID!
}

input WellPositionViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  well: ID = null
  row: Int = null
  column: Int = null
  image: ID!
}

input ContinousScanViewInput {
  """The collection this view belongs to"""
  collection: ID = null

  """The minimum z coordinate of the view"""
  zMin: Int = null

  """The maximum z coordinate of the view"""
  zMax: Int = null

  """The minimum x coordinate of the view"""
  xMin: Int = null

  """The maximum x coordinate of the view"""
  xMax: Int = null

  """The minimum y coordinate of the view"""
  yMin: Int = null

  """The maximum y coordinate of the view"""
  yMax: Int = null

  """The minimum t coordinate of the view"""
  tMin: Int = null

  """The maximum t coordinate of the view"""
  tMax: Int = null

  """The minimum c (channel) coordinate of the view"""
  cMin: Int = null

  """The maximum c (channel) coordinate of the view"""
  cMax: Int = null
  direction: ScanDirection!
  image: ID!
}

input PinViewInput {
  id: ID!
  pin: Boolean!
}

input InstrumentInput {
  serialNumber: String!
  manufacturer: String = null
  name: String = null
  model: String = null
}

input DeleteInstrumentInput {
  id: ID!
}

input PinInstrumentInput {
  id: ID!
  pin: Boolean!
}

input ObjectiveInput {
  serialNumber: String!
  name: String = null
  na: Float = null
  magnification: Float = null
  immersion: String = null
}

input DeleteObjectiveInput {
  id: ID!
}

input PinObjectiveInput {
  id: ID!
  pin: Boolean!
}

input CameraInput {
  serialNumber: String!
  name: String = null
  model: String = null
  bitDepth: Int = null
  sensorSizeX: Int = null
  sensorSizeY: Int = null
  pixelSizeX: Micrometers = null
  pixelSizeY: Micrometers = null
  manufacturer: String = null
}

input DeleteCameraInput {
  id: ID!
}

input PinCameraInput {
  id: ID!
  pin: Boolean!
}

input SnapshotInput {
  file: ImageFileLike!
  image: ID!
  name: String = null
}

"""
The `ImageFileLike` scalar type represents a reference to a snapshot image previously created by the user n a datalayer
"""
scalar ImageFileLike

input DeleteSnaphotInput {
  id: ID!
}

input PinSnapshotInput {
  id: ID!
  pin: Boolean!
}

input RoiInput {
  """The image this ROI belongs to"""
  image: ID!

  """The vector coordinates defining the ROI"""
  vectors: [FiveDVector!]!

  """The type/kind of ROI"""
  kind: RoiKind!
}

input UpdateRoiInput {
  roi: ID!
  vectors: [FiveDVector!] = null
  kind: RoiKind = null
  entity: ID = null
  entityKind: ID = null
  entityGroup: ID = null
  entityParent: ID = null
}

input PinROIInput {
  id: ID!
  pin: Boolean!
}

input DeleteRoiInput {
  id: ID!
}

input AssignUserPermissionInput {
  identifier: String!
  object: ID!
  user: ID!
  permissions: [String!]!
}

type Subscription {
  """Subscribe to real-time ROI updates"""
  rois(image: ID!): RoiEvent!

  """Subscribe to real-time image updates"""
  images(dataset: ID = null): ImageEvent!

  """Subscribe to real-time file updates"""
  files(dataset: ID = null): FileEvent!

  """Subscribe to real-time affine transformation view updatess"""
  affineTransformationViews(stage: ID!): AffineTransformationViewEvent!
}

type RoiEvent {
  create: ROI
  delete: ID
  update: ROI
}

type ImageEvent {
  create: Image
  delete: ID
  update: Image
}

type FileEvent {
  create: File
  delete: ID
  update: File
  moved: File
}

type AffineTransformationViewEvent {
  create: AffineTransformationView
  delete: ID
  update: AffineTransformationView
}