CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonIdDQM.cc
Go to the documentation of this file.
2 
4 {
5  inputMuonCollection_ = iConfig.getParameter<edm::InputTag>("inputMuonCollection");
6  inputDTRecSegment4DCollection_ = iConfig.getParameter<edm::InputTag>("inputDTRecSegment4DCollection");
7  inputCSCSegmentCollection_ = iConfig.getParameter<edm::InputTag>("inputCSCSegmentCollection");
8  useTrackerMuons_ = iConfig.getUntrackedParameter<bool>("useTrackerMuons");
9  useGlobalMuons_ = iConfig.getUntrackedParameter<bool>("useGlobalMuons");
10  useTrackerMuonsNotGlobalMuons_ = iConfig.getUntrackedParameter<bool>("useTrackerMuonsNotGlobalMuons");
11  useGlobalMuonsNotTrackerMuons_ = iConfig.getUntrackedParameter<bool>("useGlobalMuonsNotTrackerMuons");
12  baseFolder_ = iConfig.getUntrackedParameter<std::string>("baseFolder");
13 
14  dbe_ = 0;
15  dbe_ = edm::Service<DQMStore>().operator->();
16 }
17 
19 
20 void
22 {
23  char name[100], title[200];
24 
25  // trackerMuon == 0; globalMuon == 1; trackerMuon && !globalMuon == 2; globalMuon && !trackerMuon == 3
26  for (unsigned int i = 0; i < 4; i++) {
27  if ((i == 0 && ! useTrackerMuons_) || (i == 1 && ! useGlobalMuons_)) continue;
28  if ((i == 2 && ! useTrackerMuonsNotGlobalMuons_) || (i == 3 && ! useGlobalMuonsNotTrackerMuons_)) continue;
29  if (i == 0) dbe_->setCurrentFolder(baseFolder_+"/TrackerMuons");
30  if (i == 1) dbe_->setCurrentFolder(baseFolder_+"/GlobalMuons");
31  if (i == 2) dbe_->setCurrentFolder(baseFolder_+"/TrackerMuonsNotGlobalMuons");
32  if (i == 3) dbe_->setCurrentFolder(baseFolder_+"/GlobalMuonsNotTrackerMuons");
33 
34  hNumChambers[i] = dbe_->book1D("hNumChambers", "Number of Chambers", 11, -0.5, 10.5);
35  hNumMatches[i] = dbe_->book1D("hNumMatches", "Number of Matches", 11, -0.5, 10.5);
36 
37  // by station
38  for(int station = 0; station < 4; ++station)
39  {
40  sprintf(name, "hDT%iNumSegments", station+1);
41  sprintf(title, "DT Station %i Number of Segments (No Arbitration)", station+1);
42  hDTNumSegments[i][station] = dbe_->book1D(name, title, 11, -0.5, 10.5);
43 
44  sprintf(name, "hDT%iDx", station+1);
45  sprintf(title, "DT Station %i Delta X", station+1);
46  hDTDx[i][station] = dbe_->book1D(name, title, 100, -100., 100.);
47 
48  sprintf(name, "hDT%iPullx", station+1);
49  sprintf(title, "DT Station %i Pull X", station+1);
50  hDTPullx[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
51 
52  sprintf(name, "hDT%iDdXdZ", station+1);
53  sprintf(title, "DT Station %i Delta DxDz", station+1);
54  hDTDdXdZ[i][station] = dbe_->book1D(name, title, 100, -1., 1.);
55 
56  sprintf(name, "hDT%iPulldXdZ", station+1);
57  sprintf(title, "DT Station %i Pull DxDz", station+1);
58  hDTPulldXdZ[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
59 
60  if (station < 3) {
61  sprintf(name, "hDT%iDy", station+1);
62  sprintf(title, "DT Station %i Delta Y", station+1);
63  hDTDy[i][station] = dbe_->book1D(name, title, 100, -150., 150.);
64 
65  sprintf(name, "hDT%iPully", station+1);
66  sprintf(title, "DT Station %i Pull Y", station+1);
67  hDTPully[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
68 
69  sprintf(name, "hDT%iDdYdZ", station+1);
70  sprintf(title, "DT Station %i Delta DyDz", station+1);
71  hDTDdYdZ[i][station] = dbe_->book1D(name, title, 100, -2., 2.);
72 
73  sprintf(name, "hDT%iPulldYdZ", station+1);
74  sprintf(title, "DT Station %i Pull DyDz", station+1);
75  hDTPulldYdZ[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
76  }
77 
78  sprintf(name, "hCSC%iNumSegments", station+1);
79  sprintf(title, "CSC Station %i Number of Segments (No Arbitration)", station+1);
80  hCSCNumSegments[i][station] = dbe_->book1D(name, title, 11, -0.5, 10.5);
81 
82  sprintf(name, "hCSC%iDx", station+1);
83  sprintf(title, "CSC Station %i Delta X", station+1);
84  hCSCDx[i][station] = dbe_->book1D(name, title, 100, -50., 50.);
85 
86  sprintf(name, "hCSC%iPullx", station+1);
87  sprintf(title, "CSC Station %i Pull X", station+1);
88  hCSCPullx[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
89 
90  sprintf(name, "hCSC%iDdXdZ", station+1);
91  sprintf(title, "CSC Station %i Delta DxDz", station+1);
92  hCSCDdXdZ[i][station] = dbe_->book1D(name, title, 100, -1., 1.);
93 
94  sprintf(name, "hCSC%iPulldXdZ", station+1);
95  sprintf(title, "CSC Station %i Pull DxDz", station+1);
96  hCSCPulldXdZ[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
97 
98  sprintf(name, "hCSC%iDy", station+1);
99  sprintf(title, "CSC Station %i Delta Y", station+1);
100  hCSCDy[i][station] = dbe_->book1D(name, title, 100, -50., 50.);
101 
102  sprintf(name, "hCSC%iPully", station+1);
103  sprintf(title, "CSC Station %i Pull Y", station+1);
104  hCSCPully[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
105 
106  sprintf(name, "hCSC%iDdYdZ", station+1);
107  sprintf(title, "CSC Station %i Delta DyDz", station+1);
108  hCSCDdYdZ[i][station] = dbe_->book1D(name, title, 100, -1., 1.);
109 
110  sprintf(name, "hCSC%iPulldYdZ", station+1);
111  sprintf(title, "CSC Station %i Pull DyDz", station+1);
112  hCSCPulldYdZ[i][station] = dbe_->book1D(name, title, 100, -20., 20.);
113  }// station
114  }
115 
117  hSegmentIsAssociatedBool = dbe_->book1D("hSegmentIsAssociatedBool", "Segment Is Associated Boolean", 2, -0.5, 1.5);
118 }
119 
120 void
122 {
123  using namespace edm;
124  using namespace reco;
125 
130 
131  for(MuonCollection::const_iterator muon = muonCollectionH_->begin();
132  muon != muonCollectionH_->end(); ++muon)
133  {
134  // trackerMuon == 0; globalMuon == 1; trackerMuon && !globalMuon == 2; globalMuon && !trackerMuon == 3
135  for (unsigned int i = 0; i < 4; i++) {
136  if (i == 0 && (! useTrackerMuons_ || ! muon->isTrackerMuon())) continue;
137  if (i == 1 && (! useGlobalMuons_ || ! muon->isGlobalMuon())) continue;
138  if (i == 2 && (! useTrackerMuonsNotGlobalMuons_ || (! (muon->isTrackerMuon() && ! muon->isGlobalMuon())))) continue;
139  if (i == 3 && (! useGlobalMuonsNotTrackerMuons_ || (! (muon->isGlobalMuon() && ! muon->isTrackerMuon())))) continue;
140 
141  hNumChambers[i]->Fill(muon->numberOfChambers());
142  hNumMatches[i]->Fill(muon->numberOfMatches(Muon::SegmentAndTrackArbitration));
143 
144  // by station
145  for(int station = 0; station < 4; ++station)
146  {
147  // only fill num segments if we crossed (or nearly crossed) a chamber
148  if (muon->trackX(station+1, MuonSubdetId::DT, Muon::NoArbitration) < 900000)
149  hDTNumSegments[i][station]->Fill(muon->numberOfSegments(station+1, MuonSubdetId::DT, Muon::NoArbitration));
150  Fill(hDTDx[i][station], muon->dX(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration));
151  Fill(hDTPullx[i][station], muon->pullX(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration, true));
152  Fill(hDTDdXdZ[i][station], muon->dDxDz(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration));
153  Fill(hDTPulldXdZ[i][station], muon->pullDxDz(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration, true));
154 
155  if (station < 3) {
156  Fill(hDTDy[i][station], muon->dY(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration));
157  Fill(hDTPully[i][station], muon->pullY(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration, true));
158  Fill(hDTDdYdZ[i][station], muon->dDyDz(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration));
159  Fill(hDTPulldYdZ[i][station], muon->pullDyDz(station+1, MuonSubdetId::DT, Muon::SegmentAndTrackArbitration, true));
160  }
161 
162  // only fill num segments if we crossed (or nearly crossed) a chamber
163  if (muon->trackX(station+1, MuonSubdetId::CSC, Muon::NoArbitration) < 900000)
164  hCSCNumSegments[i][station]->Fill(muon->numberOfSegments(station+1, MuonSubdetId::CSC, Muon::NoArbitration));
165  Fill(hCSCDx[i][station], muon->dX(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration));
166  Fill(hCSCPullx[i][station], muon->pullX(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration, true));
167  Fill(hCSCDdXdZ[i][station], muon->dDxDz(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration));
168  Fill(hCSCPulldXdZ[i][station], muon->pullDxDz(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration, true));
169  Fill(hCSCDy[i][station], muon->dY(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration));
170  Fill(hCSCPully[i][station], muon->pullY(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration, true));
171  Fill(hCSCDdYdZ[i][station], muon->dDyDz(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration));
172  Fill(hCSCPulldYdZ[i][station], muon->pullDyDz(station+1, MuonSubdetId::CSC, Muon::SegmentAndTrackArbitration, true));
173  }
174  }
175  }// muon
176 
178  segment != dtSegmentCollectionH_->end(); ++segment)
179  {
180  LocalPoint segmentLocalPosition = segment->localPosition();
181  LocalVector segmentLocalDirection = segment->localDirection();
182  LocalError segmentLocalPositionError = segment->localPositionError();
183  LocalError segmentLocalDirectionError = segment->localDirectionError();
184  bool segmentFound = false;
185 
186  for(MuonCollection::const_iterator muon = muonCollectionH_->begin();
187  muon != muonCollectionH_->end(); ++muon)
188  {
189  if (! muon->isMatchesValid())
190  continue;
191 
192  for(std::vector<MuonChamberMatch>::const_iterator chamberMatch = muon->matches().begin();
193  chamberMatch != muon->matches().end(); ++chamberMatch) {
194  for(std::vector<MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin();
195  segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch)
196  {
197  if (fabs(segmentMatch->x - segmentLocalPosition.x() ) < 1E-6 &&
198  fabs(segmentMatch->y - segmentLocalPosition.y() ) < 1E-6 &&
199  fabs(segmentMatch->dXdZ - segmentLocalDirection.x()/segmentLocalDirection.z()) < 1E-6 &&
200  fabs(segmentMatch->dYdZ - segmentLocalDirection.y()/segmentLocalDirection.z()) < 1E-6 &&
201  fabs(segmentMatch->xErr - sqrt(segmentLocalPositionError.xx()) ) < 1E-6 &&
202  fabs(segmentMatch->yErr - sqrt(segmentLocalPositionError.yy()) ) < 1E-6 &&
203  fabs(segmentMatch->dXdZErr - sqrt(segmentLocalDirectionError.xx()) ) < 1E-6 &&
204  fabs(segmentMatch->dYdZErr - sqrt(segmentLocalDirectionError.yy()) ) < 1E-6)
205  {
206  segmentFound = true;
207  break;
208  }
209  }// segmentMatch
210  if (segmentFound) break;
211  }// chamberMatch
212  if (segmentFound) break;
213  }// muon
214 
215  if (segmentFound)
217  else
219  }// dt segment
220 
222  segment != cscSegmentCollectionH_->end(); ++segment)
223  {
224  LocalPoint segmentLocalPosition = segment->localPosition();
225  LocalVector segmentLocalDirection = segment->localDirection();
226  LocalError segmentLocalPositionError = segment->localPositionError();
227  LocalError segmentLocalDirectionError = segment->localDirectionError();
228  bool segmentFound = false;
229 
230  for(MuonCollection::const_iterator muon = muonCollectionH_->begin();
231  muon != muonCollectionH_->end(); ++muon)
232  {
233  if (! muon->isMatchesValid())
234  continue;
235 
236  for(std::vector<MuonChamberMatch>::const_iterator chamberMatch = muon->matches().begin();
237  chamberMatch != muon->matches().end(); ++chamberMatch) {
238  for(std::vector<MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin();
239  segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch)
240  {
241  if (fabs(segmentMatch->x - segmentLocalPosition.x() ) < 1E-6 &&
242  fabs(segmentMatch->y - segmentLocalPosition.y() ) < 1E-6 &&
243  fabs(segmentMatch->dXdZ - segmentLocalDirection.x()/segmentLocalDirection.z()) < 1E-6 &&
244  fabs(segmentMatch->dYdZ - segmentLocalDirection.y()/segmentLocalDirection.z()) < 1E-6 &&
245  fabs(segmentMatch->xErr - sqrt(segmentLocalPositionError.xx()) ) < 1E-6 &&
246  fabs(segmentMatch->yErr - sqrt(segmentLocalPositionError.yy()) ) < 1E-6 &&
247  fabs(segmentMatch->dXdZErr - sqrt(segmentLocalDirectionError.xx()) ) < 1E-6 &&
248  fabs(segmentMatch->dYdZErr - sqrt(segmentLocalDirectionError.yy()) ) < 1E-6)
249  {
250  segmentFound = true;
251  break;
252  }
253  }// segmentMatch
254  if (segmentFound) break;
255  }// chamberMatch
256  if (segmentFound) break;
257  }// muon
258 
259  if (segmentFound)
261  else
263  }// csc segment
264 }
265 
266 void
268 
269 void MuonIdDQM::Fill(MonitorElement* me, float f) {
270  if (fabs(f) > 900000) return;
271  //if (fabs(f) < 1E-8) return;
272  me->Fill(f);
273 }
274 
275 //define this as a plug-in
bool useTrackerMuons_
Definition: MuonIdDQM.h:68
T getParameter(std::string const &) const
MonitorElement * hCSCDx[4][4]
Definition: MuonIdDQM.h:94
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
float xx() const
Definition: LocalError.h:24
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:717
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * hCSCDdYdZ[4][4]
Definition: MuonIdDQM.h:100
MuonIdDQM(const edm::ParameterSet &)
Definition: MuonIdDQM.cc:3
virtual void endJob()
Definition: MuonIdDQM.cc:267
MonitorElement * hCSCDdXdZ[4][4]
Definition: MuonIdDQM.h:96
MonitorElement * hCSCPulldXdZ[4][4]
Definition: MuonIdDQM.h:97
T y() const
Definition: PV3DBase.h:62
virtual void analyze(const edm::Event &, const edm::EventSetup &)
Definition: MuonIdDQM.cc:121
bool useGlobalMuonsNotTrackerMuons_
Definition: MuonIdDQM.h:71
DQMStore * dbe_
Definition: MuonIdDQM.h:62
edm::InputTag inputDTRecSegment4DCollection_
Definition: MuonIdDQM.h:66
edm::InputTag inputCSCSegmentCollection_
Definition: MuonIdDQM.h:67
bool useTrackerMuonsNotGlobalMuons_
Definition: MuonIdDQM.h:70
virtual void beginJob()
Definition: MuonIdDQM.cc:21
MonitorElement * hDTDdYdZ[4][3]
Definition: MuonIdDQM.h:91
void Fill(long long x)
MonitorElement * hDTPully[4][3]
Definition: MuonIdDQM.h:90
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:45
MonitorElement * hCSCDy[4][4]
Definition: MuonIdDQM.h:98
int iEvent
Definition: GenABIO.cc:243
static const int CSC
Definition: MuonSubdetId.h:15
edm::Handle< DTRecSegment4DCollection > dtSegmentCollectionH_
Definition: MuonIdDQM.h:75
MonitorElement * hCSCPully[4][4]
Definition: MuonIdDQM.h:99
MonitorElement * hSegmentIsAssociatedBool
Definition: MuonIdDQM.h:104
float yy() const
Definition: LocalError.h:26
MonitorElement * hDTPullx[4][4]
Definition: MuonIdDQM.h:86
MonitorElement * hCSCPullx[4][4]
Definition: MuonIdDQM.h:95
T sqrt(T t)
Definition: SSEVec.h:46
T z() const
Definition: PV3DBase.h:63
edm::InputTag inputMuonCollection_
Definition: MuonIdDQM.h:65
bool useGlobalMuons_
Definition: MuonIdDQM.h:69
double f[11][100]
MonitorElement * hNumMatches[4]
Definition: MuonIdDQM.h:81
MonitorElement * hDTDdXdZ[4][4]
Definition: MuonIdDQM.h:87
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
edm::Handle< reco::MuonCollection > muonCollectionH_
Definition: MuonIdDQM.h:74
MonitorElement * hDTDx[4][4]
Definition: MuonIdDQM.h:85
MonitorElement * hDTPulldYdZ[4][3]
Definition: MuonIdDQM.h:92
MonitorElement * hDTDy[4][3]
Definition: MuonIdDQM.h:89
MonitorElement * hCSCPulldYdZ[4][4]
Definition: MuonIdDQM.h:101
const T & get() const
Definition: EventSetup.h:55
virtual void Fill(MonitorElement *, float)
Definition: MuonIdDQM.cc:269
MonitorElement * hDTNumSegments[4][4]
Definition: MuonIdDQM.h:84
MonitorElement * hCSCNumSegments[4][4]
Definition: MuonIdDQM.h:93
edm::ESHandle< GlobalTrackingGeometry > geometry_
Definition: MuonIdDQM.h:77
std::string baseFolder_
Definition: MuonIdDQM.h:72
static const int DT
Definition: MuonSubdetId.h:14
T x() const
Definition: PV3DBase.h:61
MonitorElement * hDTPulldXdZ[4][4]
Definition: MuonIdDQM.h:88
~MuonIdDQM()
Definition: MuonIdDQM.cc:18
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:429
MonitorElement * hNumChambers[4]
Definition: MuonIdDQM.h:80
edm::Handle< CSCSegmentCollection > cscSegmentCollectionH_
Definition: MuonIdDQM.h:76