<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="genomics_v1.html">Genomics API</a> . <a href="genomics_v1.readgroupsets.html">readgroupsets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="genomics_v1.readgroupsets.coveragebuckets.html">coveragebuckets()</a></code>
</p>
<p class="firstline">Returns the coveragebuckets Resource.</p>

<p class="toc_element">
  <code><a href="#delete">delete(readGroupSetId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a read group set.</p>
<p class="toc_element">
  <code><a href="#export">export(readGroupSetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Exports a read group set to a BAM file in Google Cloud Storage.</p>
<p class="toc_element">
  <code><a href="#get">get(readGroupSetId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a read group set by ID.</p>
<p class="toc_element">
  <code><a href="#import_">import_(body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates read group sets by asynchronously importing the provided</p>
<p class="toc_element">
  <code><a href="#patch">patch(readGroupSetId, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a read group set.</p>
<p class="toc_element">
  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
<p class="firstline">Searches for read group sets matching the criteria.</p>
<p class="toc_element">
  <code><a href="#search_next">search_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(readGroupSetId, x__xgafv=None)</code>
  <pre>Deletes a read group set.

For the definitions of read group sets and other genomics resources, see
[Fundamentals of Google
Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

Args:
  readGroupSetId: string, The ID of the read group set to be deleted. The caller must have WRITE
permissions to the dataset associated with this read group set. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="export">export(readGroupSetId, body, x__xgafv=None)</code>
  <pre>Exports a read group set to a BAM file in Google Cloud Storage.

For the definitions of read group sets and other genomics resources, see
[Fundamentals of Google
Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

Note that currently there may be some differences between exported BAM
files and the original BAM file at the time of import. See
ImportReadGroupSets
for caveats.

Args:
  readGroupSetId: string, Required. The ID of the read group set to export. The caller must have
READ access to this read group set. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The read group set export request.
    "projectId": "A String", # Required. The Google Cloud project ID that owns this
        # export. The caller must have WRITE access to this project.
    "referenceNames": [ # The reference names to export. If this is not specified, all reference
        # sequences, including unmapped reads, are exported.
        # Use `*` to export only unmapped reads.
      "A String",
    ],
    "exportUri": "A String", # Required. A Google Cloud Storage URI for the exported BAM file.
        # The currently authenticated user must have write access to the new file.
        # An error will be returned if the URI already contains data.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # An OperationMetadata object. This will always be returned with the Operation.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure or cancellation.
        # programming environments, including REST APIs and RPC APIs. It is used by
        # [gRPC](https://github.com/grpc). The error model is designed to be:
        #
        # - Simple to use and understand for most users
        # - Flexible enough to meet unexpected needs
        #
        # # Overview
        #
        # The `Status` message contains three pieces of data: error code, error message,
        # and error details. The error code should be an enum value of
        # google.rpc.Code, but it may accept additional error codes if needed.  The
        # error message should be a developer-facing English message that helps
        # developers *understand* and *resolve* the error. If a localized user-facing
        # error message is needed, put the localized message in the error details or
        # localize it in the client. The optional error details may contain arbitrary
        # information about the error. There is a predefined set of error detail types
        # in the package `google.rpc` that can be used for common error conditions.
        #
        # # Language mapping
        #
        # The `Status` message is the logical representation of the error model, but it
        # is not necessarily the actual wire format. When the `Status` message is
        # exposed in different client libraries and different wire protocols, it can be
        # mapped differently. For example, it will likely be mapped to some exceptions
        # in Java, but more likely mapped to some error codes in C.
        #
        # # Other uses
        #
        # The error model and the `Status` message can be used in a variety of
        # environments, either with or without APIs, to provide a
        # consistent developer experience across different environments.
        #
        # Example uses of this error model include:
        #
        # - Partial errors. If a service needs to return partial errors to the client,
        #     it may embed the `Status` in the normal response to indicate the partial
        #     errors.
        #
        # - Workflow errors. A typical workflow has multiple steps. Each step may
        #     have a `Status` message for error reporting.
        #
        # - Batch operations. If a client uses batch request and batch response, the
        #     `Status` message should be used directly inside batch response, one for
        #     each error sub-response.
        #
        # - Asynchronous operations. If an API call embeds asynchronous operation
        #     results in its response, the status of those operations should be
        #     represented directly using the `Status` message.
        #
        # - Logging. If some API errors are stored in logs, the message `Status` could
        #     be used directly after any stripping needed for security/privacy reasons.
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There will be a
          # common set of message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If true, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # If importing ReadGroupSets, an ImportReadGroupSetsResponse is returned. If importing Variants, an ImportVariantsResponse is returned. For pipelines and exports, an empty response is returned.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. For example&#58; `operations/CJHU7Oi_ChDrveSpBRjfuL-qzoWAgEw`
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(readGroupSetId, x__xgafv=None)</code>
  <pre>Gets a read group set by ID.

For the definitions of read group sets and other genomics resources, see
[Fundamentals of Google
Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

Args:
  readGroupSetId: string, The ID of the read group set. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A read group set is a logical collection of read groups, which are
      # collections of reads produced by a sequencer. A read group set typically
      # models reads corresponding to one sample, sequenced one way, and aligned one
      # way.
      #
      # * A read group set belongs to one dataset.
      # * A read group belongs to one read group set.
      # * A read belongs to one read group.
      #
      # For more genomics resource definitions, see [Fundamentals of Google
      # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "info": { # A map of additional read group set information.
      "a_key": [
        "",
      ],
    },
    "name": "A String", # The read group set name. By default this will be initialized to the sample
        # name of the sequenced data contained in this set.
    "readGroups": [ # The read groups in this set. There are typically 1-10 read groups in a read
        # group set.
      { # A read group is all the data that's processed the same way by the sequencer.
        "info": { # A map of additional read group information. This must be of the form
            # map<string, string[]> (string key mapping to a list of string values).
          "a_key": [
            "",
          ],
        },
        "predictedInsertSize": 42, # The predicted insert size of this read group. The insert size is the length
            # the sequenced DNA fragment from end-to-end, not including the adapters.
        "name": "A String", # The read group name. This corresponds to the @RG ID field in the SAM spec.
        "programs": [ # The programs used to generate this read group. Programs are always
            # identical for all read groups within a read group set. For this reason,
            # only the first read group in a returned set will have this field
            # populated.
          {
            "prevProgramId": "A String", # The ID of the program run before this one.
            "commandLine": "A String", # The command line used to run this program.
            "version": "A String", # The version of the program run.
            "id": "A String", # The user specified locally unique ID of the program. Used along with
                # `prevProgramId` to define an ordering between programs.
            "name": "A String", # The display name of the program. This is typically the colloquial name of
                # the tool used, for example 'bwa' or 'picard'.
          },
        ],
        "sampleId": "A String", # A client-supplied sample identifier for the reads in this read group.
        "experiment": { # The experiment used to generate this read group.
          "sequencingCenter": "A String", # The sequencing center used as part of this experiment.
          "libraryId": "A String", # A client-supplied library identifier; a library is a collection of DNA
              # fragments which have been prepared for sequencing from a sample. This
              # field is important for quality control as error or bias can be introduced
              # during sample preparation.
          "instrumentModel": "A String", # The instrument model used as part of this experiment. This maps to
              # sequencing technology in the SAM spec.
          "platformUnit": "A String", # The platform unit used as part of this experiment, for example
              # flowcell-barcode.lane for Illumina or slide for SOLiD. Corresponds to the
              # @RG PU field in the SAM spec.
        },
        "referenceSetId": "A String", # The reference set the reads in this read group are aligned to.
        "id": "A String", # The server-generated read group ID, unique for all read groups.
            # Note: This is different than the @RG ID field in the SAM spec. For that
            # value, see name.
        "datasetId": "A String", # The dataset to which this read group belongs.
        "description": "A String", # A free-form text description of this read group.
      },
    ],
    "filename": "A String", # The filename of the original source file for this read group set, if any.
    "referenceSetId": "A String", # The reference set to which the reads in this read group set are aligned.
    "id": "A String", # The server-generated read group set ID, unique for all read group sets.
    "datasetId": "A String", # The dataset to which this read group set belongs.
  }</pre>
</div>

<div class="method">
    <code class="details" id="import_">import_(body, x__xgafv=None)</code>
  <pre>Creates read group sets by asynchronously importing the provided
information.

For the definitions of read group sets and other genomics resources, see
[Fundamentals of Google
Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

The caller must have WRITE permissions to the dataset.

## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import

- Tags will be converted to strings - tag types are not preserved
- Comments (`@CO`) in the input file header will not be preserved
- Original header order of references (`@SQ`) will not be preserved
- Any reverse stranded unmapped reads will be reverse complemented, and
their qualities (also the "BQ" and "OQ" tags, if any) will be reversed
- Unmapped reads will be stripped of positional information (reference name
and position)

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # The read group set import request.
    "partitionStrategy": "A String", # The partition strategy describes how read groups are partitioned into read
        # group sets.
    "sourceUris": [ # A list of URIs pointing at [BAM
        # files](https://samtools.github.io/hts-specs/SAMv1.pdf)
        # in Google Cloud Storage.
        # Those URIs can include wildcards (*), but do not add or remove
        # matching files before import has completed.
        # 
        # Note that Google Cloud Storage object listing is only eventually
        # consistent: files added may be not be immediately visible to
        # everyone. Thus, if using a wildcard it is preferable not to start
        # the import immediately after the files are created.
      "A String",
    ],
    "referenceSetId": "A String", # The reference set to which the imported read group sets are aligned to, if
        # any. The reference names of this reference set must be a superset of those
        # found in the imported file headers. If no reference set id is provided, a
        # best effort is made to associate with a matching reference set.
    "datasetId": "A String", # Required. The ID of the dataset these read group sets will belong to. The
        # caller must have WRITE permissions to this dataset.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # An OperationMetadata object. This will always be returned with the Operation.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure or cancellation.
        # programming environments, including REST APIs and RPC APIs. It is used by
        # [gRPC](https://github.com/grpc). The error model is designed to be:
        #
        # - Simple to use and understand for most users
        # - Flexible enough to meet unexpected needs
        #
        # # Overview
        #
        # The `Status` message contains three pieces of data: error code, error message,
        # and error details. The error code should be an enum value of
        # google.rpc.Code, but it may accept additional error codes if needed.  The
        # error message should be a developer-facing English message that helps
        # developers *understand* and *resolve* the error. If a localized user-facing
        # error message is needed, put the localized message in the error details or
        # localize it in the client. The optional error details may contain arbitrary
        # information about the error. There is a predefined set of error detail types
        # in the package `google.rpc` that can be used for common error conditions.
        #
        # # Language mapping
        #
        # The `Status` message is the logical representation of the error model, but it
        # is not necessarily the actual wire format. When the `Status` message is
        # exposed in different client libraries and different wire protocols, it can be
        # mapped differently. For example, it will likely be mapped to some exceptions
        # in Java, but more likely mapped to some error codes in C.
        #
        # # Other uses
        #
        # The error model and the `Status` message can be used in a variety of
        # environments, either with or without APIs, to provide a
        # consistent developer experience across different environments.
        #
        # Example uses of this error model include:
        #
        # - Partial errors. If a service needs to return partial errors to the client,
        #     it may embed the `Status` in the normal response to indicate the partial
        #     errors.
        #
        # - Workflow errors. A typical workflow has multiple steps. Each step may
        #     have a `Status` message for error reporting.
        #
        # - Batch operations. If a client uses batch request and batch response, the
        #     `Status` message should be used directly inside batch response, one for
        #     each error sub-response.
        #
        # - Asynchronous operations. If an API call embeds asynchronous operation
        #     results in its response, the status of those operations should be
        #     represented directly using the `Status` message.
        #
        # - Logging. If some API errors are stored in logs, the message `Status` could
        #     be used directly after any stripping needed for security/privacy reasons.
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There will be a
          # common set of message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If true, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # If importing ReadGroupSets, an ImportReadGroupSetsResponse is returned. If importing Variants, an ImportVariantsResponse is returned. For pipelines and exports, an empty response is returned.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. For example&#58; `operations/CJHU7Oi_ChDrveSpBRjfuL-qzoWAgEw`
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(readGroupSetId, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a read group set.

For the definitions of read group sets and other genomics resources, see
[Fundamentals of Google
Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

This method supports patch semantics.

Args:
  readGroupSetId: string, The ID of the read group set to be updated. The caller must have WRITE
permissions to the dataset associated with this read group set. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A read group set is a logical collection of read groups, which are
    # collections of reads produced by a sequencer. A read group set typically
    # models reads corresponding to one sample, sequenced one way, and aligned one
    # way.
    # 
    # * A read group set belongs to one dataset.
    # * A read group belongs to one read group set.
    # * A read belongs to one read group.
    # 
    # For more genomics resource definitions, see [Fundamentals of Google
    # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
  "info": { # A map of additional read group set information.
    "a_key": [
      "",
    ],
  },
  "name": "A String", # The read group set name. By default this will be initialized to the sample
      # name of the sequenced data contained in this set.
  "readGroups": [ # The read groups in this set. There are typically 1-10 read groups in a read
      # group set.
    { # A read group is all the data that's processed the same way by the sequencer.
      "info": { # A map of additional read group information. This must be of the form
          # map<string, string[]> (string key mapping to a list of string values).
        "a_key": [
          "",
        ],
      },
      "predictedInsertSize": 42, # The predicted insert size of this read group. The insert size is the length
          # the sequenced DNA fragment from end-to-end, not including the adapters.
      "name": "A String", # The read group name. This corresponds to the @RG ID field in the SAM spec.
      "programs": [ # The programs used to generate this read group. Programs are always
          # identical for all read groups within a read group set. For this reason,
          # only the first read group in a returned set will have this field
          # populated.
        {
          "prevProgramId": "A String", # The ID of the program run before this one.
          "commandLine": "A String", # The command line used to run this program.
          "version": "A String", # The version of the program run.
          "id": "A String", # The user specified locally unique ID of the program. Used along with
              # `prevProgramId` to define an ordering between programs.
          "name": "A String", # The display name of the program. This is typically the colloquial name of
              # the tool used, for example 'bwa' or 'picard'.
        },
      ],
      "sampleId": "A String", # A client-supplied sample identifier for the reads in this read group.
      "experiment": { # The experiment used to generate this read group.
        "sequencingCenter": "A String", # The sequencing center used as part of this experiment.
        "libraryId": "A String", # A client-supplied library identifier; a library is a collection of DNA
            # fragments which have been prepared for sequencing from a sample. This
            # field is important for quality control as error or bias can be introduced
            # during sample preparation.
        "instrumentModel": "A String", # The instrument model used as part of this experiment. This maps to
            # sequencing technology in the SAM spec.
        "platformUnit": "A String", # The platform unit used as part of this experiment, for example
            # flowcell-barcode.lane for Illumina or slide for SOLiD. Corresponds to the
            # @RG PU field in the SAM spec.
      },
      "referenceSetId": "A String", # The reference set the reads in this read group are aligned to.
      "id": "A String", # The server-generated read group ID, unique for all read groups.
          # Note: This is different than the @RG ID field in the SAM spec. For that
          # value, see name.
      "datasetId": "A String", # The dataset to which this read group belongs.
      "description": "A String", # A free-form text description of this read group.
    },
  ],
  "filename": "A String", # The filename of the original source file for this read group set, if any.
  "referenceSetId": "A String", # The reference set to which the reads in this read group set are aligned.
  "id": "A String", # The server-generated read group set ID, unique for all read group sets.
  "datasetId": "A String", # The dataset to which this read group set belongs.
}

  updateMask: string, An optional mask specifying which fields to update. Supported fields:

* name.
* referenceSetId.

Leaving `updateMask` unset is equivalent to specifying all mutable
fields.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A read group set is a logical collection of read groups, which are
      # collections of reads produced by a sequencer. A read group set typically
      # models reads corresponding to one sample, sequenced one way, and aligned one
      # way.
      #
      # * A read group set belongs to one dataset.
      # * A read group belongs to one read group set.
      # * A read belongs to one read group.
      #
      # For more genomics resource definitions, see [Fundamentals of Google
      # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "info": { # A map of additional read group set information.
      "a_key": [
        "",
      ],
    },
    "name": "A String", # The read group set name. By default this will be initialized to the sample
        # name of the sequenced data contained in this set.
    "readGroups": [ # The read groups in this set. There are typically 1-10 read groups in a read
        # group set.
      { # A read group is all the data that's processed the same way by the sequencer.
        "info": { # A map of additional read group information. This must be of the form
            # map<string, string[]> (string key mapping to a list of string values).
          "a_key": [
            "",
          ],
        },
        "predictedInsertSize": 42, # The predicted insert size of this read group. The insert size is the length
            # the sequenced DNA fragment from end-to-end, not including the adapters.
        "name": "A String", # The read group name. This corresponds to the @RG ID field in the SAM spec.
        "programs": [ # The programs used to generate this read group. Programs are always
            # identical for all read groups within a read group set. For this reason,
            # only the first read group in a returned set will have this field
            # populated.
          {
            "prevProgramId": "A String", # The ID of the program run before this one.
            "commandLine": "A String", # The command line used to run this program.
            "version": "A String", # The version of the program run.
            "id": "A String", # The user specified locally unique ID of the program. Used along with
                # `prevProgramId` to define an ordering between programs.
            "name": "A String", # The display name of the program. This is typically the colloquial name of
                # the tool used, for example 'bwa' or 'picard'.
          },
        ],
        "sampleId": "A String", # A client-supplied sample identifier for the reads in this read group.
        "experiment": { # The experiment used to generate this read group.
          "sequencingCenter": "A String", # The sequencing center used as part of this experiment.
          "libraryId": "A String", # A client-supplied library identifier; a library is a collection of DNA
              # fragments which have been prepared for sequencing from a sample. This
              # field is important for quality control as error or bias can be introduced
              # during sample preparation.
          "instrumentModel": "A String", # The instrument model used as part of this experiment. This maps to
              # sequencing technology in the SAM spec.
          "platformUnit": "A String", # The platform unit used as part of this experiment, for example
              # flowcell-barcode.lane for Illumina or slide for SOLiD. Corresponds to the
              # @RG PU field in the SAM spec.
        },
        "referenceSetId": "A String", # The reference set the reads in this read group are aligned to.
        "id": "A String", # The server-generated read group ID, unique for all read groups.
            # Note: This is different than the @RG ID field in the SAM spec. For that
            # value, see name.
        "datasetId": "A String", # The dataset to which this read group belongs.
        "description": "A String", # A free-form text description of this read group.
      },
    ],
    "filename": "A String", # The filename of the original source file for this read group set, if any.
    "referenceSetId": "A String", # The reference set to which the reads in this read group set are aligned.
    "id": "A String", # The server-generated read group set ID, unique for all read group sets.
    "datasetId": "A String", # The dataset to which this read group set belongs.
  }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body, x__xgafv=None)</code>
  <pre>Searches for read group sets matching the criteria.

For the definitions of read group sets and other genomics resources, see
[Fundamentals of Google
Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)

Implements
[GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L135).

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # The read group set search request.
    "pageToken": "A String", # The continuation token, which is used to page through large result sets.
        # To get the next page of results, set this parameter to the value of
        # `nextPageToken` from the previous response.
    "datasetIds": [ # Restricts this query to read group sets within the given datasets. At least
        # one ID must be provided.
      "A String",
    ],
    "name": "A String", # Only return read group sets for which a substring of the name matches this
        # string.
    "pageSize": 42, # The maximum number of results to return in a single page. If unspecified,
        # defaults to 256. The maximum value is 1024.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The read group set search response.
    "nextPageToken": "A String", # The continuation token, which is used to page through large result sets.
        # Provide this value in a subsequent request to return the next page of
        # results. This field will be empty if there aren't any additional results.
    "readGroupSets": [ # The list of matching read group sets.
      { # A read group set is a logical collection of read groups, which are
          # collections of reads produced by a sequencer. A read group set typically
          # models reads corresponding to one sample, sequenced one way, and aligned one
          # way.
          #
          # * A read group set belongs to one dataset.
          # * A read group belongs to one read group set.
          # * A read belongs to one read group.
          #
          # For more genomics resource definitions, see [Fundamentals of Google
          # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        "info": { # A map of additional read group set information.
          "a_key": [
            "",
          ],
        },
        "name": "A String", # The read group set name. By default this will be initialized to the sample
            # name of the sequenced data contained in this set.
        "readGroups": [ # The read groups in this set. There are typically 1-10 read groups in a read
            # group set.
          { # A read group is all the data that's processed the same way by the sequencer.
            "info": { # A map of additional read group information. This must be of the form
                # map<string, string[]> (string key mapping to a list of string values).
              "a_key": [
                "",
              ],
            },
            "predictedInsertSize": 42, # The predicted insert size of this read group. The insert size is the length
                # the sequenced DNA fragment from end-to-end, not including the adapters.
            "name": "A String", # The read group name. This corresponds to the @RG ID field in the SAM spec.
            "programs": [ # The programs used to generate this read group. Programs are always
                # identical for all read groups within a read group set. For this reason,
                # only the first read group in a returned set will have this field
                # populated.
              {
                "prevProgramId": "A String", # The ID of the program run before this one.
                "commandLine": "A String", # The command line used to run this program.
                "version": "A String", # The version of the program run.
                "id": "A String", # The user specified locally unique ID of the program. Used along with
                    # `prevProgramId` to define an ordering between programs.
                "name": "A String", # The display name of the program. This is typically the colloquial name of
                    # the tool used, for example 'bwa' or 'picard'.
              },
            ],
            "sampleId": "A String", # A client-supplied sample identifier for the reads in this read group.
            "experiment": { # The experiment used to generate this read group.
              "sequencingCenter": "A String", # The sequencing center used as part of this experiment.
              "libraryId": "A String", # A client-supplied library identifier; a library is a collection of DNA
                  # fragments which have been prepared for sequencing from a sample. This
                  # field is important for quality control as error or bias can be introduced
                  # during sample preparation.
              "instrumentModel": "A String", # The instrument model used as part of this experiment. This maps to
                  # sequencing technology in the SAM spec.
              "platformUnit": "A String", # The platform unit used as part of this experiment, for example
                  # flowcell-barcode.lane for Illumina or slide for SOLiD. Corresponds to the
                  # @RG PU field in the SAM spec.
            },
            "referenceSetId": "A String", # The reference set the reads in this read group are aligned to.
            "id": "A String", # The server-generated read group ID, unique for all read groups.
                # Note: This is different than the @RG ID field in the SAM spec. For that
                # value, see name.
            "datasetId": "A String", # The dataset to which this read group belongs.
            "description": "A String", # A free-form text description of this read group.
          },
        ],
        "filename": "A String", # The filename of the original source file for this read group set, if any.
        "referenceSetId": "A String", # The reference set to which the reads in this read group set are aligned.
        "id": "A String", # The server-generated read group set ID, unique for all read group sets.
        "datasetId": "A String", # The dataset to which this read group set belongs.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="search_next">search_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>