SplitStreamFileFormatReader::SplitStreamFileFormatReader(QObject *parent): LogFileFormatReader(parent) { string temp_accel_names[] = {"Gps", "Compass", "Odometry", "Falling", "Fallen", "MotionGetupActive", "LLegEndEffector", "RLegEndEffector"}; vector<string> sensor_names(temp_accel_names, temp_accel_names + sizeof(temp_accel_names)/sizeof(*temp_accel_names)); m_tempSensors.addSensors(sensor_names); setKnownDataTypes(); m_fileGood = false; }
mystr Sensitivity::GetHeaderString() const //returns header for output file { mystr str("%HOTINT_Sensitivity_Analysis_Solution_File\n"); if(mbs->GetModelFunctionsIndex0()!=-1) { str = str + "%" + mbs->GetModelsLibrary()->GetModelInterface(mbs->GetModelFunctionsIndex0())->GetMBSModelName() + "\n"; } time_t t; time(&t); struct tm *ts; ts = localtime(&t); // get current date and time str = str + "%" + asctime(ts); str = str + "%Comment: " + mbs->GetSolSet().sol_file_header_comment + "\n"; str = str + "%Compute sensitivity of sensor values with respect to parameters\n"; mystr colnumbers, colnames; // sensors str = str + "%Sensors: (rows of sensitivity matrix)\n"; colnames = "%"; colnumbers = "%"; for(int i=1; i<=sensor_names.Length();i++) { colnames = colnames + *sensor_names(i) + mystr(" "); colnumbers = colnumbers + mystr(i); for(int j=colnumbers.Length(); j<colnames.Length(); j++) { colnumbers = colnumbers + " "; } } str = str + colnumbers + mystr("\n"); str = str + colnames + mystr("\n"); // parameters str = str + "%Parameters: (columns of sensitivity matrix)\n"; colnumbers = "%"; colnames = "%"; for(int i=1; i<=param_names.Length();i++) { colnames = colnames + *param_names(i) + mystr(" "); colnumbers = colnumbers + mystr(i); for(int j=colnumbers.Length(); j<colnames.Length(); j++) { colnumbers = colnumbers + " "; } } str = str + colnumbers + mystr("\n"); str = str + colnames + mystr("\n"); return str; }
void Sensitivity::Init() { mbs->OpenFiles(0); //open files already here, do not append ElementDataContainer* edc = mbs->GetMBS_EDC_Options(); mystr method = edc->TreeGetString("SolverOptions.Sensitivity.method"); // choose type of analysis if(method.Compare(mystr("Forward"))) { type_diff = 1; // 1 ... df/dx =~ (f(x+dx)-f(x))/dx forward differentiation } else if(method.Compare(mystr("Backward"))) { type_diff = -1; // -1 ... df/dx =~ (f(x)-f(x-dx))/dx backward differentiation } else { type_diff = 0; // 0 ... df/dx =~ (f(x+dx/2)-f(x-dx/2))/dx central differentiation } // get parameter names if(edc->TreeGetInt("SolverOptions.Sensitivity.use_optimization_parameters")) { number_of_params = edc->TreeGetInt("SolverOptions.Optimization.Parameters.number_of_params"); for (int col=1; col <= number_of_params; col++) { mystr str = edc->TreeGetString(mystr("SolverOptions.Optimization.Parameters.param_name")+mystr(col)); param_names(col) = new mystr(str); } } else { number_of_params = edc->TreeGetInt("SolverOptions.Sensitivity.Parameters.number_of_params"); for (int col=1; col <= number_of_params; col++) { mystr str = edc->TreeGetString(mystr("SolverOptions.Sensitivity.Parameters.param_name")+mystr(col)); param_names(col) = new mystr(str); } } abs_diff_val = edc->TreeGetDouble("SolverOptions.Sensitivity.num_diff_parameter_absolute"); rel_diff_val = edc->TreeGetDouble("SolverOptions.Sensitivity.num_diff_parameter_relative"); NCompSensors = 0; // sensor with computation value (case use_final_sensor_values == 0) for(int i = 1; i<=mbs->NSensors();i++) { mystr str = ""; if(mbs->GetMBS_EDC_Options()->TreeGetInt("SolverOptions.Sensitivity.use_final_sensor_values",0)) { str = mbs->GetSensor(i).GetSensorName(); sensor_names(i) = new mystr(str); // store names for header } else { if(mbs->GetSensor(i).HasSensorProcessingEvaluationData()) { str = mbs->GetSensor(i).GetSensorName(); NCompSensors++; sensor_names(NCompSensors) = new mystr(str); // store names for header } } } mbs->SolParFile() << GetHeaderString(); // write header into output file (use sensor_names and parameter_names) }