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  // the name of the 4D rec hits collection
34  theRecHits4DLabel_ = consumes<DTRecSegment4DCollection>(parameters.getParameter<std::string>("recHits4DLabel"));
35 }
36 
37 
39 }
40 
42  edm::Run const & /*iRun*/,
43  edm::EventSetup const & /* iSetup */){
44 
45  ibooker.cd();
46  ibooker.setCurrentFolder("Muons/DTSegmentsMonitor");
47 
48  // histos for phi segments
49  phiHistos.push_back(ibooker.book2D("phiSegments_numHitsVsWheel", "phiSegments_numHitsVsWheel", 5, -2.5, 2.5, 20, 0, 20));
50  phiHistos[0]->setBinLabel(1,"W-2",1);
51  phiHistos[0]->setBinLabel(2,"W-1",1);
52  phiHistos[0]->setBinLabel(3,"W0",1);
53  phiHistos[0]->setBinLabel(4,"W1",1);
54  phiHistos[0]->setBinLabel(5,"W2",1);
55  phiHistos.push_back(ibooker.book2D("phiSegments_numHitsVsSector", "phiSegments_numHitsVsSector", 14, 0.5, 14.5, 20, 0, 20));
56  phiHistos[1]->setBinLabel(1,"Sec1",1);
57  phiHistos[1]->setBinLabel(2,"Sec2",1);
58  phiHistos[1]->setBinLabel(3,"Sec3",1);
59  phiHistos[1]->setBinLabel(4,"Sec4",1);
60  phiHistos[1]->setBinLabel(5,"Sec5",1);
61  phiHistos[1]->setBinLabel(6,"Sec6",1);
62  phiHistos[1]->setBinLabel(7,"Sec7",1);
63  phiHistos[1]->setBinLabel(8,"Sec8",1);
64  phiHistos[1]->setBinLabel(9,"Sec9",1);
65  phiHistos[1]->setBinLabel(10,"Sec10",1);
66  phiHistos[1]->setBinLabel(11,"Sec11",1);
67  phiHistos[1]->setBinLabel(12,"Sec12",1);
68  phiHistos[1]->setBinLabel(13,"Sec13",1);
69  phiHistos[1]->setBinLabel(14,"Sec14",1);
70  phiHistos.push_back(ibooker.book2D("phiSegments_numHitsVsStation", "phiSegments_numHitsVsStation", 4, 0.5, 4.5, 20, 0, 20));
71  phiHistos[2]->setBinLabel(1,"St1",1);
72  phiHistos[2]->setBinLabel(2,"St2",1);
73  phiHistos[2]->setBinLabel(3,"St3",1);
74  phiHistos[2]->setBinLabel(4,"St4",1);
75 
76  // histos for theta segments
77  thetaHistos.push_back(ibooker.book2D("thetaSegments_numHitsVsWheel", "thetaSegments_numHitsVsWheel", 5, -2.5, 2.5, 20, 0, 20));
78  thetaHistos[0]->setBinLabel(1,"W-2",1);
79  thetaHistos[0]->setBinLabel(2,"W-1",1);
80  thetaHistos[0]->setBinLabel(3,"W0",1);
81  thetaHistos[0]->setBinLabel(4,"W1",1);
82  thetaHistos[0]->setBinLabel(5,"W2",1);
83  thetaHistos.push_back(ibooker.book2D("thetaSegments_numHitsVsSector", "thetaSegments_numHitsVsSector", 14, 0.5, 14.5, 20, 0, 20));
84  thetaHistos[1]->setBinLabel(1,"Sec1",1);
85  thetaHistos[1]->setBinLabel(2,"Sec2",1);
86  thetaHistos[1]->setBinLabel(3,"Sec3",1);
87  thetaHistos[1]->setBinLabel(4,"Sec4",1);
88  thetaHistos[1]->setBinLabel(5,"Sec5",1);
89  thetaHistos[1]->setBinLabel(6,"Sec6",1);
90  thetaHistos[1]->setBinLabel(7,"Sec7",1);
91  thetaHistos[1]->setBinLabel(8,"Sec8",1);
92  thetaHistos[1]->setBinLabel(9,"Sec9",1);
93  thetaHistos[1]->setBinLabel(10,"Sec10",1);
94  thetaHistos[1]->setBinLabel(11,"Sec11",1);
95  thetaHistos[1]->setBinLabel(12,"Sec12",1);
96  thetaHistos[1]->setBinLabel(13,"Sec13",1);
97  thetaHistos[1]->setBinLabel(14,"Sec14",1);
98  thetaHistos.push_back(ibooker.book2D("thetaSegments_numHitsVsStation", "thetaSegments_numHitsVsStation", 4, 0.5, 4.5, 20, 0, 20));
99  thetaHistos[2]->setBinLabel(1,"St1",1);
100  thetaHistos[2]->setBinLabel(2,"St2",1);
101  thetaHistos[2]->setBinLabel(3,"St3",1);
102  thetaHistos[2]->setBinLabel(4,"St4",1);
103 
104 }
105 
107 
108  // Get the map of noisy channels
109  // bool checkNoisyChannels = parameters.getUntrackedParameter<bool>("checkNoisyChannels",false);
111  if(checkNoisyChannels) {
112  setup.get<DTStatusFlagRcd>().get(statusMap);
113  }
114 
115  // Get the 4D segment collection from the event
117  event.getByToken(theRecHits4DLabel_, all4DSegments);
118 
119  // Loop over all chambers containing a segment
120  DTRecSegment4DCollection::id_iterator chamberId;
121  for (chamberId = all4DSegments->id_begin(); chamberId != all4DSegments->id_end(); ++chamberId){
122  // Get the range for the corresponding ChamerId
123  DTRecSegment4DCollection::range range = all4DSegments->get(*chamberId);
124  int nsegm = distance(range.first, range.second);
125  if(debug)
126  cout << " Chamber: " << *chamberId << " has " << nsegm
127  << " 4D segments" << endl;
128 
129  // Loop over the rechits of this ChamerId
130  for (DTRecSegment4DCollection::const_iterator segment4D = range.first; segment4D!=range.second; ++segment4D){
131 
132  //FOR NOISY CHANNELS////////////////////////////////
133  bool segmNoisy = false;
134  if((*segment4D).hasPhi()){
135  const DTChamberRecSegment2D* phiSeg = (*segment4D).phiSegment();
136  vector<DTRecHit1D> phiHits = phiSeg->specificRecHits();
137  map<DTSuperLayerId,vector<DTRecHit1D> > hitsBySLMap;
138  for(vector<DTRecHit1D>::const_iterator hit = phiHits.begin(); hit != phiHits.end(); ++hit) {
139  DTWireId wireId = (*hit).wireId();
140 
141  // Check for noisy channels to skip them
142  if(checkNoisyChannels) {
143  bool isNoisy = false;
144  bool isFEMasked = false;
145  bool isTDCMasked = false;
146  bool isTrigMask = false;
147  bool isDead = false;
148  bool isNohv = false;
149  statusMap->cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
150  if(isNoisy) {
151  if(debug)
152  cout << "Wire: " << wireId << " is noisy, skipping!" << endl;
153  segmNoisy = true;
154  }
155  }
156  }
157  }
158 
159  if((*segment4D).hasZed()) {
160  const DTSLRecSegment2D* zSeg = (*segment4D).zSegment(); // zSeg lives in the SL RF
161  // Check for noisy channels to skip them
162  vector<DTRecHit1D> zHits = zSeg->specificRecHits();
163  for(vector<DTRecHit1D>::const_iterator hit = zHits.begin();
164  hit != zHits.end(); ++hit) {
165  DTWireId wireId = (*hit).wireId();
166  if(checkNoisyChannels) {
167  bool isNoisy = false;
168  bool isFEMasked = false;
169  bool isTDCMasked = false;
170  bool isTrigMask = false;
171  bool isDead = false;
172  bool isNohv = false;
173  //cout<<"wire id "<<wireId<<endl;
174  statusMap->cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
175  if(isNoisy) {
176  if(debug)
177  cout << "Wire: " << wireId << " is noisy, skipping!" << endl;
178  segmNoisy = true;
179  }
180  }
181  }
182  }
183 
184  if (segmNoisy) {
185  if(debug)
186  cout<<"skipping the segment: it contains noisy cells"<<endl;
187  continue;
188  }
189  //END FOR NOISY CHANNELS////////////////////////////////
190 
191  // Fill the histos
192  int nHits=0;
193  if((*segment4D).hasPhi()){
194  nHits = (((*segment4D).phiSegment())->specificRecHits()).size();
195  if(debug)
196  cout<<"Phi segment with number of hits: "<<nHits<<endl;
197  phiHistos[0]->Fill((*chamberId).wheel(), nHits);
198  phiHistos[1]->Fill((*chamberId).sector(), nHits);
199  phiHistos[2]->Fill((*chamberId).station(), nHits);
200  }
201  if((*segment4D).hasZed()) {
202  nHits = (((*segment4D).zSegment())->specificRecHits()).size();
203  if(debug)
204  cout<<"Zed segment with number of hits: "<<nHits<<endl;
205  thetaHistos[0]->Fill((*chamberId).wheel(), nHits);
206  thetaHistos[1]->Fill((*chamberId).sector(), nHits);
207  thetaHistos[2]->Fill((*chamberId).station(), nHits);
208  }
209 
210  } //loop over segments
211  } // loop over chambers
212 }
213 
T getUntrackedParameter(std::string const &, T const &) const
dictionary parameters
Definition: Parameters.py:2
std::pair< const_iterator, const_iterator > range
iterator range
Definition: RangeMap.h:50
void cd(void)
Definition: DQMStore.cc:266
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:274
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
const T & get() const
Definition: EventSetup.h:55
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
tuple cout
Definition: gather_cfg.py:121
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
tuple size
Write out results.
Definition: Run.h:41