CMS 3D CMS Logo

GEMPadDigiClusterValidation.cc
Go to the documentation of this file.
2 #include <TMath.h>
3 
5  : GEMBaseValidation(pset, "GEMPadDigiClusterValidation") {
6  const auto& pad_cluster_pset = pset.getParameterSet("gemPadCluster");
7  const auto& pad_cluster_tag = pad_cluster_pset.getParameter<edm::InputTag>("inputTag");
8 
9  const auto& simhit_pset = pset.getParameterSet("gemSimHit");
10  const auto& simhit_tag = simhit_pset.getParameter<edm::InputTag>("inputTag");
11  simhit_token_ = consumes<edm::PSimHitContainer>(simhit_tag);
12 
13  const auto& digisimlink_tag = pset.getParameter<edm::InputTag>("gemDigiSimLink");
14  digisimlink_token_ = consumes<edm::DetSetVector<GEMDigiSimLink>>(digisimlink_tag);
15 
16  pad_cluster_token_ = consumes<GEMPadDigiClusterCollection>(pad_cluster_tag);
17  geomToken_ = esConsumes<GEMGeometry, MuonGeometryRecord>();
18  geomTokenBeginRun_ = esConsumes<GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun>();
19 }
20 
22  edm::Run const& Run,
23  edm::EventSetup const& setup) {
24  const GEMGeometry* gem = &setup.getData(geomTokenBeginRun_);
25  // NOTE Occupancy
26  booker.setCurrentFolder("MuonGEMDigisV/GEMDigisTask/PadCluster/ClusterSize");
27 
28  TString cls_title = "Cluster Size Distribution";
29  TString cls_x_title = "Cluster size";
30 
31  me_cls_ = booker.book1D("cls", cls_title + ";" + cls_x_title + ";" + "Entries", 10, 0.5, 10.5);
32 
33  // NOTE Occupancy
34  booker.setCurrentFolder("MuonGEMDigisV/GEMDigisTask/PadCluster/Occupancy");
35  for (const auto& region : gem->regions()) {
36  Int_t region_id = region->region();
37 
38  if (detail_plot_)
39  me_detail_occ_zr_.emplace(region_id, bookZROccupancy(booker, region_id, "pad", "Pad Cluster"));
40 
41  for (const auto& station : region->stations()) {
42  Int_t station_id = station->station();
43  ME2IdsKey key2{region_id, station_id};
44 
45  if (detail_plot_) {
46  me_detail_occ_det_[key2] = bookDetectorOccupancy(booker, key2, station, "pad", "Pad Cluster");
48  bookDetectorOccupancy(booker, key2, station, "matched_pad", "Pad Cluster");
49  }
50 
51  const auto& superChamberVec = station->superChambers();
52  if (superChamberVec.empty()) {
53  edm::LogError(kLogCategory_) << "Super chambers missing for region = " << region_id
54  << " and station = " << station_id;
55  continue;
56  }
57  const GEMSuperChamber* super_chamber = superChamberVec.front();
58  if (super_chamber == nullptr) {
59  edm::LogError(kLogCategory_) << "Failed to find super chamber for region = " << region_id
60  << " and station = " << station_id;
61  continue;
62  }
63  for (const auto& chamber : super_chamber->chambers()) {
64  Int_t layer_id = chamber->id().layer();
65  ME3IdsKey key3{region_id, station_id, layer_id};
66 
67  const auto& etaPartitionVec = chamber->etaPartitions();
68  if (etaPartitionVec.empty() || etaPartitionVec.front() == nullptr) {
70  << "Eta partition missing or null for region, station, super chamber, chamber = (" << region_id << ", "
71  << station_id << ", " << super_chamber->id() << ", " << chamber->id() << ")";
72  continue;
73  }
74  Int_t num_pads = etaPartitionVec.front()->npads();
75 
76  me_total_cluster_[key3] =
77  bookHist1D(booker, key3, "total_pad_cluster", "Number of pad digi cluster per event", 21, -0.5, 20.5);
78 
79  me_pad_cluster_occ_eta_[key3] = bookHist1D(booker,
80  key3,
81  "matched_pad_occ_eta",
82  "Matched Pad Cluster Eta Occupancy",
83  16,
84  eta_range_[station_id * 2 + 0],
85  eta_range_[station_id * 2 + 1],
86  "#eta");
87 
89  booker, key3, "matched_pad_occ_phi", "Matched Pad Cluster Phi Occupancy", 36, -5, 355, "#phi [degrees]");
90 
91  if (detail_plot_) {
92  me_detail_occ_xy_[key3] = bookXYOccupancy(booker, key3, "pad", "Pad Cluster");
93 
94  me_detail_occ_phi_pad_[key3] = bookHist2D(booker,
95  key3,
96  "occ_phi_pad",
97  "Pad Cluster Occupancy",
98  280,
99  -M_PI,
100  M_PI,
101  num_pads / 2,
102  0,
103  num_pads,
104  "#phi [rad]",
105  "Pad number");
106 
107  me_detail_occ_pad_[key3] =
108  bookHist1D(booker, key3, "occ_pad", "Pad Cluster Occupancy", num_pads, 0.5, num_pads + 0.5, "Pad number");
109  }
110  } // end loop over layer ids
111  } // end loop over station ids
112  } // end loop over region ids
113 
114  // NOTE Bunch Crossing
115  if (detail_plot_) {
116  booker.setCurrentFolder("MuonGEMDigisV/GEMDigisTask/PadCluster/BunchCrossing");
117 
118  for (const auto& region : gem->regions()) {
119  Int_t region_id = region->region();
120  for (const auto& station : region->stations()) {
121  Int_t station_id = station->station();
122 
123  const auto& superChamberVec = station->superChambers();
124  if (superChamberVec.empty()) {
125  edm::LogError(kLogCategory_) << "Super chambers missing for region = " << region_id
126  << " and station = " << station_id;
127  continue;
128  }
129  const GEMSuperChamber* super_chamber = superChamberVec.front();
130  if (super_chamber == nullptr) {
131  edm::LogError(kLogCategory_) << "Failed to find super chamber for region = " << region_id
132  << " and station = " << station_id;
133  continue;
134  }
135  for (const auto& chamber : super_chamber->chambers()) {
136  Int_t layer_id = chamber->id().layer();
137  ME3IdsKey key3(region_id, station_id, layer_id);
138  me_detail_bx_[key3] =
139  bookHist1D(booker, key3, "bx", "Pad Cluster Bunch Crossing", 5, -2.5, 2.5, "Bunch crossing");
140  } // chamber loop
141  } // station loop
142  } // region loop
143  } // detail plot
144 }
145 
147 
149  Int_t simhit_pad) {
150  for (auto pad : cluster->pads()) {
151  if (pad == simhit_pad) {
152  return true;
153  }
154  }
155  return false;
156 }
157 
159  const GEMGeometry* gem = &setup.getData(geomToken_);
160 
162  event.getByToken(pad_cluster_token_, collection);
163  if (not collection.isValid()) {
164  edm::LogError(kLogCategory_) << "Cannot get pads by label GEMPadToken.";
165  return;
166  }
167 
169  event.getByToken(digisimlink_token_, digiSimLink);
170  if (not digiSimLink.isValid()) {
171  edm::LogError(kLogCategory_) << "Failed to get GEMDigiSimLink." << std::endl;
172  return;
173  }
174 
175  edm::Handle<edm::PSimHitContainer> simhit_container;
176  event.getByToken(simhit_token_, simhit_container);
177  if (not simhit_container.isValid()) {
178  edm::LogError(kLogCategory_) << "Failed to get PSimHitContainer." << std::endl;
179  return;
180  }
181 
182  std::map<ME3IdsKey, Int_t> total_cluster;
183  for (auto range_iter = collection->begin(); range_iter != collection->end(); range_iter++) {
184  GEMDetId gemid = (*range_iter).first;
185  const auto& range = (*range_iter).second;
186 
187  if (gem->idToDet(gemid) == nullptr) {
188  edm::LogError(kLogCategory_) << "Getting DetId failed. Discard this gem pad hit. "
189  << "Maybe it comes from unmatched geometry." << std::endl;
190  continue;
191  }
192 
193  const GEMEtaPartition* roll = gem->etaPartition(gemid);
194  const BoundPlane& surface = roll->surface();
195 
196  Int_t region_id = gemid.region();
197  Int_t station_id = gemid.station();
198  Int_t layer_id = gemid.layer();
199  Int_t chamber_id = gemid.chamber();
200  Int_t ieta = gemid.ieta();
201  Int_t num_layers = gemid.nlayers();
202 
203  ME2IdsKey key2(region_id, station_id);
204  ME3IdsKey key3(region_id, station_id, layer_id);
205 
206  for (auto digi = range.first; digi != range.second; ++digi) {
207  // ignore 16-partition GE2/1 pads
208  if (gemid.isGE21() and digi->nPartitions() == GEMPadDigiCluster::GE21SplitStrip)
209  continue;
210 
211  const auto& padsVec = digi->pads();
212  if (padsVec.empty()) {
213  edm::LogError(kLogCategory_) << "Pads missing for digi from GEM ID = " << gemid;
214  continue;
215  }
216  Int_t pad = padsVec[0];
217 
218  total_cluster[key3]++;
219 
220  // bunch crossing
221  Int_t bx = digi->bx();
222  Int_t cls = digi->pads().size();
223 
224  const LocalPoint& local_pos = roll->centreOfPad(pad);
225  const GlobalPoint& global_pos = surface.toGlobal(local_pos);
226 
227  Float_t g_r = global_pos.perp();
228  Float_t g_phi = global_pos.phi();
229  Float_t g_x = global_pos.x();
230  Float_t g_y = global_pos.y();
231  Float_t g_abs_z = std::fabs(global_pos.z());
232 
233  Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id);
234 
235  me_cls_->Fill(cls);
236  if (detail_plot_) {
237  me_detail_occ_zr_[region_id]->Fill(g_abs_z, g_r);
238  me_detail_occ_det_[key2]->Fill(bin_x, ieta);
239  me_detail_occ_xy_[key3]->Fill(g_x, g_y);
240  me_detail_occ_phi_pad_[key3]->Fill(g_phi, pad);
241  me_detail_occ_pad_[key3]->Fill(pad);
242  me_detail_bx_[key3]->Fill(bx);
243  } // detail_plot_
244  }
245  } // end loop over range iters
246 
247  for (const auto& region : gem->regions()) {
248  Int_t region_id = region->region();
249  for (const auto& station : region->stations()) {
250  Int_t station_id = station->station();
251  const auto& superChamberVec = station->superChambers();
252  if (superChamberVec.empty()) {
253  edm::LogError(kLogCategory_) << "Super chambers missing for region = " << region_id
254  << " and station = " << station_id;
255  continue;
256  }
257  const GEMSuperChamber* super_chamber = superChamberVec.front();
258  if (super_chamber == nullptr) {
259  edm::LogError(kLogCategory_) << "Failed to find super chamber for region = " << region_id
260  << " and station = " << station_id;
261  continue;
262  }
263  for (const auto& chamber : super_chamber->chambers()) {
264  Int_t layer_id = chamber->id().layer();
265  ME3IdsKey key3{region_id, station_id, layer_id};
266  me_total_cluster_[key3]->Fill(total_cluster[key3]);
267  }
268  }
269  }
270 
271  // NOTE
272  for (const auto& simhit : *simhit_container.product()) {
273  if (not isMuonSimHit(simhit))
274  continue;
275  if (gem->idToDet(simhit.detUnitId()) == nullptr) {
276  edm::LogError(kLogCategory_) << "SimHit did not match with GEMGeometry." << std::endl;
277  continue;
278  }
279 
280  GEMDetId simhit_gemid(simhit.detUnitId());
281 
282  Int_t region_id = simhit_gemid.region();
283  Int_t station_id = simhit_gemid.station();
284  Int_t layer_id = simhit_gemid.layer();
285  Int_t chamber_id = simhit_gemid.chamber();
286  Int_t ieta = simhit_gemid.ieta();
287  Int_t num_layers = simhit_gemid.nlayers();
288 
289  ME2IdsKey key2{region_id, station_id};
290  ME3IdsKey key3{region_id, station_id, layer_id};
291 
292  const GEMEtaPartition* roll = gem->etaPartition(simhit_gemid);
293 
294  const auto& simhit_local_pos = simhit.localPosition();
295  const auto& simhit_global_pos = roll->surface().toGlobal(simhit_local_pos);
296 
297  Float_t simhit_g_eta = std::abs(simhit_global_pos.eta());
298  Float_t simhit_g_phi = toDegree(simhit_global_pos.phi());
299 
300  auto simhit_trackId = simhit.trackId();
301 
302  Int_t bin_x = getDetOccBinX(num_layers, chamber_id, layer_id);
303 
304  auto links = digiSimLink->find(simhit_gemid);
305  if (links == digiSimLink->end())
306  continue;
307 
308  Int_t simhit_strip = -1;
309  for (const auto& link : *links) {
310  if (simhit_trackId == link.getTrackId()) {
311  simhit_strip = link.getStrip();
312  break;
313  }
314  }
315  Int_t simhit_pad = roll->padOfStrip(simhit_strip);
316  auto range = collection->get(simhit_gemid);
317  for (auto cluster = range.first; cluster != range.second; ++cluster) {
318  if (matchClusterAgainstSimHit(cluster, simhit_pad)) {
319  me_pad_cluster_occ_eta_[key3]->Fill(simhit_g_eta);
320  me_pad_cluster_occ_phi_[key3]->Fill(simhit_g_phi);
321  if (detail_plot_) {
322  me_detail_pad_cluster_occ_det_[key2]->Fill(bin_x, ieta);
323  }
324  break;
325  }
326  }
327  } // simhit_container loop
328 }
GEMPadDigiClusterValidation::me_detail_pad_cluster_occ_det_
MEMap2Ids me_detail_pad_cluster_occ_det_
Definition: GEMPadDigiClusterValidation.h:31
ME2IdsKey
std::tuple< Int_t, Int_t > ME2IdsKey
Definition: GEMValidationUtils.h:16
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
GEMDetId::isGE21
bool isGE21() const
Definition: GEMDetId.cc:11
GEMBaseValidation::bookHist1D
dqm::impl::MonitorElement * bookHist1D(DQMStore::IBooker &booker, const T &key, const char *name, const char *title, Int_t nbinsx, Double_t xlow, Double_t xup, const char *x_title="", const char *y_title="Entries")
Definition: GEMBaseValidation.h:240
GEMSuperChamber::chambers
const std::vector< const GEMChamber * > & chambers() const
Return the chambers in the super chamber.
Definition: GEMSuperChamber.cc:23
GEMPadDigiClusterValidation::GEMPadDigiClusterValidation
GEMPadDigiClusterValidation(const edm::ParameterSet &)
Definition: GEMPadDigiClusterValidation.cc:4
edm::Handle::product
T const * product() const
Definition: Handle.h:70
MainPageGenerator.link
link
Definition: MainPageGenerator.py:271
GEMBaseValidation::detail_plot_
Bool_t detail_plot_
Definition: GEMBaseValidation.h:95
GEMPadDigiClusterValidation::geomTokenBeginRun_
edm::ESGetToken< GEMGeometry, MuonGeometryRecord > geomTokenBeginRun_
Definition: GEMPadDigiClusterValidation.h:24
GEMSuperChamber
Definition: GEMSuperChamber.h:19
GEMDetId::layer
constexpr int layer() const
Definition: GEMDetId.h:190
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
edm::Run
Definition: Run.h:45
GEMDetId::region
constexpr int region() const
Definition: GEMDetId.h:171
GEMBaseValidation::bookDetectorOccupancy
dqm::impl::MonitorElement * bookDetectorOccupancy(DQMStore::IBooker &booker, const T &key, const GEMStation *station, const char *name_prfix, const char *title_prefix)
Definition: GEMBaseValidation.h:168
relativeConstraints.station
station
Definition: relativeConstraints.py:67
GEMEtaPartition
Definition: GEMEtaPartition.h:12
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
GEMPadDigiClusterValidation::digisimlink_token_
edm::EDGetTokenT< edm::DetSetVector< GEMDigiSimLink > > digisimlink_token_
Definition: GEMPadDigiClusterValidation.h:22
GEMPadDigiClusterValidation::matchClusterAgainstSimHit
Bool_t matchClusterAgainstSimHit(GEMPadDigiClusterCollection::const_iterator, Int_t)
Definition: GEMPadDigiClusterValidation.cc:148
edm::Handle< GEMPadDigiClusterCollection >
GEMPadDigiClusterValidation::bookHistograms
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: GEMPadDigiClusterValidation.cc:21
GEMDetId::nlayers
constexpr int nlayers() const
Definition: GEMDetId.h:213
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
MuonDigiCollection::const_iterator
std::vector< DigiType >::const_iterator const_iterator
Definition: MuonDigiCollection.h:94
GEMPadDigiClusterValidation::pad_cluster_token_
edm::EDGetTokenT< GEMPadDigiClusterCollection > pad_cluster_token_
Definition: GEMPadDigiClusterValidation.h:20
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
GEMPadDigiClusterValidation::me_pad_cluster_occ_eta_
MEMap3Ids me_pad_cluster_occ_eta_
Definition: GEMPadDigiClusterValidation.h:28
GEMBaseValidation::isMuonSimHit
Bool_t isMuonSimHit(const PSimHit &)
Definition: GEMBaseValidation.cc:28
GEMBaseValidation::bookZROccupancy
dqm::impl::MonitorElement * bookZROccupancy(DQMStore::IBooker &booker, Int_t region_id, const char *name_prfix, const char *title_prefix)
Definition: GEMBaseValidation.cc:42
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
GEMPadDigiClusterValidation::me_detail_bx_
MEMap3Ids me_detail_bx_
Definition: GEMPadDigiClusterValidation.h:37
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
Surface::toGlobal
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
GEMBaseValidation::bookXYOccupancy
dqm::impl::MonitorElement * bookXYOccupancy(DQMStore::IBooker &booker, const T &key, const char *name_prefix, const char *title_prefix)
Definition: GEMBaseValidation.h:141
Point3DBase< float, LocalTag >
GEMPadDigiClusterValidation::me_detail_occ_phi_pad_
MEMap3Ids me_detail_occ_phi_pad_
Definition: GEMPadDigiClusterValidation.h:34
GEMPadDigiClusterValidation::me_cls_
MonitorElement * me_cls_
Definition: GEMPadDigiClusterValidation.h:26
GEMBaseValidation::bookHist2D
dqm::impl::MonitorElement * bookHist2D(DQMStore::IBooker &booker, const T &key, const char *name, const char *title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup, const char *x_title="", const char *y_title="")
Definition: GEMBaseValidation.h:257
GEMPadDigiClusterValidation::geomToken_
edm::ESGetToken< GEMGeometry, MuonGeometryRecord > geomToken_
Definition: GEMPadDigiClusterValidation.h:23
LEDCalibrationChannels.ieta
ieta
Definition: LEDCalibrationChannels.py:63
GEMDetId::chamber
constexpr int chamber() const
Definition: GEMDetId.h:183
edm::ParameterSet
Definition: ParameterSet.h:47
GEMPadDigiClusterValidation::me_detail_occ_det_
MEMap2Ids me_detail_occ_det_
Definition: GEMPadDigiClusterValidation.h:30
GEMBaseValidation::eta_range_
std::vector< Double_t > eta_range_
Definition: GEMBaseValidation.h:94
GEMDetId
Definition: GEMDetId.h:18
GEMPadDigiClusterValidation.h
GEMPadDigiClusterValidation::me_detail_occ_xy_
MEMap3Ids me_detail_occ_xy_
Definition: GEMPadDigiClusterValidation.h:33
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
HLT_FULL_cff.region
region
Definition: HLT_FULL_cff.py:88267
GEMPadDigiClusterValidation::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: GEMPadDigiClusterValidation.cc:158
universalConfigTemplate.collection
collection
Definition: universalConfigTemplate.py:81
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:49
GEMPadDigiClusterValidation::me_total_cluster_
MEMap3Ids me_total_cluster_
Definition: GEMPadDigiClusterValidation.h:27
GEMBaseValidation
Definition: GEMBaseValidation.h:19
edm::EventSetup
Definition: EventSetup.h:58
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
gem
Definition: AMC13Event.h:6
GEMPadDigiClusterValidation::me_detail_occ_zr_
MEMap1Ids me_detail_occ_zr_
Definition: GEMPadDigiClusterValidation.h:32
GEMEtaPartition::centreOfPad
LocalPoint centreOfPad(int pad) const
Definition: GEMEtaPartition.cc:45
GEMBaseValidation::toDegree
Float_t toDegree(Float_t radian)
Definition: GEMBaseValidation.cc:30
BoundPlane
electronStore.links
links
Definition: electronStore.py:149
GEMPadDigiCluster::GE21SplitStrip
Definition: GEMPadDigiCluster.h:24
GEMPadDigiClusterValidation::~GEMPadDigiClusterValidation
~GEMPadDigiClusterValidation() override
Definition: GEMPadDigiClusterValidation.cc:146
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
ME3IdsKey
std::tuple< Int_t, Int_t, Int_t > ME3IdsKey
Definition: GEMValidationUtils.h:19
dqm::implementation::IBooker
Definition: DQMStore.h:43
GEMDetId::station
constexpr int station() const
Definition: GEMDetId.h:179
GEMGeometry
Definition: GEMGeometry.h:24
GEMPadDigiClusterValidation::me_detail_occ_pad_
MEMap3Ids me_detail_occ_pad_
Definition: GEMPadDigiClusterValidation.h:35
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
GEMPadDigiClusterValidation::simhit_token_
edm::EDGetTokenT< edm::PSimHitContainer > simhit_token_
Definition: GEMPadDigiClusterValidation.h:21
GEMPadDigiClusterValidation::me_pad_cluster_occ_phi_
MEMap3Ids me_pad_cluster_occ_phi_
Definition: GEMPadDigiClusterValidation.h:29
GEMEtaPartition::padOfStrip
float padOfStrip(int strip) const
returns FRACTIONAL pad number [0.,npads) for an integer strip [0,nstrip-1]
Definition: GEMEtaPartition.cc:58
GEMDetId::ieta
constexpr int ieta() const
Definition: GEMDetId.h:199
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
edm::InputTag
Definition: InputTag.h:15
GEMBaseValidation::getDetOccBinX
Int_t getDetOccBinX(Int_t num_layers, Int_t chamber_id, Int_t layer_id)
Definition: GEMBaseValidation.cc:24
GEMSuperChamber::id
GEMDetId id() const
Return the GEMDetId of this super chamber.
Definition: GEMSuperChamber.cc:11
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
GEMBaseValidation::kLogCategory_
const std::string kLogCategory_
Definition: GEMBaseValidation.h:99
Run