CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Attributes
ME0SegmentsValidation Class Reference

#include <ME0SegmentsValidation.h>

Inheritance diagram for ME0SegmentsValidation:
ME0BaseValidation DQMEDAnalyzer edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &) override
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 
std::pair< int, int > isMatched (ME0DetId, LocalPoint, edm::Handle< ME0DigiPreRecoCollection >)
 
bool isSimMatched (edm::SimTrackContainer::const_iterator, edm::PSimHitContainer::const_iterator)
 
bool isSimTrackGood (edm::SimTrackContainer::const_iterator simTrack)
 
 ME0SegmentsValidation (const edm::ParameterSet &)
 
 ~ME0SegmentsValidation () override
 
- Public Member Functions inherited from ME0BaseValidation
MonitorElementBookHistXY (DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int layer_num=99)
 
MonitorElementBookHistZR (DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int layer_num=99)
 
 ME0BaseValidation (const edm::ParameterSet &ps)
 
 ~ME0BaseValidation () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
virtual void analyze (edm::Event const &, edm::EventSetup const &)
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual void dqmBeginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
virtual void dqmEndLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmEndRun (edm::Run const &, edm::EventSetup const &)
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &, edm::EventSetup const &) final
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

typedef std::map< ME0SegmentCollection::const_iterator, std::vector< ME0RecHit > > MapTypeSeg
 
typedef std::map< edm::SimTrackContainer::const_iterator, edm::PSimHitContainerMapTypeSim
 

Private Attributes

double eta_max_
 
double eta_min_
 
edm::EDGetToken InputTagToken_
 
edm::EDGetToken InputTagToken_Digis
 
edm::EDGetToken InputTagToken_Segments
 
edm::EDGetToken InputTagTokenST_
 
bool isMuonGun_
 
MonitorElementme0_matchedsimsegment_eta
 
MonitorElementme0_matchedsimsegment_phi
 
MonitorElementme0_matchedsimsegment_pt
 
MonitorElementme0_rh_xy_Muon [2][6]
 
MonitorElementme0_segment_chi2
 
MonitorElementme0_segment_EtaRH
 
MonitorElementme0_segment_ndof
 
MonitorElementme0_segment_numRH
 
MonitorElementme0_segment_numRHBkg
 
MonitorElementme0_segment_numRHSig
 
MonitorElementme0_segment_PhiRH
 
MonitorElementme0_segment_redchi2
 
MonitorElementme0_segment_size
 
MonitorElementme0_segment_time
 
MonitorElementme0_segment_timeErr
 
MonitorElementme0_simsegment_eta
 
MonitorElementme0_simsegment_phi
 
MonitorElementme0_simsegment_pt
 
MonitorElementme0_specRH_DeltaX [2][6]
 
MonitorElementme0_specRH_DeltaY [2][6]
 
MonitorElementme0_specRH_PullX [2][6]
 
MonitorElementme0_specRH_PullY [2][6]
 
MonitorElementme0_specRH_xy [2][6]
 
MonitorElementme0_specRH_zr [2]
 
int npart
 
double pt_min_
 
double sigma_x_
 
double sigma_y_
 

Additional Inherited Members

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
- Protected Attributes inherited from ME0BaseValidation
edm::EDGetToken InputTagToken_
 
std::vector< std::string > layerLabel
 
int nBinXY_
 
std::vector< double > nBinZR_
 
std::vector< double > RangeZR_
 
std::vector< std::string > regionLabel
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 16 of file ME0SegmentsValidation.h.

Member Typedef Documentation

Definition at line 56 of file ME0SegmentsValidation.h.

typedef std::map<edm::SimTrackContainer::const_iterator, edm::PSimHitContainer> ME0SegmentsValidation::MapTypeSim
private

Definition at line 55 of file ME0SegmentsValidation.h.

Constructor & Destructor Documentation

ME0SegmentsValidation::ME0SegmentsValidation ( const edm::ParameterSet cfg)
explicit

Definition at line 5 of file ME0SegmentsValidation.cc.

References eta_max_, eta_min_, edm::ParameterSet::getParameter(), InputTagToken_, InputTagToken_Digis, InputTagToken_Segments, InputTagTokenST_, isMuonGun_, pt_min_, sigma_x_, and sigma_y_.

5  : ME0BaseValidation(cfg) {
6  InputTagToken_Segments = consumes<ME0SegmentCollection>(cfg.getParameter<edm::InputTag>("segmentInputLabel"));
7  InputTagToken_Digis = consumes<ME0DigiPreRecoCollection>(cfg.getParameter<edm::InputTag>("digiInputLabel"));
8  InputTagToken_ = consumes<edm::PSimHitContainer>(cfg.getParameter<edm::InputTag>("simInputLabel"));
9  InputTagTokenST_ = consumes<edm::SimTrackContainer>(cfg.getParameter<edm::InputTag>("simInputLabelST"));
10  sigma_x_ = cfg.getParameter<double>("sigma_x");
11  sigma_y_ = cfg.getParameter<double>("sigma_y");
12  eta_max_ = cfg.getParameter<double>("eta_max");
13  eta_min_ = cfg.getParameter<double>("eta_min");
14  pt_min_ = cfg.getParameter<double>("pt_min");
15  isMuonGun_ = cfg.getParameter<bool>("isMuonGun");
16 }
T getParameter(std::string const &) const
ME0BaseValidation(const edm::ParameterSet &ps)
edm::EDGetToken InputTagToken_Segments
edm::EDGetToken InputTagTokenST_
edm::EDGetToken InputTagToken_
edm::EDGetToken InputTagToken_Digis
ME0SegmentsValidation::~ME0SegmentsValidation ( )
override

Definition at line 109 of file ME0SegmentsValidation.cc.

109 {}

Member Function Documentation

void ME0SegmentsValidation::analyze ( const edm::Event e,
const edm::EventSetup iSetup 
)
overridevirtual

Implements ME0BaseValidation.

Definition at line 111 of file ME0SegmentsValidation.cc.

References funct::abs(), ME0Geometry::chamber(), relativeConstraints::chamber, hltPixelTracks_cff::chi2, KineDebug3::count(), PV3DBase< T, PVType, FrameType >::eta(), ME0Geometry::etaPartition(), dqm::impl::MonitorElement::Fill(), dqmMemoryStats::float, edm::EventSetup::get(), edm::Event::getByToken(), runTauDisplay::gp, triggerObjects_cff::id, ME0Geometry::idToDet(), InputTagToken_, InputTagToken_Digis, InputTagToken_Segments, InputTagTokenST_, createfilelist::int, isMatched(), isSimMatched(), isSimTrackGood(), edm::HandleBase::isValid(), me0_matchedsimsegment_eta, me0_matchedsimsegment_phi, me0_matchedsimsegment_pt, me0_segment_chi2, me0_segment_ndof, me0_segment_numRH, me0_segment_numRHBkg, me0_segment_numRHSig, me0_segment_redchi2, me0_segment_size, me0_segment_time, me0_segment_timeErr, me0_simsegment_eta, me0_simsegment_phi, me0_simsegment_pt, me0_specRH_DeltaX, me0_specRH_DeltaY, me0_specRH_PullX, me0_specRH_PullY, me0_specRH_xy, me0_specRH_zr, ndof, PV3DBase< T, PVType, FrameType >::phi(), qcdUeDQM_cfi::quality, HLT_2018_cff::region, mps_fire::result, sigma_x_, sigma_y_, muonSimHitMatcherPSet::simTrack, TrackCandidateProducer_cfi::simTracks, mathSSE::sqrt(), GeomDet::surface(), ntuplemaker::time, Surface::toGlobal(), x, and y.

111  {
113  iSetup.get<MuonGeometryRecord>().get(hGeom);
114  const ME0Geometry *ME0Geometry_ = (&*hGeom);
115 
117  e.getByToken(InputTagToken_, ME0Hits);
118 
120  e.getByToken(InputTagTokenST_, simTracks);
121 
123  e.getByToken(InputTagToken_Segments, ME0Segments);
124 
126  e.getByToken(InputTagToken_Digis, ME0Digis);
127 
128  if (!ME0Digis.isValid()) {
129  edm::LogError("ME0SegmentsValidation") << "Cannot get ME0Digis by Token InputTagToken";
130  return;
131  }
132 
133  if (!ME0Segments.isValid()) {
134  edm::LogError("ME0SegmentsValidation") << "Cannot get ME0RecHits/ME0Segments by Token InputTagToken";
135  return;
136  }
137 
138  if (!ME0Hits.isValid()) {
139  edm::LogError("ME0HitsValidation") << "Cannot get ME0Hits by Token simInputTagToken";
140  return;
141  }
142 
143  MapTypeSim myMap;
144  MapTypeSeg myMapSeg;
145 
146  int countST = 0;
147 
148  edm::SimTrackContainer::const_iterator simTrack;
149  for (simTrack = simTracks->begin(); simTrack != simTracks->end(); ++simTrack) {
150  edm::PSimHitContainer selectedME0Hits;
151 
152  if (!isSimTrackGood(simTrack))
153  continue;
154  int count = 0;
155 
156  for (edm::PSimHitContainer::const_iterator itHit = ME0Hits->begin(); itHit != ME0Hits->end(); ++itHit) {
157  int particleType_sh = itHit->particleType();
158  int evtId_sh = itHit->eventId().event();
159  int bx_sh = itHit->eventId().bunchCrossing();
160  int procType_sh = itHit->processType();
161  if (!(abs(particleType_sh) == 13 && evtId_sh == 0 && bx_sh == 0 && procType_sh == 0))
162  continue;
163 
164  if (isSimMatched(simTrack, itHit)) {
165  ++count;
166  selectedME0Hits.push_back(*itHit);
167  ;
168  }
169 
170  } // End loop SHs
171 
172  if (selectedME0Hits.size() >= 3) {
173  myMap.insert(MapTypeSim::value_type(simTrack, selectedME0Hits));
174  me0_simsegment_eta->Fill(std::abs((*simTrack).momentum().eta()));
175  me0_simsegment_pt->Fill((*simTrack).momentum().pt());
176  me0_simsegment_phi->Fill((*simTrack).momentum().phi());
177  ++countST;
178  }
179  }
180 
181  me0_segment_size->Fill(ME0Segments->size());
182 
183  for (auto me0s = ME0Segments->begin(); me0s != ME0Segments->end(); me0s++) {
184  // The ME0 Ensamble DetId refers to layer = 1
185  ME0DetId id = me0s->me0DetId();
186  auto chamber = ME0Geometry_->chamber(id);
187  auto segLP = me0s->localPosition();
188  auto segLD = me0s->localDirection();
189  auto me0rhs = me0s->specificRecHits();
190 
191  // float localX = segLP.x();
192  // float localY = segLP.y();
193  // float dirTheta = segLD.theta();
194  // float dirPhi = segLD.phi();
195  int numberRH = me0rhs.size();
196  float chi2 = (float)me0s->chi2();
197  float ndof = me0s->degreesOfFreedom();
198  double time = me0s->time();
199  double timeErr = me0s->timeErr();
200 
201  float reducedChi2 = chi2 / ndof;
202 
203  me0_segment_chi2->Fill(chi2);
204  me0_segment_redchi2->Fill(reducedChi2);
205  me0_segment_ndof->Fill(ndof);
206  me0_segment_numRH->Fill(numberRH);
207 
208  me0_segment_time->Fill(time);
209  me0_segment_timeErr->Fill(timeErr);
210 
211  int numberRHSig = 0;
212  int numberRHBkg = 0;
213  std::vector<ME0RecHit> selectedME0RecHits;
214 
215  for (auto rh = me0rhs.begin(); rh != me0rhs.end(); rh++) {
216  auto me0id = rh->me0Id();
217  auto rhr = ME0Geometry_->etaPartition(me0id);
218  auto rhLP = rh->localPosition();
219 
220  auto result = isMatched(me0id, rhLP, ME0Digis);
221  if (result.second == 1) {
222  ++numberRHSig;
223  selectedME0RecHits.push_back(*rh);
224 
225  } else
226  ++numberRHBkg;
227 
228  auto erhLEP = rh->localPositionError();
229  auto rhGP = rhr->toGlobal(rhLP);
230  auto rhLPSegm = chamber->toLocal(rhGP);
231  float xe = segLP.x() + segLD.x() * rhLPSegm.z() / segLD.z();
232  float ye = segLP.y() + segLD.y() * rhLPSegm.z() / segLD.z();
233  float ze = rhLPSegm.z();
234  LocalPoint extrPoint(xe, ye, ze); // in segment rest frame
235  auto extSegm = rhr->toLocal(chamber->toGlobal(extrPoint)); // in layer restframe
236 
237  int region = me0id.region();
238  int layer = me0id.layer();
239  // int chamber = me0id.chamber();
240 
241  float x = rhLP.x();
242  float xErr = erhLEP.xx();
243  float y = rhLP.y();
244  float yErr = erhLEP.yy();
245 
246  float globalR = rhGP.perp();
247  float globalX = rhGP.x();
248  float globalY = rhGP.y();
249  float globalZ = rhGP.z();
250 
251  float xExt = extSegm.x();
252  float yExt = extSegm.y();
253 
254  float pull_x = (x - xExt) / sqrt(xErr);
255  float pull_y = (y - yExt) / sqrt(yErr);
256 
257  int region_num = 0;
258  if (region == -1)
259  region_num = 0;
260  else if (region == 1)
261  region_num = 1;
262  int layer_num = layer - 1;
263 
264  me0_specRH_xy[region_num][layer_num]->Fill(globalX, globalY);
265  me0_specRH_zr[region_num]->Fill(globalZ, globalR);
266 
267  me0_specRH_DeltaX[region_num][layer_num]->Fill(x - xExt);
268  me0_specRH_DeltaY[region_num][layer_num]->Fill(y - yExt);
269  me0_specRH_PullX[region_num][layer_num]->Fill(pull_x);
270  me0_specRH_PullY[region_num][layer_num]->Fill(pull_y);
271  }
272 
273  me0_segment_numRHSig->Fill(numberRHSig);
274  me0_segment_numRHBkg->Fill(numberRHBkg);
275  myMapSeg.insert(MapTypeSeg::value_type(me0s, selectedME0RecHits));
276  }
277 
278  //------------------- SimToReco -------------------
279 
280  for (auto const &st : myMap) { // loop over the signal simTracks
281 
282  int num_sh = st.second.size();
283  bool isThereOneSegmentMatched = false;
284 
285  for (auto const &seg : myMapSeg) { // loop over the reconstructed me0 segments
286 
287  int num_sh_matched = 0;
288  if (seg.second.empty())
289  continue;
290 
291  for (auto const &sh : st.second) { // loop over the me0 simHits left by
292  // the signal simTracks
293 
294  for (auto const &rh : seg.second) { // loop over the tracking recHits
295  // already matched to signal digis
296 
297  auto me0id = rh.me0Id();
298  int region_rh = (int)me0id.region();
299  int layer_rh = (int)me0id.layer();
300  int chamber_rh = (int)me0id.chamber();
301  int roll_rh = (int)me0id.roll();
302 
303  const ME0DetId id(sh.detUnitId());
304  int region_sh = id.region();
305  int layer_sh = id.layer();
306  int chamber_sh = id.chamber();
307  int roll_sh = id.roll();
308 
309  if (!(region_sh == region_rh && chamber_sh == chamber_rh && layer_sh == layer_rh && roll_sh == roll_rh))
310  continue;
311 
312  LocalPoint lp_sh = sh.localPosition();
313  LocalPoint lp_rh = rh.localPosition();
314 
315  GlobalPoint gp_sh = ME0Geometry_->idToDet(id)->surface().toGlobal(lp_sh);
316  GlobalPoint gp = ME0Geometry_->idToDet((rh).me0Id())->surface().toGlobal(lp_rh);
317  float dphi_glob = gp_sh.phi() - gp.phi();
318  float deta_glob = gp_sh.eta() - gp.eta();
319 
320  if (fabs(dphi_glob) < 3 * sigma_x_ && fabs(deta_glob) < 3 * sigma_y_)
321  ++num_sh_matched;
322 
323  } // End loop over RHs
324 
325  } // End loop over SHs
326 
327  float quality = 0;
328  if (num_sh != 0)
329  quality = num_sh_matched / (1.0 * num_sh);
330  if (quality > 0)
331  isThereOneSegmentMatched = true;
332 
333  } // End loop over segments
334 
335  // Fill hsitograms
336  if (isThereOneSegmentMatched) {
337  me0_matchedsimsegment_eta->Fill(std::abs((*(st.first)).momentum().eta()));
338  me0_matchedsimsegment_pt->Fill((*(st.first)).momentum().pt());
339  me0_matchedsimsegment_phi->Fill((*(st.first)).momentum().phi());
340  }
341 
342  } // End loop over STs
343 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
bool isSimTrackGood(edm::SimTrackContainer::const_iterator simTrack)
MonitorElement * me0_segment_redchi2
MonitorElement * me0_simsegment_pt
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
edm::EDGetToken InputTagToken_Segments
const ME0EtaPartition * etaPartition(ME0DetId id) const
Return a etaPartition given its id.
Definition: ME0Geometry.cc:35
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
std::map< edm::SimTrackContainer::const_iterator, edm::PSimHitContainer > MapTypeSim
MonitorElement * me0_specRH_xy[2][6]
MonitorElement * me0_segment_ndof
void Fill(long long x)
MonitorElement * me0_segment_numRH
MonitorElement * me0_specRH_DeltaX[2][6]
T sqrt(T t)
Definition: SSEVec.h:19
MonitorElement * me0_segment_time
const ME0Chamber * chamber(ME0DetId id) const
Return a chamber given its id.
Definition: ME0Geometry.cc:43
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
MonitorElement * me0_specRH_PullX[2][6]
MonitorElement * me0_segment_numRHBkg
edm::EDGetToken InputTagTokenST_
std::map< ME0SegmentCollection::const_iterator, std::vector< ME0RecHit > > MapTypeSeg
bool isValid() const
Definition: HandleBase.h:70
MonitorElement * me0_matchedsimsegment_phi
edm::EDGetToken InputTagToken_
MonitorElement * me0_segment_timeErr
edm::EDGetToken InputTagToken_Digis
MonitorElement * me0_specRH_PullY[2][6]
MonitorElement * me0_matchedsimsegment_pt
std::pair< int, int > isMatched(ME0DetId, LocalPoint, edm::Handle< ME0DigiPreRecoCollection >)
MonitorElement * me0_segment_size
const GeomDet * idToDet(DetId) const override
Definition: ME0Geometry.cc:24
T eta() const
Definition: PV3DBase.h:73
MonitorElement * me0_segment_chi2
MonitorElement * me0_simsegment_eta
T get() const
Definition: EventSetup.h:73
MonitorElement * me0_segment_numRHSig
MonitorElement * me0_specRH_DeltaY[2][6]
std::vector< PSimHit > PSimHitContainer
MonitorElement * me0_simsegment_phi
MonitorElement * me0_matchedsimsegment_eta
bool isSimMatched(edm::SimTrackContainer::const_iterator, edm::PSimHitContainer::const_iterator)
MonitorElement * me0_specRH_zr[2]
void ME0SegmentsValidation::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  Run,
edm::EventSetup const &  iSetup 
)
overridevirtual

Implements DQMEDAnalyzer.

Definition at line 18 of file ME0SegmentsValidation.cc.

References dqm::dqmstoreimpl::DQMStore::IBooker::book1D(), ME0BaseValidation::BookHistXY(), ME0BaseValidation::BookHistZR(), ME0BaseValidation::layerLabel, LogDebug, M_PI, me0_matchedsimsegment_eta, me0_matchedsimsegment_phi, me0_matchedsimsegment_pt, me0_segment_chi2, me0_segment_ndof, me0_segment_numRH, me0_segment_numRHBkg, me0_segment_numRHSig, me0_segment_redchi2, me0_segment_size, me0_segment_time, me0_segment_timeErr, me0_simsegment_eta, me0_simsegment_phi, me0_simsegment_pt, me0_specRH_DeltaX, me0_specRH_DeltaY, me0_specRH_PullX, me0_specRH_PullY, me0_specRH_xy, me0_specRH_zr, ME0BaseValidation::regionLabel, dqm::dqmstoreimpl::DQMStore::IBooker::setCurrentFolder(), and AlCaHLTBitMon_QueryRunRegistry::string.

20  {
21  // edm::ESHandle<ME0Geometry> hGeom;
22  // iSetup.get<MuonGeometryRecord>().get(hGeom);
23  // const ME0Geometry* ME0Geometry_ =( &*hGeom);
24 
25  LogDebug("MuonME0SegmentsValidation") << "Info : Loading Geometry information\n";
26  ibooker.setCurrentFolder("MuonME0RecHitsV/ME0SegmentsTask");
27 
28  unsigned int nregion = 2;
29 
30  edm::LogInfo("MuonME0SegmentsValidation") << "+++ Info : # of region : " << nregion << std::endl;
31 
32  LogDebug("MuonME0SegmentsValidation") << "+++ Info : finish to get geometry information from ES.\n";
33 
34  me0_simsegment_eta = ibooker.book1D("me0_simsegment_eta", "SimSegment Eta Distribution; #eta; entries", 8, 2.0, 2.8);
35  me0_simsegment_pt = ibooker.book1D("me0_simsegment_pt", "SimSegment pT Distribution; p_{T}; entries", 20, 0.0, 100.0);
37  ibooker.book1D("me0_simsegment_phi", "SimSegments phi Distribution; #phi; entries", 18, -M_PI, +M_PI);
38 
40  ibooker.book1D("me0_matchedsimsegment_eta", "Matched SimSegment Eta Distribution; #eta; entries", 8, 2.0, 2.8);
42  ibooker.book1D("me0_matchedsimsegment_pt", "Matched SimSegment pT Distribution; p_{T}; entries", 20, 0.0, 100.0);
43  me0_matchedsimsegment_phi = ibooker.book1D(
44  "me0_matchedsimsegment_phi", "Matched SimSegments phi Distribution; #phi; entries", 18, -M_PI, +M_PI);
45 
46  me0_segment_chi2 = ibooker.book1D("me0_seg_Chi2", "#chi^{2}; #chi^{2}; # Segments", 100, 0, 100);
47  me0_segment_redchi2 = ibooker.book1D("me0_seg_ReducedChi2", "#chi^{2}/ndof; #chi^{2}/ndof; # Segments", 100, 0, 5);
48  me0_segment_ndof = ibooker.book1D("me0_seg_ndof", "ndof; ndof; #Segments", 50, 0, 50);
50  ibooker.book1D("me0_seg_NumberRH", "Number of fitted RecHits; # RecHits; entries", 11, -0.5, 10.5);
52  ibooker.book1D("me0_seg_NumberRHSig", "Number of fitted Signal RecHits; # RecHits; entries", 11, -0.5, 10.5);
54  ibooker.book1D("me0_seg_NumberRHBkg", "Number of fitted BKG RecHits; # RecHits; entries", 11, -0.5, 10.5);
55  // me0_segment_EtaRH = ibooker.book1D("me0_specRH_globalEta","Fitted RecHits
56  // Eta Distribution; #eta; entries",200,-4.0,4.0); me0_segment_PhiRH =
57  // ibooker.book1D("me0_specRH_globalPhi","Fitted RecHits Phi Distribution;
58  // #eta; entries",18,-3.14,3.14);
59  me0_segment_time = ibooker.book1D("me0_seg_time", "Segment Timing; ns; entries", 300, -150, 150);
60  me0_segment_timeErr = ibooker.book1D("me0_seg_timErr", "Segment Timing Error; ns; entries", 50, 0, 0.5);
62  ibooker.book1D("me0_seg_size", "Segment Multiplicity; Number of ME0 segments; entries", 200, 0, 200);
63 
64  for (unsigned int region_num = 0; region_num < nregion; region_num++) {
65  me0_specRH_zr[region_num] = BookHistZR(ibooker, "me0_specRH_tot", "Segment RecHits", region_num);
66  for (unsigned int layer_num = 0; layer_num < 6; layer_num++) {
67  // me0_strip_dg_zr[region_num][layer_num] =
68  // BookHistZR(ibooker,"me0_strip_dg","SimHit",region_num,layer_num);
69  me0_specRH_xy[region_num][layer_num] =
70  BookHistXY(ibooker, "me0_specRH", "Segment RecHits", region_num, layer_num);
71  // me0_rh_xy_Muon[region_num][layer_num] =
72  // BookHistXY(ibooker,"me0_rh","RecHit Muon",region_num,layer_num);
73 
74  std::string histo_name_DeltaX =
75  std::string("me0_specRH_DeltaX_r") + regionLabel[region_num] + "_l" + layerLabel[layer_num];
76  std::string histo_name_DeltaY =
77  std::string("me0_specRH_DeltaY_r") + regionLabel[region_num] + "_l" + layerLabel[layer_num];
78  std::string histo_label_DeltaX = "Segment RecHits Delta X : region" + regionLabel[region_num] + " layer " +
79  layerLabel[layer_num] + " " + " ; x_{SimHit} - x_{Segment RecHits} ; entries";
80  std::string histo_label_DeltaY = "Segment RecHits Delta Y : region" + regionLabel[region_num] + " layer " +
81  layerLabel[layer_num] + " " + " ; y_{SimHit} - y_{Segment RecHit} ; entries";
82 
83  me0_specRH_DeltaX[region_num][layer_num] =
84  ibooker.book1D(histo_name_DeltaX.c_str(), histo_label_DeltaX.c_str(), 100, -10, 10);
85  me0_specRH_DeltaY[region_num][layer_num] =
86  ibooker.book1D(histo_name_DeltaY.c_str(), histo_label_DeltaY.c_str(), 100, -10, 10);
87 
88  std::string histo_name_PullX =
89  std::string("me0_specRH_PullX_r") + regionLabel[region_num] + "_l" + layerLabel[layer_num];
90  std::string histo_name_PullY =
91  std::string("me0_specRH_PullY_r") + regionLabel[region_num] + "_l" + layerLabel[layer_num];
92  std::string histo_label_PullX = "Segment RecHits Pull X : region" + regionLabel[region_num] + " layer " +
93  layerLabel[layer_num] + " " +
94  " ; #frac{x_{SimHit} - x_{Segment "
95  "RecHit}}{#sigma_{x,RecHit}} ; entries";
96  std::string histo_label_PullY = "Segment RecHits Pull Y : region" + regionLabel[region_num] + " layer " +
97  layerLabel[layer_num] + " " +
98  " ; #frac{y_{SimHit} - y_{Segment "
99  "RecHit}}{#sigma_{y,RecHit}} ; entries";
100 
101  me0_specRH_PullX[region_num][layer_num] =
102  ibooker.book1D(histo_name_PullX.c_str(), histo_label_DeltaX.c_str(), 100, -10, 10);
103  me0_specRH_PullY[region_num][layer_num] =
104  ibooker.book1D(histo_name_PullY.c_str(), histo_label_DeltaY.c_str(), 100, -10, 10);
105  }
106  }
107 }
#define LogDebug(id)
MonitorElement * me0_segment_redchi2
MonitorElement * me0_simsegment_pt
std::vector< std::string > regionLabel
MonitorElement * BookHistZR(DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int layer_num=99)
MonitorElement * me0_specRH_xy[2][6]
MonitorElement * me0_segment_ndof
MonitorElement * BookHistXY(DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int layer_num=99)
MonitorElement * me0_segment_numRH
MonitorElement * me0_specRH_DeltaX[2][6]
MonitorElement * me0_segment_time
MonitorElement * me0_specRH_PullX[2][6]
MonitorElement * me0_segment_numRHBkg
MonitorElement * me0_matchedsimsegment_phi
MonitorElement * me0_segment_timeErr
#define M_PI
MonitorElement * me0_specRH_PullY[2][6]
MonitorElement * me0_matchedsimsegment_pt
MonitorElement * me0_segment_size
MonitorElement * me0_segment_chi2
std::vector< std::string > layerLabel
MonitorElement * me0_simsegment_eta
MonitorElement * me0_segment_numRHSig
MonitorElement * me0_specRH_DeltaY[2][6]
MonitorElement * me0_simsegment_phi
MonitorElement * me0_matchedsimsegment_eta
MonitorElement * me0_specRH_zr[2]
std::pair< int, int > ME0SegmentsValidation::isMatched ( ME0DetId  me0id,
LocalPoint  rhLP,
edm::Handle< ME0DigiPreRecoCollection ME0Digis 
)

Definition at line 345 of file ME0SegmentsValidation.cc.

References ME0DetId::chamber(), relativeConstraints::chamber, createfilelist::int, ME0DetId::layer(), PbPb_ZMuSkimMuonDPG_cff::particleType, ME0DetId::region(), HLT_2018_cff::region, mps_fire::result, ME0DetId::roll(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by analyze().

347  {
348  int region_rh = (int)me0id.region();
349  int layer_rh = (int)me0id.layer();
350  int roll_rh = (int)me0id.roll();
351  int chamber_rh = (int)me0id.chamber();
352 
353  float l_x_rh = rhLP.x();
354  float l_y_rh = rhLP.y();
355 
356  int particleType = 0;
357  int isPrompt = -1;
358 
359  for (ME0DigiPreRecoCollection::DigiRangeIterator cItr = ME0Digis->begin(); cItr != ME0Digis->end(); cItr++) {
360  ME0DetId id = (*cItr).first;
361 
362  int region_dg = (int)id.region();
363  int layer_dg = (int)id.layer();
364  int roll_dg = (int)id.roll();
365  int chamber_dg = (int)id.chamber();
366 
367  if (region_rh != region_dg)
368  continue;
369  if (layer_rh != layer_dg)
370  continue;
371  if (chamber_rh != chamber_dg)
372  continue;
373  if (roll_rh != roll_dg)
374  continue;
375 
377  for (digiItr = (*cItr).second.first; digiItr != (*cItr).second.second; ++digiItr) {
378  float l_x_dg = digiItr->x();
379  float l_y_dg = digiItr->y();
380 
381  if (l_x_rh != l_x_dg)
382  continue;
383  if (l_y_rh != l_y_dg)
384  continue;
385 
386  particleType = digiItr->pdgid();
387  isPrompt = digiItr->prompt();
388  }
389  }
390 
391  std::pair<int, int> result;
392  result = std::make_pair(particleType, isPrompt);
393 
394  return result;
395 }
T y() const
Definition: PV3DBase.h:60
int chamber() const
Chamber id: it identifies a chamber in a ring it goes from 1 to 36.
Definition: ME0DetId.h:41
int region() const
Region id: 0 for Barrel Not in use, +/-1 For +/- Endcap.
Definition: ME0DetId.h:38
std::vector< DigiType >::const_iterator const_iterator
int roll() const
Definition: ME0DetId.h:48
int layer() const
Layer id: each chamber has six layers of chambers: layer 1 is the inner layer and layer 6 is the oute...
Definition: ME0DetId.h:44
T x() const
Definition: PV3DBase.h:59
bool ME0SegmentsValidation::isSimMatched ( edm::SimTrackContainer::const_iterator  simTrack,
edm::PSimHitContainer::const_iterator  itHit 
)

Definition at line 412 of file ME0SegmentsValidation.cc.

References mps_fire::result.

Referenced by analyze().

413  {
414  bool result = false;
415  int trackId = simTrack->trackId();
416  int trackId_sim = itHit->trackId();
417  if (trackId == trackId_sim)
418  result = true;
419  return result;
420 }
bool ME0SegmentsValidation::isSimTrackGood ( edm::SimTrackContainer::const_iterator  simTrack)

Definition at line 397 of file ME0SegmentsValidation.cc.

References funct::abs(), PVValHelper::eta, eta_max_, isMuonGun_, and pt_min_.

Referenced by analyze().

397  {
398  if ((*t).noVertex() && !isMuonGun_)
399  return false;
400  if ((*t).noGenpart() && !isMuonGun_)
401  return false;
402  if (std::abs((*t).type()) != 13)
403  return false; // only interested in direct muon simtracks
404  if ((*t).momentum().pt() < pt_min_)
405  return false;
406  const float eta(std::abs((*t).momentum().eta()));
407  if (eta < eta_min_ || eta > eta_max_)
408  return false; // no GEMs could be in such eta
409  return true;
410 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

Member Data Documentation

double ME0SegmentsValidation::eta_max_
private

Definition at line 51 of file ME0SegmentsValidation.h.

Referenced by isSimTrackGood(), and ME0SegmentsValidation().

double ME0SegmentsValidation::eta_min_
private

Definition at line 51 of file ME0SegmentsValidation.h.

Referenced by ME0SegmentsValidation().

edm::EDGetToken ME0SegmentsValidation::InputTagToken_
private

Definition at line 46 of file ME0SegmentsValidation.h.

Referenced by analyze(), and ME0SegmentsValidation().

edm::EDGetToken ME0SegmentsValidation::InputTagToken_Digis
private

Definition at line 45 of file ME0SegmentsValidation.h.

Referenced by analyze(), and ME0SegmentsValidation().

edm::EDGetToken ME0SegmentsValidation::InputTagToken_Segments
private

Definition at line 44 of file ME0SegmentsValidation.h.

Referenced by analyze(), and ME0SegmentsValidation().

edm::EDGetToken ME0SegmentsValidation::InputTagTokenST_
private

Definition at line 47 of file ME0SegmentsValidation.h.

Referenced by analyze(), and ME0SegmentsValidation().

bool ME0SegmentsValidation::isMuonGun_
private

Definition at line 53 of file ME0SegmentsValidation.h.

Referenced by isSimTrackGood(), and ME0SegmentsValidation().

MonitorElement* ME0SegmentsValidation::me0_matchedsimsegment_eta
private

Definition at line 37 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_matchedsimsegment_phi
private

Definition at line 37 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_matchedsimsegment_pt
private

Definition at line 37 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_rh_xy_Muon[2][6]
private

Definition at line 28 of file ME0SegmentsValidation.h.

MonitorElement* ME0SegmentsValidation::me0_segment_chi2
private

Definition at line 31 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_segment_EtaRH
private

Definition at line 34 of file ME0SegmentsValidation.h.

MonitorElement * ME0SegmentsValidation::me0_segment_ndof
private

Definition at line 31 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_segment_numRH
private

Definition at line 33 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_segment_numRHBkg
private

Definition at line 33 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_segment_numRHSig
private

Definition at line 33 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_segment_PhiRH
private

Definition at line 34 of file ME0SegmentsValidation.h.

MonitorElement * ME0SegmentsValidation::me0_segment_redchi2
private

Definition at line 31 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_segment_size
private

Definition at line 34 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_segment_time
private

Definition at line 32 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_segment_timeErr
private

Definition at line 32 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_simsegment_eta
private

Definition at line 36 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_simsegment_phi
private

Definition at line 36 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement * ME0SegmentsValidation::me0_simsegment_pt
private

Definition at line 36 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_specRH_DeltaX[2][6]
private

Definition at line 39 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_specRH_DeltaY[2][6]
private

Definition at line 40 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_specRH_PullX[2][6]
private

Definition at line 41 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_specRH_PullY[2][6]
private

Definition at line 42 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_specRH_xy[2][6]
private

Definition at line 27 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* ME0SegmentsValidation::me0_specRH_zr[2]
private

Definition at line 29 of file ME0SegmentsValidation.h.

Referenced by analyze(), and bookHistograms().

int ME0SegmentsValidation::npart
private

Definition at line 49 of file ME0SegmentsValidation.h.

double ME0SegmentsValidation::pt_min_
private

Definition at line 52 of file ME0SegmentsValidation.h.

Referenced by isSimTrackGood(), and ME0SegmentsValidation().

double ME0SegmentsValidation::sigma_x_
private

Definition at line 50 of file ME0SegmentsValidation.h.

Referenced by analyze(), and ME0SegmentsValidation().

double ME0SegmentsValidation::sigma_y_
private

Definition at line 50 of file ME0SegmentsValidation.h.

Referenced by analyze(), and ME0SegmentsValidation().