Exemple #1
0
    private void parseEffectMetadata(String[] effectMetadata) {
      if (effectMetadata.length != EXPECTED_NUMBER_OF_METADATA_FIELDS) {
        if (effectMetadata.length == NUMBER_OF_METADATA_FIELDS_UPON_EITHER_WARNING_OR_ERROR) {
          parseError(
              String.format(
                  "SnpEff issued the following warning or error: \"%s\"",
                  effectMetadata[SNPEFF_WARNING_OR_ERROR_FIELD_UPON_SINGLE_ERROR]));
        } else if (effectMetadata.length == NUMBER_OF_METADATA_FIELDS_UPON_BOTH_WARNING_AND_ERROR) {
          parseError(
              String.format(
                  "SnpEff issued the following warning: \"%s\", and the following error: \"%s\"",
                  effectMetadata[SNPEFF_WARNING_FIELD_UPON_BOTH_WARNING_AND_ERROR],
                  effectMetadata[SNPEFF_ERROR_FIELD_UPON_BOTH_WARNING_AND_ERROR]));
        } else {
          parseError(
              String.format(
                  "Wrong number of effect metadata fields. Expected %d but found %d",
                  EXPECTED_NUMBER_OF_METADATA_FIELDS, effectMetadata.length));
        }

        return;
      }

      // The impact field will never be empty, and should always contain one of the enumerated
      // values:
      try {
        impact = EffectImpact.valueOf(effectMetadata[InfoFieldKey.IMPACT_KEY.getFieldIndex()]);
      } catch (IllegalArgumentException e) {
        parseError(
            String.format(
                "Unrecognized value for effect impact: %s",
                effectMetadata[InfoFieldKey.IMPACT_KEY.getFieldIndex()]));
      }

      // The functional class field will be empty when the effect has no functional class associated
      // with it:
      if (effectMetadata[InfoFieldKey.FUNCTIONAL_CLASS_KEY.getFieldIndex()].trim().length() > 0) {
        try {
          functionalClass =
              EffectFunctionalClass.valueOf(
                  effectMetadata[InfoFieldKey.FUNCTIONAL_CLASS_KEY.getFieldIndex()]);
        } catch (IllegalArgumentException e) {
          parseError(
              String.format(
                  "Unrecognized value for effect functional class: %s",
                  effectMetadata[InfoFieldKey.FUNCTIONAL_CLASS_KEY.getFieldIndex()]));
        }
      } else {
        functionalClass = EffectFunctionalClass.NONE;
      }

      codonChange = effectMetadata[InfoFieldKey.CODON_CHANGE_KEY.getFieldIndex()];
      aminoAcidChange = effectMetadata[InfoFieldKey.AMINO_ACID_CHANGE_KEY.getFieldIndex()];
      geneName = effectMetadata[InfoFieldKey.GENE_NAME_KEY.getFieldIndex()];
      geneBiotype = effectMetadata[InfoFieldKey.GENE_BIOTYPE_KEY.getFieldIndex()];

      // The coding field will be empty when SnpEff has no coding info for the effect:
      if (effectMetadata[SNPEFF_CODING_FIELD_INDEX].trim().length() > 0) {
        try {
          coding = EffectCoding.valueOf(effectMetadata[SNPEFF_CODING_FIELD_INDEX]);
        } catch (IllegalArgumentException e) {
          parseError(
              String.format(
                  "Unrecognized value for effect coding: %s",
                  effectMetadata[SNPEFF_CODING_FIELD_INDEX]));
        }
      } else {
        coding = EffectCoding.UNKNOWN;
      }

      transcriptID = effectMetadata[InfoFieldKey.TRANSCRIPT_ID_KEY.getFieldIndex()];
      exonID = effectMetadata[InfoFieldKey.EXON_ID_KEY.getFieldIndex()];
    }