Skip to content
Snippets Groups Projects
Commit cd5c466a authored by noeljanes's avatar noeljanes
Browse files

Modifications to parser

parent eb4d7c92
No related branches found
No related tags found
No related merge requests found
...@@ -257,7 +257,7 @@ public class OrbitDetermination { // Class 1 ...@@ -257,7 +257,7 @@ public class OrbitDetermination { // Class 1
final List<ObservedMeasurement<?>> measurements = new ArrayList<ObservedMeasurement<?>>(); final List<ObservedMeasurement<?>> measurements = new ArrayList<ObservedMeasurement<?>>();
for (final String fileName : parser.getStringsList(ParameterKey.MEASUREMENTS_FILES, ',')) { for (final String fileName : parser.getStringsList(ParameterKey.MEASUREMENTS_FILES, ',')) {
System.out.println(fileName); System.out.println("The imported file is: " + fileName);
if (Pattern.matches(RinexLoader.DEFAULT_RINEX_2_SUPPORTED_NAMES, fileName) || if (Pattern.matches(RinexLoader.DEFAULT_RINEX_2_SUPPORTED_NAMES, fileName) ||
Pattern.matches(RinexLoader.DEFAULT_RINEX_3_SUPPORTED_NAMES, fileName)) { Pattern.matches(RinexLoader.DEFAULT_RINEX_3_SUPPORTED_NAMES, fileName)) {
...@@ -288,13 +288,16 @@ public class OrbitDetermination { // Class 1 ...@@ -288,13 +288,16 @@ public class OrbitDetermination { // Class 1
private PVCoordinates previousPV; private PVCoordinates previousPV;
{ {
previousPV = initialGuess.getPVCoordinates(); previousPV = initialGuess.getPVCoordinates();
final String header = "iteration evaluations ΔP(m) ΔV(m/s) RMS nb Range nb Range-rate nb Angular nb PV%n"; // nb=Narrowband /*final String header = "iteration evaluations ΔP(m) ΔV(m/s) RMS nb Range nb Range-rate nb Angular nb PV%n"; // nb = number
System.out.format(Locale.US, header); System.out.format(Locale.US, header);
if (logStream != null) { if (logStream != null) {
logStream.format(Locale.US, header); logStream.format(Locale.US, header);
} }*/
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void evaluationPerformed(final int iterationsCount, final int evaluationsCount, public void evaluationPerformed(final int iterationsCount, final int evaluationsCount,
...@@ -304,9 +307,49 @@ public class OrbitDetermination { // Class 1 ...@@ -304,9 +307,49 @@ public class OrbitDetermination { // Class 1
final ParameterDriversList estimatedMeasurementsParameters, final ParameterDriversList estimatedMeasurementsParameters,
final EstimationsProvider evaluationsProvider, final EstimationsProvider evaluationsProvider,
final LeastSquaresProblem.Evaluation lspEvaluation) { final LeastSquaresProblem.Evaluation lspEvaluation) {
PVCoordinates currentPV = orbits[0].getPVCoordinates(); PVCoordinates currentPV = orbits[0].getPVCoordinates();
final String format0 = " %2d %2d %16.12f %s %s %s %s%n"; Double pos = Vector3D.distance(currentPV.getPosition(), Vector3D.ZERO);
final String format = " %2d %2d %13.6f %12.9f %16.12f %s %s %s %s%n"; pos = (pos - body.getEquatorialRadius())/1000;
String altitude = Double.toString(pos);
double pxg = -5253194;
double pyg = -4400295;
double pzg = 80075;
double vxg = -559;
double vyg = 764;
double vzg = 7585;
Vector3D genPosition = new Vector3D(pxg, pyg, pzg);
Vector3D genVelocity = new Vector3D(vxg, vyg,vzg) ;
Double positionSeperation = Vector3D.distance(genPosition, currentPV.getPosition());
Double velocitySeperation = Vector3D.distance(genVelocity, currentPV.getVelocity());
/*
final String format0 = " %2d %2d %16.12f %s %s %s %s%n " +
"%s %s %n %s";
final String format = "%n %2d %2d %13.6f %12.9f %16.12f %s %s %s %s%n" +
" %s %s %n %s";
*/
final String iterationNumber = "Iteration Number: ";
final String evaluationNumber = "Evaluations performed: ";
final String PVCoords = "The estimated Cartesian parameters: ";
final String cd = "Estimated propagator parameters changes: ";
final String Position = "Altitude (km):";
final String dP = "ΔP(m):";
final String dV = "ΔV(m/s):";
final String rms = "RMS:";
final String nbRr = "nb Range-rate:";
final String posSep = "Position separation (m)";
final String velSep = "Velocity separation (m/s)";
final String format0 = "%s %2d, %s %2d, %s %s, %s %16.12f, %s %s %n %s %s %n %s %s, %s %s%n" ;
final String formatn = "%n%n%s %2d, %s %2d, %s %s, %s %13.6f, %s %12.9f, %s %16.12f, %s %s %n %s %s %n %s %s, %s %s%n" ;
final EvaluationCounter<Range> rangeCounter = new EvaluationCounter<Range>(); final EvaluationCounter<Range> rangeCounter = new EvaluationCounter<Range>();
final EvaluationCounter<RangeRate> rangeRateCounter = new EvaluationCounter<RangeRate>(); final EvaluationCounter<RangeRate> rangeRateCounter = new EvaluationCounter<RangeRate>();
final EvaluationCounter<AngularAzEl> angularCounter = new EvaluationCounter<AngularAzEl>(); final EvaluationCounter<AngularAzEl> angularCounter = new EvaluationCounter<AngularAzEl>();
...@@ -329,19 +372,23 @@ public class OrbitDetermination { // Class 1 ...@@ -329,19 +372,23 @@ public class OrbitDetermination { // Class 1
EstimatedMeasurement<PV> evaluation = (EstimatedMeasurement<PV>) entry.getValue(); EstimatedMeasurement<PV> evaluation = (EstimatedMeasurement<PV>) entry.getValue();
pvCounter.add(evaluation); pvCounter.add(evaluation);
} }
} }
/*
if (evaluationsCount == 1) { if (evaluationsCount == 1) {
System.out.format(Locale.US, format0, System.out.format(Locale.US, format0,
iterationsCount, evaluationsCount, iterationsCount, evaluationsCount,
lspEvaluation.getRMS(), lspEvaluation.getRMS(),
rangeCounter.format(8), rangeRateCounter.format(8), rangeCounter.format(8), rangeRateCounter.format(8),
angularCounter.format(8), pvCounter.format(8)); angularCounter.format(8), pvCounter.format(8));
if (logStream != null) { if (logStream != null) {
logStream.format(Locale.US, format0, logStream.format(Locale.US, format0,
iterationsCount, evaluationsCount, iterationsCount, evaluationsCount,
lspEvaluation.getRMS(), lspEvaluation.getRMS(),
rangeCounter.format(8), rangeRateCounter.format(8), rangeCounter.format(8), rangeRateCounter.format(8),
angularCounter.format(8), pvCounter.format(8)); angularCounter.format(8), pvCounter.format(8));
} }
} else { } else {
System.out.format(Locale.US, format, System.out.format(Locale.US, format,
...@@ -351,6 +398,7 @@ public class OrbitDetermination { // Class 1 ...@@ -351,6 +398,7 @@ public class OrbitDetermination { // Class 1
lspEvaluation.getRMS(), lspEvaluation.getRMS(),
rangeCounter.format(8), rangeRateCounter.format(8), rangeCounter.format(8), rangeRateCounter.format(8),
angularCounter.format(8), pvCounter.format(8)); angularCounter.format(8), pvCounter.format(8));
if (logStream != null) { if (logStream != null) {
logStream.format(Locale.US, format, logStream.format(Locale.US, format,
iterationsCount, evaluationsCount, iterationsCount, evaluationsCount,
...@@ -360,6 +408,83 @@ public class OrbitDetermination { // Class 1 ...@@ -360,6 +408,83 @@ public class OrbitDetermination { // Class 1
rangeCounter.format(8), rangeRateCounter.format(8), rangeCounter.format(8), rangeRateCounter.format(8),
angularCounter.format(8), pvCounter.format(8)); angularCounter.format(8), pvCounter.format(8));
} }
}*/
int length = 0;
for (final ParameterDriver parameterDriver : estimatedOrbitalParameters.getDrivers()) {
length = FastMath.max(length, parameterDriver.getName().length());
}
for (final ParameterDriver parameterDriver : estimatedPropagatorParameters.getDrivers()) {
length = FastMath.max(length, parameterDriver.getName().length());
}
for (final ParameterDriver parameterDriver : estimatedMeasurementsParameters.getDrivers()) {
length = FastMath.max(length, parameterDriver.getName().length());
}
if (evaluationsCount == 1) {
System.out.format(Locale.US,format0, iterationNumber, iterationsCount,
evaluationNumber, evaluationsCount, Position, altitude,
rms , lspEvaluation.getRMS(), nbRr, rangeCounter.format(8),
PVCoords , currentPV, posSep , positionSeperation , velSep , velocitySeperation);
displayParametersChanges(System.out, "Estimated orbital parameters changes: ",
false, length, estimatedOrbitalParameters);
displayParametersChanges(System.out, "Estimated propagator parameters changes: ",
true, length, estimatedPropagatorParameters);
displayParametersChanges(System.out, "Estimated measurements parameters changes: ",
true, length, estimatedMeasurementsParameters);
if (logStream!=null){
logStream.format(Locale.US,format0, iterationNumber, iterationsCount, evaluationNumber, evaluationsCount, Position, altitude,
rms , lspEvaluation.getRMS(), nbRr, rangeCounter.format(8),PVCoords , currentPV , posSep, positionSeperation , velSep , velocitySeperation);
displayParametersChanges(logStream, "Estimated orbital parameters changes: ",
false, length, estimatedOrbitalParameters);
displayParametersChanges(logStream, "Estimated propagator parameters changes: ",
true, length, estimatedPropagatorParameters);
displayParametersChanges(logStream, "Estimated measurements parameters changes: ",
true, length, estimatedMeasurementsParameters);
}
}
else {
System.out.format(Locale.US, formatn, iterationNumber, iterationsCount, evaluationNumber, evaluationsCount, Position, altitude,
dP , Vector3D.distance(previousPV.getPosition(), currentPV.getPosition()),
dV , Vector3D.distance(previousPV.getVelocity(), currentPV.getVelocity()),
rms , lspEvaluation.getRMS(), nbRr, rangeCounter.format(8),PVCoords , currentPV , posSep, positionSeperation , velSep , velocitySeperation);
displayParametersChanges(System.out, "Estimated orbital parameters changes: ",
false, length, estimatedOrbitalParameters);
displayParametersChanges(System.out, "Estimated propagator parameters changes: ",
true, length, estimatedPropagatorParameters);
displayParametersChanges(System.out, "Estimated measurements parameters changes: ",
true, length, estimatedMeasurementsParameters);
if (logStream!=null){
logStream.format(Locale.US, formatn, iterationNumber, iterationsCount, evaluationNumber, evaluationsCount, Position, altitude,
dP , Vector3D.distance(previousPV.getPosition(), currentPV.getPosition()),
dV , Vector3D.distance(previousPV.getVelocity(), currentPV.getVelocity()),
rms , lspEvaluation.getRMS(), nbRr, rangeCounter.format(8),PVCoords , currentPV, posSep, positionSeperation , velSep , velocitySeperation);
displayParametersChanges(logStream, "Estimated orbital parameters changes: ",
false, length, estimatedOrbitalParameters);
displayParametersChanges(logStream, "Estimated propagator parameters changes: ",
true, length, estimatedPropagatorParameters);
displayParametersChanges(logStream, "Estimated measurements parameters changes: ",
true, length, estimatedMeasurementsParameters);
}
} }
previousPV = currentPV; previousPV = currentPV;
} }
...@@ -618,8 +743,7 @@ public class OrbitDetermination { // Class 1 ...@@ -618,8 +743,7 @@ public class OrbitDetermination { // Class 1
final double cd = parser.getDouble(ParameterKey.DRAG_CD); final double cd = parser.getDouble(ParameterKey.DRAG_CD);
final double area = parser.getDouble(ParameterKey.DRAG_AREA); final double area = parser.getDouble(ParameterKey.DRAG_AREA);
final boolean cdEstimated = parser.getBoolean(ParameterKey.DRAG_CD_ESTIMATED); final boolean cdEstimated = parser.getBoolean(ParameterKey.DRAG_CD_ESTIMATED);
System.out.println(cd);
System.out.println(parser.getDouble(ParameterKey.DRAG_CD_MAX));
MarshallSolarActivityFutureEstimation msafe = MarshallSolarActivityFutureEstimation msafe =
new MarshallSolarActivityFutureEstimation(MarshallSolarActivityFutureEstimation.DEFAULT_SUPPORTED_NAMES, new MarshallSolarActivityFutureEstimation(MarshallSolarActivityFutureEstimation.DEFAULT_SUPPORTED_NAMES,
MarshallSolarActivityFutureEstimation.StrengthLevel.AVERAGE); MarshallSolarActivityFutureEstimation.StrengthLevel.AVERAGE);
...@@ -640,7 +764,7 @@ public class OrbitDetermination { // Class 1 ...@@ -640,7 +764,7 @@ public class OrbitDetermination { // Class 1
} }
if (parser.containsKey(ParameterKey.DRAG_CD_MAX)) { if (parser.containsKey(ParameterKey.DRAG_CD_MAX)) {
driver.setMinValue(parser.getDouble(ParameterKey.DRAG_CD_MAX)); driver.setMaxValue(parser.getDouble(ParameterKey.DRAG_CD_MAX));
} }
} }
} }
...@@ -1265,6 +1389,7 @@ public class OrbitDetermination { // Class 1 ...@@ -1265,6 +1389,7 @@ public class OrbitDetermination { // Class 1
/** Set up outliers manager for range-rate measurements. /** Set up outliers manager for range-rate measurements.
* @param parser input file parser * @param parser input file parser
* @return outliers manager (null if none configured) * @return outliers manager (null if none configured)
* @return outliers manager (null if none configured)
*/ */
private OutlierFilter<RangeRate> createRangeRateOutliersManager(final KeyValueFileParser<ParameterKey> parser) { private OutlierFilter<RangeRate> createRangeRateOutliersManager(final KeyValueFileParser<ParameterKey> parser) {
if (parser.containsKey(ParameterKey.RANGE_RATE_OUTLIER_REJECTION_MULTIPLIER) != if (parser.containsKey(ParameterKey.RANGE_RATE_OUTLIER_REJECTION_MULTIPLIER) !=
......
...@@ -9,6 +9,7 @@ import java.lang.Math; ...@@ -9,6 +9,7 @@ import java.lang.Math;
public class LogParser { public class LogParser {
static private double differencecalculator(double xg , double yg, double zg , double xd , double yd , double zd){ static private double differencecalculator(double xg , double yg, double zg , double xd , double yd , double zd){
// Simple vector calculation to determine the distance between the estimated and generated parameters
double diffx = xg - xd; double diffx = xg - xd;
double diffy = yg - yd; double diffy = yg - yd;
double diffz = zg - zd; double diffz = zg - zd;
...@@ -27,10 +28,17 @@ public class LogParser { ...@@ -27,10 +28,17 @@ public class LogParser {
} }
static private String splitterExtendedLog(String input){
String[] a = input.split(": ");
String[] b = a[1].split(" ");
return a[1];
}
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
boolean pv = true; boolean pv = false;
boolean extendedLog = true ;
// Orbital parameters used in the generation of the measurements // Orbital parameters used in the generation of the measurements
double pxg = -5253194; double pxg = -5253194;
...@@ -51,26 +59,139 @@ public class LogParser { ...@@ -51,26 +59,139 @@ public class LogParser {
File pythonPath = new File(home, "\\Documents\\ESA Socis\\Orbit Determination\\Python plotting\\"); File pythonPath = new File(home, "\\Documents\\ESA Socis\\Orbit Determination\\Python plotting\\");
/* Initial data path */
File log = new File(pythonPath+"\\Drag\\Kiruna");
String[] folderlist = log.list();
boolean exists = log.exists();
System.out.println(exists);
/* Initial data for extended log files */
File inputFile = new File(pythonPath + "\\orbit-determination-generated-log.out");
File outputFile = new File(pythonPath +"\\"+stationID+ "-drag.txt"); File outputFile = new File(pythonPath +"\\convergingissue.txt");
if (!outputFile.exists()) { if (!outputFile.exists()) {
outputFile.createNewFile(); outputFile.createNewFile();
} }
for( String folderName : folderlist) { if (extendedLog != false) {
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
String line = reader.readLine();
FileWriter fw = new FileWriter(outputFile, true);
BufferedWriter bw = new BufferedWriter(fw);
while (line != null) {
if (line.startsWith("Iteration Number: 0")){
String[] mainline = line.split(",");
int i ;
for (i= 0 ; i < mainline.length; i++ ){
//System.out.println(mainline[i]);
String output = splitterExtendedLog(mainline[i]) + " ";
System.out.println(output);
try {
bw.write(output);
}
catch (IOException ioe) {
System.err.println("Writer failed");
}
}
}
else if (line.startsWith("Iteration Number:")) {
try {
bw.write("\n");
}
catch (IOException ioe) {
System.err.println("Writer Failed");
}
String[] mainline = line.split(",");
int i ;
for (i= 0 ; i < mainline.length; i++ ){
if (mainline[i].contains("Δ")){
continue;
}
else {
//System.out.println(mainline[i]);
String output = splitterExtendedLog(mainline[i]) + " ";
try {
bw.write(output);
} catch (IOException ioe) {
System.err.println("Writer failed");
}
}
}
}
else if (line.startsWith(" The estimated Cartesian parameters:")) {
String[] chunks = line.split("\\(");
double[] position = splitter(chunks[1]);
double[] velocity = splitter(chunks[2]);
double[] a = splitter(chunks[3]);
double pDiff = differencecalculator(pxg, pyg, pzg, position[0], position[1], position[2]);
double vDiff = differencecalculator(vxg, vyg, vzg, velocity[0], velocity[1], velocity[2]);
String output = position[0] + " " + position[1] + " " + position[2] + " " + pDiff + " " + velocity[0] + " " + velocity[1] + " " + velocity[2] + " " + vDiff + " ";
try {
bw.write(output);
} catch (IOException ioe) {
System.err.println("Writer failed");
}
}
else if (line.startsWith(" 1 drag coefficient") || line.contains("1 39")){
String[] chunks = line.split(": ");
String[] cd = chunks[1].split("\\)");
try {
bw.write(cd[0] + " ");
}
catch (IOException ioe) {
System.err.println("Writer failed");
}
}
line = reader.readLine();
}
bw.close();
}
if (pv != false) {
/* Initial data path for many log files */
File log = new File(home + "\\orbit-determination-generated-log.out");
String[] folderlist = log.list();
boolean exists = log.exists();
System.out.println(exists);
for( String folderName : folderlist) {
BufferedReader reader = new BufferedReader(new FileReader(log+"\\" + folderName + "\\orbit-determination-log.out")); BufferedReader reader = new BufferedReader(new FileReader(log+"\\" + folderName + "\\orbit-determination-log.out"));
String line = reader.readLine(); String line = reader.readLine();
if (pv != false) {
while (line != null) { while (line != null) {
......
...@@ -135,7 +135,7 @@ drag.cd.estimated = true ...@@ -135,7 +135,7 @@ drag.cd.estimated = true
drag.area = 0.25 drag.area = 0.25
## Maximum and minimum values of the drag coefficient ## Maximum and minimum values of the drag coefficient
drag.cd.min = 0 drag.cd.min = 0
drag.cd.max = 20 drag.cd.max = 2
## Solar Radiation Pressure (true/false) [false] ## Solar Radiation Pressure (true/false) [false]
solar.radiation.pressure = false solar.radiation.pressure = false
...@@ -564,7 +564,7 @@ estimator.orbital.parameters.position.scale = 10.0 ...@@ -564,7 +564,7 @@ estimator.orbital.parameters.position.scale = 10.0
# we can use either a Levenberg-Marquardt or a Gauss-Newton # we can use either a Levenberg-Marquardt or a Gauss-Newton
# optimization engine. Default is Levenberg-Marquardt # optimization engine. Default is Levenberg-Marquardt
estimator.optimization.engine = Levenberg-Marquardt estimator.optimization.engine = Gauss-Newton
# the default initial step bound factor is 100 for Levenberg-Marquardt # the default initial step bound factor is 100 for Levenberg-Marquardt
# this is too small for normalized parameters when initial guess is very # this is too small for normalized parameters when initial guess is very
...@@ -587,16 +587,16 @@ estimator.Levenberg.Marquardt.initial.step.bound.factor = 100 ...@@ -587,16 +587,16 @@ estimator.Levenberg.Marquardt.initial.step.bound.factor = 100
# for example), then the threshold should not be too small. A value # for example), then the threshold should not be too small. A value
# of 10⁻³ is often quite accurate. # of 10⁻³ is often quite accurate.
estimator.normalized.parameters.convergence.threshold = 1.0e-3 estimator.normalized.parameters.convergence.threshold = 1.0e-3
estimator.max.iterations = 600 estimator.max.iterations = 300
estimator.max.evaluations = 600 estimator.max.evaluations = 300
# comma-separated list of measurements files (in the same directory as this file) # comma-separated list of measurements files (in the same directory as this file)
measurements.files = 2019-06-11T19_58_49_145.961_4171_42778.dat measurements.files = generated-doppler-39-CGBSAT-VHF.dat
# generated-doppler-F4KLD-UNIVERSITE-PAUL-SABATIER-Toulouse-III.dat # generated-doppler-F4KLD-UNIVERSITE-PAUL-SABATIER-Toulouse-III.dat
# generated-doppler-39-CGBSAT-VHF.dat #
# generated-doppler-39-CGBSAT-VHF-fixeddrag.dat #
# generated-doppler-Marcs.dat # generated-doppler-Marcs.dat
# generated-doppler-ZL1WJQ.dat # generated-doppler-ZL1WJQ.dat
# generated-doppler-Kir-virt.dat # generated-doppler-Kir-virt.dat
...@@ -608,22 +608,10 @@ measurements.files = 2019-06-11T19_58_49_145.961_4171_42778.dat ...@@ -608,22 +608,10 @@ measurements.files = 2019-06-11T19_58_49_145.961_4171_42778.dat
# generated-doppler-39-CGBSAT-VHF-sd0-25.dat
# generated-doppler-39-CGBSAT-VHF-sd0-5.dat
# generated-doppler-39-CGBSAT-VHF-sd1.dat
# generated-doppler-39-CGBSAT-VHF-sd2-5.dat
# generated-doppler-39-CGBSAT-VHF-sd5.dat
# generated-doppler-39-CGBSAT-VHF-sd10.dat
# generated-doppler-39-CGBSAT-VHF-sd20.dat
# generated-doppler-39-CGBSAT-VHF-sd25.dat
# generated-doppler-39-CGBSAT-VHF-sd30.dat
# generated-doppler-39-CGBSAT-VHF-sd35.dat
# generated-doppler-39-CGBSAT-VHF-sd40.dat
#Measured Data #Measured Data
# 2019-06-12T07_20_42_145.961_4171_42778.dat # 2019-06-12T07_20_42_145.961_4171_42778.dat
# , 2019-06-11T21_32_55_145.961_4171_42778.dat # , 2019-06-11T21_32_55_145.961_4171_42778.dat
# #2019-06-11T19_58_49_145.961_4171_42778.dat
# base name of the output files (log and residuals), no files created if empty # base name of the output files (log and residuals), no files created if empty
output.base.name = orbit-determination output.base.name = orbit-determination-GaussNewton-generated
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment