private double calcPval( HashMap<Integer, String> singleGeneCaseValueMap, String profileType, String profileStableId) throws IllegalArgumentException { double _p_value = 0.0; if (profileType.equals(GeneticAlterationType.MUTATION_EXTENDED.toString()) || profileType.equals(GeneticAlterationType.COPY_NUMBER_ALTERATION.toString())) { _p_value = runFisherExactTest(singleGeneCaseValueMap, profileType); } else if (profileType.equals(GeneticAlterationType.MRNA_EXPRESSION.toString()) || profileType.equals(GeneticAlterationType.PROTEIN_LEVEL.toString())) { _p_value = runTTest(singleGeneCaseValueMap, profileStableId); } return _p_value; }
@Override public ObjectNode process(long entrezGeneId, String[] values, ArrayList<Integer> sampleList) { ObjectNode _datum = mapper.createObjectNode(); // create map to pair sample and value HashMap<Integer, String> mapSampleValue = new HashMap<>(); for (int i = 0; i < values.length; i++) { String value = values[i]; Integer sampleId = sampleList.get(i); mapSampleValue.put(sampleId, value); } // remove empty entry Iterator it = mapSampleValue.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry) it.next(); if (pair.getValue().equals("NA") || pair.getValue().equals("NaN") || pair.getValue().equals("null")) { it.remove(); } } // get Gene Name and Cytoband DaoGeneOptimized daoGeneOptimized = DaoGeneOptimized.getInstance(); String geneName = daoGeneOptimized.getGene(entrezGeneId).getHugoGeneSymbolAllCaps(); String cytoband = daoGeneOptimized.getGene(entrezGeneId).getCytoband(); // statistics analysis if (profileType.equals(GeneticAlterationType.COPY_NUMBER_ALTERATION.toString())) { if (!(Arrays.asList(queriedGenes)).contains(geneName)) { // remove queried genes from result _datum.put(COL_NAME_GENE, geneName); _datum.put(COL_NAME_CYTOBAND, cytoband); _datum.put( COL_NAME_PCT_ALTERED, Integer.toString(countAltered(mapSampleValue, profileType, "altered")) + "////" + Double.toString(calcPct(mapSampleValue, profileType, "altered"))); _datum.put( COL_NAME_PCT_UNALTERED, Integer.toString(countAltered(mapSampleValue, profileType, "unaltered")) + "////" + Double.toString(calcPct(mapSampleValue, profileType, "unaltered"))); _datum.put( COL_NAME_RATIO, calcRatio( calcPct(mapSampleValue, profileType, "altered"), calcPct(mapSampleValue, profileType, "unaltered"))); _datum.put(COL_NAME_DIRECTION, "place holder"); // calculation is done by the front-end _datum.put(COL_NAME_P_VALUE, calcPval(mapSampleValue, profileType, geneticProfileStableId)); if (!(calcPct(mapSampleValue, profileType, "altered") == 0.0 && calcPct(mapSampleValue, profileType, "unaltered") == 0.0) && !Double.isNaN(calcPval(mapSampleValue, profileType, geneticProfileStableId))) { return _datum; } } } else if (profileType.equals(GeneticAlterationType.MRNA_EXPRESSION.toString())) { _datum.put(COL_NAME_GENE, geneName); _datum.put(COL_NAME_CYTOBAND, cytoband); _datum.put( COL_NAME_MEAN_ALTERED, calcMean(mapSampleValue, "altered", geneticProfileStableId)); _datum.put( COL_NAME_MEAN_UNALTERED, calcMean(mapSampleValue, "unaltered", geneticProfileStableId)); _datum.put( COL_NAME_STDEV_ALTERED, calcSTDev(mapSampleValue, "altered", geneticProfileStableId)); _datum.put( COL_NAME_STDEV_UNALTERED, calcSTDev(mapSampleValue, "unaltered", geneticProfileStableId)); _datum.put(COL_NAME_P_VALUE, calcPval(mapSampleValue, profileType, geneticProfileStableId)); if (!Double.isNaN(calcPval(mapSampleValue, profileType, geneticProfileStableId))) { return _datum; } } else if (profileType.equals(GeneticAlterationType.PROTEIN_LEVEL.toString())) { _datum.put(COL_NAME_GENE, geneName); _datum.put(COL_NAME_CYTOBAND, cytoband); _datum.put( COL_NAME_MEAN_ALTERED, calcMean(mapSampleValue, "altered", geneticProfileStableId)); _datum.put( COL_NAME_MEAN_UNALTERED, calcMean(mapSampleValue, "unaltered", geneticProfileStableId)); _datum.put( COL_NAME_STDEV_ALTERED, calcSTDev(mapSampleValue, "altered", geneticProfileStableId)); _datum.put( COL_NAME_STDEV_UNALTERED, calcSTDev(mapSampleValue, "unaltered", geneticProfileStableId)); _datum.put(COL_NAME_P_VALUE, calcPval(mapSampleValue, profileType, geneticProfileStableId)); if (!Double.isNaN(calcPval(mapSampleValue, profileType, geneticProfileStableId))) { return _datum; } } return null; }