<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.referencesets.html">referencesets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(referenceSetId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a reference set.</p>
<p class="toc_element">
  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
<p class="firstline">Searches for reference sets which match the given 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="get">get(referenceSetId, x__xgafv=None)</code>
  <pre>Gets a reference set.

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

Implements
[GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L83).

Args:
  referenceSetId: string, The ID of the reference 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 reference set is a set of references which typically comprise a reference
      # assembly for a species, such as `GRCh38` which is representative
      # of the human genome. A reference set defines a common coordinate space for
      # comparing reference-aligned experimental data. A reference set contains 1 or
      # more references.
      #
      # For more genomics resource definitions, see [Fundamentals of Google
      # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "description": "A String", # Free text description of this reference set.
    "sourceUri": "A String", # The URI from which the references were obtained.
    "referenceIds": [ # The IDs of the reference objects that are part of this set.
        # `Reference.md5checksum` must be unique within this set.
      "A String",
    ],
    "assemblyId": "A String", # Public id of this reference set, such as `GRCh37`.
    "sourceAccessions": [ # All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally
        # with a version number, for example `NC_000001.11`.
      "A String",
    ],
    "md5checksum": "A String", # Order-independent MD5 checksum which identifies this reference set. The
        # checksum is computed by sorting all lower case hexidecimal string
        # `reference.md5checksum` (for all reference in this set) in
        # ascending lexicographic order, concatenating, and taking the MD5 of that
        # value. The resulting value is represented in lower case hexadecimal format.
    "id": "A String", # The server-generated reference set ID, unique across all reference sets.
    "ncbiTaxonId": 42, # ID from http://www.ncbi.nlm.nih.gov/taxonomy (for example, 9606 for human)
        # indicating the species which this reference set is intended to model. Note
        # that contained references may specify a different `ncbiTaxonId`, as
        # assemblies may contain reference sequences which do not belong to the
        # modeled species, for example EBV in a human reference genome.
  }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body, x__xgafv=None)</code>
  <pre>Searches for reference sets which match the given criteria.

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

Implements
[GlobalAllianceApi.searchReferenceSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L71)

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

{
    "md5checksums": [ # If present, return reference sets for which the
        # md5checksum matches exactly.
      "A String",
    ],
    "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.
    "accessions": [ # If present, return reference sets for which a prefix of any of
        # sourceAccessions
        # match any of these strings. Accession numbers typically have a main number
        # and a version, for example `NC_000001.11`.
      "A String",
    ],
    "pageSize": 42, # The maximum number of results to return in a single page. If unspecified,
        # defaults to 1024. The maximum value is 4096.
    "assemblyId": "A String", # If present, return reference sets for which a substring of their
        # `assemblyId` matches this string (case insensitive).
  }

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

Returns:
  An object of the form:

    {
    "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.
    "referenceSets": [ # The matching references sets.
      { # A reference set is a set of references which typically comprise a reference
          # assembly for a species, such as `GRCh38` which is representative
          # of the human genome. A reference set defines a common coordinate space for
          # comparing reference-aligned experimental data. A reference set contains 1 or
          # more references.
          #
          # For more genomics resource definitions, see [Fundamentals of Google
          # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        "description": "A String", # Free text description of this reference set.
        "sourceUri": "A String", # The URI from which the references were obtained.
        "referenceIds": [ # The IDs of the reference objects that are part of this set.
            # `Reference.md5checksum` must be unique within this set.
          "A String",
        ],
        "assemblyId": "A String", # Public id of this reference set, such as `GRCh37`.
        "sourceAccessions": [ # All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally
            # with a version number, for example `NC_000001.11`.
          "A String",
        ],
        "md5checksum": "A String", # Order-independent MD5 checksum which identifies this reference set. The
            # checksum is computed by sorting all lower case hexidecimal string
            # `reference.md5checksum` (for all reference in this set) in
            # ascending lexicographic order, concatenating, and taking the MD5 of that
            # value. The resulting value is represented in lower case hexadecimal format.
        "id": "A String", # The server-generated reference set ID, unique across all reference sets.
        "ncbiTaxonId": 42, # ID from http://www.ncbi.nlm.nih.gov/taxonomy (for example, 9606 for human)
            # indicating the species which this reference set is intended to model. Note
            # that contained references may specify a different `ncbiTaxonId`, as
            # assemblies may contain reference sequences which do not belong to the
            # modeled species, for example EBV in a human reference genome.
      },
    ],
  }</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>