liquid_handler:
  description: Liquid handler device controlled by pylabrobot
  icon: icon_yiyezhan.webp
  class:
    module: unilabos.devices.liquid_handling.liquid_handler_abstract:LiquidHandlerAbstract
    type: python
    status_types:
      name: String
    action_value_mappings:
      remove:
        type: LiquidHandlerRemove
        goal:
          vols: vols
          sources: sources
          waste_liquid: waste_liquid
          use_channels: use_channels
          flow_rates: flow_rates
          offsets: offsets
          liquid_height: liquid_height
          blow_out_air_volume: blow_out_air_volume
          spread: spread
          delays: delays
          is_96_well: is_96_well
          top: top
          none_keys: none_keys
        feedback: {}
        result: {}
      add_liquid:
        type: LiquidHandlerAdd
        goal:
          asp_vols: asp_vols
          dis_vols: dis_vols
          reagent_sources: reagent_sources
          targets: targets
          use_channels: use_channels
          flow_rates: flow_rates
          offsets: offsets
          liquid_height: liquid_height
          blow_out_air_volume: blow_out_air_volume
          spread: spread
          is_96_well: is_96_well
          mix_time: mix_time
          mix_vol: mix_vol
          mix_rate: mix_rate
          mix_liquid_height: mix_liquid_height
          none_keys: none_keys
        feedback: {}
        result: {}
      transfer_liquid:
        type: LiquidHandlerTransfer
        goal:
          asp_vols: asp_vols
          dis_vols: dis_vols
          sources: sources
          targets: targets
          tip_racks: tip_racks
          use_channels: use_channels
          asp_flow_rates: asp_flow_rates
          dis_flow_rates: dis_flow_rates
          offsets: offsets
          touch_tip: touch_tip
          liquid_height: liquid_height
          blow_out_air_volume: blow_out_air_volume
          spread: spread
          is_96_well: is_96_well
          mix_stage: mix_stage
          mix_times: mix_times
          mix_vol: mix_vol
          mix_rate: mix_rate
          mix_liquid_height: mix_liquid_height
          delays: delays
          none_keys: none_keys
        feedback: {}
        result: {}
      mix:
        type: LiquidHandlerMix
        goal:
          targets: targets
          mix_time: mix_time
          mix_vol: mix_vol
          height_to_bottom: height_to_bottom
          offsets: offsets
          mix_rate: mix_rate
          none_keys: none_keys
        feedback: {}
        result: {}
      move_to:
        type: LiquidHandlerMoveTo
        goal:
          well: well
          dis_to_top: dis_to_top
          channel: channel
        feedback: {}
        result: {}
      aspirate:
        type: LiquidHandlerAspirate
        goal:
          resources: resources
          vols: vols
          use_channels: use_channels
          flow_rates: flow_rates
          end_delay: end_delay
          offsets: offsets
          liquid_height: liquid_height
          blow_out_air_volume: blow_out_air_volume
        feedback: {}
        result:
          name: name
      discard_tips:
        type: LiquidHandlerDiscardTips
        goal:
          use_channels: use_channels
        feedback: {}
        result:
          name: name
      dispense:
        type: LiquidHandlerDispense
        goal:
          resources: resources
          vols: vols
          use_channels: use_channels
          flow_rates: flow_rates
          offsets: offsets
          blow_out_air_volume: blow_out_air_volume
          spread: spread
        feedback: {}
        result:
          name: name
      drop_tips:
        type: LiquidHandlerDropTips
        goal:
          tip_spots: tip_spots
          use_channels: use_channels
          offsets: offsets
          allow_nonzero_volume: allow_nonzero_volume
        feedback: {}
        result:
          name: name
      drop_tips96:
        type: LiquidHandlerDropTips96
        goal:
          tip_rack: tip_rack
          offset: offset
          allow_nonzero_volume: allow_nonzero_volume
        feedback: {}
        result:
          name: name
      move_lid:
        type: LiquidHandlerMoveLid
        goal:
          lid: lid
          to: to
          intermediate_locations: intermediate_locations
          resource_offset: resource_offset
          destination_offset: destination_offset
          pickup_direction: pickup_direction
          drop_direction: drop_direction
          get_direction: get_direction
          put_direction: put_direction
          pickup_distance_from_top: pickup_distance_from_top
        feedback: {}
        result:
          name: name
      move_plate:
        type: LiquidHandlerMovePlate
        goal:
          plate: plate
          to: to
          intermediate_locations: intermediate_locations
          resource_offset: resource_offset
          pickup_offset: pickup_offset
          destination_offset: destination_offset
          pickup_direction: pickup_direction
          drop_direction: drop_direction
          get_direction: get_direction
          put_direction: put_direction
        feedback: {}
        result:
          name: name
      move_resource:
        type: LiquidHandlerMoveResource
        goal:
          resource: resource
          to: to
          intermediate_locations: intermediate_locations
          resource_offset: resource_offset
          destination_offset: destination_offset
          pickup_distance_from_top: pickup_distance_from_top
          pickup_direction: pickup_direction
          drop_direction: drop_direction
          get_direction: get_direction
          put_direction: put_direction
        feedback: {}
        result:
          name: name
      pick_up_tips:
        type: LiquidHandlerPickUpTips
        goal:
          tip_spots: tip_spots
          use_channels: use_channels
          offsets: offsets
        feedback: {}
        result:
          name: name
      pick_up_tips96:
        type: LiquidHandlerPickUpTips96
        goal:
          tip_rack: tip_rack
          offset: offset
        feedback: {}
        result:
          name: name
      return_tips:
        type: LiquidHandlerReturnTips
        goal:
          use_channels: use_channels
          allow_nonzero_volume: allow_nonzero_volume
        feedback: {}
        result:
          name: name
      return_tips96:
        type: LiquidHandlerReturnTips96
        goal:
          allow_nonzero_volume: allow_nonzero_volume
        feedback: {}
        result:
          name: name
      stamp:
        type: LiquidHandlerStamp
        goal:
          source: source
          target: target
          volume: volume
          aspiration_flow_rate: aspiration_flow_rate
          dispense_flow_rate: dispense_flow_rate
        feedback: {}
        result:
          name: name
      transfer:
        type: LiquidHandlerTransfer
        goal:
          source: source
          targets: targets
          source_vol: source_vol
          ratios: ratios
          target_vols: target_vols
          aspiration_flow_rate: aspiration_flow_rate
          dispense_flow_rates: dispense_flow_rates
  handles:
    input:
    - handler_key: liquid-input
      label: Liquid Input
      data_type: resource
      io_type: target
      data_source: handle
      data_key: liquid
    output:
    - handler_key: liquid-output
      label: Liquid Output
      data_type: resource
      io_type: source
      data_source: executor
      data_key: liquid
  schema:
    type: object
    properties:
      name:
        type: string
        description: 液体处理仪器当前状态
    required:
    - name
    additionalProperties: false

liquid_handler.revvity:
  class:
    module: unilabos.devices.liquid_handling.revvity:Revvity
    type: python
    status_types:
      status: String
    action_value_mappings:
      run:
        type: WorkStationRun
        goal:
          wf_name: file_path
          params: params
          resource: resource
        feedback:
          status: status
        result:
          success: success

liquid_handler.biomek:
  description: Biomek液体处理器设备，基于pylabrobot控制
  icon: icon_yiyezhan.webp
  class:
    module: unilabos.devices.liquid_handling.biomek:LiquidHandlerBiomek
    type: python
    status_types: {}
    action_value_mappings:
      create_protocol:
        type: LiquidHandlerProtocolCreation
        goal:
          protocol_name: protocol_name
          protocol_description: protocol_description
          protocol_version: protocol_version
          protocol_author: protocol_author
          protocol_date: protocol_date
          protocol_type: protocol_type
          none_keys: none_keys
        feedback: {}
        result: {}
      run_protocol:
        type: EmptyIn
        goal: {}
        feedback: {}
        result: {}
      transfer_liquid:
        type: LiquidHandlerTransfer
        goal:
          asp_vols: asp_vols
          dis_vols: dis_vols
          sources: sources
          targets: targets
          tip_racks: tip_racks
          use_channels: use_channels
          asp_flow_rates: asp_flow_rates
          dis_flow_rates: dis_flow_rates
          offsets: offsets
          touch_tip: touch_tip
          liquid_height: liquid_height
          blow_out_air_volume: blow_out_air_volume
          spread: spread
          is_96_well: is_96_well
          mix_stage: mix_stage
          mix_times: mix_times
          mix_vol: mix_vol
          mix_rate: mix_rate
          mix_liquid_height: mix_liquid_height
          delays: delays
          none_keys: none_keys
        feedback: {}
        result: {}
        handles:
          input:
            - handler_key: liquid-input
              label: Liquid Input
              data_type: resource
              io_type: target
              data_source: handle
              data_key: liquid
          output:
            - handler_key: liquid-output
              label: Liquid Output
              data_type: resource
              io_type: source
              data_source: executor
              data_key: liquid
      transfer_biomek:
        type: LiquidHandlerTransferBiomek
        goal:
          sources: sources
          targets: targets
          tip_rack: tip_rack
          volume: volume
          aspirate_techniques: aspirate_techniques
          dispense_techniques: dispense_techniques
        feedback: {}
        result: {}
        handles:
          input:
            - handler_key: sources
              label: sources
              data_type: resource
              data_source: handle
              data_key: liquid
            - handler_key: targets
              label: targets
              data_type: resource
              data_source: executor
              data_key: liquid
            - handler_key: tip_rack
              label: tip_rack
              data_type: resource
              data_source: executor
              data_key: liquid
          output:
            - handler_key: sources_out
              label: sources
              data_type: resource
              data_source: handle
              data_key: liquid
            - handler_key: targets_out
              label: targets
              data_type: resource
              data_source: executor
              data_key: liquid
      oscillation_biomek:
        type: LiquidHandlerOscillateBiomek
        goal:
          rpm: rpm
          time: time
        feedback: {}
        result: {}
        handles:
          input:
            - handler_key: plate
              label: plate
              data_type: resource
              data_source: handle
              data_key: liquid
          output:
            - handler_key: plate_out
              label: plate
              data_type: resource
              data_source: handle
              data_key: liquid
      move_biomek:
        type: LiquidHandlerMoveBiomek
        goal:
          source: sources
          target: targets
        feedback: {}
        result:
          name: name
        handles:
          input:
            - handler_key: sources
              label: sources
              data_type: resource
              data_source: handle
              data_key: liquid
          output:
            - handler_key: targets
              label: targets
              data_type: resource
              data_source: handle
              data_key: liquid
      incubation_biomek:
        type: LiquidHandlerIncubateBiomek
        goal:
          time: time
        feedback: {}
        result: {}
        handles:
          input:
            - handler_key: plate
              label: plate
              data_type: resource
              data_source: handle
              data_key: liquid
          output:
            - handler_key: plate_out
              label: plate
              data_type: resource
              data_source: handle
              data_key: liquid
  schema:
    type: object
    properties: {}
    required: []
    additionalProperties: false
