CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CSCRecoBadChannelsAnalyzer.cc
Go to the documentation of this file.
1 
4 #include <string>
5 #include <vector>
6 
12 
15 
20 
22 
26 
28 
29 
31  {
32 
33  public:
35  : dashedLineWidth_( 80 ),
36  dashedLine_( std::string(dashedLineWidth_, '-') ),
37  myName_( "CSCRecoBadChannelsAnalyzer" ),
38  readBadChannels_( ps.getParameter<bool>("readBadChannels") ),
39  recoConditions_( new CSCRecoConditions( ps ) ) {
40  }
41 
43  virtual void analyze(const edm::Event& e, const edm::EventSetup& c);
44 
46  bool readBadChannels() const { return readBadChannels_; }
47  const std::string& myName() { return myName_;}
48 
49  private:
50 
51  const int dashedLineWidth_;
54 
57  };
58 
60  {
61  using namespace edm::eventsetup;
62 
63  edm::LogVerbatim("CSCBadChannels") << myName() << "::analyze running..." ;
64  edm::LogVerbatim("CSCBadChannels") << "start " << dashedLine_ ;
65 
66  edm::LogVerbatim("CSCBadChannels") << "RUN# " << ev.id().run() ;
67  edm::LogVerbatim("CSCBadChannels") << "EVENT# " << ev.id().event() ;
68 
70  evsetup.get<CSCIndexerRecord>().get(theIndexer);
71 
72  edm::LogVerbatim("CSCBadChannels") << myName() << "::analyze sees indexer " << theIndexer->name() << " in Event Setup" ;
73 
75  evsetup.get<CSCChannelMapperRecord>().get(theMapper);
76 
77  edm::LogVerbatim("CSCBadChannels") << myName() << "::analyze sees mapper " << theMapper->name() << " in Event Setup" ;
78 
79  edm::ESHandle<CSCGeometry> theGeometry;
80  evsetup.get<MuonGeometryRecord>().get( theGeometry );
81 
82  edm::LogVerbatim("CSCBadChannels") << " Geometry node for CSCGeom is " << &(*theGeometry) ;
83  edm::LogVerbatim("CSCBadChannels") << " There are " << theGeometry->dets().size() << " dets" ;
84  edm::LogVerbatim("CSCBadChannels") << " There are " << theGeometry->detTypes().size() << " types" << "\n" ;
85 
86  // INITIALIZE CSCConditions
88 
89  // HERE NEED TO ITERATE OVER ALL CSCDetId
90 
91  edm::LogVerbatim("CSCBadChannels") << myName() << ": Begin iteration over geometry..." ;
92 
93  const CSCGeometry::LayerContainer& vecOfLayers = theGeometry->layers();
94  edm::LogVerbatim("CSCBadChannels") << "There are " << vecOfLayers.size() << " layers" ;
95 
96  edm::LogVerbatim("CSCBadChannels") << dashedLine_ ;
97 
98  int ibadchannels = 0; // COUNT OF BAD STRIP CHANNELS
99  int ibadlayers = 0 ; //COUNT OF LAYERS WITH BAD STRIP CHANNELS
100 
101  for( auto it = vecOfLayers.begin(); it != vecOfLayers.end(); ++it ){
102 
103  const CSCLayer* layer = *it;
104 
105  if( layer ){
106  CSCDetId id = layer->id();
107  int nstrips = layer->geometry()->numberOfStrips();
108  edm::LogVerbatim("CSCBadChannels") << "Layer " << id << " has " << nstrips << " strips" ;
109 
110  // GET BAD CHANNELS FOR THIS LAYER
111 
113 
114  // SEARCH FOR BAD STRIP CHANNELS IN THIS LAYER - GEOMETRIC STRIP INPUT!!
115 
116  bool layerhasbadchannels = false;
117  for ( short is = 1; is<=nstrips; ++is ) {
118  if ( recoConditions_->badStrip( id, is, nstrips ) ) {
119  ++ibadchannels;
120  layerhasbadchannels = true;
121  edm::LogVerbatim("CSCBadChannels") << id << " strip " << is << " is bad" ;
122  }
123  }
124 
125  for ( short is = 1; is<=nstrips; ++is ) {
126  if ( recoConditions_->nearBadStrip( id, is, nstrips ) ) {
127  edm::LogVerbatim("CSCBadChannels") << id << " strip " << is << " is a neighbor of a bad strip" ;
128  }
129  }
130 
131  if (layerhasbadchannels) ++ibadlayers;
132 
133  }
134  else {
135  edm::LogVerbatim("CSCBadChannels") << "WEIRD ERROR: a null CSCLayer* was seen" ;
136  }
137  }
138 
139  edm::LogVerbatim("CSCBadChannels") << "No. of layers with bad strip channels = " << ibadlayers ;
140  edm::LogVerbatim("CSCBadChannels") << "No. of bad strip channels seen = " << ibadchannels ;
141 
142  edm::LogVerbatim("CSCBadChannels") << dashedLine_ << " end" ;
143  }
144 
146 
147 
RunNumber_t run() const
Definition: EventID.h:39
EventNumber_t event() const
Definition: EventID.h:41
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
CSCDetId id() const
Definition: CSCLayer.h:42
int numberOfStrips() const
bool ev
bool nearBadStrip(const CSCDetId &id, int geomStrip, int nstrips) const
Is a neighbour bad?
CSCRecoBadChannelsAnalyzer(edm::ParameterSet const &ps)
bool badStrip(const CSCDetId &id, int geomStrip, int nstrips) const
Is the strip bad?
void fillBadChannelWords(const CSCDetId &id)
fill bad strip &amp; bad wiregroup bitsets from conditions data
bool readBadChannels() const
did we request reading bad channel info from db?
const T & get() const
Definition: EventSetup.h:56
edm::EventID id() const
Definition: EventBase.h:59
std::vector< const CSCLayer * > LayerContainer
Definition: CSCGeometry.h:33
void initializeEvent(const edm::EventSetup &es)
fetch the cond data from the database
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:47