CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DTSegmentsTask.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author G. Mila - INFN Torino
5  */
6 
8 
9 // Framework
15 
18 
19 //Geometry
22 
23 #include <iterator>
24 
25 using namespace edm;
26 using namespace std;
27 
29 
30  debug = pset.getUntrackedParameter<bool>("debug",false);
31  parameters = pset;
32 
33  // should be init from pset, but it was commented out...
34  // better false than undefined
35  checkNoisyChannels = false;
36 
37  // the name of the 4D rec hits collection
38  theRecHits4DLabel_ = consumes<DTRecSegment4DCollection>(parameters.getParameter<std::string>("recHits4DLabel"));
39 }
40 
41 
43 }
44 
46  edm::Run const & /*iRun*/,
47  edm::EventSetup const & /* iSetup */){
48 
49  ibooker.cd();
50  ibooker.setCurrentFolder("Muons/DTSegmentsMonitor");
51 
52  // histos for phi segments
53  phiHistos.push_back(ibooker.book2D("phiSegments_numHitsVsWheel", "phiSegments_numHitsVsWheel", 5, -2.5, 2.5, 20, 0, 20));
54  phiHistos[0]->setBinLabel(1,"W-2",1);
55  phiHistos[0]->setBinLabel(2,"W-1",1);
56  phiHistos[0]->setBinLabel(3,"W0",1);
57  phiHistos[0]->setBinLabel(4,"W1",1);
58  phiHistos[0]->setBinLabel(5,"W2",1);
59  phiHistos.push_back(ibooker.book2D("phiSegments_numHitsVsSector", "phiSegments_numHitsVsSector", 14, 0.5, 14.5, 20, 0, 20));
60  phiHistos[1]->setBinLabel(1,"Sec1",1);
61  phiHistos[1]->setBinLabel(2,"Sec2",1);
62  phiHistos[1]->setBinLabel(3,"Sec3",1);
63  phiHistos[1]->setBinLabel(4,"Sec4",1);
64  phiHistos[1]->setBinLabel(5,"Sec5",1);
65  phiHistos[1]->setBinLabel(6,"Sec6",1);
66  phiHistos[1]->setBinLabel(7,"Sec7",1);
67  phiHistos[1]->setBinLabel(8,"Sec8",1);
68  phiHistos[1]->setBinLabel(9,"Sec9",1);
69  phiHistos[1]->setBinLabel(10,"Sec10",1);
70  phiHistos[1]->setBinLabel(11,"Sec11",1);
71  phiHistos[1]->setBinLabel(12,"Sec12",1);
72  phiHistos[1]->setBinLabel(13,"Sec13",1);
73  phiHistos[1]->setBinLabel(14,"Sec14",1);
74  phiHistos.push_back(ibooker.book2D("phiSegments_numHitsVsStation", "phiSegments_numHitsVsStation", 4, 0.5, 4.5, 20, 0, 20));
75  phiHistos[2]->setBinLabel(1,"St1",1);
76  phiHistos[2]->setBinLabel(2,"St2",1);
77  phiHistos[2]->setBinLabel(3,"St3",1);
78  phiHistos[2]->setBinLabel(4,"St4",1);
79 
80  // histos for theta segments
81  thetaHistos.push_back(ibooker.book2D("thetaSegments_numHitsVsWheel", "thetaSegments_numHitsVsWheel", 5, -2.5, 2.5, 20, 0, 20));
82  thetaHistos[0]->setBinLabel(1,"W-2",1);
83  thetaHistos[0]->setBinLabel(2,"W-1",1);
84  thetaHistos[0]->setBinLabel(3,"W0",1);
85  thetaHistos[0]->setBinLabel(4,"W1",1);
86  thetaHistos[0]->setBinLabel(5,"W2",1);
87  thetaHistos.push_back(ibooker.book2D("thetaSegments_numHitsVsSector", "thetaSegments_numHitsVsSector", 14, 0.5, 14.5, 20, 0, 20));
88  thetaHistos[1]->setBinLabel(1,"Sec1",1);
89  thetaHistos[1]->setBinLabel(2,"Sec2",1);
90  thetaHistos[1]->setBinLabel(3,"Sec3",1);
91  thetaHistos[1]->setBinLabel(4,"Sec4",1);
92  thetaHistos[1]->setBinLabel(5,"Sec5",1);
93  thetaHistos[1]->setBinLabel(6,"Sec6",1);
94  thetaHistos[1]->setBinLabel(7,"Sec7",1);
95  thetaHistos[1]->setBinLabel(8,"Sec8",1);
96  thetaHistos[1]->setBinLabel(9,"Sec9",1);
97  thetaHistos[1]->setBinLabel(10,"Sec10",1);
98  thetaHistos[1]->setBinLabel(11,"Sec11",1);
99  thetaHistos[1]->setBinLabel(12,"Sec12",1);
100  thetaHistos[1]->setBinLabel(13,"Sec13",1);
101  thetaHistos[1]->setBinLabel(14,"Sec14",1);
102  thetaHistos.push_back(ibooker.book2D("thetaSegments_numHitsVsStation", "thetaSegments_numHitsVsStation", 4, 0.5, 4.5, 20, 0, 20));
103  thetaHistos[2]->setBinLabel(1,"St1",1);
104  thetaHistos[2]->setBinLabel(2,"St2",1);
105  thetaHistos[2]->setBinLabel(3,"St3",1);
106  thetaHistos[2]->setBinLabel(4,"St4",1);
107 
108 }
109 
111 
112  // Get the map of noisy channels
113  // bool checkNoisyChannels = parameters.getUntrackedParameter<bool>("checkNoisyChannels",false);
115  if(checkNoisyChannels) {
116  setup.get<DTStatusFlagRcd>().get(statusMap);
117  }
118 
119  // Get the 4D segment collection from the event
121  event.getByToken(theRecHits4DLabel_, all4DSegments);
122 
123  // Loop over all chambers containing a segment
124  DTRecSegment4DCollection::id_iterator chamberId;
125  for (chamberId = all4DSegments->id_begin(); chamberId != all4DSegments->id_end(); ++chamberId){
126  // Get the range for the corresponding ChamerId
127  DTRecSegment4DCollection::range range = all4DSegments->get(*chamberId);
128  int nsegm = distance(range.first, range.second);
129  if(debug)
130  cout << " Chamber: " << *chamberId << " has " << nsegm
131  << " 4D segments" << endl;
132 
133  // Loop over the rechits of this ChamerId
134  for (DTRecSegment4DCollection::const_iterator segment4D = range.first; segment4D!=range.second; ++segment4D){
135 
136  //FOR NOISY CHANNELS////////////////////////////////
137  bool segmNoisy = false;
138  if((*segment4D).hasPhi()){
139  const DTChamberRecSegment2D* phiSeg = (*segment4D).phiSegment();
140  vector<DTRecHit1D> phiHits = phiSeg->specificRecHits();
141  map<DTSuperLayerId,vector<DTRecHit1D> > hitsBySLMap;
142  for(vector<DTRecHit1D>::const_iterator hit = phiHits.begin(); hit != phiHits.end(); ++hit) {
143  DTWireId wireId = (*hit).wireId();
144 
145  // Check for noisy channels to skip them
146  if(checkNoisyChannels) {
147  bool isNoisy = false;
148  bool isFEMasked = false;
149  bool isTDCMasked = false;
150  bool isTrigMask = false;
151  bool isDead = false;
152  bool isNohv = false;
153  statusMap->cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
154  if(isNoisy) {
155  if(debug)
156  cout << "Wire: " << wireId << " is noisy, skipping!" << endl;
157  segmNoisy = true;
158  }
159  }
160  }
161  }
162 
163  if((*segment4D).hasZed()) {
164  const DTSLRecSegment2D* zSeg = (*segment4D).zSegment(); // zSeg lives in the SL RF
165  // Check for noisy channels to skip them
166  vector<DTRecHit1D> zHits = zSeg->specificRecHits();
167  for(vector<DTRecHit1D>::const_iterator hit = zHits.begin();
168  hit != zHits.end(); ++hit) {
169  DTWireId wireId = (*hit).wireId();
170  if(checkNoisyChannels) {
171  bool isNoisy = false;
172  bool isFEMasked = false;
173  bool isTDCMasked = false;
174  bool isTrigMask = false;
175  bool isDead = false;
176  bool isNohv = false;
177  //cout<<"wire id "<<wireId<<endl;
178  statusMap->cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
179  if(isNoisy) {
180  if(debug)
181  cout << "Wire: " << wireId << " is noisy, skipping!" << endl;
182  segmNoisy = true;
183  }
184  }
185  }
186  }
187 
188  if (segmNoisy) {
189  if(debug)
190  cout<<"skipping the segment: it contains noisy cells"<<endl;
191  continue;
192  }
193  //END FOR NOISY CHANNELS////////////////////////////////
194 
195  // Fill the histos
196  int nHits=0;
197  if((*segment4D).hasPhi()){
198  nHits = (((*segment4D).phiSegment())->specificRecHits()).size();
199  if(debug)
200  cout<<"Phi segment with number of hits: "<<nHits<<endl;
201  phiHistos[0]->Fill((*chamberId).wheel(), nHits);
202  phiHistos[1]->Fill((*chamberId).sector(), nHits);
203  phiHistos[2]->Fill((*chamberId).station(), nHits);
204  }
205  if((*segment4D).hasZed()) {
206  nHits = (((*segment4D).zSegment())->specificRecHits()).size();
207  if(debug)
208  cout<<"Zed segment with number of hits: "<<nHits<<endl;
209  thetaHistos[0]->Fill((*chamberId).wheel(), nHits);
210  thetaHistos[1]->Fill((*chamberId).sector(), nHits);
211  thetaHistos[2]->Fill((*chamberId).station(), nHits);
212  }
213 
214  } //loop over segments
215  } // loop over chambers
216 }
217 
T getUntrackedParameter(std::string const &, T const &) const
std::pair< const_iterator, const_iterator > range
iterator range
Definition: RangeMap.h:50
void cd(void)
Definition: DQMStore.cc:268
void analyze(const edm::Event &, const edm::EventSetup &)
book the histos
virtual ~DTSegmentsTask()
Destructor.
DTSegmentsTask(const edm::ParameterSet &pset)
Constructor.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::vector< DTRecHit1D > specificRecHits() const
Access to specific components.
#define debug
Definition: HDRShower.cc:19
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:276
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
const T & get() const
Definition: EventSetup.h:56
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
tuple cout
Definition: gather_cfg.py:145
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
tuple size
Write out results.
Definition: Run.h:43