CMS 3D CMS Logo

SiPixelRecHitSource.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiPixelMonitorRecHits
4 // Class: SiPixelRecHitSource
5 //
14 //
15 // Original Author: Vincenzo Chiochia
16 // Created:
17 //
18 //
19 // Adapted by: Keith Rose
20 // For use in SiPixelMonitorClient for RecHits
21 // Updated by: Lukas Wehrli
22 // for pixel offline DQM
23 
25 // Framework
28 // DQM Framework
31 // Geometry
36 // DataFormats
43 
44 //
45 #include <string>
46 #include <cstdlib>
47 #include <iostream>
48 using namespace std;
49 using namespace edm;
50 
52  conf_(iConfig),
53  src_( consumes<SiPixelRecHitCollection>( conf_.getParameter<edm::InputTag>( "src" ))),
54  saveFile( conf_.getUntrackedParameter<bool>("saveFile",false) ),
55  isPIB( conf_.getUntrackedParameter<bool>("isPIB",false) ),
56  slowDown( conf_.getUntrackedParameter<bool>("slowDown",false) ),
57  modOn( conf_.getUntrackedParameter<bool>("modOn",true) ),
58  twoDimOn( conf_.getUntrackedParameter<bool>("twoDimOn",true) ),
59  reducedSet( conf_.getUntrackedParameter<bool>("reducedSet",false) ),
60  ladOn( conf_.getUntrackedParameter<bool>("ladOn",false) ),
61  layOn( conf_.getUntrackedParameter<bool>("layOn",false) ),
62  phiOn( conf_.getUntrackedParameter<bool>("phiOn",false) ),
63  ringOn( conf_.getUntrackedParameter<bool>("ringOn",false) ),
64  bladeOn( conf_.getUntrackedParameter<bool>("bladeOn",false) ),
65  diskOn( conf_.getUntrackedParameter<bool>("diskOn",false) ),
66  isUpgrade( conf_.getUntrackedParameter<bool>("isUpgrade",false) )
67 {
68  firstRun = true;
69  LogInfo ("PixelDQM") << "SiPixelRecHitSource::SiPixelRecHitSource: Got DQM BackEnd interface"<<endl;
70  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
71 }
72 
73 
75 {
76  // do anything here that needs to be done at desctruction time
77  // (e.g. close files, deallocate resources etc.)
78  LogInfo ("PixelDQM") << "SiPixelRecHitSource::~SiPixelRecHitSource: Destructor"<<endl;
79  std::map<uint32_t,SiPixelRecHitModule*>::iterator struct_iter;
80  for (struct_iter = thePixelStructure.begin() ; struct_iter != thePixelStructure.end() ; struct_iter++){
81  delete struct_iter->second;
82  struct_iter->second = nullptr;
83  }
84 }
85 
86 
88 
89  LogInfo ("PixelDQM") << " SiPixelRecHitSource::beginJob - Initialisation ... " << std::endl;
90  LogInfo ("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/"
91  << layOn << "/" << phiOn << std::endl;
92  LogInfo ("PixelDQM") << "Blade/Disk/Ring" << bladeOn << "/" << diskOn << "/"
93  << ringOn << std::endl;
94  LogInfo ("PixelDQM") << "2DIM IS " << twoDimOn << "\n";
95 
96  if(firstRun){
97  eventNo = 0;
98  // Build map
99  buildStructure(iSetup);
100  // Book Monitoring Elements
101  firstRun = false;
102  }
103 }
104 
106  bookMEs(iBooker, iSetup);
107 }
108 
109 //------------------------------------------------------------------
110 // Method called for every event
111 //------------------------------------------------------------------
113 {
114  eventNo++;
115  //cout << eventNo << endl;
116  // get input data
118  iEvent.getByToken( src_, recHitColl );
119 
120  std::map<uint32_t,SiPixelRecHitModule*>::iterator struct_iter;
121  for (struct_iter = thePixelStructure.begin() ; struct_iter != thePixelStructure.end() ; struct_iter++) {
122  uint32_t TheID = (*struct_iter).first;
123 
125 
126  // if( pixelrechitRangeIteratorBegin == pixelrechitRangeIteratorEnd) {cout << "oops" << endl;}
127  float rechit_x = 0;
128  float rechit_y = 0;
129  int rechit_count = 0;
130 
131  if (match != recHitColl->end()) {
132  SiPixelRecHitCollection::DetSet pixelrechitRange = *match;
133  SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorBegin = pixelrechitRange.begin();
134  SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorEnd = pixelrechitRange.end();
135  SiPixelRecHitCollection::DetSet::const_iterator pixeliter = pixelrechitRangeIteratorBegin;
136 
137  for ( ; pixeliter != pixelrechitRangeIteratorEnd; pixeliter++)
138  {
139 
140 
141  rechit_count++;
142  //cout << TheID << endl;
143  SiPixelRecHit::ClusterRef const& clust = pixeliter->cluster();
144  int sizeX = (*clust).sizeX();
145  //cout << sizeX << endl;
146  int sizeY = (*clust).sizeY();
147  //cout << sizeY << endl;
148  LocalPoint lp = pixeliter->localPosition();
149  rechit_x = lp.x();
150  rechit_y = lp.y();
151 
152  LocalError lerr = pixeliter->localPositionError();
153  float lerr_x = sqrt(lerr.xx());
154  float lerr_y = sqrt(lerr.yy());
155  //std::cout << "errors " << lerr_x << " " << lerr_y << std::endl;
156  (*struct_iter).second->fill(rechit_x, rechit_y, sizeX, sizeY, lerr_x, lerr_y,
159 
160  }
161  }
162  if(rechit_count > 0) (*struct_iter).second->nfill(rechit_count, modOn, ladOn, layOn, phiOn, bladeOn, diskOn, ringOn);
163 
164  }
165 
166  // slow down...
167  if(slowDown) usleep(10000);
168 
169 }
170 
171 //------------------------------------------------------------------
172 // Build data structure
173 //------------------------------------------------------------------
175 
176  LogInfo ("PixelDQM") <<" SiPixelRecHitSource::buildStructure" ;
177 
178 
180  edm::ESHandle<TrackerTopology> tTopoHandle;
181 
182  iSetup.get<TrackerDigiGeometryRecord>().get( pDD );
183  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
184 
185  const TrackerTopology *pTT = tTopoHandle.product();
186 
187  LogVerbatim ("PixelDQM") << " *** Geometry node for TrackerGeom is "<<&(*pDD)<<std::endl;
188  LogVerbatim ("PixelDQM") << " *** I have " << pDD->dets().size() <<" detectors"<<std::endl;
189  LogVerbatim ("PixelDQM") << " *** I have " << pDD->detTypes().size() <<" types"<<std::endl;
190 
191  for(TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++){
192 
193  if(dynamic_cast<PixelGeomDetUnit const *>((*it))!=nullptr){
194 
195  DetId detId = (*it)->geographicalId();
196 
197  if((detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) ||
198  (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap))){
199 
200  uint32_t id = detId();
201  SiPixelRecHitModule* theModule = new SiPixelRecHitModule(id);
202 
203  if(detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) {
204  if(isPIB) continue;
205  LogDebug ("PixelDQM") << " ---> Adding Barrel Module " << detId.rawId() << endl;
206  thePixelStructure.insert(pair<uint32_t,SiPixelRecHitModule*> (id,theModule));
207 
208  } else if( (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) ) {
209 
210  LogDebug ("PixelDQM") << " ---> Adding Endcap Module " << detId.rawId() << endl;
211 
213  int disk = PixelEndcapName(DetId(id), pTT, isUpgrade).diskName();
214  int blade = PixelEndcapName(DetId(id), pTT, isUpgrade).bladeName();
215  int panel = PixelEndcapName(DetId(id), pTT, isUpgrade).pannelName();
217 
218  char sside[80]; sprintf(sside, "HalfCylinder_%i",side);
219  char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
220  char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
221  char spanel[80]; sprintf(spanel, "Panel_%i",panel);
222  char smodule[80];sprintf(smodule,"Module_%i",module);
223  std::string side_str = sside;
224  std::string disk_str = sdisk;
225  bool mask = side_str.find("HalfCylinder_1")!=string::npos||
226  side_str.find("HalfCylinder_2")!=string::npos||
227  side_str.find("HalfCylinder_4")!=string::npos||
228  disk_str.find("Disk_2")!=string::npos;
229  if(isPIB && mask) continue;
230 
231  thePixelStructure.insert(pair<uint32_t,SiPixelRecHitModule*> (id,theModule));
232  }
233 
234  }
235  }
236  }//FOR_LOOP
237 
238  LogInfo ("PixelDQM") << " *** Pixel Structure Size " << thePixelStructure.size() << endl;
239 }
240 //------------------------------------------------------------------
241 // Book MEs
242 //------------------------------------------------------------------
244 
245  std::map<uint32_t,SiPixelRecHitModule*>::iterator struct_iter;
246 
247  SiPixelFolderOrganizer theSiPixelFolder(false);
248 
249  for(struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++){
250 
252  if(modOn){
253  if(theSiPixelFolder.setModuleFolder(iBooker,(*struct_iter).first,0,isUpgrade)){
254  (*struct_iter).second->book( conf_,iBooker, iSetup, 0, twoDimOn, reducedSet, isUpgrade);
255  } else {
256  if(!isPIB) throw cms::Exception("LogicError")
257  << "[SiPixelDigiSource::bookMEs] Creation of DQM folder failed";
258  }
259  }
260  if(ladOn){
261  if(theSiPixelFolder.setModuleFolder(iBooker,(*struct_iter).first,1,isUpgrade)){
262  (*struct_iter).second->book( conf_,iBooker, iSetup, 1, twoDimOn, reducedSet, isUpgrade);
263  } else {
264  LogDebug ("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n";
265  }
266  }
267  if(layOn){
268  if(theSiPixelFolder.setModuleFolder(iBooker,(*struct_iter).first,2,isUpgrade)){
269  (*struct_iter).second->book( conf_,iBooker, iSetup, 2, twoDimOn, reducedSet, isUpgrade);
270  } else {
271  LogDebug ("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n";
272  }
273  }
274  if(phiOn){
275  if(theSiPixelFolder.setModuleFolder(iBooker,(*struct_iter).first,3,isUpgrade)){
276  (*struct_iter).second->book( conf_,iBooker, iSetup, 3, twoDimOn, reducedSet, isUpgrade);
277  } else {
278  LogDebug ("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n";
279  }
280  }
281  if(bladeOn){
282  if(theSiPixelFolder.setModuleFolder(iBooker,(*struct_iter).first,4,isUpgrade)){
283  (*struct_iter).second->book( conf_,iBooker, iSetup, 4, twoDimOn, reducedSet, isUpgrade);
284  } else {
285  LogDebug ("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n";
286  }
287  }
288  if(diskOn){
289  if(theSiPixelFolder.setModuleFolder(iBooker,(*struct_iter).first,5,isUpgrade)){
290  (*struct_iter).second->book( conf_,iBooker, iSetup, 5, twoDimOn, reducedSet, isUpgrade);
291  } else {
292  LogDebug ("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n";
293  }
294  }
295  if(ringOn){
296  if(theSiPixelFolder.setModuleFolder(iBooker,(*struct_iter).first,6,isUpgrade)){
297  (*struct_iter).second->book( conf_,iBooker, iSetup, 6, twoDimOn, reducedSet, isUpgrade);
298  } else {
299  LogDebug ("PixelDQM") << "PROBLEM WITH RING-FOLDER\n";
300  }
301  }
302 
303  }
304 
305 }
306 
307 //define this as a plug-in
#define LogDebug(id)
int plaquetteName() const
plaquetteId (in pannel)
T getParameter(std::string const &) const
float xx() const
Definition: LocalError.h:24
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator end(bool update=false) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
SiPixelRecHitSource(const edm::ParameterSet &conf)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
const DetTypeContainer & detTypes() const override
Return a vector of all det types.
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
T y() const
Definition: PV3DBase.h:63
std::map< uint32_t, int > rechit_count
virtual void bookMEs(DQMStore::IBooker &, const edm::EventSetup &iSetup)
edm::ParameterSet conf_
virtual void buildStructure(edm::EventSetup const &)
std::map< uint32_t, SiPixelRecHitModule * > thePixelStructure
void dqmBeginRun(const edm::Run &, edm::EventSetup const &) override
int bladeName() const
blade id
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
int iEvent
Definition: GenABIO.cc:230
float yy() const
Definition: LocalError.h:26
void bookHistograms(DQMStore::IBooker &, edm::Run const &, const edm::EventSetup &) override
T sqrt(T t)
Definition: SSEVec.h:18
bool setModuleFolder(const uint32_t &rawdetid=0, int type=0, bool isUpgrade=false)
Set folder name for a module or plaquette.
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
Definition: DetId.h:18
void analyze(const edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< SiPixelRecHitCollection > src_
const_iterator find(id_type i, bool update=false) const
HLT enums.
iterator end()
Definition: DetSetNew.h:70
int pannelName() const
pannel id
T get() const
Definition: EventSetup.h:63
int diskName() const
disk id
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
HalfCylinder halfCylinder() const
T x() const
Definition: PV3DBase.h:62
T const * product() const
Definition: ESHandle.h:86
Definition: vlib.h:208
Definition: Run.h:44
iterator begin()
Definition: DetSetNew.h:67