use of cbit.vcell.simdata.SimulationData in project vcell by virtualcell.
the class StochtestRunService method runsolver.
private static void runsolver(Simulation newSimulation, File baseDirectory, int numRuns, TimeSeriesMultitrialData timeSeriesMultitrialData) {
Simulation versSimulation = null;
File destDir = null;
boolean bTimeout = false;
// int progress = 1;
for (int trialIndex = 0; trialIndex < numRuns; trialIndex++) {
System.out.println("\n=====================================\n\nStarting trial " + (trialIndex + 1) + " of " + numRuns + "\n\n==============================\n");
long startTime = System.currentTimeMillis();
// }
try {
versSimulation = new TempSimulation(newSimulation, false);
// printout(ruleBasedTestDir.getAbsolutePath());
destDir = new File(baseDirectory, timeSeriesMultitrialData.datasetName);
SimulationTask simTask = new SimulationTask(new SimulationJob(versSimulation, 0, null), 0);
Solver solver = ClientSimManager.createQuickRunSolver(destDir, simTask);
solver.startSolver();
while (true) {
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (System.currentTimeMillis() - startTime > 30 * 1000) {
// timeout after 30 seconds .. otherwise multiple runs will take forever
bTimeout = true;
solver.stopSolver();
throw new RuntimeException("timed out");
}
SolverStatus solverStatus = solver.getSolverStatus();
if (solverStatus != null) {
if (solverStatus.getStatus() == SolverStatus.SOLVER_ABORTED) {
throw new RuntimeException(solverStatus.getSimulationMessage().getDisplayMessage());
}
if (solverStatus.getStatus() != SolverStatus.SOLVER_STARTING && solverStatus.getStatus() != SolverStatus.SOLVER_READY && solverStatus.getStatus() != SolverStatus.SOLVER_RUNNING) {
break;
}
}
}
SimulationData simData = new SimulationData(simTask.getSimulationJob().getVCDataIdentifier(), destDir, null, null);
ODEDataBlock odeDataBlock = simData.getODEDataBlock();
ODESimData odeSimData = odeDataBlock.getODESimData();
timeSeriesMultitrialData.addDataSet(odeSimData, trialIndex);
} catch (Exception e) {
e.printStackTrace();
File file = new File(baseDirectory, Simulation.createSimulationID(versSimulation.getKey()) + "_solverExc.txt");
StochtestFileUtils.writeMessageTofile(file, e.getMessage());
if (bTimeout) {
throw new RuntimeException("timed out");
} else {
throw new RuntimeException("solver failed : " + e.getMessage(), e);
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
StochtestFileUtils.clearDir(destDir);
}
// printout("\n");
}
use of cbit.vcell.simdata.SimulationData in project vcell by virtualcell.
the class TestMissingSimData method checkDataExists.
// private static void runSimsNew(String connectURL,String dbSchemaUser, String dbPassword) throws Exception{
//
// // VCellBootstrap vCellBootstrap = getVCellBootstrap("rmi-beta.cam.uchc.edu", 40105, "VCellBootstrapServer", 12, false);
// // VCellBootstrap vCellBootstrap = getVCellBootstrap("rmi-alpha.cam.uchc.edu", 40106, "VCellBootstrapServer", 12, false);
// VCellBootstrap vCellBootstrap = getVCellBootstrap("rmi-alpha.cam.uchc.edu", 40111, "VCellBootstrapServer", 12, false);//Test2
//
// if(true){
// Hashtable<KeyValue, UserLoginInfo> keyUserLoginInfo = doQuery(connectURL, dbSchemaUser, dbPassword);
// Enumeration<KeyValue> keys = keyUserLoginInfo.keys();
// while(keys.hasMoreElements()){
// KeyValue simKey = keys.nextElement();
// UserLoginInfo userLoginInfo = keyUserLoginInfo.get(simKey);
// VCSimulationIdentifier vcSimulationIdentifier = new VCSimulationIdentifier(simKey, userLoginInfo.getUser());
// acquireThread(vcSimulationIdentifier, vCellBootstrap, userLoginInfo, connectURL, dbSchemaUser, dbPassword);
// }
// return;
// }
//
//
// String itemSelectSQL = " select vc_userinfo.userid,vc_userinfo.id userkey,vc_userinfo.digestpw,missingdata.simjobsimref,vc_softwareversion.softwareversion ";
//
// String sqlPart =
// " from missingdata,vc_simulation,vc_userinfo,vc_softwareversion "+
// " where "+
// " (vc_simulation.id in (select simref from vc_biomodelsim)) and " +
// // " (vc_simulation.id in (select simref from vc_mathmodelsim)) and " +
// " vc_userinfo.userid='fgao5' and "+
// " vc_userinfo.id = vc_simulation.ownerref and "+
// " missingdata.simjobsimref = vc_simulation.id and "+
// // " missingdata.dataexists not like 'readable%' and "+
// " (missingdata.dataexists = 'false') "+
// " and missingdata.notes is not null and " +
// " (missingdata.notes like '%Compiled_solvers_no_longer%' or missingdata.notes like '%Connection_refused%')" +
// // " and missingdata.simjobsimref = 34080002 " +
// // " or missingdata.dataexists like 'error - %') "+
// // " and (missingdata.notes is null ) "+
// // " or missingdata.notes not like 'reran OK%')" +
// " and vc_simulation.parentsimref is null and "+
// " (softwareversion is null or regexp_substr(softwareversion,'^((release)|(rel)|(alpha)|(beta))_version_([[:digit:]]+\\.?)+_build_([[:digit:]]+\\.?)+',1,1,'i') is not null) and "+
// " vc_softwareversion.versionableref (+) = vc_simulation.id " +
// // " and rownum = 1 ";
// // " and vc_simulation.id=39116536"
// " order by vc_userinfo.userid";
//
// // (mdt.dataexists = 'false' or mdt.dataexists like 'error - %') and
// // (mdt.notes is null or mdt.notes not like 'reran OK%') and
//
// //Create hash of sims and userlogininfo
// Hashtable<KeyValue, UserLoginInfo> simToUserLoginInfoHash = new Hashtable<>();
// Statement updateStatement = con.createStatement();
// Statement queryStatement = con.createStatement();
// //Get Count
// ResultSet rset = queryStatement.executeQuery("select count(*) "+sqlPart);
// rset.next();
// int totalCount = rset.getInt(1);
// rset.close();
// //Get sims
// rset = queryStatement.executeQuery(itemSelectSQL+sqlPart);
// UserLoginInfo userLoginInfo = null;
// VCellConnection vcellConnection = null;
// int currentCount = 1;
// while(rset.next()){
// KeyValue simJobSimRef = new KeyValue(rset.getString("simjobsimref"));
// try{
// String softwareVersion = rset.getString("softwareversion");
// String userid = rset.getString("userid");
// System.out.println("-----");
// System.out.println("-----running "+currentCount+" of "+totalCount+" user="+userid+" simjobsimref="+simJobSimRef);
// currentCount+= 1;
// System.out.println("-----");
//
// if(!rset.wasNull() && softwareVersion != null){
// StringTokenizer st = new StringTokenizer(softwareVersion, "_");
// st.nextToken();//site name
// st.nextToken();//'Version' literal string
// String majorVersion = st.nextToken();//major version number
// if(majorVersion.equals("5.4")){
// throw new Exception("Alpha-5.4 sims are not being re-run using Beta-5.3 code");
// }
// }
//
// if(userid.toLowerCase().equals("vcelltestaccount")
// // || userid.toLowerCase().equals("anu")
// // || userid.toLowerCase().equals("fgao")
// // || userid.toLowerCase().equals("liye")
// // || userid.toLowerCase().equals("schaff")
// // || userid.toLowerCase().equals("ignovak")
// // || userid.toLowerCase().equals("jditlev")
// // || userid.toLowerCase().equals("sensation")
// ){
// continue;
// }
// String userkey = rset.getString("userkey");
// if(userLoginInfo == null || !userLoginInfo.getUserName().equals(userid)){
// userLoginInfo = new UserLoginInfo(userid,DigestedPassword.createAlreadyDigested(rset.getString("digestpw")));
// userLoginInfo.setUser(new User(userid, new KeyValue(userkey)));
// vcellConnection = null;
// }
// VCSimulationIdentifier vcSimulationIdentifier = new VCSimulationIdentifier(simJobSimRef, userLoginInfo.getUser());
//
//
// //
// //
// //
// if(true){
// acquireThread(vcSimulationIdentifier, vCellBootstrap, userLoginInfo, connectURL, dbSchemaUser, dbPassword);
// continue;
// }
//
// try{
// if(vcellConnection != null){
// vcellConnection.getMessageEvents();
// }
// }catch(Exception e){
// e.printStackTrace();
// //assume disconnected
// vcellConnection = null;
// }
// if(vcellConnection == null){
// vcellConnection = vCellBootstrap.getVCellConnection(userLoginInfo);
// vcellConnection.getMessageEvents();
// }
//
// SimulationStatusPersistent initSimulationStatus = vcellConnection.getUserMetaDbServer().getSimulationStatus(vcSimulationIdentifier.getSimulationKey());
//
// System.out.println("initial status="+initSimulationStatus);
// // if(!initSimulationStatus.isCompleted() || !initSimulationStatus.getHasData()){
// // continue;
// // }
//
//
// BigString simXML = vcellConnection.getUserMetaDbServer().getSimulationXML(simJobSimRef);
// Simulation sim = XmlHelper.XMLToSim(simXML.toString());
// // SolverDescription solverDescription = sim.getSolverTaskDescription().getSolverDescription();
// // if(solverDescription.equals(SolverDescription.StochGibson) || solverDescription.equals(SolverDescription.FiniteVolume)){
// // //These 2 solvers give too much trouble so skip
// // System.out.println("--skipping solver");
// //// notCompletedSimIDs.add(simIDAndJobID.simID.toString());
// // return;
// // }
//
//
// // if(!sim.isSpatial()){
// // continue;
// // }
// // if(sim.getSolverTaskDescription().isSerialParameterScan()/* || sim.getSolverTaskDescription().getExpectedNumTimePoints() > 20*/){
// // continue;
// // }
//
// int scanCount = sim.getScanCount();
// // if(true){return;}
// SimulationStatusPersistent simulationStatus = null;
// SimulationInfo simulationInfo = sim.getSimulationInfo();
// if(!simulationInfo.getAuthoritativeVCSimulationIdentifier().getSimulationKey().equals(vcSimulationIdentifier.getSimulationKey())){
// throw new Exception("Unexpected authoritative and sim id are not the same");
// }
// vcellConnection.getSimulationController().startSimulation(vcSimulationIdentifier, scanCount);
// long startTime = System.currentTimeMillis();
// while(simulationStatus == null || simulationStatus.isStopped() || simulationStatus.isCompleted() || simulationStatus.isFailed()){
// Thread.sleep(2000);
// simulationStatus = vcellConnection.getUserMetaDbServer().getSimulationStatus(vcSimulationIdentifier.getSimulationKey());
// if(simulationStatus.isFailed() && !initSimulationStatus.isFailed()){
// break;
// }
// MessageEvent[] messageEvents = vcellConnection.getMessageEvents();
// if((System.currentTimeMillis()-startTime) > 30000){
// throw new Exception("-----Sim finished too fast or took too long to start, status= "+simulationStatus);
// }
// System.out.println(simulationStatus);
// }
// SimulationStatusPersistent lastSimStatus = simulationStatus;
// while(!simulationStatus.isStopped() && !simulationStatus.isCompleted() && !simulationStatus.isFailed()){
// for(int i = 0;i<3;i++){
// MessageEvent[] messageEvents = vcellConnection.getMessageEvents();
// Thread.sleep(1000);
// }
// simulationStatus = vcellConnection.getUserMetaDbServer().getSimulationStatus(vcSimulationIdentifier.getSimulationKey());
// if(!simulationStatus.toString().equals(lastSimStatus.toString())){
// lastSimStatus = simulationStatus;
// System.out.println("running status="+simulationStatus);
// }
// // MessageEvent[] messageEvents = vcellConnection.getMessageEvents();
// // for (int i = 0; messageEvents != null && i < messageEvents.length; i++) {
// // System.out.println(messageEvents[i]);
// // }
// }
//
// if(!lastSimStatus.isCompleted()){
// throw new Exception("Unexpected run status: "+lastSimStatus.toString());
// }
//
//
// String updatestr = "update missingdata set notes='"+DB_NOTES_SIM_RUNOK_CODE+"' where simjobsimref="+simJobSimRef;
// System.out.println(updatestr);
// updateStatement.executeUpdate(updatestr);
// con.commit();
// }catch(Exception e){
// e.printStackTrace();
// String errString = TokenMangler.fixTokenStrict(DB_NOTES_SIM_ERROR_CODE+e.getClass().getSimpleName()+" "+e.getMessage());
// if(errString.length() > 256){
// errString = errString.substring(0, 256);
// }
// String updatestr = "update missingdata set notes='"+errString+"' where simjobsimref="+simJobSimRef;
// System.out.println(updatestr);
// updateStatement.executeUpdate(updatestr);
// con.commit();
// }
// }
//
// }
private static void checkDataExists(Connection con, boolean bExistOnly) throws SQLException {
AmplistorCredential amplistorCredential = AmplistorUtilsTest.getAmplistorCredential();
Statement queryStatement = con.createStatement();
Statement updateStatement = con.createStatement();
// Hashtable<KeyValue, Exception> errorHash = new Hashtable<>();
String sql = "select missingdata.*,parentsimref " + " from missingdata,vc_simulation,vc_userinfo" + " where vc_simulation.id = missingdata.simjobsimref and" + " vc_simulation.parentsimref is null and " + " vc_simulation.ownerref=vc_userinfo.id and " + " missingdata.notes is not null and " + " (missingdata.notes like '%exceeded_maximum%' " + " or missingdata.notes ='recheck dataexists' )" + // " vc_userinfo.userid='schaff' "+
" order by missingdata.userid";
ResultSet rset = queryStatement.executeQuery(sql);
while (rset.next()) {
// if(!rset.getString("dataexists").equals("tbd")){
// continue;
// }
KeyValue simJobSimRef = null;
KeyValue parentsimref = null;
User user = null;
try {
simJobSimRef = new KeyValue(rset.getString("simjobsimref"));
parentsimref = (rset.getString("parentsimref") == null ? null : new KeyValue(rset.getString("parentsimref")));
user = new User(rset.getString("userid"), new KeyValue(rset.getString("userinfoid")));
int jobIndex = rset.getInt("jobindex");
File primaryDataDir = new File("\\\\cfs02\\ifs\\raid\\vcell\\users\\" + user.getName());
String updatestr = null;
File filePathNamePrime = new File(primaryDataDir, SimulationData.createCanonicalSimLogFileName(simJobSimRef, 0, false));
if (filePathNamePrime.exists()) {
updatestr = "fileNewPrime";
} else if (new File(primaryDataDir, SimulationData.createCanonicalSimLogFileName(simJobSimRef, 0, true)).exists()) {
updatestr = "fileOldPrime";
} else if (parentsimref != null && new File(primaryDataDir, SimulationData.createCanonicalSimLogFileName(parentsimref, 0, false)).exists()) {
updatestr = "fileNewParent";
} else if (parentsimref != null && new File(primaryDataDir, SimulationData.createCanonicalSimLogFileName(parentsimref, 0, true)).exists()) {
updatestr = "fileOldParent";
} else if (AmplistorUtils.bFileExists(new URL(AmplistorUtils.DEFAULT_AMPLI_SERVICE_VCELL_URL + user.getName() + "/" + filePathNamePrime.getName()), amplistorCredential)) {
updatestr = "ampliNewPrime";
} else if (AmplistorUtils.bFileExists(new URL(AmplistorUtils.DEFAULT_AMPLI_SERVICE_VCELL_URL + user.getName() + "/" + SimulationData.createCanonicalSimLogFileName(simJobSimRef, 0, true)), amplistorCredential)) {
updatestr = "ampliOldPrime";
} else if (parentsimref != null && AmplistorUtils.bFileExists(new URL(AmplistorUtils.DEFAULT_AMPLI_SERVICE_VCELL_URL + user.getName() + "/" + SimulationData.createCanonicalSimLogFileName(parentsimref, 0, false)), amplistorCredential)) {
updatestr = "ampliNewParent";
} else if (parentsimref != null && AmplistorUtils.bFileExists(new URL(AmplistorUtils.DEFAULT_AMPLI_SERVICE_VCELL_URL + user.getName() + "/" + SimulationData.createCanonicalSimLogFileName(parentsimref, 0, true)), amplistorCredential)) {
updatestr = "ampliOldParent";
} else {
updatestr = "false";
}
if (bExistOnly || updatestr.equals("false")) {
updateStatement.executeUpdate("update missingdata set dataexists='" + updatestr + "' where simjobsimref=" + simJobSimRef.toString());
con.commit();
continue;
}
// Log file exists, now check if the data can really be read
VCSimulationIdentifier vcSimulationIdentifier = new VCSimulationIdentifier(simJobSimRef, user);
VCSimulationDataIdentifier vcSimulationDataIdentifier = new VCSimulationDataIdentifier(vcSimulationIdentifier, jobIndex);
// Try to read log,times and simdata to see if this data is well formed
SimDataAmplistorInfo simDataAmplistorInfo = AmplistorUtils.getSimDataAmplistorInfoFromPropertyLoader();
SimulationData simData = new SimulationData(vcSimulationDataIdentifier, primaryDataDir, null, simDataAmplistorInfo);
double[] dataTimes = simData.getDataTimes();
DataIdentifier[] dataIdentifiers = simData.getVarAndFunctionDataIdentifiers(null);
DataIdentifier readDataIdentifier = null;
for (DataIdentifier dataIdentifier : dataIdentifiers) {
if (!dataIdentifier.isFunction()) {
if (simData.getIsODEData()) {
ODEDataBlock odeDataBlock = simData.getODEDataBlock();
odeDataBlock.getODESimData().getRow(dataTimes.length - 1);
} else {
simData.getSimDataBlock(null, dataIdentifier.getName(), dataTimes[dataTimes.length - 1]);
}
readDataIdentifier = dataIdentifier;
break;
}
}
System.out.println(BeanUtils.forceStringSize("user= " + user.getName(), 20, " ", false) + " simref= " + BeanUtils.forceStringSize(simJobSimRef.toString(), 14, " ", false) + " numTimes= " + BeanUtils.forceStringSize(dataTimes.length + "", 8, " ", true) + " readDataID= " + BeanUtils.forceStringSize(readDataIdentifier.getName() + "", 20, " ", true));
updatestr = "update missingdata set dataexists='readable' where simjobsimref=" + simJobSimRef.toString();
// String updatestr = "update missingdata set dataexists='true' where"+
// " userinfoid="+user.getID().toString()+
// " and simjobsimref="+simJobSimRef.toString()+
// " and maxtaskid="+rset.getString("maxtaskid")+
// " and jobindex="+jobIndex;
// updateStatement.executeUpdate(updatestr);
// con.commit();
} catch (Exception e) {
if (simJobSimRef == null) {
e.printStackTrace();
// throw new SQLException("Error querying",e);
} else {
String errString = e.getClass().getSimpleName() + " " + e.getMessage();
if (errString.length() > 512) {
errString = errString.substring(0, 512);
}
String updatestr = "update missingdata set dataexists='error - " + TokenMangler.fixTokenStrict(errString) + "' where simjobsimref=" + simJobSimRef.toString();
// updateStatement.executeUpdate(updatestr);
// con.commit();
System.out.println(BeanUtils.forceStringSize("user= " + (user == null ? "unavailable" : user.getName()), 20, " ", false) + " simref= " + BeanUtils.forceStringSize(simJobSimRef.toString(), 14, " ", false) + " parentsimref= " + BeanUtils.forceStringSize((parentsimref == null ? "NULL" : parentsimref.toString()), 14, " ", false) + " failed= " + e.getMessage());
// errorHash.put(simJobSimRef,e);
}
}
}
rset.close();
// return errorHash;
}
use of cbit.vcell.simdata.SimulationData in project vcell by virtualcell.
the class VFrapXmlHelper method LoadVFrapSpecialImages.
// // load and compute prebleach average and first postbleach images
// public void LoadVFrapSpecialImages(AnnotatedImageDataset annotatedImages, int startingIndexRecovery)
// {
// // unnormalized prebleach average
// prebleachAvg = new double[annotatedImages.getImageDataset().getImage(0, 0, startingIndexRecovery).getNumXYZ()];
// for(int j = 0; j < prebleachAvg.length; j++)
// {
// double pixelTotal = 0;
// for(int i = 0 ; i < startingIndexRecovery; i++)
// {
// pixelTotal = pixelTotal + (annotatedImages.getImageDataset().getImage(0, 0, i).getPixels()[j] & 0x0000FFFF);
// }
// prebleachAvg[j] = pixelTotal/startingIndexRecovery;
// }
//
// // unnormalized first post bleach
// firstPostBleach = new double[annotatedImages.getImageDataset().getImage(0, 0, startingIndexRecovery).getNumXYZ()];
// short[] pixels = annotatedImages.getImageDataset().getImage(0, 0, startingIndexRecovery).getPixels();
// for(int i = 0; i< pixels.length; i++)
// {
// firstPostBleach[i] = pixels[i] & 0x0000FFFF;
// }
// }
//
// Locate the special images within the vFrap files and load them in memory
//
public static boolean LoadVFrapSpecialImages(Hashtable<String, Object> hashTable, Element vFrapRoot) throws IOException, DataAccessException, MathException, ImageException {
// ------ parse the vfrap file and the log/zip files referred within -----
// many channels of 1 timepoint each
int NumTimePoints = 1;
// the channels: prebleach, postbleach, roi1, roi2 ... roiN
int NumChannels = tokenNames.length;
String[] channelNames = new String[NumChannels];
VariableType[] channelTypes = new VariableType[NumChannels];
DataSymbolType[] channelVFrapImageType = new DataSymbolType[NumChannels];
double[][][] pixData = new double[NumTimePoints][NumChannels][];
// get the path of the file tagged with "ROIExternalDataInfoTag" and open it
Element roiExternalDataInfoElement = vFrapRoot.getChild(MicroscopyXMLTags.ROIExternalDataInfoTag);
if (roiExternalDataInfoElement == null) {
// can't load FieldData for some reason, fall back to importing the biomodel only
return false;
}
// <ROIExternalDataInfo Filename="c:\vFrap\VirtualMicroscopy\SimulationData\SimID_1282941232246_0_.log">
// <ExternalDataIdentifier Name="timeData" KeyValue="1282941232246" OwnerName="SimulationData" OwnerKey="0" />
// </ImageDatasetExternalDataInfo>
// c:\VirtualMicroscopy\SimulationData\SimID_1284149203811_0_.log
String filename = (roiExternalDataInfoElement).getAttributeValue("Filename");
Element childElement = (roiExternalDataInfoElement).getChild("ExternalDataIdentifier");
if (childElement == null) {
// can't load FieldData for some reason, fall back to importing the biomodel only
return false;
}
StringTokenizer tokens = new StringTokenizer(filename, "/\\.");
final ArrayList<String> tokenArray = new ArrayList<String>();
while (tokens.hasMoreElements()) {
tokenArray.add(tokens.nextToken());
}
final String dataID = tokenArray.get(tokenArray.size() - 2);
final String userName = tokenArray.get(tokenArray.size() - 3);
VCDataIdentifier vcDataIdentifier = new VCDataIdentifier() {
public String getID() {
return dataID;
}
public KeyValue getDataKey() {
return null;
}
public User getOwner() {
return new User(userName, new KeyValue("123345432334"));
}
};
// ------- recover simulation data for this user name, load the images in memory ------------
// ex c:\\VirtualMicroscopy\\SimulationData
String userDirName = filename.substring(0, filename.indexOf(dataID) - 1);
File userDir = new File(userDirName);
SimulationData.SimDataAmplistorInfo simDataAmplistorInfo = AmplistorUtils.getSimDataAmplistorInfoFromPropertyLoader();
SimulationData simData = new SimulationData(vcDataIdentifier, userDir, null, simDataAmplistorInfo);
// build a valid mesh in 2 steps, what we have in simData is incomplete
CartesianMesh incompleteMesh = simData.getMesh();
Extent extent = incompleteMesh.getExtent();
ISize isize = new ISize(incompleteMesh.getSizeX(), incompleteMesh.getSizeY(), incompleteMesh.getSizeZ());
Origin origin = new Origin(0, 0, 0);
CartesianMesh mesh = CartesianMesh.createSimpleCartesianMesh(origin, extent, isize, new RegionImage(new VCImageUncompressed(null, new byte[isize.getXYZ()], extent, isize.getX(), isize.getY(), isize.getZ()), 0, null, null, RegionImage.NO_SMOOTHING));
DataIdentifier[] dataIdentifiers = simData.getVarAndFunctionDataIdentifiers(null);
double[] times = simData.getDataTimes();
for (int i = 0; i < dataIdentifiers.length; i++) {
// ex: prebleach_avg, postbleach_first, postbleach_last, bleached_mask, cell_mask, ring1_mask,... ring8_mask
System.out.println(dataIdentifiers[i].getName());
for (double time : times) {
// this loops only once, we have just 1 timepoint for each "special" image
SimDataBlock simDataBlock = simData.getSimDataBlock(null, dataIdentifiers[i].getName(), time);
channelNames[i] = dataIdentifiers[i].getName();
channelTypes[i] = VariableType.VOLUME;
channelVFrapImageType[i] = SymbolEquivalence.typeFromToken(dataIdentifiers[i].getName());
pixData[0][i] = simDataBlock.getData();
// var = prebleach_avg, time = 0.0, data = { 1.0832530361887216 1.0832530361887216 1.0832530361887216 1.0 .... }
System.out.print("var = " + dataIdentifiers[i].getName() + ", time = " + time + ", data = { ");
// show a few
for (int j = 0; j < 5; j++) {
System.out.print(pixData[0][i][j] + " ");
}
// show a few
;
// show a few
System.out.println(" ... ");
}
}
hashTable.put("mesh", mesh);
hashTable.put("pixData", pixData);
hashTable.put("channelNames", channelNames);
hashTable.put("channelTypes", channelTypes);
hashTable.put("channelVFrapImageType", channelVFrapImageType);
return true;
}
use of cbit.vcell.simdata.SimulationData in project vcell by virtualcell.
the class IMGExporter method getParticleFiles.
private File[] getParticleFiles(ExportSpecs exportSpecs, User user, DataServerImpl dataServerImpl) throws Exception {
// int particleMode = FormatSpecificSpecs.PARTICLE_NONE;
// if(exportSpecs.getFormatSpecificSpecs() instanceof ImageSpecs){
// particleMode = ((ImageSpecs)exportSpecs.getFormatSpecificSpecs()).getParticleMode();
// }else if (exportSpecs.getFormatSpecificSpecs() instanceof MovieSpecs){
// particleMode = ((MovieSpecs)exportSpecs.getFormatSpecificSpecs()).getParticleMode();
// }
// if(particleMode == FormatSpecificSpecs.PARTICLE_NONE){
// return null;
// }
final VCDataIdentifier vcdID = exportSpecs.getVCDataIdentifier();
SimulationData.SimDataAmplistorInfo simDataAmplistorInfo = AmplistorUtils.getSimDataAmplistorInfoFromPropertyLoader();
SimulationData simData = new SimulationData(vcdID, new File(PropertyLoader.getRequiredProperty(PropertyLoader.primarySimDataDirInternalProperty), vcdID.getOwner().getName()), new File(PropertyLoader.getProperty(PropertyLoader.primarySimDataDirInternalProperty, null), vcdID.getOwner().getName()), simDataAmplistorInfo);
File logFile = simData.getLogFile();
if (!logFile.exists()) {
throw new Exception("ImgExport particle, Couldn't find Log file " + logFile.getAbsolutePath());
}
ArrayList<File> smoldynPointFiles = new ArrayList<>();
// smoldyn always begins at timeindex 1
int timeIndex = 1;
while (true) {
File smoldynOutFile = simData.getSmoldynOutputFile(timeIndex);
if (!smoldynOutFile.exists()) {
// get smoldynOutput files
break;
} else {
smoldynPointFiles.add(smoldynOutFile);
}
timeIndex++;
}
if (smoldynPointFiles.size() == 0) {
return null;
}
return smoldynPointFiles.toArray(new File[0]);
}
use of cbit.vcell.simdata.SimulationData in project vcell by virtualcell.
the class HybridSolverTester method makeAltCSV.
private static void makeAltCSV(AltArgsHelper altArgsHelper, FileWriter fw, int runIndex, File userSimDataDir) throws Exception {
VCSimulationIdentifier vcSimID = new VCSimulationIdentifier(new KeyValue(altArgsHelper.simID), altArgsHelper.user);
boolean bInit = runIndex == 0;
ArrayList<Double> simTimes = new ArrayList<Double>();
StringTokenizer st = null;
if (altArgsHelper.times.equals("all")) {
} else {
st = new StringTokenizer(altArgsHelper.times, ":");
while (st.hasMoreTokens()) {
double timePoint = Double.parseDouble(st.nextToken());
simTimes.add(timePoint);
}
}
SimLocHelper simLocHelper0 = null;
ArrayList<String> simVars = new ArrayList<String>();
st = new StringTokenizer(altArgsHelper.varnames, ":");
while (st.hasMoreTokens()) {
String var = st.nextToken();
simVars.add(var);
}
int jobCounter = 0;
final int TIME_SPACE_EXTRA = 0;
double[][][] trialData = null;
while (true) {
VCSimulationDataIdentifier vcSimulationDataIdentifier = new VCSimulationDataIdentifier(vcSimID, jobCounter);
SimulationData simData = null;
DataOperationResults.DataProcessingOutputInfo dataProcessingOutputInfo = null;
try {
simData = new SimulationData(vcSimulationDataIdentifier, userSimDataDir, null, null);
dataProcessingOutputInfo = (DataOperationResults.DataProcessingOutputInfo) DataSetControllerImpl.getDataProcessingOutput(new DataOperation.DataProcessingOutputInfoOP(vcSimulationDataIdentifier, true, null), new File(userSimDataDir, SimulationData.createCanonicalPostProcessFileName(vcSimulationDataIdentifier)));
} catch (FileNotFoundException e) {
if (jobCounter == 0) {
System.out.println("found no trials matching SimID=" + altArgsHelper.simID + " in user dir " + userSimDataDir.getAbsolutePath());
} else {
System.out.println("found " + jobCounter + " trials in dir " + userSimDataDir.getAbsolutePath() + " matching SimID=" + altArgsHelper.simID);
}
break;
} catch (Exception e) {
e.printStackTrace();
}
if (dataProcessingOutputInfo == null) {
System.out.println("No postprocessing found for " + jobCounter + " trials in dir " + userSimDataDir.getAbsolutePath() + " matching SimID=" + altArgsHelper.simID);
jobCounter++;
continue;
}
if (simLocHelper0 == null && !altArgsHelper.dataIndexes.equals(POSTPROC)) {
simLocHelper0 = calcSimLocs(altArgsHelper.dataIndexes, simData.getMesh());
}
if (jobCounter == 0) {
double[] allDatasetTimes = simData.getDataTimes();
if (altArgsHelper.times.equals("all")) {
for (double thisTime : allDatasetTimes) {
simTimes.add(thisTime);
}
} else {
// Convert user input times to actual data times
for (int times = 0; times < simTimes.size(); times++) {
double masterDelta = Double.POSITIVE_INFINITY;
double timePoint = -1;
for (int j = 0; j < allDatasetTimes.length; j++) {
double tempDelta = Math.abs(simTimes.get(times) - allDatasetTimes[j]);
if (tempDelta < masterDelta) {
masterDelta = tempDelta;
timePoint = allDatasetTimes[j];
if (tempDelta == 0) {
break;
}
}
}
System.out.println("User time=" + simTimes.get(times) + " converted to dataset time=" + timePoint);
simTimes.set(times, timePoint);
}
}
trialData = new double[simTimes.size()][(simLocHelper0 == null ? 1 : simLocHelper0.boxToLocs.size())][simVars.size()];
}
if (bInit && jobCounter == 0) {
// print state vars
DataIdentifier[] dataIdentifiers = simData.getVarAndFunctionDataIdentifiers(null);
for (int j = 0; j < dataIdentifiers.length; j++) {
System.out.println(dataIdentifiers[j]);
}
printheader(altArgsHelper, simTimes, simLocHelper0, simVars, fw, TIME_SPACE_EXTRA);
}
for (int times = 0; times < simTimes.size(); times++) {
double timePoint = simTimes.get(times);
for (int vars = 0; vars < simVars.size(); vars++) {
double[] data = null;
if (altArgsHelper.dataIndexes.equals(POSTPROC)) {
data = dataProcessingOutputInfo.getVariableStatValues().get(simVars.get(vars) + "_average");
} else {
SimDataBlock simDataBlock = simData.getSimDataBlock(null, simVars.get(vars), timePoint);
data = simDataBlock.getData();
}
for (int locs = 0; locs < trialData[times].length; locs++) {
double val;
if (simLocHelper0 != null && simLocHelper0.boxToLocs.get(locs).size() == 1) {
// point
// System.out.println("pointIndex="+simLocHelper.boxToLocs.get(locs).get(0));
val = data[simLocHelper0.boxToLocs.get(locs).get(0)];
} else if (simLocHelper0 != null) {
// box, calculate the average, could be concentration or counts
double accum = 0;
for (Integer locIndex : simLocHelper0.boxToLocs.get(locs)) {
// System.out.println("boxIndex="+locIndex);
accum += data[locIndex];
}
val = accum / simLocHelper0.boxToLocs.get(locs).size();
} else {
// PostProcess
if (times < data.length) {
val = data[times];
} else {
val = Double.NaN;
}
}
trialData[times][locs][vars] = val;
}
}
}
fw.write("r=" + runIndex + " s=" + jobCounter + ",");
for (int times = 0; times < simTimes.size(); times++) {
for (int locs = 0; locs < trialData[times].length; locs++) {
for (int vars = 0; vars < simVars.size(); vars++) {
// System.out.println("job="+jobCounter+" time="+simTimes.get(times)+" loc="+simLocHelper.boxToID.get(locs)+" var="+simVars.get(vars)+" data="+trialData[times][locs][vars]);
boolean isNan = Double.isNaN(trialData[times][locs][vars]);
fw.write((isNan ? "" : trialData[times][locs][vars]) + ",");
}
fw.write(",");
}
for (int timeSpace = 0; timeSpace < TIME_SPACE_EXTRA; timeSpace++) {
fw.write(",");
}
}
fw.write("\n");
jobCounter++;
}
fw.flush();
}
Aggregations