//------------------------------------------------------------------------------ // void VaryPanel::OnSolverSelection(wxCommandEvent &event) //------------------------------------------------------------------------------ void VaryPanel::OnSolverSelection(wxCommandEvent &event) { #ifdef DEBUG_VARYPANEL_SOLVER MessageInterface::ShowMessage("VaryPanel::OnSolverSelection() entered\n"); #endif solverName = mSolverComboBox->GetStringSelection().c_str(); GmatBase *slvr = theGuiInterpreter->GetConfiguredObject(solverName); #ifdef DEBUG_VARYPANEL_SOLVER MessageInterface::ShowMessage (" solverName='%s', solver=<%p>'%s'\n", solverName.c_str(), slvr, slvr ? slvr->GetName().c_str() : "NULL"); #endif if (slvr == NULL) { MessageInterface::PopupMessage(Gmat::ERROR_, "The solver " + solverName + " is NULL"); } else { solverChanged = true; SetControlEnabling(slvr); EnableUpdate(true); } }
//------------------------------------------------------------------------------ bool EstimationStateManager::MapObjectsToSTM() { bool retval = true; // Fill in the STM based on the objects that comprise the state vector GmatBase* obj; Integer elementId; //, elementLength; for (UnsignedInt h = 0; h < stateMap.size(); ++h) { obj = stateMap[h]->object; if (stateMap[h]->subelement == 1) { elementId = stateMap[h]->parameterID; // elementLength = stateMap[h]->length; bool hasDstm = obj->HasDynamicParameterSTM(elementId); #ifdef DEBUG_STM_MAPPING MessageInterface::ShowMessage("Prepping for STM; element %s for " "object %s has ID %d and length %d, and %s a dynamic STM " "contribution\n", stateMap[h]->elementName.c_str(), obj->GetName().c_str(), elementId, elementLength, (hasDstm ? "has" : "does not have")); #endif if (hasDstm) { const Rmatrix* dstm = obj->GetParameterSTM(elementId); Integer stmSize = dstm->GetNumRows(); // Fill in the master stm with the current data for (Integer i = 0; i < stmSize; ++i) for (Integer j = 0; j < stmSize; ++j) stm(h+i, h+j) = (*dstm)(i,j); } } } #ifdef DEBUG_STM_MAPPING MessageInterface::ShowMessage("Loaded object STM's; esm STM now contains\n"); for (Integer i = 0; i < stateSize; ++i) { for (Integer j = 0; j < stateSize; ++j) MessageInterface::ShowMessage(" %.12lf", stm(i,j)); MessageInterface::ShowMessage("\n"); } MessageInterface::ShowMessage("\n"); #endif return retval; }
//------------------------------------------------------------------------------ void CallFunction::SetGlobalObjectMap(std::map<wxString, GmatBase *> *map) { #ifdef DEBUG_GLOBAL_OBJECT_MAP MessageInterface::ShowMessage (wxT("CallFunction::SetGlobalObjectMap() entered, mFunctionName='%s', ") wxT("map=<%p>\n"), mFunctionName.c_str(), map); #endif GmatCommand::SetGlobalObjectMap(map); // Now, find the function object GmatBase *mapObj = FindObject(mFunctionName); #ifdef DEBUG_GLOBAL_OBJECT_MAP MessageInterface::ShowMessage (wxT(" mapObj=<%p><%s>'%s'\n"), mapObj, mapObj ? mapObj->GetTypeName().c_str() : wxT("NULL"), mapObj ? mapObj->GetName().c_str() : wxT("NULL")); #endif if (mapObj == NULL) { //throw CommandException(wxT("CallFunction command cannot find Function ") + // mFunctionName + wxT("\n")); ; // leave NULL for now } else { mFunction = (Function *)mapObj; #ifdef DEBUG_GLOBAL_OBJECT_MAP MessageInterface::ShowMessage (wxT(" mFunction=<%p><%s>\n"), mFunction, mFunction->GetName().c_str()); #endif // Set only GmatFunction to FunctionManager (loj: 2008.09.03) if (mapObj->GetTypeName() == wxT("GmatFunction")) fm.SetFunction(mFunction); } fm.SetGlobalObjectMap(map); #ifdef DEBUG_GLOBAL_OBJECT_MAP MessageInterface::ShowMessage(wxT("CallFunction::SetGlobalObjectMap() exiting\n")); #endif }
//------------------------------------------------------------------------------ bool PropagationStateManager::SetProperty(std::string propName, Integer index) { #ifdef DEBUG_STATE_CONSTRUCTION MessageInterface::ShowMessage("Entered SetProperty(%s, %d)\n", propName.c_str(), index); #endif if ((index < 0) || (index >= (Integer)objects.size())) throw PropagatorException("Index out of bounds specifying a prop object " "in a propagation state manager\n"); GmatBase *obj = objects[index]; if (obj) { // Validate that the property can be propagated if (obj->SetPropItem(propName) == Gmat::UNKNOWN_STATE) throw PropagatorException(propName + " is not a known propagation parameter on " + obj->GetName()); if (find(elements[obj]->begin(), elements[obj]->end(), propName) == elements[obj]->end()) elements[obj]->push_back(propName); #ifdef DEBUG_STATE_CONSTRUCTION MessageInterface::ShowMessage("Current property List:\n"); for (StringArray::iterator i = elements[obj]->begin(); i != elements[obj]->end(); ++i) MessageInterface::ShowMessage(" %s\n", i->c_str()); #endif return true; } return false; }
//------------------------------------------------------------------------------ const std::vector<RealArray>& USNTwoWayRange::CalculateMeasurementDerivatives( GmatBase *obj, Integer id) { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("USNTwoWayRange::CalculateMeasurement" "Derivatives(%s, %d) called\n", obj->GetName().c_str(), id); #endif if (!initialized) InitializeMeasurement(); GmatBase *objPtr = NULL; Integer size = obj->GetEstimationParameterSize(id); Integer objNumber = -1; #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" ParameterSize = %d\n", size); #endif if (size <= 0) throw MeasurementException("The derivative parameter on derivative " "object " + obj->GetName() + "is not recognized"); // Check to see if obj is a participant for (UnsignedInt i = 0; i < participants.size(); ++i) { if (participants[i] == obj) { objPtr = participants[i]; objNumber = i + 1; #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Participant %s found\n", objPtr->GetName().c_str()); #endif break; } } // Or if it is the measurement model for this object if (obj->IsOfType(Gmat::MEASUREMENT_MODEL)) if (obj->GetRefObject(Gmat::CORE_MEASUREMENT, "") == this) { objPtr = obj; objNumber = 0; #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" The measurement is the object\n", objPtr->GetName().c_str()); #endif } if (objNumber == -1) throw MeasurementException( "USNTwoWayRange error - object is neither participant nor " "measurement model."); RealArray oneRow; oneRow.assign(size, 0.0); currentDerivatives.clear(); currentDerivatives.push_back(oneRow); Integer parameterID = GetParmIdFromEstID(id, obj); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Looking up id %d\n", parameterID); #endif if (objPtr != NULL) { if (objNumber == 1) // participant number 1, either a GroundStation or a Spacecraft { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of Participant" " 1\n", objPtr->GetParameterText(parameterID).c_str()); #endif if (objPtr->GetParameterText(parameterID) == "Position") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() +" position is not yet implemented"); // CalculateRangeVectorInertial(); // Rvector3 tmp, result; // Rvector3 rangeUnit = rangeVecInertial.GetUnitVector(); // #ifdef DEBUG_DERIVATIVES // MessageInterface::ShowMessage(" RVInertial = %.12lf %.12lf %.12lf\n", // rangeVecInertial[0], rangeVecInertial[1], rangeVecInertial[2]); // MessageInterface::ShowMessage(" Unit RVInertial = %.12lf %.12lf %.12lf ", // rangeUnit[0], rangeUnit[1], rangeUnit[2]); // #endif // if (stationParticipant) // { // for (UnsignedInt i = 0; i < 3; ++i) // tmp[i] = - rangeUnit[i]; // // // for a Ground Station, need to rotate to the F1 frame // result = tmp * R_j2k_1; // for (UnsignedInt jj = 0; jj < 3; jj++) // currentDerivatives[0][jj] = result[jj]; // } // else // { // // for a spacecraft participant 1, we don't need the rotation matrices (I33) // for (UnsignedInt i = 0; i < 3; ++i) // currentDerivatives[0][i] = - rangeUnit[i]; // } } else if (objPtr->GetParameterText(parameterID) == "Velocity") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() +" velocity is not yet implemented"); // for (UnsignedInt i = 0; i < 3; ++i) // currentDerivatives[0][i] = 0.0; } else if (objPtr->GetParameterText(parameterID) == "CartesianX") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() + " CartesianState is not yet implemented"); // // CalculateRangeVectorInertial(); // Rvector3 tmp, result; // Rvector3 rangeUnit = rangeVecInertial.GetUnitVector(); // #ifdef DEBUG_DERIVATIVES // MessageInterface::ShowMessage(" RVInertial = %.12lf %.12lf %.12lf\n", // rangeVecInertial[0], rangeVecInertial[1], rangeVecInertial[2]); // MessageInterface::ShowMessage(" Unit RVInertial = %.12lf %.12lf %.12lf ", // rangeUnit[0], rangeUnit[1], rangeUnit[2]); // #endif // if (stationParticipant) // { // for (UnsignedInt i = 0; i < size; ++i) // tmp[i] = - rangeUnit[i]; // // // for a Ground Station, need to rotate to the F1 frame // result = tmp * R_j2k_1; // for (UnsignedInt jj = 0; jj < size; jj++) // currentDerivatives[0][jj] = result[jj]; // } // else // { // // for a spacecraft participant 1, we don't need the rotation matrices (I33) // for (UnsignedInt i = 0; i < size; ++i) // currentDerivatives[0][i] = - rangeUnit[i]; // } // // velocity all zeroes // for (UnsignedInt ii = 3; ii < size; ii++) // currentDerivatives[0][ii] = 0.0; } else if (objPtr->GetParameterText(parameterID) == "Bias") { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 1.0; } else { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. something " "independent, so zero\n"); #endif for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 0.0; } } else if (objNumber == 2) // participant 2, always a Spacecraft { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of Participant" " 2\n", objPtr->GetParameterText(parameterID).c_str()); #endif if (objPtr->GetParameterText(parameterID) == "Position") { // Get the inverse of the orbit STM at the measurement epoch // Will need adjustment if stm changes Rmatrix stmInv(6,6); GetInverseSTM(obj, stmInv); Rvector3 uplinkRderiv; GetRangeDerivative(uplinkLeg, stmInv, uplinkRderiv, false, 0, 1, true, false); // Downlink leg Rvector3 downlinkRderiv; GetRangeDerivative(downlinkLeg, stmInv, downlinkRderiv, false, 0, 1, true, false); // Add 'em up per eq 7.52 and 7.53 for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 0.5 * (uplinkRderiv[i] + downlinkRderiv[i]); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("Position Derivative: [%.12lf " "%.12lf %.12lf]\n", currentDerivatives[0][0], currentDerivatives[0][1], currentDerivatives[0][2]); #endif } else if (objPtr->GetParameterText(parameterID) == "Velocity") { // Get the inverse of the orbit STM at the measurement epoch // Will need adjustment if stm changes Rmatrix stmInv(6,6); GetInverseSTM(obj, stmInv); Rvector3 uplinkVderiv; GetRangeDerivative(uplinkLeg, stmInv, uplinkVderiv, false, 0, 1, false); // Downlink leg Rvector3 downlinkVderiv; GetRangeDerivative(downlinkLeg, stmInv, downlinkVderiv, false, 0, 1, false); // Add 'em up per eq 7.52 and 7.53 for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 0.5 * (uplinkVderiv[i] + downlinkVderiv[i]); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("Velocity Derivative: [%.12lf " "%.12lf %.12lf]\n", currentDerivatives[0][0], currentDerivatives[0][1], currentDerivatives[0][2]); #endif } else if (objPtr->GetParameterText(parameterID) == "CartesianX") { // Get the inverse of the orbit STM at the measurement epoch // Will need adjustment if stm changes Rmatrix stmInv(6,6); GetInverseSTM(obj, stmInv); Rvector6 uplinkDeriv; GetRangeDerivative(uplinkLeg, stmInv, uplinkDeriv, false); // Downlink leg Rvector6 downlinkDeriv; GetRangeDerivative(downlinkLeg, stmInv, downlinkDeriv, false); // Add 'em up per eq 7.52 and 7.53 for (Integer i = 0; i < 6; ++i) currentDerivatives[0][i] = 0.5 * (uplinkDeriv[i] + downlinkDeriv[i]); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("CartesianState Derivative: " "[%.12lf %.12lf %.12lf %.12lf %.12lf %.12lf]\n", currentDerivatives[0][0], currentDerivatives[0][1], currentDerivatives[0][2], currentDerivatives[0][3], currentDerivatives[0][4], currentDerivatives[0][5]); #endif } else if (objPtr->GetParameterText(parameterID) == "Bias") { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 1.0; } else { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 0.0; } } else if (objNumber == 0) // measurement model { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of the " "measurement model\n", objPtr->GetParameterText(parameterID).c_str()); #endif if (objPtr->GetParameterText(parameterID) == "Bias") { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 1.0; } } else { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of a non-" "Participant\n", objPtr->GetParameterText(parameterID).c_str()); #endif for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 0.0; } #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv =\n "); for (Integer i = 0; i < size; ++i) MessageInterface::ShowMessage(" %.12le",currentDerivatives[0][i]); MessageInterface::ShowMessage("\n"); #endif } return currentDerivatives; }
//------------------------------------------------------------------------------ bool Target::Initialize() { GmatBase *mapObj = NULL; cloneCount = 0; if ((mapObj = FindObject(solverName)) == NULL) { wxString errorString = wxT("Target command cannot find targeter \""); errorString += solverName; errorString += wxT("\""); throw CommandException(errorString, Gmat::ERROR_); } // Clone the targeter for local use #ifdef DEBUG_TARGET_INIT MessageInterface::ShowMessage (wxT("Target::Initialize() cloning mapObj <%p>'%s'\n"), mapObj, mapObj->GetName().c_str()); MessageInterface::ShowMessage (wxT("mapObj maxIter=%d\n"), mapObj->GetIntegerParameter(mapObj->GetParameterID(wxT("MaximumIterations")))); #endif // Delete the old cloned solver if (theSolver) { #ifdef DEBUG_MEMORY MemoryTracker::Instance()->Remove (theSolver, wxT("local solver", "Target::Initialize()"), wxT("deleting local cloned solver")); #endif delete theSolver; } theSolver = (Solver *)(mapObj->Clone()); if (theSolver != NULL) ++cloneCount; #ifdef DEBUG_MEMORY MemoryTracker::Instance()->Add (theSolver, theSolver->GetName(), wxT("Target::Initialize()"), wxT("theSolver = (Solver *)(mapObj->Clone())")); #endif theSolver->TakeAction(wxT("ResetInstanceCount")); mapObj->TakeAction(wxT("ResetInstanceCount")); theSolver->TakeAction(wxT("IncrementInstanceCount")); mapObj->TakeAction(wxT("IncrementInstanceCount")); if (theSolver->GetStringParameter(wxT("ReportStyle")) == wxT("Debug")) targeterInDebugMode = true; theSolver->SetStringParameter(wxT("SolverMode"), GetStringParameter(SOLVER_SOLVE_MODE)); theSolver->SetStringParameter(wxT("ExitMode"), GetStringParameter(SOLVER_EXIT_MODE)); // Set the local copy of the targeter on each node std::vector<GmatCommand*>::iterator node; GmatCommand *current; specialState = Solver::INITIALIZING; for (node = branch.begin(); node != branch.end(); ++node) { current = *node; #ifdef DEBUG_TARGET_COMMANDS Integer nodeNum = 0; #endif while ((current != NULL) && (current != this)) { #ifdef DEBUG_TARGET_COMMANDS MessageInterface::ShowMessage( wxT(" Target Command %d: %s\n"), ++nodeNum, current->GetTypeName().c_str()); #endif if ((current->GetTypeName() == wxT("Vary")) || (current->GetTypeName() == wxT("Achieve"))) current->SetRefObject(theSolver, Gmat::SOLVER, solverName); current = current->GetNext(); } } bool retval = SolverBranchCommand::Initialize(); if (retval == true) { // Targeter specific initialization goes here: if (FindObject(solverName) == NULL) { wxString errorString = wxT("Target command cannot find targeter \""); errorString += solverName; errorString += wxT("\""); throw CommandException(errorString); } retval = theSolver->Initialize(); } targeterInFunctionInitialized = false; return retval; }
//------------------------------------------------------------------------------ const std::vector<RealArray>& TDRSSTwoWayRange::CalculateMeasurementDerivatives( GmatBase *obj, Integer id) { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("TDRSSTwoWayRange::CalculateMeasurement" "Derivatives(%s, %d) called\n", obj->GetName().c_str(), id); #endif if (!initialized) InitializeMeasurement(); GmatBase *objPtr = NULL; Integer size = obj->GetEstimationParameterSize(id); Integer objNumber = -1; #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" ParameterSize = %d\n", size); #endif if (size <= 0) throw MeasurementException("The derivative parameter on derivative " "object " + obj->GetName() + "is not recognized"); // Check to see if obj is a participant for (UnsignedInt i = 0; i < this->participants.size(); ++i) { if (participants[i] == obj) { objPtr = participants[i]; objNumber = i + 1; #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Participant %s found\n", objPtr->GetName().c_str()); #endif break; } } // Or if it is the measurement model for this object if (obj->IsOfType(Gmat::MEASUREMENT_MODEL)) if (obj->GetRefObject(Gmat::CORE_MEASUREMENT, "") == this) { objPtr = obj; objNumber = 0; #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" The measurement is the object\n", objPtr->GetName().c_str()); #endif } if (objNumber == -1) throw MeasurementException( "TDRSSTwoWayRange error - object is neither participant nor " "measurement model."); RealArray oneRow; oneRow.assign(size, 0.0); currentDerivatives.clear(); currentDerivatives.push_back(oneRow); Integer parameterID = GetParmIdFromEstID(id, obj); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Looking up id %d\n", parameterID); #endif if (objPtr != NULL) { if (objNumber == 1) // participant number 1, either a GroundStation or a Spacecraft { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of Participant" " 1\n", objPtr->GetParameterText(parameterID).c_str()); #endif if (objPtr->GetParameterText(parameterID) == "Position") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() + " Position is not yet implemented"); } else if (objPtr->GetParameterText(parameterID) == "Velocity") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() + " Velocity is not yet implemented"); } else if (objPtr->GetParameterText(parameterID) == "CartesianX") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() + " CartesianState is not yet implemented"); } else if (objPtr->GetParameterText(parameterID) == "Bias") { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 1.0; } else { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. something " "independent, so zero\n"); #endif for (UnsignedInt i = 0; i < 3; ++i) currentDerivatives[0][i] = 0.0; } } else if (objNumber == 2) // participant 2, should be a TDRSS Spacecraft { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of Participant" " 1\n", objPtr->GetParameterText(parameterID).c_str()); #endif if (objPtr->GetParameterText(parameterID) == "Position") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() + " Position is not yet implemented"); } else if (objPtr->GetParameterText(parameterID) == "Velocity") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() + " Velocity is not yet implemented"); } else if (objPtr->GetParameterText(parameterID) == "CartesianX") { throw MeasurementException("Derivative w.r.t. " + participants[0]->GetName() + " CartesianState is not yet implemented"); } else if (objPtr->GetParameterText(parameterID) == "Bias") { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 1.0; } else { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. something " "independent, so zero\n"); #endif for (UnsignedInt i = 0; i < 3; ++i) currentDerivatives[0][i] = 0.0; } } else if (objNumber == 3) // participant 3, always a Spacecraft { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of Participant" " 3\n", objPtr->GetParameterText(parameterID).c_str()); #endif if (objPtr->GetParameterText(parameterID) == "Position") { // Get the inverse of the orbit STM at the measurement epoch // Will need adjustment if stm changes Rmatrix stmInv(6,6); GetInverseSTM(obj, stmInv); Rvector3 forwardlinkRderiv; GetRangeDerivative(forwardlinkLeg, stmInv, forwardlinkRderiv, false, 1, 2, true, false); // Downlink leg Rvector3 backlinkRderiv; GetRangeDerivative(backlinkLeg, stmInv, backlinkRderiv, false, 1, 2, true, false); // Add 'em up per eq tbd for (Integer i = 0; i < 3; ++i) currentDerivatives[0][i] = 0.5 * (forwardlinkRderiv[i] + backlinkRderiv[i]); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("Position Derivative: [%.12lf " "%.12lf %.12lf]\n", currentDerivatives[0][0], currentDerivatives[0][1], currentDerivatives[0][2]); #endif } else if (objPtr->GetParameterText(parameterID) == "Velocity") { // Get the inverse of the orbit STM at the measurement epoch // Will need adjustment if stm changes Rmatrix stmInv(6,6); GetInverseSTM(obj, stmInv); Rvector3 forwardlinkVderiv; GetRangeDerivative(forwardlinkLeg, stmInv, forwardlinkVderiv, false, 1, 2, false); // Downlink leg Rvector3 backlinkVderiv; GetRangeDerivative(backlinkLeg, stmInv, backlinkVderiv, false, 1, 2, false); // Add 'em up per eq tbd for (Integer i = 0; i < 3; ++i) currentDerivatives[0][i] = 0.5 * (forwardlinkVderiv[i] + backlinkVderiv[i]); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("Velocity Derivative: [%.12lf " "%.12lf %.12lf]\n", currentDerivatives[0][0], currentDerivatives[0][1], currentDerivatives[0][2]); #endif } else if (objPtr->GetParameterText(parameterID) == "CartesianX") { // Get the inverse of the orbit STM at the measurement epoch // Will need adjustment if stm changes Rmatrix stmInv(6,6); GetInverseSTM(obj, stmInv); Rvector6 forwardlinkDeriv; GetRangeDerivative(forwardlinkLeg, stmInv, forwardlinkDeriv, false, 1, 2); // Downlink leg Rvector6 backlinkDeriv; GetRangeDerivative(backlinkLeg, stmInv, backlinkDeriv, false, 1, 2); // Add 'em up per eq tbd for (Integer i = 0; i < 6; ++i) currentDerivatives[0][i] = 0.5 * (forwardlinkDeriv[i] + backlinkDeriv[i]); #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage("CartesianState Derivative: " "[%.12lf %.12lf %.12lf %.12lf %.12lf %.12lf]\n", currentDerivatives[0][0], currentDerivatives[0][1], currentDerivatives[0][2], currentDerivatives[0][3], currentDerivatives[0][4], currentDerivatives[0][5]); #endif } else if (objPtr->GetParameterText(parameterID) == "Bias") { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 1.0; } else { for (UnsignedInt i = 0; i < 3; ++i) currentDerivatives[0][i] = 0.0; } } else if (objNumber == 0) // measurement model { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of the " "measurement model\n", objPtr->GetParameterText(parameterID).c_str()); #endif if (objPtr->GetParameterText(parameterID) == "Bias") { for (Integer i = 0; i < size; ++i) currentDerivatives[0][i] = 1.0; } } else { #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv is w.r.t. %s of a non-" "Participant\n", objPtr->GetParameterText(parameterID).c_str()); #endif for (UnsignedInt i = 0; i < 3; ++i) currentDerivatives[0][i] = 0.0; } #ifdef DEBUG_DERIVATIVES MessageInterface::ShowMessage(" Deriv =\n "); for (Integer i = 0; i < size; ++i) MessageInterface::ShowMessage(" %.12le",currentDerivatives[0][i]); MessageInterface::ShowMessage("\n"); #endif } return currentDerivatives; }
//------------------------------------------------------------------------------ // void SaveChildPositionAndSize() //------------------------------------------------------------------------------ void GmatMdiChildFrame::SaveChildPositionAndSize() { if (mCanSaveLocation == false) return; if (IsIconized()) return; // Get the position and size of the window first #ifdef __WXMAC__ Integer screenWidth = wxSystemSettings::GetMetric(wxSYS_SCREEN_X); Integer screenHeight = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y); #else Integer screenWidth; Integer screenHeight; GmatAppData::Instance()->GetMainFrame()->GetActualClientSize(&screenWidth, &screenHeight, true); // Since GmatMainFrame::GetActualClientSize() subtracts one, add one here (LOJ: 2012.07.23) screenWidth++; screenHeight++; #endif bool isMinimized = IsIconized(), isMaximized = IsMaximized(); if (isMinimized) Iconize(false); else if (isMaximized) Maximize(false); int tmpX = -1, tmpY = -1; int tmpW = -1, tmpH = -1; GetPosition(&tmpX, &tmpY); GetSize(&tmpW, &tmpH); Rvector upperLeft(2, ((Real) tmpX /(Real) screenWidth), ((Real) tmpY /(Real) screenHeight)); Rvector childSize(2, ((Real) tmpW /(Real) screenWidth), ((Real) tmpH /(Real) screenHeight)); if (isMinimized) Iconize(); else if (isMaximized) Maximize(); #ifdef DEBUG_PERSISTENCE // ======================= begin temporary ============================== MessageInterface::ShowMessage("*** Size of SCREEN %s is: width = %d, height = %d\n", mChildName.WX_TO_C_STRING, screenWidth, screenHeight); MessageInterface::ShowMessage("Position of View plot %s is: x = %d, y = %d\n", mChildName.WX_TO_C_STRING, tmpX, tmpY); MessageInterface::ShowMessage("Size of View plot %s is: width = %d, height = %d\n", mChildName.WX_TO_C_STRING, tmpW, tmpH); // ======================= end temporary ============================== #endif if ((mItemType == GmatTree::OUTPUT_REPORT) || (mItemType == GmatTree::OUTPUT_CCSDS_OEM_FILE ) || (mItemType == GmatTree::OUTPUT_ORBIT_VIEW) || (mItemType == GmatTree::OUTPUT_XY_PLOT) || (mItemType == GmatTree::OUTPUT_GROUND_TRACK_PLOT) // We'll want to add the event reports eventually, but they are not subscriber based //|| (mItemType == GmatTree::EVENT_REPORT) ) { GmatBase *obj = theGuiInterpreter->GetConfiguredObject(mChildName.c_str()); #ifdef DEBUG_FUNCTION // Check if child name is the configured object name MessageInterface::ShowMessage ("GmatMdiChildFrame::SaveChildPositionAndSize() the child '%s' %s a " "configured object, obj = <%p>[%s]'%s'\n", mChildName.WX_TO_C_STRING, obj ? "is" : "is not", obj, obj ? obj->GetTypeName().c_str() : "NULL", obj ? obj->GetName().c_str() : "NULL"); #endif if (!obj) { // Just return if child is not a configured subscriber,ie, // plotting from GMAT function (LOJ: 2015.06.26) #ifdef DEBUG_FUNCTION MessageInterface::ShowMessage ("**** WARNING **** GmatMdiChildFrame::SaveChildPositionAndSize() " "will not save position and size for unconfigured subscriber '%s'\n", mChildName.WX_TO_C_STRING); #endif return; } else if (!obj->IsOfType("Subscriber")) { #ifdef DEBUG_PERSISTENCE MessageInterface::ShowMessage ("**** WARNING **** GmatMdiChildFrame::SaveChildPositionAndSize() " "cannot not save position and size for non-subscriber '%s'\n", mChildName.WX_TO_C_STRING); #endif SubscriberException se; se.SetDetails("Cannot set position and size for non-subscriber '%s'"); throw se; } Subscriber *sub = (Subscriber*) obj; #ifdef DEBUG_PERSISTENCE MessageInterface::ShowMessage("...... Now saving plot data to %s:\n", (sub->GetName()).c_str()); MessageInterface::ShowMessage(" Upper left = %12.10f %12.10f\n", upperLeft[0], upperLeft[1]); MessageInterface::ShowMessage(" Size = %12.10f %12.10f\n", childSize[0], childSize[1]); MessageInterface::ShowMessage(" RelativeZOrder = %d\n", relativeZOrder); #endif sub->SetRvectorParameter(sub->GetParameterID("UpperLeft"), upperLeft); sub->SetRvectorParameter(sub->GetParameterID("Size"), childSize); sub->SetIntegerParameter(sub->GetParameterID("RelativeZOrder"), relativeZOrder); sub->SetBooleanParameter(sub->GetParameterID("Maximized"), isMaximized); } else if (mItemType == GmatTree::MISSION_TREE_UNDOCKED) { // get the config object wxFileConfig *pConfig; pConfig = (wxFileConfig *) GmatAppData::Instance()->GetPersonalizationConfig(); std::stringstream location(""); location << upperLeft[0] << " " << upperLeft[1]; std::stringstream size(""); size << childSize[0] << " " << childSize[1]; pConfig->Write("/MissionTree/UpperLeft", location.str().c_str()); pConfig->Write("/MissionTree/Size", size.str().c_str()); pConfig->Write("/MissionTree/IsMaximized", isMaximized); pConfig->Write("/MissionTree/IsMinimized", isMinimized); } else if (mItemType == GmatTree::SCRIPT_FILE) { // get the config object wxFileConfig *pConfig; pConfig = (wxFileConfig *) GmatAppData::Instance()->GetPersonalizationConfig(); std::stringstream location(""); location << upperLeft[0] << " " << upperLeft[1]; std::stringstream size(""); size << childSize[0] << " " << childSize[1]; pConfig->Write("/ScriptEditor/UpperLeft", location.str().c_str()); pConfig->Write("/ScriptEditor/Size", size.str().c_str()); pConfig->Write("/ScriptEditor/IsMaximized", isMaximized); pConfig->Write("/ScriptEditor/IsMinimized", isMinimized); } }
//------------------------------------------------------------------------------ // int main(int argc, char *argv[]) //------------------------------------------------------------------------------ int main(int argc, char *argv[]) { cout << "=-=-=-=-=-=-= TEST coordinate system ....." << endl; cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; cout.setf(ios::fixed); cout.precision(16); std::string eopFileName = "/GMAT/dev/datafiles/EOPFiles/eopc04.62-now"; std::string nutFileName = "/GMAT/dev/datafiles/ITRF/NUTATION.DAT"; std::string planFileName = "/GMAT/dev/datafiles/ITRF/NUT85.DAT"; std::string SLPFileName = "/GMAT/dev/datafiles/mac/DBS_mn2000.dat"; std::string DEFileName = "/GMAT/dev/datafiles/DEascii/macp1941.405"; std::string LeapFileName = "/GMAT/dev/datafiles/tai-utcFiles/tai-utc.dat"; cout << "\n==> First, test the AxisSystemFactory <==" << endl; AxisSystemFactory *asf = new AxisSystemFactory(); cout << "AxisSystemFactory created .........." << endl; cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; std::string AXES_TYPE[13] = { "MJ2000Eq", "MJ2000Ec", "TOEEq", "TOEEc", "MOEEq", "MOEEc", "TODEq", "TODEc", "MODEq", "MODEc", "ObjectReferenced", "Equator", "BodyFixed", }; AxisSystem *as; MJ2000EqAxes* mj; MJ2000EqAxes* mj2; //MJ2000EcAxes* mj2; std::string tmpStr = ""; //for (int i = 0; i < 13 ; i++) for (int i = 0; i < 2 ; i++) // only do the first one, for now { tmpStr = AXES_TYPE[i] + "1"; as = asf->CreateAxisSystem(AXES_TYPE[i], tmpStr); if (as) { cout << "AxisSystem of type " << AXES_TYPE[i] << " was created with name " << tmpStr << endl; if (i > 1) delete as; else if (i == 0) mj = (MJ2000EqAxes*) as; //else mj2 = (MJ2000EcAxes*) as; } else cout << "NO " << AXES_TYPE[i] << " AxisSystem created." << endl; } cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; if (mj) { cout << "MJ2000EqAxes object exists with name " << mj->GetName() << " and type " << mj->GetTypeName() << endl; } mj2 = (MJ2000EqAxes*)(asf->CreateAxisSystem("MJ2000Eq","MJ2000Eq2")); if (mj2) { cout << "MJ20002 object exists with name " << mj2->GetName() << " and type " << mj2->GetTypeName() << endl; } try { LeapSecsFileReader* ls = new LeapSecsFileReader(LeapFileName); ls->Initialize(); EopFile *eop = new EopFile(eopFileName); eop->Initialize(); ItrfCoefficientsFile* itrf = new ItrfCoefficientsFile(nutFileName, planFileName); itrf->Initialize(); //bf->SetEopFile(eop); //bf->SetCoefficientsFile(itrf); TimeConverterUtil::SetLeapSecsFileReader(ls); TimeConverterUtil::SetEopFile(eop); } catch (BaseException &bbee) { cout << "ERROR !!!!! " << bbee.GetMessage() << endl; } SolarSystem* ss; Star* sol; Planet* earth; Planet* mars; Planet* jupiter; Moon* luna; std::string j2000BN = ""; SpacePoint* j2000B = NULL; try { cout << "\n==> Create the solar system <==" << endl; ss = new SolarSystem("TheSS"); cout << "solar system name = " << ss->GetName() << endl; cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; earth = (Planet*) ss->GetBody(SolarSystem::EARTH_NAME); cout << "earth name = " << earth->GetName() << endl; cout << "earth's type name is " << earth->GetTypeName() << endl; sol = (Star*) ss->GetBody(SolarSystem::SUN_NAME); cout << "sol name = " << sol->GetName() << endl; cout << "sol's type name is " << sol->GetTypeName() << endl; cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; luna = (Moon*) ss->GetBody(SolarSystem::MOON_NAME); cout << "luna name = " << luna->GetName() << endl; cout << "luna's type name is " << luna->GetTypeName() << endl; mars = (Planet*) ss->GetBody(SolarSystem::MARS_NAME); cout << "mars name = " << mars->GetName() << endl; cout << "mars's type name is " << mars->GetTypeName() << endl; jupiter = (Planet*) ss->GetBody(SolarSystem::JUPITER_NAME); cout << "jupiter name = " << jupiter->GetName() << endl; cout << "jupiter's type name is " << jupiter->GetTypeName() << endl; SlpFile* anSLP; DeFile* aDE; try { std::string SLPFileName = "/GMAT/dev/datafiles/mac/DBS_mn2000.dat"; std::string DEFileName = "/GMAT/dev/datafiles/DEascii/macp1941.405"; anSLP = new SlpFile(SLPFileName); aDE = new DeFile(Gmat::DE405,DEFileName); cout << "the SLP file is : " << anSLP->GetName() << endl; cout << "the DE file is : " << aDE->GetName() << endl; } catch (BaseException &be1) { cout << "ERROR with ephem file -> " << be1.GetMessage() << endl; } ss->SetSource(Gmat::SLP); ss->SetSourceFile(anSLP); //ss->SetSource(Gmat::DE_405); //ss->SetSourceFile(aDE); // set the j2000Body j2000BN = "Earth"; j2000B = earth; sol->SetJ2000BodyName(j2000BN); sol->SetJ2000Body(j2000B); earth->SetJ2000BodyName(j2000BN); earth->SetJ2000Body(j2000B); luna->SetJ2000BodyName(j2000BN); luna->SetJ2000Body(j2000B); mars->SetJ2000BodyName(j2000BN); mars->SetJ2000Body(j2000B); jupiter->SetJ2000BodyName(j2000BN); jupiter->SetJ2000Body(j2000B); } catch (GmatBaseException &ex) { cout << "Some kind of error ..........." << endl; } bool isOK = false; cout << "\n==> Now creating CoordinateSystems <==" << endl; CoordinateSystem* mj2000 = new CoordinateSystem("", "CoordSystemMJ2000"); cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; mj2000->SetSolarSystem(ss); mj2000->SetStringParameter("OriginName","Earth"); mj2000->SetStringParameter("J2000BodyName",j2000BN); isOK = mj2000->SetRefObject(earth,Gmat::SPACE_POINT,"Earth"); isOK = mj2000->SetRefObject(j2000B,Gmat::SPACE_POINT,j2000BN); isOK = mj2000->SetRefObject(mj, Gmat::AXIS_SYSTEM, mj->GetName()); if (isOK) cout << "It seems to have been set OK!!!!!!!!!!!" << endl; else cout << "ERROR setting axis system for coordinate system!!!!!" << endl; mj2000->Initialize(); CoordinateSystem* mj20002 = new CoordinateSystem("", "CoordSystemMJ2000eq"); cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; mj20002->SetSolarSystem(ss); mj20002->SetStringParameter("OriginName",SolarSystem::SUN_NAME); mj20002->SetStringParameter("J2000BodyName",j2000BN); isOK = mj20002->SetRefObject(sol,Gmat::SPACE_POINT,SolarSystem::SUN_NAME); //isOK = mj20002->SetRefObject(mars,Gmat::SPACE_POINT,"Earth"); isOK = mj20002->SetRefObject(j2000B,Gmat::SPACE_POINT,j2000BN); isOK = mj20002->SetRefObject(mj2, Gmat::AXIS_SYSTEM, mj2->GetName()); if (isOK) cout << "It seems to have been set OK!!!!!!!!!!!" << endl; else cout << "ERROR setting axis system for coordinate system!!!!!" << endl; mj20002->Initialize(); try { cout << "Now checking CoordinateSystems' AxisSystems ..." << endl; GmatBase *mjObj = mj2000->GetRefObject(Gmat::AXIS_SYSTEM, mj->GetName()); if (mjObj) { cout << "mj2000 has a pointer to the axis system " << mjObj->GetName() << " of type " << mjObj->GetTypeName() << endl; } else cout << "ERROR - no pointer to the axis system ????????" << endl; GmatBase *mjObj2 = mj20002->GetRefObject(Gmat::AXIS_SYSTEM, mj2->GetName()); if (mjObj2) { cout << "mj2000ec has a pointer to the axis system " << mjObj2->GetName() << " of type " << mjObj2->GetTypeName() << endl; } else cout << "ERROR - no pointer to the axis system ????????" << endl; } catch (BaseException &be) { cout << "ERROR ------------- : " << be.GetMessage() << endl; } CoordinateConverter *cc = new CoordinateConverter(); //cc->SetJ2000BodyName("Earth"); //cc->SetJ2000Body(earth); //Rvector6 theState(15999.99999999998,0.0,0.0, // 0.0, 3.8662018270519716, 3.8662018270519711); Rvector6 theState(18407337.2437560,146717552.364272,2436998.6080801622, -29.85775713588113, 3.7988731566283533, -0.0883535323140749); Rvector6 outState; A1Mjd atTime1; Real ut1_utc = 0.456647; Real atTime = atTime1.UtcMjdToA1Mjd(ModifiedJulianDate(2012,1,1,0,0,ut1_utc)); A1Mjd testTime(atTime); cout << "The test time is " << testTime.Get() << endl; cout << "The test Rvector6 is " << theState << endl; cout << "About to try to convert!!!!!" << endl; try { cc->Convert(testTime,theState, mj2000, outState, mj20002); cout << "The output state is : " << outState << endl; } catch (BaseException &cse) { cout << "ERROR: " << cse.GetMessage() << endl; } cout << "Now delete SolarSystem ............." << endl; delete ss; cout << "Now delete CoordinateConverter ............." << endl; delete cc; cout << "Now delete CoordinateSystem (and its AxisSystem) ............." << endl; delete mj2000; cout << "Now delete other CoordinateSystem (and its AxisSystem) ............." << endl; delete mj20002; //cout << "Now delete AxisSystem ............." << endl; //delete mj; cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; cout << "Now delete everything else ............." << endl; delete asf; cout << " ------ number of objects instantiated = " << GmatBase::GetInstanceCount() << endl; cout << "=-=-=-=-=-=-= END TEST coordinate system ....." << endl; }
//------------------------------------------------------------------------- // This function is used to verify GroundStation's added hardware. // // return true if there is no error, false otherwise. //------------------------------------------------------------------------- // made changes by Tuan Nguyen bool GroundStation::VerifyAddHardware() { Gmat::ObjectType type; std::string subTypeName; GmatBase* obj; // 1. Verify all hardware in hardwareList are not NULL: for(ObjectArray::iterator i= hardwareList.begin(); i != hardwareList.end(); ++i) { obj = (*i); if (obj == NULL) { MessageInterface::ShowMessage("***Error***:One element of hardwareList = NULL\n"); return false; } } // 2. Verify primary antenna to be in hardwareList: // 2.1. Create antenna list from hardwareList for searching: // extract all antenna from hardwareList and store to antennaList ObjectArray antennaList; for(ObjectArray::iterator i= hardwareList.begin(); i != hardwareList.end(); ++i) { obj = (*i); subTypeName = obj->GetTypeName(); if (subTypeName == "Antenna") antennaList.push_back(obj); } // 2.2. Verify primary antenna of Receiver, Transmitter, and Transponder: GmatBase* antenna; GmatBase* primaryAntenna; std::string primaryAntennaName; bool verify = true; for(ObjectArray::iterator i= hardwareList.begin(); i != hardwareList.end(); ++i) { obj = (*i); type = obj->GetType(); if (type == Gmat::HARDWARE) { subTypeName = obj->GetTypeName(); if ((subTypeName == "Transmitter")|| (subTypeName == "Receiver")|| (subTypeName == "Transponder")) { // Get primary antenna: primaryAntennaName = obj->GetRefObjectName(Gmat::HARDWARE); primaryAntenna = obj->GetRefObject(Gmat::HARDWARE,primaryAntennaName); bool check; if (primaryAntenna == NULL) { MessageInterface::ShowMessage ("***Error***:primary antenna of %s in %s's AddHardware list is NULL \n", obj->GetName().c_str(), this->GetName().c_str()); check = false; } else { // Check primary antenna of transmitter, receiver, or transponder is in antenna list: check = false; for(ObjectArray::iterator j= antennaList.begin(); j != antennaList.end(); ++j) { antenna = (*j); if (antenna == primaryAntenna) { check = true; break; } else if (antenna->GetName() == primaryAntenna->GetName()) { MessageInterface::ShowMessage ("Primary antenna %s of %s is a clone of an antenna in %s's AddHardware\n", primaryAntenna->GetName().c_str(), obj->GetName().c_str(), this->GetName().c_str()); } } if (check == false) { // Display error message: MessageInterface::ShowMessage ("***Error***:primary antenna of %s is not in %s's AddHardware\n", obj->GetName().c_str(), this->GetName().c_str()); } } verify = verify && check; } } } return verify; }
//------------------------------------------------------------------------------ // void LoadData() //------------------------------------------------------------------------------ void CallFunctionPanel::LoadData() { #ifdef DEBUG_CALLFUNCTION_PANEL_LOAD MessageInterface::ShowMessage(wxT("CallFunctionPanel::LoadData() entered\n")); #endif // Set the pointer for the "Show Script" button mObject = theCommand; int id = theCommand->GetParameterID(wxT("FunctionName")); wxString functionName = theCommand->GetStringParameter(id); // If function name is not in the ComboBox list, add blank if (!theFunctionComboBox->SetStringSelection(functionName.c_str())) { theFunctionComboBox->Append(wxT("")); theFunctionComboBox->SetStringSelection(wxT("")); } #ifdef DEBUG_CALLFUNCTION_PANEL_LOAD MessageInterface::ShowMessage (wxT(" Function name is: <%s>\n"), functionName.c_str()); #endif // get input parameters StringArray inputList = theCommand->GetStringArrayParameter(wxT("AddInput")); mNumInput = inputList.size(); mInputWxStrings.Clear(); #ifdef DEBUG_CALLFUNCTION_PANEL_LOAD MessageInterface::ShowMessage (wxT(" Found %d input parameters:\n"), mNumInput); for (StringArray::iterator i = inputList.begin(); i != inputList.end(); ++i) MessageInterface::ShowMessage(wxT(" '%s'\n"), i->c_str()); #endif if (mNumInput > 0) { wxString *inputNames = new wxString[mNumInput]; GmatBase *param; wxString cellValue = wxT(""); wxString delimiter = wxT(", "); for (int i=0; i<mNumInput; i++) { inputNames[i] = inputList[i].c_str(); #ifdef DEBUG_CALLFUNCTION_PANEL_LOAD MessageInterface::ShowMessage(wxT(" Looking up ") + inputList[i] + wxT("\n")); #endif param = theGuiInterpreter->GetConfiguredObject(inputList[i]); if (i == mNumInput-1) delimiter = wxT(""); if (param != NULL) { cellValue = cellValue + param->GetName().c_str() + delimiter; mInputWxStrings.Add(param->GetName().c_str()); } } #ifdef __USE_GRID_FOR_INPUT_OUTPUT__ theInputGrid->SetCellValue(0, 0, cellValue); #else theInputTextCtrl->SetValue(cellValue); #endif delete [] inputNames; } // get output parameters StringArray outputList = theCommand->GetStringArrayParameter(wxT("AddOutput")); mNumOutput = outputList.size(); mOutputWxStrings.Clear(); #ifdef DEBUG_CALLFUNCTION_PANEL_LOAD MessageInterface::ShowMessage (wxT(" Found %d output parameters:\n"), mNumOutput); for (StringArray::iterator i = outputList.begin(); i != outputList.end(); ++i) MessageInterface::ShowMessage(wxT(" '%s'\n"), i->c_str()); #endif if (mNumOutput > 0) { wxString *outputNames = new wxString[mNumOutput]; GmatBase *param; wxString cellValue = wxT(""); wxString delimiter = wxT(", "); for (int i=0; i<mNumOutput; i++) { outputNames[i] = outputList[i].c_str(); #ifdef DEBUG_CALLFUNCTION_PANEL_LOAD MessageInterface::ShowMessage(wxT(" Looking up ") + outputList[i] + wxT("\n")); #endif param = theGuiInterpreter->GetConfiguredObject(outputList[i]); if (i == mNumOutput-1) delimiter = wxT(""); if (param != NULL) { cellValue = cellValue + param->GetName().c_str() + delimiter; mOutputWxStrings.Add(param->GetName().c_str()); } } #ifdef __USE_GRID_FOR_INPUT_OUTPUT__ theOutputGrid->SetCellValue(0, 0, cellValue); #else theOutputTextCtrl->SetValue(cellValue); #endif delete [] outputNames; } }