int CMSaveSimulation::ReliabilitySeries(const CMString& fname) { unsigned i; if (!open_file(fname)) return -1; wchar_t buffer[128]; get_data_from_simulation(); int oldformat = CMTime::SetOutputFormat(simincunits); long row=0; long nrows = 1 + relseries_records; for (i=0;i<reliability->Targets();i++) { const wchar_t* tname = reliability->Target(i)->GetString().c_str(); for (CMTime tm=outbeg;tm<=outend;tm.inc(simincsteps,simincunits),row++) { output_item(OutReliabilitySeries,tname,row,0,maxtargetlength,0); output_item(OutReliabilitySeries,_wtof(tm.GetString(buffer, 128)),row,1,fieldwidth,0); output_item(OutReliabilitySeries,reliability->FailPct(tm,i),row,2,fieldwidth,1); output_record_end(row); } } output_footer(OutReliabilitySeries); CMTime::SetOutputFormat(oldformat); delete fout; fout=0; return 0; }
int CMSaveSimulation::Outcomes(const CMString& fname) { if (!open_file(fname)) return -1; if (_aggresults) delete[] _aggresults; if (_aggindex) delete[] _aggindex; _aggresults = new float[arrayindex.Count()]; _aggindex = new unsigned[arrayindex.Count()]; get_data_from_simulation(); output_item(OutRealizations, L"Trial", 0, 0, fieldwidth, 0); output_item(OutRealizations, L"Period", 0, 1, fieldwidth, 0); long row = 0; for (unsigned i = 0; i < arrayindex.Count(); i++) { _aggindex[i] = arrayindex[i]->GetIndex(); output_item(OutRealizations, array->GetVariableName(arrayindex[i]->GetIndex()).c_str(), 0, i + 2, fieldwidth, arrayindex[i]->IsCostVariable() ? _costPrecision : _precision); } output_record_end(row++); int oldformat = CMTime::SetOutputFormat(outincunits); long nrows = 1 + realization_records; long trialno; CMTime tm; if (state & rSortByTrial) { for (trialno = trialbeg; trialno <= trialend; trialno++) { for (tm = outbeg; tm <= outend; tm.inc(outincsteps, outincunits)) output_realizations_record(tm, trialno, row++); } } else { for (tm = outbeg; tm <= outend; tm.inc(outincsteps, outincunits)) { for (trialno = trialbeg; trialno <= trialend; trialno++) output_realizations_record(tm, trialno, row++); } } output_footer(OutRealizations); delete[] _aggresults; delete[] _aggindex; _aggresults = 0; _aggindex = 0; delete fout; fout = 0; CMNotifier::Notify(CMNotifier::INFO, L""); CMTime::SetOutputFormat(oldformat); return 0; }
void CMSaveSimulation::output_realizations_record(const CMTime& t,long trialno,long row) { wchar_t buffer[128]; CMTime tm = get_realizations(t,trialno); output_item(OutRealizations,trialno+1,row,0,fieldwidth,0); output_item(OutRealizations,_wtof(tm.GetString(buffer, 128)),row,1,fieldwidth,0); for (unsigned i = 0; i < arrayindex.Count(); i++) output_item(OutRealizations, arrayindex[i]->GetValue(), row, i + 2, fieldwidth, arrayindex[i]->IsCostVariable() ? _costPrecision : _precision); //arrayindex[i]->units->Precision()); ***TODO Change how precision is obtained output_record_end(row); }
static int read_files(const std::vector<std::string> & files, const parameter_parser<T> & params) { if (!files.size()) { std::cerr << "No input files specified" << std::endl; usage(1); return 1; } int result = 0; for (std::vector<std::string>::const_iterator i = files.begin(); i != files.end(); ++i) { std::string path = *i; tpie::stream_header_t header = get_stream_header(path); if (params.m_verbose) { std::clog << "Path: " << path << '\n' << "Header version: " << header.version << '\n' << "Item size: " << header.itemSize << '\n' << "User data size: " << header.userDataSize << '\n' << "Size: " << header.size << '\n' << std::flush; } tpie::file_stream<T> fs; try { fs.open(path, tpie::access_read, static_cast<tpie::memory_size_type>(header.userDataSize)); } catch (const tpie::stream_exception & e) { std::cerr << "Couldn't open " << path << ": " << e.what() << std::endl; result = 1; continue; } while (fs.can_read()) { output_item(fs.read()); } fs.close(); } return result; }
void CMSaveSimulationAscii::output_item(int which,double val,long row,long col,int width,int prec) { wchar_t buffer[128]; swprintf_s(buffer, 128, L"%.*f",prec,val); roundstring(buffer, prec); output_item(which, buffer, row, col, width, prec); //swprintf_s(buffer, 128, L"%.*f",prec,val); //output_item(which,buffer,row,col,width,prec); }
static void output_list( fields *info, FILE *outptr, convert *c, int nc ) { int i, n; for ( i=0; i<nc; ++i ) { n = fields_find( info, c[i].oldtag, c[i].code ); if ( n!=-1 ) output_item( info, outptr, c[i].newtag, c[i].prefix, n, 0 ); } }
int CMSaveSimulation::Summary(const CMString& fname) { unsigned i; if (!open_file(fname)) return -1; wchar_t buffer[128]; get_data_from_simulation(); long row = 0; int oldformat = CMTime::SetOutputFormat(simincunits); long nrows = 1 + summary_records; for (i = 0; i < accumindex.Count(); i++) { double val; unsigned varindex = accumindex[i]->GetIndex(); const wchar_t* vname = _accum->GetVariableName(varindex).c_str(); for (CMTime tm = outbeg; tm <= outend; tm.inc(simincsteps, simincunits), row++) { output_item(OutSummary, vname, row, 0, maxnamelength, 0); output_item(OutSummary, _wtof(tm.GetString(buffer, 128)), row, 1, fieldwidth, 0); for (int j = 0; j < 4; j++) { switch (j) { case 0: val = _accum->Mean(tm, varindex); break; case 1: val = _accum->StdDev(tm, varindex); break; case 2: val = _accum->Min(tm, varindex); break; case 3: val = _accum->Max(tm, varindex); break; } output_item(OutSummary, val, row, j + 2, fieldwidth, accumindex[i]->IsCostVariable() ? _costPrecision : _precision); } output_record_end(row); } } output_footer(OutSummary); CMTime::SetOutputFormat(oldformat); delete fout; fout = 0; return 0; }
static void output_thesisdetails( fields *info, FILE *outptr, int type ) { char *tag; int i, n; if ( type==TYPE_PHDTHESIS ) output_fixed( outptr, "b:ThesisType", "Ph.D. Thesis", 0 ); else if ( type==TYPE_MASTERSTHESIS ) output_fixed( outptr, "b:ThesisType", "Masters Thesis", 0 ); n = fields_num( info ); for ( i=0; i<n; ++i ) { tag = fields_tag( info, i, FIELDS_CHRP ); if ( strcasecmp( tag, "DEGREEGRANTOR" ) && strcasecmp( tag, "DEGREEGRANTOR:ASIS") & strcasecmp( tag, "DEGREEGRANTOR:CORP")) continue; output_item( info, outptr, "b:Institution", "", i, 0 ); } }
int CMSaveSimulation::ReliabilityDetail(const CMString& fname) { if (!open_file(fname)) return -1; get_data_from_simulation(); int oldformat = CMTime::SetOutputFormat(outincunits); int i,j; int step; if (!reldetailtargets) return 0; long row = 0; CMTime tm; long** bins = new long*[reldetailtargets*outtimesteps]; for (i=0;i<outtimesteps;i++) bins[i] = new long[20]; double* expected = new double[reldetailtargets*outtimesteps]; double* maxshortage = new double[reldetailtargets*outtimesteps]; for (i=0;i<(int)reldetailtargets*outtimesteps;i++) { expected[i]=0; maxshortage[i]=100; for (j=0;j<20;j++) bins[i][j] = 0; } step = 0; for (tm=outbeg;tm<=outend;tm.inc(outincsteps,outincunits),step++) { for (long trial=trialbeg;trial<=trialend;trial++) { for (i=0;i<(int)reldetailtargets;i++) { CMReliabilityTarget* target = reliability->Target(reldetailindex[i]); unsigned sindex = array->VariableIndex(target->ShortageVariable()); unsigned pindex = array->VariableIndex(target->PercentageVariable()); int ispercent = (target->IsPercent() && pindex<array->Variables()); double sval; if (!ispercent && sindex<array->Variables()) { maxshortage[step*reldetailtargets+i]=0; for (long tr=trialbeg;tr<=trialend;tr++) { sval = target->ShortageSign() * get_realization(tm,sindex,tr); if (sval > maxshortage[step*reldetailtargets+i]) maxshortage[step*reldetailtargets+i] = sval; } } sval=0; if (sindex<array->Variables()) { sval = target->ShortageSign() * get_realization(tm,sindex,trial); double pval = (ispercent) ? (target->PercentSign()*get_realization(tm,pindex,trial)) : 0; if (pval != 0) sval *= (100/pval); } if (sval>1e-9) { expected[step*reldetailtargets+i] += sval; int binno = ispercent ? (int)(sval/5) : (int)(20*sval/maxshortage[step*reldetailtargets+i]); if (binno>=20) binno=19; bins[step*reldetailtargets+i][binno]++; } } } } for (step=0;step<(int)outtimesteps;step++) for (i=0;i<(int)reldetailtargets;i++) for (j=18;j>=0;j--) bins[step*reldetailtargets+i][j] += bins[step*reldetailtargets+i][j+1]; step = 0; for (tm=outbeg;tm<=outend;tm.inc(outincsteps,outincunits),step++) { for (i=0;i<(int)reldetailtargets;i++,row++) { long col = 0; output_item(OutReliabilityDetail,reliability->Target(reldetailindex[i])->GetString().c_str(),row,col++,maxtargetlength,0); output_item(OutReliabilityDetail,last_timestep_in_interval(tm),row,col++,fieldwidth,0); for (j=0;j<20;j++) output_item(OutReliabilityDetail,100*(double)bins[step*reldetailtargets+i][j]/_outtrials,row,col++,fieldwidth,1); output_item(OutReliabilityDetail,100*(double)bins[step*reldetailtargets+i][0]/_outtrials,row,col++,fieldwidth,1); output_item(OutReliabilityDetail,expected[step*reldetailtargets+i]/_outtrials,row,col++,fieldwidth,1); output_record_end(row); } } output_footer(OutReliabilityDetail); delete [] expected; delete [] maxshortage; for (i=0;i<outtimesteps;i++) delete [] bins[i]; delete [] bins; delete fout; fout = 0; CMTime::SetOutputFormat(oldformat); return 0; }
// Note that bind() takes ownership of the object. The reason it takes a // pointer instead of using a copy constructor is that most of the output // methods may be singletons of sorts. This makes it easier to write the // plugin objects because they don't have to mess with copy constructors. // This is perhaps subject to change, however. void bind(reportbase_type *obj, log_type log = log_all) { // add the output object here. mOutput.push_back( output_item(log, obj) ); }