From 298504675da9f0800a57492cefb67a2547950a11 Mon Sep 17 00:00:00 2001 From: stephanmg Date: Sat, 30 Jul 2016 00:49:02 +0200 Subject: [PATCH] NeuGen's pseudo-backend: Improved comments - the pseudo-backend can be used to generate networks and export them. Anything further has to be implemented if necessary. --- NeuGen/nbproject/private/private.xml | 52 ++++++++-- NeuGen/src/org/neugen/backend/NGBackend.java | 97 ++++++++----------- .../src/org/neugen/backend/NGBackendUtil.java | 6 +- .../org/neugen/backend/main/EnhancedCLI.java | 7 +- .../org/neugen/backend/main/SimpleCLI.java | 4 +- 5 files changed, 90 insertions(+), 76 deletions(-) diff --git a/NeuGen/nbproject/private/private.xml b/NeuGen/nbproject/private/private.xml index cbfca83..fad858c 100644 --- a/NeuGen/nbproject/private/private.xml +++ b/NeuGen/nbproject/private/private.xml @@ -3,26 +3,60 @@ src/org/neugen/gui/NeuGenView.java - 1615 + 1628 file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/HocWriterTask.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/TXT/WriteToTXT.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroMLWriter.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLSynapse.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/visual/NeuGenDensityVisualization.java file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/TXT/TXTWriterTask.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/SimpleHocWriterTask.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuGenWriterTask.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/datastructures/Net.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/backend/main/EnhancedCLI.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/TXT/TXTAlphaSynapse.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/SimpleHocWriter.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLSynapseUnilateral.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/SectionLengthWarningDocumentListener.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/vrl/VRLDensityVisualization.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLSynapseBilateral.java file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NeuGenApp.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NetworkMLElement.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/GlobalParameterDialog.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLPopulations.java file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/TXT/TXTWriter.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/HocWriter.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/datastructures/NetHippocampus.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NeuGenLibTask.java - file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NeuGenLib.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLProjection.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NetworkMLValidationUtility.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/build.xml file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/datastructures/NetNeocortex.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/datastructures/NetBase.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NeuroMLLevelSelector.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/backend/NGBackend.java file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NeuGenView.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/visual/NeuGenVisualization.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroMLWriterTask.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/build.properties + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/TXT/WriteToTXT.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLProjections.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/datastructures/xml/XMLObject.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/OBJReader.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLInstance.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NeuGenProject.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/backend/NGBackendUtil.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/foo.txt + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLNetwork.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/backend/main/SimpleCLI.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLPopulation.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/HocDialog.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLConnections.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLLocation.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLSynapseProperty.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NewSingleton.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/datastructures/NetHippocampus.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/parsers/NeuroML/NetworkML/NeuroMLInstances.java + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/nbproject/build-impl.xml + file:/Users/stephan/Code/git/NeuGen_source/NeuGen/src/org/neugen/gui/NeuGenConstants.java diff --git a/NeuGen/src/org/neugen/backend/NGBackend.java b/NeuGen/src/org/neugen/backend/NGBackend.java index 6b71708..bf4747d 100644 --- a/NeuGen/src/org/neugen/backend/NGBackend.java +++ b/NeuGen/src/org/neugen/backend/NGBackend.java @@ -87,10 +87,12 @@ import org.neugen.utils.Utils; /** - * @brief provide some backend functionality + * @brief NeuGen's backend + * Note: This pseudo-backend attempts to disentangle the interweaved + * GUI and backend components of NeuGen. Therefore this pseudo-backend + * may be considered as a hack. Some functionality is available, cf. + * below, however this backend needs to be enhanced for desired functionality. * @author stephanmg - * - * @note maybe a configuration builder (SettingsBuilder) is a good choice */ public final class NGBackend { /// public static members @@ -119,8 +121,7 @@ public NGBackend(boolean with_gui) { } /** - * @brief executes just the project - * + * @brief executes the project * @param projectType */ public void execute(String projectType) { @@ -129,12 +130,11 @@ public void execute(String projectType) { /** * @brief loads the initial parameters from project directory - * * @param file * @param root - * @return + * @return parameter list */ - @SuppressWarnings("CallToPrintStackTrace") + @SuppressWarnings({"CallToPrintStackTrace", "CallToThreadDumpStack"}) private XMLObject loadParam(File file) { XMLObject root = null; try { @@ -150,10 +150,10 @@ private XMLObject loadParam(File file) { } /** - * @brief get's the project property - * + * @brief get the project property * @param projectPath * @param projectType + * @return list of properties */ private Properties getProjectProp(String projectPath, String projectType) { Properties prop = new Properties(); @@ -177,13 +177,12 @@ private Properties getProjectProp(String projectPath, String projectType) { } /** - * @brief creates a project - * + * @brief creates a NeuGen project * @param projectPath * @param projectType * @param force * @param open_only - if specified opens only the project - * @return + * @return parameters as a map */ @SuppressWarnings("NestedAssignment") public Map create_and_open_project(String projectPath, String projectType, boolean force, boolean open_only) { @@ -309,8 +308,7 @@ public Map create_and_open_project(String projectPath, String } /** - * @brief saves the PARAM parameters - * + * @brief saves the PARAM parameters (NeuGen parameters) * @param currentRoot * @param projectDirPath */ @@ -319,8 +317,7 @@ private void save_param(XMLNode currentRoot, String projectDirPath) { } /** - * @brief saves the INTERNA parameters - * + * @brief saves the INTERNA parameters (NeuGen parameters) * @param currentRoot * @param projectDirPath */ @@ -330,7 +327,6 @@ private void save_interna(XMLNode currentRoot, String projectDirPath) { /** * @brief save all params - * * @param paramTrees * @param projectDirPath */ @@ -340,8 +336,7 @@ public void save(Map paramTrees, String projectDirPath) { } /** - * @brief saves INTERNA or PARAM parameters - * + * @brief saves INTERNA or PARAM parameters (NeuGen parameters) * @param currentRoot * @param projectDirPath * @param param @@ -350,7 +345,7 @@ private void save(XMLNode currentRoot, String projectDirPath, String param) { logger.info("leaf count: " + currentRoot.getLeafCount()); /** - * @todo brief: tied to GUI! + * @todo brief: tied to GUI! (implement the pseudocode below - more reasonable) * workaround: 1) alter parameters in project file before generating the net * 2) generate net * 3) save the file in a gui-independent way (i. e. @@ -378,56 +373,52 @@ private void save(XMLNode currentRoot, String projectDirPath, String param) { } /** - * @brief init param table - * + * @brief inits param table * @param paramTrees * @param paramPath * @param internaPath + * @return map of parameters */ private Map initParamTable(Map paramTrees, String paramPath, String internaPath) { XMLObject param = paramTrees.get(NeuGenConstants.PARAM); XMLObject interna = paramTrees.get(NeuGenConstants.INTERNA); Map allParam = new HashMap(); - allParam.put(paramPath, param); allParam.put(internaPath, interna); return allParam; } /** - * @brief init all parameters - * + * @brief inits all parameters * @param dirPath * @param projectType + * @return map of all parameters */ private Map initProjectParam(String dirPath, String projectType) { File param = new File(dirPath + System.getProperty("file.separator") + NeuGenConstants.PARAM_FNAME); File interna = new File(dirPath + System.getProperty("file.separator") + NeuGenConstants.INTERNA_FNAME); - Map paramTrees = new HashMap(); XMLObject paramRoot = loadParam(param); XMLObject internaRoot = loadParam(interna); paramTrees.put(NeuGenConstants.PARAM, paramRoot); paramTrees.put(NeuGenConstants.INTERNA, internaRoot); - NeuGenLib.initParamData(initParamTable(paramTrees, param.getPath(), interna.getPath()), projectType); - return paramTrees; } /** - * @brief generates the net actually - * + * @brief generates the NeuGen net * @param projectType */ public void generate_network(String projectType) { ngLib.run(projectType); + /// not necessary: /// ngLib.getNet().destroy(); /// ngLib.destroy(); } /** - * @brief saves and closes project + * @brief saves and closes the NeuGen project * @param paramTrees * @param projectDirPath */ @@ -446,12 +437,10 @@ public void save_and_close_project(Map paramTrees, String pro } /** - * @brief exports a network - * + * @brief exports the NeuGen network * Note: Enhance this function by needs, i. e. if you * need another exporter, like HOC or something else, you * may add it here - * * @param type * @param file * @param withCellType @@ -476,7 +465,6 @@ public void export_network(String type, String file, boolean withCellType) { /** * @brief modify the project params and set them - * * @param paramTrees; * @param projectDirPath */ @@ -492,8 +480,7 @@ public void modifyProject(Map paramTrees, String projectDirPa } /** - * @brief modifies n parts density - * + * @brief modifies n parts density (NeuGen property) * @param paramTrees * @param projectDirPath * @param density @@ -578,8 +565,7 @@ public void modifyNPartsDensity(Map paramTrees, String projec } /** - * @brief correct synapse dist to custom value - * + * @brief correct synapse dist to custom value (NeuGen property) * @param paramTrees * @param projectDirPath * @param dist_synapse @@ -609,7 +595,7 @@ public void modifySynapseDistance(Map paramTrees, String proj /** - * @brief modifies a Neuron and Interna parameter + * @brief modifies a Neuron and INTERNA parameter * @param paramTrees * @param projectDirPath * @param param @@ -623,7 +609,7 @@ public void modifyAllParameter(Map paramTrees, String project } /** - * @brief modifies a Neuron or Interna parameter + * @brief modifies a Neuron or INTERNA parameter * @param paramTrees * @param projectDirPath * @param param @@ -642,7 +628,7 @@ private void modifyParameter(Map paramTrees, String projectDi } /** - * @brief modify's an Interna parameter + * @brief modifies an INTERNA parameter (NeuGen parameter) * @param paramTrees * @param projectDirPath * @param param @@ -653,7 +639,7 @@ public void modifyInternaParameter(Map paramTrees, String pro } /** - * @brief modify's a Neuron parameter + * @brief modifies a Neuron parameter (NeuGen parameter) * @param paramTrees * @param projectDirPath * @param param @@ -664,7 +650,7 @@ public void modifyNeuronParameter(Map paramTrees, String proj } /** - * @brief modifies some NEURON parameter recursively + * @brief modifies some Neuron parameter recursively (NeuGen parameter) * @param paramTree * @param projectDirPath * @param param @@ -693,7 +679,7 @@ private void modifyParameter(XMLObject paramTree, String projectDirPath, double } /** - * @brief modifies some NEURON parameter recursively + * @brief modifies some Neuron parameter recursively (NeuGen parameter) * @param root * @param param * @param identifier @@ -718,10 +704,9 @@ private void modifyParameter_rec(XMLNode root, double param, ArrayList i } /** - * @brief replaces content of a given node specified by identifier with - * replacement + * @brief replaces content of a given node. + * The replacement is specified by identifier. * @author stephanmg - * * @param child * @param identifier * @param replacement @@ -752,7 +737,7 @@ private void correct_siblings(XMLNode child, String identifier, double replaceme /** * @brief returns the project type - * @return + * @return project type */ public String getProjectType() { if (Region.isCa1Region()) { @@ -765,22 +750,20 @@ public String getProjectType() { } /** - * @brief test - * + * @brief main method * @param args */ - @SuppressWarnings("CallToPrintStackTrace") + @SuppressWarnings({"CallToPrintStackTrace", "CallToThreadDumpStack"}) public static void main(String... args) { - /** - * @brief todo works - test remaining functionality... - */ try { NGBackend back = new NGBackend(); Map params = back.create_and_open_project("foo24", NeuGenConstants.NEOCORTEX_PROJECT, true, false); back.modifyNPartsDensity(params, "foo24/Neocortex", 0.1); back.generate_network(NeuGenConstants.NEOCORTEX_PROJECT); back.export_network("NGX", "foo24.ngx", false); - back.save_and_close_project(params, "foo26"); + /// TODO: fix for save_and_close_project necessary + /// back.save_and_close_project(params, "foo26"); + } catch (Exception e) { logger.fatal("Make sure you selected a valid project directory: " + e); e.printStackTrace(); diff --git a/NeuGen/src/org/neugen/backend/NGBackendUtil.java b/NeuGen/src/org/neugen/backend/NGBackendUtil.java index 83464b3..48fcaa0 100644 --- a/NeuGen/src/org/neugen/backend/NGBackendUtil.java +++ b/NeuGen/src/org/neugen/backend/NGBackendUtil.java @@ -53,11 +53,10 @@ import java.io.File; /** - * @brief NeuGen pseudo backend utility + * @brief NeuGen's pseudo-backend utility * @author stephanmg */ public final class NGBackendUtil { - /** * @brief */ @@ -67,7 +66,6 @@ private NGBackendUtil() { /** * @brief checks for file existence, if present force is true deletes - * * @param file * @param force * @return @@ -102,4 +100,4 @@ public static boolean del(File dir) { return false; } -} +} \ No newline at end of file diff --git a/NeuGen/src/org/neugen/backend/main/EnhancedCLI.java b/NeuGen/src/org/neugen/backend/main/EnhancedCLI.java index 96e1c00..779b834 100644 --- a/NeuGen/src/org/neugen/backend/main/EnhancedCLI.java +++ b/NeuGen/src/org/neugen/backend/main/EnhancedCLI.java @@ -54,14 +54,13 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.neugen.backend.NGBackend; import org.neugen.gui.NeuGenConstants; /** - * @brief enhanced command line interface (CLI) for NeuGen + * @brief enhanced command line interface (CLI) for NeuGen's pseudo-backend * @author stephanmg */ public final class EnhancedCLI { @@ -72,7 +71,7 @@ public final class EnhancedCLI { * @brief main * Execute as: java -cp NeuGen.jar org.neugen.backend.main.EnhancedCLI * - * @todo implement CLI enhanced (WIP) + * @todo implement CLI enhanced (WIP... if necessar) * @param args */ public static void main(String... args) { @@ -85,7 +84,7 @@ public static void main(String... args) { formatter.printHelp(NeuGenConstants.VERSION + " enhanced CLI", options); CommandLine line = new DefaultParser().parse( options, args ); - if( line.hasOption("generate") ) { + if(line.hasOption("generate") ) { generate(); } diff --git a/NeuGen/src/org/neugen/backend/main/SimpleCLI.java b/NeuGen/src/org/neugen/backend/main/SimpleCLI.java index b5a939a..c0819c4 100644 --- a/NeuGen/src/org/neugen/backend/main/SimpleCLI.java +++ b/NeuGen/src/org/neugen/backend/main/SimpleCLI.java @@ -56,11 +56,11 @@ import static org.neugen.backend.NGBackend.logger; /** - * @brief simple command line interface (CLI) for NeuGen + * @brief simple command line interface (CLI) for NeuGen's pseudo-backend * @author stephanmg */ public final class SimpleCLI { - @SuppressWarnings("CallToPrintStackTrace") + @SuppressWarnings({"CallToPrintStackTrace", "CallToThreadDumpStack"}) public static void main(String... args) { if (args.length != 4) { usage();