[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orekit Users] orekit and Jython



Thank you!

I add line

javaclasspath '$matlabroot/java/orekit/commons-math-2.1.jar'
javaclasspath '$matlabroot/java/orekit/orekit-5.0.jar'

in script head, so all is fine!

2011/5/21, Brian H <brianh4321@hotmail.com>:
>
> PS. Make sure you add the orekit jar file. This has to be once per session,
> with the command
>
> javaclasspath(javaclasspath('-dynamic'),'/Users/bhodges/Documents/myMatlab/orekit/orekit-5.0.jar')
>
>
>> Date: Fri, 20 May 2011 23:00:38 +0800
>> From: beowulf.zhang@gmail.com
>> To: orekit-users@orekit.org
>> Subject: Re: [Orekit Users] orekit and Jython
>>
>> I'm working in Matlab 7.7, I want to test your code, I have seted the
>> orekit's and common-math's classpath in classpath.txt, but I get error
>> message
>>
>> ??? Undefined variable "TimeScalesFactory" or class
>> "TimeScalesFactory.getUTC".
>>
>> Error in ==> orekit_test1 at 42
>> utc = TimeScalesFactory.getUTC();
>>
>> whether you can help me or not?
>> Thank you!
>>
>> 2011/5/19, Brian H <brianh4321@hotmail.com>:
>> >
>> > Concerning the matlab interface(?)
>> >
>> > While its somewhat crude, here is my early test script of the first
>> > tutorial. If I remember correctly you have to set the orekit data path
>> > using
>> > the System call below. There was also a problem with matlab's imported
>> > version of
>> > the commons-math library being somewhat out of date. This was fixed
>> > by downloading the current version and adding that directory at the top
>> > of
>> > your classpath.txt located in the MATLAB directory. Anyway, here is a
>> > copy
>> > of the original mfile. It was
>> > my first attempt at the matlab-java interface, pardon it's crudeness it
>> > was
>> > meant as
>> > an exercise.
>> >
>> >
>> > import java.lang.*
>> > import java.lang.Enum
>> > import java.text.*
>> > import java.util.*
>> >
>> > import org.apache.commons.*
>> > import org.apache.commons.math.*
>> > import org.apache.commons.math.geometry.*
>> > import org.apache.commons.math.util.*
>> > import org.apache.commons.math.util.MathUtils.*
>> > import org.orekit.bodies.*
>> > import org.orekit.bodies.BodyShape.*
>> > import org.orekit.bodies.GeodeticPoint.*
>> > import org.orekit.bodies.OneAxisEllipsoid.*
>> > import org.orekit.errors.OrekitException.*
>> > import org.orekit.frames.*
>> > import org.orekit.frames.Frame.*
>> > import org.orekit.frames.FramesFactory.*
>> > import org.orekit.frames.TopocentricFrame.*
>> > import org.orekit.frames.LocalOrbitalFrame.*
>> > import org.orekit.orbits.*
>> > import org.orekit.orbits.CartesianOrbit.*
>> > import org.orekit.orbits.Orbit.*
>> > import org.orekit.propagation.*
>> > import org.orekit.propagation.Propagator.*
>> > import org.orekit.propagation.analytical.*
>> > import org.orekit.propagation.analytical.KeplerianPropagator.*
>> > import org.orekit.time.*
>> > import org.orekit.time.AbsoluteDate.*
>> > import org.orekit.time.TimeScale.*
>> > import org.orekit.time.TimeScalesFactory.*
>> > import org.orekit.utils.*
>> > import org.orekit.utils.PVCoordinates.*
>> > import org.orekit.data.*
>> > import org.orekit.data.DataProvidersManager.*
>> > import LOFTypeWrapper
>> > System.setProperty('orekit.data.path','orekit-data')
>> >
>> >
>> > symbols = DecimalFormatSymbols(Locale.US);
>> > d3 = DecimalFormat('0.000', symbols);
>> > utc = TimeScalesFactory.getUTC();
>> > initialDate = AbsoluteDate(2008, 10, 01, 0, 0, 00.000, utc);
>> > mu =  3.986004415e+14; % gravitation coefficient
>> > inertialFrame = FramesFactory.getEME2000();
>> > posisat = Vector3D(-6142438.668, 3492467.560, -25767.25680);
>> > velosat = Vector3D(505.8479685, 942.7809215, 7435.922231);
>> > pvsat = PVCoordinates(posisat, velosat);
>> > initialOrbit = CartesianOrbit(pvsat, inertialFrame, initialDate, mu);
>> > kepler = KeplerianPropagator(initialOrbit);
>> > lof = LocalOrbitalFrame(inertialFrame, LOFTypeWrapper.getType(1),
>> > kepler,
>> > 'LOF');
>> > ae =  6378137.0; % equatorial radius in meter
>> > f  =  1.0 / 298.257223563; % flattening
>> > ITRF2005 = FramesFactory.getITRF2005(true); % terrestrial frame at an
>> > arbitrary date
>> > earth = OneAxisEllipsoid(ae, f, ITRF2005);
>> >
>> > % Station
>> > longitude = Math.toRadians(45.);
>> > latitude  = Math.toRadians(25.);
>> > altitude  = 0.;
>> > station = GeodeticPoint(latitude, longitude, altitude);
>> > staF = TopocentricFrame(earth, station, 'station1');
>> > System.out.println('          time           doppler (m/s)');
>> > finalDate = AbsoluteDate(initialDate, 6000, utc);
>> > extrapDate = initialDate;
>> > while (extrapDate.compareTo(finalDate) <= 0)
>> >
>> >     % We can simply get the position and velocity of station in LOF
>> > frame at
>> > any time
>> >     pv = staF.getTransformTo(lof,
>> > extrapDate).transformPVCoordinates(PVCoordinates.ZERO);
>> >
>> >     % And then calculate the doppler signal
>> >     doppler = Vector3D.dotProduct(pv.getPosition(), pv.getVelocity()) /
>> > pv.getPosition().getNorm();
>> >     abc= d3.format(doppler);
>> >     def= String('     ');
>> >     ghi= extrapDate.toString();
>> >     jkl= ghi.concat(def.concat(abc));
>> >     System.out.println(jkl);
>> >
>> >     extrapDate = AbsoluteDate(extrapDate, 600, utc);
>> >
>> > end
>> >
>> >
>> >
>> >> Date: Thu, 19 May 2011 09:46:30 +0200
>> >> From: luc.maisonobe@c-s.fr
>> >> To: orekit-users@orekit.org
>> >> Subject: Re: [Orekit Users] orekit and Jython
>> >>
>> >> beowulf zhang <beowulf.zhang@gmail.com> a écrit :
>> >>
>> >> > Very good! Thank you...
>> >> >
>> >> > I konw the m language of Matlab support java programming now, but I
>> >> > was failure to test the orekit examples. I want to know whether
>> >> > anyone
>> >> > are interesting testing the orekit examples in Matlab or not.
>> >>
>> >> If you want to test these examples, I would be interested to know if
>> >> they work.
>> >> We could set up some wiki pages (yes, we know, the wiki is quite empty
>> >> for now) showing how to interface with several scripting languages.
>> >>
>> >> Luc
>> >>
>> >> >
>> >> >
>> >> > 2011/5/17, Petrus Hyvönen <petrus.hyvonen@gmail.com>:
>> >> >> Hi all,
>> >> >>
>> >> >> I was playing around with the idea of using Python for mission
>> >> >> design,
>> >> >> and
>> >> >> found Jython and the orekit library. As new to both Python and Java,
>> >> >> I
>> >> >> had
>> >> >> some initial troubles of getting things to work, primary the access
>> >> >> to
>> >> >> orekit-data, what was current dir and javapaths etc. I am now using
>> >> >> Eclipse
>> >> >> with pydev extension, and can add the orekit jars and orekit-data to
>> >> >> the
>> >> >> eclipse project.
>> >> >>
>> >> >> As an exercise I took the liberty to translate a few of the orekit
>> >> >> examples
>> >> >> from java to jython, and copy them below as it could be of interest
>> >> >> for
>> >> >> others. I have been exploring scipy before (based on regular python)
>> >> >> and it
>> >> >> contains very good plotting and array routines, which is not
>> >> >> available
>> >> >> in
>> >> >> jython. So next step would be to find a suitable java plotting and
>> >> >> arrays
>> >> >> library to be able to represent the results.
>> >> >>
>> >> >> Regards
>> >> >> /Petrus
>> >> >>
>> >> >> First, a jython translation of the SlaveMode.java:
>> >> >> __________________________________________
>> >> >>
>> >> >> # -*- coding: utf-8 -*-
>> >> >> '''
>> >> >> /* Copyright 2002-2010 CS Communication & Systèmes
>> >> >>  * Licensed to CS Communication & Systèmes (CS) under one or more
>> >> >>  * contributor license agreements.  See the NOTICE file distributed
>> >> >> with
>> >> >>  * this work for additional information regarding copyright
>> >> >> ownership.
>> >> >>  * CS licenses this file to You under the Apache License, Version
>> >> >> 2.0
>> >> >>  * (the "License"); you may not use this file except in compliance
>> >> >> with
>> >> >>  * the License.  You may obtain a copy of the License at
>> >> >>  *
>> >> >>  *   http://www.apache.org/licenses/LICENSE-2.0
>> >> >>  *
>> >> >>  * Unless required by applicable law or agreed to in writing,
>> >> >> software
>> >> >>  * distributed under the License is distributed on an "AS IS" BASIS,
>> >> >>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> >> >> implied.
>> >> >>  * See the License for the specific language governing permissions
>> >> >> and
>> >> >>  * limitations under the License.
>> >> >>  */
>> >> >>
>> >> >> Translated from SlaveMode.java to jython by Petrus Hyvönen
>> >> >> 2011-05-04
>> >> >> '''
>> >> >>
>> >> >> # orekit.jar,orekit-data.zip and commons-maths in CLASSPATH through
>> >> >> eclipse
>> >> >> project
>> >> >> import java, os
>> >> >>
>> >> >> from org.orekit.errors import OrekitException
>> >> >> from org.orekit.frames import Frame
>> >> >> from org.orekit.frames import FramesFactory
>> >> >> from org.orekit.orbits import KeplerianOrbit
>> >> >> from org.orekit.orbits import Orbit
>> >> >> from org.orekit.propagation import SpacecraftState
>> >> >> from org.orekit.propagation.analytical import KeplerianPropagator
>> >> >> from org.orekit.data import DataProvidersManager
>> >> >> from org.orekit.data import ZipJarCrawler
>> >> >> from org.orekit.time import AbsoluteDate
>> >> >> from org.orekit.time import TimeScalesFactory
>> >> >>
>> >> >> from math import radians
>> >> >>
>> >> >> # Configure Orekit. The file orekit-data.zip must be in current dir
>> >> >> DM = DataProvidersManager.getInstance()
>> >> >> crawler=ZipJarCrawler("orekit-data.zip")
>> >> >> DM.clearProviders()
>> >> >> DM.addProvider(crawler)
>> >> >>
>> >> >> #Initial orbit parameters
>> >> >> a = 24396159    # semi major axis in meters
>> >> >> e = 0.72831215  # eccentricity
>> >> >> i = radians(7.0)# inclination
>> >> >> omega = radians(180) # perigee argument
>> >> >> raan = radians(261) #right ascension of ascending node
>> >> >> lM = 0.0 # mean anomaly
>> >> >>
>> >> >> #Inertial frame
>> >> >> inertialFrame = FramesFactory.getEME2000()
>> >> >>
>> >> >> #Initial date in UTC time scale
>> >> >> utc = TimeScalesFactory.getUTC();
>> >> >> initialDate = AbsoluteDate(2004, 01, 01, 23, 30, 00.000, utc)
>> >> >>
>> >> >> #gravitation coefficient
>> >> >> mu =  3.986004415e+14
>> >> >>
>> >> >> #Orbit construction as Keplerian
>> >> >> initialOrbit = KeplerianOrbit(a, e, i, omega, raan, lM,
>> >> >>                               KeplerianOrbit.MEAN_ANOMALY,
>> >> >>                               inertialFrame, initialDate, mu)
>> >> >>
>> >> >> #Simple extrapolation with Keplerian motion
>> >> >> kepler = KeplerianPropagator(initialOrbit)
>> >> >>
>> >> >> #Set the propagator to slave mode (could be omitted as it is the
>> >> >> default
>> >> >> mode)
>> >> >> kepler.setSlaveMode()
>> >> >>
>> >> >> #Overall duration in seconds for extrapolation
>> >> >> duration = 90*60.0
>> >> >>
>> >> >> #Stop date
>> >> >> finalDate =  AbsoluteDate(initialDate, duration, utc)
>> >> >>
>> >> >> #Step duration in seconds
>> >> >> stepT = 30.0
>> >> >>
>> >> >> #Extrapolation loop
>> >> >> cpt = 1
>> >> >> extrapDate = initialDate
>> >> >> while extrapDate.compareTo(finalDate) <= 0:
>> >> >>     currentState = kepler.propagate(extrapDate)
>> >> >>     print  "step %d: time %s %s" % (cpt, currentState.getDate(),
>> >> >> currentState.getOrbit())
>> >> >>     extrapDate = AbsoluteDate(extrapDate, stepT, utc)
>> >> >>     cpt=cpt+1
>> >> >>
>> >> >>
>> >> >> ____________________________
>> >> >>
>> >> >> An interesting example of jython inheritance of java class:
>> >> >> _____________________________
>> >> >>
>> >> >>
>> >> >> # -*- coding: utf-8 -*-
>> >> >> '''
>> >> >> /* Copyright 2002-2010 CS Communication & Syst?mes
>> >> >>  * Licensed to CS Communication & Syst?mes (CS) under one or more
>> >> >>  * contributor license agreements.  See the NOTICE file distributed
>> >> >> with
>> >> >>  * this work for additional information regarding copyright
>> >> >> ownership.
>> >> >>  * CS licenses this file to You under the Apache License, Version
>> >> >> 2.0
>> >> >>  * (the "License"); you may not use this file except in compliance
>> >> >> with
>> >> >>  * the License.  You may obtain a copy of the License at
>> >> >>  *
>> >> >>  *   http://www.apache.org/licenses/LICENSE-2.0
>> >> >>  *
>> >> >>  * Unless required by applicable law or agreed to in writing,
>> >> >> software
>> >> >>  * distributed under the License is distributed on an "AS IS" BASIS,
>> >> >>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> >> >> implied.
>> >> >>  * See the License for the specific language governing permissions
>> >> >> and
>> >> >>  * limitations under the License.
>> >> >>  */
>> >> >>
>> >> >> Translated from SlaveMode.java to jython by Petrus Hyv?nen
>> >> >> 2011-05-04
>> >> >> '''
>> >> >> # orekit and common maths in CLASSPATH through eclipse project
>> >> >> import java, os
>> >> >>
>> >> >> from org.orekit.data import DataProvidersManager
>> >> >> from org.orekit.data import ZipJarCrawler
>> >> >> from org.apache.commons.math.geometry import Vector3D
>> >> >> from org.orekit.bodies import BodyShape
>> >> >> from org.orekit.bodies import GeodeticPoint
>> >> >> from org.orekit.bodies import OneAxisEllipsoid
>> >> >> from org.orekit.errors import OrekitException;
>> >> >> from org.orekit.frames import Frame
>> >> >> from org.orekit.frames import FramesFactory
>> >> >> from org.orekit.frames import TopocentricFrame
>> >> >> from org.orekit.orbits import KeplerianOrbit
>> >> >> from org.orekit.orbits import Orbit
>> >> >> from org.orekit.propagation import Propagator
>> >> >> from org.orekit.propagation import SpacecraftState
>> >> >> from org.orekit.propagation.analytical import KeplerianPropagator
>> >> >> from org.orekit.propagation.events import ElevationDetector
>> >> >> from org.orekit.propagation.events import EventDetector
>> >> >> from org.orekit.time import AbsoluteDate
>> >> >> from org.orekit.time import TimeScalesFactory
>> >> >> from org.orekit.utils import PVCoordinates
>> >> >>
>> >> >> from math import degrees, radians, pi
>> >> >>
>> >> >> # Configure Orekit
>> >> >> DM = DataProvidersManager.getInstance()
>> >> >> crawler=ZipJarCrawler("orekit-data.zip")
>> >> >> DM.clearProviders()
>> >> >> DM.addProvider(crawler)
>> >> >>
>> >> >> # Initial state definition: date, orbit
>> >> >> initialDate = AbsoluteDate(2004, 01, 01, 23, 30, 00.000,
>> >> >> TimeScalesFactory.getUTC())
>> >> >> mu =  3.986004415e+14
>> >> >> inertialFrame = FramesFactory.getEME2000() # inertial frame for
>> >> >> orbit
>> >> >> definition
>> >> >> position  = Vector3D(-6142438.668, 3492467.560, -25767.25680)
>> >> >> velocity  = Vector3D(505.8479685, 942.7809215, 7435.922231)
>> >> >> pvCoordinates = PVCoordinates(position, velocity)
>> >> >> initialOrbit = KeplerianOrbit(pvCoordinates, inertialFrame,
>> >> >> initialDate, mu)
>> >> >>
>> >> >> # Propagator : consider a simple keplerian motion (could be more
>> >> >> elaborate)
>> >> >> kepler = KeplerianPropagator(initialOrbit)
>> >> >>
>> >> >> #Earth and frame
>> >> >> ae =  6378137.0 # // equatorial radius in meter
>> >> >> f  =  1.0 / 298.257223563 #; // flattening
>> >> >> ITRF2005 = FramesFactory.getITRF2005() #; // terrestrial frame at an
>> >> >> arbitrary date
>> >> >> earth = OneAxisEllipsoid(ae, f, ITRF2005)
>> >> >>
>> >> >> # Station
>> >> >> longitude = radians(45.0)
>> >> >> latitude  = radians(25.0)
>> >> >> altitude  = 0.0
>> >> >> station1 = GeodeticPoint(latitude, longitude, altitude)
>> >> >> sta1Frame = TopocentricFrame(earth, station1, "station1")
>> >> >>
>> >> >> # Event definition
>> >> >> maxcheck  = 1.0
>> >> >> elevation = radians(5.0)
>> >> >>
>> >> >>
>> >> >> class VisibilityDetector(ElevationDetector):
>> >> >> # Class for handling the eventOccured java. Example of subclassing
>> >> >> # a java class in jython
>> >> >>     def __init__(self,  maxCheck,  elevation, topo):
>> >> >>         ElevationDetector.__init__(self,maxCheck, elevation, topo)
>> >> >>
>> >> >>     def eventOccurred(self, s, increasing):
>> >> >>         if (increasing):
>> >> >>             print "Visibility on",
>> >> >> self.topocentricFrame.getName(),"begins
>> >> >> at" , s.getDate()
>> >> >>         else:
>> >> >>             print "Visibility on",  self.topocentricFrame.getName(),
>> >> >> "ends
>> >> >> at" , s.getDate()
>> >> >>         return self.CONTINUE
>> >> >>
>> >> >> sta1Visi = VisibilityDetector(maxcheck, elevation, sta1Frame)
>> >> >>
>> >> >> #Add event to be detected
>> >> >> kepler.addEventDetector(sta1Visi)
>> >> >>
>> >> >> #Propagate from the initial date to the first raising or for the
>> >> >> fixed
>> >> >> duration
>> >> >> finalState = kepler.propagate(initialDate.shiftedBy(1500.0))
>> >> >>
>> >> >> print "Final state : " ,
>> >> >> finalState.getDate().durationFrom(initialDate)
>> >> >>
>> >> >> _________________________________
>> >> >>
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >> ----------------------------------------------------------------
>> >> This message was sent using IMP, the Internet Messaging Program.
>> >>
>> >>
>> >
>