Customize output variables : Différence entre versions

De Wiki
Aller à : navigation, rechercher
(Implementing the addNewVars() method =)
(Implementing the computeNewVars() method =)
Ligne 105 : Ligne 105 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Implementing the computeNewVars() method ===
+
=== Implementing the computeNewVars() method ===
 +
 
 +
Using the data previously computed as includes in the '''currentState''' and '''listOfCurrentVars''' objects, we have jsut to compute the new variables then to store them using the <font color=#4169E1>addValue()</font> method of the <font color=#4169E1>ResultWriter</font> object.
  
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
 +
    public void computeNewVars(final ResultWriter resultWriter, final String tableName,
 +
            final SpacecraftState currentState,
 +
            final HashMap<String, Object> listOfCurrentVars) throws SqliteException {
 +
       
 +
        // Getting previously computed mean semi major axis and eccentricity
 +
        final double am = (Double)listOfCurrentVars.get("AM");
 +
        final double em = (Double)listOfCurrentVars.get("EM");
 +
        // Computation of the mean perigee and apogee altitude
 +
        final double hpm = am*(1. - em) - earth.getEquatorialRadius();
 +
        final double ham = am*(1. + em) - earth.getEquatorialRadius();
 +
       
 +
        // Storing in the table
 +
        if ( resultWriter != null) {
 +
            resultWriter.addValue(tableName, listOfNames.get(0), hpm);
 +
            resultWriter.addValue(tableName, listOfNames.get(1), ham);
 +
        }
 +
       
 +
        // Storing in the current list
 +
        if ( listOfCurrentVars != null ) {
 +
            listOfCurrentVars.put("HPM", hpm);
 +
            listOfCurrentVars.put("HAM", ham);
 +
        }
 +
       
 +
    }
 
</syntaxhighlight>
 
</syntaxhighlight>

Version du 23 septembre 2019 à 14:41

TBW (for V11.4 version) …

Warning: this section is only relevant for PSIMU version 11.4 (and or more recent ones).

Create new specific variables in the output list is relatively simple. As an example, we are goinf to show how to add twoo additional variables HPM and HAM, corresponding respectively the the perigee and apogee mean altitudes considering the mean semi-major axis and eccentricity already computed by PSIMU.

Creating a class implementing the INewVarsFunction interface

As explained in the title of this paragraph, we have to create a new class implementing the INewVarsFunction interface where we will be able to compute the new variables. On the code below, we see that this interface forces us to have the addNewVars(), computeNewVars() and getNames() methods:

public class MyNewMeanVars implements INewVarsFunction {
 
    @Override
    public void addNewVars(ResultWriter resultWriter) throws SqliteException {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void computeNewVars(ResultWriter resultWriter, String tableName,
            SpacecraftState currentState,
            HashMap<String, Object> currentVarsList) throws SqliteException {
        // TODO Auto-generated method stub
    }
 
    @Override
    public List<String> getNames() {
        // TODO Auto-generated method stub
        return null;
    }
 
}

Adding a constructor

As we will need information on the equatorial radius, we will add a constructor allowing to store a ExtendedOneAxisEllipsoid object as well as a list including the names of the new variables (this list will be returned by the getNames() method:

public class MyNewMeanVars implements INewVarsFunction {
 
    private final ExtendedOneAxisEllipsoid earth;
    private final ArrayList<String> listOfNames;
 
    public MyNewMeanVars ( final ExtendedOneAxisEllipsoid earth ) {
 
       this.earth = earth;
       // List initialization
       listOfNames = new ArrayList<String>();
       listOfNames.add("HPM");
       listOfNames.add("HAM");
 
    }
 
    …
 
    @Override
    public List<String> getNames() {
        return listOfNames;
    }

Implementing the addNewVars() method

To fill the addNewVars() method, we will have to call for the addColumn() method giving for each variable and each table (ephemeris and events ones) as inputs:

  • its name (String)
  • its description (String)
  • its unit (String)
  • its gap threshold (for plotting; may be null)
  • a boolean to kpow if it will be visible or not
    public void addNewVars ( final ResultWriter resultWriter ) throws SqliteException {
 
        if ( resultWriter != null) {
 
            // Mean perigee altitude creation
            String varName = listOfNames.get(0);
            String varDesc = "Mean perigee altitude";
            String varUnit = "km";
 
            // Adding a column in the ephemeris table
            resultWriter.addColumn(PsimuUtils.EPH_TABLE, varName, varDesc,
                    ColumnType.REAL, varUnit, null, true);
 
            // Adding a column in the event table
            resultWriter.addColumn(PsimuUtils.EVENT_TABLE, varName,
                    varDesc, ColumnType.REAL, varUnit, null, true);
 
            // Mean apogee altitude creation
            varName = listOfNames.get(1);
            varDesc = "Mean apogee altitude";
 
            // Adding a column in the ephemeris table
            resultWriter.addColumn(PsimuUtils.EPH_TABLE, varName, varDesc,
                    ColumnType.REAL, varUnit, null, true);
 
            // Adding a column in the event table
            resultWriter.addColumn(PsimuUtils.EVENT_TABLE, varName,
                    varDesc, ColumnType.REAL, varUnit, null, true);
 
        }
 
    }

Implementing the computeNewVars() method

Using the data previously computed as includes in the currentState and listOfCurrentVars objects, we have jsut to compute the new variables then to store them using the addValue() method of the ResultWriter object.

    public void computeNewVars(final ResultWriter resultWriter, final String tableName,
            final SpacecraftState currentState,
            final HashMap<String, Object> listOfCurrentVars) throws SqliteException {
 
        // Getting previously computed mean semi major axis and eccentricity
        final double am = (Double)listOfCurrentVars.get("AM");
        final double em = (Double)listOfCurrentVars.get("EM");
        // Computation of the mean perigee and apogee altitude
        final double hpm = am*(1. - em) - earth.getEquatorialRadius();
        final double ham = am*(1. + em) - earth.getEquatorialRadius();
 
        // Storing in the table
        if ( resultWriter != null) {
            resultWriter.addValue(tableName, listOfNames.get(0), hpm);
            resultWriter.addValue(tableName, listOfNames.get(1), ham);
        }
 
        // Storing in the current list
        if ( listOfCurrentVars != null ) {
            listOfCurrentVars.put("HPM", hpm);
            listOfCurrentVars.put("HAM", ham);
        }
 
    }