<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.references.html">references</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="genomics_v1.references.bases.html">bases()</a></code>
</p>
<p class="firstline">Returns the bases Resource.</p>

<p class="toc_element">
  <code><a href="#get">get(referenceId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a reference.</p>
<p class="toc_element">
  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
<p class="firstline">Searches for references 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(referenceId, x__xgafv=None)</code>
  <pre>Gets a reference.

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.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L158).

Args:
  referenceId: string, The ID of the reference. (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 is a canonical assembled DNA sequence, intended to act as a
      # reference coordinate space for other genomic annotations. A single reference
      # might represent the human chromosome 1 or mitochandrial DNA, for instance. A
      # reference belongs to one or more reference sets.
      #
      # For more genomics resource definitions, see [Fundamentals of Google
      # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "name": "A String", # The name of this reference, for example `22`.
    "sourceUri": "A String", # The URI from which the sequence was obtained. Typically specifies a FASTA
        # format file.
    "sourceAccessions": [ # All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally
        # with a version number, for example `GCF_000001405.26`.
      "A String",
    ],
    "length": "A String", # The length of this reference's sequence.
    "ncbiTaxonId": 42, # ID from http://www.ncbi.nlm.nih.gov/taxonomy. For example, 9606 for human.
    "id": "A String", # The server-generated reference ID, unique across all references.
    "md5checksum": "A String", # MD5 of the upper-case sequence excluding all whitespace characters (this
        # is equivalent to SQ:M5 in SAM). This value is represented in lower case
        # hexadecimal format.
  }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body, x__xgafv=None)</code>
  <pre>Searches for references 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.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L146).

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

{
    "md5checksums": [ # If present, return references 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.
    "referenceSetId": "A String", # If present, return only references which belong to this reference set.
    "accessions": [ # If present, return references 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 `GCF_000001405.26`.
      "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.
  }

  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.
    "references": [ # The matching references.
      { # A reference is a canonical assembled DNA sequence, intended to act as a
          # reference coordinate space for other genomic annotations. A single reference
          # might represent the human chromosome 1 or mitochandrial DNA, for instance. A
          # reference belongs to one or more reference sets.
          #
          # For more genomics resource definitions, see [Fundamentals of Google
          # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        "name": "A String", # The name of this reference, for example `22`.
        "sourceUri": "A String", # The URI from which the sequence was obtained. Typically specifies a FASTA
            # format file.
        "sourceAccessions": [ # All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally
            # with a version number, for example `GCF_000001405.26`.
          "A String",
        ],
        "length": "A String", # The length of this reference's sequence.
        "ncbiTaxonId": 42, # ID from http://www.ncbi.nlm.nih.gov/taxonomy. For example, 9606 for human.
        "id": "A String", # The server-generated reference ID, unique across all references.
        "md5checksum": "A String", # MD5 of the upper-case sequence excluding all whitespace characters (this
            # is equivalent to SQ:M5 in SAM). This value is represented in lower case
            # hexadecimal format.
      },
    ],
  }</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>