use of edu.cmu.tetrad.data.DataModel in project tetrad by cmu-phil.
the class SubsetContinuousVariablesAction method actionPerformed.
/**
* Performs the action of loading a session from a file.
*/
public void actionPerformed(ActionEvent e) {
DataModel selectedDataModel = getDataEditor().getSelectedDataModel();
if (selectedDataModel instanceof DataSet) {
DataSet dataSet = (DataSet) selectedDataModel;
List variables = dataSet.getVariables();
int n = 0;
for (Object variable : variables) {
if (variable instanceof ContinuousVariable) {
n++;
}
}
if (n == 0) {
JOptionPane.showMessageDialog(getDataEditor(), "There are no continuous variables in this data set.");
return;
}
int[] indices = new int[n];
int m = -1;
for (int i = 0; i < variables.size(); i++) {
if (variables.get(i) instanceof ContinuousVariable) {
indices[++m] = i;
}
}
dataSet = dataSet.subsetColumns(indices);
DataModelList list = new DataModelList();
list.add(dataSet);
getDataEditor().reset(list);
getDataEditor().selectFirstTab();
} else {
JOptionPane.showMessageDialog(JOptionUtils.centeringComp(), "Requires a tabular data set.");
}
}
use of edu.cmu.tetrad.data.DataModel in project tetrad by cmu-phil.
the class SplitCasesParamsEditor method setParentModels.
public void setParentModels(Object[] parentModels) {
if (parentModels == null || parentModels.length == 0) {
throw new IllegalArgumentException("There must be parent model");
}
DataWrapper data = null;
for (Object parent : parentModels) {
if (parent instanceof DataWrapper) {
data = (DataWrapper) parent;
}
}
if (data == null) {
throw new IllegalArgumentException("Should have have a data wrapper as a parent");
}
DataModel model = data.getSelectedDataModel();
if (!(model instanceof DataSet)) {
throw new IllegalArgumentException("The data must be tabular");
}
this.dataSet = (DataSet) model;
}
use of edu.cmu.tetrad.data.DataModel in project tetrad by cmu-phil.
the class SearchParamEditor method setup.
public void setup() {
/*
The variable names from the object being searched over (usually data).
*/
List varNames = (List<String>) params.get("varNames", null);
DataModel dataModel1 = null;
Graph graph = null;
for (Object parentModel1 : parentModels) {
if (parentModel1 instanceof DataWrapper) {
DataWrapper dataWrapper = (DataWrapper) parentModel1;
dataModel1 = dataWrapper.getSelectedDataModel();
}
if (parentModel1 instanceof GraphWrapper) {
GraphWrapper graphWrapper = (GraphWrapper) parentModel1;
graph = graphWrapper.getGraph();
}
if (parentModel1 instanceof DagWrapper) {
DagWrapper dagWrapper = (DagWrapper) parentModel1;
graph = dagWrapper.getDag();
}
if (parentModel1 instanceof SemGraphWrapper) {
SemGraphWrapper semGraphWrapper = (SemGraphWrapper) parentModel1;
graph = semGraphWrapper.getGraph();
}
}
if (dataModel1 != null) {
varNames = new ArrayList(dataModel1.getVariableNames());
} else if (graph != null) {
Iterator it = graph.getNodes().iterator();
varNames = new ArrayList();
Node temp;
while (it.hasNext()) {
temp = (Node) it.next();
if (temp.getNodeType() == NodeType.MEASURED) {
varNames.add(temp.getName());
}
}
} else {
throw new NullPointerException("Null model (no graph or data model " + "passed to the search).");
}
params.set("varNames", varNames);
IntTextField depthField = new IntTextField(params.getInt("depth", -1), 4);
depthField.setFilter(new IntTextField.Filter() {
public int filter(int value, int oldValue) {
try {
params.set("depth", value);
Preferences.userRoot().putInt("depth", value);
return value;
} catch (Exception e) {
return oldValue;
}
}
});
double alpha = params.getDouble("alpha", 0.001);
if (!Double.isNaN(alpha)) {
alphaField = new DoubleTextField(alpha, 4, NumberFormatUtil.getInstance().getNumberFormat());
alphaField.setFilter(new DoubleTextField.Filter() {
public double filter(double value, double oldValue) {
try {
params.set("alpha", 0.001);
Preferences.userRoot().putDouble("alpha", value);
return value;
} catch (Exception e) {
return oldValue;
}
}
});
}
setBorder(new MatteBorder(10, 10, 10, 10, super.getBackground()));
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
if (!Double.isNaN(alpha)) {
Box b0 = Box.createHorizontalBox();
b0.add(new JLabel("Alpha Value:"));
b0.add(Box.createGlue());
b0.add(alphaField);
add(b0);
add(Box.createVerticalStrut(10));
}
Box b1 = Box.createHorizontalBox();
b1.add(new JLabel("Search Depth:"));
b1.add(Box.createGlue());
b1.add(depthField);
add(b1);
add(Box.createVerticalStrut(10));
}
use of edu.cmu.tetrad.data.DataModel in project tetrad by cmu-phil.
the class TimeoutComparison method doRun.
private void doRun(List<AlgorithmSimulationWrapper> algorithmSimulationWrappers, List<AlgorithmWrapper> algorithmWrappers, List<SimulationWrapper> simulationWrappers, Statistics statistics, int numGraphTypes, double[][][][] allStats, Run run) {
System.out.println();
System.out.println("Run " + (run.getRunIndex() + 1));
System.out.println();
AlgorithmSimulationWrapper algorithmSimulationWrapper = algorithmSimulationWrappers.get(run.getAlgSimIndex());
AlgorithmWrapper algorithmWrapper = algorithmSimulationWrapper.getAlgorithmWrapper();
SimulationWrapper simulationWrapper = algorithmSimulationWrapper.getSimulationWrapper();
DataModel data = simulationWrapper.getDataModel(run.getRunIndex());
Graph trueGraph = simulationWrapper.getTrueGraph(run.getRunIndex());
System.out.println((run.getAlgSimIndex() + 1) + ". " + algorithmWrapper.getDescription() + " simulationWrapper: " + simulationWrapper.getDescription());
long start = System.currentTimeMillis();
Graph out;
try {
Algorithm algorithm = algorithmWrapper.getAlgorithm();
Simulation simulation = simulationWrapper.getSimulation();
if (algorithm instanceof HasKnowledge && simulation instanceof HasKnowledge) {
((HasKnowledge) algorithm).setKnowledge(((HasKnowledge) simulation).getKnowledge());
}
if (algorithmWrapper.getAlgorithm() instanceof ExternalAlgorithm) {
ExternalAlgorithm external = (ExternalAlgorithm) algorithmWrapper.getAlgorithm();
external.setSimulation(simulationWrapper.getSimulation());
external.setPath(resultsPath);
external.setSimIndex(simulationWrappers.indexOf(simulationWrapper));
}
if (algorithm instanceof MultiDataSetAlgorithm) {
List<Integer> indices = new ArrayList<>();
int numDataModels = simulationWrapper.getSimulation().getNumDataModels();
for (int i = 0; i < numDataModels; i++) {
indices.add(i);
}
Collections.shuffle(indices);
List<DataModel> dataModels = new ArrayList<>();
int randomSelectionSize = algorithmWrapper.getAlgorithmSpecificParameters().getInt("randomSelectionSize");
for (int i = 0; i < Math.min(numDataModels, randomSelectionSize); i++) {
dataModels.add(simulationWrapper.getSimulation().getDataModel(indices.get(i)));
}
Parameters _params = algorithmWrapper.getAlgorithmSpecificParameters();
out = ((MultiDataSetAlgorithm) algorithm).search(dataModels, _params);
} else {
DataModel dataModel = copyData ? data.copy() : data;
Parameters _params = algorithmWrapper.getAlgorithmSpecificParameters();
out = algorithm.search(dataModel, _params);
}
} catch (Exception e) {
System.out.println("Could not run " + algorithmWrapper.getDescription());
e.printStackTrace();
return;
}
int simIndex = simulationWrappers.indexOf(simulationWrapper) + 1;
int algIndex = algorithmWrappers.indexOf(algorithmWrapper) + 1;
long stop = System.currentTimeMillis();
long elapsed = stop - start;
saveGraph(resultsPath, out, run.getRunIndex(), simIndex, algIndex, algorithmWrapper, elapsed);
if (trueGraph != null) {
out = GraphUtils.replaceNodes(out, trueGraph.getNodes());
}
if (algorithmWrapper.getAlgorithm() instanceof ExternalAlgorithm) {
ExternalAlgorithm extAlg = (ExternalAlgorithm) algorithmWrapper.getAlgorithm();
extAlg.setSimIndex(simulationWrappers.indexOf(simulationWrapper));
extAlg.setSimulation(simulationWrapper.getSimulation());
extAlg.setPath(resultsPath);
elapsed = extAlg.getElapsedTime(data, simulationWrapper.getSimulationSpecificParameters());
}
Graph[] est = new Graph[numGraphTypes];
Graph comparisonGraph;
if (this.comparisonGraph == ComparisonGraph.true_DAG) {
comparisonGraph = new EdgeListGraph(trueGraph);
} else if (this.comparisonGraph == ComparisonGraph.Pattern_of_the_true_DAG) {
comparisonGraph = SearchGraphUtils.patternForDag(new EdgeListGraph(trueGraph));
} else if (this.comparisonGraph == ComparisonGraph.PAG_of_the_true_DAG) {
comparisonGraph = new DagToPag(new EdgeListGraph(trueGraph)).convert();
} else {
throw new IllegalArgumentException("Unrecognized graph type.");
}
// Graph comparisonGraph = trueGraph == null ? null : algorithmSimulationWrapper.getComparisonGraph(trueGraph);
est[0] = out;
graphTypeUsed[0] = true;
if (data.isMixed()) {
est[1] = getSubgraph(out, true, true, data);
est[2] = getSubgraph(out, true, false, data);
est[3] = getSubgraph(out, false, false, data);
graphTypeUsed[1] = true;
graphTypeUsed[2] = true;
graphTypeUsed[3] = true;
}
Graph[] truth = new Graph[numGraphTypes];
truth[0] = comparisonGraph;
if (data.isMixed() && comparisonGraph != null) {
truth[1] = getSubgraph(comparisonGraph, true, true, data);
truth[2] = getSubgraph(comparisonGraph, true, false, data);
truth[3] = getSubgraph(comparisonGraph, false, false, data);
}
if (comparisonGraph != null) {
for (int u = 0; u < numGraphTypes; u++) {
if (!graphTypeUsed[u]) {
continue;
}
int statIndex = -1;
for (Statistic _stat : statistics.getStatistics()) {
statIndex++;
if (_stat instanceof ParameterColumn) {
continue;
}
double stat;
if (_stat instanceof ElapsedTime) {
stat = elapsed / 1000.0;
} else {
stat = _stat.getValue(truth[u], est[u]);
}
allStats[u][run.getAlgSimIndex()][statIndex][run.getRunIndex()] = stat;
}
}
}
}
use of edu.cmu.tetrad.data.DataModel in project tetrad by cmu-phil.
the class GeneralAlgorithmEditor method doRemoteCompute.
private void doRemoteCompute(final GeneralAlgorithmRunner runner, final HpcAccount hpcAccount) throws Exception {
// **********************
// Show progress panel *
// **********************
Frame ancestor = (Frame) JOptionUtils.centeringComp().getTopLevelAncestor();
final JDialog progressDialog = new JDialog(ancestor, "HPC Job Submission's Progress...", false);
Dimension progressDim = new Dimension(500, 150);
JTextArea progressTextArea = new JTextArea();
progressTextArea.setPreferredSize(progressDim);
progressTextArea.setEditable(false);
JScrollPane progressScroller = new JScrollPane(progressTextArea);
progressScroller.setAlignmentX(LEFT_ALIGNMENT);
progressDialog.setLayout(new BorderLayout());
progressDialog.getContentPane().add(progressScroller, BorderLayout.CENTER);
progressDialog.pack();
Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
progressDialog.setLocation((screenDim.width - progressDim.width) / 2, (screenDim.height - progressDim.height) / 2);
progressDialog.setVisible(true);
int totalProcesses = 4;
String newline = "\n";
String tab = "\t";
int progressTextLength = 0;
DataModel dataModel = runner.getDataModel();
// 1. Generate temp file
Path file = null;
Path prior = null;
try {
// ****************************
// Data Preparation Progress *
// ****************************
String dataMessage = String.format("1/%1$d Data Preparation", totalProcesses);
progressTextArea.append(dataMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
file = Files.createTempFile("Tetrad-data-", ".txt");
// LOGGER.info(file.toAbsolutePath().toString());
List<String> tempLine = new ArrayList<>();
// Header
List<Node> variables = dataModel.getVariables();
if ((variables == null || variables.isEmpty()) && runner.getSourceGraph() != null) {
variables = runner.getSourceGraph().getNodes();
}
String vars = StringUtils.join(variables.toArray(), tab);
tempLine.add(vars);
// Data
DataSet dataSet = (DataSet) dataModel;
for (int i = 0; i < dataSet.getNumRows(); i++) {
String line = null;
for (int j = 0; j < dataSet.getNumColumns(); j++) {
String cell = null;
if (dataSet.isContinuous()) {
cell = String.valueOf(dataSet.getDouble(i, j));
} else {
cell = String.valueOf(dataSet.getInt(i, j));
}
if (line == null) {
line = cell;
} else {
line = line + "\t" + cell;
}
}
tempLine.add(line);
}
// for (String line : tempLine) {
// LOGGER.info(line);
// }
Files.write(file, tempLine);
// Get file's MD5 hash and use it as its identifier
String datasetMd5 = MessageDigestHash.computeMD5Hash(file);
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
// ***************************************
// Prior Knowledge Preparation Progress *
// ***************************************
String priorMessage = String.format("2/%1$d Prior Knowledge Preparation", totalProcesses);
progressTextArea.append(priorMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
// 2. Generate temp prior knowledge file
Knowledge2 knowledge = (Knowledge2) dataModel.getKnowledge();
if (knowledge != null && !knowledge.isEmpty()) {
prior = Files.createTempFile(file.getFileName().toString(), ".prior");
knowledge.saveKnowledge(Files.newBufferedWriter(prior));
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
} else {
progressTextArea.replaceRange("Skipped", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
}
// Get knowledge file's MD5 hash and use it as its identifier
String priorKnowledgeMd5 = null;
if (prior != null) {
priorKnowledgeMd5 = MessageDigestHash.computeMD5Hash(prior);
}
// *******************************************
// Algorithm Parameter Preparation Progress *
// *******************************************
String algorMessage = String.format("3/%1$d Algorithm Preparation", totalProcesses);
progressTextArea.append(algorMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
// 3.1 Algorithm Id, Independent Test Id, Score Id
AlgorithmModel algoModel = algorithmList.getSelectedValue();
String algoId = algoModel.getAlgorithm().getAnnotation().command();
// Test
String testId = null;
if (indTestComboBox.isEnabled()) {
IndependenceTestModel indTestModel = indTestComboBox.getItemAt(indTestComboBox.getSelectedIndex());
testId = indTestModel.getIndependenceTest().getAnnotation().command();
}
// Score
String scoreId = null;
if (scoreComboBox.isEnabled()) {
ScoreModel scoreModel = scoreComboBox.getItemAt(scoreComboBox.getSelectedIndex());
scoreId = scoreModel.getScore().getAnnotation().command();
}
// 3.2 Parameters
AlgorithmParamRequest algorithmParamRequest = new AlgorithmParamRequest();
// Test and score
algorithmParamRequest.setTestId(testId);
algorithmParamRequest.setScoreId(scoreId);
// Dataset and Prior paths
String datasetPath = file.toAbsolutePath().toString();
LOGGER.info(datasetPath);
algorithmParamRequest.setDatasetPath(datasetPath);
algorithmParamRequest.setDatasetMd5(datasetMd5);
if (prior != null) {
String priorKnowledgePath = prior.toAbsolutePath().toString();
LOGGER.info(priorKnowledgePath);
algorithmParamRequest.setPriorKnowledgePath(priorKnowledgePath);
algorithmParamRequest.setPriorKnowledgeMd5(priorKnowledgeMd5);
}
// VariableType
if (dataModel.isContinuous()) {
algorithmParamRequest.setVariableType("continuous");
} else if (dataModel.isDiscrete()) {
algorithmParamRequest.setVariableType("discrete");
} else {
algorithmParamRequest.setVariableType("mixed");
}
// FileDelimiter
// Pre-determined
String fileDelimiter = "tab";
algorithmParamRequest.setFileDelimiter(fileDelimiter);
Set<AlgorithmParameter> AlgorithmParameters = new HashSet<>();
Parameters parameters = runner.getParameters();
List<String> parameterNames = runner.getAlgorithm().getParameters();
for (String parameter : parameterNames) {
String value = parameters.get(parameter).toString();
LOGGER.info("parameter: " + parameter + "\tvalue: " + value);
if (value != null) {
AlgorithmParameter algorParam = new AlgorithmParameter();
algorParam.setParameter(parameter);
algorParam.setValue(value);
AlgorithmParameters.add(algorParam);
}
}
algorithmParamRequest.setAlgorithmParameters(AlgorithmParameters);
String maxHeapSize = null;
do {
maxHeapSize = JOptionPane.showInputDialog(progressDialog, "Enter Your Request Java Max Heap Size (GB):", "5");
} while (maxHeapSize != null && !StringUtils.isNumeric(maxHeapSize));
if (maxHeapSize != null) {
JvmOptions jvmOptions = new JvmOptions();
jvmOptions.setMaxHeapSize(Integer.parseInt(maxHeapSize));
algorithmParamRequest.setJvmOptions(jvmOptions);
}
// Hpc parameters
final HpcAccountManager hpcAccountManager = desktop.getHpcAccountManager();
JsonWebToken jsonWebToken = HpcAccountUtils.getJsonWebToken(hpcAccountManager, hpcAccount);
if (jsonWebToken.getWallTime() != null) {
// User allowed to customize the job's wall time
String[] wallTime = jsonWebToken.getWallTime();
Object userwallTime = JOptionPane.showInputDialog(progressDialog, "Wall Time:", "Choose Your Wall Time (in Hour)", JOptionPane.QUESTION_MESSAGE, null, wallTime, wallTime[0]);
if (wallTime != null && userwallTime != null) {
HpcParameter hpcParameter = new HpcParameter();
hpcParameter.setKey("walltime");
hpcParameter.setValue(userwallTime.toString());
LOGGER.info("walltime: " + userwallTime.toString());
Set<HpcParameter> hpcParameters = new HashSet<>();
hpcParameters.add(hpcParameter);
algorithmParamRequest.setHpcParameters(hpcParameters);
}
}
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
// ********************************
// Adding HPC Job Queue Progress *
// ********************************
String dbMessage = String.format("4/%1$d HPC Job Queue Submission", totalProcesses);
progressTextArea.append(dbMessage);
progressTextArea.append(tab);
progressTextLength = progressTextArea.getText().length();
progressTextArea.append("Preparing...");
progressTextArea.updateUI();
HpcJobManager hpcJobManager = desktop.getHpcJobManager();
// 4.1 Save HpcJobInfo
hpcJobInfo = new HpcJobInfo();
hpcJobInfo.setAlgoId(algoId);
hpcJobInfo.setAlgorithmParamRequest(algorithmParamRequest);
hpcJobInfo.setStatus(-1);
hpcJobInfo.setHpcAccount(hpcAccount);
hpcJobManager.submitNewHpcJobToQueue(hpcJobInfo, this);
progressTextArea.replaceRange("Done", progressTextLength, progressTextArea.getText().length());
progressTextArea.append(newline);
progressTextArea.updateUI();
this.jsonResult = null;
JOptionPane.showMessageDialog(ancestor, "The " + hpcJobInfo.getAlgoId() + " job on the " + hpcJobInfo.getHpcAccount().getConnectionName() + " node is in the queue successfully!");
} catch (IOException exception) {
LOGGER.error("", exception);
} finally {
progressDialog.setVisible(false);
progressDialog.dispose();
}
(new HpcJobActivityAction("")).actionPerformed(null);
}
Aggregations