<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.callsets.html">callsets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new call set.</p>
<p class="toc_element">
  <code><a href="#delete">delete(callSetId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a call set.</p>
<p class="toc_element">
  <code><a href="#get">get(callSetId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a call set by ID.</p>
<p class="toc_element">
  <code><a href="#patch">patch(callSetId, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a call set.</p>
<p class="toc_element">
  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a list of call 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="create">create(body, x__xgafv=None)</code>
  <pre>Creates a new call set.

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

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

{ # A call set is a collection of variant calls, typically for one sample. It
      # belongs to a variant set.
      # 
      # For more genomics resource definitions, see [Fundamentals of Google
      # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "info": { # A map of additional call set information. This must be of the form
        # map<string, string[]> (string key mapping to a list of string values).
      "a_key": [
        "",
      ],
    },
    "name": "A String", # The call set name.
    "created": "A String", # The date this call set was created in milliseconds from the epoch.
    "sampleId": "A String", # The sample ID this call set corresponds to.
    "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must
        # have exactly length one, as a call set belongs to a single variant set.
        # This field is repeated for compatibility with the
        # [GA4GH 0.5.1
        # API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
      "A String",
    ],
    "id": "A String", # The server-generated call set ID, unique across all call sets.
  }

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

Returns:
  An object of the form:

    { # A call set is a collection of variant calls, typically for one sample. It
        # belongs to a variant set.
        #
        # For more genomics resource definitions, see [Fundamentals of Google
        # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
      "info": { # A map of additional call set information. This must be of the form
          # map<string, string[]> (string key mapping to a list of string values).
        "a_key": [
          "",
        ],
      },
      "name": "A String", # The call set name.
      "created": "A String", # The date this call set was created in milliseconds from the epoch.
      "sampleId": "A String", # The sample ID this call set corresponds to.
      "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must
          # have exactly length one, as a call set belongs to a single variant set.
          # This field is repeated for compatibility with the
          # [GA4GH 0.5.1
          # API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
        "A String",
      ],
      "id": "A String", # The server-generated call set ID, unique across all call sets.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(callSetId, x__xgafv=None)</code>
  <pre>Deletes a call set.

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

Args:
  callSetId: string, The ID of the call set to be deleted. (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="get">get(callSetId, x__xgafv=None)</code>
  <pre>Gets a call set by ID.

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

Args:
  callSetId: string, The ID of the call 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 call set is a collection of variant calls, typically for one sample. It
        # belongs to a variant set.
        #
        # For more genomics resource definitions, see [Fundamentals of Google
        # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
      "info": { # A map of additional call set information. This must be of the form
          # map<string, string[]> (string key mapping to a list of string values).
        "a_key": [
          "",
        ],
      },
      "name": "A String", # The call set name.
      "created": "A String", # The date this call set was created in milliseconds from the epoch.
      "sampleId": "A String", # The sample ID this call set corresponds to.
      "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must
          # have exactly length one, as a call set belongs to a single variant set.
          # This field is repeated for compatibility with the
          # [GA4GH 0.5.1
          # API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
        "A String",
      ],
      "id": "A String", # The server-generated call set ID, unique across all call sets.
    }</pre>
</div>

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

For the definitions of call 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:
  callSetId: string, The ID of the call set to be updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A call set is a collection of variant calls, typically for one sample. It
      # belongs to a variant set.
      # 
      # For more genomics resource definitions, see [Fundamentals of Google
      # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
    "info": { # A map of additional call set information. This must be of the form
        # map<string, string[]> (string key mapping to a list of string values).
      "a_key": [
        "",
      ],
    },
    "name": "A String", # The call set name.
    "created": "A String", # The date this call set was created in milliseconds from the epoch.
    "sampleId": "A String", # The sample ID this call set corresponds to.
    "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must
        # have exactly length one, as a call set belongs to a single variant set.
        # This field is repeated for compatibility with the
        # [GA4GH 0.5.1
        # API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
      "A String",
    ],
    "id": "A String", # The server-generated call set ID, unique across all call sets.
  }

  updateMask: string, An optional mask specifying which fields to update. At this time, the only
mutable field is name. The only
acceptable value is "name". If unspecified, all mutable fields will be
updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A call set is a collection of variant calls, typically for one sample. It
        # belongs to a variant set.
        #
        # For more genomics resource definitions, see [Fundamentals of Google
        # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
      "info": { # A map of additional call set information. This must be of the form
          # map<string, string[]> (string key mapping to a list of string values).
        "a_key": [
          "",
        ],
      },
      "name": "A String", # The call set name.
      "created": "A String", # The date this call set was created in milliseconds from the epoch.
      "sampleId": "A String", # The sample ID this call set corresponds to.
      "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must
          # have exactly length one, as a call set belongs to a single variant set.
          # This field is repeated for compatibility with the
          # [GA4GH 0.5.1
          # API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
        "A String",
      ],
      "id": "A String", # The server-generated call set ID, unique across all call sets.
    }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body, x__xgafv=None)</code>
  <pre>Gets a list of call sets matching the criteria.

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

Implements
[GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L178).

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

{ # The call 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.
    "variantSetIds": [ # Restrict the query to call sets within the given variant sets. At least one
        # ID must be provided.
      "A String",
    ],
    "name": "A String", # Only return call 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 1024.
  }

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

Returns:
  An object of the form:

    { # The call 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.
    "callSets": [ # The list of matching call sets.
      { # A call set is a collection of variant calls, typically for one sample. It
            # belongs to a variant set.
            #
            # For more genomics resource definitions, see [Fundamentals of Google
            # Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
          "info": { # A map of additional call set information. This must be of the form
              # map<string, string[]> (string key mapping to a list of string values).
            "a_key": [
              "",
            ],
          },
          "name": "A String", # The call set name.
          "created": "A String", # The date this call set was created in milliseconds from the epoch.
          "sampleId": "A String", # The sample ID this call set corresponds to.
          "variantSetIds": [ # The IDs of the variant sets this call set belongs to. This field must
              # have exactly length one, as a call set belongs to a single variant set.
              # This field is repeated for compatibility with the
              # [GA4GH 0.5.1
              # API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).
            "A String",
          ],
          "id": "A String", # The server-generated call set ID, unique across all call sets.
        },
    ],
  }</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>