[kepler-dev] [kepler-cvs] kepler/workflows/test UnitConversion.xml

Dan Higgins higgins at nceas.ucsb.edu
Wed May 11 10:30:51 PDT 2005


Hi Shawn,
    Things are a little more complicated than I indicated. There are 
static and dynamic unit treatments, as indicated in the referenced 
sections of the documentation. The example uses the dynamic unit 
treatment which doesn't set units on the ports at all! [The static unit 
compatibility uses the port settings, as I understand it.] The 
interesting thing is that the unit conversion apparently uses an 
agebraic parser so that new combined units can be used. This is a 
capability you may need to add to your semantic engine.

    BTW, I think Rich's original example was the 'becquerel ' and the 
'hertz'. Both have units of inverse time (1/seconds), but the becquerel 
is designed to measure radioactivity while the hertz is a unit of 
frequency. To my thinking this is an example of mixing semantics and 
units (like count/(1.6 m2)) where the area of the test (1.6 m2) has been 
mixed in with the unit.

    I didn't mean to imply that we shouldn't check unit compatibility; I 
just wanted to point out what Kepler does now.

Dan

----

Shawn Bowers wrote:

> It's not clear from your log message Dan, but it sounds like you are 
> saying that when you run a workflow with connected ports having 
> different units, the unit system (sitting in the background) 
> automatically does the unit conversions.
>
> I wonder if this is the way we want to do it in Kepler from a UI 
> perspective, i.e., I think we probably want to (a) notify users when 
> units are incompatible prior to running the workflow (which can be 
> done now in Ptolemy but only by running the "constraint solver"), and 
> (b) offer to "resolve" the incompatibility via a set of choices (for 
> units, the choices are probably pretty limitted).  In general, as Matt 
> and Rich have pointed out, there are cases where you can convert the 
> units, but semantically the conversion is incorrect.
>
>
> shawn
>
>
>
>
> Daniel Higgins wrote:
>
>> higgins     05/05/11 09:53:30
>>
>>   Added:       workflows/test UnitConversion.xml
>>   Log:
>>   An example of how unit conversions can be automatically carried out 
>> by Kepler/PTII.
>>     Revision  Changes    Path
>>   1.1                  kepler/workflows/test/UnitConversion.xml
>>     Index: UnitConversion.xml
>>   ===================================================================
>>   <?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="UnitConversion" 
>> class="ptolemy.actor.TypedCompositeActor">
>>       <property name="_createdBy" 
>> class="ptolemy.kernel.attributes.VersionAttribute" value="5.0-beta">
>>       </property>
>>       <property name="SDF Director" 
>> class="ptolemy.domains.sdf.kernel.SDFDirector">
>>           <property name="iterations" 
>> class="ptolemy.data.expr.Parameter" value="1">
>>           </property>
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.300.1">
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="[265.0, 115.0]">
>>           </property>
>>       </property>
>>       <property name="BasicUnits" class="ptolemy.data.unit.UnitSystem">
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.234.1">
>>           </property>
>>           <property name="meters" class="ptolemy.data.unit.BaseUnit" 
>> value="1.0">
>>               <property name="Length" 
>> class="ptolemy.data.unit.UnitCategory">
>>               </property>
>>           </property>
>>           <property name="meter" class="ptolemy.data.expr.Parameter" 
>> value="meters">
>>           </property>
>>           <property name="m" class="ptolemy.data.expr.Parameter" 
>> value="meters">
>>           </property>
>>           <property name="cm" class="ptolemy.data.expr.Parameter" 
>> value="0.01*meters">
>>           </property>
>>           <property name="centimeters" 
>> class="ptolemy.data.expr.Parameter" value="cm">
>>           </property>
>>           <property name="centimeter" 
>> class="ptolemy.data.expr.Parameter" value="cm">
>>           </property>
>>           <property name="mm" class="ptolemy.data.expr.Parameter" 
>> value="0.001*meters">
>>           </property>
>>           <property name="millimeter" 
>> class="ptolemy.data.expr.Parameter" value="mm">
>>           </property>
>>           <property name="millimeters" 
>> class="ptolemy.data.expr.Parameter" value="mm">
>>           </property>
>>           <property name="in" class="ptolemy.data.expr.Parameter" 
>> value="2.54*cm">
>>           </property>
>>           <property name="inch" class="ptolemy.data.expr.Parameter" 
>> value="in">
>>           </property>
>>           <property name="inches" class="ptolemy.data.expr.Parameter" 
>> value="in">
>>           </property>
>>           <property name="seconds" class="ptolemy.data.unit.BaseUnit" 
>> value="1.0">
>>               <property name="Time" 
>> class="ptolemy.data.unit.UnitCategory">
>>               </property>
>>           </property>
>>           <property name="sec" class="ptolemy.data.expr.Parameter" 
>> value="seconds">
>>           </property>
>>           <property name="second" class="ptolemy.data.expr.Parameter" 
>> value="seconds">
>>           </property>
>>           <property name="ms" class="ptolemy.data.expr.Parameter" 
>> value="0.001*seconds">
>>           </property>
>>           <property name="millisecond" 
>> class="ptolemy.data.expr.Parameter" value="ms">
>>           </property>
>>           <property name="milliseconds" 
>> class="ptolemy.data.expr.Parameter" value="ms">
>>           </property>
>>           <property name="_iconDescription" 
>> class="ptolemy.kernel.util.SingletonConfigurableAttribute">
>>               <configure>
>>             <svg>
>>               <rect x="-30" y="-15" width="60" height="30" 
>> style="fill:grey"></rect>
>>             </svg>
>>           </configure>
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="[275.0, 175.0]">
>>           </property>
>>       </property>
>>       <property name="Annotation" 
>> class="ptolemy.vergil.kernel.attributes.TextAttribute">
>>           <property name="text" 
>> class="ptolemy.kernel.util.StringAttribute" value="This is an example 
>> of unit conversion in Kepler, as supplied by PtolemyII.&#10;First, 
>> add a Unit System ('Basics Units' in this example). Then you can 
>> use&#10;expressions of units as indicated in this example and unit 
>> conversion will be&#10;automatically carried out. Note that the 
>> results of adding these 4 velocities is&#10;&quot;12.0254 * meters / 
>> seconds&quot;&#10;&#10;Dan Higgins - May 11, 2005">
>>           </property>
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.233.1">
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="{65, 430}">
>>           </property>
>>       </property>
>>       <property name="_windowProperties" 
>> class="ptolemy.actor.gui.WindowPropertiesAttribute" 
>> value="{bounds={222, 118, 836, 787}, maximized=false}">
>>       </property>
>>       <property name="_vergilSize" 
>> class="ptolemy.actor.gui.SizeAttribute" value="[600, 660]">
>>       </property>
>>       <property name="_vergilZoomFactor" 
>> class="ptolemy.data.expr.ExpertParameter" value="1.0">
>>       </property>
>>       <property name="_vergilCenter" 
>> class="ptolemy.data.expr.ExpertParameter" value="{300.0, 330.0}">
>>       </property>
>>       <entity name="Display" class="ptolemy.actor.lib.gui.Display">
>>           <property name="_windowProperties" 
>> class="ptolemy.actor.gui.WindowPropertiesAttribute" 
>> value="{bounds={953, 800, 292, 224}, maximized=false}">
>>           </property>
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.7.1">
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="{420, 270}">
>>           </property>
>>       </entity>
>>       <entity name="Constant" class="ptolemy.actor.lib.Const">
>>           <property name="value" class="ptolemy.data.expr.Parameter" 
>> value="1*m/sec">
>>           </property>
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.1.1">
>>           </property>
>>           <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="40">
>>               </property>
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="{90, 235}">
>>           </property>
>>       </entity>
>>       <entity name="Constant2" class="ptolemy.actor.lib.Const">
>>           <property name="value" class="ptolemy.data.expr.Parameter" 
>> value="1*cm/ms">
>>           </property>
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.1.1">
>>           </property>
>>           <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="40">
>>               </property>
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="{90, 280}">
>>           </property>
>>       </entity>
>>       <entity name="Constant3" class="ptolemy.actor.lib.Const">
>>           <property name="value" class="ptolemy.data.expr.Parameter" 
>> value="1000*mm/sec">
>>           </property>
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.1.1">
>>           </property>
>>           <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="40">
>>               </property>
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="{90, 325}">
>>           </property>
>>       </entity>
>>       <entity name="Constant4" class="ptolemy.actor.lib.Const">
>>           <property name="value" class="ptolemy.data.expr.Parameter" 
>> value="1*inches/sec">
>>           </property>
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.1.1">
>>           </property>
>>           <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="40">
>>               </property>
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="{90, 375}">
>>           </property>
>>       </entity>
>>       <entity name="Add or Subtract" 
>> class="ptolemy.actor.lib.AddSubtract">
>>           <property name="entityId" 
>> class="org.ecoinformatics.seek.util.NamedObjId" 
>> value="urn:lsid:ecoinformatics.org:kepler.69.1">
>>           </property>
>>           <property name="_location" 
>> class="ptolemy.kernel.util.Location" value="[245.0, 290.0]">
>>           </property>
>>       </entity>
>>       <relation name="relation" class="ptolemy.actor.TypedIORelation">
>>       </relation>
>>       <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">
>>       </relation>
>>       <link port="Display.input" relation="relation5"/>
>>       <link port="Constant.output" relation="relation2"/>
>>       <link port="Constant2.output" relation="relation3"/>
>>       <link port="Constant3.output" relation="relation4"/>
>>       <link port="Constant4.output" relation="relation"/>
>>       <link port="Add or Subtract.plus" relation="relation"/>
>>       <link port="Add or Subtract.plus" relation="relation2"/>
>>       <link port="Add or Subtract.plus" relation="relation3"/>
>>       <link port="Add or Subtract.plus" relation="relation4"/>
>>       <link port="Add or Subtract.output" relation="relation5"/>
>>   </entity>
>>       _______________________________________________
>> Kepler-cvs mailing list
>> Kepler-cvs at ecoinformatics.org
>> http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-cvs
>


-- 
*******************************************************************
Dan Higgins                                  higgins at nceas.ucsb.edu
http://www.nceas.ucsb.edu/    Ph: 805-893-5127
National Center for Ecological Analysis and Synthesis (NCEAS) 
Marine Science Building - Room 3405
Santa Barbara, CA 93195
*******************************************************************




More information about the Kepler-dev mailing list