[kepler-dev] Re: [kepler-cvs] kepler/src/org/sdm/spa ArrayToSequence.java

Stephen Andrew Neuendorffer neuendor at eecs.berkeley.edu
Wed Jul 7 15:14:25 PDT 2004


I'm not sure that this does what you want..

Note that having the '0' and the '1' connected to the same relation results 
in a non-deterministic merge: The bane of process networks.  Probably the 
PN director should detect this and throw an exception.  I think what you 
mean is an expression like:

reset ? 0 : input

My suggestion would be to try doing it without the accumulator...  You 
should be able to do this with one sampleDelay and one reasonably simple 
expression actor.

Steve

At 02:58 PM 7/7/2004, xiaowen wrote:
>Hi Steve,
>
>Thanks much for your suggestion and help in better understanding how I 
>might implement the actor without writing Java code!  I haven't used the 
>SampleDelay actor before, but now I see how I can use it to get the 
>behavior I want.
>
>I've spent some time thinking about how I can work in the reset 
>functionality and I think I've got a solution.
>
>            ---------
>reset  --> | count | ---> count
>update --> ---------
>
>For each element the workflow processes, Count first takes in a reset 
>token, outputs a count token, then takes in an update token.
>
>So except for the first iteration, we can think of it as taking in the 
>update token for (element n) and the reset token for (element n+1) at the 
>same time, then outputting the count token for (element n+1).
>
>The way to take care of the first iteration is to use a SampleDelay actor 
>to produce an extra update token.
>
>I've attached a workflow demonstrating what I mean.  If you get a chance, 
>will you please take a look at it and tell me what you think?
>
>
>Thanks!
>Xiaowen
>
>
>Stephen Andrew Neuendorffer wrote:
>
>>There is always a tension between 'write a new actor' and 'cobble 
>>together existing actors'.
>>Without saying which is better, I'll show how you could have done this 
>>without writing any Java code:
>>I'll ignore the reset, to make it a little simpler and allow this to be 
>>built using SDF, instead of something more
>>complex.  Although it is sometimes a mindbend, building simple actors 
>>like this using dataflow can be
>>like a warmup exercise for building more complex dataflow models.
>>Accumulate is like a SampleDelay actor, in a feedback loop with an adder.
>><relation name="relation" class="ptolemy.actor.TypedIORelation">
>></relation>
>><relation name="relation2" class="ptolemy.actor.TypedIORelation">
>>     <vertex name="vertex1" value="[285.0, 210.0]">
>>     </vertex>
>></relation>
>><entity name="AddSubtract" class="ptolemy.actor.lib.AddSubtract">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[230.0, 210.0]">
>>     </property>
>></entity>
>><port name="port" class="ptolemy.actor.TypedIOPort">
>>     <property name="input"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[140.0, 200.0]">
>>     </property>
>></port>
>><property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[175.0, 145.0]">
>>     </property>
>></property>
>><relation name="relation4" class="ptolemy.actor.TypedIORelation">
>>     <vertex name="vertex1" value="[360.0, 275.0]">
>>     </vertex>
>></relation>
>><port name="port2" class="ptolemy.actor.TypedIOPort">
>>     <property name="output"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[400.0, 210.0]">
>>     </property>
>></port>
>><entity name="SampleDelay" class="ptolemy.domains.sdf.lib.SampleDelay">
>>     <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>>         <property name="attributeName" 
>> class="ptolemy.kernel.util.StringAttribute" value="initialOutputs">
>>         </property>
>>         <property name="displayWidth" 
>> class="ptolemy.data.expr.Parameter" value="20">
>>         </property>
>>     </property>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[315.0, 245.0]">
>>     </property>
>></entity>
>>     <link port="port" relation="relation"/>
>>     <link port="port2" relation="relation2"/>
>>     <link port="AddSubtract.plus" relation="relation"/>
>>     <link port="AddSubtract.minus" relation="relation4"/>
>>     <link port="AddSubtract.output" relation="relation2"/>
>>     <link port="SampleDelay.input" relation="relation2"/>
>>     <link port="SampleDelay.output" relation="relation4"/>
>>
>>Depending on where you tap the output, you will get either a first output 
>>of zero, or a first output equal to the first input.
>>If you tap in such a place where the first output is always zero (with 
>>the SampleDelay connected directly to the output port),
>>then SDF is smart enough to recognize this and output the zero during 
>>initialization.
>><relation name="relation" class="ptolemy.actor.TypedIORelation">
>></relation>
>><relation name="relation2" class="ptolemy.actor.TypedIORelation">
>>     <vertex name="vertex1" value="[285.0, 210.0]">
>>     </vertex>
>></relation>
>><entity name="AddSubtract" class="ptolemy.actor.lib.AddSubtract">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[230.0, 210.0]">
>>     </property>
>></entity>
>><property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[175.0, 145.0]">
>>     </property>
>></property>
>><port name="port" class="ptolemy.actor.TypedIOPort">
>>     <property name="input"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[140.0, 200.0]">
>>     </property>
>></port>
>><relation name="relation4" class="ptolemy.actor.TypedIORelation">
>>     <vertex name="vertex1" value="[360.0, 275.0]">
>>     </vertex>
>></relation>
>><port name="port2" class="ptolemy.actor.TypedIOPort">
>>     <property name="output"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[400.0, 275.0]">
>>     </property>
>></port>
>><entity name="SampleDelay" class="ptolemy.domains.sdf.lib.SampleDelay">
>>     <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>>         <property name="attributeName" 
>> class="ptolemy.kernel.util.StringAttribute" value="initialOutputs">
>>         </property>
>>         <property name="displayWidth" 
>> class="ptolemy.data.expr.Parameter" value="20">
>>         </property>
>>     </property>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[315.0, 245.0]">
>>     </property>
>></entity>
>>     <link port="port" relation="relation"/>
>>     <link port="port2" relation="relation4"/>
>>     <link port="AddSubtract.plus" relation="relation"/>
>>     <link port="AddSubtract.minus" relation="relation4"/>
>>     <link port="AddSubtract.output" relation="relation2"/>
>>     <link port="SampleDelay.input" relation="relation2"/>
>>     <link port="SampleDelay.output" relation="relation4"/>
>>Interestingly enough, if you take an Accumulate actor and feed it's 
>>output into a SampleDelay, then the first output will
>>always be zero, and it will break feedback loops!  This is behaviorally 
>>identical as the previous example, at the expense of duplication of state.
>>This is a form of what is called retiming in the hardware design world.
>><relation name="relation" class="ptolemy.actor.TypedIORelation">
>></relation>
>><relation name="relation2" class="ptolemy.actor.TypedIORelation">
>>     <vertex name="vertex1" value="[285.0, 210.0]">
>>     </vertex>
>></relation>
>><relation name="relation3" class="ptolemy.actor.TypedIORelation">
>></relation>
>><entity name="AddSubtract" class="ptolemy.actor.lib.AddSubtract">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[230.0, 210.0]">
>>     </property>
>></entity>
>><port name="port" class="ptolemy.actor.TypedIOPort">
>>     <property name="input"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[140.0, 200.0]">
>>     </property>
>></port>
>><property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[175.0, 145.0]">
>>     </property>
>></property>
>><relation name="relation4" class="ptolemy.actor.TypedIORelation">
>>     <vertex name="vertex1" value="[360.0, 275.0]">
>>     </vertex>
>></relation>
>><entity name="SampleDelay2" class="ptolemy.domains.sdf.lib.SampleDelay">
>>     <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>>         <property name="attributeName" 
>> class="ptolemy.kernel.util.StringAttribute" value="initialOutputs">
>>         </property>
>>         <property name="displayWidth" 
>> class="ptolemy.data.expr.Parameter" value="20">
>>         </property>
>>     </property>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[415.0, 210.0]">
>>     </property>
>></entity>
>><port name="port2" class="ptolemy.actor.TypedIOPort">
>>     <property name="output"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[500.0, 210.0]">
>>     </property>
>></port>
>><entity name="SampleDelay" class="ptolemy.domains.sdf.lib.SampleDelay">
>>     <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>>         <property name="attributeName" 
>> class="ptolemy.kernel.util.StringAttribute" value="initialOutputs">
>>         </property>
>>         <property name="displayWidth" 
>> class="ptolemy.data.expr.Parameter" value="20">
>>         </property>
>>     </property>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[315.0, 245.0]">
>>     </property>
>></entity>
>>     <link port="port" relation="relation"/>
>>     <link port="port2" relation="relation3"/>
>>     <link port="AddSubtract.plus" relation="relation"/>
>>     <link port="AddSubtract.minus" relation="relation4"/>
>>     <link port="AddSubtract.output" relation="relation2"/>
>>     <link port="SampleDelay.input" relation="relation2"/>
>>     <link port="SampleDelay.output" relation="relation4"/>
>>     <link port="SampleDelay2.input" relation="relation2"/>
>>     <link port="SampleDelay2.output" relation="relation3"/>
>>As near as I can tell, you could implement your count actor as the 
>>following (disregarding the reset input, which makes it more complex...
>>Implementing reset could be done in an SR model)
>><entity name="Const" class="ptolemy.actor.lib.Const">
>>     <doc>Create a constant sequence</doc>
>>     <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>>         <property name="attributeName" 
>> class="ptolemy.kernel.util.StringAttribute" value="value">
>>         </property>
>>         <property name="displayWidth" 
>> class="ptolemy.data.expr.Parameter" value="60">
>>         </property>
>>     </property>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[210.0, 200.0]">
>>     </property>
>></entity>
>><relation name="relation" class="ptolemy.actor.TypedIORelation">
>></relation>
>><relation name="relation2" class="ptolemy.actor.TypedIORelation">
>></relation>
>><entity name="Accumulator" class="ptolemy.actor.lib.Accumulator">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[305.0, 210.0]">
>>     </property>
>></entity>
>><relation name="relation3" class="ptolemy.actor.TypedIORelation">
>></relation>
>><relation name="relation4" class="ptolemy.actor.TypedIORelation">
>></relation>
>><property name="SDF Director" class="ptolemy.domains.sdf.kernel.SDFDirector">
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[175.0, 145.0]">
>>     </property>
>></property>
>><port name="port" class="ptolemy.actor.TypedIOPort">
>>     <property name="input"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[140.0, 200.0]">
>>     </property>
>></port>
>><entity name="SampleDelay2" class="ptolemy.domains.sdf.lib.SampleDelay">
>>     <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>>         <property name="attributeName" 
>> class="ptolemy.kernel.util.StringAttribute" value="initialOutputs">
>>         </property>
>>         <property name="displayWidth" 
>> class="ptolemy.data.expr.Parameter" value="20">
>>         </property>
>>     </property>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[385.0, 210.0]">
>>     </property>
>></entity>
>><port name="port2" class="ptolemy.actor.TypedIOPort">
>>     <property name="output"/>
>>     <property name="_location" class="ptolemy.kernel.util.Location" 
>> value="[470.0, 210.0]">
>>     </property>
>></port>
>>     <link port="port" relation="relation"/>
>>     <link port="port2" relation="relation3"/>
>>     <link port="SampleDelay2.input" relation="relation4"/>
>>     <link port="SampleDelay2.output" relation="relation3"/>
>>     <link port="Const.output" relation="relation2"/>
>>     <link port="Const.trigger" relation="relation"/>
>>     <link port="Accumulator.input" relation="relation2"/>
>>     <link port="Accumulator.output" relation="relation4"/>
>
>
>
><?xml version="1.0" standalone="no"?>
><!DOCTYPE entity PUBLIC "-//UC Berkeley//DTD MoML 1//EN"
>     "http://ptolemy.eecs.berkeley.edu/xml/dtd/MoML_1.dtd">
><entity name="my-count" class="ptolemy.actor.TypedCompositeActor">
>     <property name="_createdBy" 
> class="ptolemy.kernel.attributes.VersionAttribute" value="4.0">
>     </property>
>     <property name="_windowProperties" 
> class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds = {60, 
> 218, 732, 483}, maximized = false}">
>     </property>
>     <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" 
> value="[517, 357]">
>     </property>
>     <property name="_vergilZoomFactor" 
> class="ptolemy.data.expr.ExpertParameter" value="1.0">
>     </property>
>     <property name="_vergilCenter" 
> class="ptolemy.data.expr.ExpertParameter" value="{258.5, 178.5}">
>     </property>
>     <property name="PN Director" 
> class="ptolemy.domains.pn.kernel.PNDirector">
>         <property name="_location" class="ptolemy.kernel.util.Location" 
> value="[95.0, 50.0]">
>         </property>
>     </property>
>     <entity name="Ramp" class="ptolemy.actor.lib.Ramp">
>         <property name="firingCountLimit" 
> class="ptolemy.data.expr.Parameter" value="1">
>         </property>
>         <doc>Create a sequence of tokens with increasing value</doc>
>         <property name="_location" class="ptolemy.kernel.util.Location" 
> value="[75.0, 125.0]">
>         </property>
>     </entity>
>     <entity name="Display" class="ptolemy.actor.lib.gui.Display">
>         <property name="_windowProperties" 
> class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds = 
> {831, 569, 290, 235}, maximized = false}">
>         </property>
>         <property name="_location" class="ptolemy.kernel.util.Location" 
> value="[400.0, 310.0]">
>         </property>
>     </entity>
>     <entity name="count" class="ptolemy.actor.TypedCompositeActor">
>         <property name="_location" class="ptolemy.kernel.util.Location" 
> value="[255.986328125, 310.5078125]">
>         </property>
>         <port name="input" class="ptolemy.actor.TypedIOPort">
>             <property name="input"/>
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[40.0, 65.0]">
>             </property>
>             <property name="_showName" 
> class="ptolemy.kernel.util.SingletonAttribute">
>             </property>
>         </port>
>         <port name="output" class="ptolemy.actor.TypedIOPort">
>             <property name="output"/>
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[500.0, 160.0]">
>             </property>
>             <property name="_showName" 
> class="ptolemy.kernel.util.SingletonAttribute">
>             </property>
>         </port>
>         <port name="reset" class="ptolemy.actor.TypedIOPort">
>             <property name="input"/>
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[40.0, 170.0]">
>             </property>
>             <property name="_showName" 
> class="ptolemy.kernel.util.SingletonAttribute">
>             </property>
>         </port>
>         <entity name="Accumulator" class="ptolemy.actor.lib.Accumulator">
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[422.3535919189453, 
> 159.19550704956055]">
>             </property>
>         </entity>
>         <entity name="SampleDelay" 
> class="ptolemy.domains.sdf.lib.SampleDelay">
>             <property name="_icon" 
> class="ptolemy.vergil.icon.BoxedValueIcon">
>                 <property name="attributeName" 
> class="ptolemy.kernel.util.StringAttribute" value="initialOutputs">
>                 </property>
>                 <property name="displayWidth" 
> class="ptolemy.data.expr.Parameter" value="20">
>                 </property>
>             </property>
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[115.0, 65.0]">
>             </property>
>         </entity>
>         <entity name="Expression" class="ptolemy.actor.lib.Expression">
>             <property name="expression" 
> class="ptolemy.kernel.util.StringAttribute" value="input * mul">
>             </property>
>             <property name="_icon" 
> class="ptolemy.vergil.icon.BoxedValueIcon">
>                 <property name="attributeName" 
> class="ptolemy.kernel.util.StringAttribute" value="expression">
>                 </property>
>                 <property name="displayWidth" 
> class="ptolemy.data.expr.Parameter" value="60">
>                 </property>
>             </property>
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[322.3535919189453, 
> 74.19550704956055]">
>             </property>
>             <port name="input" class="ptolemy.actor.TypedIOPort">
>                 <property name="input"/>
>                 <property name="_type" 
> class="ptolemy.actor.TypeAttribute" value="unknown">
>                 </property>
>             </port>
>             <port name="mul" class="ptolemy.actor.TypedIOPort">
>                 <property name="input"/>
>                 <property name="_type" 
> class="ptolemy.actor.TypeAttribute" value="unknown">
>                 </property>
>             </port>
>         </entity>
>         <entity name="BooleanSwitch" class="ptolemy.actor.lib.BooleanSwitch">
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[135.0, 125.0]">
>             </property>
>             <property name="_hideName" 
> class="ptolemy.kernel.util.SingletonAttribute">
>             </property>
>             <port name="control" class="ptolemy.actor.TypedIOPort">
>                 <property name="input"/>
>                 <property name="_cardinal" 
> class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
>                 </property>
>             </port>
>         </entity>
>         <entity name="Expression2" class="ptolemy.actor.lib.Expression">
>             <property name="expression" 
> class="ptolemy.kernel.util.StringAttribute" value="1">
>             </property>
>             <property name="_icon" 
> class="ptolemy.vergil.icon.BoxedValueIcon">
>                 <property name="attributeName" 
> class="ptolemy.kernel.util.StringAttribute" value="expression">
>                 </property>
>                 <property name="displayWidth" 
> class="ptolemy.data.expr.Parameter" value="60">
>                 </property>
>             </property>
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[210.0, 135.0]">
>             </property>
>             <property name="_hideName" 
> class="ptolemy.kernel.util.SingletonAttribute">
>             </property>
>             <port name="input" class="ptolemy.actor.TypedIOPort">
>                 <property name="input"/>
>                 <property name="_type" 
> class="ptolemy.actor.TypeAttribute" value="unknown">
>                 </property>
>             </port>
>         </entity>
>         <entity name="Expression3" class="ptolemy.actor.lib.Expression">
>             <property name="expression" 
> class="ptolemy.kernel.util.StringAttribute" value="0">
>             </property>
>             <property name="_icon" 
> class="ptolemy.vergil.icon.BoxedValueIcon">
>                 <property name="attributeName" 
> class="ptolemy.kernel.util.StringAttribute" value="expression">
>                 </property>
>                 <property name="displayWidth" 
> class="ptolemy.data.expr.Parameter" value="60">
>                 </property>
>             </property>
>             <property name="_location" 
> class="ptolemy.kernel.util.Location" value="[210.0, 85.0]">
>             </property>
>             <property name="_hideName" 
> class="ptolemy.kernel.util.SingletonAttribute">
>             </property>
>             <port name="input" class="ptolemy.actor.TypedIOPort">
>                 <property name="input"/>
>                 <property name="_type" 
> class="ptolemy.actor.TypeAttribute" value="unknown">
>                 </property>
>             </port>
>         </entity>
>         <relation name="relation2" class="ptolemy.actor.TypedIORelation">
>         </relation>
>         <relation name="relation3" class="ptolemy.actor.TypedIORelation">
>         </relation>
>         <relation name="relation4" class="ptolemy.actor.TypedIORelation">
>         </relation>
>         <relation name="relation5" class="ptolemy.actor.TypedIORelation">
>             <vertex name="vertex1" value="[75.0, 170.0]">
>             </vertex>
>         </relation>
>         <relation name="relation6" class="ptolemy.actor.TypedIORelation">
>         </relation>
>         <relation name="relation7" class="ptolemy.actor.TypedIORelation">
>         </relation>
>         <relation name="relation8" class="ptolemy.actor.TypedIORelation">
>             <vertex name="vertex1" value="[252.3535919189453, 
> 84.19550704956055]">
>             </vertex>
>         </relation>
>         <relation name="relation" class="ptolemy.actor.TypedIORelation">
>         </relation>
>         <link port="input" relation="relation2"/>
>         <link port="output" relation="relation3"/>
>         <link port="reset" relation="relation5"/>
>         <link port="Accumulator.input" relation="relation"/>
>         <link port="Accumulator.output" relation="relation3"/>
>         <link port="Accumulator.reset" relation="relation5"/>
>         <link port="SampleDelay.input" relation="relation2"/>
>         <link port="SampleDelay.output" relation="relation4"/>
>         <link port="Expression.output" relation="relation"/>
>         <link port="Expression.input" relation="relation4"/>
>         <link port="Expression.mul" relation="relation8"/>
>         <link port="BooleanSwitch.input" relation="relation5"/>
>         <link port="BooleanSwitch.control" relation="relation5"/>
>         <link port="BooleanSwitch.trueOutput" relation="relation6"/>
>         <link port="BooleanSwitch.falseOutput" relation="relation7"/>
>         <link port="Expression2.output" relation="relation8"/>
>         <link port="Expression2.input" relation="relation7"/>
>         <link port="Expression3.output" relation="relation8"/>
>         <link port="Expression3.input" relation="relation6"/>
>     </entity>
>     <entity name="Expression" class="ptolemy.actor.lib.Expression">
>         <property name="expression" 
> class="ptolemy.kernel.util.StringAttribute" value="1">
>         </property>
>         <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>             <property name="attributeName" 
> class="ptolemy.kernel.util.StringAttribute" value="expression">
>             </property>
>             <property name="displayWidth" 
> class="ptolemy.data.expr.Parameter" value="60">
>             </property>
>         </property>
>         <property name="_location" class="ptolemy.kernel.util.Location" 
> value="[283.591796875, 259.3046875]">
>         </property>
>         <port name="output" class="ptolemy.actor.TypedIOPort">
>             <property name="output"/>
>             <property name="_cardinal" 
> class="ptolemy.kernel.util.StringAttribute" value="WEST">
>             </property>
>         </port>
>         <port name="input" class="ptolemy.actor.TypedIOPort">
>             <property name="input"/>
>             <property name="_type" class="ptolemy.actor.TypeAttribute" 
> value="unknown">
>             </property>
>             <property name="_cardinal" 
> class="ptolemy.kernel.util.StringAttribute" value="EAST">
>             </property>
>         </port>
>     </entity>
>     <entity name="Expression2" class="ptolemy.actor.lib.Expression">
>         <property name="expression" 
> class="ptolemy.kernel.util.StringAttribute" 
> value="{false,false,false,true,false,true,true}">
>         </property>
>         <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
>             <property name="attributeName" 
> class="ptolemy.kernel.util.StringAttribute" value="expression">
>             </property>
>             <property name="displayWidth" 
> class="ptolemy.data.expr.Parameter" value="60">
>             </property>
>         </property>
>         <property name="_location" class="ptolemy.kernel.util.Location" 
> value="[255.0, 125.0]">
>         </property>
>         <port name="input" class="ptolemy.actor.TypedIOPort">
>             <property name="input"/>
>             <property name="_type" class="ptolemy.actor.TypeAttribute" 
> value="unknown">
>             </property>
>         </port>
>     </entity>
>     <entity name="ArrayToSequence" 
> class="ptolemy.domains.sdf.lib.ArrayToSequence">
>         <property name="enforceArrayLength" 
> class="ptolemy.data.expr.Parameter" value="false">
>         </property>
>         <property name="_location" class="ptolemy.kernel.util.Location" 
> value="[85.0, 320.0]">
>         </property>
>     </entity>
>     <relation name="relation2" class="ptolemy.actor.TypedIORelation">
>     </relation>
>     <relation name="relation5" class="ptolemy.actor.TypedIORelation">
>         <vertex name="vertex1" value="[340.0, 310.0]">
>         </vertex>
>     </relation>
>     <relation name="relation3" class="ptolemy.actor.TypedIORelation">
>     </relation>
>     <relation name="relation4" class="ptolemy.actor.TypedIORelation">
>     </relation>
>     <relation name="relation" class="ptolemy.actor.TypedIORelation">
>     </relation>
>     <link port="Ramp.output" relation="relation3"/>
>     <link port="Display.input" relation="relation5"/>
>     <link port="count.input" relation="relation2"/>
>     <link port="count.output" relation="relation5"/>
>     <link port="count.reset" relation="relation"/>
>     <link port="Expression.output" relation="relation2"/>
>     <link port="Expression.input" relation="relation5"/>
>     <link port="Expression2.output" relation="relation4"/>
>     <link port="Expression2.input" relation="relation3"/>
>     <link port="ArrayToSequence.input" relation="relation4"/>
>     <link port="ArrayToSequence.output" relation="relation"/>
></entity>





More information about the Kepler-dev mailing list