CMS 3D CMS Logo

SiPixelEDAClient.cc

Go to the documentation of this file.
00001 #include "DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h"
00002 
00003 // Framework
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 // -- Constructor
00059 //
00060 SiPixelEDAClient::SiPixelEDAClient(const edm::ParameterSet& ps) :
00061   ModuleWeb("SiPixelEDAClient"){
00062 // cout<<"Entering  SiPixelEDAClient::SiPixelEDAClient: "<<endl;
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')) { // pops off the newline character 
00091       html_out_ << buf ;
00092     }
00093     fin.close();
00094 
00095   }
00096   
00097   // instantiate web interface
00098   sipixelWebInterface_ = new SiPixelWebInterface(bei_,offlineXMLfile_);
00099   //instantiate the two work horses of the client:
00100   sipixelInformationExtractor_ = new SiPixelInformationExtractor(offlineXMLfile_);
00101   sipixelActionExecutor_ = new SiPixelActionExecutor(offlineXMLfile_);
00102   
00103 // cout<<"...leaving  SiPixelEDAClient::SiPixelEDAClient. "<<endl;
00104 }
00105 //
00106 // -- Destructor
00107 //
00108 SiPixelEDAClient::~SiPixelEDAClient(){
00109 //  cout<<"Entering SiPixelEDAClient::~SiPixelEDAClient: "<<endl;
00110   
00111   edm::LogInfo("SiPixelEDAClient") <<  " Deleting SiPixelEDAClient " << "\n" ;
00112 //  if (sipixelWebInterface_) {
00113 //     delete sipixelWebInterface_;
00114 //     sipixelWebInterface_ = 0;
00115 //  }
00116 //  if (trackerMapCreator_) {
00117 //    delete trackerMapCreator_;
00118 //    trackerMapCreator_ = 0;
00119 //  }
00120 
00121 //  cout<<"...leaving SiPixelEDAClient::~SiPixelEDAClient. "<<endl;
00122 }
00123 //
00124 // -- Begin Job
00125 //
00126 void SiPixelEDAClient::beginJob(const edm::EventSetup& eSetup){
00127 //  cout<<"Entering SiPixelEDAClient::beginJob: "<<endl;
00128 
00129   // Read the summary configuration file
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   // Setting up QTests:
00143   sipixelActionExecutor_->setupQTests(bei_);
00144   // Creating Summary Histos:
00145   sipixelActionExecutor_->createSummary(bei_);
00146   // Creating occupancy plots:
00147   sipixelActionExecutor_->bookOccupancyPlots(bei_, hiRes_);
00148   // Booking summary report ME's:
00149   sipixelInformationExtractor_->bookGlobalQualityFlag(bei_, noiseRate_,Tier0Flag_);
00150   if(!Tier0Flag_) nFEDs_ = 40;
00151 
00152 //  cout<<"...leaving SiPixelEDAClient::beginJob. "<<endl;
00153 }
00154 //
00155 // -- Begin Run
00156 //
00157 void SiPixelEDAClient::beginRun(Run const& run, edm::EventSetup const& eSetup) {
00158   edm::LogInfo ("SiPixelEDAClient") <<"[SiPixelEDAClient]: Begining of Run";
00159 
00160 }
00161 //
00162 // -- Begin  Luminosity Block
00163 //
00164 void SiPixelEDAClient::beginLuminosityBlock(edm::LuminosityBlock const& lumiSeg, 
00165                                             edm::EventSetup const& context) {
00166 //  cout<<"Entering SiPixelEDAClient::beginLuminosityBlock: "<<endl;
00167   
00168   edm::LogInfo ("SiPixelEDAClient") <<"[SiPixelEDAClient]: Begin of LS transition";
00169 
00170 //  cout<<"...leaving SiPixelEDAClient::beginLuminosityBlock. "<<endl;
00171 }
00172 //
00173 //  -- Analyze 
00174 //
00175 void SiPixelEDAClient::analyze(const edm::Event& e, const edm::EventSetup& eSetup){
00176 //  cout<<"[SiPixelEDAClient::analyze()] "<<endl;
00177   nEvents_++;  
00178   if(!Tier0Flag_){
00179    
00180     if(nEvents_==1){
00181       // check if any Pixel FED is in readout:
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 // -- End Luminosity Block
00198 //
00199 void SiPixelEDAClient::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) {
00200   //cout<<"Entering SiPixelEDAClient::endLuminosityBlock: "<<endl;
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     //cout << " Updating Summary " << endl;
00210     sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Summary);
00211     sipixelWebInterface_->performAction();
00212     //cout << " Checking QTest results " << endl;
00213     sipixelWebInterface_->setActionFlag(SiPixelWebInterface::QTestResult);
00214     sipixelWebInterface_->performAction();
00215      //cout << " Updating occupancy plots" << endl;
00216     sipixelActionExecutor_->bookOccupancyPlots(bei_, hiRes_);
00217     sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Occupancy);
00218     sipixelWebInterface_->performAction();
00219     //cout  << " Checking Pixel quality flags " << endl;;
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     //cout << " Checking for new noisy pixels " << endl;
00226     init=true;
00227     if(noiseRate_>=0.) sipixelInformationExtractor_->findNoisyPixels(bei_, init, noiseRate_, noiseRateDenominator_, eSetup);
00228   }   
00229          
00230   // -- Create TrackerMap  according to the frequency
00231 //  if (tkMapFrequency_ != -1 && nLumiBlock%tkMapFrequency_ == 1) {
00232 //    cout << " Creating Tracker Map " << endl;
00233 //    trackerMapCreator_->create(bei_);
00234 //    //sipixelWebInterface_->setTkMapFlag(true);
00235 //
00236 //  }
00237   // Create predefined plots
00238 //  if (nLumiBlock%staticUpdateFrequency_  == 1) {
00239 //    cout << " Creating predefined plots " << endl;
00240 //    sipixelWebInterface_->setActionFlag(SiPixelWebInterface::PlotHistogramFromLayout);
00241 //    sipixelWebInterface_->performAction();
00242 //  }
00243 
00244 
00245   //cout<<"...leaving SiPixelEDAClient::endLuminosityBlock. "<<endl;
00246 }
00247 //
00248 // -- End Run
00249 //
00250 void SiPixelEDAClient::endRun(edm::Run const& run, edm::EventSetup const& eSetup){
00251   //cout<<"Entering SiPixelEDAClient::endRun: "<<endl;
00252 
00253   //edm::LogVerbatim ("SiPixelEDAClient") <<"[SiPixelEDAClient]: End of Run, saving  DQM output ";
00254   //int iRun = run.run();
00255   
00256   if(actionOnRunEnd_){
00257     //cout << " Updating Summary " << endl;
00258     sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Summary);
00259     sipixelWebInterface_->performAction();
00260     //cout << " Checking QTest results " << endl;
00261     sipixelWebInterface_->setActionFlag(SiPixelWebInterface::QTestResult);
00262     sipixelWebInterface_->performAction();
00263     //cout << " Updating occupancy plots" << endl;
00264     sipixelActionExecutor_->bookOccupancyPlots(bei_, hiRes_);
00265     sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Occupancy);
00266     sipixelWebInterface_->performAction();
00267     //cout  << " Checking Pixel quality flags " << endl;;
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     //cout << " Checking for new noisy pixels " << endl;
00274     init=true;
00275     if(noiseRate_>=0.) sipixelInformationExtractor_->findNoisyPixels(bei_, init, noiseRate_, noiseRateDenominator_, eSetup);
00276   }
00277   
00278   //cout<<"...leaving SiPixelEDAClient::endRun. "<<endl;
00279 }
00280 
00281 //
00282 // -- End Job
00283 //
00284 void SiPixelEDAClient::endJob(){
00285 //  cout<<"In SiPixelEDAClient::endJob "<<endl;
00286   edm::LogInfo("SiPixelEDAClient") <<"[SiPixelEDAClient]: endjob called!";
00287 
00288 }
00289 //
00290 // -- Create default web page
00291 //
00292 void SiPixelEDAClient::defaultWebPage(xgi::Input *in, xgi::Output *out)
00293 {
00294 //  cout<<"Entering SiPixelEDAClient::defaultWebPage: "<<endl;
00295       
00296   bool isRequest = false;
00297   cgicc::Cgicc cgi(in);
00298   cgicc::CgiEnvironment cgie(in);
00299   //  edm::LogInfo("SiPixelEDAClient") <<"[SiPixelEDAClient]: defaultWebPage "
00300   //             << " query string : " << cgie.getQueryString();
00301   //  if ( xgi::Utils::hasFormElement(cgi,"ClientRequest") ) isRequest = true;
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     // Handles all HTTP requests of the form
00308     int iter = nEvents_/100;
00309     sipixelWebInterface_->handleEDARequest(in, out, iter);
00310   }
00311 
00312 //  cout<<"...leaving SiPixelEDAClient::defaultWebPage. "<<endl;
00313 }
00314 

Generated on Tue Jun 9 17:33:20 2009 for CMSSW by  doxygen 1.5.4