00001 #include "DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h"
00002
00003
00004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00005 #include "FWCore/Framework/interface/EventSetup.h"
00006 #include "FWCore/Framework/interface/LuminosityBlock.h"
00007 #include "FWCore/ServiceRegistry/interface/Service.h"
00008 #include "FWCore/ParameterSet/interface/FileInPath.h"
00009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00010
00011 #include "DataFormats/DetId/interface/DetId.h"
00012 #include "DataFormats/GeometrySurface/interface/Surface.h"
00013 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00014 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00015 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00016 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00017 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
00018 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00019
00020 #include "CondFormats/SiPixelObjects/interface/DetectorIndex.h"
00021 #include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h"
00022
00023 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
00024 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00025 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00026 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00027 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
00028
00029 #include "DQMServices/Core/interface/DQMStore.h"
00030 #include "DQMServices/Core/interface/MonitorElement.h"
00031
00032 #include "DQM/SiPixelMonitorClient/interface/SiPixelWebInterface.h"
00033 #include "DQM/SiPixelMonitorClient/interface/SiPixelActionExecutor.h"
00034 #include "DQM/SiPixelMonitorClient/interface/SiPixelInformationExtractor.h"
00035 #include "DQM/SiPixelMonitorClient/interface/SiPixelUtility.h"
00036
00037 #include <SealBase/Callback.h>
00038
00039 #include "xgi/Method.h"
00040 #include "xgi/Utils.h"
00041
00042 #include "cgicc/Cgicc.h"
00043 #include "cgicc/FormEntry.h"
00044 #include "cgicc/HTMLClasses.h"
00045
00046 #include <iostream>
00047 #include <iomanip>
00048 #include <stdio.h>
00049 #include <string>
00050 #include <sstream>
00051 #include <math.h>
00052
00053 #define BUF_SIZE 256
00054
00055 using namespace edm;
00056 using namespace std;
00057
00058
00059
00060 SiPixelEDAClient::SiPixelEDAClient(const edm::ParameterSet& ps) :
00061 ModuleWeb("SiPixelEDAClient"){
00062
00063
00064 edm::LogInfo("SiPixelEDAClient") << " Creating SiPixelEDAClient " << "\n" ;
00065
00066 bei_ = Service<DQMStore>().operator->();
00067
00068 summaryFrequency_ = ps.getUntrackedParameter<int>("SummaryCreationFrequency",20);
00069 tkMapFrequency_ = ps.getUntrackedParameter<int>("TkMapCreationFrequency",50);
00070 staticUpdateFrequency_ = ps.getUntrackedParameter<int>("StaticUpdateFrequency",10);
00071 actionOnLumiSec_ = ps.getUntrackedParameter<bool>("ActionOnLumiSection",false);
00072 actionOnRunEnd_ = ps.getUntrackedParameter<bool>("ActionOnRunEnd",true);
00073 evtOffsetForInit_ = ps.getUntrackedParameter<int>("EventOffsetForInit",10);
00074 offlineXMLfile_ = ps.getUntrackedParameter<bool>("UseOfflineXMLFile",false);
00075 hiRes_ = ps.getUntrackedParameter<bool>("HighResolutionOccupancy",false);
00076 noiseRate_ = ps.getUntrackedParameter<double>("NoiseRateCutValue",0.001);
00077 noiseRateDenominator_ = ps.getUntrackedParameter<int>("NEventsForNoiseCalculation",100000);
00078 Tier0Flag_ = ps.getUntrackedParameter<bool>("Tier0Flag",false);
00079
00080 if(!Tier0Flag_){
00081 string localPath = string("DQM/SiPixelMonitorClient/test/loader.html");
00082 ifstream fin(edm::FileInPath(localPath).fullPath().c_str(), ios::in);
00083 char buf[BUF_SIZE];
00084
00085 if (!fin) {
00086 cerr << "Input File: loader.html"<< " could not be opened!" << endl;
00087 return;
00088 }
00089
00090 while (fin.getline(buf, BUF_SIZE, '\n')) {
00091 html_out_ << buf ;
00092 }
00093 fin.close();
00094
00095 }
00096
00097
00098 sipixelWebInterface_ = new SiPixelWebInterface(bei_,offlineXMLfile_);
00099
00100 sipixelInformationExtractor_ = new SiPixelInformationExtractor(offlineXMLfile_);
00101 sipixelActionExecutor_ = new SiPixelActionExecutor(offlineXMLfile_);
00102
00103
00104 }
00105
00106
00107
00108 SiPixelEDAClient::~SiPixelEDAClient(){
00109
00110
00111 edm::LogInfo("SiPixelEDAClient") << " Deleting SiPixelEDAClient " << "\n" ;
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 }
00123
00124
00125
00126 void SiPixelEDAClient::beginJob(const edm::EventSetup& eSetup){
00127
00128
00129
00130 if (!sipixelWebInterface_->readConfiguration(tkMapFrequency_,summaryFrequency_)) {
00131 edm::LogInfo ("SiPixelEDAClient") <<"[SiPixelEDAClient]: Error to read configuration file!! Summary will not be produced!!!";
00132 summaryFrequency_ = -1;
00133 tkMapFrequency_ = -1;
00134 actionOnLumiSec_ = false;
00135 actionOnRunEnd_ = true;
00136 evtOffsetForInit_ = -1;
00137 }
00138 nLumiSecs_ = 0;
00139 nEvents_ = 0;
00140
00141 bei_->setCurrentFolder("Pixel/");
00142
00143 sipixelActionExecutor_->setupQTests(bei_);
00144
00145 sipixelActionExecutor_->createSummary(bei_);
00146
00147 sipixelActionExecutor_->bookOccupancyPlots(bei_, hiRes_);
00148
00149 sipixelInformationExtractor_->bookGlobalQualityFlag(bei_, noiseRate_,Tier0Flag_);
00150 if(!Tier0Flag_) nFEDs_ = 40;
00151
00152
00153 }
00154
00155
00156
00157 void SiPixelEDAClient::beginRun(Run const& run, edm::EventSetup const& eSetup) {
00158 edm::LogInfo ("SiPixelEDAClient") <<"[SiPixelEDAClient]: Begining of Run";
00159
00160 }
00161
00162
00163
00164 void SiPixelEDAClient::beginLuminosityBlock(edm::LuminosityBlock const& lumiSeg,
00165 edm::EventSetup const& context) {
00166
00167
00168 edm::LogInfo ("SiPixelEDAClient") <<"[SiPixelEDAClient]: Begin of LS transition";
00169
00170
00171 }
00172
00173
00174
00175 void SiPixelEDAClient::analyze(const edm::Event& e, const edm::EventSetup& eSetup){
00176
00177 nEvents_++;
00178 if(!Tier0Flag_){
00179
00180 if(nEvents_==1){
00181
00182 edm::Handle<FEDRawDataCollection> rawDataHandle;
00183 e.getByLabel("source", rawDataHandle);
00184 const FEDRawDataCollection& rawDataCollection = *rawDataHandle;
00185 nFEDs_ = 0;
00186 for(int i = 0; i != 40; i++){
00187 if(rawDataCollection.FEDData(i).size() && rawDataCollection.FEDData(i).data()) nFEDs_++;
00188 }
00189 }
00190
00191 sipixelWebInterface_->setActionFlag(SiPixelWebInterface::CreatePlots);
00192 sipixelWebInterface_->performAction();
00193 }
00194
00195 }
00196
00197
00198
00199 void SiPixelEDAClient::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) {
00200
00201
00202 edm::LogInfo ("SiPixelEDAClient") <<"[SiPixelEDAClient]: End of LS transition, performing the DQM client operation";
00203
00204 nLumiSecs_++;
00205
00206 edm::LogInfo("SiPixelEDAClient") << "====================================================== " << endl << " ===> Iteration # " << nLumiSecs_ << " " << lumiSeg.luminosityBlock() << endl << "====================================================== " << endl;
00207
00208 if(actionOnLumiSec_){
00209
00210 sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Summary);
00211 sipixelWebInterface_->performAction();
00212
00213 sipixelWebInterface_->setActionFlag(SiPixelWebInterface::QTestResult);
00214 sipixelWebInterface_->performAction();
00215
00216 sipixelActionExecutor_->bookOccupancyPlots(bei_, hiRes_);
00217 sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Occupancy);
00218 sipixelWebInterface_->performAction();
00219
00220 bei_->cd();
00221 bool init=true;
00222 sipixelInformationExtractor_->computeGlobalQualityFlag(bei_,init,nFEDs_,Tier0Flag_);
00223 init=true;
00224 sipixelInformationExtractor_->fillGlobalQualityPlot(bei_,init,eSetup,nFEDs_,Tier0Flag_);
00225
00226 init=true;
00227 if(noiseRate_>=0.) sipixelInformationExtractor_->findNoisyPixels(bei_, init, noiseRate_, noiseRateDenominator_, eSetup);
00228 }
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246 }
00247
00248
00249
00250 void SiPixelEDAClient::endRun(edm::Run const& run, edm::EventSetup const& eSetup){
00251
00252
00253
00254
00255
00256 if(actionOnRunEnd_){
00257
00258 sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Summary);
00259 sipixelWebInterface_->performAction();
00260
00261 sipixelWebInterface_->setActionFlag(SiPixelWebInterface::QTestResult);
00262 sipixelWebInterface_->performAction();
00263
00264 sipixelActionExecutor_->bookOccupancyPlots(bei_, hiRes_);
00265 sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Occupancy);
00266 sipixelWebInterface_->performAction();
00267
00268 bei_->cd();
00269 bool init=true;
00270 sipixelInformationExtractor_->computeGlobalQualityFlag(bei_,init,nFEDs_,Tier0Flag_);
00271 init=true;
00272 sipixelInformationExtractor_->fillGlobalQualityPlot(bei_,init,eSetup,nFEDs_,Tier0Flag_);
00273
00274 init=true;
00275 if(noiseRate_>=0.) sipixelInformationExtractor_->findNoisyPixels(bei_, init, noiseRate_, noiseRateDenominator_, eSetup);
00276 }
00277
00278
00279 }
00280
00281
00282
00283
00284 void SiPixelEDAClient::endJob(){
00285
00286 edm::LogInfo("SiPixelEDAClient") <<"[SiPixelEDAClient]: endjob called!";
00287
00288 }
00289
00290
00291
00292 void SiPixelEDAClient::defaultWebPage(xgi::Input *in, xgi::Output *out)
00293 {
00294
00295
00296 bool isRequest = false;
00297 cgicc::Cgicc cgi(in);
00298 cgicc::CgiEnvironment cgie(in);
00299
00300
00301
00302 string q_string = cgie.getQueryString();
00303 if (q_string.find("RequestID") != string::npos) isRequest = true;
00304 if (!isRequest) {
00305 *out << html_out_.str() << std::endl;
00306 } else {
00307
00308 int iter = nEvents_/100;
00309 sipixelWebInterface_->handleEDARequest(in, out, iter);
00310 }
00311
00312
00313 }
00314