Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "DQMServices/XdaqCollector/interface/XmasToDQMEventInfo.h"
00012 #include <TSystem.h>
00013
00014
00015
00016 #include "FWCore/Version/interface/GetReleaseVersion.h"
00017
00018 #include <stdio.h>
00019 #include <sstream>
00020 #include <math.h>
00021
00022 using namespace edm;
00023 using namespace std;
00024
00025 XmasToDQMEventInfo::XmasToDQMEventInfo(const ParameterSet& ps){
00026
00027 cout << "Constructor of XmasToDQMEventInfo called...." << endl;
00028
00029 parameters_ = ps;
00030 pEvent_ = 0;
00031 evtRateCount_ = 0;
00032 gettimeofday(¤tTime_,NULL);
00033 lastAvgTime_ = currentTime_;
00034
00035 dbe_ = edm::Service<DQMStore>().operator->();
00036
00037 string eventinfofolder = parameters_.getUntrackedParameter<string>("eventInfoFolder", "EventInfo") ;
00038 string subsystemname = parameters_.getUntrackedParameter<string>("subSystemFolder", "YourSubsystem") ;
00039 string currentfolder = subsystemname + "/" + eventinfofolder ;
00040 cout << "currentfolder " << currentfolder << endl;
00041
00042 evtRateWindow_ = parameters_.getUntrackedParameter<double>("eventRateWindow", 0.5);
00043 if(evtRateWindow_<=0.15) evtRateWindow_=0.15;
00044 cout << "Event Rate averaged over " << evtRateWindow_ << " minutes" << endl;
00045
00046 dbe_->setCurrentFolder(currentfolder) ;
00047
00048
00049 runId_ = dbe_->bookInt("iRun");
00050 lumisecId_ = dbe_->bookInt("iLumiSection");
00051 eventId_ = dbe_->bookInt("iEvent");
00052 eventTimeStamp_ = dbe_->bookFloat("eventTimeStamp");
00053
00054 dbe_->setCurrentFolder(currentfolder) ;
00055
00056 processTimeStamp_ = dbe_->bookFloat("processTimeStamp");
00057 processTimeStamp_->Fill(getUTCtime(¤tTime_));
00058 processLatency_ = dbe_->bookFloat("processLatency");
00059 processTimeStamp_->Fill(-1);
00060 processEvents_ = dbe_->bookInt("processedEvents");
00061 processEvents_->Fill(pEvent_);
00062 processEventRate_ = dbe_->bookFloat("processEventRate");
00063 processEventRate_->Fill(-1);
00064 nUpdates_= dbe_->bookInt("processUpdates");
00065 nUpdates_->Fill(-1);
00066
00067
00068 processId_= dbe_->bookInt("processID");
00069 processId_->Fill(gSystem->GetPid());
00070 processStartTimeStamp_ = dbe_->bookFloat("processStartTimeStamp");
00071 processStartTimeStamp_->Fill(getUTCtime(¤tTime_));
00072 runStartTimeStamp_ = dbe_->bookFloat("runStartTimeStamp");
00073 hostName_= dbe_->bookString("hostName",gSystem->HostName());
00074 processName_= dbe_->bookString("processName",subsystemname);
00075 workingDir_= dbe_->bookString("workingDir",gSystem->pwd());
00076 cmsswVer_= dbe_->bookString("CMSSW_Version",edm::getReleaseVersion());
00077
00078
00079
00080 string subfolder = currentfolder + "/reportSummaryContents" ;
00081 dbe_->setCurrentFolder(subfolder);
00082
00083 }
00084
00085 XmasToDQMEventInfo::~XmasToDQMEventInfo(){
00086
00087 cout<<"[XmasToDQMEventInfo]: destructor"<<endl;
00088
00089 }
00090
00091 void XmasToDQMEventInfo::beginRun(const edm::Run& r, const edm::EventSetup &c ) {
00092
00093 const edm::Timestamp time = r.beginTime();
00094
00095 float sec = time.value() >> 32;
00096 float usec = 0xFFFFFFFF & time.value() ;
00097
00098
00099
00100
00101
00102 runStartTimeStamp_->Fill(sec+usec/1000000.);
00103
00104 }
00105
00106 void XmasToDQMEventInfo::analyze(const Event& e, const EventSetup& c){
00107
00108 static int icalls = 1;
00109 cout << "XmasToDQMEventInfo::analyze call = " << icalls << std::endl;
00110
00111
00112 std::string runNumber;
00113
00114
00115 runNumber = xmas2dqm::wse::ToDqm::instance()->runNumber_.toString();
00116 std::cout << "EventInfo runNumber ... = " << runNumber << std::endl;
00117
00118
00119 std::istringstream istrfloat(runNumber);
00120 float runNumber_value;
00121 istrfloat >> runNumber_value;
00122 runId_->Fill(runNumber_value);
00123
00124 lumisecId_->Fill(e.luminosityBlock());
00125 eventId_->Fill(e.id().event());
00126 eventTimeStamp_->Fill(e.time().value()/(double)0xffffffff);
00127
00128 pEvent_++;
00129 evtRateCount_++;
00130 processEvents_->Fill(pEvent_);
00131
00132 lastUpdateTime_=currentTime_;
00133 gettimeofday(¤tTime_,NULL);
00134 processTimeStamp_->Fill(getUTCtime(¤tTime_));
00135 processLatency_->Fill(getUTCtime(&lastUpdateTime_,¤tTime_));
00136
00137 float time = getUTCtime(&lastAvgTime_,¤tTime_);
00138 if(time>=(evtRateWindow_*60.0)){
00139 processEventRate_->Fill((float)evtRateCount_/time);
00140 evtRateCount_ = 0;
00141 lastAvgTime_ = currentTime_;
00142 }
00143
00144 icalls++;
00145 return;
00146 }
00147
00148 double XmasToDQMEventInfo::getUTCtime(timeval* a, timeval* b){
00149 double deltaT=(*a).tv_sec*1000.0+(*a).tv_usec/1000.0;
00150 if(b!=NULL) deltaT=(*b).tv_sec*1000.0+(*b).tv_usec/1000.0 - deltaT;
00151 return deltaT/1000.0;
00152 }