CalculationThread(
      int i,
      LinkedBlockingQueue<WorkPackage> packageQueue,
      LinkedBlockingQueue<WorkPackage> resultQueue,
      TriTyperExpressionData[] expressiondata,
      DoubleMatrixDataset<String, String>[] covariates,
      IntMatrix2D probeTranslationTable,
      int[][] expressionToGenotypeIds,
      Settings settings,
      EQTLPlotter plotter,
      boolean binaryoutput,
      boolean useAbsoluteZScores,
      boolean testSNPsPresentInBothDatasets) {
    //        m_binaryoutput = binaryoutput;
    m_name = i;
    m_workpackage_queue = packageQueue;
    m_result_queue = resultQueue;
    m_probeTranslation = probeTranslationTable;
    m_expressiondata = expressiondata;
    boolean m_cis = settings.cisAnalysis;
    boolean m_trans = settings.transAnalysis;
    metaAnalyseInteractionTerms = settings.metaAnalyseInteractionTerms;
    metaAnalyseModelCorrelationYHat = settings.metaAnalyseModelCorrelationYHat;
    m_useAbsoluteZScores = useAbsoluteZScores;
    m_name = i;
    m_numProbes = m_probeTranslation.columns();
    m_numDatasets = m_probeTranslation.rows();
    m_expressionToGenotypeIds = expressionToGenotypeIds;

    //        probeVariance = new double[m_numDatasets][0];
    //        probeMean = new double[m_numDatasets][0];
    //        probeName = new String[m_numDatasets][0];
    //        for (int d = 0; d < m_numDatasets; d++) {
    //            probeVariance[d] = expressiondata[d].getProbeVariance();
    //            probeMean[d] = expressiondata[d].getProbeMean();
    //            probeName[d] = expressiondata[d].getProbes();
    //        }

    m_covariates = covariates;

    this.testSNPsPresentInBothDatasets = testSNPsPresentInBothDatasets;

    cisOnly = false;
    //        cisTrans = false;
    transOnly = false;

    determinebeta = settings.provideBetasAndStandardErrors;
    determinefoldchange = settings.provideFoldChangeData;

    if (m_cis && !m_trans) {
      cisOnly = true;
    } else if (!m_cis && m_trans) {
      transOnly = true;
    }
    //        else if (m_cis && m_trans) {
    //            cisTrans = true;
    //        }

    m_eQTLPlotter = plotter;
    m_pvaluePlotThreshold = settings.plotOutputPValueCutOff;

    //        if (covariates != null) {
    //            try {
    //                rConnection = new RConnection();
    //                REXP x = rConnection.eval("R.version.string");
    //                System.out.println("Thread made R Connection: " + x.asString());
    ////                rConnection.voidEval("install.packages('sandwich')");
    //                rConnection.voidEval("library(sandwich)");
    //            } catch (RserveException ex) {
    //                Logger.getLogger(CalculationThread.class.getName()).log(Level.SEVERE, null,
    // ex);
    //                rConnection = null;
    //            } catch (REXPMismatchException ex) {
    //                Logger.getLogger(CalculationThread.class.getName()).log(Level.SEVERE, null,
    // ex);
    //                rConnection = null;
    //            }
    //        }
  }