CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RPCObVmonPyWrapper.cc
Go to the documentation of this file.
3 
6 //#include "CondCore/DBCommon/interface/DbSession.h"
8 
9 //#include "CondCore/ORA/interface/Database.h"
10 //#include "CondCore/DBCommon/interface/PoolToken.h"
11 
14 
17 
18 //timestamp stuff
19 //#include "DataFormats/Provenance/interface/Timestamp.h"
20 #include "CoralBase/TimeStamp.h"
21 #include <sys/time.h>
22 
24 #include "TROOT.h"
25 #include "TCanvas.h"
26 #include "TStyle.h"
27 #include "TColor.h"
28 #include "TLine.h"
29 #include "TH1D.h"
30 #include "TH2D.h"
31 #include "TF1.h"
32 #include "TGraph.h"
33 #include "TMultiGraph.h"
34 #include "TLegend.h"
35 
36 #include <string>
37 #include <fstream>
38 #include <sstream>
39 #include <algorithm>
40 #include <numeric>
41 #include <iterator>
42 #include <iostream>
43 #include <fstream>
44 #include <boost/ref.hpp>
45 #include <boost/bind.hpp>
46 #include <boost/function.hpp>
47 #include <boost/shared_ptr.hpp>
48 #include <boost/iterator/transform_iterator.hpp>
49 
50 #include "TH1D.h"
51 #include "TH2D.h"
52 #include <boost/algorithm/string.hpp>
53 #include <utility>
54 using std::pair;
55 using std::make_pair;
56 
57 namespace cond {
58 
59  namespace rpcobvmon {
60  enum How { detid, day, time, current};
61 
62  void extractDetId(RPCObVmon const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime, const float& endtime) {
63  std::vector<RPCObVmon::V_Item> const & vmon = pl.ObVmon_rpc;
64  for(unsigned int i = 0; i < vmon.size(); ++i ){
65  if (which[0] == 0){
66  result.push_back(vmon[i].dpid);
67  }
68  else{
69  if(vmon[i].dpid == which[0])
70  result.push_back(vmon[i].dpid);
71  }
72  }
73  }
74 
75  void extractDay(RPCObVmon const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime, const float& endtime) {
76  std::vector<RPCObVmon::V_Item> const & vmon = pl.ObVmon_rpc;
77  for(unsigned int i = 0; i < vmon.size(); ++i ){
78  if (which[0] == 0){
79  result.push_back(vmon[i].day);
80  }
81  else{
82  if(vmon[i].dpid == which[0])
83  result.push_back(vmon[i].day);
84  }
85  }
86  }
87 
88  void extractTime(RPCObVmon const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime, const float& endtime) {
89  std::vector<RPCObVmon::V_Item> const & vmon = pl.ObVmon_rpc;
90  for(unsigned int i = 0; i < vmon.size(); ++i ){
91  if (which[0] == 0){
92  result.push_back(vmon[i].time);
93  }
94  else{
95  if(vmon[i].dpid == which[0])
96  result.push_back(vmon[i].time);
97  }
98  }
99  }
100 
101  void extractCurrent(RPCObVmon const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime,const float& endtime) {
102  std::vector<RPCObVmon::V_Item> const & vmon = pl.ObVmon_rpc;
103  for(unsigned int i = 0; i < vmon.size(); ++i ){
104  if (which[0] == 0){
105  result.push_back(vmon[i].value);
106  }
107  else{
108  if(vmon[i].dpid == which[0])
109  result.push_back(vmon[i].value);
110  }
111  }
112  }
113 
114  typedef boost::function<void(RPCObVmon const & pl, std::vector<int> const & which,std::vector<float> & result,const float& starttime,const float& endtime)> RPCObVmonExtractor;
115  }
116 
117  template<>
119 
121  std::vector<int> m_which;
122  float m_starttime;
123  float m_endtime;
124 
125  rpcobvmon::How const & how() const { return m_how;}
126  std::vector<int> const & which() const { return m_which;}
127  float const & startTime() const {return m_starttime;}
128  float const & endTime() const {return m_endtime;}
129 
130  void set_how(rpcobvmon::How i) {m_how=i;}
131  void set_which(std::vector<int> & i) { m_which.swap(i);}
132  void set_starttime(float& i){m_starttime = i;}
133  void set_endtime(float& i){m_endtime = i;}
134 
135  };
136 
137 
138  template<>
139  class ValueExtractor<RPCObVmon>: public BaseValueExtractor<RPCObVmon> {
140  public:
141 
143  static rpcobvmon::RPCObVmonExtractor fun[4] = {
148  };
149  return fun[how];
150  }
151 
152  typedef RPCObVmon Class;
154  static What what() { return What();}
155 
158  : m_what(what)
159  {
160  // here one can make stuff really complicated... (select mean rms, 12,6,1)
161  // ask to make average on selected channels...
162  }
163 
164  void compute(Class const & it) override{
165  std::vector<float> res;
166  extractor(m_what.how())(it,m_what.which(),res,m_what.startTime(),m_what.endTime());
167  swap(res);
168  }
169 
170  private:
172 
173  };
174 
175 
176 // template<>
177 // std::string
178 // PayLoadInspector<RPCObVmon>::dump() const {return std::string();}
179 
180 
181  template<>
183  std::string const & opt_str,
184  std::vector<int> const & vInts,
185  std::vector<float> const & vFloats,
186  std::vector<std::string> const & vStrings) const {
187 
188  std::stringstream ss;
189  std::vector<std::string>::const_iterator iStr;
190  ss << "Strings got: " << std::endl;
191  for (iStr = vStrings.begin(); iStr != vStrings.end(); ++ iStr){
192  ss << *iStr << std::endl;
193  }
194  return ss.str();
195  }
196 
197 
198 
199  template<>
201 
202  //hardcoded values
203  std::string authPath="/afs/cern.ch/cms/DB/conddb";
204  std::string conString="oracle://cms_orcoff_prod/CMS_COND_31X_RPC";
205 
206  //frontend sends token instead of filename
207  std::string token="[DB=00000000-0000-0000-0000-000000000000][CNT=RPCObPVSSmap][CLID=53B2D2D9-1F4E-9CA9-4D71-FFCCA123A454][TECH=00000B01][OID=0000000C-00000000]";
208 
209  //make connection object
210  DbConnection dbConn;
211 
212  //set in configuration object authentication path
213  dbConn.configuration().setAuthenticationPath(authPath);
214  dbConn.configure();
215 
216  //create session object from connection
217  DbSession dbSes=dbConn.createSession();
218 
219  //try to make connection
220  dbSes.open(conString,true);
221 
222  //start a transaction (true=readOnly)
223  dbSes.transaction().start(true);
224 
225  //get the actual object
226  boost::shared_ptr<RPCObPVSSmap> pvssPtr;
227  pvssPtr=dbSes.getTypedObject<RPCObPVSSmap>(token);
228 
229  //we have the object...
230  std::vector<RPCObPVSSmap::Item> pvssCont=pvssPtr->ObIDMap_rpc;
231 
232  std::stringstream ss;
233 
234  std::vector<RPCObVmon::V_Item> const & vmon = object().ObVmon_rpc;
235 
236  ss <<"DetID\t\t"<<"V(V)\t"<<"Time\t"<<"Day\n";
237  for(unsigned int i = 0; i < vmon.size(); ++i ){
238  for(unsigned int p = 0; p < pvssCont.size(); ++p){
239  if(vmon[i].dpid!=pvssCont[p].dpid || pvssCont[p].suptype!=0 || pvssCont[p].region!=0)continue;
240  RPCDetId rpcId(pvssCont[p].region,pvssCont[p].ring,pvssCont[p].station,pvssCont[p].sector,pvssCont[p].layer,pvssCont[p].subsector,1);
241  RPCGeomServ rGS(rpcId);
242  std::string chName(rGS.name().substr(0,rGS.name().find("_Backward")));
243  ss <<chName <<"\t"<<vmon[i].value<<"\t"<<vmon[i].time<<"\t"<<vmon[i].day<<"\n";
244  }
245  }
246 
247  dbSes.close();
248 
249  return ss.str();
250  }
251 
252  Double_t linearF(Double_t *x, Double_t *par){
253  Double_t y=0.;
254  y=par[0]*(*x);
255  return y;
256  }
257 
258  unsigned long long toUNIX(int date, int time)
259  {
260  int yea_ = (int)date/100;
261  int yea = 2000 + (date - yea_*100);
262  int mon_ = (int)yea_/100;
263  int mon = yea_ - mon_*100;
264  int day = (int)yea_/100;
265  int sec_ = (int)time/100;
266  int sec = time - sec_*100;
267  int min_ = (int)sec_/100;
268  int min = sec_ - min_*100;
269  int hou = (int)sec_/100;
270  int nan = 0;
271  coral::TimeStamp TS;
272  TS = coral::TimeStamp(yea, mon, day, hou, min, sec, nan);
273 
274  long long UT = (TS.year()-1970)*31536000+static_cast<int>(trunc((TS.year()-1972)/4))*86400+
275  (((TS.month()-1)*31)*86400)+((TS.day()-1)*86400)+TS.hour()*3600+TS.minute()*60+TS.second();
276 
277  if (TS.month() == 3) UT = UT - 3*86400;
278  if (TS.month() == 4) UT = UT - 3*86400;
279  if (TS.month() == 5) UT = UT - 4*86400;
280  if (TS.month() == 6) UT = UT - 4*86400;
281  if (TS.month() == 7) UT = UT - 5*86400;
282  if (TS.month() == 8) UT = UT - 5*86400;
283  if (TS.month() == 9) UT = UT - 5*86400;
284  if (TS.month() == 10) UT = UT - 6*86400;
285  if (TS.month() == 11) UT = UT - 6*86400;
286  if (TS.month() == 12) UT = UT - 7*86400;
287 
288  return UT;
289  }
290 
291  // return the real name of the file including extension...
292  template<>
294  std::string const & str,
295  std::vector<int> const&,
296  std::vector<float> const& ) const {
297 
298  //std::vector<std::string> strs;
299  //std::string str1 = "123@321@edr";
300  //boost::split(strs, str1, boost::is_any_of("@"));
301  //std::cout << strs[0] << strs[1] << strs[2];
302 
303  gStyle->SetPalette(1);
304 
305  TH1D *vDistr=new TH1D("vDistr","IOV-averaged HV Distribution;Average HV (V);Entries/0.2 #muA",100,5000.,10000.);
306  TH1D *rmsDistr=new TH1D("rmsDistr","RMS over IOV-HV Distribution;HV RMS (V);Entries/0.2 #muA",1000,0.,1000.);//rmsDistr->SetBit(TH1::kCanRebin);
307 
308  //BEGIN OF NEW DB-SESSION PART
309  //hardcoded values
310  std::string authPath="/afs/cern.ch/cms/DB/conddb";
311  std::string conString="oracle://cms_orcoff_prod/CMS_COND_31X_RPC";
312 
313  //frontend sends token instead of filename
314  std::string token="[DB=00000000-0000-0000-0000-000000000000][CNT=RPCObPVSSmap][CLID=53B2D2D9-1F4E-9CA9-4D71-FFCCA123A454][TECH=00000B01][OID=0000000C-00000000]";
315 
316  //make connection object
317  DbConnection dbConn;
318 
319  //set in configuration object authentication path
320  dbConn.configuration().setAuthenticationPath(authPath);
321  dbConn.configure();
322 
323  //create session object from connection
324  DbSession dbSes=dbConn.createSession();
325 
326  //try to make connection
327  dbSes.open(conString,true);
328 
329  //start a transaction (true=readOnly)
330  dbSes.transaction().start(true);
331 
332  //get the actual object
333  boost::shared_ptr<RPCObPVSSmap> pvssPtr;
334  pvssPtr=dbSes.getTypedObject<RPCObPVSSmap>(token);
335 
336  //we have the object...
337  std::vector<RPCObPVSSmap::Item> pvssCont=pvssPtr->ObIDMap_rpc;
338  //END OF NEW DB-SESSION PART
339 
340  std::vector<RPCObVmon::V_Item> const & vmon = object().ObVmon_rpc;
341 
342  std::map<int,std::pair<std::vector<double>,std::vector<double> > > dpidMap;
343  for(unsigned int i = 0;i < vmon.size(); ++i){
344  for(unsigned int p = 0; p < pvssCont.size(); ++p){
345  if(vmon[i].dpid!=pvssCont[p].dpid || pvssCont[p].suptype!=0 || pvssCont[p].region!=0)continue;
346  if(dpidMap.find(vmon[i].dpid)==dpidMap.end()){
347  std::vector<double> dumVec1;dumVec1.push_back(vmon[i].value);
348  std::vector<double> dumVec2;dumVec2.push_back((double)toUNIX(vmon[i].day,vmon[i].time));
349  dpidMap[vmon[i].dpid]=make_pair(dumVec1,dumVec2);
350  }
351  else {
352  dpidMap[vmon[i].dpid].first.push_back(vmon[i].value);
353  dpidMap[vmon[i].dpid].second.push_back((double)toUNIX(vmon[i].day,vmon[i].time));
354  }
355  }
356  }
357 
358  double maxMean(-1.),maxRms(-1.);
359  double minMean(9999.),minRms(9999.);
360  std::map<int,std::pair<std::vector<double>,std::vector<double> > >::const_iterator minIt,maxIt;
361  std::vector<float> means,rmss;
362  for(std::map<int,std::pair<std::vector<double>,std::vector<double> > >::const_iterator mIt=dpidMap.begin();
363  mIt!=dpidMap.end();mIt++){
364  std::pair<double, std::vector<double> > meanAndVals =
365  make_pair(accumulate(mIt->second.first.begin(),mIt->second.first.end(),0.)/(double)mIt->second.first.size(),mIt->second.first);
366 
367  vDistr->Fill(meanAndVals.first);
368  if(meanAndVals.first>maxMean)maxMean=meanAndVals.first;
369  if(meanAndVals.first<minMean)minMean=meanAndVals.first;
370  double rms(0.);
371  for(std::vector<double>::iterator rmsIt=meanAndVals.second.begin();
372  rmsIt!=meanAndVals.second.end();++rmsIt){
373  rms+=pow((*rmsIt-meanAndVals.first)/(double)meanAndVals.second.size(),2);
374  }
375  rmsDistr->Fill(sqrt(rms));std::cout<<sqrt(rms)<<std::endl;
376  if(sqrt(rms)>maxRms){
377  maxRms=sqrt(rms);
378  maxIt=mIt;
379  }
380  if(sqrt(rms)<minRms){
381  minRms=sqrt(rms);
382  if(mIt->second.first.size()>5)
383  minIt=mIt;
384  }
385  means.push_back(meanAndVals.first);
386  rmss.push_back(sqrt(rms));
387  }
388 
389  if(maxMean<100.)
390  vDistr->GetXaxis()->SetRangeUser(minMean-0.00001,maxMean+1.);
391  if(maxRms<1000.)
392  rmsDistr->GetXaxis()->SetRangeUser(minRms-0.00001,maxRms+1.);
393 
394  TCanvas c("Vmon","Vmon",1200,700);
395  c.Divide(2,2);
396 
397  //TVirtualPad *p1=c.cd(1);
398  // p1->SetLogy(1);
399  c.cd(1);
400  vDistr->SetFillColor(4);
401  vDistr->SetLineColor(4);
402  vDistr->Draw();
403 
404  //TVirtualPad *p2=c.cd(2);
405  // p2->SetLogy(1);
406  c.cd(2);
407  rmsDistr->SetFillColor(3);
408  rmsDistr->SetLineColor(3);
409  rmsDistr->Draw();
410 
411  c.cd(3);
412  TGraph *vRmsDistr=new TGraph(means.size(),static_cast<const float *>(&rmss[0]),static_cast<const float *>(&means[0]));
413  vRmsDistr->SetMarkerStyle(7);
414  vRmsDistr->SetMarkerColor(2);
415  //TF1 *func=new TF1("linearF",linearF,minRms,maxRms,1);
416  // vRmsDistr->Fit("linearF","r");
417  vRmsDistr->GetXaxis()->SetTitle("HV RMS (V)");
418  vRmsDistr->GetYaxis()->SetTitle("HV Means (V)");
419  vRmsDistr->Draw("AP");
420 
421  c.cd(4);
422  TMultiGraph *mProf=new TMultiGraph();
423  TLegend *leg=new TLegend(0.65,0.91,0.99,0.99);
424  TGraph *minProf=new TGraph(minIt->second.first.size(),&minIt->second.second[0],&minIt->second.first[0]);
425  TGraph *maxProf=new TGraph(maxIt->second.first.size(),&maxIt->second.second[0],&maxIt->second.first[0]);
426  minProf->SetMarkerStyle(20);
427  maxProf->SetMarkerStyle(20);
428  minProf->SetMarkerColor(2);
429  maxProf->SetMarkerColor(4);
430  mProf->Add(minProf);
431  leg->AddEntry(minProf,"V vs IOV for Min RMS case","lpf");
432  mProf->Add(maxProf);
433  leg->AddEntry(maxProf,"V vs IOV for Max RMS case","lpf");
434  leg->Draw();
435  mProf->Draw("AP");
436  mProf->GetXaxis()->SetTitle("IOV");
437  mProf->GetYaxis()->SetTitle("I (V)");
438 
439  c.SaveAs(filename.c_str());
440 
441  return filename.c_str();
442 
443  }
444 
445 
446  template <>
448  std::string const & opt_string,
449  std::vector<int> const& nts,
450  std::vector<float> const& floats,
451  std::vector<std::string> const& strings) const {
452 
453  std::stringstream ss("");
454 
455  if(strings.size()<2)
456  return ("Error!Not enough data for initializing connection for making plots!(from template<> std::string PayLoadInspector<BeamSpotObjects>::trend_plot)");
457 
458  std::vector<std::string>::const_iterator strIt=strings.begin();
459 
460  std::string conString=(*strIt);strIt++;
461  std::string authPath=(*strIt);strIt++;
462 
463  //BEGIN OF NEW DB-SESSION PART
464 
465  //make connection object
466  DbConnection dbConn;
467 
468  //set in configuration object authentication path
469  dbConn.configuration().setAuthenticationPath(authPath);
470  dbConn.configure();
471 
472  //create session object from connection
473  DbSession dbSes=dbConn.createSession();
474 
475  //try to make connection
476  dbSes.open(conString,true);
477 
478  //start a transaction (true=readOnly)
479  dbSes.transaction().start(true);
480 
481  std::string pvssToken="[DB=00000000-0000-0000-0000-000000000000][CNT=RPCObPVSSmap][CLID=53B2D2D9-1F4E-9CA9-4D71-FFCCA123A454][TECH=00000B01][OID=0000000C-00000000]";
482  //get the actual object
483  boost::shared_ptr<RPCObVmon> vmonPtr;
484  boost::shared_ptr<RPCObPVSSmap> pvssPtr;
485  pvssPtr=dbSes.getTypedObject<RPCObPVSSmap>(pvssToken);
486 
487  //we get the objects...
488  std::vector<RPCObPVSSmap::Item> pvssCont=pvssPtr->ObIDMap_rpc,pvssZero;
489 
490  for(unsigned int p=0;p<pvssCont.size();p++){
491  if(pvssCont[p].suptype!=0)
492  pvssZero.push_back(pvssCont[p]);
493  }
494 
495  std::string token;
496  std::vector<float> vecI;vecI.assign(floats.size(),0.);
497  int elCount(0);
498 
499  for(;strIt!=strings.end();++strIt){
500 
501  token=(*strIt);
502  vmonPtr=dbSes.getTypedObject<RPCObVmon>(token);
503  std::vector<RPCObVmon::V_Item> const & vmon = vmonPtr->ObVmon_rpc;
504 
505  float iCount(0.);
506  for(unsigned int i=0;i<vmon.size();i++){
507  for(unsigned int p=0;p<pvssZero.size();p++){
508  if(vmon[i].dpid!=pvssZero[p].dpid || pvssZero[p].region!=0)continue;
509  iCount++;
510  vecI[elCount]+=vmon[i].value;
511  }
512  }
513  if(iCount!=0)
514  vecI[elCount]/=iCount;
515  elCount++;
516  }
517 
518  //END OF NEW DB-SESSION PART
519 
520  dbSes.close();
521 
522  TGraph trend(vecI.size(),static_cast<const float *>(&floats[0]),static_cast<const float *>(&vecI[0]));
523  trend.SetLineColor(2);
524  trend.SetLineWidth(2);
525  trend.GetYaxis()->SetTitle("<V> (V)");
526 
527  float min(*(floats.begin())),max(*(floats.end()-1));
528  float scaleToggle((max-min)/max);
529  TCanvas c("Itrend","Itrend",1200,700);
530 
531  if(scaleToggle>=0.1)
532  c.SetLogx(1);
533 
534  trend.Draw("LA*");
535 
536  TLegend leg(0.65,0.91,0.99,0.99);
537  leg.AddEntry(&trend,"Vmon trend","lpf");
538 
539  leg.Draw("");
540 
541  ss.str("");
542  ss<<filename<<".C";
543  c.SaveAs((ss.str()).c_str());
544 
545  return ss.str();
546 
547  }
548 
549 }
550 
551 
552 namespace condPython {
553  template<>
555  using namespace boost::python;
556  enum_<cond::rpcobvmon::How>("How")
557  .value("detid",cond::rpcobvmon::detid)
558  .value("day",cond::rpcobvmon::day)
559  .value("time",cond::rpcobvmon::time)
560  .value("current",cond::rpcobvmon::current)
561  ;
562 
563  typedef cond::ExtractWhat<RPCObVmon> What;
564  class_<What>("What",init<>())
565  .def("set_how",&What::set_how)
566  .def("set_which",&What::set_which)
567  .def("how",&What::how, return_value_policy<copy_const_reference>())
568  .def("which",&What::which, return_value_policy<copy_const_reference>())
569  .def("set_starttime",&What::set_starttime)
570  .def("set_endtime",&What::set_endtime)
571  .def("startTime",&What::startTime, return_value_policy<copy_const_reference>())
572  .def("endTime",&What::endTime, return_value_policy<copy_const_reference>())
573  ;
574  }
575 }
576 
578 
579 
580 
std::string trend_plot(std::string const &, std::string const &, std::vector< int > const &, std::vector< float > const &, std::vector< std::string > const &) const
std::vector< Item > ObIDMap_rpc
Definition: RPCObPVSSmap.h:34
int i
Definition: DBlmapReader.cc:9
std::string plot(std::string const &, std::string const &, std::vector< int > const &, std::vector< float > const &) const
DbTransaction & transaction()
Definition: DbSession.cc:208
ExtractWhat< Class > What
void open(const std::string &connectionString, bool readOnly=false)
Definition: DbSession.cc:159
DbConnectionConfiguration & configuration()
Definition: DbConnection.cc:83
#define PYTHON_WRAPPER(_class, _name)
void set_which(std::vector< int > &i)
tuple starttime
Definition: lumiContext.py:322
boost::function< void(RPCObVmon const &pl, std::vector< int > const &which, std::vector< float > &result, const float &starttime, const float &endtime)> RPCObVmonExtractor
Double_t linearF(Double_t *x, Double_t *par)
std::string summary() const
int start(bool readOnly=false)
start transaction
void extractDay(RPCObVmon const &pl, std::vector< int > const &which, std::vector< float > &result, const float &starttime, const float &endtime)
virtual std::string name()
Definition: RPCGeomServ.cc:20
std::vector< V_Item > ObVmon_rpc
Definition: RPCObCond.h:44
T sqrt(T t)
Definition: SSEVec.h:48
rpcobvmon::How const & how() const
void extractDetId(RPCObVmon const &pl, std::vector< int > const &which, std::vector< float > &result, const float &starttime, const float &endtime)
tuple result
Definition: query.py:137
void extractTime(RPCObVmon const &pl, std::vector< int > const &which, std::vector< float > &result, const float &starttime, const float &endtime)
std::string summary_adv(std::string const &, std::vector< int > const &, std::vector< float > const &, std::vector< std::string > const &) const
T min(T a, T b)
Definition: MathUtil.h:58
void swap(std::vector< float > &v)
unsigned long long toUNIX(int date, int time)
static rpcobvmon::RPCObVmonExtractor & extractor(rpcobvmon::How how)
int elCount
Definition: asciidump.py:417
DbSession createSession() const
Definition: DbConnection.cc:66
void defineWhat< RPCObVmon >()
list object
Definition: dbtoconf.py:77
void setAuthenticationPath(const std::string &p)
tuple filename
Definition: lut2db_cfg.py:20
void extractCurrent(RPCObVmon const &pl, std::vector< int > const &which, std::vector< float > &result, const float &starttime, const float &endtime)
tuple cout
Definition: gather_cfg.py:121
void compute(Class const &it) override
Definition: DDAxes.h:10
boost::shared_ptr< T > getTypedObject(const std::string &objectId)
Definition: DbSession.h:126
std::vector< int > const & which() const
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
float const & startTime() const