38 edm::LogInfo(
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Begin Run ";
40 std::set<int> disk_set, ring_set;
46 edm::LogInfo(
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Booking histograms per roll. ";
47 for (TrackingGeometry::DetContainer::const_iterator it = rpcGeo->
dets().begin(); it < rpcGeo->
dets().end(); it++) {
48 if (dynamic_cast<const RPCChamber*>(*it) !=
nullptr) {
50 std::vector<const RPCRoll*> roles = (ch->
rolls());
52 for (std::vector<const RPCRoll*>::const_iterator r = roles.begin(); r != roles.end(); ++
r) {
57 disk_set.insert(rpcId.
station());
58 ring_set.insert(rpcId.
ring());
76 disk_set.insert(rpcId.
station());
77 ring_set.insert(rpcId.
ring());
112 edm::LogInfo(
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Beginning analyzing event " <<
counter;
118 std::map<RPCDetId, std::vector<RPCRecHit> > rechitMuon;
121 int numRPCRecHit = 0;
124 int nStaMuons = muonCands->
size();
126 for (
int i = 0;
i < nStaMuons;
i++) {
136 std::vector<TrackingRecHitRef> rpcTrackRecHits;
139 if (!(*it)->isValid())
141 int muSubDetId = (*it)->geographicalId().subdetId();
146 int detId = (
int)rpcRecHit->
rpcId();
147 if (rechitMuon.find(detId) == rechitMuon.end() || rechitMuon[detId].empty()) {
148 std::vector<RPCRecHit> myVect(1, *rpcRecHit);
149 rechitMuon[detId] = myVect;
151 rechitMuon[detId].push_back(*rpcRecHit);
176 edm::LogError(
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Muons - Product not valid for event" <<
counter;
182 std::map<RPCDetId, std::vector<RPCRecHit> > rechitNoise;
186 for (
auto rpcRecHitIter = rpcHits->begin(); rpcRecHitIter != rpcHits->end(); rpcRecHitIter++) {
189 if (rechitNoise.find(detId) == rechitNoise.end() || rechitNoise[detId].empty()) {
190 std::vector<RPCRecHit> myVect(1, rpcRecHit);
191 rechitNoise[detId] = myVect;
193 rechitNoise[detId].push_back(rpcRecHit);
197 edm::LogError(
"rpcmonitordigi") <<
"[RPCMonitorDigi]: RPCRecHits - Product not valid for event" <<
counter;
210 edm::LogInfo(
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Performing DQM source operations for ";
212 if (recHitMap.empty())
215 std::map<std::string, std::map<std::string, MonitorElement*> > meRollCollection;
216 std::map<std::string, MonitorElement*> meWheelDisk;
217 std::map<std::string, MonitorElement*> meRegion;
218 std::map<std::string, MonitorElement*> meSectorRing;
231 edm::LogWarning(
"rpcmonitordigi") <<
"[RPCMonitorDigi]: RecHit type not valid.";
235 int totalNumberOfRecHits[3] = {0, 0, 0};
236 std::stringstream os;
239 for (
std::map<
RPCDetId, std::vector<RPCRecHit> >::const_iterator detIdIter = recHitMap.begin();
240 detIdIter != recHitMap.end();
242 RPCDetId detId = (*detIdIter).first;
252 nameRoll = geoServ.
name();
257 int wheelOrDiskNumber;
260 int sector = detId.
sector();
263 int roll = detId.
roll();
265 wheelOrDiskType =
"Wheel";
266 wheelOrDiskNumber = (
int)detId.
ring();
270 if (detId.
layer() == 1) {
279 }
else if (station == 2) {
280 if (detId.
layer() == 1) {
282 if (
abs(wheelOrDiskNumber) == 2 && roll == 3) {
288 if (
abs(wheelOrDiskNumber) != 2 && roll == 3) {
293 }
else if (station == 3) {
306 wheelOrDiskType =
"Disk";
307 wheelOrDiskNumber = region * (
int)detId.
station();
311 std::vector<RPCRecHit>
recHits = (*detIdIter).second;
312 int numberOfRecHits = recHits.size();
313 totalNumberOfRecHits[region + 1] += numberOfRecHits;
318 std::map<std::string, MonitorElement*> meMap = meRollCollection[nameRoll];
321 for (std::vector<RPCRecHit>::const_iterator recHitIter = recHits.begin(); recHitIter != recHits.end();
328 numDigi += clusterSize;
330 int lastStrip = clusterSize + firstStrip - 1;
335 os <<
"Occupancy_" << nameRoll;
336 if (meMap[os.str()]) {
337 for (
int s = firstStrip;
s <= lastStrip;
s++) {
339 meMap[os.str()]->Fill(
s);
341 int nstrips = meMap[os.str()]->getNbinsX() / totalRolls;
342 meMap[os.str()]->Fill(
s + nstrips * (roll - 1));
348 os <<
"BXDistribution_" << nameRoll;
350 meMap[os.str()]->Fill(bx);
353 os <<
"ClusterSize_" << nameRoll;
355 meMap[os.str()]->Fill(clusterSize);
360 os <<
"Occupancy_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber <<
"_Sector_" << sector;
361 if (meSectorRing[os.str()]) {
362 for (
int s = firstStrip;
s <= lastStrip;
s++) {
363 meSectorRing[os.str()]->Fill(
s, nr);
369 os <<
"Occupancy_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber <<
"_Ring_" << ring <<
"_CH01-CH18";
370 }
else if (geoServ.
segment() > 18) {
371 os <<
"Occupancy_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber <<
"_Ring_" << ring <<
"_CH19-CH36";
374 if (meSectorRing[os.str()]) {
375 for (
int s = firstStrip;
s <= lastStrip;
s++) {
376 meSectorRing[os.str()]->Fill(
s + 32 * (detId.
roll() - 1), geoServ.
segment());
383 os <<
"1DOccupancy_Wheel_" << wheelOrDiskNumber;
384 if (meWheelDisk[os.str()])
385 meWheelDisk[os.str()]->Fill(sector, clusterSize);
388 os <<
"Occupancy_Roll_vs_Sector_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber;
389 if (meWheelDisk[os.str()])
390 meWheelDisk[os.str()]->Fill(sector, nr, clusterSize);
394 os <<
"1DOccupancy_Ring_" <<
ring;
395 if ((meWheelDisk[os.str()])) {
396 if (wheelOrDiskNumber > 0) {
397 meWheelDisk[os.str()]->Fill(wheelOrDiskNumber +
numberOfDisks_, clusterSize);
399 meWheelDisk[os.str()]->Fill(wheelOrDiskNumber +
numberOfDisks_ + 1, clusterSize);
404 os <<
"Occupancy_Ring_vs_Segment_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber;
405 if (meWheelDisk[os.str()])
406 meWheelDisk[os.str()]->Fill(geoServ.
segment(), (ring - 1) * 3 - detId.
roll() + 1, clusterSize);
410 os <<
"BxDistribution_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber;
411 if (meWheelDisk[os.str()])
412 meWheelDisk[os.str()]->Fill(bx);
415 os <<
"ClusterSize_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber <<
"_Layer" << layer;
416 if (meWheelDisk[os.str()])
417 meWheelDisk[os.str()]->Fill(clusterSize);
420 os <<
"ClusterSize_" << wheelOrDiskType <<
"_" << wheelOrDiskNumber <<
"_Ring" <<
ring;
421 if (meWheelDisk[os.str()])
422 meWheelDisk[os.str()]->Fill(clusterSize);
428 if (meRegion[os.str()])
429 meRegion[os.str()]->Fill(clusterSize);
432 os <<
"ClusterSize_";
434 os <<
"Layer" << layer;
436 os <<
"Ring" <<
ring;
438 if (meRegion[os.str()])
439 meRegion[os.str()]->Fill(clusterSize);
444 os <<
"BXWithData_" << nameRoll;
446 meMap[os.str()]->Fill(bxSet.size());
449 os <<
"NumberOfClusters_" << nameRoll;
451 meMap[os.str()]->Fill(numberOfRecHits);
455 if (meRegion[os.str()])
456 meRegion[os.str()]->Fill(numDigi);
460 os <<
"Occupancy_for_Barrel";
461 if (meRegion[os.str()])
462 meRegion[os.str()]->Fill(sector, wheelOrDiskNumber, numDigi);
464 os <<
"Occupancy_for_Endcap";
467 xbin = wheelOrDiskNumber + numberOfDisks_ + 1;
469 if (meRegion[os.str()]) {
470 meRegion[os.str()]->Fill(xbin, ring, numDigi);
475 os <<
"Multiplicity_" << nameRoll;
477 meMap[os.str()]->Fill(numDigi);
481 for (
int i = 0;
i < 3;
i++) {
484 if (meRegion[os.str()])
485 meRegion[os.str()]->Fill(totalNumberOfRecHits[
i]);
virtual std::string chambername()
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
T getParameter(std::string const &) const
int firstClusterStrip() const
T getUntrackedParameter(std::string const &, T const &) const
std::map< std::string, std::map< std::string, MonitorElement * > > meMuonCollection
double eta() const final
momentum pseudorapidity
std::string globalFolder_
void setCurrentFolder(std::string const &fullpath)
std::map< std::string, MonitorElement * > wheelDiskNoiseCollection
std::map< std::string, MonitorElement * > sectorRingMuonCollection
double pt() const final
transverse momentum
MonitorElement * muonRPCEvents_
void bookSectorRingME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElement at Sector/Ring level.
RPCMonitorDigi(const edm::ParameterSet &)
void analyze(const edm::Event &, const edm::EventSetup &) override
RPCDetId rpcId() const
Return the rpcId.
virtual std::string name()
bool isGlobalMuon() const override
virtual TrackingRecHit * clone() const =0
void bookRollME(DQMStore::IBooker &, const RPCDetId &, const RPCGeometry *rpcGeo, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElement for one RPCDetId (= roll)
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
Abs< T >::type abs(const T &t)
static const std::array< std::string, 3 > regionNames_
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
MonitorElement * NumberOfRecHitMuon_
std::map< std::string, MonitorElement * > regionMuonCollection
int detId2RollNr(const RPCDetId &_id)
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
std::map< std::string, MonitorElement * > sectorRingNoiseCollection
edm::EDGetTokenT< RPCRecHitCollection > rpcRecHitLabel_
edm::EDGetTokenT< DcsStatusCollection > scalersRawToDigiLabel_
std::map< std::string, std::map< std::string, MonitorElement * > > meNoiseCollection
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
void performSourceOperation(std::map< RPCDetId, std::vector< RPCRecHit > > &, std::string)
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
std::map< std::string, MonitorElement * > wheelDiskMuonCollection
void bookWheelDiskME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElemnt at Wheel/Disk level.
std::map< std::string, MonitorElement * > regionNoiseCollection
MonitorElement * noiseRPCEvents_
void bookRegionME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElemnt at region (Barrel/Endcap) level.
MonitorElement * NumberOfMuon_
T const * product() const
std::string subsystemFolder_
edm::EDGetTokenT< reco::CandidateView > muonLabel_
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.