<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://genopus.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=Propagator</id>
	<title>Propagator - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="http://genopus.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=Propagator"/>
	<link rel="alternate" type="text/html" href="http://genopus.cnes.fr/index.php?title=Propagator&amp;action=history"/>
	<updated>2026-05-07T10:44:09Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>http://genopus.cnes.fr/index.php?title=Propagator&amp;diff=269&amp;oldid=prev</id>
		<title>Admin : Page créée avec « == Goal == In this page, we give a relatively concrete example allowing to create an application with its own &lt;font color=#FF8C00 title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/fon... »</title>
		<link rel="alternate" type="text/html" href="http://genopus.cnes.fr/index.php?title=Propagator&amp;diff=269&amp;oldid=prev"/>
		<updated>2017-12-21T12:45:34Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « == Goal == In this page, we give a relatively concrete example allowing to create an application with its own &amp;lt;font color=#FF8C00 title=&amp;quot;Graphical User Interface&amp;quot;&amp;gt;GUI&amp;lt;/fon... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Goal ==&lt;br /&gt;
In this page, we give a relatively concrete example allowing to create an application with its own &amp;lt;font color=#FF8C00 title=&amp;quot;Graphical User Interface&amp;quot;&amp;gt;GUI&amp;lt;/font&amp;gt; (using of couse [https://logiciels.cnes.fr/en/content/genius GENIUS] and &amp;lt;font color=#556B2F&amp;gt;&amp;#039;&amp;#039;&amp;#039;GENOPUS&amp;#039;&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;!) to propagate an orbit using [https://logiciels.cnes.fr/en/content/patrius PATRIUS].&lt;br /&gt;
&lt;br /&gt;
Nevertheless, in order to simplify the example (else you may directly use [https://logiciels.cnes.fr/en/content/psimu PSIMU]!), we will &amp;quot;only&amp;quot; consider as inputs:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Initial orbital parameters&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vehicle characteristics&amp;#039;&amp;#039;&amp;#039; (only dry mass and simple aerodynamic characteristics)&lt;br /&gt;
* Choice of &amp;#039;&amp;#039;&amp;#039;force models&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Only Balmino for Earth potential&lt;br /&gt;
** Atmospheric models&lt;br /&gt;
In addition:&lt;br /&gt;
* Data will be stored in &amp;#039;&amp;#039;&amp;#039;INI_suffix.xml&amp;#039;&amp;#039;&amp;#039; files (or &amp;#039;&amp;#039;&amp;#039;INIT.xml&amp;#039;&amp;#039;&amp;#039; by default)&lt;br /&gt;
* Some results will be displayed on the &amp;lt;font color=#FF8C00 title=&amp;quot;Graphical User Interface&amp;quot;&amp;gt;GUI&amp;lt;/font&amp;gt; console but also in a &amp;#039;&amp;#039;&amp;#039;EPH_suffix.txt&amp;#039;&amp;#039;&amp;#039; file (&amp;#039;&amp;#039;&amp;#039;EPHEM.txt&amp;#039;&amp;#039;&amp;#039; by default)&lt;br /&gt;
&lt;br /&gt;
== Using GDataPanelAbstract to organize input data ==&lt;br /&gt;
&lt;br /&gt;
To do it, we will have to create a class extending from &amp;lt;font color=#4169E1&amp;gt;GDataPanelAbstract&amp;lt;/font&amp;gt; and adding [{{PathCurrentJavaDoc}}/fr/cnes/genopus/orbits/GPOrbit.html GPOrbit], [{{PathCurrentJavaDoc}}/fr/cnes/genopus/vehicle/GPVehicle.html GPVehicle] and [{{PathCurrentJavaDoc}}/fr/cnes/genopus/forces/GPForceModels.html GPForceModels] objects in different tabs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=#FF0000&amp;gt;&amp;#039;&amp;#039;Note : be careful as GPOrbit extends from Gcontainer and not from GPanel, so it is mansatory to encapsulate it in a GPanel class (privalte class in our example.&amp;#039;&amp;#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class WidPropagatorDataPanel extends GDataPanelAbstract {&lt;br /&gt;
    &lt;br /&gt;
    private final WidOrbit widOrbit;&lt;br /&gt;
    private final GPVehicle widVehicle;&lt;br /&gt;
    private final GPForceModels widForces;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Constructor.&lt;br /&gt;
     * @throws GException   GENIUS exception&lt;br /&gt;
     */&lt;br /&gt;
    public WidPropagatorDataPanel() throws GException {&lt;br /&gt;
        &lt;br /&gt;
        super(&amp;quot;Data&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // Creating an orbit widget &lt;br /&gt;
        widOrbit =  new WidOrbit(&amp;quot;Initial orbital parameters&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        // Creating a vehicle widget (only with dry mass and simple aerodynamic properties)&lt;br /&gt;
        widVehicle =  new GPVehicle(&amp;quot;Vehicle characteristics&amp;quot;, true, false, true, false, false);&lt;br /&gt;
 &lt;br /&gt;
        // Creating a force model widget (only with potential [Balmino] and atmosphere)&lt;br /&gt;
        AttractionModelsEnum[] attractionModelsAvailable = { AttractionModelsEnum.BALMINO };&lt;br /&gt;
        widForces =  new GPForceModels(&amp;quot;Models&amp;quot;, AttractionModelsEnum.BALMINO, attractionModelsAvailable, false, true, false, false, false, false);&lt;br /&gt;
        &lt;br /&gt;
        // Adding it in a tabbedpane&lt;br /&gt;
        this.addTab(&amp;quot;Orbit&amp;quot;, widOrbit);&lt;br /&gt;
        this.addTab(&amp;quot;Vehicle&amp;quot;, widVehicle);&lt;br /&gt;
        this.addTab(&amp;quot;Forces&amp;quot;, widForces);&lt;br /&gt;
        // Adding an output console&lt;br /&gt;
        this.addConsoleTab(&amp;quot;Console&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void clear() throws GException {&lt;br /&gt;
        // TODO Auto-generated method stub&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
    * Private class needed because GPOrbit is not a GPanel ...&lt;br /&gt;
    */&lt;br /&gt;
    private class WidOrbit extends GPanel implements GReadWrite {&lt;br /&gt;
        &lt;br /&gt;
        private final GPOrbit orbit;       &lt;br /&gt;
        public WidOrbit ( final String label) {&lt;br /&gt;
            orbit = new GPOrbit(label);&lt;br /&gt;
        }&lt;br /&gt;
        public void display() throws GException { generic(); }&lt;br /&gt;
        @Override&lt;br /&gt;
        public void generic() throws GException { put(orbit); }&lt;br /&gt;
        public void read() throws GException { generic(); }&lt;br /&gt;
        public void write() throws GException { generic(); }        &lt;br /&gt;
        /**&lt;br /&gt;
         * @return the GP orbit widget&lt;br /&gt;
         */&lt;br /&gt;
        public GPOrbit getGPOrbit() {&lt;br /&gt;
            return orbit;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Class to get the PATRIUS orbit object&lt;br /&gt;
     * @return PATRIUS orbit object&lt;br /&gt;
     * @throws GPOrbitException GENOPUS exception&lt;br /&gt;
     */&lt;br /&gt;
    public Orbit getOrbit() throws GPOrbitException {&lt;br /&gt;
        return widOrbit.getGPOrbit().getPatriusObject();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Class to get the Custom PATRIUS vehicle object&lt;br /&gt;
     * @return the widVehicle&lt;br /&gt;
     * @throws GPVehicleException GENOPUS exception&lt;br /&gt;
     */&lt;br /&gt;
    public CustomVehicle getVehicle() throws GPVehicleException {&lt;br /&gt;
        return widVehicle.getPatriusObject();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Class to get the Custom PATRIUS force models object&lt;br /&gt;
     * @return Custom PATRIUS force models object&lt;br /&gt;
     * @throws GException GENIUS exception&lt;br /&gt;
     */&lt;br /&gt;
    public CustomForceModels getForces() throws GException {&lt;br /&gt;
        final Assembly assembly = getVehicle().getAssembly(FramesFactory.getCIRF());&lt;br /&gt;
        return widForces.getPatriusObject(assembly);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create the batch computation mode ==&lt;br /&gt;
&lt;br /&gt;
The basic idea is to develop a class allowing to propagate an orbit and that will be called using the &amp;lt;font color=#4169E1&amp;gt;GJavaCommandLauncher&amp;lt;/font&amp;gt; class. This class will include:&lt;br /&gt;
* reading data in a file (a &amp;lt;font color=#FF8C00 title=&amp;quot;Extensible Markup Language&amp;quot;&amp;gt;XML&amp;lt;/font&amp;gt; one automatically generated thanks to [https://logiciels.cnes.fr/en/content/genius GENIUS])&lt;br /&gt;
* using these data and considering other ones not exposed via the &amp;lt;font color=#FF8C00 title=&amp;quot;Graphical User Interface&amp;quot;&amp;gt;GUI&amp;lt;/font&amp;gt; (in order to simplify the example) to build the numerical propagator:&lt;br /&gt;
** Numerical integrator =&amp;gt; &amp;lt;font color=#FF8C00&amp;gt;RungeKutta&amp;lt;/font&amp;gt; 4th order with a 5s step&lt;br /&gt;
** Propagation time =&amp;gt; 1 orbit&lt;br /&gt;
** StepHandler = 60s&lt;br /&gt;
* propagating the orbit&lt;br /&gt;
* writing results on the screen and inside the &amp;#039;&amp;#039;&amp;#039;EPHEM.txt&amp;#039;&amp;#039;&amp;#039; file.&lt;br /&gt;
&lt;br /&gt;
We may see on the following code inside the &amp;lt;font color=#4169E1&amp;gt;compute()&amp;lt;/font&amp;gt; method how the [https://logiciels.cnes.fr/en/content/patrius PATRIUS] propagator is implemented as well as the associated stephandler in a specific private class.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class BatchPropagator {&lt;br /&gt;
    &lt;br /&gt;
    /** Initial orbit */&lt;br /&gt;
    private Orbit orbit;&lt;br /&gt;
    /** Vehicle characteristics */&lt;br /&gt;
    private CustomVehicle vehicle;&lt;br /&gt;
    /** Forces */&lt;br /&gt;
    private CustomForceModels forces;&lt;br /&gt;
    &lt;br /&gt;
    /** UTC time scale */&lt;br /&gt;
    private TimeScale UTC;&lt;br /&gt;
    &lt;br /&gt;
    /** By default EPHEM file names */&lt;br /&gt;
    private static final String EPH_FILE = &amp;quot;EPHEM.txt&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
   * Constructor.&lt;br /&gt;
   * @param nomFicData    name of the context file.&lt;br /&gt;
   * @param nomFicEphem   name of the output file.&lt;br /&gt;
   * @throws IOException  GENIUS exception.&lt;br /&gt;
     */&lt;br /&gt;
    public BatchPropagator (final String nomFicData, final String nomFicEphem) throws IOException {&lt;br /&gt;
        &lt;br /&gt;
        // Patrius dataset initialization&lt;br /&gt;
        try {&lt;br /&gt;
            PatriusDataset.addResourcesFromPatriusDataset();&lt;br /&gt;
        } catch (OrekitException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        WidPropagatorDataPanel dataPan = null;&lt;br /&gt;
        try {&lt;br /&gt;
            dataPan = new WidPropagatorDataPanel();&lt;br /&gt;
        } catch (GException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }           &lt;br /&gt;
        // Data read inside the XML file&lt;br /&gt;
        try {&lt;br /&gt;
            GFileManipulation.readConfig(nomFicData, &amp;quot;Propagator&amp;quot;, dataPan, true);&lt;br /&gt;
        } catch (GFileManipulatorException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }            &lt;br /&gt;
        // Orbit initialization&lt;br /&gt;
        try {&lt;br /&gt;
            orbit = dataPan.getOrbit();&lt;br /&gt;
        } catch (GPOrbitException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
        // Vehicle initialization&lt;br /&gt;
        try {&lt;br /&gt;
            vehicle = dataPan.getVehicle();&lt;br /&gt;
        } catch (GPVehicleException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
        // Forces initialization&lt;br /&gt;
        try {&lt;br /&gt;
            forces = dataPan.getForces();&lt;br /&gt;
        } catch (GException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Recovery of the UTC time scale using a &amp;quot;factory&amp;quot;&lt;br /&gt;
        try {&lt;br /&gt;
            UTC = TimeScalesFactory.getUTC();&lt;br /&gt;
        } catch (OrekitException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Method to propagate&lt;br /&gt;
     * @throws PropagationException PATRIUS exception&lt;br /&gt;
     */&lt;br /&gt;
    public void compute() throws PropagationException {&lt;br /&gt;
        &lt;br /&gt;
        // Getting the mas provider from the vehicle object.&lt;br /&gt;
        final MassProvider mm = new MassModel(vehicle.getAssembly(FramesFactory.getCIRF()));&lt;br /&gt;
        &lt;br /&gt;
        // We create a spacecratftstate&lt;br /&gt;
        final SpacecraftState iniState = new SpacecraftState(orbit, mm);&lt;br /&gt;
        &lt;br /&gt;
        // Initialization of the Runge Kutta integrator with a 5 s step&lt;br /&gt;
        final double pasRk = 5.;&lt;br /&gt;
        final FirstOrderIntegrator integrator = new ClassicalRungeKuttaIntegrator(pasRk);&lt;br /&gt;
&lt;br /&gt;
        // Initialization of the propagator&lt;br /&gt;
        final NumericalPropagator propagator = new NumericalPropagator(integrator);&lt;br /&gt;
        propagator.resetInitialState(iniState);&lt;br /&gt;
        &lt;br /&gt;
        // Adding additional state&lt;br /&gt;
        propagator.setMassProviderEquation(mm);&lt;br /&gt;
        &lt;br /&gt;
        // Forcing integration using cartesian equations&lt;br /&gt;
        propagator.setOrbitType(OrbitType.CARTESIAN);&lt;br /&gt;
        &lt;br /&gt;
        // Adding an attitude law (in case of lift component)&lt;br /&gt;
        final AttitudeLaw attitudeLaw = new LofOffset(LOFType.LVLH, RotationOrder.ZYX, 0., 0., 0.);&lt;br /&gt;
        propagator.setAttitudeProvider(attitudeLaw);&lt;br /&gt;
        &lt;br /&gt;
        // Adding force models&lt;br /&gt;
        List&amp;lt;ForceModel&amp;gt; list = forces.getForceModelsList();&lt;br /&gt;
        for (ForceModel forceModel : list) {&lt;br /&gt;
            propagator.addForceModel(forceModel);            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Creation of a fixed step handler&lt;br /&gt;
        final ArrayList&amp;lt;SpacecraftState&amp;gt; listOfStates = new ArrayList&amp;lt;SpacecraftState&amp;gt;();&lt;br /&gt;
        OrekitFixedStepHandler myStepHandler = new OrekitFixedStepHandler() {&lt;br /&gt;
            private static final long serialVersionUID = 1L;&lt;br /&gt;
            public void init(SpacecraftState s0, AbsoluteDate t) {&lt;br /&gt;
                // Nothing to do ...&lt;br /&gt;
            }&lt;br /&gt;
            public void handleStep(SpacecraftState currentState, boolean isLast)&lt;br /&gt;
                    throws PropagationException {&lt;br /&gt;
                // Adding S/C to the list&lt;br /&gt;
                listOfStates.add(currentState);&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        // The handler frequency is set to 60s&lt;br /&gt;
        propagator.setMasterMode(60., myStepHandler);&lt;br /&gt;
&lt;br /&gt;
        // Propagating on 1 period&lt;br /&gt;
        final double dt = orbit.getKeplerianPeriod();&lt;br /&gt;
        final AbsoluteDate finalDate = orbit.getDate().shiftedBy(dt);&lt;br /&gt;
        final SpacecraftState finalState = propagator.propagate(finalDate);&lt;br /&gt;
        final Orbit finalOrbit = finalState.getOrbit();&lt;br /&gt;
        &lt;br /&gt;
        // Printing new date and semi major axis&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;Initial date = &amp;quot;+orbit.getDate().toString(UTC));&lt;br /&gt;
        System.out.println(&amp;quot;Initial semi major axis = &amp;quot;+orbit.getA()/1000.+&amp;quot; km&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;New date = &amp;quot;+finalOrbit.getDate().toString(UTC));&lt;br /&gt;
        System.out.println(&amp;quot;Final semi major axis = &amp;quot;+finalOrbit.getA()/1000.+&amp;quot; km&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // Writing in the EPHEM.txt file&lt;br /&gt;
        try {&lt;br /&gt;
            System.out.println();&lt;br /&gt;
            System.out.println(&amp;quot;EPHEM.txt file writing ...&amp;quot;);&lt;br /&gt;
            FileWriter ephem = new FileWriter(new File(EPH_FILE));&lt;br /&gt;
            Locale.setDefault(Locale.US);&lt;br /&gt;
            for (SpacecraftState sc : listOfStates) {&lt;br /&gt;
                ephem.write(String.format(&amp;quot;%s %22.15e \n&amp;quot;, sc.getDate(), sc.getA()/1000.));&lt;br /&gt;
            }&lt;br /&gt;
            ephem.close();&lt;br /&gt;
        } catch (IOException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Main method ...&lt;br /&gt;
     * @param args&lt;br /&gt;
     */&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        &lt;br /&gt;
        BatchPropagator batch;&lt;br /&gt;
        try {&lt;br /&gt;
            batch = new BatchPropagator(&amp;quot;INIT.xml&amp;quot;, &amp;quot;EPHEM.txt&amp;quot;);&lt;br /&gt;
            batch.compute();&lt;br /&gt;
        } catch (IOException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        } catch (PropagationException err) {&lt;br /&gt;
            GConsoleLogger.getLogger().log(Level.SEVERE, err.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using GMainFrameAbstract for the main frame ==&lt;br /&gt;
&lt;br /&gt;
Once the batch mode is available (see above), we have just to create the last third class extending from &amp;lt;font color=#4169E1&amp;gt;GMainFrameAbstract&amp;lt;/font&amp;gt;, displaying data and allowing to execute the batch mode ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class WidPropagator extends GMainFrameAbstract&amp;lt;WidPropagatorDataPanel&amp;gt; {&lt;br /&gt;
    &lt;br /&gt;
    // FILE NAMES&lt;br /&gt;
    &lt;br /&gt;
    /** Prefix for context file names */&lt;br /&gt;
    private static final String INI_FILE_PREFIX = &amp;quot;INI_&amp;quot;;&lt;br /&gt;
    /** By default context file names */&lt;br /&gt;
    private static final String INI_FILE = &amp;quot;INIT.xml&amp;quot;;&lt;br /&gt;
    /** Prefix for output file names */&lt;br /&gt;
    private static final String EPH_FILE_PREFIX = &amp;quot;EPH_&amp;quot;;&lt;br /&gt;
    /** By default EPHEM file names */&lt;br /&gt;
    private static final String EPH_FILE = &amp;quot;EPHEM.txt&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // SIZES&lt;br /&gt;
    &lt;br /&gt;
    /** Data panel height */&lt;br /&gt;
    private static final int DATAPANEL_HEIGHT = 400;&lt;br /&gt;
    /** Error console height */&lt;br /&gt;
    private static final int ERRCONSOLE_HEIGHT = 80;&lt;br /&gt;
    /** Icon size */&lt;br /&gt;
    private static  final int ICON_SIZE = 12;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Constructor.&lt;br /&gt;
     * @throws GException   GENIUS exception&lt;br /&gt;
     */&lt;br /&gt;
    public WidPropagator() throws GException {&lt;br /&gt;
        &lt;br /&gt;
    super(&amp;quot;Propagator&amp;quot;,&lt;br /&gt;
          new WidPropagatorDataPanel(),&lt;br /&gt;
          new GContextFileManagement(&amp;quot;.&amp;quot;, &amp;quot;Propagator data&amp;quot;, new GFileFilter(INI_FILE_PREFIX, &amp;quot;.xml&amp;quot;, &amp;quot;Propagator Files&amp;quot;) ),&lt;br /&gt;
          new GAboutDialog(&amp;quot;About S/W&amp;quot;, &amp;quot;Propagator using PATRIUS ...&amp;quot;, &amp;quot;CNES&amp;quot;, &amp;quot;V1.0 ; 20/12/2017&amp;quot;, null),&lt;br /&gt;
          new GSaveResults(&amp;quot;Saving results&amp;quot;, new File(&amp;quot;.&amp;quot;), &amp;quot;.txt&amp;quot;, &amp;quot;.xml&amp;quot;),&lt;br /&gt;
          DATAPANEL_HEIGHT, ERRCONSOLE_HEIGHT, ICON_SIZE, false);&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Method to manage saving data and results files&lt;br /&gt;
     */&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void saveFilesManagement() throws GException {&lt;br /&gt;
&lt;br /&gt;
        final File ini = new File(INI_FILE);&lt;br /&gt;
        final File res = new File(EPH_FILE);&lt;br /&gt;
 &lt;br /&gt;
        // The context file INIT.xml will be saved in INI_....xml&lt;br /&gt;
        this.getSaveResultsDialog().setContextFile(ini.getName(), INI_FILE_PREFIX, true);&lt;br /&gt;
        // Result files consist in a single one named by default &amp;quot;EPHEM&amp;quot;&lt;br /&gt;
        this.getSaveResultsDialog().clearResultFileList();&lt;br /&gt;
        this.getSaveResultsDialog().addSingleResultFile(res.getName(), EPH_FILE_PREFIX, true);&lt;br /&gt;
 &lt;br /&gt;
        this.getSaveResultsDialog().show();&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Method to manage what to do before starting the computation&lt;br /&gt;
     */&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void customPreProcessManagement() throws GFileManipulatorException {&lt;br /&gt;
&lt;br /&gt;
        // We write a context file with data coming from the data panel&lt;br /&gt;
        GFileManipulation.writeConfig(INI_FILE, &amp;quot;Propagator&amp;quot;, this.getDataPanel(), true);&lt;br /&gt;
        // We initialize the JavaCommandLauncher&lt;br /&gt;
       final String classPath = System.getProperty(&amp;quot;java.class.path&amp;quot;);&lt;br /&gt;
        this.getJavaCommandLauncher().setJavaCommand(classPath, new String[] {&amp;quot;propagator.BatchPropagator&amp;quot;});&lt;br /&gt;
        // We display the console above the other tabbedpanes&lt;br /&gt;
        this.getDataPanel().selectConsoleTab();        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Method to manage what to do after computation&lt;br /&gt;
     */&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void customPostProcessManagement() {&lt;br /&gt;
        // Nothing to do ...       &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Main method.&lt;br /&gt;
     * @param args&lt;br /&gt;
     * @throws GException&lt;br /&gt;
     */&lt;br /&gt;
    public static void main(String[] args) throws GException {&lt;br /&gt;
        &lt;br /&gt;
        // Patrius dataset initialization&lt;br /&gt;
        try {&lt;br /&gt;
            PatriusDataset.addResourcesFromPatriusDataset();&lt;br /&gt;
        } catch (OrekitException err) {&lt;br /&gt;
            err.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        final WidPropagator pan = new WidPropagator();&lt;br /&gt;
        pan.displayMainFrame();&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Final result ==&lt;br /&gt;
&lt;br /&gt;
Now you are able to load this &amp;lt;font color=#FF8C00 title=&amp;quot;Graphical User Interface&amp;quot;&amp;gt;GUI&amp;lt;/font&amp;gt; and to use it!&lt;br /&gt;
&lt;br /&gt;
[[File:Propagator.jpg]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>