00001
00002
00003
00004
00005
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitSource.h"
00026
00027 #include "FWCore/ServiceRegistry/interface/Service.h"
00028 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00029
00030 #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h"
00031 #include "DQMServices/Core/interface/DQMStore.h"
00032
00033 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00034 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00035 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00036
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
00076
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
00103 buildStructure(iSetup);
00104
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
00124
00125 void SiPixelRecHitSource::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00126 {
00127 eventNo++;
00128
00129
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
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
00156 SiPixelRecHit::ClusterRef const& clust = pixeliter->cluster();
00157 int sizeX = (*clust).sizeX();
00158
00159 int sizeY = (*clust).sizeY();
00160
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
00169
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
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
00182 if(slowDown) usleep(10000);
00183
00184 }
00185
00186
00187
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
00205
00206
00207
00208
00209
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 }
00266 }
00267 }
00268 }
00269
00270 LogInfo ("PixelDQM") << " *** Pixel Structure Size " << thePixelStructure.size() << endl;
00271 }
00272
00273
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
00340 DEFINE_FWK_MODULE(SiPixelRecHitSource);