CMS 3D CMS Logo

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

#include <GEMPadDigiValidation.h>

Inheritance diagram for GEMPadDigiValidation:
GEMBaseValidation one::DQMEDAnalyzer< T > one::dqmimplementation::DQMBaseClass< T... >

Public Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &) override
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 
 GEMPadDigiValidation (const edm::ParameterSet &)
 
 ~GEMPadDigiValidation () override
 
- Public Member Functions inherited from GEMBaseValidation
MonitorElementBookHistXY (DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int station_num, unsigned int layer_num=99)
 
MonitorElementBookHistZR (DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int station_num, unsigned int layer_num=99)
 
 GEMBaseValidation (const edm::ParameterSet &ps)
 
MonitorElementgetDCEta (DQMStore::IBooker &, const GEMStation *, TString, TString)
 
MonitorElementgetSimpleZR (DQMStore::IBooker &, TString, TString)
 
std::string getStationLabel (int i)
 
std::string getSuffixName (int region, int station, int layer)
 
std::string getSuffixName (int region, int station)
 
std::string getSuffixName (int region)
 
std::string getSuffixTitle (int region, int station, int layer)
 
std::string getSuffixTitle (int region, int station)
 
std::string getSuffixTitle (int region)
 
const GEMGeometryinitGeometry (const edm::EventSetup &)
 
unsigned int nPart ()
 
unsigned int nRegion ()
 
unsigned int nStation ()
 
unsigned int nStationForLabel ()
 
void setNStationForLabel (unsigned int number)
 
 ~GEMBaseValidation () override
 
- Public Member Functions inherited from one::DQMEDAnalyzer< T >
 DQMEDAnalyzer ()=default
 
 DQMEDAnalyzer (DQMEDAnalyzer< T... > const &)=delete
 
 DQMEDAnalyzer (DQMEDAnalyzer< T... > &&)=delete
 
 ~DQMEDAnalyzer () override=default
 

Private Attributes

bool detailPlot_
 
edm::EDGetToken InputTagToken_
 
int nBinXY_
 
MonitorElementtheCSCPad [2][3][2]
 
MonitorElementtheCSCPad_bx [2][3][2]
 
MonitorElementtheCSCPad_phipad [2][3][2]
 
MonitorElementtheCSCPad_xy [2][3][2]
 
std::unordered_map< UInt_t, MonitorElement * > theCSCPad_xy_ch
 
MonitorElementtheCSCPad_zr [2][3][2]
 
std::unordered_map< UInt_t, MonitorElement * > thePad_dcEta
 
std::unordered_map< UInt_t, MonitorElement * > thePad_simple_zr
 

Additional Inherited Members

- Protected Attributes inherited from GEMBaseValidation
int nBinXY_
 
std::vector< double > nBinZR_
 
std::vector< double > RangeZR_
 

Detailed Description

Definition at line 8 of file GEMPadDigiValidation.h.

Constructor & Destructor Documentation

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

Definition at line 4 of file GEMPadDigiValidation.cc.

References detailPlot_, edm::ParameterSet::getParameter(), and InputTagToken_.

4  : GEMBaseValidation(cfg)
5 {
6  InputTagToken_ = consumes<GEMPadDigiCollection>(cfg.getParameter<edm::InputTag>("PadLabel"));
7  detailPlot_ = cfg.getParameter<bool>("detailPlot");
8 }
T getParameter(std::string const &) const
edm::EDGetToken InputTagToken_
GEMBaseValidation(const edm::ParameterSet &ps)
GEMPadDigiValidation::~GEMPadDigiValidation ( )
override

Definition at line 84 of file GEMPadDigiValidation.cc.

84  {
85 
86 
87 }

Member Function Documentation

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

Implements GEMBaseValidation.

Definition at line 90 of file GEMPadDigiValidation.cc.

References GEMEtaPartition::centreOfPad(), relativeConstraints::chamber, gather_cfg::cout, detailPlot_, GEMGeometry::etaPartition(), MonitorElement::Fill(), edm::EventSetup::get(), GEMBaseValidation::getSuffixName(), runTauDisplay::gp, GEMGeometry::idToDet(), InputTagToken_, edm::HandleBase::isValid(), GEMEtaPartition::pad(), PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), AlCaHLTBitMon_QueryRunRegistry::string, GeomDet::surface(), theCSCPad, theCSCPad_bx, theCSCPad_phipad, theCSCPad_xy, theCSCPad_xy_ch, theCSCPad_zr, thePad_dcEta, thePad_simple_zr, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

92 {
93  const GEMGeometry* GEMGeometry_ ;
94  try {
96  iSetup.get<MuonGeometryRecord>().get(hGeom);
97  GEMGeometry_ = &*hGeom;
98  }
100  edm::LogError("GEMPadDigiValidation") << "+++ Error : GEM geometry is unavailable on event loop. +++\n";
101  return;
102  }
104  e.getByToken(InputTagToken_, gem_digis);
105  if (!gem_digis.isValid()) {
106  edm::LogError("GEMPadDigiValidation") << "Cannot get pads by label GEMPadToken.";
107  }
108 
109  for (GEMPadDigiCollection::DigiRangeIterator cItr=gem_digis->begin(); cItr!=gem_digis->end(); cItr++) {
110 
111  GEMDetId id = (*cItr).first;
112 
113  const GeomDet* gdet = GEMGeometry_->idToDet(id);
114  if ( gdet == nullptr) {
115  std::cout<<"Getting DetId failed. Discard this gem pad hit.Maybe it comes from unmatched geometry."<<std::endl;
116  continue;
117  }
118  const BoundPlane & surface = gdet->surface();
119  const GEMEtaPartition * roll = GEMGeometry_->etaPartition(id);
120 
121  int re = id.region();
122  int la = id.layer();
123  int st = id.station();
124  Short_t chamber = (Short_t) id.chamber();
125  Short_t nroll = (Short_t) id.roll();
127 
128  //loop over digis of given roll
129  //
130  for (digiItr = (*cItr ).second.first; digiItr != (*cItr ).second.second; ++digiItr)
131  {
132  Short_t pad = (Short_t) digiItr->pad();
133  Short_t bx = (Short_t) digiItr->bx();
134 
135  LocalPoint lp = roll->centreOfPad(digiItr->pad());
136 
137  GlobalPoint gp = surface.toGlobal(lp);
138  Float_t g_r = (Float_t) gp.perp();
139  Float_t g_phi = (Float_t) gp.phi();
140  Float_t g_x = (Float_t) gp.x();
141  Float_t g_y = (Float_t) gp.y();
142  Float_t g_z = (Float_t) gp.z();
143  edm::LogInfo("GEMPadDIGIValidation")<<"Global x "<<g_x<<"Global y "<<g_y<<"\n";
144  edm::LogInfo("GEMPadDIGIValidation")<<"Global pad "<<pad<<"Global phi "<<g_phi<<std::endl;
145  edm::LogInfo("GEMPadDIGIValidation")<<"Global bx "<<bx<<std::endl;
146 
147  int region_num = (re+1)/2;
148  int station_num = st-1;
149  int layer_num = la-1;
150  int binX = (chamber-1)*2+layer_num;
151  int binY = nroll;
152 
153  // Fill normal plots.
154  TString histname_suffix = getSuffixName( re);
155  TString simple_zr_histname = TString::Format("pad_simple_zr%s",histname_suffix.Data());
156  thePad_simple_zr[simple_zr_histname.Hash()]->Fill( fabs(g_z), g_r);
157 
158  histname_suffix = getSuffixName( re, st);
159  TString dcEta_histname = TString::Format("pad_dcEta%s",histname_suffix.Data());
160  thePad_dcEta[dcEta_histname.Hash()]->Fill( binX, binY);
161 
162  if ( detailPlot_) {
163  theCSCPad_xy[region_num][station_num][layer_num]->Fill(g_x,g_y);
164  theCSCPad_phipad[region_num][station_num][layer_num]->Fill(g_phi,pad);
165  theCSCPad[region_num][station_num][layer_num]->Fill(pad);
166  theCSCPad_bx[region_num][station_num][layer_num]->Fill(bx);
167  theCSCPad_zr[region_num][station_num][layer_num]->Fill(g_z,g_r);
168  std::string name_prefix = getSuffixName( re, st, la);
169  TString hname;
170  if ( chamber %2 == 0 ) { hname = TString::Format("pad_dg_xy%s_even",name_prefix.c_str()); }
171  else { hname = TString::Format("pad_dg_xy%s_odd",name_prefix.c_str()); }
172  theCSCPad_xy_ch[hname.Hash()]->Fill(g_x,g_y);
173  }
174  }
175  }
176 }
MonitorElement * theCSCPad_zr[2][3][2]
T perp() const
Definition: PV3DBase.h:72
MonitorElement * theCSCPad[2][3][2]
MonitorElement * theCSCPad_xy[2][3][2]
std::unordered_map< UInt_t, MonitorElement * > thePad_dcEta
std::unordered_map< UInt_t, MonitorElement * > theCSCPad_xy_ch
edm::EDGetToken InputTagToken_
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
const GEMEtaPartition * etaPartition(GEMDetId id) const
Return a GEMEtaPartition given its id.
Definition: GEMGeometry.cc:99
void Fill(long long x)
std::string getSuffixName(int region, int station, int layer)
T z() const
Definition: PV3DBase.h:64
float pad(const LocalPoint &lp) const
returns FRACTIONAL pad number [0.,npads) for a point
bool isValid() const
Definition: HandleBase.h:74
MonitorElement * theCSCPad_bx[2][3][2]
const GeomDet * idToDet(DetId) const override
Definition: GEMGeometry.cc:38
std::vector< GEMPadDigi >::const_iterator const_iterator
LocalPoint centreOfPad(int pad) const
T get() const
Definition: EventSetup.h:62
std::unordered_map< UInt_t, MonitorElement * > thePad_simple_zr
MonitorElement * theCSCPad_phipad[2][3][2]
T x() const
Definition: PV3DBase.h:62
void GEMPadDigiValidation::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  Run,
edm::EventSetup const &  iSetup 
)
override

Definition at line 9 of file GEMPadDigiValidation.cc.

References DQMStore::IBooker::book1D(), DQMStore::IBooker::book2D(), GEMBaseValidation::BookHistXY(), GEMBaseValidation::BookHistZR(), detailPlot_, GEMBaseValidation::getDCEta(), GEMBaseValidation::getSimpleZR(), GEMBaseValidation::getSuffixName(), GEMBaseValidation::getSuffixTitle(), GEMBaseValidation::initGeometry(), LogDebug, Pi, GEMGeometry::regions(), mathSSE::return(), DQMStore::IBooker::setCurrentFolder(), relativeConstraints::station, AlCaHLTBitMon_QueryRunRegistry::string, theCSCPad, theCSCPad_bx, theCSCPad_phipad, theCSCPad_xy, theCSCPad_xy_ch, theCSCPad_zr, thePad_dcEta, and thePad_simple_zr.

9  {
10 
11  const GEMGeometry* GEMGeometry_ = initGeometry(iSetup);
12  if ( GEMGeometry_ == nullptr) return ;
13  LogDebug("GEMPadDigiValidation")<<"Geometry is acquired from MuonGeometryRecord\n";
14  ibooker.setCurrentFolder("MuonGEMDigisV/GEMDigisTask");
15  LogDebug("GEMPadDigiValidation")<<"ibooker set current folder\n";
16 
17  if ( GEMGeometry_ == nullptr) return ;
18  int npadsGE11 = GEMGeometry_->regions()[0]->stations()[0]->superChambers()[0]->chambers()[0]->etaPartitions()[0]->npads();
19  int npadsGE21 = 0;
20  int nPads = 0;
21 
22  if (GEMGeometry_->regions()[0]->stations().size()>1 && !GEMGeometry_->regions()[0]->stations()[1]->superChambers().empty() ) {
23  npadsGE21 = GEMGeometry_->regions()[0]->stations()[1]->superChambers()[0]->chambers()[0]->etaPartitions()[0]->npads();
24  }
25 
26  for( auto& region : GEMGeometry_->regions() ){
27  int re = region->region();
28  TString title_suffix = getSuffixTitle(re) ;
29  TString histname_suffix = getSuffixName( re ) ;
30  TString simpleZR_title = TString::Format("ZR Occupancy%s; |Z|(cm) ; R(cm)",title_suffix.Data());
31  TString simpleZR_histname = TString::Format("pad_simple_zr%s",histname_suffix.Data());
32 
33  auto* simpleZR = getSimpleZR(ibooker, simpleZR_title, simpleZR_histname);
34  if ( simpleZR != nullptr) {
35  thePad_simple_zr[simpleZR_histname.Hash() ] = simpleZR;
36  }
37  for( auto& station : region->stations()) {
38  int st = station->station();
39  TString title_suffix2 = getSuffixTitle( re, st) ;
40  TString histname_suffix2 = getSuffixName( re, st) ;
41 
42  TString dcEta_title = TString::Format("Occupancy for detector component %s;;#eta-partition",title_suffix2.Data());
43  TString dcEta_histname = TString::Format("pad_dcEta%s",histname_suffix2.Data());
44 
45  auto* dcEta = getDCEta(ibooker, station, dcEta_title, dcEta_histname);
46  if ( dcEta != nullptr) {
47  thePad_dcEta[ dcEta_histname.Hash() ] = dcEta;
48  }
49  }
50  }
51 
52 
53  if ( detailPlot_ ) {
54  for( auto& region : GEMGeometry_->regions() ) {
55  int re = region->region();
56  int region_num = (re+1)/2;
57  for( auto& station : region->stations() ) {
58  int st = station->station();
59  int station_num = st-1;
60  if ( station_num == 0 ) nPads = npadsGE11;
61  else nPads = npadsGE21;
62  for( int la = 1 ; la <= 2 ; la++) {
63  int layer_num = la-1;
64  std::string name_prefix = getSuffixName( re, st, la);
65  std::string label_prefix = getSuffixTitle( re, st, la) ;
66  theCSCPad_phipad[region_num][station_num][layer_num] = ibooker.book2D( ("pad_dg_phipad"+name_prefix).c_str(), ("Digi occupancy: "+label_prefix+"; phi [rad]; Pad number").c_str(), 280,-TMath::Pi(),TMath::Pi(), nPads/2,0,nPads );
67  theCSCPad[region_num][station_num][layer_num] = ibooker.book1D( ("pad_dg"+name_prefix).c_str(), ("Digi occupancy per pad number: "+label_prefix+";Pad number; entries").c_str(), nPads,0.5,nPads+0.5);
68  theCSCPad_bx[region_num][station_num][layer_num] = ibooker.book1D( ("pad_dg_bx"+name_prefix).c_str(), ("Bunch crossing: "+label_prefix+"; bunch crossing ; entries").c_str(), 11,-5.5,5.5);
69  theCSCPad_zr[region_num][station_num][layer_num] = BookHistZR(ibooker,"pad_dg","Pad Digi",region_num,station_num,layer_num);
70  theCSCPad_xy[region_num][station_num][layer_num] = BookHistXY(ibooker,"pad_dg","Pad Digi",region_num,station_num,layer_num);
71  TString xy_name = TString::Format("pad_dg_xy%s_odd",name_prefix.c_str());
72  TString xy_title = TString::Format("Digi XY occupancy %s at odd chambers",label_prefix.c_str());
73  theCSCPad_xy_ch[ xy_name.Hash()] = ibooker.book2D(xy_name, xy_title, 360, -360,360, 360, -360, 360);
74  xy_name = TString::Format("pad_dg_xy%s_even",name_prefix.c_str());
75  xy_title = TString::Format("Digi XY occupancy %s at even chambers",label_prefix.c_str());
76  theCSCPad_xy_ch[ xy_name.Hash()] = ibooker.book2D(xy_name, xy_title, 360, -360,360, 360, -360, 360);
77  }
78  }
79  }
80  }
81 }
#define LogDebug(id)
MonitorElement * theCSCPad_zr[2][3][2]
const double Pi
MonitorElement * theCSCPad[2][3][2]
MonitorElement * theCSCPad_xy[2][3][2]
MonitorElement * BookHistZR(DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int station_num, unsigned int layer_num=99)
std::unordered_map< UInt_t, MonitorElement * > thePad_dcEta
std::unordered_map< UInt_t, MonitorElement * > theCSCPad_xy_ch
MonitorElement * getSimpleZR(DQMStore::IBooker &, TString, TString)
MonitorElement * BookHistXY(DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int station_num, unsigned int layer_num=99)
std::string getSuffixTitle(int region, int station, int layer)
const GEMGeometry * initGeometry(const edm::EventSetup &)
return((rh^lh)&mask)
std::string getSuffixName(int region, int station, int layer)
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
const std::vector< const GEMRegion * > & regions() const
Return a vector of all GEM regions.
Definition: GEMGeometry.cc:43
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
MonitorElement * theCSCPad_bx[2][3][2]
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:109
MonitorElement * getDCEta(DQMStore::IBooker &, const GEMStation *, TString, TString)
std::unordered_map< UInt_t, MonitorElement * > thePad_simple_zr
MonitorElement * theCSCPad_phipad[2][3][2]

Member Data Documentation

bool GEMPadDigiValidation::detailPlot_
private

Definition at line 30 of file GEMPadDigiValidation.h.

Referenced by analyze(), bookHistograms(), and GEMPadDigiValidation().

edm::EDGetToken GEMPadDigiValidation::InputTagToken_
private

Definition at line 28 of file GEMPadDigiValidation.h.

Referenced by analyze(), and GEMPadDigiValidation().

int GEMPadDigiValidation::nBinXY_
private

Definition at line 29 of file GEMPadDigiValidation.h.

MonitorElement* GEMPadDigiValidation::theCSCPad[2][3][2]
private

Definition at line 19 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* GEMPadDigiValidation::theCSCPad_bx[2][3][2]
private

Definition at line 20 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* GEMPadDigiValidation::theCSCPad_phipad[2][3][2]
private

Definition at line 18 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* GEMPadDigiValidation::theCSCPad_xy[2][3][2]
private

Definition at line 17 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().

std::unordered_map< UInt_t , MonitorElement* > GEMPadDigiValidation::theCSCPad_xy_ch
private

Definition at line 22 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().

MonitorElement* GEMPadDigiValidation::theCSCPad_zr[2][3][2]
private

Definition at line 21 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().

std::unordered_map< UInt_t , MonitorElement* > GEMPadDigiValidation::thePad_dcEta
private

Definition at line 25 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().

std::unordered_map< UInt_t , MonitorElement* > GEMPadDigiValidation::thePad_simple_zr
private

Definition at line 26 of file GEMPadDigiValidation.h.

Referenced by analyze(), and bookHistograms().