Hybrid Query Processing Engine for Coprocessing in Database Systems
HyPE
plotscriptgenerator.cpp
Go to the documentation of this file.
00001 
00002 #include <core/plotscriptgenerator.hpp>
00003 #include <config/global_definitions.hpp>
00004 #include <config/configuration.hpp>
00005 
00006 #include <iostream>
00007 #include <fstream>
00008 #include <cmath>
00009 
00010 #include <boost/filesystem.hpp>
00011 
00012 namespace hype{
00013    namespace core{
00014 
00015          using namespace std;
00016 
00017    bool PlotScriptGenerator::create(const std::string& title, const std::string& xlabel, const std::string& ylabel, const std::string& operation_name, const std::vector<std::string>& algorithm_names){
00018       
00019       
00020       const std::string output_dir_name="output";
00021       if(!boost::filesystem::exists(output_dir_name)){
00022          if(!quiet) cout << "create Directory '" << output_dir_name << "'" << endl;
00023          if(!boost::filesystem::create_directory(output_dir_name)){
00024             cout << "HyPE Library: Failed to created Output Directory '" << output_dir_name << "' for operation statistics, skipping the write operation for statistical data for operation '" << operation_name << "'" << endl;
00025          }
00026       }           
00027       std::string dir_name=output_dir_name+"/";
00028       
00029       dir_name+=operation_name;
00030       dir_name+="/";
00031 
00032       if(!boost::filesystem::create_directory(dir_name) && !quiet)
00033          std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00034    
00035 //    dir_name+=algorithm_name;
00036 // 
00037 //    if(!boost::filesystem::create_directory(dir_name));
00038 //       std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00039 
00040 
00041 //    std::string basic_file_name=dir_name+"/";
00042 //    basic_file_name+=algorithm_name;
00043    
00044    
00045       std::string file_name_measurement_times=dir_name+"execution_times.plt";
00046       if(!quiet) std::cout << "Creating gnuplot script file '" << file_name_measurement_times.c_str() << "'" << std::endl; 
00047       std::fstream file(file_name_measurement_times.c_str(),std::ios_base::out | std::ios_base::trunc);
00048 
00049       file << "set title '" << title << "'" << std::endl
00050            << "set xtics nomirror" << std::endl
00051            << "set ytics nomirror" << std::endl
00052            << "set xlabel '" << xlabel << "'" << std::endl
00053            << "set ylabel '" << ylabel << "'" << std::endl
00054            << "set key top left Left reverse samplen 1" << std::endl
00055            << std::endl << "plot ";
00056 
00057 
00058       for(unsigned int i=0;i<algorithm_names.size();i++){
00059 
00060          file <<"'"<< algorithm_names[i]<<"/"<<"measurement_pairs.data' using 1:2 title \""<<algorithm_names[i]<<" measured execution times\" with points, \\"<<std::endl
00061               <<"'"<< algorithm_names[i]<<"/"<<"measurement_pairs.data' using 1:3 title \""<<algorithm_names[i]<<" estimated execution times\" with points";
00062          if(i<algorithm_names.size()-1) file << ", \\" << std::endl;
00063       }
00064       file << std::endl << std::endl
00065            << "set output \"execution_times.pdf\"" << std::endl
00066            << "set terminal pdfcairo font \"Helvetica,9\"" << std::endl
00067            << "replot" << std::endl;
00068 //
00069 //
00070 
00071      return true;
00072    }
00073 
00074 
00075    bool PlotScriptGenerator::createRelativeErrorScript(const std::string& operation_name, const std::vector<std::string>& algorithm_names){
00076       std::string dir_name="output/";
00077       dir_name+=operation_name;
00078       dir_name+="/";
00079 
00080       if(!boost::filesystem::create_directory(dir_name) && !quiet)
00081          std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00082    
00083 //    dir_name+=algorithm_name;
00084 // 
00085 //    if(!boost::filesystem::create_directory(dir_name));
00086 //       std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00087 
00088 
00089 //    std::string basic_file_name=dir_name+"/";
00090 //    basic_file_name+=algorithm_name;
00091    
00092    
00093       std::string file_name_measurement_times=dir_name+"relative_errors.plt";
00094       if(!quiet) std::cout << "Creating gnuplot script file '" << file_name_measurement_times.c_str() << "'" << std::endl; 
00095       std::fstream file(file_name_measurement_times.c_str(),std::ios_base::out | std::ios_base::trunc);
00096 
00097       file << "set title 'relative estimation errors for operation " << operation_name << "'" << std::endl
00098            << "set xtics nomirror" << std::endl
00099            << "set ytics nomirror" << std::endl
00100            << "set xlabel 'iterations'" << std::endl
00101            << "set ylabel 'absolute relative estmation error'" << std::endl
00102            << "set logscale y" << std::endl
00103            //<< "set key top left Left reverse samplen 1" << std::endl
00104            << "set key below" << std::endl
00105            << "set key box" << std::endl
00106            << std::endl << "plot ";
00107 
00108 
00109       for(unsigned int i=0;i<algorithm_names.size();i++){
00110 
00111          file <<"'"<< algorithm_names[i]<<"/"<<"relative_errors.data' using 1:(abs($2)) title \""<<algorithm_names[i]<<" relative error\" with points";
00112          if(i<algorithm_names.size()-1){ 
00113             file << ", \\" << std::endl;
00114          }
00115       }
00116       file << std::endl << std::endl
00117            << "set output \"relative_errors.pdf\"" << std::endl
00118            << "set terminal pdfcairo font \"Helvetica,9\"" << std::endl
00119            << "replot" << std::endl;
00120 //
00121 //
00122 
00123      return true;
00124 
00125    }
00126 
00127    bool PlotScriptGenerator::createAverageRelativeErrorScript(const std::string& operation_name, const std::vector<std::string>& algorithm_names){
00128       std::string dir_name="output/";
00129       dir_name+=operation_name;
00130       dir_name+="/";
00131 
00132       if(!boost::filesystem::create_directory(dir_name) && !quiet)
00133          std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00134    
00135 //    dir_name+=algorithm_name;
00136 // 
00137 //    if(!boost::filesystem::create_directory(dir_name));
00138 //       std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00139 
00140 
00141 //    std::string basic_file_name=dir_name+"/";
00142 //    basic_file_name+=algorithm_name;
00143    
00144    
00145       std::string file_name_measurement_times=dir_name+"average_relative_errors.plt";
00146       if(!quiet) std::cout << "Creating gnuplot script file '" << file_name_measurement_times.c_str() << "'" << std::endl; 
00147       std::fstream file(file_name_measurement_times.c_str(),std::ios_base::out | std::ios_base::trunc);
00148 
00149       file << "set title 'average relative estimation errors for operation " << operation_name << "'" << std::endl
00150            << "set xtics nomirror" << std::endl
00151            << "set ytics nomirror" << std::endl
00152            << "set xlabel 'iterations'" << std::endl
00153            << "set ylabel 'average absolute relative estmation error'" << std::endl
00154            << "set logscale y" << std::endl
00155            //<< "set key top left Left reverse samplen 1" << std::endl
00156            << "set key below" << std::endl
00157            << "set key box" << std::endl
00158            << std::endl << "plot ";
00159 
00160 
00161       for(unsigned int i=0;i<algorithm_names.size();i++){
00162 
00163          file <<"'"<< algorithm_names[i]<<"/"<<"average_relative_errors.data' using 1:(abs($2)) title \""<<algorithm_names[i]<<" relative error\" with points";
00164          if(i<algorithm_names.size()-1){ 
00165             file << ", \\" << std::endl;
00166          }
00167       }
00168       file << std::endl << std::endl
00169            << "set output \"average_relative_errors.pdf\"" << std::endl
00170            << "set terminal pdfcairo font \"Helvetica,9\"" << std::endl
00171            << "replot" << std::endl;
00172 //
00173 //
00174 
00175      return true;
00176 
00177    }
00178 
00179    bool PlotScriptGenerator::createWindowedAverageRelativeErrorScript(const std::string& operation_name, const std::vector<std::string>& algorithm_names){
00180       std::string dir_name="output/";
00181       dir_name+=operation_name;
00182       dir_name+="/";
00183 
00184       if(!boost::filesystem::create_directory(dir_name) && !quiet)
00185          std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00186    
00187 //    dir_name+=algorithm_name;
00188 // 
00189 //    if(!boost::filesystem::create_directory(dir_name));
00190 //       std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00191 
00192 
00193 //    std::string basic_file_name=dir_name+"/";
00194 //    basic_file_name+=algorithm_name;
00195    
00196    
00197       std::string file_name_measurement_times=dir_name+"windowed_average_relative_errors.plt";
00198       if(!quiet) std::cout << "Creating gnuplot script file '" << file_name_measurement_times.c_str() << "'" << std::endl; 
00199       std::fstream file(file_name_measurement_times.c_str(),std::ios_base::out | std::ios_base::trunc);
00200 
00201       file << "set title 'windowed average relative estimation errors for operation " << operation_name << " (Window size=" << Runtime_Configuration::instance().getRelativeErrorWindowSize() << ")'" << std::endl
00202            << "set xtics nomirror" << std::endl
00203            << "set ytics nomirror" << std::endl
00204            << "set xlabel 'iterations'" << std::endl
00205            << "set ylabel 'windowed average absolute relative estmation error'" << std::endl
00206            << "set logscale y" << std::endl
00207            //<< "set key top left Left reverse samplen 1" << std::endl
00208            << "set key below" << std::endl
00209            << "set key box" << std::endl
00210            << std::endl << "plot ";
00211 
00212 
00213       for(unsigned int i=0;i<algorithm_names.size();i++){
00214 
00215          file <<"'"<< algorithm_names[i]<<"/"<<"windowed_average_relative_errors.data' using 1:(abs($2)) title \""<<algorithm_names[i]<<" relative error\" with points";
00216          if(i<algorithm_names.size()-1) file << ", \\" << std::endl;
00217       }
00218       file << std::endl << std::endl
00219            << "set output \"windowed_average_relative_errors.pdf\"" << std::endl
00220            << "set terminal pdfcairo font \"Helvetica,9\"" << std::endl
00221            << "replot" << std::endl;
00222 //
00223 //
00224 
00225      return true;
00226 
00227    }
00228    
00229       bool PlotScriptGenerator::create_3d_plot(const std::string& title, const std::string& xlabel, const std::string& ylabel, const std::string& directory_path, const std::vector<std::string>& algorithm_names){
00230       std::string dir_name=directory_path+"/";
00231       
00232       if(!boost::filesystem::create_directory(dir_name) && !quiet)
00233          std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00234    
00235 //    dir_name+=algorithm_name;
00236 // 
00237 //    if(!boost::filesystem::create_directory(dir_name));
00238 //       std::cout << "Directory '" << dir_name << "' already exists!" << std::endl;
00239 
00240 
00241 //    std::string basic_file_name=dir_name+"/";
00242 //    basic_file_name+=algorithm_name;
00243       
00244       std::string file_name_measurement_times=dir_name+"execution_times.plt";
00245       if(!quiet) std::cout << "Creating gnuplot script file '" << file_name_measurement_times.c_str() << "'" << std::endl; 
00246       std::fstream file(file_name_measurement_times.c_str(),std::ios_base::out | std::ios_base::trunc);
00247 
00248       file << "set title '" << title << "'" << std::endl
00249            << "set xtics nomirror" << std::endl
00250            << "set ytics nomirror" << std::endl
00251            << "set xlabel '" << xlabel << "'" << std::endl
00252            << "set ylabel '" << ylabel << "'" << std::endl
00253            << "set zlabel 'execution time in ns'" << std::endl         
00254            << "set key below" << std::endl
00255            << "set key box" << std::endl
00256            //<< "set key top left Left reverse samplen 1" << std::endl
00257            << "set hidden3d" << std::endl
00258            << "set view 75,40,1.0,2.5" << std::endl
00259            << std::endl << "splot ";
00260 
00261 
00262       for(unsigned int i=0;i<algorithm_names.size();i++){
00263       file <<"'"<< algorithm_names[i] << ".data' using 1:2:3 title \"" << algorithm_names[i] << " measured execution times\" with points";
00264 //       file <<"'"<< algorithm_names[i] << ".data' using 1:2:3 title \"" << algorithm_names[i] << " measured execution times\" with points, \\"<<std::endl
00265 //            <<"'"<< algorithm_names[i] << ".data' using 1:2:4 title \"" << algorithm_names[i] << " estimated execution times\" with points";
00266          if(i<algorithm_names.size()-1) file << ", \\" << std::endl;
00267       }
00268       file << ", \\" << std::endl << "'complete_execution_history.data' using 1:2:3 title \"decision\" with points, \\" << std::endl
00269            << "'complete_execution_history.data' using 1:2:4 title \"estimation\" with points" << std::endl;
00270            
00271 //    file << std::endl << std::endl
00272 //         << "set output \"execution_times.pdf\"" << std::endl
00273 //         << "set terminal pdfcairo font \"Helvetica,7\"" << std::endl
00274 //         << "replot" << std::endl;
00275 //
00276 //
00277 
00278      return true;
00279    }
00280 
00281    }; //end namespace core
00282 }; //end namespace hype
00283 
00284 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines