package regressiontest.cluster;
import java.util.List;
import org.molgenis.cluster.Analysis;
import org.molgenis.cluster.DataName;
import org.molgenis.cluster.DataSet;
import org.molgenis.cluster.DataValue;
import org.molgenis.cluster.ParameterName;
import org.molgenis.cluster.ParameterSet;
import org.molgenis.cluster.ParameterValue;
import org.molgenis.data.Data;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.db.Query;
import org.molgenis.framework.db.QueryRule;
import org.molgenis.framework.db.QueryRule.Operator;
import org.molgenis.organization.Investigation;
import app.DatabaseFactory;
public class AddClusterMetaModel
{
public static void main(String[] args) throws Exception
{
Database db = DatabaseFactory.create("xgap.properties");
Investigation inv = db.find(Investigation.class, new QueryRule("name", Operator.EQUALS, "ClusterDemo")).get(0);
QueryRule investigationId = new QueryRule("investigation", Operator.EQUALS, inv.getId());
QueryRule genoName = new QueryRule("name", Operator.EQUALS, "genotypes");
QueryRule phenoName = new QueryRule("name", Operator.EQUALS, "metaboliteexpression");
Data genoData = db.find(Data.class, investigationId, genoName).get(0);
Data phenoData = db.find(Data.class, investigationId, phenoName).get(0);
new AddClusterMetaModel(genoData, phenoData, db);
}
public static void tagPlinkBinaryDataSet(Database db) throws Exception
{
List<DataSet> ds = db.find(DataSet.class, new QueryRule(DataSet.NAME, Operator.EQUALS, "PlinkBinPhenotypes"));
if (ds.size() == 0)
{
throw new Exception("tagPlinkBinaryDataSet: dataset not found");
}
System.out.println("found dataset");
Query<DataName> q = db.query(DataName.class);
q.addRules(new QueryRule(DataName.NAME, Operator.EQUALS, "phenotypes"));
q.addRules(new QueryRule(DataName.DATASET, Operator.EQUALS, ds.get(0).getId()));
List<DataName> dn = q.find();
if (dn.size() == 0)
{
throw new Exception("tagPlinkBinaryDataSet: dataname not found");
}
System.out.println("found dataname");
DataValue dv = new DataValue();
dv.setDataName_Id(dn.get(0).getId());
dv.setName("fake_metab_hapmap_example_plink_phenotypes");
dv.setValue(db.find(Data.class,
new QueryRule(Data.NAME, Operator.EQUALS, "fake_metab_hapmap_example_plink_phenotypes")).get(0));
System.out.println("created datavalue: " + dv.toString());
db.add(dv);
System.out.println("added plink datavalue: " + dv.toString());
}
public AddClusterMetaModel(Data genoData, Data phenoData, Database db) throws Exception
{
db.beginTx();
try
{
DataSet default_tags = new DataSet();
default_tags.setName("Default_tags");
db.add(default_tags);
DataName lod_scores = new DataName();
lod_scores.setName("LOD_score");
lod_scores.setDataSet(default_tags);
db.add(lod_scores);
DataName effect_size = new DataName();
effect_size.setName("Effect_size");
effect_size.setDataSet(default_tags);
db.add(effect_size);
DataName wetlab_data = new DataName();
wetlab_data.setName("Wetlab_data");
wetlab_data.setDataSet(default_tags);
db.add(wetlab_data);
DataName n_wetlab_data = new DataName();
n_wetlab_data.setName("Normalized_wetlab_data");
n_wetlab_data.setDataSet(default_tags);
db.add(n_wetlab_data);
// QTL
DataSet rqtlData = new DataSet();
rqtlData.setName("Rqtl_data");
db.add(rqtlData);
DataName genotypes = new DataName();
genotypes.setName("genotypes");
genotypes.setDataSet(rqtlData);
db.add(genotypes);
DataName phenotypes = new DataName();
phenotypes.setName("phenotypes");
phenotypes.setDataSet(rqtlData);
db.add(phenotypes);
DataValue refToGenoData = new DataValue();
refToGenoData.setName("Fu_Genotypes");
refToGenoData.setValue(genoData);
refToGenoData.setDataName(genotypes);
db.add(refToGenoData);
DataValue refToPhenoData = new DataValue();
refToPhenoData.setName("Fu_LCMS_data");
refToPhenoData.setValue(phenoData);
refToPhenoData.setDataName(phenotypes);
db.add(refToPhenoData);
ParameterSet rqtlParams = new ParameterSet();
rqtlParams.setName("Rqtl_params");
db.add(rqtlParams);
ParameterName map = new ParameterName();
map.setName("map");
map.setDescription("The mapping method to use. For example: scanone, scanall, scanoneboot, scantwo, cim, mqmscan, mqmscanall, mqmscanfdr.");
map.setParameterSet(rqtlParams);
db.add(map);
ParameterName method = new ParameterName();
method.setName("method");
method.setDescription("Indicates whether to use the EM algorithm, imputation, Haley-Knott regression, the extended Haley-Knott method, or marker regression. Not all methods are available for all models.");
method.setParameterSet(rqtlParams);
db.add(method);
ParameterName model = new ParameterName();
model.setName("model");
model.setDescription("The phenotype model: the usual normal model, a model for binary traits, a two-part model or non-parametric analysis.");
model.setParameterSet(rqtlParams);
db.add(model);
ParameterName stepsize = new ParameterName();
stepsize.setName("stepsize");
stepsize.setDescription("The marker interval used in some methods of mapping. For example, composite interval mapping on marker intervals of 1, 2 or 5 cM.");
stepsize.setParameterSet(rqtlParams);
db.add(stepsize);
ParameterValue scanall = new ParameterValue();
scanall.setName("Scanone");
scanall.setValue("scanone");
scanall.setParameterName(map);
db.add(scanall);
// ParameterValue cimall = new ParameterValue();
// cimall.setName("Scanall_using_CIM");
// cimall.setValue("cimall");
// cimall.setParameterName(map);
// db.add(cimall);
//
// ParameterValue mqmall = new ParameterValue();
// mqmall.setName("Scan_using_MQM");
// mqmall.setValue("mqmscan");
// mqmall.setParameterName(map);
// db.add(mqmall);
ParameterValue hk = new ParameterValue();
hk.setName("Haley_Knott");
hk.setValue("hk");
hk.setParameterName(method);
db.add(hk);
ParameterValue normal = new ParameterValue();
normal.setName("Normal_distribution");
normal.setValue("normal");
normal.setParameterName(model);
db.add(normal);
ParameterValue stepsize1 = new ParameterValue();
stepsize1.setName("Markers");
stepsize1.setValue("0");
stepsize1.setParameterName(stepsize);
db.add(stepsize1);
ParameterValue stepsize2 = new ParameterValue();
stepsize2.setName("Two_cM");
stepsize2.setValue("2");
stepsize2.setParameterName(stepsize);
db.add(stepsize2);
Analysis rqtlScan = new Analysis();
rqtlScan.setName("Rqtl_analysis");
rqtlScan.setDescription("This is a basic QTL analysis performed in the R environment for statistical computing, powered by the R/qtl package. R/qtl is an extensible, interactive environment for mapping quantitative trait loci (QTL) in experimental crosses. For more information, please visit the <a target=\"_blank\" href=\"http://www.rqtl.org\">R/qtl website</a>.");
rqtlScan.setDataSet(rqtlData);
rqtlScan.setParameterSet(rqtlParams);
rqtlScan.setTargetFunctionName("QTL");
db.add(rqtlScan);
// EMPTY PARAMS
ParameterSet emptyParams = new ParameterSet();
emptyParams.setName("Empty");
db.add(emptyParams);
// MINJOB
ParameterSet minjobParams = new ParameterSet();
minjobParams.setName("Min_params");
db.add(minjobParams);
ParameterName minName = new ParameterName();
minName.setName("message");
minName.setDescription("Example parameter. Sets the name to be 'helloed'.");
minName.setParameterSet(minjobParams);
db.add(minName);
ParameterValue minVal = new ParameterValue();
minVal.setName("Klaus");
minVal.setValue("Hello Klaus");
minVal.setParameterName(minName);
db.add(minVal);
ParameterValue minVal2 = new ParameterValue();
minVal2.setName("Ritsert");
minVal2.setValue("Hello Ritsert");
minVal2.setParameterName(minName);
db.add(minVal2);
ParameterValue minVal3 = new ParameterValue();
minVal3.setName("Brian");
minVal3.setValue("Hello Brian");
minVal3.setParameterName(minName);
db.add(minVal3);
ParameterValue minVal4 = new ParameterValue();
minVal4.setName("Andrew");
minVal4.setValue("Hello Andrew");
minVal4.setParameterName(minName);
db.add(minVal4);
DataSet emptyDataSet = new DataSet();
emptyDataSet.setName("Empty");
db.add(emptyDataSet);
Analysis minjob = new Analysis();
minjob.setName("Hello_analysis");
minjob.setDataSet(emptyDataSet);
minjob.setParameterSet(minjobParams);
minjob.setDescription("This is a minimal example analysis which only prints a name to the running analysis status messages.");
minjob.setTargetFunctionName("MIN");
db.add(minjob);
// PLINK job
ParameterSet plinkParams = new ParameterSet();
plinkParams.setName("Plink_params");
db.add(plinkParams);
DataSet plinkDataSet = new DataSet();
plinkDataSet.setName("PlinkPhenotypes");
db.add(plinkDataSet);
DataName plinkPhenotypes = new DataName();
plinkPhenotypes.setName("phenotypes");
plinkPhenotypes.setDataSet(plinkDataSet);
db.add(plinkPhenotypes);
ParameterName plinkName = new ParameterName();
plinkName.setName("inputname");
plinkName.setDescription("Name of the two input files retrieved from the database.");
plinkName.setParameterSet(plinkParams);
db.add(plinkName);
// ParameterValue plinkVal = new ParameterValue();
// plinkVal.setName("HapMap_example_data");
// plinkVal.setValue("hapmap1");
// plinkVal.setParameterName(plinkName);
// db.add(plinkVal);
Analysis plink = new Analysis();
plink.setName("Plink_analysis");
plink.setDescription("This is a basic PLINK association analysis. The input parameter 'inputname' must correspond to files in your database: 'inputname'_map.map and 'inputname'_ped.ped. Use 'Import data' -> 'Plink' for convenience. For more information, please visit the <a target=\"_blank\" href=\"http://pngu.mgh.harvard.edu/~purcell/plink/\">Plink website</a>.");
plink.setDataSet(plinkDataSet);
plink.setParameterSet(plinkParams);
plink.setTargetFunctionName("PLINK");
db.add(plink);
// PLINK job on binaries (BIM/BED/FAM)
ParameterSet plinkBinParams = new ParameterSet();
plinkBinParams.setName("Plink_bin_params");
db.add(plinkBinParams);
DataSet plinkBinDataSet = new DataSet();
plinkBinDataSet.setName("PlinkBinPhenotypes");
db.add(plinkBinDataSet);
DataName plinkBinPhenotypes = new DataName();
plinkBinPhenotypes.setName("phenotypes");
plinkBinPhenotypes.setDataSet(plinkBinDataSet);
db.add(plinkBinPhenotypes);
ParameterName plinkBinName = new ParameterName();
plinkBinName.setName("inputname");
plinkBinName.setDescription("Name of the three input files retrieved from the database.");
plinkBinName.setParameterSet(plinkBinParams);
db.add(plinkBinName);
Analysis plinkBin = new Analysis();
plinkBin.setName("Plink_bin_analysis");
plinkBin.setDescription("This is a basic PLINK association analysis on the binary formats: BED/BIM/FAM. The input parameter 'inputname' must correspond to files in your database: 'inputname'_bed.bed, 'inputname'_bim.bim and 'inputname'_fam.fam. Use 'Import data' -> 'Plink' for convenience. For more information, please visit the <a target=\"_blank\" href=\"http://pngu.mgh.harvard.edu/~purcell/plink/\">Plink website</a>.");
plinkBin.setDataSet(plinkBinDataSet);
plinkBin.setParameterSet(plinkBinParams);
plinkBin.setTargetFunctionName("PLINKBIN");
db.add(plinkBin);
// QTL BIM JOB
Analysis qtlBim = new Analysis();
qtlBim.setName("QtlBim_analysis");
qtlBim.setDescription("QTLBIM, a library for QTL Bayesian Interval Mapping, provides a Bayesian model selection approach to map multiple interacting QTL. For more information, please visit the <a target=\"_blank\" href=\"http://www.qtlbim.org/\">QTLBIM website</a>.");
qtlBim.setDataSet(rqtlData);
qtlBim.setParameterSet(emptyParams);
qtlBim.setTargetFunctionName("QTLBIM");
db.add(qtlBim);
/*
* // PERMUTATION ParameterSet permParams = new ParameterSet();
* permParams.setName("Rqtl_perm_params"); db.add(permParams);
*
* ParameterName mapp = new ParameterName(); mapp.setName("map");
* mapp.setParameterSet(permParams); db.add(mapp);
*
* ParameterName methodp = new ParameterName();
* methodp.setName("method"); methodp.setParameterSet(permParams);
* db.add(methodp);
*
* ParameterName modelp = new ParameterName();
* modelp.setName("model"); modelp.setParameterSet(permParams);
* db.add(modelp);
*
* ParameterName nperms = new ParameterName();
* nperms.setName("nperms"); nperms.setParameterSet(permParams);
* db.add(nperms);
*
* ParameterValue scanonep = new ParameterValue();
* scanonep.setName("Scanone"); scanonep.setValue("scanone");
* scanonep.setParameterName(mapp); db.add(scanonep);
*
* ParameterValue permp = new ParameterValue();
* permp.setName("Permutation"); permp.setValue("permutation");
* permp.setParameterName(methodp); db.add(permp);
*
* ParameterValue simp = new ParameterValue();
* simp.setName("Simulation"); simp.setValue("simulation");
* simp.setParameterName(methodp); db.add(simp);
*
* ParameterValue normalp = new ParameterValue();
* normalp.setName("Normal_distribution");
* normalp.setValue("normal"); normalp.setParameterName(modelp);
* db.add(normalp);
*
* ParameterValue nperm1 = new ParameterValue();
* nperm1.setName("Test"); nperm1.setValue("10");
* nperm1.setParameterName(nperms); db.add(nperm1);
*
* ParameterValue nperm2 = new ParameterValue();
* nperm2.setName("Low"); nperm2.setValue("100");
* nperm2.setParameterName(nperms); db.add(nperm2);
*
* ParameterValue nperm3 = new ParameterValue();
* nperm3.setName("High"); nperm3.setValue("1000");
* nperm3.setParameterName(nperms); db.add(nperm3);
*
* // create 'Analysis' object for PERMUTATION Analysis permute =
* new Analysis(); permute.setName("Rqtl_permutation_analysis");
* permute.setDataSet(rqtlData);
* permute.setParameterSet(permParams);
* permute.setTargetFunctionName("PERM"); db.add(permute);
*
*
*
* // QUALITY CONTROL ParameterSet qcParams = new ParameterSet();
* qcParams.setName("QC_params"); db.add(qcParams);
*
* ParameterName qcparam = new ParameterName();
* qcparam.setName("nperms"); qcparam.setParameterSet(qcParams);
* db.add(qcparam);
*
* ParameterValue qc1 = new ParameterValue(); qc1.setName("Low");
* qc1.setValue("1"); qc1.setParameterName(qcparam); db.add(qc1);
*
* ParameterValue qc2 = new ParameterValue(); qc2.setName("Normal");
* qc2.setValue("1,5"); qc2.setParameterName(qcparam); db.add(qc2);
*
* ParameterValue qc3 = new ParameterValue(); qc3.setName("High");
* qc3.setValue("2"); qc3.setParameterName(qcparam); db.add(qc3);
*
* Analysis qc = new Analysis(); qc.setName("QualityControl");
* qc.setDataSet(rqtlData); qc.setParameterSet(qcParams);
* qc.setTargetFunctionName("QC"); db.add(qc);
*
*
*
* // PLOT DataSet rqtlDataHax = new DataSet();
* rqtlDataHax.setName("Plot_data"); db.add(rqtlDataHax);
*
* DataName genotypesHax = new DataName();
* genotypesHax.setName("genotypes");
* genotypesHax.setDataSet(rqtlDataHax); db.add(genotypesHax);
*
* DataName phenotypesHax = new DataName();
* phenotypesHax.setName("phenotypes");
* phenotypesHax.setDataSet(rqtlDataHax); db.add(phenotypesHax);
*
* DataValue refToGenoDataHax = new DataValue();
* refToGenoDataHax.setName("Fu_Genotypes");
* refToGenoDataHax.setValue(genoData);
* refToGenoDataHax.setDataName(genotypesHax);
* db.add(refToGenoDataHax);
*
* DataValue refToPhenoDataHax = new DataValue();
* refToPhenoDataHax.setName("Fu_LCMS_data");
* refToPhenoDataHax.setValue(phenoData);
* refToPhenoDataHax.setDataName(phenotypesHax);
* db.add(refToPhenoDataHax);
*
* DataName blaatHax = new DataName(); blaatHax.setName("map");
* blaatHax.setDataSet(rqtlDataHax); db.add(blaatHax);
*
* ParameterSet bogusParams = new ParameterSet();
* bogusParams.setName("Plot_params"); db.add(bogusParams);
*
* Analysis plot = new Analysis(); plot.setName("PlotQTL");
* plot.setDataSet(rqtlDataHax); plot.setParameterSet(bogusParams);
* plot.setTargetFunctionName("PLOT"); db.add(plot);
*/
// commit
db.commitTx();
}
catch (Exception e)
{
db.rollbackTx();
throw (e);
}
}
}