/* * Copyright 2015-2016 OpenCB * * 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. */ package org.opencb.opencga.storage.mongodb.variant.load; /** * Created on 30/10/15. * * +------+------+ * | File | DB | * +-------------+------+------+ * | 1:100:A:C | DATA | ---- | <-- NewVariants. Insert new document * +-------------+------+------+ * | 1:150:G:T | ---- | DATA | <-- Missing Variants. Update with "?/?". FillGaps * +-------------+------+------+ * | 1:200:T:C | DATA | DATA | <-- Update Variants * +-------------+------+------+ * | 1:200:T:G | ---- | DATA | <-- Overlapped Variant. Not in the input file, but present in the DB. Have to write twice. * +-------------+------+------+ * | 1:250:G:GT | DATA | ???? | <--\ * +-------------+------+------+ |-- Normalize into the same variant, duplicated information : 1:251:-:T * | 1:251:C:TC | DATA | ???? | <--/ * +-------------+------+------+ * | 1:300:GCT:G | DATA | ???? | <--\ * +-------------+------+------+ |-- Overlapped variants in the same document. Potentially inconsistent information * | 1:301:C:T | DATA | ???? | <--/ * +-------------+------+------+ * * @author Jacobo Coll <jacobo167@gmail.com> */ public class MongoDBVariantWriteResult { /** Number of new variants inserted in the Database. Variants never seen in any other study */ private long newVariants; // /** Number of new variants for this study. Variants already seen in other studies, but first time in the current study*/ // private long newStudy; /** Number of existing variants, updated with new information. */ private long updatedVariants; /** Number of existing variants that were not present in the loaded variants. Missing variants. */ private long updatedMissingVariants; /** New overlapped variants, not in the input file. */ private long overlappedVariants; /** * Ignored variants. * @see org.opencb.biodata.models.variant.avro.VariantType#SYMBOLIC * @see org.opencb.biodata.models.variant.avro.VariantType#NO_VARIATION * */ private long skippedVariants; /** Non inserted variants, due to duplicated or overlapped variants in the same file. */ private long nonInsertedVariants; /** Time in nanoseconds into inserting the new variants. */ private long newVariantsNanoTime; /** Time in nanoseconds into updating the existing variants. */ private long existingVariantsNanoTime; /** Time in nanoseconds into updating the missing variants. */ private long fillGapsNanoTime; public MongoDBVariantWriteResult() { } public MongoDBVariantWriteResult(long newVariants, long updatedVariants, long updatedMissingVariants, long overlappedVariants, long skippedVariants, long nonInsertedVariants) { this.newVariants = newVariants; this.updatedVariants = updatedVariants; this.updatedMissingVariants = updatedMissingVariants; this.overlappedVariants = overlappedVariants; this.skippedVariants = skippedVariants; this.nonInsertedVariants = nonInsertedVariants; } public MongoDBVariantWriteResult(long newVariants, long updatedVariants, long updatedMissingVariants, long overlappedVariants, long skippedVariants, long nonInsertedVariants, long newVariantsNanoTime, long existingVariantsNanoTime, long fillGapsNanoTime) { this.newVariants = newVariants; this.updatedVariants = updatedVariants; this.updatedMissingVariants = updatedMissingVariants; this.overlappedVariants = overlappedVariants; this.skippedVariants = skippedVariants; this.nonInsertedVariants = nonInsertedVariants; this.newVariantsNanoTime = newVariantsNanoTime; this.existingVariantsNanoTime = existingVariantsNanoTime; this.fillGapsNanoTime = fillGapsNanoTime; } public void merge(MongoDBVariantWriteResult... others) { for (MongoDBVariantWriteResult other : others) { newVariants += other.newVariants; updatedVariants += other.updatedVariants; updatedMissingVariants += other.updatedMissingVariants; overlappedVariants += other.overlappedVariants; skippedVariants += other.skippedVariants; nonInsertedVariants += other.nonInsertedVariants; newVariantsNanoTime += other.newVariantsNanoTime; existingVariantsNanoTime += other.existingVariantsNanoTime; fillGapsNanoTime += other.fillGapsNanoTime; } } public long getNewVariants() { return newVariants; } public MongoDBVariantWriteResult setNewVariants(long newVariants) { this.newVariants = newVariants; return this; } public long getUpdatedVariants() { return updatedVariants; } public MongoDBVariantWriteResult setUpdatedVariants(long updatedVariants) { this.updatedVariants = updatedVariants; return this; } public long getUpdatedMissingVariants() { return updatedMissingVariants; } public MongoDBVariantWriteResult setUpdatedMissingVariants(long updatedMissingVariants) { this.updatedMissingVariants = updatedMissingVariants; return this; } public long getOverlappedVariants() { return overlappedVariants; } public MongoDBVariantWriteResult setOverlappedVariants(long overlappedVariants) { this.overlappedVariants = overlappedVariants; return this; } public long getSkippedVariants() { return skippedVariants; } public MongoDBVariantWriteResult setSkippedVariants(long skippedVariants) { this.skippedVariants = skippedVariants; return this; } public long getNonInsertedVariants() { return nonInsertedVariants; } public MongoDBVariantWriteResult setNonInsertedVariants(long nonInsertedVariants) { this.nonInsertedVariants = nonInsertedVariants; return this; } public long getNewVariantsNanoTime() { return newVariantsNanoTime; } public MongoDBVariantWriteResult setNewVariantsNanoTime(long newVariantsNanoTime) { this.newVariantsNanoTime = newVariantsNanoTime; return this; } public long getExistingVariantsNanoTime() { return existingVariantsNanoTime; } public MongoDBVariantWriteResult setExistingVariantsNanoTime(long existingVariantsNanoTime) { this.existingVariantsNanoTime = existingVariantsNanoTime; return this; } public long getFillGapsNanoTime() { return fillGapsNanoTime; } public MongoDBVariantWriteResult setFillGapsNanoTime(long fillGapsNanoTime) { this.fillGapsNanoTime = fillGapsNanoTime; return this; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof MongoDBVariantWriteResult)) { return false; } MongoDBVariantWriteResult that = (MongoDBVariantWriteResult) o; if (newVariants != that.newVariants) { return false; } if (updatedVariants != that.updatedVariants) { return false; } if (updatedMissingVariants != that.updatedMissingVariants) { return false; } if (overlappedVariants != that.overlappedVariants) { return false; } if (skippedVariants != that.skippedVariants) { return false; } if (nonInsertedVariants != that.nonInsertedVariants) { return false; } if (newVariantsNanoTime != that.newVariantsNanoTime) { return false; } if (existingVariantsNanoTime != that.existingVariantsNanoTime) { return false; } return fillGapsNanoTime == that.fillGapsNanoTime; } @Override public int hashCode() { int result = (int) (newVariants ^ (newVariants >>> 32)); result = 31 * result + (int) (updatedVariants ^ (updatedVariants >>> 32)); result = 31 * result + (int) (updatedMissingVariants ^ (updatedMissingVariants >>> 32)); result = 31 * result + (int) (overlappedVariants ^ (overlappedVariants >>> 32)); result = 31 * result + (int) (skippedVariants ^ (skippedVariants >>> 32)); result = 31 * result + (int) (nonInsertedVariants ^ (nonInsertedVariants >>> 32)); result = 31 * result + (int) (newVariantsNanoTime ^ (newVariantsNanoTime >>> 32)); result = 31 * result + (int) (existingVariantsNanoTime ^ (existingVariantsNanoTime >>> 32)); result = 31 * result + (int) (fillGapsNanoTime ^ (fillGapsNanoTime >>> 32)); return result; } @Override public String toString() { return "MongoDBVariantWriteResult{" + "newVariants:" + newVariants + ", updatedVariants:" + updatedVariants + ", updatedMissingVariants:" + updatedMissingVariants + ", overlappedVariants:" + overlappedVariants + ", skippedVariants:" + skippedVariants + ", nonInsertedVariants:" + nonInsertedVariants + ", newVariantsTime=" + newVariantsNanoTime / 1000000000.0 + "s" + ", existingVariantsTime=" + existingVariantsNanoTime / 1000000000.0 + "s" + ", fillGapsTime=" + fillGapsNanoTime / 1000000000.0 + "s" + '}'; } public String toJson() { return "{\n" + "\tnewVariants:" + newVariants + ",\n" + "\tupdatedVariants:" + updatedVariants + ",\n" + "\tupdatedMissingVariants:" + updatedMissingVariants + ",\n" + "\toverlappedVariants:" + overlappedVariants + ",\n" + "\tskippedVariants:" + skippedVariants + ",\n" + "\tnonInsertedVariants:" + nonInsertedVariants + ",\n" + "\tnewVariantsTime:" + newVariantsNanoTime / 1000000000.0 + ",\n" + "\texistingVariantsTime:" + existingVariantsNanoTime / 1000000000.0 + ",\n" + "\tfillGapsTime:" + fillGapsNanoTime / 1000000000.0 + "\n" + '}'; } public String toTSV() { return "#newVariants\tupdatedVariants\tupdatedMissingVariants\toverlappedVariants\tskippedVariants\tnonInsertedVariants" + "\tnewVariantsTime\texistingVariantsTime\tfillGapsTime\t" + "\n" + newVariants + '\t' + updatedVariants + '\t' + updatedMissingVariants + '\t' + overlappedVariants + '\t' + skippedVariants + '\t' + nonInsertedVariants + '\t' + newVariantsNanoTime / 1000000000.0 + '\t' + existingVariantsNanoTime / 1000000000.0 + '\t' + fillGapsNanoTime / 1000000000.0; } }