1. compile cpp file under CppLib with support of JNI (search "Java Native Interface" for details).
2. install openmpi 1.8 or later with Java-support option on.
3. prepare data, data format:
  a. mRNA expression table: 1 row header, 2 column headers (1 column is gene name, another one is not used); 
  b. DNA methylation beta value table: 1 row header, 2 column headers (cpg id, gene symbols of genes whose TSS contains corresponding CpG sites)
  c. TF list, a list of two columns and one header row. first column contains gene symbols the second column is not used.
  d. CNV value table: 1 row header, 1 column header containing gene symbols.
4. Use `fixIndex.py` to add artificial shuffled data into tables.
5. modify step1N/runJar.sh to run MI and cMI calculation.
6. run convertBin.m to import result into matlab and save it to disk.
7. Use step1N/pvGen2.py to generate a series of parallel job scripts to calculate p-value and then use generated script to combine them.
8. use step1N/determine_p_value.m to determine a proper p-value. Then output a tab-seperated text file containing two columns.  The first column is the index of triplet in the p-value table and the second column is the cMI value of the triplet in the cMI table.
9. modify step2N/step2.jar to run step2 calculation.
10. fetch the outcome and use the p-value to filter triplets.  And then use the index to extract corresponding triplets.