001/*
002 * Copyright (c) 2003-2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: welker $'
006 * '$Date: 2010-05-06 05:21:26 +0000 (Thu, 06 May 2010) $' 
007 * '$Revision: 24234 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029
030package com.numericsolutions.geomodeltools;
031
032import ptolemy.actor.TypedAtomicActor;
033import ptolemy.actor.TypedIOPort;
034import ptolemy.data.DoubleToken;
035import ptolemy.data.StringToken;
036import ptolemy.data.type.BaseType;
037import ptolemy.kernel.CompositeEntity;
038import ptolemy.kernel.util.IllegalActionException;
039import ptolemy.kernel.util.NameDuplicationException;
040
041/**
042 * Density Grid Actor
043 */
044public class DensityGridActor extends TypedAtomicActor {
045        // input ports
046        public TypedIOPort inDataFile = new TypedIOPort(this, "inDataFile", true,
047                        false);
048        public TypedIOPort radius = new TypedIOPort(this, "radius", true, false);
049        public TypedIOPort xmin = new TypedIOPort(this, "xmin", true, false);
050        public TypedIOPort xmax = new TypedIOPort(this, "xmax", true, false);
051        public TypedIOPort ymin = new TypedIOPort(this, "ymin", true, false);
052        public TypedIOPort ymax = new TypedIOPort(this, "ymax", true, false);
053        public TypedIOPort dx = new TypedIOPort(this, "dx", true, false);
054        public TypedIOPort dy = new TypedIOPort(this, "dy", true, false);
055        public TypedIOPort pval = new TypedIOPort(this, "pval", true, false);
056        // output ports
057        public TypedIOPort gridContents = new TypedIOPort(this, "gridContents",
058                        false, true);
059
060        /**
061         * Constructor
062         */
063        public DensityGridActor(CompositeEntity container, String name)
064                        throws NameDuplicationException, IllegalActionException {
065                super(container, name);
066
067                inDataFile.setTypeEquals(BaseType.STRING);
068                radius.setTypeEquals(BaseType.DOUBLE);
069                xmin.setTypeEquals(BaseType.DOUBLE);
070                xmax.setTypeEquals(BaseType.DOUBLE);
071                ymin.setTypeEquals(BaseType.DOUBLE);
072                ymax.setTypeEquals(BaseType.DOUBLE);
073                dx.setTypeEquals(BaseType.DOUBLE);
074                dy.setTypeEquals(BaseType.DOUBLE);
075                pval.setTypeEquals(BaseType.DOUBLE);
076                gridContents.setTypeEquals(BaseType.STRING);
077        }
078
079        /**
080   *
081   */
082        public void initialize() throws IllegalActionException {
083        }
084
085        /**
086   *
087   */
088        public boolean prefire() throws IllegalActionException {
089                return super.prefire();
090        }
091
092        /**
093   *
094   */
095        public void fire() throws IllegalActionException {
096                System.out.println("firing BackProp");
097                super.fire();
098
099                StringToken inDataFileToken = (StringToken) inDataFile.get(0);
100                String inDataFileStr = inDataFileToken.stringValue();
101
102                DoubleToken radToken = (DoubleToken) radius.get(0);
103                double radDouble = radToken.doubleValue();
104
105                DoubleToken xMin = (DoubleToken) xmin.get(0);
106                double xMinDouble = xMin.doubleValue();
107
108                DoubleToken xMax = (DoubleToken) xmax.get(0);
109                double xMaxDouble = xMax.doubleValue();
110
111                DoubleToken yMin = (DoubleToken) ymin.get(0);
112                double yMinDouble = yMin.doubleValue();
113
114                DoubleToken yMax = (DoubleToken) ymax.get(0);
115                double yMaxDouble = yMax.doubleValue();
116
117                DoubleToken dX = (DoubleToken) dx.get(0);
118                double dXDouble = dX.doubleValue();
119
120                DoubleToken dY = (DoubleToken) dy.get(0);
121                double dYDouble = dY.doubleValue();
122
123                DoubleToken pVal = (DoubleToken) pval.get(0);
124                double pValDouble = pVal.doubleValue();
125
126                System.out.println("Calling Density Gridder JNI Code");
127
128                String output = (new GeomodelGlue()).runGridDensityByArrayDimension(
129                                inDataFileStr, radDouble, xMinDouble, xMaxDouble, yMinDouble,
130                                yMaxDouble, dXDouble, dYDouble, pValDouble);
131                gridContents.broadcast(new StringToken(output));
132                System.out.println("done");
133        }
134}