CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/CondCore/BeamSpotPlugins/plugins/BeamSpotObjectsPyWrapper.cc

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                         // here one can make stuff really complicated...
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                 //make connection object
00081                 DbConnection dbConn;
00082 
00083                 //set in configuration object authentication path
00084                 dbConn.configuration().setAuthenticationPath(authPath);
00085                 dbConn.configure();
00086 
00087                 //create session object from connection
00088                 DbSession dbSes=dbConn.createSession();
00089 
00090                 //try to make connection
00091                 dbSes.open(conString,true);
00092 
00093                 //start a transaction (true=readOnly)
00094                 dbSes.transaction().start(true);
00095 
00096                 //get the actual object
00097                 boost::shared_ptr<BeamSpotObjects> ptrBeamSpot;
00098 
00099                 //iter_beg now stands on first token in the vector
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                         //std::cout << token << " ";
00108                         
00109                         ptrBeamSpot = dbSes.getTypedObject<BeamSpotObjects>(token);
00110 
00111                         //get data from the objects:
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                 //close db session
00121                 dbSes.close();
00122 
00123                 TCanvas canvas("iC","iC",1200,1200); 
00124                 //canvas.UseCurrentStyle();
00125                 //gStyle->SetPalette(1);
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         //1)
00141                 TGraph graphdataX(vecX.size(), static_cast<const float *>(&floats[0]), static_cast<const float *>(&vecX[0]));
00142                 //graphdataX.GetXaxis()->SetRangeUser(*(floats.begin()),*(floats.end() -1));
00143                 //graphdataX.GetXaxis()-> SetLabelSize(0.03);
00144                 graphdataX.SetLineColor(startColor++);
00145                 graphdataX.SetLineWidth(lineWidth);
00146 
00147         //2)
00148                 TGraph graphdataY(vecY.size(), static_cast<const float *>(&floats[0]), static_cast<const float *>(&vecY[0]));
00149                 //graphdataY.GetXaxis()->SetRangeUser(*(floats.begin()),*(floats.end() -1));
00150                 //graphdataY.GetXaxis()-> SetLabelSize(0.03);
00151                 graphdataY.SetLineColor(startColor++);
00152                 graphdataY.SetLineWidth(lineWidth);
00153 
00154         //3)
00155                 TGraph graphdataZ(vecZ.size(), static_cast<const float *>(&floats[0]), static_cast<const float *>(&vecZ[0]));
00156                 //graphdataZ.GetXaxis()->SetRangeUser(*(floats.begin()),*(floats.end() -1));
00157                 //graphdataZ.GetXaxis()-> SetLabelSize(0.03);
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                 //plotTitle << "BeamSpot trend graph. X0 = black, Y0 = red, Z0 = green; since(first="
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                 //graphdataX.GetXaxis()->SetBinLabel(2,"mylabel");
00177                 //graphdataY.GetXaxis()->SetBinLabel(2,"mylabel");
00178                 //graphdataZ.GetXaxis()->SetBinLabel(2,"mylabel");
00179 
00180                 mg.Add(&graphdataX);
00181                 mg.Add(&graphdataY);
00182                 mg.Add(&graphdataZ);
00183                 
00184 
00185                 //float size1 = mg.GetXaxis()-> GetBinWidth();
00186                 //std::cout <<" BinWidth: " << size1 << std::endl;
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