Both sides previous revisionPrevious revisionNext revision | Previous revision |
dev:program_ulam [2015/07/02 01:07] – [Interaction between three Elements] xychen | dev:program_ulam [2016/01/14 07:13] (current) – ackley |
---|
==== EventWindow Indices ==== | ==== EventWindow Indices ==== |
| |
Left picture is an indices map within an EventWindow. The sites are labeled from 1 to 40. Right is a colored map. We use different names to distinct different 'tens'. For 1 to 10 we use W1,..,W0. For 11 to 20 we use E1,...,E0. For 21 to 30 we use F1,...,F0. And from 31 to 40 we use G1,...,G0. | {{ :dev:event-window-10.png?300|}} The image at right (click to enlarge) shows the indexing scheme used for sites within an ''EventWindow''. Both 2D 'coord' numbering and a 1D 'site number' approach are offered. |
{{:dev:ew_index.png?220 |}}{{:dev:mfms_ew_index.png?260 |}} | |
| The ''getCoord(siteNum)'' function converts an 1D index (which is an ''Unsigned(6)'' ) to a 2D coordinate (which is a quark ''C2D''). The ''getSiteNumber(coord)'' convert ''C2D'' back to 1-d ''Unsigned(6)''. The quark ''C2D'' has ''getX()'' and ''getY()'' methods to access the //x// and //y// coordinate values individually. |
| |
| In general, when code is referring to individual fixed sites within the event window, the 1D coordinate system is used (see the 'First' element below for an example). Two-dimensional C2D indexing is more commonly used when there is some flexibility depending on geometry or relative positions. |
| |
===== The 'First' Element ===== | ===== The 'First' Element ===== |
EventWindow ew; | EventWindow ew; |
Void behave(){ | Void behave(){ |
ew[1]=ew[0]; | ew[1]=ew[0]; // Copy self one site west |
} | } |
} | } |
DebugUtils du; | DebugUtils du; |
EventWindow ew; | EventWindow ew; |
Once oldFlag; | Once oc; |
AtomUtils au; | AtomUtils au; |
Weight wa; | Weight wa; |
Void behave(){ | Void behave(){ |
Int msum; | Int msum; |
if(oldFlag.new()){ | if(oc.new()){ |
initSelf(); | initSelf(); |
du.printContext(); | du.printContext(); |
} | } |
</code> | </code> |
| |
| We use a ''Once'' quark to call the ''initSelf()'' //once//. We have used a lot of quarks before without realizing that. The ''EventWindow'', ''DebugUtils'', ''Random'', ''AtomUtils'' are all quarks. It's the same thing here to use a ''Once'': instantiate ''Once oc'', then use ''oc.new()'' to decide if this is the first time of a call. |
| |
| In the ''changeColor()'' of this ''Node'' element, we use ''ARGB getColor()'' to give new color values. This ''getColor()'' returns a array with Four values: //Opacity//, //Red//, //Green// and //Blue//. |
| |
| Like other Neurons, our ''Node'' will be fired by neighbors. In this simplified case, only the //left neighbors// can trigger our ''Nodes''. This time we need to scan the whole ''EventWindow''. To decide which neighbors are located to the left we use C2D coordinate. Those Atoms with negative x coordinate are to the left of our ''Node''. |
| |