diff --git a/core/resources/datafiles/thrustcurves/thrustcurves.ser b/core/resources/datafiles/thrustcurves/thrustcurves.ser index d68f92c37..eef07e2d8 100644 Binary files a/core/resources/datafiles/thrustcurves/thrustcurves.ser and b/core/resources/datafiles/thrustcurves/thrustcurves.ser differ diff --git a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java index 7e4f76062..8c9f8f964 100644 --- a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java +++ b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java @@ -7,6 +7,8 @@ import java.util.IdentityHashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import net.sf.openrocket.motor.DesignationComparator; import net.sf.openrocket.motor.Manufacturer; @@ -37,6 +39,7 @@ public class ThrustCurveMotorSet implements Comparable { private Manufacturer manufacturer = null; private String designation = null; + private String simplifiedDesignation = null; private double diameter = -1; private double length = -1; private long totalImpulse = 0; @@ -51,6 +54,7 @@ public class ThrustCurveMotorSet implements Comparable { if (motors.isEmpty()) { manufacturer = motor.getManufacturer(); designation = motor.getDesignation(); + simplifiedDesignation = simplifyDesignation(designation); diameter = motor.getDiameter(); length = motor.getLength(); totalImpulse = Math.round((motor.getTotalImpulseEstimate())); @@ -80,6 +84,11 @@ public class ThrustCurveMotorSet implements Comparable { } } + // Change the simplified designation if necessary + if (!designation.equalsIgnoreCase(motor.getDesignation().trim())) { + designation = simplifiedDesignation; + } + if (caseInfo == null) { caseInfo = motor.getCaseInfo(); } @@ -146,6 +155,9 @@ public class ThrustCurveMotorSet implements Comparable { return false; } + if (!simplifiedDesignation.equalsIgnoreCase(simplifyDesignation(m.getDesignation()))) + return false; + if (!designation.equalsIgnoreCase(m.getDesignation())) return false; @@ -250,6 +262,25 @@ public class ThrustCurveMotorSet implements Comparable { ", type=" + type + ", count=" + motors.size() + "]"; } + private static final Pattern SIMPLIFY_PATTERN = Pattern.compile("^[0-9]*[ -]*([A-Z][0-9]+).*"); + + /** + * Simplify a motor designation, if possible. This attempts to reduce the designation + * into a simple letter + number notation for the impulse class and average thrust. + * + * @param str the designation to simplify + * @return the simplified designation, or the string itself if the format was not detected + */ + public static String simplifyDesignation(String str) { + str = str.trim(); + Matcher m = SIMPLIFY_PATTERN.matcher(str); + if (m.matches()) { + return m.group(1); + } else { + return str.replaceAll("\\s", ""); + } + } + /** * Comparator for deciding in which order to display matching motors. */ diff --git a/core/src/net/sf/openrocket/file/motor/AbstractMotorLoader.java b/core/src/net/sf/openrocket/file/motor/AbstractMotorLoader.java index a56f37233..478e9447a 100644 --- a/core/src/net/sf/openrocket/file/motor/AbstractMotorLoader.java +++ b/core/src/net/sf/openrocket/file/motor/AbstractMotorLoader.java @@ -174,10 +174,10 @@ public abstract class AbstractMotorLoader implements MotorLoader { @SuppressWarnings("unchecked") protected static void finalizeThrustCurve(List time, List thrust, List... lists) { - + if (time.size() == 0) return; - + // Start if (!MathUtil.equals(time.get(0), 0) || !MathUtil.equals(thrust.get(0), 0)) { time.add(0, 0.0); diff --git a/core/src/net/sf/openrocket/file/motor/GeneralMotorLoader.java b/core/src/net/sf/openrocket/file/motor/GeneralMotorLoader.java index c3822bc5b..974a4afbd 100644 --- a/core/src/net/sf/openrocket/file/motor/GeneralMotorLoader.java +++ b/core/src/net/sf/openrocket/file/motor/GeneralMotorLoader.java @@ -25,7 +25,7 @@ public class GeneralMotorLoader implements MotorLoader { } - + /** * {@inheritDoc} * @@ -37,7 +37,7 @@ public class GeneralMotorLoader implements MotorLoader { } - + /** * Return an array containing the supported file extensions. * @@ -65,7 +65,7 @@ public class GeneralMotorLoader implements MotorLoader { if (point > 0) ext = filename.substring(point + 1); - + if (ext.equalsIgnoreCase("eng")) { return RASP_LOADER; } else if (ext.equalsIgnoreCase("rse")) { diff --git a/core/src/net/sf/openrocket/file/motor/RASPMotorLoader.java b/core/src/net/sf/openrocket/file/motor/RASPMotorLoader.java index 808132578..26c102f71 100644 --- a/core/src/net/sf/openrocket/file/motor/RASPMotorLoader.java +++ b/core/src/net/sf/openrocket/file/motor/RASPMotorLoader.java @@ -21,11 +21,15 @@ public class RASPMotorLoader extends AbstractMotorLoader { public static final Charset CHARSET = Charset.forName(CHARSET_NAME); + + + @Override protected Charset getDefaultCharset() { return CHARSET; } + /** * Load a Motor from a RASP file specified by the Reader. * The Reader is responsible for using the correct charset. @@ -39,7 +43,7 @@ public class RASPMotorLoader extends AbstractMotorLoader { */ @Override public List load(Reader reader, String filename) throws IOException { - List motors = new ArrayList(); + List motors = new ArrayList<>(); BufferedReader in = new BufferedReader(reader); String manufacturer = ""; @@ -62,7 +66,7 @@ public class RASPMotorLoader extends AbstractMotorLoader { line = in.readLine(); main: while (line != null) { // Until EOF - + manufacturer = ""; designation = ""; comment = ""; @@ -98,7 +102,7 @@ public class RASPMotorLoader extends AbstractMotorLoader { length = Double.parseDouble(pieces[2]) / 1000.0; if (pieces[3].equalsIgnoreCase("None")) { - + } else { buf = split(pieces[3], "[-,]+"); for (int i = 0; i < buf.length; i++) { @@ -169,8 +173,8 @@ public class RASPMotorLoader extends AbstractMotorLoader { private static ThrustCurveMotor.Builder createRASPMotor(String manufacturer, String designation, String comment, double length, double diameter, double[] delays, double propW, double totalW, List time, List thrust) - throws IOException { - + throws IOException { + // Add zero time/thrust if necessary sortLists(time, thrust); finalizeThrustCurve(time, thrust); @@ -194,23 +198,28 @@ public class RASPMotorLoader extends AbstractMotorLoader { motorDigest.update(DataType.FORCE_PER_TIME, thrustArray); final String digest = motorDigest.getDigest(); - Manufacturer m = Manufacturer.getManufacturer(manufacturer); - - ThrustCurveMotor.Builder builder = new ThrustCurveMotor.Builder(); - builder.setManufacturer(m) - .setDesignation(designation) - .setDescription(comment) - .setDigest(digest) - .setMotorType(m.getMotorType()) - .setStandardDelays(delays) - .setDiameter(diameter) - .setLength(length) - .setTimePoints(timeArray) - .setThrustPoints(thrustArray) - .setCGPoints(cgArray) - .setInitialMass(totalW) - .setPropellantMass(propW); - - return builder; + try { + + Manufacturer m = Manufacturer.getManufacturer(manufacturer); + ThrustCurveMotor.Builder builder = new ThrustCurveMotor.Builder(); + builder.setManufacturer(m) + .setDesignation(designation) + .setDescription(comment) + .setMotorType(m.getMotorType()) + .setStandardDelays(delays) + .setDiameter(diameter) + .setLength(length) + .setTimePoints(timeArray) + .setThrustPoints(thrustArray) + .setCGPoints(cgArray) + .setDigest(digest); + return builder; + + } catch (IllegalArgumentException e) { + + // Bad data read from file. + throw new IOException("Illegal file format.", e); + + } } } diff --git a/core/src/net/sf/openrocket/file/motor/RockSimMotorLoader.java b/core/src/net/sf/openrocket/file/motor/RockSimMotorLoader.java index 00e908a30..b1fee2686 100644 --- a/core/src/net/sf/openrocket/file/motor/RockSimMotorLoader.java +++ b/core/src/net/sf/openrocket/file/motor/RockSimMotorLoader.java @@ -23,6 +23,7 @@ import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.MotorDigest; import net.sf.openrocket.motor.MotorDigest.DataType; import net.sf.openrocket.motor.ThrustCurveMotor; +import net.sf.openrocket.motor.ThrustCurveMotor.Builder; import net.sf.openrocket.util.Coordinate; public class RockSimMotorLoader extends AbstractMotorLoader { @@ -79,7 +80,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { * Initial handler for the RockSim engine files. */ private static class RSEHandler extends AbstractElementHandler { - private final List motors = new ArrayList(); + private final List motors = new ArrayList<>(); private RSEMotorHandler motorHandler; @@ -90,7 +91,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { @Override public ElementHandler openElement(String element, HashMap attributes, WarningSet warnings) throws SAXException { - + if (element.equals("engine-database") || element.equals("engine-list")) { // Ignore and elements @@ -113,7 +114,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { @Override public void closeElement(String element, HashMap attributes, String content, WarningSet warnings) throws SAXException { - + if (element.equals("engine")) { ThrustCurveMotor.Builder motor = motorHandler.getMotor(); motors.add(motor); @@ -265,7 +266,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { @Override public ElementHandler openElement(String element, HashMap attributes, WarningSet warnings) throws SAXException { - + if (element.equals("comments")) { return PlainTextHandler.INSTANCE; } @@ -286,7 +287,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { @Override public void closeElement(String element, HashMap attributes, String content, WarningSet warnings) { - + if (element.equals("comments")) { if (description.length() > 0) { description = description + "\n\n" + content.trim(); @@ -320,10 +321,10 @@ public class RockSimMotorLoader extends AbstractMotorLoader { } } - public ThrustCurveMotor.Builder getMotor() throws SAXException { + public Builder getMotor() throws SAXException { if (time == null || time.size() == 0) throw new SAXException("Illegal motor data"); - + finalizeThrustCurve(time, force, mass, cg); final int n = time.size(); @@ -332,7 +333,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { calculateMass = true; if (hasIllegalValue(cg)) calculateCG = true; - + if (calculateMass) { mass = calculateMass(time, force, initMass, propMass); } @@ -350,6 +351,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { cgArray[i] = new Coordinate(cg.get(i), 0, 0, mass.get(i)); } + // Create the motor digest from all data available in the file MotorDigest motorDigest = new MotorDigest(); motorDigest.update(DataType.TIME_ARRAY, timeArray); @@ -364,35 +366,36 @@ public class RockSimMotorLoader extends AbstractMotorLoader { motorDigest.update(DataType.FORCE_PER_TIME, thrustArray); final String digest = motorDigest.getDigest(); - Manufacturer m = Manufacturer.getManufacturer(manufacturer); - Motor.Type t = type; - if (t == Motor.Type.UNKNOWN) { - t = m.getMotorType(); - } else { - if (m.getMotorType() != Motor.Type.UNKNOWN && m.getMotorType() != t) { - log.warn("Loaded motor type inconsistent with manufacturer," + - " loaded type=" + t + " manufacturer=" + m + - " manufacturer type=" + m.getMotorType() + - " designation=" + designation); - } - } - ThrustCurveMotor.Builder builder = new ThrustCurveMotor.Builder(); - builder.setManufacturer(m) - .setDesignation(designation) - .setDescription(description) - .setDigest(digest) - .setMotorType(t) - .setStandardDelays(delays) - .setDiameter(diameter) - .setLength(length) - .setTimePoints(timeArray) - .setThrustPoints(thrustArray) - .setCGPoints(cgArray) - .setInitialMass(initMass) - .setPropellantMass(propMass); - - return builder; + try { + Manufacturer m = Manufacturer.getManufacturer(manufacturer); + Motor.Type t = type; + if (t == Motor.Type.UNKNOWN) { + t = m.getMotorType(); + } else { + if (m.getMotorType() != Motor.Type.UNKNOWN && m.getMotorType() != t) { + log.warn("Loaded motor type inconsistent with manufacturer," + + " loaded type=" + t + " manufacturer=" + m + + " manufacturer type=" + m.getMotorType() + + " designation=" + designation); + } + } + + return new ThrustCurveMotor.Builder() + .setManufacturer(m) + .setDesignation(designation) + .setDescription(description) + .setMotorType(t) + .setStandardDelays(delays) + .setDiameter(diameter) + .setLength(length) + .setTimePoints(timeArray) + .setThrustPoints(thrustArray) + .setCGPoints(cgArray) + .setDigest(digest); + } catch (IllegalArgumentException e) { + throw new SAXException("Illegal motor data", e); + } } } @@ -428,7 +431,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { @Override public ElementHandler openElement(String element, HashMap attributes, WarningSet warnings) { - + if (element.equals("eng-data")) { return NullElementHandler.INSTANCE; } @@ -440,7 +443,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader { @Override public void closeElement(String element, HashMap attributes, String content, WarningSet warnings) throws SAXException { - + double t = parseDouble(attributes.get("t")); double f = parseDouble(attributes.get("f")); double m = parseDouble(attributes.get("m")) / 1000.0; diff --git a/core/src/net/sf/openrocket/file/motor/ZipFileMotorLoader.java b/core/src/net/sf/openrocket/file/motor/ZipFileMotorLoader.java index 0b319bcd0..176da2dc6 100644 --- a/core/src/net/sf/openrocket/file/motor/ZipFileMotorLoader.java +++ b/core/src/net/sf/openrocket/file/motor/ZipFileMotorLoader.java @@ -45,7 +45,7 @@ public class ZipFileMotorLoader implements MotorLoader { @Override public List load(InputStream stream, String filename) throws IOException { - List motors = new ArrayList(); + List motors = new ArrayList<>(); ZipInputStream is = new ZipInputStream(stream); @@ -56,10 +56,10 @@ public class ZipFileMotorLoader implements MotorLoader { ZipEntry entry = is.getNextEntry(); if (entry == null) break; - + if (entry.isDirectory()) continue; - + // Get the file name of the entry String name = entry.getName(); int index = name.lastIndexOf('/'); diff --git a/core/src/net/sf/openrocket/file/simplesax/DelegatorHandler.java b/core/src/net/sf/openrocket/file/simplesax/DelegatorHandler.java index 13f396283..6023f43ee 100644 --- a/core/src/net/sf/openrocket/file/simplesax/DelegatorHandler.java +++ b/core/src/net/sf/openrocket/file/simplesax/DelegatorHandler.java @@ -8,7 +8,6 @@ import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; -import net.sf.openrocket.aerodynamics.Warning; import net.sf.openrocket.aerodynamics.WarningSet; /** @@ -22,7 +21,6 @@ class DelegatorHandler extends DefaultHandler { private final Deque elementData = new ArrayDeque(); private final Deque> elementAttributes = new ArrayDeque>(); - // Ignore all elements as long as ignore > 0 private int ignore = 0; @@ -39,21 +37,13 @@ class DelegatorHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { - + // Check for ignore if (ignore > 0) { ignore++; return; } - // Check for unknown namespace - if (!uri.equals("")) { - warnings.add(Warning.fromString("Unknown namespace element '" + uri - + "' encountered, ignoring.")); - ignore++; - return; - } - // Add layer to data stacks elementData.push(new StringBuilder()); elementAttributes.push(copyAttributes(attributes)); @@ -78,7 +68,7 @@ class DelegatorHandler extends DefaultHandler { // Check for ignore if (ignore > 0) return; - + StringBuilder sb = elementData.peek(); sb.append(chars, start, length); } diff --git a/core/src/net/sf/openrocket/motor/Motor.java b/core/src/net/sf/openrocket/motor/Motor.java index a3c468818..ae9199251 100644 --- a/core/src/net/sf/openrocket/motor/Motor.java +++ b/core/src/net/sf/openrocket/motor/Motor.java @@ -1,6 +1,6 @@ package net.sf.openrocket.motor; -public interface Motor extends Cloneable { +public interface Motor { /** * Enum of rocket motor types. @@ -119,8 +119,6 @@ public interface Motor extends Cloneable { public String getDigest(); - public Motor clone(); - public double getAverageThrust( final double startTime, final double endTime ); public double getLaunchCGx(); @@ -187,4 +185,5 @@ public interface Motor extends Cloneable { public double getUnitIyy(); public double getUnitIzz(); + } diff --git a/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java b/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java index 518c6b004..e78edc061 100644 --- a/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java +++ b/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java @@ -7,10 +7,9 @@ import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import net.sf.openrocket.models.atmosphere.AtmosphericConditions; + import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.Coordinate; -import net.sf.openrocket.util.Inertia; import net.sf.openrocket.util.MathUtil; public class ThrustCurveMotor implements Motor, Comparable, Serializable { @@ -32,163 +31,198 @@ public class ThrustCurveMotor implements Motor, Comparable, Se private String digest; - private final Manufacturer manufacturer; - private final String designation; - private final String description; - private final Motor.Type type; - private final double[] delays; - private final double diameter; - private final double length; - private final double[] time; - private final double[] thrust; - private final Coordinate[] cg; + private Manufacturer manufacturer; + private String designation; + private String description; + private Motor.Type type; + private double[] delays; + private double diameter; + private double length; + private double[] time; + private double[] thrust; + private Coordinate[] cg; private String caseInfo; private String propellantInfo; private double initialMass; + private double propellantMass; private double maxThrust; private double burnTimeEstimate; private double averageThrust; private double totalImpulse; - - private final double unitRotationalInertia; - private final double unitLongitudinalInertia; - private boolean available = true; - /** - * Deep copy constructor. - * Constructs a new ThrustCurveMotor from an existing ThrustCurveMotor. - * @param m - */ - protected ThrustCurveMotor(ThrustCurveMotor m) { - this.digest = m.digest; - this.manufacturer = m.manufacturer; - this.designation = m.designation; - this.description = m.description; - this.type = m.type; - this.delays = Arrays.copyOf(m.delays, m.delays.length); - this.diameter = m.diameter; - this.length = m.length; - this.time = Arrays.copyOf(m.time, m.time.length); - this.thrust = Arrays.copyOf(m.thrust, m.thrust.length); - this.cg = m.getCGPoints().clone(); + private double unitRotationalInertia; + private double unitLongitudinalInertia; + + public static class Builder { - this.caseInfo = m.caseInfo; - this.propellantInfo = m.propellantInfo; + ThrustCurveMotor motor = new ThrustCurveMotor(); - this.initialMass = m.initialMass; - this.maxThrust = m.maxThrust; - this.burnTimeEstimate = m.burnTimeEstimate; - this.averageThrust = m.averageThrust; - this.totalImpulse = m.totalImpulse; + public Builder setAverageThrustEstimate(double v) { + motor.averageThrust = v; + return this; + } - this.unitRotationalInertia = m.unitRotationalInertia; - this.unitLongitudinalInertia = m.unitLongitudinalInertia; + public Builder setBurnTimeEstimate(double v) { + motor.burnTimeEstimate = v; + return this; + } + + public Builder setCaseInfo(String v) { + motor.caseInfo = v; + return this; + } + + public Builder setCGPoints(Coordinate[] cg) { + motor.cg = cg; + return this; + } + + public Builder setDescription(String d) { + motor.description = d; + return this; + } + + public Builder setDesignation(String d) { + motor.designation = d; + return this; + } + + public Builder setDiameter(double v) { + motor.diameter = v; + return this; + } + + public Builder setDigest(String d) { + motor.digest = d; + return this; + } + + public Builder setInitialMass(double v) { + motor.initialMass = v; + return this; + } + + public Builder setLength(double v) { + motor.length = v; + return this; + } + + public Builder setManufacturer(Manufacturer m) { + motor.manufacturer = m; + return this; + } + + public Builder setMaxThrustEstimate(double v) { + motor.maxThrust = v; + return this; + } + + public Builder setMotorType(Motor.Type t) { + motor.type = t; + return this; + } + + public Builder setPropellantInfo(String v) { + motor.propellantInfo = v; + return this; + } + + public Builder setPropellantMass(double v) { + motor.propellantMass = v; + return this; + } + + public Builder setStandardDelays(double[] d) { + motor.delays = d; + return this; + } + + public Builder setThrustPoints(double[] d) { + motor.thrust = d; + return this; + } + + public Builder setTimePoints(double[] d) { + motor.time = d; + return this; + } + + public Builder setTotalThrustEstimate(double v) { + motor.totalImpulse = v; + return this; + } + + public Builder setAvailablity(boolean avail) { + motor.available = avail; + return this; + } + + public ThrustCurveMotor build() { + // Check argument validity + if ((motor.time.length != motor.thrust.length) || (motor.time.length != motor.cg.length)) { + throw new IllegalArgumentException("Array lengths do not match, " + + "time:" + motor.time.length + " thrust:" + motor.thrust.length + + " cg:" + motor.cg.length); + } + if (motor.time.length < 2) { + throw new IllegalArgumentException("Too short thrust-curve, length=" + motor.time.length); + } + for (int i = 0; i < motor.time.length - 1; i++) { + if (motor.time[i + 1] < motor.time[i]) { + throw new IllegalArgumentException("Time goes backwards, " + + "time[" + i + "]=" + motor.time[i] + " " + + "time[" + (i + 1) + "]=" + motor.time[i + 1]); + } + } + if (!MathUtil.equals(motor.time[0], 0)) { + throw new IllegalArgumentException("Curve starts at time " + motor.time[0]); + } + if (!MathUtil.equals(motor.thrust[0], 0)) { + throw new IllegalArgumentException("Curve starts at thrust " + motor.thrust[0]); + } + if (!MathUtil.equals(motor.thrust[motor.thrust.length - 1], 0)) { + throw new IllegalArgumentException("Curve ends at thrust " + + motor.thrust[motor.thrust.length - 1]); + } + for (double t : motor.thrust) { + if (t < 0) { + throw new IllegalArgumentException("Negative thrust."); + } + if (t > MAX_THRUST || Double.isNaN(t)) { + throw new IllegalArgumentException("Invalid thrust " + t); + } + } + for (Coordinate c : motor.cg) { + if (c.isNaN()) { + throw new IllegalArgumentException("Invalid CG " + c); + } + if (c.x < 0) { + throw new IllegalArgumentException("Invalid CG position " + String.format("%f", c.x) + ": CG is below the start of the motor."); + } + if (c.x > motor.length) { + throw new IllegalArgumentException("Invalid CG position: " + String.format("%f", c.x) + ": CG is above the end of the motor."); + } + if (c.weight < 0) { + throw new IllegalArgumentException("Negative mass " + c.weight + "at time=" + motor.time[Arrays.asList(motor.cg).indexOf(c)]); + } + } + + if (motor.type != Motor.Type.SINGLE && motor.type != Motor.Type.RELOAD && + motor.type != Motor.Type.HYBRID && motor.type != Motor.Type.UNKNOWN) { + throw new IllegalArgumentException("Illegal motor type=" + motor.type); + } + + + motor.computeStatistics(); + + return motor; + } } - /** - * Sole constructor. Sets all the properties of the motor. - * - * @param manufacturer the manufacturer of the motor. - * @param designation the designation of the motor. - * @param description extra description of the motor. - * @param type the motor type - * @param delays the delays defined for this thrust curve - * @param diameter diameter of the motor. - * @param length length of the motor. - * @param time the time points for the thrust curve. - * @param thrust thrust at the time points. - * @param cg cg at the time points. - */ - public ThrustCurveMotor(Manufacturer manufacturer, String designation, String description, - Motor.Type type, double[] delays, double diameter, double length, - double[] time, double[] thrust, Coordinate[] cg, String digest) { - this.digest = digest; - // Check argument validity - if ((time.length != thrust.length) || (time.length != cg.length)) { - throw new IllegalArgumentException("Array lengths do not match, " + - "time:" + time.length + " thrust:" + thrust.length + - " cg:" + cg.length); - } - if (time.length < 2) { - throw new IllegalArgumentException("Too short thrust-curve, length=" + - time.length); - } - for (int i = 0; i < time.length - 1; i++) { - if (time[i + 1] < time[i]) { - throw new IllegalArgumentException("Time goes backwards, " + - "time[" + i + "]=" + time[i] + " " + - "time[" + (i + 1) + "]=" + time[i + 1]); - } - } - if (!MathUtil.equals(time[0], 0)) { - throw new IllegalArgumentException("Curve starts at time " + time[0]); - } - if (!MathUtil.equals(thrust[0], 0)) { - throw new IllegalArgumentException("Curve starts at thrust " + thrust[0]); - } - if (!MathUtil.equals(thrust[thrust.length - 1], 0)) { - throw new IllegalArgumentException("Curve ends at thrust " + - thrust[thrust.length - 1]); - } - for (double t : thrust) { - if (t < 0) { - throw new IllegalArgumentException("Negative thrust."); - } - if (t > MAX_THRUST || Double.isNaN(t)) { - throw new IllegalArgumentException("Invalid thrust " + t); - } - } - for (Coordinate c : cg) { - if (c.isNaN()) { - throw new IllegalArgumentException("Invalid CG " + c); - } - if (c.x < 0) { - throw new IllegalArgumentException("Invalid CG position " + String.format("%f", c.x) + ": CG is below the start of the motor."); - } - if (c.x > length) { - throw new IllegalArgumentException("Invalid CG position: " + String.format("%f", c.x) + ": CG is above the end of the motor."); - } - if (c.weight < 0) { - throw new IllegalArgumentException("Negative mass " + c.weight + "at time=" + time[Arrays.asList(cg).indexOf(c)]); - } - } - - if (type != Motor.Type.SINGLE && type != Motor.Type.RELOAD && - type != Motor.Type.HYBRID && type != Motor.Type.UNKNOWN) { - throw new IllegalArgumentException("Illegal motor type=" + type); - } - - - this.manufacturer = manufacturer; - this.designation = designation; - this.description = description; - this.type = type; - this.delays = delays.clone(); - this.diameter = diameter; - this.length = length; - this.time = time.clone(); - this.thrust = thrust.clone(); - this.cg = cg.clone(); - // this.cgx = new double[ cg.length]; - // this.mass = new double[ cg.length]; - // for (int cgIndex = 0; cgIndex < cg.length; ++cgIndex){ - // this.cgx[cgIndex] = cg[cgIndex].x; - // this.mass[cgIndex] = cg[cgIndex].weight; - // } - unitRotationalInertia = Inertia.filledCylinderRotational( this.diameter / 2); - unitLongitudinalInertia = Inertia.filledCylinderLongitudinal( this.diameter / 2, this.length); - - computeStatistics(); - - // This constructor is not called upon serialized data constructor. - //System.err.println("loading motor: "+designation); - } - - /** * Get the manufacturer of this motor. @@ -208,32 +242,6 @@ public class ThrustCurveMotor implements Motor, Comparable, Se return time.clone(); } - public String getCaseInfo() { - return caseInfo; - } - - public CaseInfo getCaseInfoEnum() { - return CaseInfo.parse(caseInfo); - } - - public CaseInfo[] getCompatibleCases() { - CaseInfo myCase = getCaseInfoEnum(); - if (myCase == null) { - return new CaseInfo[] {}; - } - return myCase.getCompatibleCases(); - } - - public String getPropellantInfo() { - return propellantInfo; - } - - - public double getInitialMass() { - return initialMass; - } - - /* * find the index to data that corresponds to the given time: * @@ -354,6 +362,32 @@ public class ThrustCurveMotor implements Motor, Comparable, Se + public String getCaseInfo() { + return caseInfo; + } + + public CaseInfo getCaseInfoEnum() { + return CaseInfo.parse(caseInfo); + } + + public CaseInfo[] getCompatibleCases() { + CaseInfo myCase = getCaseInfoEnum(); + if (myCase == null) { + return new CaseInfo[] {}; + } + return myCase.getCompatibleCases(); + } + + public String getPropellantInfo() { + return propellantInfo; + } + + + public double getInitialMass() { + return initialMass; + } + + /** * Returns the array of thrust points for this thrust curve. * @return an array of thrust samples @@ -450,11 +484,6 @@ public class ThrustCurveMotor implements Motor, Comparable, Se return length; } - @Override - public Motor clone() { - return new ThrustCurveMotor(this); - } - @Override public double getLaunchCGx() { return cg[0].x;//cgx[0]; @@ -526,7 +555,7 @@ public class ThrustCurveMotor implements Motor, Comparable, Se } public double getPropellantMass(){ - return (getLaunchMass() - getBurnoutMass()); + return propellantMass; } @Override @@ -750,5 +779,5 @@ public class ThrustCurveMotor implements Motor, Comparable, Se return value; } - + } diff --git a/core/src/net/sf/openrocket/thrustcurve/MotorBurnFile.java b/core/src/net/sf/openrocket/thrustcurve/MotorBurnFile.java index b20afe939..4f07c9551 100644 --- a/core/src/net/sf/openrocket/thrustcurve/MotorBurnFile.java +++ b/core/src/net/sf/openrocket/thrustcurve/MotorBurnFile.java @@ -35,11 +35,11 @@ public class MotorBurnFile { if (SupportedFileTypes.RASP_FORMAT.equals(filetype)) { RASPMotorLoader loader = new RASPMotorLoader(); List motors = loader.load(new StringReader(data), "download"); - this.thrustCurveMotor = motors.get(0); + this.thrustCurveMotor = (ThrustCurveMotor.Builder)motors.get(0); } else if (SupportedFileTypes.ROCKSIM_FORMAT.equals(filetype)) { RockSimMotorLoader loader = new RockSimMotorLoader(); List motors = loader.load(new StringReader(data), "download"); - this.thrustCurveMotor = motors.get(0); + this.thrustCurveMotor = (ThrustCurveMotor.Builder)motors.get(0); } } catch (IOException ex) { this.thrustCurveMotor = null; diff --git a/core/src/net/sf/openrocket/thrustcurve/SearchResponseParser.java b/core/src/net/sf/openrocket/thrustcurve/SearchResponseParser.java index 9d589cebe..3c8b08fe7 100644 --- a/core/src/net/sf/openrocket/thrustcurve/SearchResponseParser.java +++ b/core/src/net/sf/openrocket/thrustcurve/SearchResponseParser.java @@ -100,6 +100,9 @@ public class SearchResponseParser implements ElementHandler { } response.addMotor(currentMotor); break; + case matches: + this.response.setMatches(Integer.parseInt(content)); + break; case motor_id: currentMotor.setMotor_id(Integer.parseInt(content)); break; @@ -172,7 +175,7 @@ public class SearchResponseParser implements ElementHandler { } } - + @Override public void endHandler(String element, HashMap attributes, String content, WarningSet warnings) throws SAXException { } diff --git a/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java b/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java index 94dedc08b..87afda839 100644 --- a/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java +++ b/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java @@ -17,7 +17,6 @@ import net.sf.openrocket.file.motor.GeneralMotorLoader; import net.sf.openrocket.gui.util.SimpleFileFilter; import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.ThrustCurveMotor; -import net.sf.openrocket.motor.ThrustCurveMotor.Builder; import net.sf.openrocket.util.Pair; public class SerializeThrustcurveMotors { @@ -130,11 +129,11 @@ public class SerializeThrustcurveMotors { builder.setPropellantMass(mi.getProp_mass_g() / 1000.0); } - builder.setCaseInfo(mi.getCase_info()) - .setPropellantInfo(mi.getProp_info()) - .setDiameter(mi.getDiameter() / 1000.0) - .setLength(mi.getLength() / 1000.0) - .setMotorType(type); + builder.setCaseInfo(mi.getCase_info()); + builder.setPropellantInfo(mi.getProp_info()); + builder.setDiameter(mi.getDiameter() / 1000.0); + builder.setLength(mi.getLength() / 1000.0); + builder.setMotorType(type); if ("OOP".equals(mi.getAvailiability())) { builder.setDesignation(mi.getDesignation()); @@ -183,9 +182,9 @@ public class SerializeThrustcurveMotors { String fileName = f.getU(); InputStream is = f.getV(); - List motors = loader.load(is, fileName); + List motors = loader.load(is, fileName); - for (Builder builder : motors) { + for (ThrustCurveMotor.Builder builder : motors) { allMotors.add(builder.build()); } } diff --git a/core/src/net/sf/openrocket/util/TestRockets.java b/core/src/net/sf/openrocket/util/TestRockets.java index e859efff0..8ef2316e2 100644 --- a/core/src/net/sf/openrocket/util/TestRockets.java +++ b/core/src/net/sf/openrocket/util/TestRockets.java @@ -88,97 +88,127 @@ public class TestRockets { // Minimal motor without any useful numbers data private static ThrustCurveMotor getTestMotor() { - return new ThrustCurveMotor( - Manufacturer.getManufacturer("A"), - "F12X", "Desc", Motor.Type.UNKNOWN, new double[] {}, - 0.024, 0.07, new double[] { 0, 1, 2 }, new double[] { 0, 1, 0 }, - new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }, "digestA"); + return new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("A")) + .setDesignation("F12X") + .setDescription("Desc") + .setMotorType(Motor.Type.UNKNOWN) + .setStandardDelays(new double[] {}) + .setDiameter(0.024) + .setLength(0.07) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 1, 0 }) + .setCGPoints(new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }) + .setDigest("digestA") + .build(); } // This function is used for unit, integration tests, DO NOT CHANGE (without updating tests). private static Motor generateMotor_A8_18mm(){ - // public ThrustCurveMotor(Manufacturer manufacturer, String designation, String description, - // Motor.Type type, double[] delays, double diameter, double length, - // double[] time, double[] thrust, - // Coordinate[] cg, String digest); - return new ThrustCurveMotor( - Manufacturer.getManufacturer("Estes"),"A8", " SU Black Powder", - Motor.Type.SINGLE, new double[] {0,3,5}, 0.018, 0.070, - new double[] { 0, 1, 2 }, new double[] { 0, 9, 0 }, - new Coordinate[] { - new Coordinate(0.035, 0, 0, 0.0164),new Coordinate(.035, 0, 0, 0.0145),new Coordinate(.035, 0, 0, 0.0131)}, - "digest A8 test"); + return new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("Estes")) + .setDesignation("A8") + .setDescription(" SU Black Powder") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] {0,3,5}) + .setDiameter(0.018) + .setLength(0.070) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 9, 0 }) + .setCGPoints(new Coordinate[] { + new Coordinate(0.035, 0, 0, 0.0164),new Coordinate(.035, 0, 0, 0.0145),new Coordinate(.035, 0, 0, 0.0131)}) + .setDigest("digest A8 test") + .build(); } // This function is used for unit, integration tests, DO NOT CHANGE (without updating tests). private static Motor generateMotor_B4_18mm(){ - // public ThrustCurveMotor(Manufacturer manufacturer, String designation, String description, - // Motor.Type type, double[] delays, double diameter, double length, - // double[] time, double[] thrust, - // Coordinate[] cg, String digest); - return new ThrustCurveMotor( - Manufacturer.getManufacturer("Estes"),"B4", " SU Black Powder", - Motor.Type.SINGLE, new double[] {0,3,5}, 0.018, 0.070, - new double[] { 0, 1, 2 }, new double[] { 0, 11.4, 0 }, - new Coordinate[] { - new Coordinate(0.035, 0, 0, 0.0195),new Coordinate(.035, 0, 0, 0.0155),new Coordinate(.035, 0, 0, 0.013)}, - "digest B4 test"); + return new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("Estes")) + .setDesignation("B4") + .setDescription(" SU Black Powder") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] {0,3,5}) + .setDiameter(0.018) + .setLength(0.070) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 11.4, 0 }) + .setCGPoints(new Coordinate[] { + new Coordinate(0.035, 0, 0, 0.0195),new Coordinate(.035, 0, 0, 0.0155),new Coordinate(.035, 0, 0, 0.013)}) + .setDigest("digest B4 test") + .build(); } // This function is used for unit, integration tests, DO NOT CHANGE (without updating tests). private static Motor generateMotor_C6_18mm(){ - // public ThrustCurveMotor(Manufacturer manufacturer, String designation, String description, - // Motor.Type type, double[] delays, double diameter, double length, - // double[] time, double[] thrust, - // Coordinate[] cg, String digest); - return new ThrustCurveMotor( - Manufacturer.getManufacturer("Estes"),"C6", " SU Black Powder", - Motor.Type.SINGLE, new double[] {0,3,5,7}, 0.018, 0.070, - new double[] { 0, 1, 2 }, new double[] { 0, 6, 0 }, - new Coordinate[] { - new Coordinate(0.035, 0, 0, 0.0227),new Coordinate(.035, 0, 0, 0.0165),new Coordinate(.035, 0, 0, 0.012)}, - "digest C6 test"); + return new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("Estes")) + .setDesignation("C6") + .setDescription(" SU Black Powder") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] {0,3,5,7}) + .setDiameter(0.018) + .setLength(0.070) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 6, 0 }) + .setCGPoints(new Coordinate[] { + new Coordinate(0.035, 0, 0, 0.0227),new Coordinate(.035, 0, 0, 0.0165),new Coordinate(.035, 0, 0, 0.012)}) + .setDigest("digest C6 test") + .build(); } // This function is used for unit, integration tests, DO NOT CHANGE (without updating tests). private static Motor generateMotor_D21_18mm(){ - return new ThrustCurveMotor( - Manufacturer.getManufacturer("AeroTech"),"D21", "Desc", - Motor.Type.SINGLE, new double[] {}, 0.018, 0.07, - new double[] { 0, 1, 2 }, new double[] { 0, 32, 0 }, - new Coordinate[] { - new Coordinate(.035, 0, 0, 0.025),new Coordinate(.035, 0, 0, .020),new Coordinate(.035, 0, 0, 0.0154)}, - "digest D21 test"); + return new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("AeroTech")) + .setDesignation("D21") + .setDescription("Desc") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] {}) + .setDiameter(0.018) + .setLength(0.070) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 32, 0 }) + .setCGPoints(new Coordinate[] { + new Coordinate(.035, 0, 0, 0.025),new Coordinate(.035, 0, 0, .020),new Coordinate(.035, 0, 0, 0.0154)}) + .setDigest("digest D21 test") + .build(); } // This function is used for unit, integration tests, DO NOT CHANGE (without updating tests). private static Motor generateMotor_M1350_75mm(){ - // public ThrustCurveMotor(Manufacturer manufacturer, String designation, String description, - // Motor.Type type, double[] delays, double diameter, double length, - // double[] time, double[] thrust, - // Coordinate[] cg, String digest); - return new ThrustCurveMotor( - Manufacturer.getManufacturer("AeroTech"),"M1350", "Desc", - Motor.Type.SINGLE, new double[] {}, 0.075, 0.622, - new double[] { 0, 1, 2 }, new double[] { 0, 1357, 0 }, - new Coordinate[] { - new Coordinate(.311, 0, 0, 4.808),new Coordinate(.311, 0, 0, 3.389),new Coordinate(.311, 0, 0, 1.970)}, - "digest M1350 test"); + return new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("AeroTech")) + .setDesignation("M1350") + .setDescription("Desc") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] {}) + .setDiameter(0.075) + .setLength(0.622) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 1357, 0 }) + .setCGPoints(new Coordinate[] { + new Coordinate(.311, 0, 0, 4.808),new Coordinate(.311, 0, 0, 3.389),new Coordinate(.311, 0, 0, 1.970)}) + .setDigest("digest M1350 test") + .build(); } // This function is used for unit, integration tests, DO NOT CHANGE (without updating tests). private static Motor generateMotor_G77_29mm(){ - // public ThrustCurveMotor(Manufacturer manufacturer, String designation, String description, - // Motor.Type type, double[] delays, double diameter, double length, - // double[] time, double[] thrust, - // Coordinate[] cg, String digest); - return new ThrustCurveMotor( - Manufacturer.getManufacturer("AeroTech"),"G77", "Desc", - Motor.Type.SINGLE, new double[] {4,7,10},0.029, 0.124, - new double[] { 0, 1, 2 }, new double[] { 0, 1, 0 }, - new Coordinate[] { - new Coordinate(.062, 0, 0, 0.123),new Coordinate(.062, 0, 0, .0935),new Coordinate(.062, 0, 0, 0.064)}, - "digest G77 test"); + return new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("AeroTech")) + .setDesignation("G77") + .setDescription("Desc") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] {4,7,10}) + .setDiameter(0.029) + .setLength(0.124) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 1, 0 }) + .setCGPoints(new Coordinate[] { + new Coordinate(.062, 0, 0, 0.123),new Coordinate(.062, 0, 0, .0935),new Coordinate(.062, 0, 0, 0.064)}) + .setDigest("digest G77 test") + .build(); } // diff --git a/core/src/net/sf/openrocket/utils/MotorCorrelation.java b/core/src/net/sf/openrocket/utils/MotorCorrelation.java index 009a6d45b..227ee7579 100644 --- a/core/src/net/sf/openrocket/utils/MotorCorrelation.java +++ b/core/src/net/sf/openrocket/utils/MotorCorrelation.java @@ -1,13 +1,5 @@ package net.sf.openrocket.utils; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -import net.sf.openrocket.file.motor.GeneralMotorLoader; -import net.sf.openrocket.file.motor.MotorLoader; import net.sf.openrocket.motor.Motor; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.MathUtil; @@ -85,47 +77,4 @@ public class MotorCorrelation { return cross / auto; } - - - - public static void main(String[] args) { - - MotorLoader loader = new GeneralMotorLoader(); - List motors = new ArrayList(); - List files = new ArrayList(); - - // Load files - for (String file : args) { - List m = null; - try { - InputStream stream = new FileInputStream(file); - m = loader.load(stream, file); - stream.close(); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - if (m != null) { - motors.addAll(m); - for (int i = 0; i < m.size(); i++) - files.add(file); - } - } - - // Output motor digests - final int count = motors.size(); - for (int i = 0; i < count; i++) { - System.out.println(files.get(i) + ": " + ((Motor) motors.get(i)).getDigest()); - } - - // Cross-correlate every pair - for (int i = 0; i < count; i++) { - for (int j = i + 1; j < count; j++) { - System.out.println(files.get(i) + " " + files.get(j) + " : " + - crossCorrelation(motors.get(i), motors.get(j))); - } - } - - } - } \ No newline at end of file diff --git a/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java b/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java index 6198c45a5..bd17f6b70 100644 --- a/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java +++ b/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java @@ -20,29 +20,61 @@ import org.junit.Test; public class ThrustCurveMotorSetTest { - private static final ThrustCurveMotor motor1 = new ThrustCurveMotor( - Manufacturer.getManufacturer("A"), - "F12X", "Desc", Motor.Type.UNKNOWN, new double[] {}, - 0.024, 0.07, new double[] { 0, 1, 2 }, new double[] { 0, 1, 0 }, - new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }, "digestA"); + private static final ThrustCurveMotor motor1 = new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("A")) + .setDesignation("F12X") + .setDescription("Desc") + .setMotorType(Motor.Type.UNKNOWN) + .setStandardDelays(new double[] {}) + .setDiameter(0.024) + .setLength(0.07) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 1, 0 }) + .setCGPoints(new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }) + .setDigest("digestA") + .build(); - private static final ThrustCurveMotor motor2 = new ThrustCurveMotor( - Manufacturer.getManufacturer("A"), - "F12H", "Desc", Motor.Type.SINGLE, new double[] { 5 }, - 0.024, 0.07, new double[] { 0, 1, 2 }, new double[] { 0, 1, 0 }, - new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }, "digestB"); + private static final ThrustCurveMotor motor2 = new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("A")) + .setDesignation("F12H") + .setDescription("Desc") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] { 5 }) + .setDiameter(0.024) + .setLength(0.07) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 1, 0 }) + .setCGPoints(new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }) + .setDigest("digestB") + .build(); - private static final ThrustCurveMotor motor3 = new ThrustCurveMotor( - Manufacturer.getManufacturer("A"), - "F12", "Desc", Motor.Type.UNKNOWN, new double[] { 0, Motor.PLUGGED_DELAY }, - 0.024, 0.07, new double[] { 0, 1, 2 }, new double[] { 0, 2, 0 }, - new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }, "digestC"); + private static final ThrustCurveMotor motor3 = new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("A")) + .setDesignation("F12") + .setDescription("Desc") + .setMotorType(Motor.Type.UNKNOWN) + .setStandardDelays(new double[] { 0, Motor.PLUGGED_DELAY }) + .setDiameter(0.024) + .setLength(0.07) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 2, 0 }) + .setCGPoints(new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }) + .setDigest("digestC") + .build(); - private static final ThrustCurveMotor motor4 = new ThrustCurveMotor( - Manufacturer.getManufacturer("A"), - "F12", "Desc", Motor.Type.HYBRID, new double[] { 0 }, - 0.024, 0.07, new double[] { 0, 1, 2 }, new double[] { 0, 2, 0 }, - new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }, "digestD"); + private static final ThrustCurveMotor motor4 = new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("A")) + .setDesignation("F12") + .setDesignation("Desc") + .setMotorType(Motor.Type.HYBRID) + .setStandardDelays(new double[] { 0 }) + .setDiameter(0.024) + .setLength(0.07) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 2, 0 }) + .setCGPoints(new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }) + .setDigest("digestD") + .build(); @Test diff --git a/core/test/net/sf/openrocket/file/motor/TestMotorLoader.java b/core/test/net/sf/openrocket/file/motor/TestMotorLoader.java index 8d1cc719a..3a603fc7e 100644 --- a/core/test/net/sf/openrocket/file/motor/TestMotorLoader.java +++ b/core/test/net/sf/openrocket/file/motor/TestMotorLoader.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.List; import net.sf.openrocket.motor.Motor; +import net.sf.openrocket.motor.ThrustCurveMotor; import org.junit.Test; @@ -52,7 +53,7 @@ public class TestMotorLoader { private void test(MotorLoader loader, String file, String... digests) throws IOException { - List motors; + List motors; InputStream is = this.getClass().getResourceAsStream(file); assertNotNull("File " + file + " not found", is); @@ -62,7 +63,7 @@ public class TestMotorLoader { String[] d = new String[digests.length]; for (int i = 0; i < motors.size(); i++) { - d[i] = ((Motor) motors.get(i)).getDigest(); + d[i] = motors.get(i).build().getDigest(); } Arrays.sort(digests); diff --git a/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java b/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java index 362d2c8a1..b1e2695aa 100644 --- a/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java +++ b/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java @@ -284,8 +284,8 @@ public class OpenRocketSaverTest { InputStream is = OpenRocketSaverTest.class.getResourceAsStream("/net/sf/openrocket/Estes_A8.rse"); assertNotNull("Problem in unit test, cannot find Estes_A8.rse", is); try { - for (Motor m : loader.load(is, "Estes_A8.rse")) { - return (ThrustCurveMotor) m; + for (ThrustCurveMotor.Builder m : loader.load(is, "Estes_A8.rse")) { + return m.build(); } is.close(); } catch (IOException e) { @@ -311,11 +311,19 @@ public class OpenRocketSaverTest { public MotorDbProvider() { db.addMotor(readMotor()); - db.addMotor( new ThrustCurveMotor( - Manufacturer.getManufacturer("A"), - "F12X", "Desc", Motor.Type.UNKNOWN, new double[] {}, - 0.024, 0.07, new double[] { 0, 1, 2 }, new double[] { 0, 1, 0 }, - new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }, "digestA")); + db.addMotor( new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("A")) + .setDesignation("F12X") + .setDescription("Desc") + .setMotorType(Motor.Type.UNKNOWN) + .setStandardDelays(new double[] {}) + .setDiameter(0.024) + .setLength(0.07) + .setTimePoints(new double[] { 0, 1, 2 }) + .setThrustPoints(new double[] { 0, 1, 0 }) + .setCGPoints(new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }) + .setDigest("digestA") + .build()); assertEquals(2, db.getMotorSets().size()); } diff --git a/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java b/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java index f6ccbe773..f2c93cfb4 100644 --- a/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java +++ b/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java @@ -16,49 +16,58 @@ public class ThrustCurveMotorTest { private final double radius = 0.025; private final double length = 0.10; - private final ThrustCurveMotor motorX6 = - new ThrustCurveMotor(Manufacturer.getManufacturer("foo"), - "X6", "Description of X6", Motor.Type.RELOAD, - new double[] {0, 2, Motor.PLUGGED_DELAY}, radius*2, length, - new double[] {0, 1, 3, 4}, // time - new double[] {0, 2, 3, 0}, // thrust - new Coordinate[] { + private final ThrustCurveMotor motorX6 = new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("foo")) + .setDesignation("X6") + .setDescription("Description of X6") + .setMotorType(Motor.Type.RELOAD) + .setStandardDelays(new double[] {0, 2, Motor.PLUGGED_DELAY}) + .setDiameter(radius*2) + .setLength(length) + .setTimePoints(new double[] {0, 1, 3, 4}) + .setThrustPoints(new double[] {0, 2, 3, 0}) + .setCGPoints(new Coordinate[] { new Coordinate(0.02,0,0,0.05), new Coordinate(0.02,0,0,0.05), new Coordinate(0.02,0,0,0.05), - new Coordinate(0.03,0,0,0.03) - }, "digestA"); + new Coordinate(0.03,0,0,0.03)}) + .setDigest("digestA") + .build(); private final double radiusA8 = 0.018; private final double lengthA8 = 0.10; - private final ThrustCurveMotor motorEstesA8_3 = - new ThrustCurveMotor(Manufacturer.getManufacturer("Estes"), - "A8-3", "A8 Test Motor", Motor.Type.SINGLE, - new double[] {0, 2, Motor.PLUGGED_DELAY}, radiusA8*2, lengthA8, - - new double[] { // time (sec) + private final ThrustCurveMotor motorEstesA8_3 = new ThrustCurveMotor.Builder() + .setManufacturer(Manufacturer.getManufacturer("Estes")) + .setDesignation("A8-3") + .setDescription("A8 Test Motor") + .setMotorType(Motor.Type.SINGLE) + .setStandardDelays(new double[] {0, 2, Motor.PLUGGED_DELAY}) + .setDiameter(radiusA8*2) + .setLength(lengthA8) + .setTimePoints(new double[] { 0, 0.041, 0.084, 0.127, 0.166, 0.192, 0.206, 0.226, 0.236, 0.247, 0.261, 0.277, 0.306, 0.351, 0.405, 0.467, 0.532, 0.589, 0.632, 0.652, - 0.668, 0.684, 0.703, 0.73}, - new double[] { // thrust (N) + 0.668, 0.684, 0.703, 0.73}) + .setThrustPoints(new double[] { 0, 0.512, 2.115, 4.358, 6.794, 8.588, 9.294, 9.73, 8.845, 7.179, 5.063, 3.717, 3.205, 2.884, 2.499, 2.371, 2.307, 2.371, 2.371, 2.243, - 1.794, 1.153, 0.448, 0}, - new Coordinate[] { /// ( m, m, m, kg) + 1.794, 1.153, 0.448, 0}) + .setCGPoints(new Coordinate[] { new Coordinate(0.0350, 0, 0, 0.016350),new Coordinate(0.0352, 0, 0, 0.016335),new Coordinate(0.0354, 0, 0, 0.016255),new Coordinate(0.0356, 0, 0, 0.016057), new Coordinate(0.0358, 0, 0, 0.015748),new Coordinate(0.0360, 0, 0, 0.015463),new Coordinate(0.0362, 0, 0, 0.015285),new Coordinate(0.0364, 0, 0, 0.015014), new Coordinate(0.0366, 0, 0, 0.014882),new Coordinate(0.0368, 0, 0, 0.014757),new Coordinate(0.0370, 0, 0, 0.014635),new Coordinate(0.0372, 0, 0, 0.014535), new Coordinate(0.0374, 0, 0, 0.014393),new Coordinate(0.0376, 0, 0, 0.014198),new Coordinate(0.0378, 0, 0, 0.013991),new Coordinate(0.0380, 0, 0, 0.013776), new Coordinate(0.0382, 0, 0, 0.013560),new Coordinate(0.0384, 0, 0, 0.013370),new Coordinate(0.0386, 0, 0, 0.013225),new Coordinate(0.0388, 0, 0, 0.013160), - new Coordinate(0.0390, 0, 0, 0.013114),new Coordinate(0.0392, 0, 0, 0.013080),new Coordinate(0.0394, 0, 0, 0.013059),new Coordinate(0.0396, 0, 0, 0.013050) - }, "digestA8-3"); + new Coordinate(0.0390, 0, 0, 0.013114),new Coordinate(0.0392, 0, 0, 0.013080),new Coordinate(0.0394, 0, 0, 0.013059),new Coordinate(0.0396, 0, 0, 0.013050)}) + .setDigest("digestA8-3") + .build(); @Test diff --git a/core/test/net/sf/openrocket/thrustcurve/SampleSearchResponse.xml b/core/test/net/sf/openrocket/thrustcurve/SampleSearchResponse.xml new file mode 100644 index 000000000..5fe7b95ff --- /dev/null +++ b/core/test/net/sf/openrocket/thrustcurve/SampleSearchResponse.xml @@ -0,0 +1,6387 @@ + + + + + manufacturer + AeroTech + 252 + + 252 + + + + 1036 + AeroTech + AeroTech + C3.4T + C3.4 + C3 + C + 18.0 + 72.0 + reload + National Association of Rocketry + 3.14 + 9.08 + 8.96 + 2.86 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1036 + 23.9 + 5.2 + P + RMS-R/C-18/70 + Blue Thunder + 2014-07-22 + regular + + + 739 + AeroTech + AeroTech + D10W + D10 + D10 + D + 18.0 + 70.0 + SU + National Association of Rocketry + 13.39 + 25.13 + 18.75 + 1.4 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=739 + 25.9 + 9.8 + 3,5,7 + White Lightning + 2014-07-22 + regular + + + 33 + AeroTech + AeroTech + D13W + D13 + D13 + D + 18.0 + 70.0 + reload + National Association of Rocketry + 12.67 + 23.61 + 19.26 + 1.52 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=33 + 9.8 + 4,7,10 + RMS-R/C-18/70 + White Lightning + 2014-07-22 + regular + + + 34 + AeroTech + AeroTech + D15T + D15 + D15 + D + 24.0 + 70.0 + reload + National Association of Rocketry + 16.49 + 31.36 + 18.96 + 1.15 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=34 + 8.9 + 4,7 + RMS-24/40 + Blue Thunder + 2014-07-22 + regular + + + 1037 + AeroTech + AeroTech + D2.3T + D2.3 + D2 + D + 18.0 + 72.0 + reload + National Association of Rocketry + 2.12 + 10.14 + 17.21 + 8.14 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1037 + 29.3 + 10.7 + P + RMS-R/C-18/70 + Blue Thunder + 2014-07-22 + regular + + + 35 + AeroTech + AeroTech + D21T + D21 + D21 + D + 18.0 + 70.0 + SU + National Association of Rocketry + 20.84 + 32.12 + 19.59 + 0.94 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=35 + 9.6 + 4,7 + Blue Thunder + 2014-07-22 + regular + + + 36 + AeroTech + AeroTech + D24T + D24 + D24 + D + 18.0 + 70.0 + reload + National Association of Rocketry + 14.77 + 25.52 + 18.02 + 1.22 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=36 + 32.0 + 8.7 + 4,7,10 + RMS-R/C-18/70 + Blue Thunder + 2014-07-22 + regular + + + 28 + AeroTech + AeroTech + D7-RCT + D7 + D7 + D + 24.0 + 70.0 + reload + National Association of Rocketry + 6.46 + 10.99 + 18.53 + 2.87 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=28 + 10.5 + RMS-R/C-24/20-40 + Blue Thunder + 2014-07-22 + regular + + + 29 + AeroTech + AeroTech + D9W + D9 + D9 + D + 24.0 + 70.0 + reload + National Association of Rocketry + 9.98 + 20.0 + 18.76 + 1.88 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=29 + 10.1 + 4,7 + RMS-24/40 + White Lightning + 2014-07-22 + regular + + + 505 + AeroTech + AeroTech + E11J + E11J + E11 + E + 24.0 + 70.0 + reload + National Association of Rocketry + 11.5689045936396 + 19.85 + 32.74 + 2.83 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=505 + 62.4 + 25.0 + 3 + RMS-24/40 + Blackjack + 2014-07-22 + regular + + + 44 + AeroTech + AeroTech + E12-RCJ + E12J + E12 + E + 24.0 + 70.0 + reload + National Association of Rocketry + 11.22 + 18.33 + 34.22 + 3.05 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=44 + 30.3 + RMS-R/C-24/20-40 + Blackjack + 2014-07-22 + regular + + + 45 + AeroTech + AeroTech + E15W + E15 + E15 + E + 24.0 + 70.0 + SU + National Association of Rocketry + 15.0 + 40.0 + 2.66666666666667 + 3 + http://www.thrustcurve.org/motorsearch.jsp?id=45 + 20.1 + 4,7,P + White Lightning + 2014-07-22 + regular + + + 48 + AeroTech + AeroTech + E16W + E16 + E16 + E + 29.0 + 124.0 + reload + National Association of Rocketry + 18.84 + 37.2 + 37.67 + 2.0 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=48 + 19.0 + 4,7 + RMS-29/40 + White Lightning + 2014-07-22 + regular + + + 49 + AeroTech + AeroTech + E18W + E18 + E18 + E + 24.0 + 70.0 + reload + National Association of Rocketry + 17.07 + 30.08 + 36.54 + 2.14 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=49 + 20.7 + 4,7 + RMS-24/40 + White Lightning + 2014-07-22 + regular + + + 782 + AeroTech + AeroTech + E20W + E20W + E20 + E + 24.0 + 70.0 + SU + National Association of Rocketry + 21.8 + 34.9 + 35.0 + 1.6 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=782 + 49.0 + 16.2 + 4,7 + White Lightning + 2014-07-22 + regular + + + 50 + AeroTech + AeroTech + E23T + E23 + E23 + E + 29.0 + 124.0 + reload + National Association of Rocketry + 22.5 + 38.22 + 35.32 + 1.57 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=50 + 17.4 + 5,8 + RMS-29/40 + Blue Thunder + 2014-07-22 + regular + + + 51 + AeroTech + AeroTech + E28T + E28 + E28 + E + 24.0 + 70.0 + reload + National Association of Rocketry + 32.53 + 50.52 + 39.69 + 1.22 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=51 + 18.4 + 4,7 + RMS-24/40 + Blue Thunder + 2014-07-22 + regular + + + 52 + AeroTech + AeroTech + E30T + E30 + E30 + E + 24.0 + 70.0 + SU + National Association of Rocketry + 32.38 + 48.27 + 39.51 + 1.22 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=52 + 19.3 + 4,7 + Blue Thunder + 2014-07-22 + regular + + + 37 + AeroTech + AeroTech + E6 + E6 + E6 + E + 24.0 + 70.0 + SU + National Association of Rocketry + 6.0 + 40.0 + 6.66666666666667 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=37 + 21.5 + 4,6,8,P + RMS 24/20-40 R/C + Blackjack + 2014-07-31 + OOP + + + 38 + AeroTech + AeroTech + E6-RCT + E6-RC + E6 + E + 24.0 + 70.0 + reload + National Association of Rocketry + 5.27 + 11.9 + 37.5 + 7.12 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=38 + 50.0 + 21.5 + RMS-R/C-24/20-40 + Blue Thunder + 2014-07-22 + regular + + + 39 + AeroTech + AeroTech + E7-RCT + E7 + E7 + E + 24.0 + 70.0 + reload + National Association of Rocketry + 5.41 + 11.58 + 29.35 + 5.43 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=39 + 17.1 + RMS-R/C-24/20-40 + Blue Thunder + 2014-07-22 + regular + + + 53 + AeroTech + AeroTech + F10 + F10 + F10 + F + 29.0 + 85.0 + SU + National Association of Rocketry + 10.71 + 28.22 + 76.33 + 7.13 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=53 + 40.7 + 4,6,8 + SU 29x85 + 2014-07-22 + OOP + + + 54 + AeroTech + AeroTech + F12J + F12 + F12 + F + 24.0 + 70.0 + reload + National Association of Rocketry + 14.74 + 23.54 + 43.2 + 2.93 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=54 + 30.3 + 3,5 + RMS-24/40 + Blackjack + 2014-07-22 + regular + + + 55 + AeroTech + AeroTech + F13-RCT + F13-RC + F13 + F + 32.0 + 107.0 + reload + National Association of Rocketry + 12.17 + 19.98 + 62.07 + 5.1 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=55 + 32.3 + RMS-R/C-32/60-100 + Blue Thunder + 2014-07-22 + regular + + + 56 + AeroTech + AeroTech + F16-RCJ + F16-RC + F16 + F + 32.0 + 107.0 + reload + National Association of Rocketry + 13.27 + 26.35 + 75.48 + 5.69 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=56 + 62.5 + RMS-R/C-32/60-100 + Blackjack + 2014-07-22 + regular + + + 57 + AeroTech + AeroTech + F20W/L + F20 + F20 + F + 29.0 + 83.0 + SU + National Association of Rocketry + 20.8 + 40.33 + 51.75 + 2.49 + 3 + http://www.thrustcurve.org/motorsearch.jsp?id=57 + 80.2 + 30.0 + 4,7 + White Lightning + 2014-09-23 + regular + + + 58 + AeroTech + AeroTech + F21W + F21W + F21 + F + 24.0 + 95.0 + SU + Tripoli Rocketry Association, Inc. + 21.0 + 42.0 + 55.0 + 2.5 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=58 + 64.0 + 30.0 + 4,6,8 + SU 24x95 + White Lightning + 2014-07-22 + OOP + + + 59 + AeroTech + AeroTech + F22J + F22 + F22 + F + 29.0 + 124.0 + reload + National Association of Rocketry + 19.64 + 31.15 + 65.0 + 3.31 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=59 + 46.3 + 5,7 + RMS-29/40 + Blackjack + 2014-07-22 + regular + + + 61 + AeroTech + AeroTech + F23-RCW-SK + F23-RC-SK + F23 + F + 32.0 + 107.0 + reload + National Association of Rocketry + 23.0 + 70.0 + 3.47 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=61 + 37.8 + RMS-R/C-32/60-100 + White Lightning + 2014-07-22 + regular + + + 60 + AeroTech + AeroTech + F23FJ/L + F23FJ + F23 + F + 29.0 + 83.0 + SU + National Association of Rocketry + 18.58 + 29.8 + 41.2 + 2.21 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=60 + 82.3 + 30.0 + 4,7 + Fast Blackjack + 2014-07-22 + regular + + + 63 + AeroTech + AeroTech + F24W + F24 + F24 + F + 24.0 + 70.0 + reload + National Association of Rocketry + 22.21 + 40.95 + 47.31 + 2.13 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=63 + 19.0 + 4,7 + RMS-24/40 + White Lightning + 2014-07-22 + regular + + + 64 + AeroTech + AeroTech + F25W + F25W + F25 + F + 29.0 + 98.0 + SU + National Association of Rocketry + 25.55 + 46.79 + 77.92 + 3.05 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=64 + 35.6 + 4,6,9 + White Lightning + 2014-07-22 + regular + + + 65 + AeroTech + AeroTech + F26FJ + F26FJ + F26 + F + 29.0 + 98.0 + SU + National Association of Rocketry + 26.0 + 62.2 + 2.39230769230769 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=65 + 43.1 + 6,9 + Fast Blackjack + 2014-07-22 + regular + + + 468 + AeroTech + AeroTech + F27R/L + F27R + F27 + F + 29.0 + 83.0 + SU + National Association of Rocketry + 24.4 + 37.7 + 49.6 + 2.03 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=468 + 28.4 + 4,8 + Redline + 2014-07-22 + regular + + + 944 + AeroTech + AeroTech + F30FJ + F30FJ + F30 + F + 24.0 + 95.0 + SU + National Association of Rocketry + 30.4 + 40.6 + 47.0 + 1.54605263157895 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=944 + 31.2 + 4,6,8 + Fast Blackjack + 2014-07-22 + regular + + + 593 + AeroTech + AeroTech + F32T + F32T + F32 + F + 24.0 + 95.0 + SU + National Association of Rocketry + 34.1 + 61.3 + 56.9 + 1.659 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=593 + 64.0 + 31.0 + 4,6,8 + Blue Thunder + 2014-07-22 + regular + + + 66 + AeroTech + AeroTech + F32W + F32W + F32 + F + 24.0 + 95.0 + SU + National Association of Rocketry + 29.12 + 55.64 + 79.2 + 2.72 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=66 + 37.7 + 5,10,15 + SU 24x95 + White Lightning + 2014-07-22 + OOP + + + 559 + AeroTech + AeroTech + F35W + F35W + F35 + F + 24.0 + 95.0 + reload + National Association of Rocketry + 34.9 + 55.2 + 57.1 + 1.63 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=559 + 85.0 + 30.0 + 5,8,11 + RMS-24/60 + White Lightning + 2014-07-22 + regular + + + 69 + AeroTech + AeroTech + F37W + F37 + F37 + F + 29.0 + 99.0 + reload + National Association of Rocketry + 31.67 + 46.47 + 50.67 + 1.6 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=69 + 28.2 + M + RMS-29/60 + White Lightning + 2014-07-22 + regular + + + 70 + AeroTech + AeroTech + F39T + F39 + F39 + F + 24.0 + 70.0 + reload + National Association of Rocketry + 37.34 + 59.47 + 49.66 + 1.33 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=70 + 22.7 + 6,9 + RMS-24/40 + Blue Thunder + 2014-07-22 + regular + + + 71 + AeroTech + AeroTech + F40W + F40 + F40 + F + 29.0 + 124.0 + reload + National Association of Rocketry + 37.91 + 68.07 + 78.09 + 2.06 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=71 + 40.0 + 4,7,10 + RMS-29/40 + White Lightning + 2014-07-22 + regular + + + 72 + AeroTech + AeroTech + F42T/L + F42T + F42 + F + 29.0 + 83.0 + SU + National Association of Rocketry + 42.0 + 52.9 + 1.25952380952381 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=72 + 27.0 + 4,8 + Blue Thunder + 2014-07-22 + regular + + + 1023 + AeroTech + AeroTech + F44W + AT + F44 + F + 24.0 + 70.0 + SU + National Association of Rocketry + 44.0 + 50.0 + 41.5 + 1.0 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1023 + 48.0 + 19.7 + 4,8 + White Lightning + 2014-07-22 + regular + + + 73 + AeroTech + AeroTech + F50T + F50 + F50 + F + 29.0 + 98.0 + SU + National Association of Rocketry + 53.73 + 79.59 + 76.83 + 1.43 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=73 + 37.9 + 4,6,9 + Blue Thunder + 2014-07-22 + regular + + + 75 + AeroTech + AeroTech + F52T + F52 + F52 + F + 29.0 + 124.0 + reload + National Association of Rocketry + 51.37 + 78.95 + 72.95 + 1.42 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=75 + 36.6 + 5,8,11 + RMS-29/40 + Blue Thunder + 2014-07-22 + regular + + + 77 + AeroTech + AeroTech + F62T + F62T + F62 + F + 29.0 + 89.0 + reload + Tripoli Rocketry Association, Inc. + 62.0 + 56.5 + 51.0 + 1.13 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=77 + 109.0 + 30.5 + M + RMS-29/60 + Blue Thunder + 2014-07-22 + regular + + + 78 + AeroTech + AeroTech + F72 + F72 + F72 + F + 24.0 + 124.0 + SU + National Association of Rocketry + 61.92 + 98.78 + 74.92 + 1.21 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=78 + 36.8 + 5,10,15 + SU 24x124 + 2014-07-22 + OOP + + + 108 + AeroTech + AeroTech + G101T + G101T + G101 + G + 29.0 + 125.0 + reload + Tripoli Rocketry Association, Inc. + 101.0 + 102.3 + 85.0 + 1.0 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=108 + 46.0 + S,M,L + RMS-29/100 + Blue Thunder + 2016-01-17 + OOP + + + 109 + AeroTech + AeroTech + G104T + G104T + G104 + G + 29.0 + 125.0 + reload + Tripoli Rocketry Association, Inc. + 104.0 + 113.8 + 81.5 + 1.0 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=109 + 136.0 + 43.9 + M + RMS-29/100 + Blue Thunder + 2014-07-22 + regular + + + 80 + AeroTech + AeroTech + G12-RCT + G12-RC + G12 + G + 32.0 + 107.0 + reload + National Association of Rocketry + 10.2 + 20.64 + 87.22 + 8.55 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=80 + 51.1 + RMS-R/C-32/60-100 + Blue Thunder + 2014-07-22 + regular + + + 1017 + AeroTech + AeroTech + G125T + G125T + G125 + G + 29.0 + 124.0 + SU + Tripoli Rocketry Association, Inc. + 125.0 + 160.0 + 128.0 + 0.95 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1017 + 125.0 + 59.6 + 0-14 + Blue Thunder + 2014-07-22 + regular + + + 583 + AeroTech + AeroTech + G142T + G142 + G142 + G + 29.0 + 113.0 + SU + National Association of Rocketry + 135.9 + 173.9 + 84.3 + 0.618 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=583 + 98.0 + 44.0 + 6,10,14 + SU 29x113 + Blue Thunder + 2014-07-22 + OOP + + + 82 + AeroTech + AeroTech + G25W + G25 + G25 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 22.17 + 41.18 + 117.5 + 5.3 + 3 + http://www.thrustcurve.org/motorsearch.jsp?id=82 + 62.5 + 0-10 + RMS-29/120 + White Lightning + 2014-07-22 + regular + + + 83 + AeroTech + AeroTech + G33 + G33 + G33 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 30.09 + 50.92 + 98.39 + 3.27 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=83 + 72.2 + 5,7 + RMS-29/40-120 + 2016-01-17 + OOP + + + 459 + AeroTech + AeroTech + G339N + G339N-P + G339 + G + 38.0 + 97.0 + reload + Tripoli Rocketry Association, Inc. + 307.53 + 503.51 + 108.9 + 0.35 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=459 + 49.0 + P + RMS-38/120 + Warp-9 + 2014-07-22 + regular + + + 84 + AeroTech + AeroTech + G35 + G35 + G35 + G + 29.0 + 98.0 + SU + National Association of Rocketry + 34.65 + 76.22 + 100.82 + 2.91 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=84 + 50.0 + 4,7 + SU 29x98 + 2014-07-22 + OOP + + + 87 + AeroTech + AeroTech + G38FJ + G38FJ + G38 + G + 29.0 + 124.0 + SU + National Association of Rocketry + 40.22 + 78.19 + 87.68 + 2.18 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=87 + 55.0 + 4,7 + Fast Blackjack + 2014-07-22 + regular + + + 89 + AeroTech + AeroTech + G40W + G40W + G40 + G + 29.0 + 124.0 + SU + National Association of Rocketry + 37.17 + 66.85 + 113.74 + 3.06 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=89 + 62.4 + 4,7,10 + White Lightning + 2014-07-22 + regular + + + 482 + AeroTech + AeroTech + G53FJ + G53FJ + G53 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 53.1 + 87.3 + 90.9 + 1.71 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=482 + 146.0 + 60.0 + 5,7,10 + RMS-29/40 + Fast Blackjack + 2014-07-22 + regular + + + 90 + AeroTech + AeroTech + G54W + G54 + G54 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 53.68 + 81.64 + 81.05 + 1.51 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=90 + 46.0 + M + RMS-29/100 + White Lightning + 2014-07-22 + regular + + + 91 + AeroTech + AeroTech + G55 + G55 + G55 + G + 24.0 + 177.0 + SU + National Association of Rocketry + 49.0 + 84.65 + 119.57 + 2.44 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=91 + 62.5 + 5,10,15 + SU 24x177 + 2014-07-22 + OOP + + + 94 + AeroTech + AeroTech + G61W + G61W + G61 + G + 38.0 + 106.0 + reload + Tripoli Rocketry Association, Inc. + 61.0 + 63.2 + 110.5 + 2.04 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=94 + 194.0 + 62.3 + M + RMS-38/120 + White Lightning + 2014-07-22 + regular + + + 96 + AeroTech + AeroTech + G64W + G64 + G64 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 56.84 + 98.31 + 118.8 + 2.09 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=96 + 151.0 + 62.5 + 4,7,10 + RMS-29/40 + White Lightning + 2014-07-22 + regular + + + 97 + AeroTech + AeroTech + G67R + G67R + G67 + G + 38.0 + 106.0 + reload + Tripoli Rocketry Association, Inc. + 67.0 + 110.0 + 1.64179104477612 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=97 + 201.0 + 60.0 + M + RMS-38/120 + Redline + 2014-07-22 + regular + + + 469 + AeroTech + AeroTech + G69N + G69N + G69 + G + 38.0 + 106.0 + reload + National Association of Rocketry + 72.3 + 87.3 + 136.7 + 1.88 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=469 + 62.2 + P + RMS-38/120 + Warp-9 + 2014-07-22 + regular + + + 464 + AeroTech + AeroTech + G71R + G71R + G71 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 71.0 + 117.0 + 107.0 + 1.51 + 3 + http://www.thrustcurve.org/motorsearch.jsp?id=464 + 147.0 + 64.0 + 4, 7, 10 + RMS-29/40-120 + Redline + 2016-01-17 + OOP + + + 1024 + AeroTech + AeroTech + G74W + AT + G74 + G + 29.0 + 93.0 + SU + National Association of Rocketry + 74.0 + 95.0 + 82.75 + 1.1 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1024 + 87.0 + 39.3 + 6,8 + White Lightning + 2014-09-02 + regular + + + 100 + AeroTech + AeroTech + G75J + G75J + G75 + G + 29.0 + 194.0 + reload + Tripoli Rocketry Association, Inc. + 75.0 + 70.3 + 135.6 + 2.43 + 5 + http://www.thrustcurve.org/motorsearch.jsp?id=100 + 232.96 + 104.3 + M + RMS-29/180 + Blackjack + 2014-07-22 + regular + + + 532 + AeroTech + AeroTech + G76G + G76G + G76 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 76.0 + 196.0 + 118.0 + 1.5 + 3 + http://www.thrustcurve.org/motorsearch.jsp?id=532 + 147.0 + 60.0 + 4,7,10 + RMS-29/40 + Mojave Green + 2014-07-22 + regular + + + 101 + AeroTech + AeroTech + G77R + G77R + G77 + G + 29.0 + 150.0 + reload + Tripoli Rocketry Association, Inc. + 77.0 + 105.0 + 1.36363636363636 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=101 + 165.0 + 58.0 + M + RMS-29/120 + Redline + 2014-07-22 + regular + + + 582 + AeroTech + AeroTech + G77R/L + G77R + G77 + G + 29.0 + 124.0 + SU + National Association of Rocketry + 80.12 + 100.5 + 102.86 + 1.28 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=582 + 122.5 + 64.0 + 4,7,10 + Redline + 2014-07-22 + regular + + + 560 + AeroTech + AeroTech + G78G/L + G78G + G78 + G + 29.0 + 124.0 + SU + National Association of Rocketry + 79.9 + 101.9 + 109.94 + 1.378 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=560 + 125.0 + 59.7 + 4,7,10 + Mojave Green + 2014-07-22 + regular + + + 103 + AeroTech + AeroTech + G79W + G79W + G79 + G + 29.0 + 150.0 + reload + Tripoli Rocketry Association, Inc. + 79.0 + 100.74 + 108.56 + 1.42 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=103 + 157.0 + 62.0 + M + RMS-29/120 + White Lightning + 2014-07-22 + regular + + + 581 + AeroTech + AeroTech + G79W/L + G79W + G79 + G + 29.0 + 124.0 + SU + National Association of Rocketry + 72.6 + 93.9 + 108.3 + 1.5 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=581 + 124.0 + 65.0 + 4,7,10 + White Lightning + 2014-07-22 + regular + + + 104 + AeroTech + AeroTech + G80T + G80 + G80 + G + 29.0 + 124.0 + SU + National Association of Rocketry + 86.71 + 117.945 + 132.17 + 1.53 + 5 + http://www.thrustcurve.org/motorsearch.jsp?id=104 + 127.9 + 62.5 + 7,10,13,0-14 + Blue Thunder + 2014-07-22 + regular + + + 1088 + AeroTech + AeroTech + H100W DMS + + H100 + H + 38.0 + 153.1 + SU + Tripoli Rocketry Association, Inc. + 97.7 + 137.75 + 226.8 + 2.32 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1088 + 261.0 + 121.0 + 10 + DMS + White Lightning + 2015-08-07 + regular + + + 126 + AeroTech + AeroTech + H112J + H112J + H112 + H + 38.0 + 191.0 + reload + Tripoli Rocketry Association, Inc. + 112.0 + 121.7 + 261.1 + 2.92 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=126 + 379.456 + 191.2 + M + RMS-38/360 + Blackjack + 2014-07-22 + regular + + + 128 + AeroTech + AeroTech + H123W + H123W + H123 + H + 38.0 + 152.0 + reload + Tripoli Rocketry Association, Inc. + 123.0 + 174.2 + 223.6 + 1.76 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=128 + 275.0 + 128.7 + M + RMS-38/240 + White Lightning + 2014-07-22 + regular + + + 130 + AeroTech + AeroTech + H125W + H125W + H125 + H + 29.0 + 330.0 + SU + Tripoli Rocketry Association, Inc. + 125.0 + 307.0 + 299.4 + 2.6 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=130 + 322.56 + 187.9 + S,M,L + SU 29x330 + White Lightning + 2014-07-22 + OOP + + + 131 + AeroTech + AeroTech + H128W + H128W + H128 + H + 29.0 + 194.0 + reload + Tripoli Rocketry Association, Inc. + 128.0 + 168.7 + 172.9 + 1.27 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=131 + 206.0 + 94.2 + M + RMS-29/180 + White Lightning + 2014-07-22 + regular + + + 1090 + AeroTech + AeroTech + H130W + + H130 + H + 38.0 + 152.0 + reload + Tripoli Rocketry Association, Inc. + 130.0 + 260.0 + 210.0 + 1.65 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1090 + 237.0 + 120.0 + 6-8-10-12-14 + 28/240 + White Lightning + 2016-03-20 + regular + + + 135 + AeroTech + AeroTech + H148R + H148R + H148 + H + 38.0 + 152.0 + reload + Tripoli Rocketry Association, Inc. + 148.0 + 206.0 + 1.39189189189189 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=135 + 309.12 + 122.0 + M + RMS-38/240 + Redline + 2014-07-22 + regular + + + 138 + AeroTech + AeroTech + H165R + H165R + H165 + H + 29.0 + 194.0 + reload + Tripoli Rocketry Association, Inc. + 165.0 + 165.0 + 1.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=138 + 201.6 + 90.0 + M + RMS-29/180 + Redline + 2014-07-22 + regular + + + 903 + AeroTech + AeroTech + H170M + AT, Aerotech, ISP, RCS + H170 + H + 38.0 + 191.0 + reload + Tripoli Rocketry Association, Inc. + 166.8 + 208.0 + 319.9 + 1.91 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=903 + 330.0 + 182.5 + 0-14 + RMS-38/360 + Metalstorm + 2014-07-22 + regular + + + 965 + AeroTech + AeroTech + H178DM + H178DM-14A + H178 + H + 38.0 + 191.0 + reload + Tripoli Rocketry Association, Inc. + 162.0 + 202.0 + 283.0 + 1.74 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=965 + 324.0 + 177.0 + 0-14 + RMS-38/360 + Dark Matter + 2014-07-22 + regular + + + 139 + AeroTech + AeroTech + H180W + H180W + H180 + H + 29.0 + 238.0 + reload + Tripoli Rocketry Association, Inc. + 180.0 + 228.5 + 217.7 + 1.3 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=139 + 252.0 + 123.9 + M + RMS-29/240 + White Lightning + 2014-07-22 + regular + + + 140 + AeroTech + AeroTech + H210R + H210R + H210 + H + 29.0 + 238.0 + reload + National Association of Rocketry + 215.41 + 275.73 + 215.41 + 1.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=140 + 246.4 + 106.4 + M + RMS-29/240 + Redline + 2014-07-22 + regular + + + 142 + AeroTech + AeroTech + H220T + H220T + H220 + H + 29.0 + 238.0 + reload + National Association of Rocketry + 220.0 + 220.0 + 1.0 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=142 + 106.4 + M + RMS-29/240 + Blue Thunder + 2014-07-22 + regular + + + 144 + AeroTech + AeroTech + H238T + H238T + H238 + H + 29.0 + 194.0 + reload + Tripoli Rocketry Association, Inc. + 238.0 + 263.4 + 165.5 + 0.71 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=144 + 196.0 + 83.4 + M + RMS-29/180 + Blue Thunder + 2014-07-22 + regular + + + 145 + AeroTech + AeroTech + H242T + H242T + H242 + H + 38.0 + 152.0 + reload + Tripoli Rocketry Association, Inc. + 242.0 + 276.6 + 231.7 + 1.06 + 7 + http://www.thrustcurve.org/motorsearch.jsp?id=145 + 264.0 + 114.7 + M + RMS-38/240 + Blue Thunder + 2014-07-22 + regular + + + 483 + AeroTech + AeroTech + H250G + H250G + H250 + H + 29.0 + 238.0 + reload + Tripoli Rocketry Association, Inc. + 250.0 + 231.0 + 0.9 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=483 + 256.0 + 116.3 + M + RMS-29/240 + Mojave Green + 2014-07-22 + regular + + + 147 + AeroTech + AeroTech + H268R + H268R + H268 + H + 29.0 + 333.0 + reload + National Association of Rocketry + 268.0 + 320.0 + 1.19402985074627 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=147 + 358.4 + 166.0 + M + RMS-29/360 + Redline + 2014-07-22 + regular + + + 115 + AeroTech + AeroTech + H45W + H45W + H45 + H + 38.0 + 194.0 + SU + Tripoli Rocketry Association, Inc. + 45.0 + 102.0 + 289.0 + 6.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=115 + 294.784 + 197.4 + 10,15 + SU 38x194 + White Lightning + 2014-07-22 + OOP + + + 118 + AeroTech + AeroTech + H55W + H55W + H55 + H + 29.0 + 191.0 + SU + Tripoli Rocketry Association, Inc. + 55.0 + 113.3 + 162.3 + 2.45 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=118 + 188.16 + 99.7 + 6,10,14 + SU 29x191 + White Lightning + 2014-07-22 + OOP + + + 155 + AeroTech + AeroTech + H669N + H669N + H669 + H + 38.0 + 152.0 + reload + Tripoli Rocketry Association, Inc. + 651.4 + 961.5 + 221.0 + 0.339 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=155 + 98.0 + P + RMS-38/240 + Warp-9 + 2014-07-22 + regular + + + 121 + AeroTech + AeroTech + H70W + H70W + H70 + H + 29.0 + 229.0 + SU + Tripoli Rocketry Association, Inc. + 70.0 + 174.0 + 215.0 + 2.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=121 + 224.0 + 126.0 + 6,10,14 + SU 29x229 + White Lightning + 2014-07-22 + OOP + + + 122 + AeroTech + AeroTech + H73J + H73J + H73 + H + 38.0 + 152.0 + reload + Tripoli Rocketry Association, Inc. + 73.0 + 97.1 + 185.6 + 2.55 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=122 + 309.12 + 142.7 + M + RMS-38/240 + Blackjack + 2014-07-22 + regular + + + 124 + AeroTech + AeroTech + H97J + H97J + H97 + H + 29.0 + 238.0 + reload + Tripoli Rocketry Association, Inc. + 97.0 + 111.5 + 177.3 + 2.23 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=124 + 277.76 + 137.1 + M + RMS-29/240 + Blackjack + 2014-07-22 + regular + + + 156 + AeroTech + AeroTech + H999N + H999 + H999 + H + 38.0 + 203.0 + reload + Tripoli Rocketry Association, Inc. + 999.0 + 319.9 + 0.32022022022022 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=156 + 147.0 + P + RMS-38/360 + Warp-9 + 2014-07-22 + regular + + + 945 + AeroTech + AeroTech + HP-G138T + G138T + G138 + G + 29.0 + 124.0 + reload + National Association of Rocketry + 138.0 + 190.1 + 157.1 + 1.13840579710145 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=945 + 70.0 + 0-14 + RMS-29/40 + Blue Thunder + 2014-07-22 + regular + + + 902 + AeroTech + AeroTech + HP-G75M + Aerotech, AT, ISP + G75 + G + 29.0 + 123.9 + SU + Tripoli Rocketry Association, Inc. + 74.74 + 102.0 + 120.39 + 1.61 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=902 + 131.0 + 66.8 + 4,7,10 + Metalstorm + 2014-07-22 + regular + + + 1018 + AeroTech + AeroTech + HP-H115DM + H115DM + H115 + H + 29.0 + 203.0 + SU + Tripoli Rocketry Association, Inc. + 115.0 + 126.0 + 172.0 + 1.5 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1018 + 205.0 + 113.0 + 0-14 + Dark Matter + 2014-07-22 + regular + + + 1009 + AeroTech + AeroTech + HP-H135W + H135W + H135 + H + 29.0 + 216.0 + SU + Tripoli Rocketry Association, Inc. + 115.86 + 159.88 + 225.84 + 1.95 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1009 + 212.0 + 82.0 + 0-14 + White Lightning + 2014-07-22 + regular + + + 1029 + AeroTech + AeroTech + HP-H182R + H182R-14A + H182 + H + 29.0 + 203.0 + SU + Tripoli Rocketry Association, Inc. + 182.0 + 192.0 + 218.0 + 1.2 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1029 + 207.0 + 115.0 + 0-14 + Redline + 2014-07-22 + regular + + + 1011 + AeroTech + AeroTech + HP-H195NT + H195NT + H195 + H + 29.0 + 203.0 + SU + Tripoli Rocketry Association, Inc. + 206.676 + 247.1561 + 236.0919 + 1.14 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1011 + 197.0 + 115.0 + 0-14 + Blue Thunder + 2014-07-22 + regular + + + 1031 + AeroTech + AeroTech + HP-H45W + H45W-10A + H45 + H + 38.0 + 203.0 + SU + Tripoli Rocketry Association, Inc. + 45.0 + 87.0 + 320.0 + 6.0 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1031 + 365.0 + 180.0 + 0-10 + White Lightning + 2014-07-31 + regular + + + 1074 + AeroTech + AeroTech + HP-H550ST + + H550 + H + 38.0 + 206.0 + SU + Tripoli Rocketry Association, Inc. + 552.0 + 640.0 + 312.0 + 0.56 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1074 + 316.0 + 176.0 + 14 + 38 DMS + Super Thunder + 2014-08-02 + regular + + + 1013 + AeroTech + AeroTech + HP-I140W + I140W + I140 + I + 38.0 + 202.7 + SU + Tripoli Rocketry Association, Inc. + 140.0 + 181.0 + 336.0 + 2.4 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1013 + 356.0 + 183.0 + 0-14 + White Lightning + 2014-07-31 + regular + + + 1030 + AeroTech + AeroTech + HP-I205W + I205W-14A + I205 + I + 29.0 + 305.0 + SU + Tripoli Rocketry Association, Inc. + 205.0 + 253.0 + 345.0 + 1.7 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1030 + 315.0 + 188.0 + 0-14 + White Lightning + 2014-07-22 + regular + + + 1014 + AeroTech + AeroTech + HP-I280DM + AT + I280 + I + 38.0 + 356.4 + SU + Tripoli Rocketry Association, Inc. + 280.0 + 386.0 + 561.0 + 1.9 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1014 + 616.0 + 355.0 + 0-14 + Dark Matter + 2014-07-31 + regular + + + 1019 + AeroTech + AeroTech + HP-I500T + I500T + I500 + I + 38.0 + 356.0 + SU + Tripoli Rocketry Association, Inc. + 500.0 + 138.0 + 620.0 + 1.24 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1019 + 576.0 + 312.0 + 0-14 + Blue Thunder + 2014-07-31 + regular + + + 1033 + AeroTech + AeroTech + HP-I65W + I65W-10A + I65 + I + 54.0 + 218.0 + SU + Tripoli Rocketry Association, Inc. + 65.0 + 178.0 + 640.0 + 9.0 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1033 + 752.0 + 377.0 + 0-10 + White Lightning + 2014-07-31 + regular + + + 1015 + AeroTech + AeroTech + HP-J270W + AT + J270 + J + 38.0 + 356.4 + SU + Tripoli Rocketry Association, Inc. + 270.0 + 356.0 + 703.0 + 2.6 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1015 + 642.0 + 381.0 + 0-14 + White Lightning + 2014-07-31 + regular + + + 1032 + AeroTech + AeroTech + HP-J425R + J425R-14A + J425 + J + 38.0 + 356.0 + SU + Tripoli Rocketry Association, Inc. + 425.0 + 452.0 + 676.0 + 1.6 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1032 + 631.0 + 364.0 + 0-14 + Redline + 2014-07-31 + regular + + + 1034 + AeroTech + AeroTech + HP-K535W + K535W-14A + K535 + K + 54.0 + 358.0 + SU + Tripoli Rocketry Association, Inc. + 535.0 + 655.0 + 1434.0 + 2.8 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1034 + 1264.0 + 745.0 + 0-14 + White Lightning + 2014-07-31 + regular + + + 1035 + AeroTech + AeroTech + HP-L1000W + L1000W-18A + L1000 + L + 54.0 + 635.0 + SU + Tripoli Rocketry Association, Inc. + 1000.0 + 1261.0 + 2714.0 + 2.7 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1035 + 2194.0 + 1400.0 + 0-18 + White Lightning + 2014-07-31 + regular + + + 487 + AeroTech + AeroTech + I115W + I115W + I115 + I + 54.0 + 156.0 + reload + Tripoli Rocketry Association, Inc. + 115.0 + 412.0 + 3.58260869565217 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=487 + 545.0 + 219.0 + M + RMS-54/426 + White Lightning + 2014-07-22 + regular + + + 491 + AeroTech + AeroTech + I117FJ + I117FJ + I117 + I + 54.0 + 156.0 + reload + Tripoli Rocketry Association, Inc. + 117.0 + 361.0 + 3.1 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=491 + 566.0 + 243.0 + M + RMS-54/426 + Fast Blackjack + 2014-07-22 + regular + + + 453 + AeroTech + AeroTech + I1299N + I1299N + I1299 + I + 38.0 + 249.0 + reload + Tripoli Rocketry Association, Inc. + 1335.0 + 1851.42 + 422.95 + 0.316 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=453 + 422.0 + 192.0 + P + RMS-38/480 + Warp-9 + 2014-07-22 + regular + + + 167 + AeroTech + AeroTech + I132W + I132W + I132 + I + 38.0 + 335.0 + SU + Tripoli Rocketry Association, Inc. + 132.0 + 512.9 + 610.7 + 4.83 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=167 + 512.064 + 376.4 + M,L + SU 38x335 + White Lightning + 2014-07-22 + OOP + + + 173 + AeroTech + AeroTech + I154J + I154J + I154 + I + 38.0 + 241.0 + reload + Tripoli Rocketry Association, Inc. + 154.0 + 170.5 + 378.0 + 2.99 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=173 + 491.904 + 252.8 + M + RMS-38/480 + Blackjack + 2014-07-22 + regular + + + 177 + AeroTech + AeroTech + I161W + I161W + I161 + I + 38.0 + 191.0 + reload + Tripoli Rocketry Association, Inc. + 161.0 + 266.6 + 328.7 + 1.82 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=177 + 366.0 + 193.2 + 0-14 + RMS-38/360 + White Lightning + 2014-07-22 + regular + + + 911 + AeroTech + AeroTech + I170G + I170G + I170 + I + 54.0 + 147.1 + reload + Tripoli Rocketry Association, Inc. + 171.78 + 207.35 + 418.54 + 2.4 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=911 + 528.0 + 227.0 + 0-10 + RMS-54/426 + Mojave Green + 2014-07-22 + regular + + + 1091 + AeroTech + AeroTech + I180W + + I180 + I + 38.0 + 191.0 + reload + Tripoli Rocketry Association, Inc. + 180.0 + 362.0 + 326.0 + 1.8 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1091 + 385.0 + 180.0 + 6,8,10,12,14 + 38/360 + While Lighting + 2016-03-20 + regular + + + 180 + AeroTech + AeroTech + I195J + I195J + I195 + I + 38.0 + 299.0 + reload + Tripoli Rocketry Association, Inc. + 195.0 + 216.3 + 426.1 + 2.1 + 7 + http://www.thrustcurve.org/motorsearch.jsp?id=180 + 572.0 + 301.0 + M + RMS-38/600 + Blackjack + 2014-07-22 + regular + + + 181 + AeroTech + AeroTech + I200W + I200W + I200 + I + 29.0 + 333.0 + reload + Tripoli Rocketry Association, Inc. + 200.0 + 463.3 + 324.5 + 1.65 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=181 + 357.504 + 187.3 + M + RMS-29/360 + White Lightning + 2014-07-22 + regular + + + 185 + AeroTech + AeroTech + I211W + I211W + I211 + I + 38.0 + 248.0 + reload + Tripoli Rocketry Association, Inc. + 211.0 + 399.5 + 441.6 + 1.72 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=185 + 455.0 + 251.3 + 0-14 + RMS-38/480 + White Lightning + 2014-07-22 + regular + + + 489 + AeroTech + AeroTech + I215R + I215R + I215 + I + 54.0 + 156.0 + reload + Tripoli Rocketry Association, Inc. + 215.0 + 399.0 + 1.85581395348837 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=489 + 527.0 + 208.0 + M + RMS-54/426 + Redline + 2014-07-22 + regular + + + 187 + AeroTech + AeroTech + I218R + I218R + I218 + I + 38.0 + 203.0 + reload + National Association of Rocketry + 218.0 + 330.0 + 1.51376146788991 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=187 + 371.84 + 172.7 + M + RMS-38/360 + Redline + 2014-07-22 + regular + + + 456 + AeroTech + AeroTech + I225FJ + I225FJ + I225 + I + 38.0 + 240.0 + reload + Tripoli Rocketry Association, Inc. + 230.5 + 276.6 + 367.89 + 1.59 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=456 + 264.0 + M + RMS-38/480 + Fast Blackjack + 2014-07-22 + regular + + + 488 + AeroTech + AeroTech + I229T + I229T + I229 + I + 54.0 + 156.0 + reload + Tripoli Rocketry Association, Inc. + 229.0 + 407.0 + 1.77729257641921 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=488 + 514.0 + 196.0 + M + RMS-54/426 + Blue Thunder + 2014-07-22 + regular + + + 484 + AeroTech + AeroTech + I245G + I245G + I245 + I + 38.0 + 202.0 + reload + + 245.0 + 351.0 + 1.4 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=484 + 365.0 + 181.3 + M + RMS-38/360 + Mojave Green + 2014-07-22 + regular + + + 197 + AeroTech + AeroTech + I284W + I284W + I284 + I + 38.0 + 299.0 + reload + Tripoli Rocketry Association, Inc. + 284.0 + 570.6 + 607.3 + 1.94 + 7 + http://www.thrustcurve.org/motorsearch.jsp?id=197 + 555.52 + 315.9 + M + RMS-38/600 + White Lightning + 2014-07-22 + regular + + + 199 + AeroTech + AeroTech + I285R + I285R + I285 + I + 38.0 + 250.0 + reload + National Association of Rocketry + 285.0 + 420.0 + 1.47368421052632 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=199 + 492.8 + 230.2 + M + RMS-38/480 + Redline + 2014-07-22 + regular + + + 203 + AeroTech + AeroTech + I300T + I300T + I300 + I + 38.0 + 250.0 + reload + National Association of Rocketry + 300.36 + 474.43 + 426.51 + 1.42 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=203 + 221.6 + M + RMS-38/480 + Blue Thunder + 2014-07-22 + regular + + + 457 + AeroTech + AeroTech + I305FJ + I305FJ + I305 + I + 38.0 + 288.0 + reload + Tripoli Rocketry Association, Inc. + 313.5 + 418.2 + 452.1 + 1.44 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=457 + 330.0 + M + RMS-38/600 + Fast Blackjack + 2014-07-22 + regular + + + 966 + AeroTech + AeroTech + I327DM + I327DM + I327 + I + 38.0 + 337.0 + reload + Tripoli Rocketry Association, Inc. + 327.0 + 400.0 + 539.0 + 1.72 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=966 + 628.0 + 354.0 + 0-14 + RMS-38/720 + Dark Matter + 2014-07-22 + regular + + + 951 + AeroTech + AeroTech + I350R + I350R + I350 + I + 38.0 + 355.6 + SU + Tripoli Rocketry Association, Inc. + 340.0 + 473.0 + 634.6 + 1.86 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=951 + 616.0 + 348.0 + 10 + Redline + 2014-07-22 + regular + + + 211 + AeroTech + AeroTech + I357T + I357T + I357 + I + 38.0 + 203.0 + reload + Tripoli Rocketry Association, Inc. + 357.0 + 432.8 + 342.0 + 1.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=211 + 343.0 + 174.4 + 0-14 + RMS-38/360 + Blue Thunder + 2014-07-22 + regular + + + 455 + AeroTech + AeroTech + I364FJ + I364FJ + I364 + I + 38.0 + 335.0 + reload + Tripoli Rocketry Association, Inc. + 373.8 + 487.3 + 570.13 + 1.52 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=455 + 396.0 + M + RMS-38/720 + Fast Blackjack + 2014-07-22 + regular + + + 213 + AeroTech + AeroTech + I366R + I366R + I366 + I + 38.0 + 299.0 + reload + Tripoli Rocketry Association, Inc. + 366.0 + 507.0 + 539.0 + 1.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=213 + 555.52 + 300.0 + M + RMS-38/600 + Redline + 2014-07-22 + regular + + + 218 + AeroTech + AeroTech + I435T + I435T + I435 + I + 38.0 + 299.0 + reload + Tripoli Rocketry Association, Inc. + 435.0 + 785.6 + 568.9 + 1.1 + 7 + http://www.thrustcurve.org/motorsearch.jsp?id=218 + 518.0 + 269.9 + M + RMS-38/600 + Blue Thunder + 2014-07-22 + regular + + + 719 + AeroTech + AeroTech + I49N + I49N + I49 + I + 38.0 + 184.0 + reload + National Association of Rocketry + 49.4 + 63.7 + 383.0 + 7.68 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=719 + 398.0 + 205.0 + P + RMS-38/360 + Warp-9 + 2014-07-22 + regular + + + 490 + AeroTech + AeroTech + I599N + I599N + I599 + I + 54.0 + 156.0 + reload + Tripoli Rocketry Association, Inc. + 667.82 + 763.46 + 404.87 + 0.6 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=490 + 512.0 + 195.0 + P + RMS-54/426 + Warp-9 + 2014-07-22 + regular + + + 720 + AeroTech + AeroTech + I59WN + I59WN + I59 + I + 38.0 + 232.0 + reload + National Association of Rocketry + 60.8 + 172.9 + 486.0 + 7.99 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=720 + 487.0 + 272.0 + P + RMS-38/480 + White Lightning + 2014-07-22 + regular + + + 506 + AeroTech + AeroTech + I600R + I600R + I600 + I + 38.0 + 345.4 + reload + Tripoli Rocketry Association, Inc. + 612.0 + 811.7 + 597.3 + 1.09 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=506 + 602.0 + 324.0 + M + RMS-38/720 + Redline + 2014-07-22 + regular + + + 157 + AeroTech + AeroTech + I65W + I65W + I65 + I + 54.0 + 235.0 + SU + National Association of Rocketry + 76.33 + 150.07 + 630.5 + 8.26 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=157 + 761.6 + 369.7 + SU 54x235 + White Lightning + 2014-07-22 + OOP + + + 227 + AeroTech + AeroTech + J125W + J125W + J125 + J + 54.0 + 368.0 + SU + Tripoli Rocketry Association, Inc. + 125.0 + 338.9 + 1202.4 + 7.75 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=227 + 1288.0 + 638.7 + SU 54x368 + White Lightning + 2014-07-22 + OOP + + + 462 + AeroTech + AeroTech + J1299N + J1299N-P + J1299 + J + 54.0 + 231.0 + reload + Tripoli Rocketry Association, Inc. + 1291.58 + 1468.28 + 843.4 + 0.653 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=462 + 834.0 + 371.6 + P + RMS-54/852 + Warp-9 + 2014-07-22 + regular + + + 228 + AeroTech + AeroTech + J135W + J135W + J135 + J + 54.0 + 368.0 + reload + Tripoli Rocketry Association, Inc. + 157.0 + 274.0 + 1069.0 + 6.83 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=228 + 1141.06 + 633.0 + L + RMS-54/1280 + White Lightning + 2014-07-22 + regular + + + 231 + AeroTech + AeroTech + J145H 2-jet std. + J145H 2-jet std. + J145 + J + 54.0 + 709.0 + hybrid + Tripoli Rocketry Association, Inc. + 145.0 + 303.3 + 825.7 + 5.65 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=231 + 1797.38 + 409.5 + RMS 54/1280 + 2014-07-22 + OOP + + + 237 + AeroTech + AeroTech + J170H 3-jet std. + J170H 3-jet std. + J170 + J + 54.0 + 709.0 + hybrid + Tripoli Rocketry Association, Inc. + 170.0 + 739.0 + 4.4 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=237 + 409.5 + RMS 54/1280 + 2014-07-22 + OOP + + + 463 + AeroTech + AeroTech + J1799N + J1799N-P + J1799 + J + 54.0 + 316.0 + reload + Tripoli Rocketry Association, Inc. + 1963.39 + 2965.88 + 1214.8 + 0.61 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=463 + 591.0 + P + RMS-54/1280 + Warp-9 + 2014-07-22 + regular + + + 238 + AeroTech + AeroTech + J180T + J180T + J180 + J + 54.0 + 230.0 + reload + Tripoli Rocketry Association, Inc. + 180.0 + 392.0 + 764.0 + 4.5 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=238 + 809.088 + 437.1 + L + RMS-54/852 + Blue Thunder + 2014-07-22 + regular + + + 241 + AeroTech + AeroTech + J210H 4-jet std. + J210H 4-jet std. + J210 + J + 54.0 + 709.0 + hybrid + Tripoli Rocketry Association, Inc. + 213.46 + 651.819 + 853.842 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=241 + 1497.0 + 471.0 + RMS 54/1280 + 2016-01-23 + OOP + + + 492 + AeroTech + AeroTech + J250FJ + J250FJ + J250 + J + 54.0 + 241.0 + reload + Tripoli Rocketry Association, Inc. + 250.0 + 731.0 + 2.9 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=492 + 907.0 + 487.0 + L + RMS-54/852 + Fast Blackjack + 2014-07-22 + regular + + + 1087 + AeroTech + AeroTech + J250W + + J250 + J + 54.0 + 218.2 + SU + Tripoli Rocketry Association, Inc. + 260.0 + 338.0 + 704.0 + 2.7 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1087 + 708.0 + 363.0 + 14 + DMS + White Lightning + 2015-08-07 + regular + + + 251 + AeroTech + AeroTech + J260HW 3-jet EFX + J260HW 3-jet EFX + J260 + J + 54.0 + 709.0 + hybrid + Tripoli Rocketry Association, Inc. + 260.049 + 598.969 + 1170.22 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=251 + 1574.0 + 558.0 + RMS 54/1280 + 2016-01-23 + OOP + + + 255 + AeroTech + AeroTech + J275W + J275W + J275 + J + 54.0 + 230.0 + reload + Tripoli Rocketry Association, Inc. + 275.0 + 370.0 + 774.0 + 3.3 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=255 + 864.192 + 472.0 + L + RMS-54/852 + White Lightning + 2014-07-22 + regular + + + 262 + AeroTech + AeroTech + J315R + J315R + J315 + J + 54.0 + 230.0 + reload + Tripoli Rocketry Association, Inc. + 315.0 + 763.3 + 2.4231746031746 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=262 + 851.2 + 438.0 + L + RMS-54/852 + Redline + 2014-07-22 + regular + + + 904 + AeroTech + AeroTech + J340M + AT, Aerotech, ISP, RCS + J340 + J + 38.0 + 337.0 + reload + Tripoli Rocketry Association, Inc. + 354.1 + 605.0 + 651.68 + 1.836 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=904 + 577.3 + 365.0 + 0-14 + RMS-38/720 + Metalstorm + 2014-07-22 + regular + + + 269 + AeroTech + AeroTech + J350W + J350W-L + J350 + J + 38.0 + 337.0 + reload + Tripoli Rocketry Association, Inc. + 445.0 + 822.5 + 670.1 + 1.5 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=269 + 361.1 + M + RMS-38/720 + White Lightning + 2014-07-31 + regular + + + 270 + AeroTech + AeroTech + J350W-OLD + J350W + J350 + J + 38.0 + 337.0 + reload + Tripoli Rocketry Association, Inc. + 394.2 + 890.4 + 697.4 + 1.78 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=270 + 381.1 + S,M,L + RMS-38/720 + White Lightning + 2016-01-17 + OOP + + + 278 + AeroTech + AeroTech + J390H-turbo + J390H-turbo + J390 + J + 54.0 + 709.0 + hybrid + Tripoli Rocketry Association, Inc. + 390.0 + 1280.0 + 3.28205128205128 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=278 + 391.0 + RMS 54/1280 + 2014-07-22 + OOP + + + 586 + AeroTech + AeroTech + J401FJ + J401FJ + J401 + J + 54.0 + 325.0 + reload + Tripoli Rocketry Association, Inc. + 408.88 + 479.99 + 1115.38 + 2.8 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=586 + 912.0 + 511.0 + L + RMS-54/1280 + Fast Blackjack + 2014-07-22 + regular + + + 282 + AeroTech + AeroTech + J415W + J415W + J415 + J + 54.0 + 314.0 + reload + Tripoli Rocketry Association, Inc. + 415.0 + 732.8 + 1231.7 + 2.88 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=282 + 1168.0 + 693.3 + L + RMS-54/1280 + White Lightning + 2014-07-22 + regular + + + 284 + AeroTech + AeroTech + J420R + J420R + J420 + J + 38.0 + 337.0 + reload + Tripoli Rocketry Association, Inc. + 420.0 + 658.0 + 1.56666666666667 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=284 + 649.6 + 345.0 + M + RMS-38/720 + Redline + 2014-07-22 + regular + + + 287 + AeroTech + AeroTech + J460T + J460T + J460 + J + 54.0 + 230.0 + reload + Tripoli Rocketry Association, Inc. + 460.0 + 870.5 + 805.5 + 1.81 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=287 + 789.0 + 415.4 + L + RMS-54/852 + Blue Thunder + 2014-07-22 + regular + + + 485 + AeroTech + AeroTech + J500G + J500G + J500 + J + 38.0 + 345.0 + reload + Tripoli Rocketry Association, Inc. + 500.0 + 723.0 + 1.4 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=485 + 654.0 + 362.6 + M + RMS-38/720 + Mojave Green + 2014-07-22 + regular + + + 778 + AeroTech + AeroTech + J510W + Aerotech + J510 + J + 38.0 + 584.2 + reload + Tripoli Rocketry Association, Inc. + 509.9 + 1041.7 + 1162.0 + 2.27 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=778 + 1080.0 + 662.0 + L + RMS-38/1320 + White Lightning + 2016-06-01 + regular + + + 292 + AeroTech + AeroTech + J540R + J540R + J540 + J + 54.0 + 314.0 + reload + Tripoli Rocketry Association, Inc. + 540.0 + 1161.0 + 2.15 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=292 + 1084.16 + 679.0 + L + RMS-54/1280 + Redline + 2014-07-22 + regular + + + 294 + AeroTech + AeroTech + J570W + J570W + J570 + J + 38.0 + 479.0 + reload + Tripoli Rocketry Association, Inc. + 509.3 + 1142.5 + 973.1 + 1.91 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=294 + 902.0 + 535.8 + M + RMS-38/1080 + White Lightning + 2014-07-22 + regular + + + 460 + AeroTech + AeroTech + J575FJ + J575FJ + J575 + J + 38.0 + 478.0 + reload + Tripoli Rocketry Association, Inc. + 593.95 + 839.5 + 798.116 + 1.34 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=460 + 576.0 + M + RMS-38/1080 + Fast Blackjack + 2014-07-22 + regular + + + 297 + AeroTech + AeroTech + J800T + J800T + J800 + J + 54.0 + 316.0 + reload + Tripoli Rocketry Association, Inc. + 696.5 + 1001.0 + 1229.11 + 1.76 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=297 + 1085.95 + 618.0 + L + RMS-54/1280 + Blue Thunder + 2014-07-22 + regular + + + 470 + AeroTech + AeroTech + J825R + J825R + J825 + J + 38.0 + 478.0 + reload + Tripoli Rocketry Association, Inc. + 892.9 + 1244.3 + 974.9 + 1.15 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=470 + 500.0 + M + RMS-38/1080 + Redline + 2014-07-22 + regular + + + 223 + AeroTech + AeroTech + J90W + J90W + J90 + J + 54.0 + 243.0 + reload + Tripoli Rocketry Association, Inc. + 90.0 + 188.0 + 707.0 + 6.85 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=223 + 852.544 + 426.0 + L + RMS-54/852 + White Lightning + 2014-07-22 + regular + + + 777 + AeroTech + AeroTech + J99N + J99N + J99 + J + 54.0 + 231.0 + reload + Tripoli Rocketry Association, Inc. + 92.4 + 151.95 + 945.2 + 10.2 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=777 + 899.0 + 556.0 + P + RMS-54/852 + Warp-9 + 2016-01-17 + OOP + + + 887 + AeroTech + AeroTech + K1000T + K1000NT + K1000 + K + 75.0 + 382.9 + reload + Tripoli Rocketry Association, Inc. + 1066.0 + 1674.0 + 2511.5 + 2.35 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=887 + 2602.0 + 1234.0 + P + RMS-75/2560 + Blue Thunder + 2014-07-22 + regular + + + 590 + AeroTech + AeroTech + K1050W + K1050W + K1050 + K + 54.0 + 627.0 + reload + Tripoli Rocketry Association, Inc. + 1132.92 + 2172.0 + 2426.35 + 2.14 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=590 + 2203.0 + 1265.0 + P + RMS-54/2800 + White Lightning + 2014-07-22 + regular + + + 356 + AeroTech + AeroTech + K1050W-SU + K1050W + K1050 + K + 54.0 + 676.0 + SU + Tripoli Rocketry Association, Inc. + 1050.0 + 2164.0 + 2530.0 + 2.28 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=356 + 2128.45 + 1362.2 + SU 54x676 + White Lightning + 2014-07-22 + OOP + + + 358 + AeroTech + AeroTech + K1100T + K1100T + K1100 + K + 54.0 + 398.0 + reload + Tripoli Rocketry Association, Inc. + 1100.0 + 2004.0 + 1472.0 + 1.61 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=358 + 1336.0 + 773.3 + L + RMS-54/1706 + Blue Thunder + 2014-07-22 + regular + + + 969 + AeroTech + AeroTech + K1103X + K1103X + K1103 + K + 54.0 + 401.0 + reload + Tripoli Rocketry Association, Inc. + 1103.0 + 1780.0 + 1789.0 + 1.6 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=969 + 1459.0 + 830.0 + 0-14 + RMS-54/1706 + Propellant X + 2014-07-22 + regular + + + 359 + AeroTech + AeroTech + K1275R + K1275R + K1275 + K + 54.0 + 568.0 + reload + Tripoli Rocketry Association, Inc. + 1275.0 + 1554.0 + 2224.9 + 1.75 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=359 + 1986.0 + 1222.0 + P + RMS-54/2560 + Redline + 2014-07-22 + regular + + + 454 + AeroTech + AeroTech + K1499N + K1499N + K1499 + K + 75.0 + 260.0 + reload + Tripoli Rocketry Association, Inc. + 1499.8 + 1720.12 + 1321.7 + 0.88 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=454 + 1741.0 + 604.0 + P + RMS-75/1280 + Warp-9 + 2014-07-22 + regular + + + 301 + AeroTech + AeroTech + K185W + K185W + K185 + K + 54.0 + 437.0 + reload + Tripoli Rocketry Association, Inc. + 185.0 + 404.7 + 1417.2 + 6.87 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=301 + 1434.05 + 836.8 + L + RMS-54/1706 + White Lightning + 2014-07-22 + regular + + + 458 + AeroTech + AeroTech + K1999N + K1999N + K1999 + K + 98.0 + 289.0 + reload + Tripoli Rocketry Association, Inc. + 1887.37 + 2159.6 + 2540.0 + 1.34 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=458 + 1225.0 + P + RMS-98/2560 + Warp-9 + 2014-07-26 + regular + + + 306 + AeroTech + AeroTech + K250W + K250W + K250 + K + 54.0 + 673.0 + SU + Tripoli Rocketry Association, Inc. + 250.0 + 545.8 + 2353.0 + 9.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=306 + 2211.33 + 1434.0 + P + White Lightning + 2014-07-22 + regular + + + 486 + AeroTech + AeroTech + K270W + K270W + K270 + K + 54.0 + 579.0 + reload + Tripoli Rocketry Association, Inc. + 249.76 + 438.38 + 1967.955 + 7.87 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=486 + 2100.0 + 1188.0 + P + RMS-54/2560 + White Lightning + 2014-07-22 + regular + + + 898 + AeroTech + AeroTech + K375NW + K375NW + K375 + K + 54.0 + 579.0 + reload + Tripoli Rocketry Association, Inc. + 430.58 + 1371.77 + 2228.136 + 5.78 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=898 + 2106.0 + 1318.0 + P + RMS-54/2560 + White Lightning + 2014-07-22 + regular + + + 967 + AeroTech + AeroTech + K456DM + K456DM + K456 + K + 54.0 + 401.0 + reload + Tripoli Rocketry Association, Inc. + 438.0 + 534.0 + 1281.0 + 2.89 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=967 + 1484.0 + 866.0 + 0-14 + RMS-54/1706 + Dark Matter + 2014-07-22 + regular + + + 318 + AeroTech + AeroTech + K458W + K458W + K458 + K + 98.0 + 275.0 + reload + Tripoli Rocketry Association, Inc. + 458.0 + 585.8 + 2464.6 + 6.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=318 + 3163.78 + 1425.0 + P + RMS-98/2560 + White Lightning + 2014-07-26 + regular + + + 899 + AeroTech + AeroTech + K480W + K480W + K480 + K + 54.0 + 579.0 + reload + Tripoli Rocketry Association, Inc. + 545.27 + 1017.79 + 2273.26 + 4.26 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=899 + 2078.0 + 1292.0 + P + RMS-54/2560 + White Lightning + 2014-07-22 + regular + + + 322 + AeroTech + AeroTech + K485H (3 jet) + K485H (3 jet) + K485 + K + 54.0 + 699.0 + hybrid + Tripoli Rocketry Association, Inc. + 485.0 + 851.1 + 1686.8 + 3.5 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=322 + 2220.29 + 923.4 + RMS 54/1280 + 2014-07-22 + OOP + + + 494 + AeroTech + AeroTech + K513FJ + K513FJ + K513 + K + 54.0 + 410.0 + reload + Tripoli Rocketry Association, Inc. + 556.84 + 658.25 + 1496.27 + 2.79 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=494 + 1647.0 + 974.0 + L + RMS-54/1706 + Fast Blackjack + 2014-07-22 + regular + + + 905 + AeroTech + AeroTech + K540M + AT,Aerotech,ISP,RCS + K540 + K + 54.0 + 401.0 + reload + Tripoli Rocketry Association, Inc. + 557.4 + 854.0 + 1596.33 + 2.85 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=905 + 1275.0 + 876.7 + 0-14 + RMS-54/1706 + Metalstorm + 2014-07-22 + regular + + + 326 + AeroTech + AeroTech + K550W + K550W + K550 + K + 54.0 + 410.0 + reload + Tripoli Rocketry Association, Inc. + 396.8 + 655.3 + 1539.118 + 3.879 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=326 + 1487.36 + 889.1 + L + RMS-54/1706 + White Lightning + 2014-07-22 + regular + + + 329 + AeroTech + AeroTech + K560W + K560W + K560 + K + 75.0 + 396.0 + reload + Tripoli Rocketry Association, Inc. + 560.0 + 753.7 + 2417.0 + 4.09 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=329 + 2744.0 + 1424.9 + P + RMS-75/2560 + White Lightning + 2014-07-22 + regular + + + 339 + AeroTech + AeroTech + K650T + K650T + K650 + K + 98.0 + 289.0 + reload + Tripoli Rocketry Association, Inc. + 650.0 + 752.8 + 2405.7 + 3.67 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=339 + 2935.3 + 1280.0 + P + RMS-98/2560 + Blue Thunder + 2014-07-26 + regular + + + 343 + AeroTech + AeroTech + K680R + K680R + K680 + K + 98.0 + 289.0 + reload + Tripoli Rocketry Association, Inc. + 680.0 + 835.0 + 2358.0 + 3.49 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=343 + 1316.0 + P + RMS-98/2560 + Redline + 2014-07-26 + regular + + + 344 + AeroTech + AeroTech + K695R + K695R + K695 + K + 54.0 + 410.0 + reload + Tripoli Rocketry Association, Inc. + 695.0 + 1514.0 + 2.17841726618705 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=344 + 1487.36 + 903.0 + L + RMS-54/1706 + Redline + 2014-07-22 + regular + + + 346 + AeroTech + AeroTech + K700W + K700W + K700 + K + 54.0 + 568.0 + reload + Tripoli Rocketry Association, Inc. + 700.0 + 1617.0 + 2261.0 + 3.51 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=346 + 2035.26 + 1303.3 + P + RMS-54/2560 + White Lightning + 2014-07-22 + regular + + + 349 + AeroTech + AeroTech + K780R + K780R + K780 + K + 75.0 + 395.0 + reload + Tripoli Rocketry Association, Inc. + 780.0 + 965.0 + 2371.0 + 2.98 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=349 + 2934.4 + 1268.0 + P + RMS-75/2560 + Redline + 2014-07-22 + regular + + + 529 + AeroTech + AeroTech + K805G + K805G + K805 + K + 54.0 + 401.0 + reload + Tripoli Rocketry Association, Inc. + 805.0 + 1762.0 + 2.2 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=529 + 1543.0 + 871.1 + P + RMS-54/1706 + Mojave Green + 2014-07-22 + regular + + + 495 + AeroTech + AeroTech + K828FJ + K828FJ + K828 + K + 54.0 + 579.0 + reload + Tripoli Rocketry Association, Inc. + 828.0 + 2120.0 + 2.5 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=495 + 2223.0 + 1373.0 + P + RMS-54/2560 + Fast Blackjack + 2014-07-22 + regular + + + 974 + AeroTech + AeroTech + L1040DM + L1040DM + L1040 + L + 75.0 + 681.0 + reload + Tripoli Rocketry Association, Inc. + 992.0 + 1255.0 + 3769.0 + 3.79 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=974 + 4717.0 + 2602.0 + PS + RMS-75/5120 + Dark Matter + 2014-07-22 + regular + + + 1089 + AeroTech + AeroTech + L1090W + + L1090 + L + 54.0 + 625.8 + reload + Tripoli Rocketry Association, Inc. + 1090.0 + 1487.0 + 2671.0 + 2.45 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1089 + 2432.0 + 1400.0 + P + RMS-54/2800 + White Thunder + 2016-01-17 + regular + + + 398 + AeroTech + AeroTech + L1120W + L1120W + L1120 + L + 75.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 1120.0 + 1794.0 + 4947.0 + 4.43 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=398 + 4657.86 + 2777.8 + RMS-75/5120 + White Lightning + 2016-01-17 + OOP + + + 399 + AeroTech + AeroTech + L1150R + L1150R + L1150 + L + 75.0 + 530.0 + reload + Tripoli Rocketry Association, Inc. + 1150.0 + 1346.0 + 3517.0 + 3.07 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=399 + 3673.6 + 1902.0 + P + RMS-75/3840 + Redline + 2014-07-22 + regular + + + 740 + AeroTech + AeroTech + L1170FJ + L1170 FJ + L1170 + L + 75.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 1141.0 + 1489.0 + 4232.0 + 3.7 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=740 + 4990.0 + 2800.0 + P + RMS-75/5120 + Fast Blackjack + 2014-07-22 + regular + + + 1021 + AeroTech + AeroTech + L1250DM + AT + L1250 + L + 75.0 + 801.0 + reload + Tripoli Rocketry Association, Inc. + 2042.0 + 1254.0 + 4374.0 + 3.7 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1021 + 5647.0 + 2565.0 + P + RMS-75/6400 + Dark Matter + 2014-07-22 + regular + + + 402 + AeroTech + AeroTech + L1300R + L1300R + L1300 + L + 98.0 + 443.0 + reload + Tripoli Rocketry Association, Inc. + 1300.0 + 4567.0 + 3.51307692307692 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=402 + 2632.0 + P + RMS-98/5120 + Redline + 2014-07-22 + regular + + + 1020 + AeroTech + AeroTech + L1365M + AT + L1365 + L + 75.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 1365.0 + 1735.0 + 4780.0 + 3.5 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1020 + 4908.0 + 2648.0 + PS + RMS-75/5120 + Metalstorm + 2014-07-22 + regular + + + 600 + AeroTech + AeroTech + L1390G + L1390G + L1390 + L + 75.0 + 530.0 + reload + Tripoli Rocketry Association, Inc. + 1390.0 + 3949.0 + 2.63 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=600 + 3879.0 + 1973.0 + P + RMS-75/3840 + Mojave Green + 2014-07-22 + regular + + + 405 + AeroTech + AeroTech + L1420R + L1420R + L1420 + L + 75.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 1420.0 + 1814.0 + 4603.0 + 3.24 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=405 + 4562.0 + 2560.0 + P + RMS-75/5120 + Redline + 2014-07-22 + regular + + + 406 + AeroTech + AeroTech + L1500T + L1500T + L1500 + L + 98.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 1500.0 + 1752.0 + 5089.3 + 3.47 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=406 + 4659.2 + 2490.9 + P + RMS-98/5120 + Blue Thunder + 2014-07-22 + regular + + + 910 + AeroTech + AeroTech + L1520T + L1520T + L1520 + L + 75.0 + 517.9 + reload + Tripoli Rocketry Association, Inc. + 1567.8 + 1765.25 + 3715.9 + 2.36 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=910 + 3651.4 + 1854.0 + PS + RMS-75/3840 + Blue Thunder + 2014-07-22 + regular + + + 587 + AeroTech + AeroTech + L2200G + L2200G + L2200 + L + 75.0 + 681.0 + reload + Tripoli Rocketry Association, Inc. + 2200.0 + 5104.0 + 2.32 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=587 + 4783.0 + 2518.0 + P + RMS-75/5120 + Mojave Green + 2014-07-22 + regular + + + 1092 + AeroTech + AeroTech + L2500ST + + L2500 + L + 98.0 + 443.0 + reload + Tripoli Rocketry Association, Inc. + 2504.0 + 2830.0 + 4668.0 + 1.86 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1092 + 4989.0 + 2313.0 + P + 98/5120 + Super Thunder + 2016-06-24 + regular + + + 589 + AeroTech + AeroTech + L339N + L339N + L339 + L + 98.0 + 302.0 + reload + Tripoli Rocketry Association, Inc. + 316.5 + 445.5 + 3042.9 + 8.82 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=589 + 3210.0 + 1796.0 + P + RMS-98/2560 + Warp-9 + 2014-07-31 + regular + + + 909 + AeroTech + AeroTech + L400W + L400W + L400 + L + 98.0 + 443.9 + reload + Tripoli Rocketry Association, Inc. + 379.15 + 770.24 + 4641.58 + 12.24 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=909 + 5170.0 + 2696.0 + PS + RMS-98/5120 + White Lightning + 2014-07-22 + regular + + + 385 + AeroTech + AeroTech + L850W + L850W + L850 + L + 75.0 + 531.0 + reload + Tripoli Rocketry Association, Inc. + 850.0 + 1866.2 + 3646.2 + 4.42 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=385 + 3742.0 + 2094.8 + P + RMS-75/3840 + White Lightning + 2014-07-22 + regular + + + 968 + AeroTech + AeroTech + L900DM + L900DM + L900 + L + 75.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 900.0 + 3868.0 + 4.4 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=968 + 4724.0 + 2472.0 + PS + RMS-75/5120 + Dark Matter + 2014-07-22 + regular + + + 389 + AeroTech + AeroTech + L952W + L952W + L952 + L + 98.0 + 427.0 + reload + Tripoli Rocketry Association, Inc. + 952.0 + 1021.5 + 4656.0 + 6.15 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=389 + 5012.22 + 2749.7 + P + RMS-98/5120 + White Lightning + 2014-07-22 + regular + + + 973 + AeroTech + AeroTech + M1075DM + M1075DM + M1075 + M + 98.0 + 597.0 + reload + Tripoli Rocketry Association, Inc. + 1070.0 + 1330.0 + 5571.0 + 5.2 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=973 + 6971.0 + 3846.0 + PS + RMS-98/7680 + Dark Matter + 2014-07-22 + regular + + + 420 + AeroTech + AeroTech + M1297W + M1297W + M1297 + M + 75.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 1297.0 + 2048.98 + 5416.6 + 4.17 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=420 + 4637.0 + 2722.0 + P + RMS-75/5120 + White Lightning + 2014-07-22 + regular + + + 972 + AeroTech + AeroTech + M1305M + M1305M + M1305 + M + 98.0 + 597.0 + reload + Tripoli Rocketry Association, Inc. + 1406.0 + 2098.0 + 6891.0 + 4.8 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=972 + 7098.0 + 4080.0 + PS + RMS-98/7680 + Metalstorm + 2014-07-22 + regular + + + 421 + AeroTech + AeroTech + M1315W + M1315W + M1315 + M + 75.0 + 801.0 + reload + Tripoli Rocketry Association, Inc. + 1315.0 + 2362.5 + 6713.5 + 5.4 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=421 + 5644.8 + 3499.4 + P + RMS-75/6400 + White Lightning + 2014-07-22 + regular + + + 1073 + AeroTech + AeroTech + M1350W + + M1350 + M + 75.0 + 622.0 + SU + Tripoli Rocketry Association, Inc. + 1356.725 + 1765.489 + 5178.154 + 3.8166 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=1073 + 4808.0 + 1970.0 + P + White Lightning + 2014-07-25 + regular + + + 424 + AeroTech + AeroTech + M1419W + M1419W + M1419 + M + 98.0 + 579.0 + reload + Tripoli Rocketry Association, Inc. + 1419.0 + 1590.9 + 7755.5 + 7.1 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=424 + 6916.22 + 4077.0 + P + RMS-98/7680 + White Lightning + 2014-07-22 + regular + + + 588 + AeroTech + AeroTech + M1500G + M1500G + M1500 + M + 75.0 + 681.0 + reload + Tripoli Rocketry Association, Inc. + 1508.67052023121 + 5220.0 + 3.46 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=588 + 4896.0 + 2631.0 + P + RMS-75/5120 + Mojave Green + 2014-07-22 + regular + + + 426 + AeroTech + AeroTech + M1550R + M1550R + M1550 + M + 75.0 + 801.0 + reload + Tripoli Rocketry Association, Inc. + 1550.0 + 2180.0 + 5600.0 + 3.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=426 + 5644.8 + 3170.0 + P + RMS-75/6400 + Redline + 2014-07-22 + regular + + + 428 + AeroTech + AeroTech + M1600R + M1600R + M1600 + M + 98.0 + 579.0 + reload + Tripoli Rocketry Association, Inc. + 1600.0 + 1917.0 + 7084.0 + 4.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=428 + 6917.12 + 4026.0 + P + RMS-98/7680 + Redline + 2014-07-22 + regular + + + 779 + AeroTech + AeroTech + M1780NT + M1780T + M1780 + M + 75.0 + 665.0 + reload + Tripoli Rocketry Association, Inc. + 1859.0 + 3056.0 + 5783.0 + 3.1 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=779 + 4715.0 + 2560.0 + PS + RMS-75/5120 + Blue Thunder + 2014-07-22 + regular + + + 584 + AeroTech + AeroTech + M1800FJ + M1800FJ + M1800 + M + 98.0 + 751.0 + reload + Tripoli Rocketry Association, Inc. + 1833.29 + 3956.0 + 8207.7 + 4.5 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=584 + 9162.0 + 5599.0 + P + RMS-98/10240 + Fast Blackjack + 2014-07-22 + regular + + + 780 + AeroTech + AeroTech + M1845NT + M1845T + M1845 + M + 98.0 + 597.0 + reload + Tripoli Rocketry Association, Inc. + 1875.0 + 3081.0 + 8307.0 + 4.43 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=780 + 6682.0 + 3772.0 + PS + RMS-98/7680 + Blue Thunder + 2014-07-22 + regular + + + 461 + AeroTech + AeroTech + M1850W + M1850W-PS + M1850 + M + 75.0 + 923.0 + reload + Tripoli Rocketry Association, Inc. + 1909.6 + 4489.4 + 7658.6 + 4.01 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=461 + 4122.0 + P + RMS-75/7680 + White Lightning + 2014-07-22 + regular + + + 433 + AeroTech + AeroTech + M1939W + M1939W + M1939 + M + 98.0 + 732.0 + reload + Tripoli Rocketry Association, Inc. + 1939.0 + 2429.7 + 10481.5 + 6.2 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=433 + 8988.22 + 5719.1 + P + RMS-98/10240 + White Lightning + 2014-07-22 + regular + + + 434 + AeroTech + AeroTech + M2000R + M2000R + M2000 + M + 98.0 + 732.0 + reload + Tripoli Rocketry Association, Inc. + 2000.0 + 2327.0 + 9218.0 + 4.0 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=434 + 8986.88 + 5368.0 + P + RMS-98/10240 + Redline + 2014-07-22 + regular + + + 530 + AeroTech + AeroTech + M2030G-P + M2030G + M2030 + M + 75.0 + 653.0 + reload + Tripoli Rocketry Association, Inc. + 2030.0 + 5485.0 + 2.6 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=530 + 4906.0 + 2663.0 + RMS-75/5120 + Mojave Green + 2016-01-17 + OOP + + + 531 + AeroTech + AeroTech + M2100G + M2100G + M2100 + M + 98.0 + 598.0 + reload + Tripoli Rocketry Association, Inc. + 2100.0 + 7802.0 + 3.7 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=531 + 6918.0 + 3948.0 + P + RMS-98/7680 + Mojave Green + 2014-07-22 + regular + + + 438 + AeroTech + AeroTech + M2400T + M2400T + M2400 + M + 98.0 + 597.0 + reload + Tripoli Rocketry Association, Inc. + 2400.0 + 3401.6 + 7716.5 + 3.2 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=438 + 6451.2 + 3692.6 + P + RMS-98/7680 + Blue Thunder + 2014-07-22 + regular + + + 440 + AeroTech + AeroTech + M2500T + M2500T + M2500 + M + 98.0 + 751.0 + reload + Tripoli Rocketry Association, Inc. + 2500.0 + 3710.9 + 9671.0 + 3.85 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=440 + 8064.0 + 4711.2 + P + RMS-98/10240 + Blue Thunder + 2014-07-22 + regular + + + 1093 + AeroTech + AeroTech + M4500ST + + M4500 + M + 98.0 + 597.0 + reload + Tripoli Rocketry Association, Inc. + 4533.0 + 5549.0 + 7301.0 + 1.6 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1093 + 6622.0 + 3425.0 + P + 98/7840 + Super Thunder + 2016-06-24 + regular + + + 471 + AeroTech + AeroTech + M650W + M650W + M650 + M + 75.0 + 801.0 + reload + National Association of Rocketry + 656.0 + 1475.0 + 5964.0 + 9.13 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=471 + 5125.0 + 2893.0 + P + RMS-75/6400 + White Lightning + 2014-07-22 + regular + + + 1008 + AeroTech + AeroTech + M685W + + M685 + M + 75.0 + 935.9 + reload + Tripoli Rocketry Association, Inc. + 657.0 + 1517.0 + 7561.0 + 11.5 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1008 + 7008.0 + 4320.0 + P + RMS-75/7680 + White Lightning + 2014-07-22 + regular + + + 472 + AeroTech + AeroTech + M750W + M750W + M750 + M + 98.0 + 732.0 + reload + National Association of Rocketry + 744.0 + 1454.0 + 9325.0 + 12.65 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=472 + 8776.0 + 5540.0 + P + RMS-98/10240 + White Lightning + 2014-07-22 + regular + + + 410 + AeroTech + AeroTech + M845H + M845 + M845 + M + 98.0 + 782.0 + hybrid + Tripoli Rocketry Association, Inc. + 845.0 + 6159.0 + 7.2887573964497 + 2 + http://www.thrustcurve.org/motorsearch.jsp?id=410 + 3433.0 + RMS 98/5120 + 2014-07-22 + OOP + + + 638 + AeroTech + AeroTech + N1000W + N1000W + N1000 + N + 98.0 + 1046.0 + reload + National Association of Rocketry + 1079.0 + 2262.0 + 14126.0 + 13.05 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=638 + 12771.0 + 8293.0 + P + RMS-98/15360 + White Lightning + 2014-07-22 + regular + + + 447 + AeroTech + AeroTech + N2000W + N2000W + N2000 + N + 98.0 + 1046.0 + reload + Tripoli Rocketry Association, Inc. + 2000.0 + 3140.8 + 13347.1 + 6.9 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=447 + 12282.8 + 7752.6 + P + RMS-98/15360 + White Lightning + 2014-07-22 + regular + + + 1022 + AeroTech + AeroTech + N2220DM + AT + N2220 + N + 98.0 + 1046.0 + reload + Tripoli Rocketry Association, Inc. + 2199.0 + 4472.0 + 10657.0 + 5.4 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=1022 + 11997.0 + 7183.0 + P + RMS-98/15360 + Dark Matter + 2016-01-17 + OOP + + + 781 + AeroTech + AeroTech + N3300R + N3300R + N3300 + N + 98.0 + 1046.0 + reload + Tripoli Rocketry Association, Inc. + 3168.0 + 4301.0 + 14041.0 + 4.37 + 1 + http://www.thrustcurve.org/motorsearch.jsp?id=781 + 12054.0 + 7512.0 + PS + RMS-98/15360 + Redline + 2014-07-22 + regular + + + 450 + AeroTech + AeroTech + N4800T + N4800T + N4800 + N + 98.0 + 1201.0 + reload + Tripoli Rocketry Association, Inc. + 4800.0 + 6599.35 + 19361.0 + 4.44 + 4 + http://www.thrustcurve.org/motorsearch.jsp?id=450 + 14784.0 + 9570.8 + RMS-98/18000 + Blue Thunder + 2016-01-17 + OOP + + + \ No newline at end of file diff --git a/core/test/net/sf/openrocket/thrustcurve/SearchResponseParserTest.java b/core/test/net/sf/openrocket/thrustcurve/SearchResponseParserTest.java new file mode 100644 index 000000000..a1c423679 --- /dev/null +++ b/core/test/net/sf/openrocket/thrustcurve/SearchResponseParserTest.java @@ -0,0 +1,19 @@ +package net.sf.openrocket.thrustcurve; + +import static org.junit.Assert.assertEquals; + +import java.io.InputStream; + +import org.junit.Test; + +import net.sf.openrocket.util.BaseTestCase.BaseTestCase; + +public class SearchResponseParserTest extends BaseTestCase { + + @Test + public void simpleParseTest() throws Exception { + InputStream is = SearchResponseParserTest.class.getResourceAsStream("SampleSearchResponse.xml"); + SearchResponse response = SearchResponseParser.parse(is); + assertEquals(252, response.getMatches()); + } +} diff --git a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java index b9ff3b405..ed7c77aa8 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java @@ -1,5 +1,6 @@ package net.sf.openrocket.gui.dialogs.motor.thrustcurve; +import java.awt.BasicStroke; import java.awt.Color; import java.awt.Cursor; import java.awt.Font; diff --git a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorSelectionPanel.java b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorSelectionPanel.java index 917e876e1..f3f466b6a 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorSelectionPanel.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorSelectionPanel.java @@ -60,6 +60,7 @@ import net.sf.openrocket.rocketcomponent.FlightConfigurationId; import net.sf.openrocket.rocketcomponent.MotorMount; import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; +import net.sf.openrocket.utils.MotorCorrelation; public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelector { private static final long serialVersionUID = -8737784181512143155L; @@ -492,6 +493,7 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec } motors = filtered; } + Collections.sort(motors, MOTOR_COMPARATOR); return motors; diff --git a/swing/test/net/sf/openrocket/IntegrationTest.java b/swing/test/net/sf/openrocket/IntegrationTest.java index f14fdec3e..7700e2245 100644 --- a/swing/test/net/sf/openrocket/IntegrationTest.java +++ b/swing/test/net/sf/openrocket/IntegrationTest.java @@ -43,7 +43,6 @@ import net.sf.openrocket.gui.main.UndoRedoAction; import net.sf.openrocket.l10n.DebugTranslator; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.masscalc.MassCalculator; -import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.ThrustCurveMotor; import net.sf.openrocket.plugin.PluginModule; import net.sf.openrocket.rocketcomponent.EngineBlock; @@ -265,8 +264,8 @@ public class IntegrationTest { InputStream is = IntegrationTest.class.getResourceAsStream("Estes_A8.rse"); assertNotNull("Problem in unit test, cannot find Estes_A8.rse", is); try { - for (Motor m : loader.load(is, "Estes_A8.rse")) { - return (ThrustCurveMotor) m; + for (ThrustCurveMotor.Builder m : loader.load(is, "Estes_A8.rse")) { + return m.build(); } is.close(); } catch (IOException e) {