test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
GEMPadDigiValidation.cc
Go to the documentation of this file.
2 #include <TMath.h>
4 {
5  InputTagToken_ = consumes<GEMPadDigiCollection>(cfg.getParameter<edm::InputTag>("PadLabel"));
6  detailPlot_ = cfg.getParameter<bool>("detailPlot");
7 }
9  const GEMGeometry* GEMGeometry_ = initGeometry(iSetup);
10 
11  if ( GEMGeometry_ == nullptr) return ;
12  int npadsGE11 = GEMGeometry_->regions()[0]->stations()[0]->superChambers()[0]->chambers()[0]->etaPartitions()[0]->npads();
13  int npadsGE21 = 0;
14  int nPads = 0;
15 
16  if ( nStation() > 1 ) {
17  npadsGE21 = GEMGeometry_->regions()[0]->stations()[1]->superChambers()[0]->chambers()[0]->etaPartitions()[0]->npads();
18  }
19 
20 
21  for( auto& region : GEMGeometry_->regions() ){
22  int re = region->region();
23  TString title_suffix = getSuffixTitle(re) ;
24  TString histname_suffix = getSuffixName( re ) ;
25  TString simpleZR_title = TString::Format("ZR Occupancy%s; |Z|(cm) ; R(cm)",title_suffix.Data());
26  TString simpleZR_histname = TString::Format("pad_simple_zr%s",histname_suffix.Data());
27 
28  auto* simpleZR = getSimpleZR(ibooker, simpleZR_title, simpleZR_histname);
29  if ( simpleZR != nullptr) {
30  thePad_simple_zr[simpleZR_histname.Hash() ] = simpleZR;
31  }
32  for( auto& station : region->stations()) {
33  int st = station->station();
34  TString title_suffix2 = getSuffixTitle( re, st) ;
35  TString histname_suffix2 = getSuffixName( re, st) ;
36 
37  TString dcEta_title = TString::Format("Occupancy for detector component %s;;#eta-partition",title_suffix2.Data());
38  TString dcEta_histname = TString::Format("pad_dcEta%s",histname_suffix2.Data());
39 
40  auto* dcEta = getDCEta(ibooker, station, dcEta_title, dcEta_histname);
41  if ( dcEta != nullptr) {
42  thePad_dcEta[ dcEta_histname.Hash() ] = dcEta;
43  }
44  }
45  }
46 
47 
48  if ( detailPlot_ ) {
49  for( auto& region : GEMGeometry_->regions() ) {
50  int re = region->region();
51  int region_num = (re+1)/2;
52  for( auto& station : region->stations() ) {
53  int st = station->station();
54  int station_num = st-1;
55  if ( station_num == 0 ) nPads = npadsGE11;
56  else nPads = npadsGE21;
57  for( int la = 1 ; la <= 2 ; la++) {
58  int layer_num = la-1;
59  std::string name_prefix = getSuffixName( re, st, la);
60  std::string label_prefix = getSuffixTitle( re, st, la) ;
61  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 );
62  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);
63  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);
64  theCSCPad_zr[region_num][station_num][layer_num] = BookHistZR(ibooker,"pad_dg","Pad Digi",region_num,station_num,layer_num);
65  theCSCPad_xy[region_num][station_num][layer_num] = BookHistXY(ibooker,"pad_dg","Pad Digi",region_num,station_num,layer_num);
66  TString xy_name = TString::Format("pad_dg_xy%s_odd",name_prefix.c_str());
67  TString xy_title = TString::Format("Digi XY occupancy %s at odd chambers",label_prefix.c_str());
68  theCSCPad_xy_ch[ xy_name.Hash()] = ibooker.book2D(xy_name, xy_title, 360, -360,360, 360, -360, 360);
69  xy_name = TString::Format("pad_dg_xy%s_even",name_prefix.c_str());
70  xy_title = TString::Format("Digi XY occupancy %s at even chambers",label_prefix.c_str());
71  theCSCPad_xy_ch[ xy_name.Hash()] = ibooker.book2D(xy_name, xy_title, 360, -360,360, 360, -360, 360);
72  }
73  }
74  }
75  }
76 }
77 
78 
80 
81 
82 }
83 
84 
86  const edm::EventSetup& iSetup)
87 {
88  const GEMGeometry* GEMGeometry_ ;
89  try {
91  iSetup.get<MuonGeometryRecord>().get(hGeom);
92  GEMGeometry_ = &*hGeom;
93  }
95  edm::LogError("GEMPadDigiValidaation") << "+++ Error : GEM geometry is unavailable on event loop. +++\n";
96  return;
97  }
99  e.getByToken(InputTagToken_, gem_digis);
100  if (!gem_digis.isValid()) {
101  edm::LogError("GEMPadDigiValidation") << "Cannot get pads by label GEMPadToken.";
102  }
103 
104  for (GEMPadDigiCollection::DigiRangeIterator cItr=gem_digis->begin(); cItr!=gem_digis->end(); cItr++) {
105 
106  GEMDetId id = (*cItr).first;
107 
108  const GeomDet* gdet = GEMGeometry_->idToDet(id);
109  if ( gdet == nullptr) {
110  std::cout<<"Getting DetId failed. Discard this gem pad hit.Maybe it comes from unmatched geometry."<<std::endl;
111  continue;
112  }
113  const BoundPlane & surface = gdet->surface();
114  const GEMEtaPartition * roll = GEMGeometry_->etaPartition(id);
115 
116  int re = id.region();
117  int la = id.layer();
118  int st = id.station();
119  Short_t chamber = (Short_t) id.chamber();
120  Short_t nroll = (Short_t) id.roll();
122 
123  //loop over digis of given roll
124  //
125  for (digiItr = (*cItr ).second.first; digiItr != (*cItr ).second.second; ++digiItr)
126  {
127  Short_t pad = (Short_t) digiItr->pad();
128  Short_t bx = (Short_t) digiItr->bx();
129 
130  LocalPoint lp = roll->centreOfPad(digiItr->pad());
131 
132  GlobalPoint gp = surface.toGlobal(lp);
133  Float_t g_r = (Float_t) gp.perp();
134  Float_t g_phi = (Float_t) gp.phi();
135  Float_t g_x = (Float_t) gp.x();
136  Float_t g_y = (Float_t) gp.y();
137  Float_t g_z = (Float_t) gp.z();
138  edm::LogInfo("GEMPadDIGIValidation")<<"Global x "<<g_x<<"Global y "<<g_y<<"\n";
139  edm::LogInfo("GEMPadDIGIValidation")<<"Global pad "<<pad<<"Global phi "<<g_phi<<std::endl;
140  edm::LogInfo("GEMPadDIGIValidation")<<"Global bx "<<bx<<std::endl;
141 
142  int region_num = (re+1)/2;
143  int station_num = st-1;
144  int layer_num = la-1;
145  int binX = (chamber-1)*2+layer_num;
146  int binY = nroll;
147 
148  // Fill normal plots.
149  TString histname_suffix = getSuffixName( re);
150  TString simple_zr_histname = TString::Format("pad_simple_zr%s",histname_suffix.Data());
151  thePad_simple_zr[simple_zr_histname.Hash()]->Fill( fabs(g_z), g_r);
152 
153  histname_suffix = getSuffixName( re, st);
154  TString dcEta_histname = TString::Format("pad_dcEta%s",histname_suffix.Data());
155  thePad_dcEta[dcEta_histname.Hash()]->Fill( binX, binY);
156 
157  if ( detailPlot_) {
158  theCSCPad_xy[region_num][station_num][layer_num]->Fill(g_x,g_y);
159  theCSCPad_phipad[region_num][station_num][layer_num]->Fill(g_phi,pad);
160  theCSCPad[region_num][station_num][layer_num]->Fill(pad);
161  theCSCPad_bx[region_num][station_num][layer_num]->Fill(bx);
162  theCSCPad_zr[region_num][station_num][layer_num]->Fill(g_z,g_r);
163  std::string name_prefix = getSuffixName( re, st, la);
164  TString hname;
165  if ( chamber %2 == 0 ) { hname = TString::Format("pad_dg_xy%s_even",name_prefix.c_str()); }
166  else { hname = TString::Format("pad_dg_xy%s_odd",name_prefix.c_str()); }
167  theCSCPad_xy_ch[hname.Hash()]->Fill(g_x,g_y);
168  }
169  }
170  }
171 }
MonitorElement * theCSCPad_zr[2][3][2]
const double Pi
T getParameter(std::string const &) const
unsigned int nStation()
tuple cfg
Definition: looper.py:293
T perp() const
Definition: PV3DBase.h:72
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
edm::EDGetToken InputTagToken_
virtual const GeomDet * idToDet(DetId) const override
Definition: GEMGeometry.cc:38
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
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 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
const GEMGeometry * initGeometry(const edm::EventSetup &)
void Fill(long long x)
std::string getSuffixName(int region, int station, int layer)
GEMPadDigiValidation(const edm::ParameterSet &)
const std::vector< const GEMRegion * > & regions() const
Return a vector of all GEM regions.
Definition: GEMGeometry.cc:43
T z() const
Definition: PV3DBase.h:64
float pad(const LocalPoint &lp) const
returns FRACTIONAL pad number [0.,npads] for a point
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
bool isValid() const
Definition: HandleBase.h:75
MonitorElement * theCSCPad_bx[2][3][2]
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
const T & get() const
Definition: EventSetup.h:56
std::vector< GEMPadDigi >::const_iterator const_iterator
MonitorElement * getDCEta(DQMStore::IBooker &, const GEMStation *, TString, TString)
return(e1-e2)*(e1-e2)+dp *dp
LocalPoint centreOfPad(int pad) const
std::unordered_map< UInt_t, MonitorElement * > thePad_simple_zr
tuple cout
Definition: gather_cfg.py:145
void analyze(const edm::Event &e, const edm::EventSetup &) override
MonitorElement * theCSCPad_phipad[2][3][2]
T x() const
Definition: PV3DBase.h:62
Definition: Run.h:42