// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.genomics.v1;

import "google/api/annotations.proto";
import "google/protobuf/struct.proto";

option cc_enable_arenas = true;
option go_package = "google.golang.org/genproto/googleapis/genomics/v1;genomics";
option java_multiple_files = true;
option java_outer_classname = "ReadGroupProto";
option java_package = "com.google.genomics.v1";

// A read group is all the data that's processed the same way by the sequencer.
message ReadGroup {
  message Experiment {
    // 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.
    string library_id = 1;

    // 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.
    string platform_unit = 2;

    // The sequencing center used as part of this experiment.
    string sequencing_center = 3;

    // The instrument model used as part of this experiment. This maps to
    // sequencing technology in the SAM spec.
    string instrument_model = 4;
  }

  message Program {
    // The command line used to run this program.
    string command_line = 1;

    // The user specified locally unique ID of the program. Used along with
    // `prevProgramId` to define an ordering between programs.
    string id = 2;

    // The display name of the program. This is typically the colloquial name of
    // the tool used, for example 'bwa' or 'picard'.
    string name = 3;

    // The ID of the program run before this one.
    string prev_program_id = 4;

    // The version of the program run.
    string version = 5;
  }

  // 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][google.genomics.v1.ReadGroup.name].
  string id = 1;

  // The dataset to which this read group belongs.
  string dataset_id = 2;

  // The read group name. This corresponds to the @RG ID field in the SAM spec.
  string name = 3;

  // A free-form text description of this read group.
  string description = 4;

  // A client-supplied sample identifier for the reads in this read group.
  string sample_id = 5;

  // The experiment used to generate this read group.
  Experiment experiment = 6;

  // 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.
  int32 predicted_insert_size = 7;

  // 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.
  repeated Program programs = 10;

  // The reference set the reads in this read group are aligned to.
  string reference_set_id = 11;

  // 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).
  map<string, google.protobuf.ListValue> info = 12;
}
