/*
* Copyright (c) 2005–2012 Goethe Center for Scientific Computing - Simulation and Modelling (G-CSC Frankfurt)
* Copyright (c) 2012-2015 Goethe Center for Scientific Computing - Computational Neuroscience (G-CSC Frankfurt)
*
* This file is part of NeuGen.
*
* NeuGen is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* as published by the Free Software Foundation.
*
* see: http://opensource.org/licenses/LGPL-3.0
* file://path/to/NeuGen/LICENSE
*
* NeuGen is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* This version of NeuGen includes copyright notice and attribution requirements.
* According to the LGPL this information must be displayed even if you modify
* the source code of NeuGen. The copyright statement/attribution may not be removed.
*
* Attribution Requirements:
*
* If you create derived work you must do the following regarding copyright
* notice and author attribution.
*
* Add an additional notice, stating that you modified NeuGen. In addition
* you must cite the publications listed below. A suitable notice might read
* "NeuGen source code modified by YourName 2012".
*
* Note, that these requirements are in full accordance with the LGPL v3
* (see 7. Additional Terms, b).
*
* Publications:
*
* S. Wolf, S. Grein, G. Queisser. NeuGen 2.0 -
* Employing NeuGen 2.0 to automatically generate realistic
* morphologies of hippocapal neurons and neural networks in 3D.
* Neuroinformatics, 2013, 11(2), pp. 137-148, doi: 10.1007/s12021-012-9170-1
*
*
* J. P. Eberhard, A. Wanner, G. Wittum. NeuGen -
* A tool for the generation of realistic morphology
* of cortical neurons and neural networks in 3D.
* Neurocomputing, 70(1-3), pp. 327-343, doi: 10.1016/j.neucom.2006.01.028
*
*/
/*
* File: AxonParam.java
* Created on 21.08.2009, 14:36:34
*
*/
package org.neugen.datastructures.parameter;
import org.neugen.parsers.ConfigParser;
import org.neugen.parsers.ConfigParserContainer;
/**
* Axon Parameter
*
* @author Alexander Wanner
*
*/
public final class AxonParam extends CommonTreeParam {
/** Axon hillock parameter class. */
public final class Hillock extends KeyIdentificable {
/** Axon hillock length. */
private final Parameter<Float> length;
/** Soma proximal radius */
private final Parameter<Float> proximalRadius;
public Hillock(ConfigParser parser, KeyIdentificable container) {
super(container, "hillock");
length = new Parameter<Float>(parser, this, "legth");
proximalRadius = new Parameter<Float>(parser, this, "proximal_radius");
}
public boolean isValid() {
return length.isValid() && proximalRadius.isValid();
}
public float getLength() {
return length.getValue();
}
public float getProximalRadius() {
return proximalRadius.getValue();
}
}
/**
* Initial segment parameter class.
* Initial segment follows the axonal hillock.
*/
public final class InitialSegment extends KeyIdentificable {
private final Parameter<Float> length;
public InitialSegment(ConfigParser parser, KeyIdentificable container) {
super(container, "initial_segment");
length = new Parameter<Float>(parser, this, "legth");
}
public float getLength() {
return length.getValue() < 0 ? 0 : length.getValue();
}
public boolean isValid() {
return length.isValid();
}
}
/** Myelin parameter class. */
public final class Myelin extends KeyIdentificable {
private final Parameter<Float> myelinatedLegth;
private final Parameter<Float> ranvierLegth;
public Myelin(ConfigParser parser, KeyIdentificable container) {
super(container, "myelin");
myelinatedLegth = new Parameter<Float>(parser, this, "myelinated_legth");
ranvierLegth = new Parameter<Float>(parser, this, "ranvier_legth");
}
public float getMyelinatedLegth() {
return myelinatedLegth.getValue() < 0 ? 0 : myelinatedLegth.getValue();
}
public float getRanvierLegth() {
return ranvierLegth.getValue() < 0 ? 0 : ranvierLegth.getValue();
}
public boolean isValid() {
return myelinatedLegth.isValid() && ranvierLegth.isValid();
}
}
/** Axonal hillock. */
private final Hillock hillock;
/** Initial segment. */
private final InitialSegment initialSegment;
/** Description of myelinisation. */
private final Myelin myelin;
/**
* Constructor.
* @param container is other KeyIdentificable param.
*/
public AxonParam(KeyIdentificable container) {
super(container, "axon");
hillock = new Hillock(ConfigParserContainer.getParamParser(), this);
initialSegment = new InitialSegment(ConfigParserContainer.getParamParser(), this);
myelin = new Myelin(ConfigParserContainer.getParamParser(), this);
}
public Hillock getHillock() {
return hillock;
}
public InitialSegment getInitialSegment() {
return initialSegment;
}
public Myelin getMyelin() {
return myelin;
}
@Override
public boolean isValid() {
return super.isValid()
&& hillock.isValid()
&& initialSegment.isValid()
&& myelin.isValid();
}
/**
* Returns representation string for the value in form [min,max]
*
* @return the representation string for the value in form [min,max].
*/
@Override
public String toString() {
String ret = key + " parameter: validation = " + isValid() + "\n "
+ super.toString() + " hillock: len= " + hillock.length.toString()
+ " prox_rad= " + hillock.proximalRadius.toString() + "\n"
+ " initial segment: len=" + initialSegment.length.toString() + "\n"
+ " myelin: myelinated_length=" + myelin.myelinatedLegth.getValue()
+ " ranvier_legth=" + myelin.ranvierLegth.getValue() + "\n" + key + " end\n";
return ret;
}
}