23 numberOfInnerRings_(0){
52 edm::LogInfo (
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Begin Run " ;
54 std::set<int> disk_set, ring_set;
59 edm::LogInfo (
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Booking histograms per roll. " ;
60 for (TrackingGeometry::DetContainer::const_iterator it=rpcGeo->dets().begin();it<rpcGeo->dets().end();it++){
61 if(dynamic_cast< const RPCChamber* >( *it ) != 0 ){
63 std::vector< const RPCRoll*> roles = (ch->
rolls());
65 for(std::vector<const RPCRoll*>::const_iterator r = roles.begin();r != roles.end(); ++
r){
70 disk_set.insert(rpcId.
station());
71 ring_set.insert(rpcId.
ring());
87 disk_set.insert(rpcId.
station());
88 ring_set.insert(rpcId.
ring());
136 edm::LogInfo (
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Beginning analyzing event " <<
counter;
142 std::map<RPCDetId , std::vector<RPCRecHit> > rechitMuon;
146 int numRPCRecHit = 0 ;
150 int nStaMuons = muonCands->size();
152 for(
int i = 0;
i < nStaMuons;
i++ ) {
161 std::vector<TrackingRecHitRef > rpcTrackRecHits;
164 if (!(*it)->isValid ())
continue;
165 int muSubDetId = (*it)->geographicalId().subdetId();
170 int detId = (int)rpcRecHit->
rpcId();
171 if(rechitMuon.find(detId) == rechitMuon.end() || rechitMuon[detId].size() == 0){
172 std::vector<RPCRecHit> myVect(1,*rpcRecHit );
173 rechitMuon[detId]= myVect;
175 rechitMuon[detId].push_back(*rpcRecHit);
186 edm::LogError (
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Muons - Product not valid for event" <<
counter;
192 std::map<RPCDetId , std::vector<RPCRecHit> > rechitNoise;
199 std::vector<RPCRecHit>::const_iterator muonRecHitIter;
201 for (rpcRecHitIter = rpcHits->begin(); rpcRecHitIter != rpcHits->end() ; rpcRecHitIter++) {
203 int detId = (int)rpcRecHit.
rpcId();
204 if(rechitNoise.find(detId) == rechitNoise.end() || rechitNoise[detId].size() == 0){
205 std::vector<RPCRecHit> myVect(1,rpcRecHit );
206 rechitNoise[detId]= myVect;
208 rechitNoise[detId].push_back(rpcRecHit);
212 edm::LogError (
"rpcmonitordigi") <<
"[RPCMonitorDigi]: RPCRecHits - Product not valid for event" <<
counter;
221 if( !rechitNoise.empty()) {
231 edm::LogInfo (
"rpcmonitordigi") <<
"[RPCMonitorDigi]: Performing DQM source operations for ";
233 if(recHitMap.size()==0)
return;
235 std::map<std::string, std::map<std::string, MonitorElement*> > meRollCollection ;
236 std::map<std::string, MonitorElement*> meWheelDisk ;
237 std::map<std::string, MonitorElement*> meRegion ;
238 std::map<std::string, MonitorElement*> meSectorRing;
251 edm::LogWarning(
"rpcmonitordigi")<<
"[RPCMonitorDigi]: RecHit type not valid.";
256 int totalNumberOfRecHits[3] ={ 0, 0, 0};
257 std::stringstream os;
260 for (
std::map<
RPCDetId , std::vector<RPCRecHit> >::const_iterator detIdIter = recHitMap.begin(); detIdIter != recHitMap.end() ; detIdIter++){
262 RPCDetId detId = (*detIdIter).first;
277 int region=(int)detId.
region();
278 int wheelOrDiskNumber;
281 int sector = detId.
sector();
284 int roll = detId.
roll();
286 wheelOrDiskType =
"Wheel";
287 wheelOrDiskNumber = (int)detId.
ring();
291 if(detId.
layer() == 1){
298 if(roll == 3) roll =2;
299 }
else if(station == 2){
300 if(detId.
layer() == 1){
302 if(
abs(wheelOrDiskNumber) ==2 && roll == 3) {
308 if(
abs(wheelOrDiskNumber) !=2 && roll == 3){
313 }
else if (station == 3){
316 if(roll == 3) roll =2;
320 if(roll == 3) roll =2;
324 wheelOrDiskType =
"Disk";
325 wheelOrDiskNumber = region*(int)detId.
station();
329 std::vector<RPCRecHit> recHits = (*detIdIter).second;
330 int numberOfRecHits = recHits.size();
331 totalNumberOfRecHits[region + 1 ] += numberOfRecHits;
333 std::set<int> bxSet ;
336 std::map<std::string, MonitorElement*> meMap = meRollCollection[nameRoll];
339 for(std::vector<RPCRecHit>::const_iterator recHitIter = recHits.begin(); recHitIter != recHits.end(); recHitIter++){
345 numDigi += clusterSize ;
347 int lastStrip = clusterSize + firstStrip - 1;
352 os<<
"Occupancy_"<<nameRoll;
353 if(meMap[os.str()]) {
354 for(
int s=firstStrip;
s<= lastStrip;
s++){
357 int nstrips = meMap[os.str()]->getNbinsX()/totalRolls;
358 meMap[os.str()]->Fill(
s + nstrips*(roll-1)); }
363 os<<
"BXDistribution_"<<nameRoll;
364 if(meMap[os.str()]) meMap[os.str()]->Fill(bx);
368 os<<
"ClusterSize_"<<nameRoll;
369 if(meMap[os.str()]) meMap[os.str()]->Fill(clusterSize);
377 os<<
"Occupancy_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber<<
"_Sector_"<<sector;
378 if( meSectorRing[os.str()]){
379 for(
int s=firstStrip;
s<= lastStrip;
s++){
380 meSectorRing[os.str()]->Fill(
s, nr);
390 os<<
"Occupancy_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber<<
"_Ring_"<<ring<<
"_CH01-CH18";
391 }
else if (geoServ.
segment() > 18 ){
392 os<<
"Occupancy_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber<<
"_Ring_"<<ring<<
"_CH19-CH36";
395 if( meSectorRing[os.str()]){
396 for(
int s=firstStrip;
s<= lastStrip;
s++){
397 meSectorRing[os.str()]->Fill(
s + 32*(detId.
roll()-1), geoServ.
segment());
409 os<<
"1DOccupancy_Wheel_"<<wheelOrDiskNumber;
410 if( meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(sector, clusterSize);
413 os<<
"Occupancy_Roll_vs_Sector_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber;
414 if (meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(sector, nr, clusterSize);
418 os<<
"1DOccupancy_Ring_"<<
ring;
419 if ((meWheelDisk[os.str()])){
420 if (wheelOrDiskNumber > 0 ) {meWheelDisk[os.str()]->Fill(wheelOrDiskNumber +
numberOfDisks_, clusterSize);}
421 else {meWheelDisk[os.str()]->Fill(wheelOrDiskNumber +
numberOfDisks_+1, clusterSize);}
425 os<<
"Occupancy_Ring_vs_Segment_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber;
426 if (meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill( geoServ.
segment(), (ring-1)*3-detId.
roll()+1,clusterSize );
430 os<<
"BxDistribution_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber;
431 if(meWheelDisk[os.str()]) meWheelDisk[os.str()]->Fill(bx);
435 os<<
"ClusterSize_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber<<
"_Layer"<<layer;
436 if(meWheelDisk[os.str()]) meWheelDisk[os.str()] ->
Fill(clusterSize);
440 os<<
"ClusterSize_"<<wheelOrDiskType<<
"_"<<wheelOrDiskNumber<<
"_Ring"<<
ring;
441 if(meWheelDisk[os.str()]) meWheelDisk[os.str()] ->
Fill(clusterSize);
449 if(meRegion[os.str()]) meRegion[os.str()] ->
Fill(clusterSize);
458 if(meRegion[os.str()]) meRegion[os.str()] ->
Fill(clusterSize);
464 os<<
"BXWithData_"<<nameRoll;
465 if(meMap[os.str()]) meMap[os.str()]->Fill(bxSet.size());
468 os<<
"NumberOfClusters_"<<nameRoll;
469 if(meMap[os.str()]) meMap[os.str()]->Fill( numberOfRecHits);
473 if(meRegion[os.str()]) meRegion[os.str()]->Fill(numDigi);
477 os<<
"Occupancy_for_Barrel";
478 if(meRegion[os.str()]) meRegion[os.str()]->Fill(sector, wheelOrDiskNumber, numDigi);
480 os<<
"Occupancy_for_Endcap";
482 if (region==-1) {xbin = wheelOrDiskNumber+ numberOfDisks_+1;}
483 if(meRegion[os.str()]) {meRegion[os.str()]->Fill(xbin,ring,numDigi);}
487 os<<
"Multiplicity_"<<nameRoll;
488 if(meMap[os.str()]) meMap[os.str()]->Fill(numDigi);
492 for(
int i = 0;
i< 3;
i++ ){
495 if(meRegion[os.str()]) meRegion[os.str()]->Fill( totalNumberOfRecHits[
i]);
517 for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin();
518 dcsStatusItr != dcsStatus->end(); ++dcsStatusItr){
virtual std::string chambername()
T getParameter(std::string const &) const
std::map< std::string, MonitorElement * > regionMuonCollection
std::map< std::string, MonitorElement * > sectorRingNoiseCollection
int firstClusterStrip() const
T getUntrackedParameter(std::string const &, T const &) const
std::string globalFolder_
virtual float pt() const
transverse momentum
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::map< std::string, MonitorElement * > wheelDiskMuonCollection
std::map< std::string, MonitorElement * > regionNoiseCollection
bool isGlobalMuon() const
std::map< std::string, std::map< std::string, MonitorElement * > > meNoiseCollection
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 makeDcsInfo(const edm::Event &)
std::map< std::string, MonitorElement * > wheelDiskNoiseCollection
static const std::string regionNames_[3]
Geometry.
RPCDetId rpcId() const
Return the rpcId.
virtual std::string name()
virtual void analyze(const edm::Event &, const edm::EventSetup &)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
virtual float eta() const
momentum pseudorapidity
void bookRollME(DQMStore::IBooker &, RPCDetId &, const edm::EventSetup &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElement for one RPCDetId (= roll)
MonitorElement * book1D(Args &&...args)
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
Abs< T >::type abs(const T &t)
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
MonitorElement * NumberOfRecHitMuon_
virtual TrackingRecHit * clone() const =0
int detId2RollNr(const RPCDetId &_id)
void setCurrentFolder(const std::string &fullpath)
edm::EDGetTokenT< RPCRecHitCollection > rpcRecHitLabel_
edm::EDGetTokenT< DcsStatusCollection > scalersRawToDigiLabel_
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
static std::atomic< unsigned int > counter
void bookWheelDiskME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElemnt at Wheel/Disk level.
MonitorElement * noiseRPCEvents_
std::map< std::string, MonitorElement * > sectorRingMuonCollection
volatile std::atomic< bool > shutdown_flag false
std::map< std::string, std::map< std::string, MonitorElement * > > meMuonCollection
void bookRegionME(DQMStore::IBooker &, const std::string &, std::map< std::string, MonitorElement * > &)
Booking of MonitoringElemnt at region (Barrel/Endcap) level.
MonitorElement * NumberOfMuon_
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
std::string subsystemFolder_
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
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.