/** Gets all Genomic Data. */
  private ProfileDataSummary getGenomicData(
      String cancerStudyId,
      HashMap<String, GeneticProfile> defaultGeneticProfileSet,
      SampleList defaultSampleSet,
      String geneListStr,
      ArrayList<SampleList> sampleList,
      HttpServletRequest request,
      HttpServletResponse response)
      throws IOException, ServletException, DaoException {

    // parse geneList, written in the OncoPrintSpec language (except for changes by XSS clean)
    double zScore =
        ZScoreUtil.getZScore(
            new HashSet<String>(defaultGeneticProfileSet.keySet()),
            new ArrayList<GeneticProfile>(defaultGeneticProfileSet.values()),
            request);
    double rppaScore = ZScoreUtil.getRPPAScore(request);

    ParserOutput theOncoPrintSpecParserOutput =
        OncoPrintSpecificationDriver.callOncoPrintSpecParserDriver(
            geneListStr,
            new HashSet<String>(defaultGeneticProfileSet.keySet()),
            new ArrayList<GeneticProfile>(defaultGeneticProfileSet.values()),
            zScore,
            rppaScore);

    ArrayList<String> geneList = new ArrayList<String>();
    geneList.addAll(theOncoPrintSpecParserOutput.getTheOncoPrintSpecification().listOfGenes());

    ArrayList<ProfileData> profileDataList = new ArrayList<ProfileData>();
    Set<String> warningUnion = new HashSet<String>();

    for (GeneticProfile profile : defaultGeneticProfileSet.values()) {
      try {
        GetProfileData remoteCall =
            new GetProfileData(
                profile, geneList, StringUtils.join(defaultSampleSet.getSampleList(), " "));
        ProfileData pData = remoteCall.getProfileData();
        warningUnion.addAll(remoteCall.getWarnings());
        profileDataList.add(pData);
      } catch (IllegalArgumentException e) {
        e.getStackTrace();
      }
    }

    ProfileMerger merger = new ProfileMerger(profileDataList);
    ProfileData mergedProfile = merger.getMergedProfile();

    ProfileDataSummary dataSummary =
        new ProfileDataSummary(
            mergedProfile,
            theOncoPrintSpecParserOutput.getTheOncoPrintSpecification(),
            zScore,
            rppaScore);
    return dataSummary;
  }
  void readValue(VRMLparser parser) throws IOException {
    // no [] around data (SFImage is a "single" field)
    StrTokenizer st = parser.istok;
    ParserOutput pout = parser.pout;

    values.clearData(); // clear default image
    changed = true;

    read1Value(parser); // width
    if (readerror) {
      pout.error(
          "[SFImage] [Error] width (int) expected on parsing SFImage " + Node.atCurrLine(st));
      return;
    }

    read1Value(parser); // height
    if (readerror) {
      pout.error(
          "[SFImage] [Error] height (int) expected on parsing SFImage " + Node.atCurrLine(st));
      return;
    }

    read1Value(parser); // no. of components
    if (readerror) {
      pout.error(
          "[SFImage] [Error] no. of components (int) expected on parsing SFImage "
              + Node.atCurrLine(st));
      return;
    }

    int[] vals = values.getData();
    // System.out.println ("SFImage. width: " + vals[0] + ", height: " + vals[1]);
    int numpixel = vals[0] * vals[1]; // read (width*height) pixels
    for (int i = 0; i < numpixel; i++) {
      read1Value(parser);
      if (readerror) {
        pout.error(
            "[SFImage] [Error] could not read pixel no. "
                + i
                + " of SFImage (total "
                + numpixel
                + ")"
                + Node.atCurrLine(st));
        return;
      }
    } // for
  } // readValue