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