CMS 3D CMS Logo

GEMDQMBase.cc
Go to the documentation of this file.
3 
4 using namespace std;
5 using namespace edm;
6 
8  log_category_ = cfg.getUntrackedParameter<std::string>("logCategory");
9 
13 }
14 
16  GEMGeometry_ = nullptr;
17  try {
18  //edm::ESHandle<GEMGeometry> hGeom;
19  //iSetup.get<MuonGeometryRecord>().get(hGeom);
20  GEMGeometry_ = &iSetup.getData(geomToken_);
22  edm::LogError(log_category_) << "+++ Error : GEM geometry is unavailable on event loop. +++\n";
23  return -1;
24  }
25 
26  return 0;
27 }
28 
29 // Borrowed from DQMOffline/Muon/src/GEMOfflineDQMBase.cc
31  const auto&& superchambers = station->superChambers();
32  if (not checkRefs(superchambers)) {
33  edm::LogError(log_category_) << "failed to get a valid vector of GEMSuperChamber ptrs" << std::endl;
34  return 0;
35  }
36 
37  const auto& chambers = superchambers.front()->chambers();
38  if (not checkRefs(chambers)) {
39  edm::LogError(log_category_) << "failed to get a valid vector of GEMChamber ptrs" << std::endl;
40  return 0;
41  }
42 
43  return chambers.front()->nEtaPartitions();
44 }
45 
47  if (GEMGeometry_ == nullptr)
48  return -1;
49  gemChambers_.clear();
50  const std::vector<const GEMSuperChamber*>& superChambers_ = GEMGeometry_->superChambers();
51  for (auto sch : superChambers_) { // FIXME: This loop can be merged into the below loop
52  int n_lay = sch->nChambers();
53  for (int l = 0; l < n_lay; l++) {
54  Bool_t bExist = false;
55  for (const auto& ch : gemChambers_) {
56  if (ch.id() == sch->chamber(l + 1)->id()) {
57  bExist = true;
58  break;
59  }
60  }
61  if (bExist)
62  continue;
63  gemChambers_.push_back(*sch->chamber(l + 1));
64  }
65  }
66 
67  // Borrwed from DQMOffline/Muon/src/GEMOfflineMonitor.cc
68  nMaxNumCh_ = 0;
69  for (const GEMRegion* region : GEMGeometry_->regions()) {
70  const int region_number = region->region();
71 
72  for (const GEMStation* station : region->stations()) {
73  const auto&& superchambers = station->superChambers();
74 
75  const int station_number = station->station();
76  const int num_superchambers = superchambers.size();
77  const int num_layers = superchambers.front()->nChambers();
78  const int max_vfat = getMaxVFAT(station->station()); // the number of VFATs per GEMEtaPartition
79  const int num_etas = getNumEtaPartitions(station); // the number of eta partitions per GEMChamber
80  const int num_vfat = num_etas * max_vfat; // the number of VFATs per GEMChamber
81  const int num_digi = GEMeMap::maxChan_; // the number of digis (channels) per VFAT
82 
83  nMaxNumCh_ = std::max(nMaxNumCh_, num_superchambers);
84 
85  for (int layer_number = 1; layer_number <= num_layers; layer_number++) {
86  ME3IdsKey key3(region_number, station_number, layer_number);
87  mapStationInfo_[key3] =
88  MEStationInfo(region_number, station_number, layer_number, num_superchambers, num_etas, num_vfat, num_digi);
89  }
90  }
91  }
92 
93  if (mapStationInfo_.find(ME3IdsKey(-1, 0, 1)) != mapStationInfo_.end())
94  nNumEtaPartitionGE0_ = mapStationInfo_[ME3IdsKey(-1, 0, 1)].nNumEtaPartitions_;
95  if (mapStationInfo_.find(ME3IdsKey(-1, 1, 1)) != mapStationInfo_.end())
96  nNumEtaPartitionGE11_ = mapStationInfo_[ME3IdsKey(-1, 1, 1)].nNumEtaPartitions_;
97  if (mapStationInfo_.find(ME3IdsKey(-1, 2, 1)) != mapStationInfo_.end())
98  nNumEtaPartitionGE21_ = mapStationInfo_[ME3IdsKey(-1, 2, 1)].nNumEtaPartitions_;
99 
100  return 0;
101 }
102 
103 int GEMDQMBase::SortingLayers(std::vector<ME3IdsKey>& listLayers) {
104  std::sort(listLayers.begin(), listLayers.end(), [](ME3IdsKey key1, ME3IdsKey key2) {
105  Int_t re1 = std::get<0>(key1), st1 = std::get<1>(key1), la1 = std::get<2>(key1);
106  Int_t re2 = std::get<0>(key2), st2 = std::get<1>(key2), la2 = std::get<2>(key2);
107  if (re1 < 0 && re2 > 0)
108  return false;
109  if (re1 > 0 && re2 < 0)
110  return true;
111  Bool_t bRes = (re1 < 0); // == re2 < 0
112  Int_t sum1 = 256 * std::abs(re1) + 16 * st1 + 1 * la1;
113  Int_t sum2 = 256 * std::abs(re2) + 16 * st2 + 1 * la2;
114  if (sum1 <= sum2)
115  return bRes;
116  return !bRes;
117  });
118 
119  return 0;
120 }
121 
123  std::vector<ME3IdsKey> listLayers;
124  for (auto const& [key, stationInfo] : mapStationInfo_)
125  listLayers.push_back(key);
126  SortingLayers(listLayers);
127  for (Int_t i = 0; i < (Int_t)listLayers.size(); i++)
128  mapStationToIdx_[listLayers[i]] = i + 1;
129 
130  auto h2Res =
131  ibooker.book2D(strName, "", nMaxNumCh_, 0.5, nMaxNumCh_ + 0.5, listLayers.size(), 0.5, listLayers.size() + 0.5);
132  h2Res->setXTitle("Chamber");
133  h2Res->setYTitle("Layer");
134 
135  if (h2Res == nullptr)
136  return nullptr;
137 
138  for (Int_t i = 1; i <= nMaxNumCh_; i++)
139  h2Res->setBinLabel(i, Form("%i", i), 1);
140  for (Int_t i = 1; i <= (Int_t)listLayers.size(); i++) {
141  auto key = listLayers[i - 1];
142  auto strInfo = GEMUtils::getSuffixName(key); // NOTE: It starts with '_'
143  auto region = keyToRegion(key);
144  auto label = Form("GE%i%i-%cL%i;%s",
145  std::abs(region),
146  keyToStation(key),
147  (region > 0 ? 'P' : 'M'),
148  keyToLayer(key),
149  strInfo.Data());
150  h2Res->setBinLabel(i, label, 2);
151  Int_t nNumCh = mapStationInfo_[key].nNumChambers_;
152  h2Res->setBinContent(0, i, nNumCh);
153  }
154 
155  return h2Res;
156 }
157 
159  MEMap2Check_.clear();
160  MEMap2WithEtaCheck_.clear();
161  MEMap2AbsReWithEtaCheck_.clear();
162  MEMap3Check_.clear();
163  MEMap3WithChCheck_.clear();
164  MEMap4Check_.clear();
165  for (const auto& ch : gemChambers_) {
166  GEMDetId gid = ch.id();
167  ME2IdsKey key2{gid.region(), gid.station()};
168  ME3IdsKey key3{gid.region(), gid.station(), gid.layer()};
169  ME4IdsKey key3WithChamber{gid.region(), gid.station(), gid.layer(), gid.chamber()};
170  if (!MEMap2Check_[key2]) {
171  auto strSuffixName = GEMUtils::getSuffixName(key2);
172  auto strSuffixTitle = GEMUtils::getSuffixTitle(key2);
173  BookingHelper bh2(ibooker, strSuffixName, strSuffixTitle);
174  ProcessWithMEMap2(bh2, key2);
175  MEMap2Check_[key2] = true;
176  }
177  if (!MEMap3Check_[key3]) {
178  auto strSuffixName = GEMUtils::getSuffixName(key3);
179  auto strSuffixTitle = GEMUtils::getSuffixTitle(key3);
180  BookingHelper bh3(ibooker, strSuffixName, strSuffixTitle);
181  ProcessWithMEMap3(bh3, key3);
182  MEMap3Check_[key3] = true;
183  }
184  if (!MEMap3WithChCheck_[key3WithChamber]) {
185  Int_t nCh = gid.chamber();
186  Int_t nLa = gid.layer();
187  char cLS = (nCh % 2 == 0 ? 'L' : 'S'); // FIXME: Is it general enough?
188  auto strSuffixName = GEMUtils::getSuffixName(key2) + Form("-%02iL%i-%c", nCh, nLa, cLS);
189  auto strSuffixTitle = GEMUtils::getSuffixTitle(key2) + Form("-%02iL%i-%c", nCh, nLa, cLS);
190  BookingHelper bh3Ch(ibooker, strSuffixName, strSuffixTitle);
191  ProcessWithMEMap3WithChamber(bh3Ch, key3WithChamber);
192  MEMap3WithChCheck_[key3WithChamber] = true;
193  }
194  for (auto iEta : ch.etaPartitions()) {
195  GEMDetId eId = iEta->id();
196  ME4IdsKey key4{gid.region(), gid.station(), gid.layer(), eId.ieta()};
197  ME3IdsKey key2WithEta{gid.region(), gid.station(), eId.ieta()};
198  ME3IdsKey key2AbsReWithEta{std::abs(gid.region()), gid.station(), eId.ieta()};
199  if (!MEMap4Check_[key4]) {
200  auto strSuffixName = GEMUtils::getSuffixName(key3) + Form("-E%02i", eId.ieta());
201  auto strSuffixTitle = GEMUtils::getSuffixTitle(key3) + Form("-E%02i", eId.ieta());
202  BookingHelper bh4(ibooker, strSuffixName, strSuffixTitle);
203  ProcessWithMEMap4(bh4, key4);
204  MEMap4Check_[key4] = true;
205  }
206  if (!MEMap2WithEtaCheck_[key2WithEta]) {
207  auto strSuffixName = GEMUtils::getSuffixName(key2) + Form("-E%02i", eId.ieta());
208  auto strSuffixTitle = GEMUtils::getSuffixTitle(key2) + Form("-E%02i", eId.ieta());
209  BookingHelper bh3(ibooker, strSuffixName, strSuffixTitle);
210  ProcessWithMEMap2WithEta(bh3, key2WithEta);
211  MEMap2WithEtaCheck_[key2WithEta] = true;
212  }
213  if (!MEMap2AbsReWithEtaCheck_[key2AbsReWithEta]) {
214  auto strSuffixName = Form("_GE%i%i-E%02i", std::abs(gid.region()), gid.station(), eId.ieta());
215  auto strSuffixTitle = Form(" GE%i%i-E%02i", std::abs(gid.region()), gid.station(), eId.ieta());
216  BookingHelper bh3(ibooker, strSuffixName, strSuffixTitle);
217  ProcessWithMEMap2AbsReWithEta(bh3, key2AbsReWithEta);
218  MEMap2AbsReWithEtaCheck_[key2AbsReWithEta] = true;
219  }
220  }
221  }
222  return 0;
223 }
GEMDQMBase::MEMap3Check_
std::map< ME3IdsKey, bool > MEMap3Check_
Definition: GEMDQMBase.h:519
GEMDQMBase::MEMap2AbsReWithEtaCheck_
std::map< ME3IdsKey, bool > MEMap2AbsReWithEtaCheck_
Definition: GEMDQMBase.h:518
GEMDQMBase::gemChambers_
std::vector< GEMChamber > gemChambers_
Definition: GEMDQMBase.h:514
ME2IdsKey
std::tuple< Int_t, Int_t > ME2IdsKey
Definition: GEMValidationUtils.h:16
dqm::impl::MonitorElement
Definition: MonitorElement.h:98
GEMDQMBase::MEMap4Check_
std::map< ME4IdsKey, bool > MEMap4Check_
Definition: GEMDQMBase.h:521
mps_fire.i
i
Definition: mps_fire.py:428
GEMDQMBase::keyToStation
int keyToStation(ME2IdsKey key)
Definition: GEMDQMBase.h:477
GEMDetId::layer
constexpr int layer() const
Definition: GEMDetId.h:190
GEMDQMBase::MEStationInfo
Definition: GEMDQMBase.h:422
GEMDetId::region
constexpr int region() const
Definition: GEMDetId.h:171
relativeConstraints.station
station
Definition: relativeConstraints.py:67
GEMDQMBase::GEMGeometry_
const GEMGeometry * GEMGeometry_
Definition: GEMDQMBase.h:511
edm
HLT enums.
Definition: AlignableModifier.h:19
ME4IdsKey
std::tuple< Int_t, Int_t, Int_t, Int_t > ME4IdsKey
Definition: GEMValidationUtils.h:20
GEMDQMBase::MEMap2WithEtaCheck_
std::map< ME3IdsKey, bool > MEMap2WithEtaCheck_
Definition: GEMDQMBase.h:517
GEMStripTopology.h
GEMDQMBase::SortingLayers
int SortingLayers(std::vector< ME3IdsKey > &listLayers)
Definition: GEMDQMBase.cc:103
GEMDQMBase::getMaxVFAT
int getMaxVFAT(const int)
Definition: GEMDQMBase.h:543
GEMDQMBase::nMaxNumCh_
int nMaxNumCh_
Definition: GEMDQMBase.h:523
GEMDQMBase::ProcessWithMEMap2WithEta
virtual int ProcessWithMEMap2WithEta(BookingHelper &bh, ME3IdsKey key)
Definition: GEMDQMBase.h:468
GEMUtils::getSuffixName
TString getSuffixName(Int_t region_id)
Definition: GEMValidationUtils.cc:5
GEMDQMBase::nNumEtaPartitionGE0_
Int_t nNumEtaPartitionGE0_
Definition: GEMDQMBase.h:527
GEMDQMBase::BookingHelper
Definition: GEMDQMBase.h:32
GEMDQMBase.h
GEMDQMBase::GEMDQMBase
GEMDQMBase(const edm::ParameterSet &cfg)
Definition: GEMDQMBase.cc:7
GEMDQMBase::nNumEtaPartitionGE21_
Int_t nNumEtaPartitionGE21_
Definition: GEMDQMBase.h:529
GEMStation
Definition: GEMStation.h:19
dqm::impl::MonitorElement::setXTitle
virtual void setXTitle(std::string const &title)
Definition: MonitorElement.cc:861
GEMDQMBase::CreateSummaryHist
dqm::impl::MonitorElement * CreateSummaryHist(DQMStore::IBooker &ibooker, TString strName)
Definition: GEMDQMBase.cc:122
GEMDetId::chamber
constexpr int chamber() const
Definition: GEMDetId.h:183
GEMDQMBase::initGeometry
int initGeometry(edm::EventSetup const &iSetup)
Definition: GEMDQMBase.cc:15
edm::ParameterSet
Definition: ParameterSet.h:47
edm::Transition
Transition
Definition: Transition.h:12
GEMDQMBase::MEMap3WithChCheck_
std::map< ME4IdsKey, bool > MEMap3WithChCheck_
Definition: GEMDQMBase.h:520
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
GEMDQMBase::ProcessWithMEMap2AbsReWithEta
virtual int ProcessWithMEMap2AbsReWithEta(BookingHelper &bh, ME3IdsKey key)
Definition: GEMDQMBase.h:469
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
GEMDQMBase::ProcessWithMEMap2
virtual int ProcessWithMEMap2(BookingHelper &bh, ME2IdsKey key)
Definition: GEMDQMBase.h:467
GEMDetId
Definition: GEMDetId.h:18
GEMDQMBase::checkRefs
bool checkRefs(const std::vector< T * > &)
Definition: GEMDQMBase.h:534
HLT_FULL_cff.region
region
Definition: HLT_FULL_cff.py:88286
chambers
static char chambers[264][20]
Definition: ReadPGInfo.cc:243
GEMGeometry::regions
const std::vector< const GEMRegion * > & regions() const
Return a vector of all GEM regions.
Definition: GEMGeometry.cc:30
GEMDQMBase::nNumEtaPartitionGE11_
Int_t nNumEtaPartitionGE11_
Definition: GEMDQMBase.h:528
GEMDQMBase::ProcessWithMEMap4
virtual int ProcessWithMEMap4(BookingHelper &bh, ME4IdsKey key)
Definition: GEMDQMBase.h:471
combinedConstraintHelpers::sum2
void sum2(T &x, T y)
Definition: CombinedKinematicConstraintT.h:74
edm::EventSetup
Definition: EventSetup.h:58
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
cmsLHEtoEOSManager.l
l
Definition: cmsLHEtoEOSManager.py:204
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
looper.cfg
cfg
Definition: looper.py:296
GEMDQMBase::loadChambers
int loadChambers()
Definition: GEMDQMBase.cc:46
GEMDQMBase::keyToLayer
int keyToLayer(ME3IdsKey key)
Definition: GEMDQMBase.h:480
std
Definition: JetResolutionObject.h:76
GEMDQMBase::log_category_
std::string log_category_
Definition: GEMDQMBase.h:457
GEMDQMBase::mapStationInfo_
std::map< ME3IdsKey, MEStationInfo > mapStationInfo_
Definition: GEMDQMBase.h:525
edm::Transition::BeginRun
dqm::implementation::IBooker::book2D
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:177
GEMUtils::getSuffixTitle
TString getSuffixTitle(Int_t region_id)
Definition: GEMValidationUtils.cc:34
ME3IdsKey
std::tuple< Int_t, Int_t, Int_t > ME3IdsKey
Definition: GEMValidationUtils.h:19
dqm::implementation::IBooker
Definition: DQMStore.h:43
GEMDQMBase::mapStationToIdx_
std::map< ME3IdsKey, int > mapStationToIdx_
Definition: GEMDQMBase.h:524
GEMDQMBase::keyToRegion
int keyToRegion(ME2IdsKey key)
Definition: GEMDQMBase.h:474
edm::eventsetup::NoProxyException
Definition: NoProxyException.h:31
L1TowerCalibrationProducer_cfi.iEta
iEta
Definition: L1TowerCalibrationProducer_cfi.py:60
GEMDetId::station
constexpr int station() const
Definition: GEMDetId.h:179
GEMDQMBase::MEMap2Check_
std::map< ME2IdsKey, bool > MEMap2Check_
Definition: GEMDQMBase.h:516
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
GEMGeometry::superChambers
const std::vector< const GEMSuperChamber * > & superChambers() const
Return a vector of all GEM super chambers.
Definition: GEMGeometry.cc:36
GEMRegion
Definition: GEMRegion.h:19
GEMDetId::ieta
constexpr int ieta() const
Definition: GEMDetId.h:199
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
GEMDQMBase::geomToken_
edm::ESGetToken< GEMGeometry, MuonGeometryRecord > geomToken_
Definition: GEMDQMBase.h:512
GEMDQMBase::ProcessWithMEMap3WithChamber
virtual int ProcessWithMEMap3WithChamber(BookingHelper &bh, ME4IdsKey key)
Definition: GEMDQMBase.h:472
GEMDQMBase::getNumEtaPartitions
int getNumEtaPartitions(const GEMStation *)
Definition: GEMDQMBase.cc:30
crabWrapper.key
key
Definition: crabWrapper.py:19
GEMDQMBase::ProcessWithMEMap3
virtual int ProcessWithMEMap3(BookingHelper &bh, ME3IdsKey key)
Definition: GEMDQMBase.h:470
label
const char * label
Definition: PFTauDecayModeTools.cc:11
GEMeMap::maxChan_
static const int maxChan_
Definition: GEMeMap.h:72
GEMDQMBase::GenerateMEPerChamber
int GenerateMEPerChamber(DQMStore::IBooker &ibooker)
Definition: GEMDQMBase.cc:158
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37