/* * The MIT License * * Copyright (c) 2009 The Broad Institute * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package htsjdk.samtools; import htsjdk.samtools.util.Iso8601Date; import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * Header information about a read group. */ public class SAMReadGroupRecord extends AbstractSAMHeaderRecord { private String mReadGroupId = null; public static final String READ_GROUP_ID_TAG = "ID"; public static final String READ_GROUP_SAMPLE_TAG = "SM"; public static final String PREDICTED_MEDIAN_INSERT_SIZE_TAG = "PI"; public static final String DATE_RUN_PRODUCED_TAG = "DT"; public static final String FLOW_ORDER_TAG = "FO"; public static final String KEY_SEQUENCE_TAG = "KS"; public static final String DESCRIPTION_TAG = "DS"; public static final String PLATFORM_UNIT_TAG = "PU"; public static final String SEQUENCING_CENTER_TAG = "CN"; public static final String PLATFORM_TAG = "PL"; public static final String LIBRARY_TAG = "LB"; public static final Set<String> STANDARD_TAGS = new HashSet<String>(Arrays.asList(READ_GROUP_ID_TAG, READ_GROUP_SAMPLE_TAG, LIBRARY_TAG, DESCRIPTION_TAG, PLATFORM_UNIT_TAG, PREDICTED_MEDIAN_INSERT_SIZE_TAG, SEQUENCING_CENTER_TAG, DATE_RUN_PRODUCED_TAG, PLATFORM_TAG, FLOW_ORDER_TAG, KEY_SEQUENCE_TAG)); public SAMReadGroupRecord(final String id) { mReadGroupId = id; } public SAMReadGroupRecord(final String id, final SAMReadGroupRecord srcProgramRecord) { mReadGroupId = id; for (final Map.Entry<String, String> entry : srcProgramRecord.getAttributes()) { setAttribute(entry.getKey(), entry.getValue()); } } public String getId() { return getReadGroupId(); } public String getReadGroupId() { return mReadGroupId; } public String getSample() { return getAttribute(READ_GROUP_SAMPLE_TAG); } public void setSample(final String value) { setAttribute(READ_GROUP_SAMPLE_TAG, value); } public String getLibrary() { return getAttribute(LIBRARY_TAG); } public void setLibrary(final String value) { setAttribute(LIBRARY_TAG, value); } public String getPlatformUnit() { return getAttribute(PLATFORM_UNIT_TAG); } public void setPlatformUnit(final String pu) { setAttribute(PLATFORM_UNIT_TAG, pu); } public String getPlatform() { return getAttribute(PLATFORM_TAG); } public void setPlatform(final String platform) { setAttribute(PLATFORM_TAG, platform); } public Date getRunDate() { final String dt = getAttribute(DATE_RUN_PRODUCED_TAG); if (dt == null) return null; else return new Iso8601Date(dt); } public String getFlowOrder() { return getAttribute(FLOW_ORDER_TAG); } public void setFlowOrder(final String flowOrder) { setAttribute(FLOW_ORDER_TAG, flowOrder); } public String getKeySequence() { return getAttribute(KEY_SEQUENCE_TAG); } public void setKeySequence(final String keySequence) { setAttribute(KEY_SEQUENCE_TAG, keySequence); } /** * Converts to Iso8601Date if not already in that form. */ public void setRunDate(Date runDate) { if (runDate != null && !(runDate instanceof Iso8601Date)) { runDate = new Iso8601Date(runDate); } setAttribute(DATE_RUN_PRODUCED_TAG, runDate != null ? runDate.toString() : null); } public String getSequencingCenter() { return getAttribute(SEQUENCING_CENTER_TAG); } public void setSequencingCenter(final String center) { setAttribute(SEQUENCING_CENTER_TAG, center); } public String getDescription() { return getAttribute(DESCRIPTION_TAG); } public void setDescription(final String description) { setAttribute(DESCRIPTION_TAG, description); } public Integer getPredictedMedianInsertSize() { final String stringRep = getAttribute(PREDICTED_MEDIAN_INSERT_SIZE_TAG); if (stringRep == null) return null; return Integer.parseInt(stringRep); } public void setPredictedMedianInsertSize(final Integer predictedMedianInsertSize) { setAttribute(PREDICTED_MEDIAN_INSERT_SIZE_TAG, (predictedMedianInsertSize == null? null: predictedMedianInsertSize.toString())); } /** * @return true if this == that except for the read group ID, which is arbitrary */ public boolean equivalent(final SAMReadGroupRecord that) { return attributesEqual(that); } @Override public boolean equals(final Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; final SAMReadGroupRecord that = (SAMReadGroupRecord) o; if (!attributesEqual(that)) return false; if (mReadGroupId != null ? !mReadGroupId.equals(that.mReadGroupId) : that.mReadGroupId != null) return false; return true; } @Override public int hashCode() { return mReadGroupId.hashCode(); } Set<String> getStandardTags() { return STANDARD_TAGS; } }