/**
   * add a user-network to data set, then compute a result using BP combining from the core networks
   * *not* including the user network that was just uploaded
   */
  @Test
  public void testBPCombiningWithoutUserNetwork() throws Exception {
    System.out.println("averageCombiningWithUserNetworkChaChaCha");
    int orgId = 1;
    int userNetworkId = -1;
    String userName = "******";

    // add a user network

    //        INetworkSymMatrixProvider provider = new CacheNetworkSymMatrixProvider(userName,
    // orgId, randomCacheBuilder.getCache());
    UserNetworkProcessor instance =
        new UserNetworkProcessor(randomCacheBuilder.getCache(), randomCacheBuilder.getCacheDir());

    UploadNetworkEngineRequestDto uploadRequest = new UploadNetworkEngineRequestDto();
    uploadRequest.setLayout(DataLayout.PROFILE);
    uploadRequest.setMethod(NetworkProcessingMethod.PEARSON);
    uploadRequest.setNamespace(userName);
    uploadRequest.setProgressReporter(NullProgressReporter.instance());
    uploadRequest.setOrganismId(orgId);
    uploadRequest.setNetworkId(userNetworkId);
    uploadRequest.setSparsification(50);

    String data = "id\tf1\tf2\tf3\n10000\t1.5\t3.0\t4.0\n10001\t2.0\t2.2\t2.1\n";
    uploadRequest.setData(new StringReader(data));

    UploadNetworkEngineResponseDto uploadResponse = instance.process(uploadRequest);
    assertNotNull(uploadResponse);

    // now send in a request for related genes, involving all the old networks plus
    // the new one

    IMania mania = new Mania2(randomCacheBuilder.getCache());

    // create request for organism 1
    RelatedGenesEngineRequestDto relatedRequest = new RelatedGenesEngineRequestDto();
    relatedRequest.setNamespace(userName);
    relatedRequest.setOrganismId(orgId);
    relatedRequest.setCombiningMethod(CombiningMethod.BP);
    relatedRequest.setScoringMethod(ScoringMethod.DISCRIMINANT);

    long[] nodeIds = randomCacheBuilder.getCache().getNodeIds(orgId).getNodeIds();

    // first 10 nodes as +ve
    ArrayList<Long> posNodes = new ArrayList<Long>();
    for (int i = 0; i < 10; i++) {
      posNodes.add((long) nodeIds[i]);
    }
    relatedRequest.setPositiveNodes(posNodes);

    // all networks less one
    Collection<Collection<Long>> requestNetworks = new ArrayList<Collection<Long>>();

    ArrayList<Long> group = new ArrayList<Long>();
    for (int i = 0; i < networkIds.length; i++) {
      group.add(networkIds[i]);
    }

    // group.add((long) userNetworkId);

    requestNetworks.add(group);
    relatedRequest.setInteractionNetworks(requestNetworks);
    relatedRequest.setLimitResults(10);
    relatedRequest.setProgressReporter(NullProgressReporter.instance());

    // compute result
    RelatedGenesEngineResponseDto relatedResponse = mania.findRelated(relatedRequest);
    assertNotNull(relatedResponse);
    assertNotNull(relatedResponse.getNetworks());
    assertFalse(relatedResponse.getNetworks().size() == 0);

    System.out.println("num networks in result: " + relatedResponse.getNetworks().size());
    for (NetworkDto n : relatedResponse.getNetworks()) {
      System.out.println(
          "  network id: "
              + n.getId()
              + " weight: "
              + n.getWeight()
              + " num interactions: "
              + n.getInteractions().size());
      for (InteractionDto interaction : n.getInteractions()) {
        /*
        System.out.println(String.format("   inter: node %s %s, node %s %s, %s",
        interaction.getNodeVO1().getId(),
        interaction.getNodeVO1().getScore(),
        interaction.getNodeVO2().getId(),
        interaction.getNodeVO2().getScore(),
        interaction.getWeight()
        ));
         */
      }
    }

    // TODO: send the same request through again, but this time using the old mania api

  }
  /*
   * helper to add a small user network to the test data set, then
   * call a related genes request with given combining method, and
   * other params set to std values
   */
  public RelatedGenesEngineResponseDto regressionHelper(CombiningMethod method) throws Exception {
    int orgId = 1;
    int userNetworkId = -1;
    String userName = "******";

    // add a user network

    //        INetworkSymMatrixProvider provider = new CacheNetworkSymMatrixProvider(userName,
    // orgId, randomCacheBuilder.getCache());
    UserNetworkProcessor instance =
        new UserNetworkProcessor(randomCacheBuilder.getCache(), randomCacheBuilder.getCacheDir());

    UploadNetworkEngineRequestDto uploadRequest = new UploadNetworkEngineRequestDto();
    uploadRequest.setLayout(DataLayout.PROFILE);
    uploadRequest.setMethod(NetworkProcessingMethod.PEARSON);
    uploadRequest.setNamespace(userName);
    uploadRequest.setProgressReporter(NullProgressReporter.instance());
    uploadRequest.setOrganismId(orgId);
    uploadRequest.setNetworkId(userNetworkId);
    uploadRequest.setSparsification(50);

    String data = "id\tf1\tf2\tf3\n10000\t1.5\t3.0\t4.0\n10001\t2.0\t2.2\t2.1\n";
    uploadRequest.setData(new StringReader(data));

    UploadNetworkEngineResponseDto uploadResponse = instance.process(uploadRequest);
    assertNotNull(uploadResponse);

    // now send in a request for related genes, involving all the old networks plus
    // the new one

    IMania mania = new Mania2(randomCacheBuilder.getCache());

    // create request for organism 1
    RelatedGenesEngineRequestDto relatedRequest = new RelatedGenesEngineRequestDto();
    relatedRequest.setNamespace(userName);
    relatedRequest.setOrganismId(orgId);
    relatedRequest.setCombiningMethod(method);
    relatedRequest.setScoringMethod(ScoringMethod.DISCRIMINANT);

    long[] nodeIds = randomCacheBuilder.getCache().getNodeIds(orgId).getNodeIds();

    // first 10 nodes as +ve
    ArrayList<Long> posNodes = new ArrayList<Long>();
    for (int i = 0; i < 10; i++) {
      posNodes.add(nodeIds[i]);
    }
    relatedRequest.setPositiveNodes(posNodes);

    // all networks
    Collection<Collection<Long>> requestNetworks = new ArrayList<Collection<Long>>();

    ArrayList<Long> group = new ArrayList<Long>();
    for (int i = 0; i < networkIds.length; i++) {
      group.add((long) networkIds[i]);
    }

    group.add((long) userNetworkId);

    requestNetworks.add(group);
    relatedRequest.setInteractionNetworks(requestNetworks);
    relatedRequest.setLimitResults(10);
    relatedRequest.setProgressReporter(NullProgressReporter.instance());

    // compute result
    RelatedGenesEngineResponseDto relatedResponse = mania.findRelated(relatedRequest);
    return relatedResponse;
  }