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

Re: [Orekit Users] orekit and Jython



Hi All,

Petrus, Brian, Beowulf, as you have already done investigating about
language interfaces for Orekit, would you like to set up some Wiki pages
about it (mainly reporting the examples in this thread) ?

If so, then I can set up the wiki permissions on the forge so you can
create and modify pages by yourself.

Does this sound reasonable to you ?

Luc

Le 20/05/2011 18:17, Brian H a écrit :
> You should check "javaclasspath" to make sure that the commons-math
> directorie appear at the top of the class path
> 
>> Date: Sat, 21 May 2011 00:04:17 +0800
>> From: beowulf.zhang@gmail.com
>> To: orekit-users@orekit.org
>> Subject: 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.
>> >> >>
>> >> >>
>> >> >
>> >