CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/DQM/SiPixelMonitorRecHit/src/SiPixelRecHitSource.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    SiPixelMonitorRecHits
00004 // Class:      SiPixelRecHitSource
00005 // 
00014 //
00015 // Original Author:  Vincenzo Chiochia
00016 //         Created:  
00017 // $Id: SiPixelRecHitSource.cc,v 1.28 2013/04/17 09:48:44 itopsisg Exp $
00018 //
00019 //
00020 // Adapted by:  Keith Rose
00021 //      For use in SiPixelMonitorClient for RecHits
00022 // Updated by: Lukas Wehrli
00023 // for pixel offline DQM 
00024 
00025 #include "DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitSource.h"
00026 // Framework
00027 #include "FWCore/ServiceRegistry/interface/Service.h"
00028 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00029 // DQM Framework
00030 #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h"
00031 #include "DQMServices/Core/interface/DQMStore.h"
00032 // Geometry
00033 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00034 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00035 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00036 // DataFormats
00037 #include "DataFormats/DetId/interface/DetId.h"
00038 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00039 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00040 #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h"
00041 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00042 #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h"
00043 
00044 //
00045 #include <string>
00046 #include <stdlib.h>
00047 #include <iostream>
00048 using namespace std;
00049 using namespace edm;
00050 
00051 SiPixelRecHitSource::SiPixelRecHitSource(const edm::ParameterSet& iConfig) :
00052   conf_(iConfig),
00053   src_( conf_.getParameter<edm::InputTag>( "src" ) ),
00054   saveFile( conf_.getUntrackedParameter<bool>("saveFile",false) ),
00055   isPIB( conf_.getUntrackedParameter<bool>("isPIB",false) ),
00056   slowDown( conf_.getUntrackedParameter<bool>("slowDown",false) ),
00057   modOn( conf_.getUntrackedParameter<bool>("modOn",true) ),
00058   twoDimOn( conf_.getUntrackedParameter<bool>("twoDimOn",true) ),
00059   reducedSet( conf_.getUntrackedParameter<bool>("reducedSet",false) ),
00060   ladOn( conf_.getUntrackedParameter<bool>("ladOn",false) ), 
00061   layOn( conf_.getUntrackedParameter<bool>("layOn",false) ), 
00062   phiOn( conf_.getUntrackedParameter<bool>("phiOn",false) ), 
00063   ringOn( conf_.getUntrackedParameter<bool>("ringOn",false) ), 
00064   bladeOn( conf_.getUntrackedParameter<bool>("bladeOn",false) ), 
00065   diskOn( conf_.getUntrackedParameter<bool>("diskOn",false) ), 
00066   isUpgrade( conf_.getUntrackedParameter<bool>("isUpgrade",false) )
00067 {
00068    theDMBE = edm::Service<DQMStore>().operator->();
00069    LogInfo ("PixelDQM") << "SiPixelRecHitSource::SiPixelRecHitSource: Got DQM BackEnd interface"<<endl;
00070 }
00071 
00072 
00073 SiPixelRecHitSource::~SiPixelRecHitSource()
00074 {
00075    // do anything here that needs to be done at desctruction time
00076   // (e.g. close files, deallocate resources etc.)
00077   LogInfo ("PixelDQM") << "SiPixelRecHitSource::~SiPixelRecHitSource: Destructor"<<endl;
00078   std::map<uint32_t,SiPixelRecHitModule*>::iterator struct_iter;
00079   for (struct_iter = thePixelStructure.begin() ; struct_iter != thePixelStructure.end() ; struct_iter++){
00080     delete struct_iter->second;
00081     struct_iter->second = 0;
00082   }
00083 }
00084 
00085 
00086 void SiPixelRecHitSource::beginJob(){
00087   firstRun = true;
00088 }
00089 
00090 
00091 void SiPixelRecHitSource::beginRun(const edm::Run& r, const edm::EventSetup& iSetup){
00092 
00093   LogInfo ("PixelDQM") << " SiPixelRecHitSource::beginJob - Initialisation ... " << std::endl;
00094   LogInfo ("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/" 
00095             << layOn << "/" << phiOn << std::endl;
00096   LogInfo ("PixelDQM") << "Blade/Disk/Ring" << bladeOn << "/" << diskOn << "/" 
00097             << ringOn << std::endl;
00098   LogInfo ("PixelDQM") << "2DIM IS " << twoDimOn << "\n";
00099   
00100   if(firstRun){
00101     eventNo = 0;
00102     // Build map
00103     buildStructure(iSetup);
00104     // Book Monitoring Elements
00105     bookMEs();
00106     firstRun = false;
00107   }
00108 }
00109 
00110 
00111 void SiPixelRecHitSource::endJob(void){
00112 
00113 
00114   if(saveFile){
00115     LogInfo ("PixelDQM") << " SiPixelRecHitSource::endJob - Saving Root File " << std::endl;
00116     std::string outputFile = conf_.getParameter<std::string>("outputFile");
00117     theDMBE->save( outputFile );
00118   }
00119 
00120 }
00121 
00122 //------------------------------------------------------------------
00123 // Method called for every event
00124 //------------------------------------------------------------------
00125 void SiPixelRecHitSource::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00126 {
00127   eventNo++;
00128   //cout << eventNo << endl;
00129   // get input data
00130   edm::Handle<SiPixelRecHitCollection>  recHitColl;
00131   iEvent.getByLabel( src_, recHitColl );
00132 
00133   std::map<uint32_t,SiPixelRecHitModule*>::iterator struct_iter;
00134   for (struct_iter = thePixelStructure.begin() ; struct_iter != thePixelStructure.end() ; struct_iter++) {
00135     uint32_t TheID = (*struct_iter).first;
00136 
00137     SiPixelRecHitCollection::const_iterator match = recHitColl->find(TheID);
00138     
00139       // if( pixelrechitRangeIteratorBegin == pixelrechitRangeIteratorEnd) {cout << "oops" << endl;}
00140       float rechit_x = 0;
00141       float rechit_y = 0;
00142       int rechit_count = 0;
00143 
00144       if (match != recHitColl->end()) {
00145         SiPixelRecHitCollection::DetSet pixelrechitRange = *match;
00146         SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorBegin = pixelrechitRange.begin();
00147         SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorEnd = pixelrechitRange.end();
00148         SiPixelRecHitCollection::DetSet::const_iterator pixeliter = pixelrechitRangeIteratorBegin;
00149 
00150        for ( ; pixeliter != pixelrechitRangeIteratorEnd; pixeliter++) 
00151          {
00152           
00153 
00154           rechit_count++;
00155           //cout << TheID << endl;
00156           SiPixelRecHit::ClusterRef const& clust = pixeliter->cluster();
00157           int sizeX = (*clust).sizeX();
00158           //cout << sizeX << endl;
00159           int sizeY = (*clust).sizeY();
00160           //cout << sizeY << endl;
00161           LocalPoint lp = pixeliter->localPosition();
00162           rechit_x = lp.x();
00163           rechit_y = lp.y();
00164           
00165           LocalError lerr = pixeliter->localPositionError();
00166           float lerr_x = sqrt(lerr.xx());
00167           float lerr_y = sqrt(lerr.yy());
00168           //std::cout << "errors " << lerr_x << " " << lerr_y << std::endl;
00169           //cout << "hh" << endl;
00170           (*struct_iter).second->fill(rechit_x, rechit_y, sizeX, sizeY, lerr_x, lerr_y, 
00171                                       modOn, ladOn, layOn, phiOn, bladeOn, diskOn, ringOn, 
00172                                       twoDimOn, reducedSet);
00173           //cout << "ii" << endl;
00174         
00175         }
00176       }
00177       if(rechit_count > 0) (*struct_iter).second->nfill(rechit_count, modOn, ladOn, layOn, phiOn, bladeOn, diskOn, ringOn);
00178     
00179   }
00180 
00181   // slow down...
00182   if(slowDown) usleep(10000);
00183   
00184 }
00185 
00186 //------------------------------------------------------------------
00187 // Build data structure
00188 //------------------------------------------------------------------
00189 void SiPixelRecHitSource::buildStructure(const edm::EventSetup& iSetup){
00190 
00191   LogInfo ("PixelDQM") <<" SiPixelRecHitSource::buildStructure" ;
00192   edm::ESHandle<TrackerGeometry> pDD;
00193   iSetup.get<TrackerDigiGeometryRecord>().get( pDD );
00194 
00195   LogVerbatim ("PixelDQM") << " *** Geometry node for TrackerGeom is  "<<&(*pDD)<<std::endl;
00196   LogVerbatim ("PixelDQM") << " *** I have " << pDD->dets().size() <<" detectors"<<std::endl;
00197   LogVerbatim ("PixelDQM") << " *** I have " << pDD->detTypes().size() <<" types"<<std::endl;
00198   
00199   for(TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++){
00200     
00201     if(dynamic_cast<PixelGeomDetUnit*>((*it))!=0){
00202 
00203       DetId detId = (*it)->geographicalId();
00204       // const GeomDetUnit      * geoUnit = pDD->idToDetUnit( detId );
00205       //const PixelGeomDetUnit * pixDet  = dynamic_cast<const PixelGeomDetUnit*>(geoUnit);
00206 
00207           
00208           
00209               // SiPixelRecHitModule *theModule = new SiPixelRecHitModule(id, rechit_x, rechit_y, x_res, y_res, x_pull, y_pull);
00210         
00211         
00212             if((detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) ||
00213                (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap))){ 
00214               uint32_t id = detId();
00215               SiPixelRecHitModule* theModule = new SiPixelRecHitModule(id);
00216               if(detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) {
00217                 if(isPIB) continue;
00218                 LogDebug ("PixelDQM") << " ---> Adding Barrel Module " <<  detId.rawId() << endl;
00219                 thePixelStructure.insert(pair<uint32_t,SiPixelRecHitModule*> (id,theModule));
00220                 
00221               } else if( (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) && (!isUpgrade)) {
00222                 LogDebug ("PixelDQM") << " ---> Adding Endcap Module " <<  detId.rawId() << endl;
00223                 PixelEndcapName::HalfCylinder side = PixelEndcapName(DetId(id)).halfCylinder();
00224                 int disk   = PixelEndcapName(DetId(id)).diskName();
00225                 int blade  = PixelEndcapName(DetId(id)).bladeName();
00226                 int panel  = PixelEndcapName(DetId(id)).pannelName();
00227                 int module = PixelEndcapName(DetId(id)).plaquetteName();
00228 
00229                 char sside[80];  sprintf(sside,  "HalfCylinder_%i",side);
00230                 char sdisk[80];  sprintf(sdisk,  "Disk_%i",disk);
00231                 char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00232                 char spanel[80]; sprintf(spanel, "Panel_%i",panel);
00233                 char smodule[80];sprintf(smodule,"Module_%i",module);
00234                 std::string side_str = sside;
00235                 std::string disk_str = sdisk;
00236                 bool mask = side_str.find("HalfCylinder_1")!=string::npos||
00237                             side_str.find("HalfCylinder_2")!=string::npos||
00238                             side_str.find("HalfCylinder_4")!=string::npos||
00239                             disk_str.find("Disk_2")!=string::npos;
00240                 if(isPIB && mask) continue;
00241         
00242                 thePixelStructure.insert(pair<uint32_t,SiPixelRecHitModule*> (id,theModule));
00243               } else if( (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) && (isUpgrade)) {
00244                 LogDebug ("PixelDQM") << " ---> Adding Endcap Module " <<  detId.rawId() << endl;
00245                 PixelEndcapNameUpgrade::HalfCylinder side = PixelEndcapNameUpgrade(DetId(id)).halfCylinder();
00246                 int disk   = PixelEndcapNameUpgrade(DetId(id)).diskName();
00247                 int blade  = PixelEndcapNameUpgrade(DetId(id)).bladeName();
00248                 int panel  = PixelEndcapNameUpgrade(DetId(id)).pannelName();
00249                 int module = PixelEndcapNameUpgrade(DetId(id)).plaquetteName();
00250 
00251                 char sside[80];  sprintf(sside,  "HalfCylinder_%i",side);
00252                 char sdisk[80];  sprintf(sdisk,  "Disk_%i",disk);
00253                 char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00254                 char spanel[80]; sprintf(spanel, "Panel_%i",panel);
00255                 char smodule[80];sprintf(smodule,"Module_%i",module);
00256                 std::string side_str = sside;
00257                 std::string disk_str = sdisk;
00258                 bool mask = side_str.find("HalfCylinder_1")!=string::npos||
00259                             side_str.find("HalfCylinder_2")!=string::npos||
00260                             side_str.find("HalfCylinder_4")!=string::npos||
00261                             disk_str.find("Disk_2")!=string::npos;
00262                 if(isPIB && mask) continue;
00263         
00264                 thePixelStructure.insert(pair<uint32_t,SiPixelRecHitModule*> (id,theModule));
00265               }//endif(isUpgrade)
00266             }
00267         }           
00268   }
00269 
00270   LogInfo ("PixelDQM") << " *** Pixel Structure Size " << thePixelStructure.size() << endl;
00271 }
00272 //------------------------------------------------------------------
00273 // Book MEs
00274 //------------------------------------------------------------------
00275 void SiPixelRecHitSource::bookMEs(){
00276   
00277   std::map<uint32_t,SiPixelRecHitModule*>::iterator struct_iter;
00278     
00279   SiPixelFolderOrganizer theSiPixelFolder;
00280   
00281   for(struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++){
00282     
00284     if(modOn){
00285       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,0,isUpgrade)){
00286         (*struct_iter).second->book( conf_,0,twoDimOn, reducedSet, isUpgrade);
00287       } else {
00288         if(!isPIB) throw cms::Exception("LogicError")
00289           << "[SiPixelDigiSource::bookMEs] Creation of DQM folder failed";
00290       }
00291     }
00292     if(ladOn){
00293       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,1,isUpgrade)){
00294         (*struct_iter).second->book( conf_,1,twoDimOn, reducedSet, isUpgrade);
00295         } else {
00296         LogDebug ("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n";
00297       }
00298     }
00299     if(layOn){
00300       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,2,isUpgrade)){
00301         (*struct_iter).second->book( conf_,2,twoDimOn, reducedSet, isUpgrade);
00302         } else {
00303         LogDebug ("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n";
00304       }
00305     }
00306     if(phiOn){
00307       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,3,isUpgrade)){
00308         (*struct_iter).second->book( conf_,3,twoDimOn, reducedSet, isUpgrade);
00309         } else {
00310         LogDebug ("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n";
00311       }
00312     }
00313     if(bladeOn){
00314       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,4,isUpgrade)){
00315         (*struct_iter).second->book( conf_,4,twoDimOn, reducedSet, isUpgrade);
00316         } else {
00317         LogDebug ("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n";
00318       }
00319     }
00320     if(diskOn){
00321       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,5,isUpgrade)){
00322         (*struct_iter).second->book( conf_,5,twoDimOn, reducedSet, isUpgrade);
00323         } else {
00324         LogDebug ("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n";
00325       }
00326     }
00327     if(ringOn){
00328       if(theSiPixelFolder.setModuleFolder((*struct_iter).first,6,isUpgrade)){
00329         (*struct_iter).second->book( conf_,6,twoDimOn, reducedSet, isUpgrade);
00330         } else {
00331         LogDebug ("PixelDQM") << "PROBLEM WITH RING-FOLDER\n";
00332       }
00333     }
00334 
00335   }
00336 
00337 }
00338 
00339 //define this as a plug-in
00340 DEFINE_FWK_MODULE(SiPixelRecHitSource);