Go to the documentation of this file.00001 #include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h"
00002
00003 #include "CondCore/DBCommon/interface/DbConnection.h"
00004 #include "CondCore/Utilities/interface/PayLoadInspector.h"
00005 #include "CondCore/Utilities/interface/InspectorPythonWrapper.h"
00006
00007 #include "TROOT.h"
00008 #include "TCanvas.h"
00009 #include "TStyle.h"
00010 #include "TColor.h"
00011 #include "TLine.h"
00012 #include "TGraph.h"
00013 #include "TAxis.h"
00014 #include "TMultiGraph.h"
00015 #include "TLegend.h"
00016
00017 #include <string>
00018 #include <sstream>
00019
00020 namespace cond {
00021
00022 template<>
00023 class ValueExtractor<BeamSpotObjects>: public BaseValueExtractor<BeamSpotObjects> {
00024 public:
00025 typedef BeamSpotObjects Class;
00026 typedef ExtractWhat<Class> What;
00027 static What what() { return What();}
00028
00029 ValueExtractor(){}
00030 ValueExtractor(What const & what)
00031 {
00032
00033 }
00034 void compute(Class const & it){
00035 }
00036 private:
00037 };
00038
00039 template<>
00040 std::string PayLoadInspector<BeamSpotObjects>::summary() const {
00041 std::stringstream ss;
00042 object().print(ss);
00043 return ss.str();
00044 }
00045
00046 template<>
00047 std::string PayLoadInspector<BeamSpotObjects>::plot(std::string const & filename,
00048 std::string const &,
00049 std::vector<int> const &,
00050 std::vector<float> const& ) const
00051 {
00052
00053 TCanvas canvas("iC","iC",800,800);
00054
00055 canvas.SaveAs(filename.c_str());
00056 return filename;
00057 }
00058
00059 template<>
00060 std::string PayLoadInspector<BeamSpotObjects>::trend_plot(std::string const & filename,
00061 std::string const & opt_string,
00062 std::vector<int> const& ints,
00063 std::vector<float> const & floats,
00064 std::vector<std::string> const& strings) const
00065 {
00066 std::stringstream ss("");
00067
00068 if (strings.size() < 2)
00069 return ("Error! Not enough data for initializing connection for making plots! (from \
00070 template<>\
00071 std::string PayLoadInspector<BeamSpotObjects>::trend_plot)");
00072
00073 std::vector<std::string>::const_iterator iter_beg = strings.begin();
00074
00075 std::string conString= (*iter_beg);
00076 ++iter_beg;
00077 std::string authPath = (*iter_beg);
00078 ++iter_beg;
00079
00080
00081 DbConnection dbConn;
00082
00083
00084 dbConn.configuration().setAuthenticationPath(authPath);
00085 dbConn.configure();
00086
00087
00088 DbSession dbSes=dbConn.createSession();
00089
00090
00091 dbSes.open(conString,true);
00092
00093
00094 dbSes.transaction().start(true);
00095
00096
00097 boost::shared_ptr<BeamSpotObjects> ptrBeamSpot;
00098
00099
00100 std::string token;
00101
00102 std::vector<float> vecX;
00103 std::vector<float> vecY;
00104 std::vector<float> vecZ;
00105 for (std::vector<float>::const_iterator iter_float = floats.begin() ;iter_beg != strings.end();++iter_beg, ++iter_float){
00106 token = (*iter_beg);
00107
00108
00109 ptrBeamSpot = dbSes.getTypedObject<BeamSpotObjects>(token);
00110
00111
00112 vecX.push_back(ptrBeamSpot->GetX());
00113 vecY.push_back(ptrBeamSpot->GetY());
00114 vecZ.push_back(ptrBeamSpot->GetZ());
00115 std::cout << "since: "<<(*iter_float)<< " X: "<< ptrBeamSpot->GetX() << " Y: "<< ptrBeamSpot->GetY() << " Z: " << ptrBeamSpot->GetZ() << std::endl;
00116
00117
00118 }
00119
00120
00121 dbSes.close();
00122
00123 TCanvas canvas("iC","iC",1200,1200);
00124
00125
00126 std::cout << *(floats.end() -1) << " " << *(floats.begin());
00127 float max = *(floats.end() -1);
00128 float min = *(floats.begin());
00129
00130 unsigned int lineWidth = 2;
00131 unsigned int startColor = 2;
00132
00133 float result = ((max - min) / max) ;
00134 if ( result >= 0.1 ){
00135 canvas.SetLogx(1);
00136 }
00137 std::cout << "result: " << result << std::endl;
00138
00139
00140
00141 TGraph graphdataX(vecX.size(), static_cast<const float *>(&floats[0]), static_cast<const float *>(&vecX[0]));
00142
00143
00144 graphdataX.SetLineColor(startColor++);
00145 graphdataX.SetLineWidth(lineWidth);
00146
00147
00148 TGraph graphdataY(vecY.size(), static_cast<const float *>(&floats[0]), static_cast<const float *>(&vecY[0]));
00149
00150
00151 graphdataY.SetLineColor(startColor++);
00152 graphdataY.SetLineWidth(lineWidth);
00153
00154
00155 TGraph graphdataZ(vecZ.size(), static_cast<const float *>(&floats[0]), static_cast<const float *>(&vecZ[0]));
00156
00157
00158 graphdataZ.SetLineColor(startColor++);
00159 graphdataZ.SetLineWidth(lineWidth);
00160
00161
00162 TMultiGraph mg;
00163 std::stringstream plotTitle;
00164 plotTitle.precision(0);
00165 plotTitle << std::fixed;
00166
00167 plotTitle << "BeamSpot trend graph (first="
00168 <<(double)min
00169 << ", last="
00170 << (double) max
00171 << ", total="
00172 << floats.size()
00173 <<");since;value";
00174 mg.SetTitle( plotTitle.str().c_str());
00175
00176
00177
00178
00179
00180 mg.Add(&graphdataX);
00181 mg.Add(&graphdataY);
00182 mg.Add(&graphdataZ);
00183
00184
00185
00186
00187
00188 mg.Draw("LA*");
00189
00190 TLegend leg(0.7,0.7,0.9,0.9,"Beam Spot Legend");
00191 leg.AddEntry(&graphdataX,"X_{0}","lpf");
00192 leg.AddEntry(&graphdataY,"Y_{0}","lpf");
00193 leg.AddEntry(&graphdataZ,"Z_{0}","lpf");
00194
00195 leg.Draw();
00196
00197 ss.str("");
00198 ss << filename << ".png";
00199 canvas.SaveAs((ss.str()).c_str());
00200 return ss.str();
00201 }
00202 }
00203
00204
00205 PYTHON_WRAPPER(BeamSpotObjects,BeamSpotObjects);
00206
00207
00208