CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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  mapStationInfo_[key3].fMinPhi_ = -0.088344; // FIXME
90  }
91  }
92  }
93 
94  if (mapStationInfo_.find(ME3IdsKey(-1, 0, 1)) != mapStationInfo_.end())
95  nNumEtaPartitionGE0_ = mapStationInfo_[ME3IdsKey(-1, 0, 1)].nNumEtaPartitions_;
96  if (mapStationInfo_.find(ME3IdsKey(-1, 1, 1)) != mapStationInfo_.end())
97  nNumEtaPartitionGE11_ = mapStationInfo_[ME3IdsKey(-1, 1, 1)].nNumEtaPartitions_;
98  if (mapStationInfo_.find(ME3IdsKey(-1, 2, 1)) != mapStationInfo_.end())
99  nNumEtaPartitionGE21_ = mapStationInfo_[ME3IdsKey(-1, 2, 1)].nNumEtaPartitions_;
100 
101  return 0;
102 }
103 
104 int GEMDQMBase::SortingLayers(std::vector<ME3IdsKey>& listLayers) {
105  std::sort(listLayers.begin(), listLayers.end(), [](ME3IdsKey key1, ME3IdsKey key2) {
106  Int_t re1 = std::get<0>(key1), st1 = std::get<1>(key1), la1 = std::get<2>(key1);
107  Int_t re2 = std::get<0>(key2), st2 = std::get<1>(key2), la2 = std::get<2>(key2);
108  if (re1 < 0 && re2 > 0)
109  return false;
110  if (re1 > 0 && re2 < 0)
111  return true;
112  Bool_t bRes = (re1 < 0); // == re2 < 0
113  Int_t sum1 = 256 * std::abs(re1) + 16 * st1 + 1 * la1;
114  Int_t sum2 = 256 * std::abs(re2) + 16 * st2 + 1 * la2;
115  if (sum1 <= sum2)
116  return bRes;
117  return !bRes;
118  });
119 
120  return 0;
121 }
122 
124  std::vector<ME3IdsKey> listLayers;
125  for (auto const& [key, stationInfo] : mapStationInfo_)
126  listLayers.push_back(key);
127  SortingLayers(listLayers);
128  for (Int_t i = 0; i < (Int_t)listLayers.size(); i++)
129  mapStationToIdx_[listLayers[i]] = i + 1;
130 
131  auto h2Res =
132  ibooker.book2D(strName, "", nMaxNumCh_, 0.5, nMaxNumCh_ + 0.5, listLayers.size(), 0.5, listLayers.size() + 0.5);
133  h2Res->setXTitle("Chamber");
134  h2Res->setYTitle("Layer");
135 
136  if (h2Res == nullptr)
137  return nullptr;
138 
139  for (Int_t i = 1; i <= nMaxNumCh_; i++)
140  h2Res->setBinLabel(i, Form("%i", i), 1);
141  for (Int_t i = 1; i <= (Int_t)listLayers.size(); i++) {
142  auto key = listLayers[i - 1];
143  auto strInfo = GEMUtils::getSuffixName(key); // NOTE: It starts with '_'
144  auto region = keyToRegion(key);
145  auto label = Form("GE%i%i-%cL%i;%s",
146  std::abs(region),
147  keyToStation(key),
148  (region > 0 ? 'P' : 'M'),
149  keyToLayer(key),
150  strInfo.Data());
151  h2Res->setBinLabel(i, label, 2);
152  Int_t nNumCh = mapStationInfo_[key].nNumChambers_;
153  h2Res->setBinContent(0, i, nNumCh);
154  }
155 
156  return h2Res;
157 }
158 
160  MEMap2Check_.clear();
161  MEMap2WithEtaCheck_.clear();
162  MEMap2AbsReWithEtaCheck_.clear();
163  MEMap3Check_.clear();
164  MEMap3WithChCheck_.clear();
165  MEMap4Check_.clear();
166  for (const auto& ch : gemChambers_) {
167  GEMDetId gid = ch.id();
168  ME2IdsKey key2{gid.region(), gid.station()};
169  ME3IdsKey key3{gid.region(), gid.station(), gid.layer()};
170  ME4IdsKey key3WithChamber{gid.region(), gid.station(), gid.layer(), gid.chamber()};
171  if (!MEMap2Check_[key2]) {
172  auto strSuffixName = GEMUtils::getSuffixName(key2);
173  auto strSuffixTitle = GEMUtils::getSuffixTitle(key2);
174  BookingHelper bh2(ibooker, strSuffixName, strSuffixTitle);
175  ProcessWithMEMap2(bh2, key2);
176  MEMap2Check_[key2] = true;
177  }
178  if (!MEMap3Check_[key3]) {
179  auto strSuffixName = GEMUtils::getSuffixName(key3);
180  auto strSuffixTitle = GEMUtils::getSuffixTitle(key3);
181  BookingHelper bh3(ibooker, strSuffixName, strSuffixTitle);
182  ProcessWithMEMap3(bh3, key3);
183  MEMap3Check_[key3] = true;
184  }
185  if (!MEMap3WithChCheck_[key3WithChamber]) {
186  Int_t nCh = gid.chamber();
187  Int_t nLa = gid.layer();
188  char cLS = (nCh % 2 == 0 ? 'L' : 'S'); // FIXME: Is it general enough?
189  auto strSuffixName = GEMUtils::getSuffixName(key2) + Form("-%02iL%i-%c", nCh, nLa, cLS);
190  auto strSuffixTitle = GEMUtils::getSuffixTitle(key2) + Form("-%02iL%i-%c", nCh, nLa, cLS);
191  BookingHelper bh3Ch(ibooker, strSuffixName, strSuffixTitle);
192  ProcessWithMEMap3WithChamber(bh3Ch, key3WithChamber);
193  MEMap3WithChCheck_[key3WithChamber] = true;
194  }
195  for (auto iEta : ch.etaPartitions()) {
196  GEMDetId eId = iEta->id();
197  ME4IdsKey key4{gid.region(), gid.station(), gid.layer(), eId.ieta()};
198  ME3IdsKey key2WithEta{gid.region(), gid.station(), eId.ieta()};
199  ME3IdsKey key2AbsReWithEta{std::abs(gid.region()), gid.station(), eId.ieta()};
200  if (!MEMap4Check_[key4]) {
201  auto strSuffixName = GEMUtils::getSuffixName(key3) + Form("-E%02i", eId.ieta());
202  auto strSuffixTitle = GEMUtils::getSuffixTitle(key3) + Form("-E%02i", eId.ieta());
203  BookingHelper bh4(ibooker, strSuffixName, strSuffixTitle);
204  ProcessWithMEMap4(bh4, key4);
205  MEMap4Check_[key4] = true;
206  }
207  if (!MEMap2WithEtaCheck_[key2WithEta]) {
208  auto strSuffixName = GEMUtils::getSuffixName(key2) + Form("-E%02i", eId.ieta());
209  auto strSuffixTitle = GEMUtils::getSuffixTitle(key2) + Form("-E%02i", eId.ieta());
210  BookingHelper bh3(ibooker, strSuffixName, strSuffixTitle);
211  ProcessWithMEMap2WithEta(bh3, key2WithEta);
212  MEMap2WithEtaCheck_[key2WithEta] = true;
213  }
214  if (!MEMap2AbsReWithEtaCheck_[key2AbsReWithEta]) {
215  auto strSuffixName = Form("_GE%d1-E%02i", gid.station(), eId.ieta());
216  auto strSuffixTitle = Form(" GE%d1-E%02i", gid.station(), eId.ieta());
217  BookingHelper bh3(ibooker, strSuffixName, strSuffixTitle);
218  ProcessWithMEMap2AbsReWithEta(bh3, key2AbsReWithEta);
219  MEMap2AbsReWithEtaCheck_[key2AbsReWithEta] = true;
220  }
221  }
222  }
223  return 0;
224 }
T getUntrackedParameter(std::string const &, T const &) const
Int_t nNumEtaPartitionGE11_
Definition: GEMDQMBase.h:567
dqm::impl::MonitorElement * CreateSummaryHist(DQMStore::IBooker &ibooker, TString strName)
Definition: GEMDQMBase.cc:123
bool checkRefs(const std::vector< T * > &)
Definition: GEMDQMBase.h:573
tuple cfg
Definition: looper.py:296
virtual int ProcessWithMEMap4(BookingHelper &bh, ME4IdsKey key)
Definition: GEMDQMBase.h:509
TString getSuffixName(Int_t region_id)
virtual int ProcessWithMEMap2AbsReWithEta(BookingHelper &bh, ME3IdsKey key)
Definition: GEMDQMBase.h:507
int initGeometry(edm::EventSetup const &iSetup)
Definition: GEMDQMBase.cc:15
std::tuple< Int_t, Int_t, Int_t, Int_t > ME4IdsKey
std::map< ME3IdsKey, MEStationInfo > mapStationInfo_
Definition: GEMDQMBase.h:564
int keyToRegion(ME2IdsKey key)
Definition: GEMDQMBase.h:512
int loadChambers()
Definition: GEMDQMBase.cc:46
std::map< ME3IdsKey, int > mapStationToIdx_
Definition: GEMDQMBase.h:563
static const int maxChan_
Definition: GEMeMap.h:72
int keyToLayer(ME3IdsKey key)
Definition: GEMDQMBase.h:518
Log< level::Error, false > LogError
TString getSuffixTitle(Int_t region_id)
std::string log_category_
Definition: GEMDQMBase.h:496
constexpr int ieta() const
Definition: GEMDetId.h:199
std::vector< const GEMSuperChamber * > superChambers() const
Return the super chambers in the region.
Definition: GEMStation.cc:44
bool getData(T &iHolder) const
Definition: EventSetup.h:128
char const * label
std::map< ME3IdsKey, bool > MEMap2AbsReWithEtaCheck_
Definition: GEMDQMBase.h:557
std::map< ME2IdsKey, bool > MEMap2Check_
Definition: GEMDQMBase.h:555
virtual int ProcessWithMEMap3(BookingHelper &bh, ME3IdsKey key)
Definition: GEMDQMBase.h:508
virtual void setXTitle(std::string const &title)
int GenerateMEPerChamber(DQMStore::IBooker &ibooker)
Definition: GEMDQMBase.cc:159
std::map< ME3IdsKey, bool > MEMap3Check_
Definition: GEMDQMBase.h:558
constexpr int region() const
Definition: GEMDetId.h:171
const std::vector< const GEMRegion * > & regions() const
Return a vector of all GEM regions.
Definition: GEMGeometry.cc:30
int getNumEtaPartitions(const GEMStation *)
Definition: GEMDQMBase.cc:30
virtual int ProcessWithMEMap3WithChamber(BookingHelper &bh, ME4IdsKey key)
Definition: GEMDQMBase.h:510
std::vector< GEMChamber > gemChambers_
Definition: GEMDQMBase.h:553
edm::ESGetToken< GEMGeometry, MuonGeometryRecord > geomToken_
Definition: GEMDQMBase.h:551
tuple key
prepare the HTCondor submission files and eventually submit them
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Transition
Definition: Transition.h:12
int getMaxVFAT(const int)
Definition: GEMDQMBase.h:582
int keyToStation(ME2IdsKey key)
Definition: GEMDQMBase.h:515
std::map< ME4IdsKey, bool > MEMap4Check_
Definition: GEMDQMBase.h:560
const std::vector< const GEMSuperChamber * > & superChambers() const
Return a vector of all GEM super chambers.
Definition: GEMGeometry.cc:36
const GEMGeometry * GEMGeometry_
Definition: GEMDQMBase.h:550
constexpr int chamber() const
Definition: GEMDetId.h:183
constexpr int layer() const
Definition: GEMDetId.h:190
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
constexpr int station() const
Definition: GEMDetId.h:179
virtual int ProcessWithMEMap2WithEta(BookingHelper &bh, ME3IdsKey key)
Definition: GEMDQMBase.h:506
int SortingLayers(std::vector< ME3IdsKey > &listLayers)
Definition: GEMDQMBase.cc:104
GEMDQMBase(const edm::ParameterSet &cfg)
Definition: GEMDQMBase.cc:7
std::map< ME3IdsKey, bool > MEMap2WithEtaCheck_
Definition: GEMDQMBase.h:556
int nMaxNumCh_
Definition: GEMDQMBase.h:562
std::tuple< Int_t, Int_t > ME2IdsKey
std::tuple< Int_t, Int_t, Int_t > ME3IdsKey
static char chambers[264][20]
Definition: ReadPGInfo.cc:243
Int_t nNumEtaPartitionGE0_
Definition: GEMDQMBase.h:566
std::map< ME4IdsKey, bool > MEMap3WithChCheck_
Definition: GEMDQMBase.h:559
Int_t nNumEtaPartitionGE21_
Definition: GEMDQMBase.h:568
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
virtual int ProcessWithMEMap2(BookingHelper &bh, ME2IdsKey key)
Definition: GEMDQMBase.h:505