CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiPixelClusterSource.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiPixelMonitorCluster
4 // Class: SiPixelClusterSource
5 //
13 //
14 // Original Author: Vincenzo Chiochia & Andrew York
15 // Created:
16 //
17 //
18 // Updated by: Lukas Wehrli
19 // for pixel offline DQM
21 // Framework
24 // DQM Framework
27 // Geometry
32 // DataFormats
39 //
40 #include <string>
41 #include <stdlib.h>
42 
43 using namespace std;
44 using namespace edm;
45 
47  conf_(iConfig),
48  src_( conf_.getParameter<edm::InputTag>( "src" ) ),
49  saveFile( conf_.getUntrackedParameter<bool>("saveFile",false) ),
50  isPIB( conf_.getUntrackedParameter<bool>("isPIB",false) ),
51  slowDown( conf_.getUntrackedParameter<bool>("slowDown",false) ),
52  modOn( conf_.getUntrackedParameter<bool>("modOn",true) ),
53  twoDimOn( conf_.getUntrackedParameter<bool>("twoDimOn",true) ),
54  reducedSet( conf_.getUntrackedParameter<bool>("reducedSet",false) ),
55  ladOn( conf_.getUntrackedParameter<bool>("ladOn",false) ),
56  layOn( conf_.getUntrackedParameter<bool>("layOn",false) ),
57  phiOn( conf_.getUntrackedParameter<bool>("phiOn",false) ),
58  ringOn( conf_.getUntrackedParameter<bool>("ringOn",false) ),
59  bladeOn( conf_.getUntrackedParameter<bool>("bladeOn",false) ),
60  diskOn( conf_.getUntrackedParameter<bool>("diskOn",false) ),
61  smileyOn(conf_.getUntrackedParameter<bool>("smileyOn",false) ),
62  bigEventSize( conf_.getUntrackedParameter<int>("bigEventSize",100) ),
63  isUpgrade( conf_.getUntrackedParameter<bool>("isUpgrade",false) )
64 {
66  LogInfo ("PixelDQM") << "SiPixelClusterSource::SiPixelClusterSource: Got DQM BackEnd interface"<<endl;
67 
68  //set Token(-s)
69  srcToken_ = consumes<edmNew::DetSetVector<SiPixelCluster> >(conf_.getParameter<edm::InputTag>("src"));
70 }
71 
72 
74 {
75  // do anything here that needs to be done at desctruction time
76  // (e.g. close files, deallocate resources etc.)
77  LogInfo ("PixelDQM") << "SiPixelClusterSource::~SiPixelClusterSource: Destructor"<<endl;
78 
79  std::map<uint32_t,SiPixelClusterModule*>::iterator struct_iter;
80  for (struct_iter = thePixelStructure.begin() ; struct_iter != thePixelStructure.end() ; struct_iter++){
81  delete struct_iter->second;
82  struct_iter->second = 0;
83  }
84 }
85 
86 
88  firstRun = true;
89 }
90 
92 
93  LogInfo ("PixelDQM") << " SiPixelClusterSource::beginJob - Initialisation ... " << std::endl;
94  LogInfo ("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/"
95  << layOn << "/" << phiOn << std::endl;
96  LogInfo ("PixelDQM") << "Blade/Disk/Ring" << bladeOn << "/" << diskOn << "/"
97  << ringOn << std::endl;
98  LogInfo ("PixelDQM") << "2DIM IS " << twoDimOn << "\n";
99  LogInfo ("PixelDQM") << "Smiley (Cluster sizeY vs. Cluster eta) is " << smileyOn << "\n";
100 
101  if(firstRun){
102  eventNo = 0;
103  lumSec = 0;
104  nLumiSecs = 0;
105  nBigEvents = 0;
106  // Build map
107  buildStructure(iSetup);
108  // Book Monitoring Elements
109  bookMEs();
110  // Book occupancy maps in global coordinates for all clusters:
111  theDMBE->setCurrentFolder("Pixel/Clusters/OffTrack");
112  //bpix
113  meClPosLayer1 = theDMBE->book2D("position_siPixelClusters_Layer_1","Clusters Layer1;Global Z (cm);Global #phi",200,-30.,30.,128,-3.2,3.2);
114  meClPosLayer2 = theDMBE->book2D("position_siPixelClusters_Layer_2","Clusters Layer2;Global Z (cm);Global #phi",200,-30.,30.,128,-3.2,3.2);
115  meClPosLayer3 = theDMBE->book2D("position_siPixelClusters_Layer_3","Clusters Layer3;Global Z (cm);Global #phi",200,-30.,30.,128,-3.2,3.2);
116  if (isUpgrade) {
117  meClPosLayer4 = theDMBE->book2D("position_siPixelClusters_Layer_4","Clusters Layer4;Global Z (cm);Global #phi",200,-30.,30.,128,-3.2,3.2);
118  }
119  //fpix
120  meClPosDisk1pz = theDMBE->book2D("position_siPixelClusters_pz_Disk_1","Clusters +Z Disk1;Global X (cm);Global Y (cm)",80,-20.,20.,80,-20.,20.);
121  meClPosDisk2pz = theDMBE->book2D("position_siPixelClusters_pz_Disk_2","Clusters +Z Disk2;Global X (cm);Global Y (cm)",80,-20.,20.,80,-20.,20.);
122  meClPosDisk1mz = theDMBE->book2D("position_siPixelClusters_mz_Disk_1","Clusters -Z Disk1;Global X (cm);Global Y (cm)",80,-20.,20.,80,-20.,20.);
123  meClPosDisk2mz = theDMBE->book2D("position_siPixelClusters_mz_Disk_2","Clusters -Z Disk2;Global X (cm);Global Y (cm)",80,-20.,20.,80,-20.,20.);
124  if (isUpgrade) {
125  meClPosDisk3pz = theDMBE->book2D("position_siPixelClusters_pz_Disk_3","Clusters +Z Disk3;Global X (cm);Global Y (cm)",80,-20.,20.,80,-20.,20.);
126  meClPosDisk3mz = theDMBE->book2D("position_siPixelClusters_mz_Disk_3","Clusters -Z Disk3;Global X (cm);Global Y (cm)",80,-20.,20.,80,-20.,20.);
127  }
128 
129  firstRun = false;
130  }
131 }
132 
133 
135  if(saveFile){
136  LogInfo ("PixelDQM") << " SiPixelClusterSource::endJob - Saving Root File " << std::endl;
138  theDMBE->save( outputFile.c_str() );
139  }
140 }
141 
142 //------------------------------------------------------------------
143 // Method called for every event
144 //------------------------------------------------------------------
146 {
147  eventNo++;
148 
149  //if(modOn && !isUpgrade){
150  if(!isUpgrade){
151  MonitorElement* meReset = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_1");
152  MonitorElement* meReset1 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_2");
153  MonitorElement* meReset2 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_3");
154  MonitorElement* meReset3 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_1");
155  MonitorElement* meReset4 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_2");
156  MonitorElement* meReset5 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_1");
157  MonitorElement* meReset6 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_2");
158  if(meReset && meReset->getEntries()>150000){
159  meReset->Reset();
160  meReset1->Reset();
161  meReset2->Reset();
162  meReset3->Reset();
163  meReset4->Reset();
164  meReset5->Reset();
165  meReset6->Reset();
166  }
167  //}else if(modOn && isUpgrade){
168  }else if(isUpgrade){
169  MonitorElement* meReset = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_1");
170  MonitorElement* meReset1 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_2");
171  MonitorElement* meReset2 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_3");
172  MonitorElement* meReset3 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_4");
173  MonitorElement* meReset4 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_1");
174  MonitorElement* meReset5 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_2");
175  MonitorElement* meReset6 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_mz_Disk_3");
176  MonitorElement* meReset7 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_1");
177  MonitorElement* meReset8 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_2");
178  MonitorElement* meReset9 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_pz_Disk_3");
179  if(meReset && meReset->getEntries()>150000){
180  meReset->Reset();
181  meReset1->Reset();
182  meReset2->Reset();
183  meReset3->Reset();
184  meReset4->Reset();
185  meReset5->Reset();
186  meReset6->Reset();
187  meReset7->Reset();
188  meReset8->Reset();
189  meReset9->Reset();
190  }
191  }
192 
193  // get input data
195  iEvent.getByToken(srcToken_, input);
196 
198  iSetup.get<TrackerDigiGeometryRecord> ().get (pDD);
199  const TrackerGeometry* tracker = &(* pDD);
200 // const PixelGeomDetUnit* theGeomDet = dynamic_cast<const PixelGeomDetUnit*> ( tracker->idToDet(detId) );
201 
202  //float iOrbitSec = iEvent.orbitNumber()/11223.;
203  //int bx = iEvent.bunchCrossing();
204  //long long tbx = (long long)iEvent.orbitNumber() * 3564 + bx;
205  int lumiSection = (int)iEvent.luminosityBlock();
206  int nEventFpixClusters = 0;
207 
208 
209  std::map<uint32_t,SiPixelClusterModule*>::iterator struct_iter;
210  for (struct_iter = thePixelStructure.begin() ; struct_iter != thePixelStructure.end() ; struct_iter++) {
211 
212  int numberOfFpixClusters = (*struct_iter).second->fill(*input, tracker, modOn,
213  ladOn, layOn, phiOn,
214  bladeOn, diskOn, ringOn,
216  nEventFpixClusters = nEventFpixClusters + numberOfFpixClusters;
217 
218  }
219 
220 // if(lumiSection>lumSec){ lumSec = lumiSection; nLumiSecs++; }
221 // if(nEventFpixClusters>bigEventSize) nBigEvents++;
222 // if(nLumiSecs%5==0){
223 
224  if(nEventFpixClusters>bigEventSize){
225  MonitorElement* me = theDMBE->get("Pixel/bigFpixClusterEventRate");
226  if(me){
227  me->Fill(lumiSection,1./23.);
228  }
229  }
230  //std::cout<<"nEventFpixClusters: "<<nEventFpixClusters<<" , nLumiSecs: "<<nLumiSecs<<" , nBigEvents: "<<nBigEvents<<std::endl;
231 
232  // slow down...
233  if(slowDown) usleep(10000);
234 
235 }
236 
237 //------------------------------------------------------------------
238 // Build data structure
239 //------------------------------------------------------------------
241 
242  LogInfo ("PixelDQM") <<" SiPixelClusterSource::buildStructure" ;
244  iSetup.get<TrackerDigiGeometryRecord>().get( pDD );
245 
246  LogVerbatim ("PixelDQM") << " *** Geometry node for TrackerGeom is "<<&(*pDD)<<std::endl;
247  LogVerbatim ("PixelDQM") << " *** I have " << pDD->dets().size() <<" detectors"<<std::endl;
248  LogVerbatim ("PixelDQM") << " *** I have " << pDD->detTypes().size() <<" types"<<std::endl;
249 
250  for(TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++){
251 
252  if(dynamic_cast<PixelGeomDetUnit const *>((*it))!=0){
253 
254  DetId detId = (*it)->geographicalId();
255  const GeomDetUnit * geoUnit = pDD->idToDetUnit( detId );
256  const PixelGeomDetUnit * pixDet = dynamic_cast<const PixelGeomDetUnit*>(geoUnit);
257  int nrows = (pixDet->specificTopology()).nrows();
258  int ncols = (pixDet->specificTopology()).ncolumns();
259 
260 
261  if((detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) ||
262  (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap))){
263  uint32_t id = detId();
264  SiPixelClusterModule* theModule = new SiPixelClusterModule(id, ncols, nrows);
265  if(detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) {
266  if(isPIB) continue;
267  LogDebug ("PixelDQM") << " ---> Adding Barrel Module " << detId.rawId() << endl;
268  thePixelStructure.insert(pair<uint32_t,SiPixelClusterModule*> (id,theModule));
269  }else if ( (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) && (!isUpgrade) ) {
270  LogDebug ("PixelDQM") << " ---> Adding Endcap Module " << detId.rawId() << endl;
272  int disk = PixelEndcapName(DetId(id)).diskName();
273  int blade = PixelEndcapName(DetId(id)).bladeName();
274  int panel = PixelEndcapName(DetId(id)).pannelName();
276  char sside[80]; sprintf(sside, "HalfCylinder_%i",side);
277  char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
278  char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
279  char spanel[80]; sprintf(spanel, "Panel_%i",panel);
280  char smodule[80];sprintf(smodule,"Module_%i",module);
281  std::string side_str = sside;
282  std::string disk_str = sdisk;
283  bool mask = side_str.find("HalfCylinder_1")!=string::npos||
284  side_str.find("HalfCylinder_2")!=string::npos||
285  side_str.find("HalfCylinder_4")!=string::npos||
286  disk_str.find("Disk_2")!=string::npos;
287  // clutch to take all of FPIX, but no BPIX:
288  mask = false;
289  if(isPIB && mask) continue;
290  thePixelStructure.insert(pair<uint32_t,SiPixelClusterModule*> (id,theModule));
291  } else if ( (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) && (isUpgrade) ) {
292  LogDebug ("PixelDQM") << " ---> Adding Endcap Module " << detId.rawId() << endl;
294  int disk = PixelEndcapNameUpgrade(DetId(id)).diskName();
295  int blade = PixelEndcapNameUpgrade(DetId(id)).bladeName();
296  int panel = PixelEndcapNameUpgrade(DetId(id)).pannelName();
298  char sside[80]; sprintf(sside, "HalfCylinder_%i",side);
299  char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
300  char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
301  char spanel[80]; sprintf(spanel, "Panel_%i",panel);
302  char smodule[80];sprintf(smodule,"Module_%i",module);
303  std::string side_str = sside;
304  std::string disk_str = sdisk;
305  bool mask = side_str.find("HalfCylinder_1")!=string::npos||
306  side_str.find("HalfCylinder_2")!=string::npos||
307  side_str.find("HalfCylinder_4")!=string::npos||
308  disk_str.find("Disk_2")!=string::npos;
309  // clutch to take all of FPIX, but no BPIX:
310  mask = false;
311  if(isPIB && mask) continue;
312  thePixelStructure.insert(pair<uint32_t,SiPixelClusterModule*> (id,theModule));
313  }//endif(Upgrade)
314  }
315  }
316  }
317  LogInfo ("PixelDQM") << " *** Pixel Structure Size " << thePixelStructure.size() << endl;
318 }
319 //------------------------------------------------------------------
320 // Book MEs
321 //------------------------------------------------------------------
323 
324  // Get DQM interface
326  theDMBE->setCurrentFolder("Pixel");
327  char title[256]; snprintf(title, 256, "Rate of events with >%i FPIX clusters;LumiSection;Rate of large FPIX events per LS [Hz]",bigEventSize);
328  bigFpixClusterEventRate = theDMBE->book1D("bigFpixClusterEventRate",title,5000,0.,5000.);
329 
330 
331  std::map<uint32_t,SiPixelClusterModule*>::iterator struct_iter;
332 
333  SiPixelFolderOrganizer theSiPixelFolder;
334 
335  for(struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++){
336 
338  if(modOn){
339  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,0,isUpgrade)){
340  (*struct_iter).second->book( conf_,0,twoDimOn,reducedSet,isUpgrade);
341  } else {
342 
343  if(!isPIB) throw cms::Exception("LogicError")
344  << "[SiPixelClusterSource::bookMEs] Creation of DQM folder failed";
345  }
346  }
347  if(ladOn){
348  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,1,isUpgrade)){
349  (*struct_iter).second->book( conf_,1,twoDimOn,reducedSet,isUpgrade);
350  } else {
351  LogDebug ("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n";
352  }
353  }
354  if(layOn){
355  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,2,isUpgrade)){
356  (*struct_iter).second->book( conf_,2,twoDimOn,reducedSet,isUpgrade);
357  } else {
358  LogDebug ("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n";
359  }
360  }
361  if(phiOn){
362  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,3,isUpgrade)){
363  (*struct_iter).second->book( conf_,3,twoDimOn,reducedSet,isUpgrade);
364  } else {
365  LogDebug ("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n";
366  }
367  }
368  if(bladeOn){
369  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,4,isUpgrade)){
370  (*struct_iter).second->book( conf_,4,twoDimOn,reducedSet,isUpgrade);
371  } else {
372  LogDebug ("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n";
373  }
374  }
375  if(diskOn){
376  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,5,isUpgrade)){
377  (*struct_iter).second->book( conf_,5,twoDimOn,reducedSet,isUpgrade);
378  } else {
379  LogDebug ("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n";
380  }
381  }
382  if(ringOn){
383  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,6,isUpgrade)){
384  (*struct_iter).second->book( conf_,6,twoDimOn,reducedSet,isUpgrade);
385  } else {
386  LogDebug ("PixelDQM") << "PROBLEM WITH RING-FOLDER\n";
387  }
388  }
389  if(smileyOn){
390  if(theSiPixelFolder.setModuleFolder((*struct_iter).first,7,isUpgrade)){
391  (*struct_iter).second->book( conf_,7,twoDimOn,reducedSet,isUpgrade);
392  } else {
393  LogDebug ("PixelDQM") << "PROBLEM WITH BARREL-FOLDER\n";
394  }
395  }
396 
397  }
398 
399 }
400 
401 //define this as a plug-in
#define LogDebug(id)
int plaquetteName() const
plaquetteId (in pannel)
virtual void buildStructure(edm::EventSetup const &)
T getParameter(std::string const &) const
MonitorElement * meClPosDisk3pz
MonitorElement * meClPosDisk2pz
virtual void analyze(const edm::Event &, const edm::EventSetup &)
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:928
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:59
double getEntries(void) const
get # of entries
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > srcToken_
int plaquetteName() const
plaquetteId (in pannel)
MonitorElement * meClPosLayer4
SiPixelClusterSource(const edm::ParameterSet &conf)
static std::string const input
Definition: EdmProvDump.cc:44
void Fill(long long x)
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
MonitorElement * meClPosLayer3
int bladeName() const
blade id
int iEvent
Definition: GenABIO.cc:230
bool setModuleFolder(const uint32_t &rawdetid=0, int type=0, bool isUpgrade=false)
Set folder name for a module or plaquette.
virtual void beginRun(const edm::Run &, edm::EventSetup const &)
MonitorElement * meClPosLayer1
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:2424
int bladeName() const
blade id
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1679
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
int diskName() const
disk id
edm::ParameterSet conf_
Definition: DetId.h:18
const T & get() const
Definition: EventSetup.h:55
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
int pannelName() const
pannel id
MonitorElement * meClPosDisk3mz
MonitorElement * meClPosDisk2mz
int diskName() const
disk id
std::map< uint32_t, SiPixelClusterModule * > thePixelStructure
volatile std::atomic< bool > shutdown_flag false
MonitorElement * meClPosLayer2
HalfCylinder halfCylinder() const
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1056
HalfCylinder halfCylinder() const
int pannelName() const
pannel id
void Reset(void)
reset ME (ie. contents, errors, etc)
Definition: vlib.h:208
MonitorElement * bigFpixClusterEventRate
MonitorElement * meClPosDisk1mz
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:639
MonitorElement * meClPosDisk1pz
Definition: Run.h:41