1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
// -*- C++ -*-
//
// Package: SiPixelErrorsDigisToCalibDigis
// Class: SiPixelErrorsDigisToCalibDigis
//
/**\class SiPixelErrorsDigisToCalibDigis SiPixelErrorsDigisToCalibDigis.cc SiPixelErrors/SiPixelErrorsDigisToCalibDigis/src/SiPixelErrorsDigisToCalibDigis.cc
Description: <one line class summary>
Implementation:
<Notes on implementation>
*/
//
// Original Author: Ricardo Vasquez Sierra
// Created: Wed Apr 9 12:43:02 CEST 2008
//
//
// system include files
#include <memory>
#include "SiPixelErrorsDigisToCalibDigis.h"
// user include files
#include "FWCore/Framework/interface/MakerMacros.h"
//
// constants, enums and typedefs
//
//
// static data member definitions
//
//
// constructors and destructor
//
SiPixelErrorsDigisToCalibDigis::SiPixelErrorsDigisToCalibDigis(const edm::ParameterSet& iConfig)
{
siPixelProducerLabel_ = iConfig.getParameter<edm::InputTag>("SiPixelProducerLabelTag");
createOutputFile_ = iConfig.getUntrackedParameter<bool>("saveFile", false);
outputFilename_ = iConfig.getParameter<std::string>("outputFilename");
daqBE_ = &*edm::Service<DQMStore>();
folderMaker_ = new SiPixelFolderOrganizer();
tPixelCalibDigiError = consumes<edm::DetSetVector<SiPixelCalibDigiError> >(siPixelProducerLabel_);
trackerGeomToken_ = esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>();
// std::cout<<"siPixelProducerLabel_ = "<<siPixelProducerLabel_<<std::endl;
// std::cout<<"createOutputFile_= "<< createOutputFile_<<std::endl;
// std::cout<<"outpuFilename_= "<< outputFilename_<< std::endl;
}
SiPixelErrorsDigisToCalibDigis::~SiPixelErrorsDigisToCalibDigis() {
// do anything here that needs to be done at desctruction time
// (e.g. close files, deallocate resources etc.)
}
//
// member functions
//
// ------------ method called to for each event ------------
void SiPixelErrorsDigisToCalibDigis::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
using namespace edm;
static int first(1);
if (1 == first) {
first = 0;
geom_ = iSetup.getHandle(trackerGeomToken_);
theHistogramIdWorker_ = new SiPixelHistogramId(siPixelProducerLabel_.label());
}
Handle<DetSetVector<SiPixelCalibDigiError> > thePlaquettes;
iEvent.getByToken(tPixelCalibDigiError, thePlaquettes);
// iEvent.getByLabel("siPixelCalibDigis", thePlaquettes);
DetSetVector<SiPixelCalibDigiError>::const_iterator digiIter;
for (digiIter = thePlaquettes->begin(); digiIter != thePlaquettes->end(); digiIter++) {
uint32_t detId = digiIter->id;
DetSet<SiPixelCalibDigiError>::const_iterator ipix;
//loop over pixel errors pulsed in the current plaquette
MonitorElement* temp_;
std::map<uint32_t, MonitorElement*>::iterator mapIterator =
SiPixelErrorsDigisToCalibDigis_2DErrorInformation_.find(detId);
if (digiIter->begin() != digiIter->end()) {
if (mapIterator == SiPixelErrorsDigisToCalibDigis_2DErrorInformation_.end()) {
// std::cout << "This is the beginning of an error 2d histo booking: "<<std::endl;
setDQMDirectory(detId);
temp_ = bookDQMHistoPlaquetteSummary2D(detId, "SiPixelErrorsCalibDigis", "SiPixelErrorsDigisToCalibDigis");
SiPixelErrorsDigisToCalibDigis_2DErrorInformation_.insert(std::make_pair(detId, temp_));
} else {
// std::cout << "This one was already booked."<<std::endl;
temp_ = (*mapIterator).second;
}
for (ipix = digiIter->begin(); ipix != digiIter->end(); ++ipix) {
temp_->Fill(ipix->getCol(), ipix->getRow());
// std::cout << "detId: " << detId << " " << ipix->getRow() << " " << ipix->getCol() << std::endl;
}
} // end of the if statement asking if the plaquette in question has any errors in it
} // end of the for loop that goes through all plaquettes
}
// ------------ method called once each job just after ending the event loop ------------
void SiPixelErrorsDigisToCalibDigis::endJob() {
if (!outputFilename_.empty() && createOutputFile_) {
edm::LogInfo("SiPixelErrorCalibDigis") << "Writing ROOT file to: " << outputFilename_ << std::endl;
if (edm::Service<DQMStore>().isAvailable())
edm::Service<DQMStore>()->save(outputFilename_);
}
}
// ------------ helper functions ---------------------------------------------------------
SiPixelErrorsDigisToCalibDigis::MonitorElement* SiPixelErrorsDigisToCalibDigis::bookDQMHistogram2D(uint32_t detid,
std::string name,
std::string title,
int nchX,
double lowX,
double highX,
int nchY,
double lowY,
double highY) {
std::string hid = theHistogramIdWorker_->setHistoId(name, detid);
return daqBE_->book2D(hid, title, nchX, lowX, highX, nchY, lowY, highY);
}
SiPixelErrorsDigisToCalibDigis::MonitorElement* SiPixelErrorsDigisToCalibDigis::bookDQMHistoPlaquetteSummary2D(
uint32_t detid, std::string name, std::string title) {
DetId detId(detid);
const TrackerGeometry& theTracker(*geom_);
const PixelGeomDetUnit* theGeomDet = dynamic_cast<const PixelGeomDetUnit*>(theTracker.idToDet(detId));
int maxcol = theGeomDet->specificTopology().ncolumns();
int maxrow = theGeomDet->specificTopology().nrows();
std::string hid = theHistogramIdWorker_->setHistoId(name, detid);
return daqBE_->book2D(hid, title, maxcol, 0, maxcol, maxrow, 0, maxrow);
}
bool SiPixelErrorsDigisToCalibDigis::setDQMDirectory(std::string dirName) {
daqBE_->setCurrentFolder(dirName);
return daqBE_->dirExists(dirName);
}
bool SiPixelErrorsDigisToCalibDigis::setDQMDirectory(uint32_t detID) { return folderMaker_->setModuleFolder(detID, 0); }
// -- define this as a plug-in
DEFINE_FWK_MODULE(SiPixelErrorsDigisToCalibDigis);
|