00001 #include "CondFormats/RPCObjects/interface/RPCObCond.h"
00002 #include "CondFormats/RPCObjects/interface/RPCObPVSSmap.h"
00003
00004 #include "CondCore/Utilities/interface/PayLoadInspector.h"
00005 #include "CondCore/Utilities/interface/InspectorPythonWrapper.h"
00006
00007 #include "CondCore/DBCommon/interface/DbConnection.h"
00008 #include "CondCore/DBCommon/interface/DbConnectionConfiguration.h"
00009
00010 #include "CondCore/DBCommon/interface/DbTransaction.h"
00011
00012
00013
00014
00015 #include "DataFormats/MuonDetId/interface/RPCDetId.h"
00016
00017
00018
00019
00020 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
00021
00022
00023
00024 #include <sys/time.h>
00025
00027 #include "TROOT.h"
00028 #include "TCanvas.h"
00029 #include "TStyle.h"
00030 #include "TColor.h"
00031 #include "TLine.h"
00032 #include "TVirtualPad.h"
00033 #include "TH1D.h"
00034 #include "TH2D.h"
00035 #include "TGraph.h"
00036 #include "TMultiGraph.h"
00037 #include "TLegend.h"
00038 #include "TF1.h"
00039 #include "TPaveStats.h"
00040 #include "TPaveText.h"
00041
00042 #include <string>
00043 #include <fstream>
00044 #include <sstream>
00045 #include <algorithm>
00046 #include <numeric>
00047 #include <iterator>
00048 #include <iostream>
00049 #include <fstream>
00050 #include <utility>
00051 #include <iomanip>
00052 #include <boost/ref.hpp>
00053 #include <boost/bind.hpp>
00054 #include <boost/function.hpp>
00055 #include <boost/shared_ptr.hpp>
00056 #include <boost/iterator/transform_iterator.hpp>
00057
00058 using std::pair;
00059 using std::make_pair;
00060
00061 namespace cond {
00062
00063 namespace rpcobtemp {
00064 enum How { detid, day, time, temp};
00065
00066 void extractDetId(RPCObTemp const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime, const float& endtime) {
00067 std::vector<RPCObTemp::T_Item> const & imon = pl.ObTemp_rpc;
00068 for(unsigned int i = 0; i < imon.size(); ++i ){
00069 if (which[0] == 0){
00070 result.push_back(imon[i].dpid);
00071 }
00072 else{
00073 if(imon[i].dpid == which[0])
00074 result.push_back(imon[i].dpid);
00075 }
00076 }
00077 }
00078
00079 void extractDay(RPCObTemp const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime, const float& endtime) {
00080 std::vector<RPCObTemp::T_Item> const & imon = pl.ObTemp_rpc;
00081 for(unsigned int i = 0; i < imon.size(); ++i ){
00082 if (which[0] == 0){
00083 result.push_back(imon[i].day);
00084 }
00085 else{
00086 if(imon[i].dpid == which[0])
00087 result.push_back(imon[i].day);
00088 }
00089 }
00090 }
00091
00092 void extractTime(RPCObTemp const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime, const float& endtime) {
00093 std::vector<RPCObTemp::T_Item> const & imon = pl.ObTemp_rpc;
00094 for(unsigned int i = 0; i < imon.size(); ++i ){
00095 if (which[0] == 0){
00096 result.push_back(imon[i].time);
00097 }
00098 else{
00099 if(imon[i].dpid == which[0])
00100 result.push_back(imon[i].time);
00101 }
00102 }
00103 }
00104
00105 void extractTemp(RPCObTemp const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime,const float& endtime) {
00106 std::vector<RPCObTemp::T_Item> const & imon = pl.ObTemp_rpc;
00107 for(unsigned int i = 0; i < imon.size(); ++i ){
00108 if (which[0] == 0){
00109 result.push_back(imon[i].value);
00110 }
00111 else{
00112 if(imon[i].dpid == which[0])
00113 result.push_back(imon[i].value);
00114 }
00115 }
00116 }
00117
00118 typedef boost::function<void(RPCObTemp const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime,const float& endtime)> RPCObTempExtractor;
00119 }
00120
00121 template<>
00122 struct ExtractWhat<RPCObTemp> {
00123
00124 rpcobtemp::How m_how;
00125 std::vector<int> m_which;
00126 float m_starttime;
00127 float m_endtime;
00128
00129 rpcobtemp::How const & how() const { return m_how;}
00130 std::vector<int> const & which() const { return m_which;}
00131 float const & startTime() const {return m_starttime;}
00132 float const & endTime() const {return m_endtime;}
00133
00134 void set_how(rpcobtemp::How i) {m_how=i;}
00135 void set_which(std::vector<int> & i) { m_which.swap(i);}
00136 void set_starttime(float& i){m_starttime = i;}
00137 void set_endtime(float& i){m_endtime = i;}
00138
00139 };
00140
00141
00142 template<>
00143 class ValueExtractor<RPCObTemp>: public BaseValueExtractor<RPCObTemp> {
00144 public:
00145
00146 static rpcobtemp::RPCObTempExtractor & extractor(rpcobtemp::How how) {
00147 static rpcobtemp::RPCObTempExtractor fun[4] = {
00148 rpcobtemp::RPCObTempExtractor(rpcobtemp::extractDetId),
00149 rpcobtemp::RPCObTempExtractor(rpcobtemp::extractDay),
00150 rpcobtemp::RPCObTempExtractor(rpcobtemp::extractTime),
00151 rpcobtemp::RPCObTempExtractor(rpcobtemp::extractTemp)
00152 };
00153 return fun[how];
00154 }
00155
00156 typedef RPCObTemp Class;
00157 typedef ExtractWhat<Class> What;
00158 static What what() { return What();}
00159
00160 ValueExtractor(){}
00161 ValueExtractor(What const & what)
00162 : m_what(what)
00163 {
00164
00165
00166 }
00167
00168 void compute(Class const & it){
00169 std::vector<float> res;
00170 extractor(m_what.how())(it,m_what.which(),res,m_what.startTime(),m_what.endTime());
00171 swap(res);
00172 }
00173
00174 private:
00175 What m_what;
00176
00177 };
00178
00179 template<>
00180 std::string PayLoadInspector<RPCObTemp>::summary() const {
00181 std::stringstream ss;
00182
00183
00184 std::string authPath="/afs/cern.ch/cms/DB/conddb";
00185 std::string conString="oracle://cms_orcoff_prod/CMS_COND_31X_RPC";
00186
00187
00188 std::string token="[DB=00000000-0000-0000-0000-000000000000][CNT=RPCObPVSSmap][CLID=53B2D2D9-1F4E-9CA9-4D71-FFCCA123A454][TECH=00000B01][OID=0000000C-00000000]";
00189
00190
00191 DbConnection dbConn;
00192
00193
00194 dbConn.configuration().setAuthenticationPath(authPath);
00195 dbConn.configure();
00196
00197
00198 DbSession dbSes=dbConn.createSession();
00199
00200
00201 dbSes.open(conString,true);
00202
00203
00204 dbSes.transaction().start(true);
00205
00206
00207 boost::shared_ptr<RPCObPVSSmap> pvssPtr;
00208 pvssPtr=dbSes.getTypedObject<RPCObPVSSmap>(token);
00209
00210
00211 std::vector<RPCObPVSSmap::Item> pvssCont=pvssPtr->ObIDMap_rpc;
00212
00213 std::vector<RPCObTemp::T_Item> const & tmon = object().ObTemp_rpc;
00214
00215 ss <<"DetID\t\t"<<"T(C)\t"<<"Time\t"<<"Day\n";
00216 for(unsigned int i = 0; i < tmon.size(); ++i ){
00217 for(unsigned int p = 0; p < pvssCont.size(); ++p){
00218 if(tmon[i].dpid!=pvssCont[p].dpid || pvssCont[p].suptype!=4 || pvssCont[p].region!=0)continue;
00219 RPCDetId rpcId(pvssCont[p].region,pvssCont[p].ring,pvssCont[p].station,pvssCont[p].sector,pvssCont[p].layer,pvssCont[p].subsector,1);
00220 RPCGeomServ rGS(rpcId);
00221 std::string chName(rGS.name().substr(0,rGS.name().find("_Backward")));
00222 ss <<chName <<"\t"<<tmon[i].value<<"\t"<<tmon[i].time<<"\t"<<tmon[i].day<<"\n";
00223 }
00224 }
00225
00226 dbSes.close();
00227
00228 return ss.str();
00229
00230 }
00231
00232 Double_t linearF(Double_t *x, Double_t *par){
00233 Double_t y=0.;
00234 y=par[0]*(*x);
00235 return y;
00236 }
00237
00238
00239 template<>
00240 std::string PayLoadInspector<RPCObTemp>::plot(std::string const & filename,
00241 std::string const &, std::vector<int> const&, std::vector<float> const& ) const {
00242
00243 std::map<std::string,std::pair<float,float> > geoMap;
00244 std::ifstream mapFile("/afs/cern.ch/user/s/stupputi/public/barDetPositions.txt",ifstream::in);
00245 std::string chamb;
00246 float xPos,yPos;
00247 while(mapFile >> chamb >> xPos >> yPos)
00248 geoMap[chamb]=make_pair(xPos,yPos);
00249 std::cout<<"size "<<geoMap.size()<<std::endl;
00250 gStyle->SetPalette(1);
00251
00252
00253
00254 std::string authPath="/afs/cern.ch/cms/DB/conddb";
00255 std::string conString="oracle://cms_orcoff_prod/CMS_COND_31X_RPC";
00256
00257
00258 std::string token="[DB=00000000-0000-0000-0000-000000000000][CNT=RPCObPVSSmap][CLID=53B2D2D9-1F4E-9CA9-4D71-FFCCA123A454][TECH=00000B01][OID=0000000C-00000000]";
00259
00260
00261 DbConnection dbConn;
00262
00263
00264 dbConn.configuration().setAuthenticationPath(authPath);
00265 dbConn.configure();
00266
00267
00268 DbSession dbSes=dbConn.createSession();
00269
00270
00271 dbSes.open(conString,true);
00272
00273
00274 dbSes.transaction().start(true);
00275
00276
00277 boost::shared_ptr<RPCObPVSSmap> pvssPtr;
00278 pvssPtr=dbSes.getTypedObject<RPCObPVSSmap>(token);
00279
00280
00281 std::vector<RPCObPVSSmap::Item> pvssCont=pvssPtr->ObIDMap_rpc;
00282
00283
00284 std::vector<RPCObTemp::T_Item> const & temp = object().ObTemp_rpc;
00285
00286 std::map<int,std::map<int,std::vector<double> > > valMap;
00287 std::map<int,std::string> detMap;
00288 for(unsigned int i = 0;i < temp.size(); ++i){
00289 for(unsigned int p = 0; p < pvssCont.size(); ++p){
00290 if(temp[i].dpid!=pvssCont[p].dpid || pvssCont[p].suptype!=4 || pvssCont[p].region!=0)continue;
00291 int whl(pvssCont[p].ring);
00292 if(valMap.find(whl)==valMap.end()){
00293 std::map<int,std::vector<double> > dumMap;
00294 std::vector<double> dumVec;dumVec.push_back(temp[i].value);
00295 dumMap[temp[i].dpid]=dumVec;
00296 valMap[whl]=dumMap;
00297 }
00298 else {
00299 if(valMap[whl].find(temp[i].dpid)==valMap[whl].end()){
00300 std::vector<double> dumVec;dumVec.push_back(temp[i].value);
00301 (valMap[whl])[temp[i].dpid]=dumVec;
00302 }
00303 else
00304 (valMap[whl])[temp[i].dpid].push_back(temp[i].value);
00305 }
00306 if(detMap.find(temp[i].dpid)==detMap.end()){
00307 RPCDetId rpcId(pvssCont[p].region,pvssCont[p].ring,pvssCont[p].station,pvssCont[p].sector,pvssCont[p].layer,pvssCont[p].subsector,1);
00308 RPCGeomServ chGS(rpcId);
00309 std::string chName(chGS.name());
00310 std::string::size_type pos(chName.find("_S"));
00311 if(pos!=std::string::npos)
00312 chName=chName.substr(0,pos+5);
00313 else
00314 chName=chName.substr(0,chName.find("_CH")+5);
00315 detMap[temp[i].dpid]=chName;
00316 }
00317 }
00318 }
00319
00320 float histoScale(710),axisScale(750);
00321 int flip(-1);
00322 float incr(0.045*histoScale);
00323 float midSc(0.267949192431123),diagSc(sqrt((1.+(midSc*midSc))/2.));
00324 float dists[]={0.558f*histoScale,0.607f*histoScale,0.697f*histoScale,0.823f*histoScale,0.967f*histoScale};
00325
00326 TCanvas *c=new TCanvas("Temp","Temp",1200,700);
00327 c->Divide(3,2);
00328
00329 for(int w=-2;w<3;w++){
00330
00331 int canv(w+3);
00332 c->cd(canv);
00333
00334 char wNumb[8];
00335 sprintf(wNumb,"Wheel %i",w);
00336
00337 TH2F *histo= new TH2F("","",(2*axisScale)/incr,(-1)*axisScale,axisScale,(2*axisScale)/incr,(-1)*axisScale,axisScale);
00338 histo->GetXaxis()->SetTickLength(0);histo->GetXaxis()->SetLabelColor(0);histo->GetXaxis()->SetTitle("Temperature (#circC)");
00339 histo->GetYaxis()->SetTickLength(0);histo->GetYaxis()->SetLabelColor(0);
00340
00341 double min(1000),max(-1);
00342 for(std::map<int,std::vector<double> >::const_iterator mIt=valMap[w].begin();
00343 mIt!=valMap[w].end();mIt++){
00344
00345 std::pair<double, std::vector<double> > meanAndVals =
00346 make_pair(accumulate(mIt->second.begin(),mIt->second.end(),0.)/(double)mIt->second.size(),mIt->second);
00347 std::string chName(detMap[mIt->first]);
00348 histo->Fill(geoMap[chName].first,geoMap[chName].second,meanAndVals.first);
00349 if(meanAndVals.first<min)min=meanAndVals.first;
00350 if(meanAndVals.first>max)max=meanAndVals.first;
00351 std::cout<<chName<<" "<<geoMap[chName].first<<" "<<geoMap[chName].second<<" "<<meanAndVals.first<<std::endl;
00352 }
00353
00354 histo->GetZaxis()->SetRangeUser(min,max);
00355 histo->Draw("colz");
00356
00357 TPaveStats *ptstats = new TPaveStats(0.98,0.98,0.99,0.99,"br");
00358 histo->GetListOfFunctions()->Add(ptstats);
00359 histo->Draw("same");
00360
00361 TPaveText *pt=new TPaveText(-235,763,248,860,"br");
00362 pt->SetFillColor(19);
00363 pt->AddText(wNumb);
00364 pt->Draw("same");
00365
00366 TLine *line = new TLine();
00367 for(int i=0;i<5;i++){
00368 float scDist(midSc*dists[i]),onDiag(diagSc*dists[i]);
00369 float furDist(dists[i]+incr),scFurDist(midSc*furDist),furOnDiag(diagSc*furDist);
00370
00371 line=new TLine(dists[i],flip*scDist,dists[i],scDist);line->Draw();
00372 line=new TLine(dists[i],flip*scDist,furDist,flip*scDist);line->Draw();
00373 line=new TLine(dists[i],scDist,furDist,scDist);line->Draw();
00374 line=new TLine(furDist,flip*scDist,furDist,scDist);line->Draw();
00375 line=new TLine(flip*dists[i],flip*scDist,flip*dists[i],scDist);line->Draw();
00376 line=new TLine(flip*dists[i],flip*scDist,flip*furDist,flip*scDist);line->Draw();
00377 line=new TLine(flip*dists[i],scDist,flip*furDist,scDist);line->Draw();
00378 line=new TLine(flip*furDist,flip*scDist,flip*furDist,scDist);line->Draw();
00379 line=new TLine(onDiag,onDiag,dists[i],scDist);line->Draw();
00380 line=new TLine(onDiag,onDiag,furOnDiag,furOnDiag);line->Draw();
00381 line=new TLine(dists[i],scDist,furDist,scFurDist);line->Draw();
00382 line=new TLine(furOnDiag,furOnDiag,furDist,scFurDist);line->Draw();
00383 line=new TLine(flip*onDiag,flip*onDiag,flip*dists[i],flip*scDist);line->Draw();
00384 line=new TLine(flip*onDiag,flip*onDiag,flip*furOnDiag,flip*furOnDiag);line->Draw();
00385 line=new TLine(flip*dists[i],flip*scDist,flip*furDist,flip*scFurDist);line->Draw();
00386 line=new TLine(flip*furOnDiag,flip*furOnDiag,flip*furDist,flip*scFurDist);line->Draw();
00387 line=new TLine(onDiag,onDiag,scDist,dists[i]);line->Draw();
00388 line=new TLine(onDiag,onDiag,furOnDiag,furOnDiag);line->Draw();
00389 line=new TLine(scDist,dists[i],scFurDist,furDist);line->Draw();
00390 line=new TLine(furOnDiag,furOnDiag,scFurDist,furDist);line->Draw();
00391 line=new TLine(flip*onDiag,flip*onDiag,flip*scDist,flip*dists[i]);line->Draw();
00392 line=new TLine(flip*onDiag,flip*onDiag,flip*furOnDiag,flip*furOnDiag);line->Draw();
00393 line=new TLine(flip*scDist,flip*dists[i],flip*scFurDist,flip*furDist);line->Draw();
00394 line=new TLine(flip*furOnDiag,flip*furOnDiag,flip*scFurDist,flip*furDist);line->Draw();
00395 if(i==4){
00396
00397 line=new TLine(flip*scDist,dists[i],-0.005,dists[i]);line->Draw();
00398 line=new TLine(flip*scDist,dists[i],flip*scDist,furDist);line->Draw();
00399 line=new TLine(-0.005,dists[i],-0.005,furDist);line->Draw();
00400 line=new TLine(flip*scDist,furDist,-0.005,furDist);line->Draw();
00401 line=new TLine(0.005,dists[i],scDist,dists[i]);line->Draw();
00402 line=new TLine(scDist,dists[i],scDist,furDist);line->Draw();
00403 line=new TLine(0.005,dists[i],0.005,furDist);line->Draw();
00404 line=new TLine(scDist,furDist,0.005,furDist);line->Draw();
00405 line=new TLine(flip*scDist,flip*dists[i],-0.005,flip*dists[i]);line->Draw();
00406 line=new TLine(flip*scDist,flip*dists[i],flip*scDist,flip*furDist);line->Draw();
00407 line=new TLine(-0.005,flip*dists[i],-0.005,flip*furDist);line->Draw();
00408 line=new TLine(flip*scDist,flip*furDist,-0.005,flip*furDist);line->Draw();
00409 line=new TLine(0.005,flip*dists[i],scDist,flip*dists[i]);line->Draw();
00410 line=new TLine(0.005,flip*dists[i],0.005,flip*furDist);line->Draw();
00411 line=new TLine(scDist,flip*dists[i],scDist,flip*furDist);line->Draw();
00412 line=new TLine(scDist,flip*furDist,0.005,flip*furDist);line->Draw();
00413 }
00414 else{
00415 line=new TLine(flip*scDist,dists[i],scDist,dists[i]);line->Draw();
00416 line=new TLine(flip*scDist,dists[i],flip*scDist,furDist);line->Draw();
00417 line=new TLine(scDist,dists[i],scDist,furDist);line->Draw();
00418 line=new TLine(flip*scDist,furDist,scDist,furDist);line->Draw();
00419 line=new TLine(flip*scDist,flip*dists[i],scDist,flip*dists[i]);line->Draw();
00420 line=new TLine(flip*scDist,flip*dists[i],flip*scDist,flip*furDist);line->Draw();
00421 line=new TLine(scDist,flip*dists[i],scDist,flip*furDist);line->Draw();
00422 line=new TLine(flip*scDist,flip*furDist,scDist,flip*furDist);line->Draw();
00423 }
00424 line=new TLine(flip*onDiag,onDiag,flip*scDist,dists[i]);line->Draw();
00425 line=new TLine(flip*onDiag,onDiag,flip*furOnDiag,furOnDiag);line->Draw();
00426 line=new TLine(flip*scDist,dists[i],flip*scFurDist,furDist);line->Draw();
00427 line=new TLine(flip*furOnDiag,furOnDiag,flip*scFurDist,furDist);line->Draw();
00428 line=new TLine(onDiag,flip*onDiag,scDist,flip*dists[i]);line->Draw();
00429 line=new TLine(onDiag,flip*onDiag,furOnDiag,flip*furOnDiag);line->Draw();
00430 line=new TLine(scDist,flip*dists[i],scFurDist,flip*furDist);line->Draw();
00431 line=new TLine(furOnDiag,flip*furOnDiag,scFurDist,flip*furDist);line->Draw();
00432 line=new TLine(flip*onDiag,onDiag,flip*dists[i],scDist);line->Draw();
00433 line=new TLine(flip*onDiag,onDiag,flip*furOnDiag,furOnDiag);line->Draw();
00434 line=new TLine(flip*dists[i],scDist,flip*furDist,scFurDist);line->Draw();
00435 line=new TLine(flip*furOnDiag,furOnDiag,flip*furDist,scFurDist);line->Draw();
00436 line=new TLine(onDiag,flip*onDiag,dists[i],flip*scDist);line->Draw();
00437 line=new TLine(onDiag,flip*onDiag,furOnDiag,flip*furOnDiag);line->Draw();
00438 line=new TLine(dists[i],flip*scDist,furDist,flip*scFurDist);line->Draw();
00439 line=new TLine(furOnDiag,flip*furOnDiag,furDist,flip*scFurDist);line->Draw();
00440 }
00441 }
00442
00443 c->SaveAs(filename.c_str());
00444 return filename.c_str();
00445
00446 }
00447
00448
00449
00450 template <>
00451 std::string PayLoadInspector<RPCObTemp>::trend_plot(std::string const & filename,
00452 std::string const & opt_string,
00453 std::vector<int> const& nts,
00454 std::vector<float> const& floats,
00455 std::vector<std::string> const& strings) const {
00456
00457 std::stringstream ss("");
00458
00459 if(strings.size()<2)
00460 return ("Error!Not enough data for initializing connection for making plots!(from template<> std::string PayLoadInspector<BeamSpotObjects>::trend_plot)");
00461
00462 std::vector<std::string>::const_iterator strIt=strings.begin();
00463
00464 std::string conString=(*strIt);strIt++;
00465 std::string authPath=(*strIt);strIt++;
00466
00467
00468
00469
00470 DbConnection dbConn;
00471
00472
00473 dbConn.configuration().setAuthenticationPath(authPath);
00474 dbConn.configure();
00475
00476
00477 DbSession dbSes=dbConn.createSession();
00478
00479
00480 dbSes.open(conString,true);
00481
00482
00483 dbSes.transaction().start(true);
00484
00485 std::string pvssToken="[DB=00000000-0000-0000-0000-000000000000][CNT=RPCObPVSSmap][CLID=53B2D2D9-1F4E-9CA9-4D71-FFCCA123A454][TECH=00000B01][OID=0000000C-00000000]";
00486
00487 boost::shared_ptr<RPCObTemp> tempPtr;
00488 boost::shared_ptr<RPCObPVSSmap> pvssPtr;
00489 pvssPtr=dbSes.getTypedObject<RPCObPVSSmap>(pvssToken);
00490
00491
00492 std::vector<RPCObPVSSmap::Item> pvssCont=pvssPtr->ObIDMap_rpc,pvssZero;
00493
00494 for(unsigned int p=0;p<pvssCont.size();p++){
00495 if(pvssCont[p].suptype!=4)
00496 pvssZero.push_back(pvssCont[p]);
00497 }
00498
00499 std::string token;
00500 std::vector<float> vecI;vecI.assign(floats.size(),0.);
00501 int elCount(0);
00502
00503 for(;strIt!=strings.end();++strIt){
00504
00505 token=(*strIt);
00506 tempPtr=dbSes.getTypedObject<RPCObTemp>(token);
00507 std::vector<RPCObTemp::T_Item> const & temp = tempPtr->ObTemp_rpc;
00508
00509 float iCount(0.);
00510 for(unsigned int i=0;i<temp.size();i++){
00511 for(unsigned int p=0;p<pvssZero.size();p++){
00512 if(temp[i].dpid!=pvssZero[p].dpid || pvssZero[p].region!=0)continue;
00513 iCount++;
00514 vecI[elCount]+=temp[i].value;
00515 }
00516 }
00517 if(iCount!=0)
00518 vecI[elCount]/=iCount;
00519 elCount++;
00520 }
00521
00522
00523
00524 dbSes.close();
00525
00526 return ss.str();
00527
00528 }
00529
00530 }
00531
00532
00533 namespace condPython {
00534 template<>
00535 void defineWhat<RPCObTemp>() {
00536 using namespace boost::python;
00537 enum_<cond::rpcobtemp::How>("How")
00538 .value("detid",cond::rpcobtemp::detid)
00539 .value("day",cond::rpcobtemp::day)
00540 .value("time",cond::rpcobtemp::time)
00541 .value("temp",cond::rpcobtemp::temp)
00542 ;
00543
00544 typedef cond::ExtractWhat<RPCObTemp> What;
00545 class_<What>("What",init<>())
00546 .def("set_how",&What::set_how)
00547 .def("set_which",&What::set_which)
00548 .def("how",&What::how, return_value_policy<copy_const_reference>())
00549 .def("which",&What::which, return_value_policy<copy_const_reference>())
00550 .def("set_starttime",&What::set_starttime)
00551 .def("set_endtime",&What::set_endtime)
00552 .def("startTime",&What::startTime, return_value_policy<copy_const_reference>())
00553 .def("endTime",&What::endTime, return_value_policy<copy_const_reference>())
00554 ;
00555 }
00556 }
00557
00558 PYTHON_WRAPPER(RPCObTemp,RPCObTemp);