<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_v1beta.html">Genomics API</a> . <a href="genomics_v1beta.readsets.html">readsets</a> . <a href="genomics_v1beta.readsets.coveragebuckets.html">coveragebuckets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(readsetId, range_sequenceName=None, pageToken=None, range_sequenceEnd=None, maxResults=None, range_sequenceStart=None, targetBucketWidth=None)</a></code></p>
<p class="firstline">Lists fixed width coverage buckets for a readset, each of which correspond to a range of a reference sequence. Each bucket summarizes coverage information across its corresponding genomic range. Coverage is defined as the number of reads which are aligned to a given base in the reference sequence. Coverage buckets are available at various bucket widths, enabling various coverage "zoom levels". The caller must have READ permissions for the target readset.</p>
<p class="toc_element">
  <code><a href="#list_next">list_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="list">list(readsetId, range_sequenceName=None, pageToken=None, range_sequenceEnd=None, maxResults=None, range_sequenceStart=None, targetBucketWidth=None)</code>
  <pre>Lists fixed width coverage buckets for a readset, each of which correspond to a range of a reference sequence. Each bucket summarizes coverage information across its corresponding genomic range. Coverage is defined as the number of reads which are aligned to a given base in the reference sequence. Coverage buckets are available at various bucket widths, enabling various coverage "zoom levels". The caller must have READ permissions for the target readset.

Args:
  readsetId: string, Required. The ID of the readset over which coverage is requested. (required)
  range_sequenceName: string, The reference sequence name, for example chr1, 1, or chrX.
  pageToken: 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.
  range_sequenceEnd: string, The end position of the range on the reference, 1-based exclusive. If specified, sequenceName must also be specified.
  maxResults: string, The maximum number of results to return in a single page. If unspecified, defaults to 1024. The maximum value is 2048.
  range_sequenceStart: string, The start position of the range on the reference, 1-based inclusive. If specified, sequenceName must also be specified.
  targetBucketWidth: string, The desired width of each reported coverage bucket in base pairs. This will be rounded down to the nearest precomputed bucket width; the value of which is returned as bucketWidth in the response. Defaults to infinity (each bucket spans an entire reference sequence) or the length of the target range, if specified. The smallest precomputed bucketWidth is currently 2048 base pairs; this is subject to change.

Returns:
  An object of the form:

    {
    "coverageBuckets": [ # The coverage buckets. The list of buckets is sparse; a bucket with 0 overlapping reads is not returned. A bucket never crosses more than one reference sequence. Each bucket has width bucketWidth, unless its end is the end of the reference sequence.
      { # A bucket over which read coverage has been precomputed. A bucket corresponds to a specific range of the reference sequence.
        "meanCoverage": 3.14, # The average number of reads which are aligned to each individual reference base in this bucket.
        "range": { # An inclusive, exclusive genomic coordinate range over a reference sequence. # The genomic coordinate range spanned by this bucket.
          "sequenceStart": "A String", # The start position of the range on the reference, 1-based inclusive. If specified, sequenceName must also be specified.
          "sequenceEnd": "A String", # The end position of the range on the reference, 1-based exclusive. If specified, sequenceName must also be specified.
          "sequenceName": "A String", # The reference sequence name, for example chr1, 1, or chrX.
        },
      },
    ],
    "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.
    "bucketWidth": "A String", # The length of each coverage bucket in base pairs. Note that buckets at the end of a reference sequence may be shorter. This value is omitted if the bucket width is infinity (the default behaviour, with no range or targetBucketWidth).
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_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>