//genesis // // $Id: bounds.g 1.3.1.2 Thu, 04 Apr 2002 11:55:56 +0200 hugo $ // ////////////////////////////////////////////////////////////////////////////// //' //' Purkinje tutorial //' //' (C) 1998-2002 BBF-UIA //' //' see our site at http://www.bbf.uia.ac.be/ for more information regarding //' the Purkinje cell and genesis simulation software. //' //' //' functional ideas ... Erik De Schutter, erik@bbf.uia.ac.be //' genesis coding ..... Hugo Cornelis, hugo@bbf.uia.ac.be //' //' general feedback ... Reinoud Maex, Erik De Schutter //' ////////////////////////////////////////////////////////////////////////////// // bounds.g : boundaries for xcell and xgraph int include_bounds if ( {include_bounds} == 0 ) include_bounds = 1 //v last read boundary file str boundsLastFile = "" /// /// SH: BoundsInit /// /// PA: path..: boundary file /// /// DE: Initialize boundaries for xcell and xgraph /// boundaries are set as specified in {path} /// {path} is registered in boundsLastFile if successfull /// function BoundsInit(path) str path //- give diagnostics echo "Setting up boundaries from file "{path} //- create neutral container create neutral /bounds //- make it the current element pushe /bounds //! create the boundary tab file if it does not exist //sh "touch bounds.tab" //- open the tab file openfile {path} r //- read first line from file str line = {readfile {path} -line} //- loop over all lines in the file //! I do not know when EOF is read (undocumented), but this seems to //! work while (line != "") //- extract element name str element = {getarg {arglist {line}} -arg 1} //- if element does not start with comment char if ({substring {element} 0 0} != "#") //- create element for absolute boundaries create neutral {element}_abs //- addfields for minima and maxima addfield {element}_abs \ xcellmin -description \ "XCell minimum, absolute mode" addfield {element}_abs \ xcellmax -description \ "XCell maximum, absolute mode" addfield {element}_abs \ xgraphmin -description \ "XGraph minimum, absolute mode" addfield {element}_abs \ xgraphmax -description \ "XGraph maximum, absolute mode" //- set the fields for maxima and minima as in the file setfield {element}_abs \ xcellmin {getarg {arglist {line}} -arg 2} \ xcellmax {getarg {arglist {line}} -arg 3} \ xgraphmin {getarg {arglist {line}} -arg 4} \ xgraphmax {getarg {arglist {line}} -arg 5} //- create element for normalized values create neutral {element}_norm //- addfields for minima and maxima addfield {element}_norm \ xcellmin -description \ "XCell minimum, normalized mode" addfield {element}_norm \ xcellmax -description \ "XCell maximum, normalized mode" addfield {element}_norm \ xgraphmin -description \ "XGraph minimum, normalized mode" addfield {element}_norm \ xgraphmax -description \ "XGraph maximum, normalized mode" //- set the fields for maxima and minima as in the file setfield {element}_norm \ xcellmin {getarg {arglist {line}} -arg 6} \ xcellmax {getarg {arglist {line}} -arg 7} \ xgraphmin {getarg {arglist {line}} -arg 8} \ xgraphmax {getarg {arglist {line}} -arg 9} end //- read next line from the file line = {readfile {path} -line} end //- register last boundary file boundsLastFile = {path} //- close the tab file closefile {path} //- pop previous current element pope end /// /// SH: BoundElementName /// /// PA: source: subelement of compartment /// value.: field of subelement /// iMode.: 4 : absolute channel mode /// 5 : normalized channel mode /// /// RE: name of boundary element /// /// DE: Give the name for a boundary element in the given context /// function BoundElementName(source,value,iMode) str source str value int iMode //v name of boundary element str bound //- if chanmode is 4 if (iMode == 4) //- construct element name with boundaries for absolute mode bound = "/bounds/" \ @ {source} \ @ "_" \ @ {value} \ @ "_abs" //- else if chanmode is 5 elif (iMode == 5) //- construct element name with boundaries for normalized mode bound = "/bounds/" \ @ {source} \ @ "_" \ @ {value} \ @ "_norm" //- else else //- give diagnostics echo "Illegal chanmode for boundary name creation ("{iMode}")" //- set result : empty bound = "" end //- return result return {bound} end /// /// SH: BoundsReread /// /// DE: Reread the boundary file registered in {boundsLastFile} /// function BoundsReread //- delete root boundary element delete /bounds //- read registered boundary file BoundsInit {boundsLastFile} end end