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()]; }