@@ -24,20 +24,23 @@ It is based on the preexisting work of the scouting group and can be found at gi
2424
2525// user include files
2626#include " DQMServices/Core/interface/DQMEDAnalyzer.h"
27+ #include " DataFormats/EcalDetId/interface/EBDetId.h"
28+ #include " DataFormats/EcalDetId/interface/EEDetId.h"
29+ #include " DataFormats/HcalDetId/interface/HcalDetId.h"
2730#include " DataFormats/L1TGlobal/interface/GlobalAlgBlk.h"
2831#include " DataFormats/OnlineMetaData/interface/OnlineLuminosityRecord.h"
2932#include " DataFormats/PatCandidates/interface/PackedTriggerPrescales.h"
3033#include " DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h"
34+ #include " DataFormats/Scouting/interface/Run3ScoutingEBRecHit.h"
35+ #include " DataFormats/Scouting/interface/Run3ScoutingEERecHit.h"
3136#include " DataFormats/Scouting/interface/Run3ScoutingElectron.h"
37+ #include " DataFormats/Scouting/interface/Run3ScoutingHBHERecHit.h"
3238#include " DataFormats/Scouting/interface/Run3ScoutingMuon.h"
3339#include " DataFormats/Scouting/interface/Run3ScoutingPFJet.h"
3440#include " DataFormats/Scouting/interface/Run3ScoutingParticle.h"
3541#include " DataFormats/Scouting/interface/Run3ScoutingPhoton.h"
3642#include " DataFormats/Scouting/interface/Run3ScoutingTrack.h"
3743#include " DataFormats/Scouting/interface/Run3ScoutingVertex.h"
38- #include " DataFormats/Scouting/interface/Run3ScoutingEBRecHit.h"
39- #include " DataFormats/Scouting/interface/Run3ScoutingEERecHit.h"
40- #include " DataFormats/Scouting/interface/Run3ScoutingHBHERecHit.h"
4144#include " FWCore/Common/interface/TriggerNames.h"
4245#include " FWCore/Framework/interface/Event.h"
4346#include " FWCore/Framework/interface/Frameworkfwd.h"
@@ -116,10 +119,11 @@ class ScoutingCollectionMonitor : public DQMEDAnalyzer {
116119 const edm::EDGetTokenT<OnlineLuminosityRecord> onlineMetaDataDigisToken_;
117120 const std::string topfoldername_;
118121
119- // calo rechits (only 2025 V1.3 onwards, see )
120- // edm::EDGetTokenT<std::vector<Run3ScoutingEBRecHitCollection>> ebRecHitsToken_;
122+ // calo rechits (only 2025 V1.3 onwards, see https://its.cern.ch/jira/browse/CMSHLT-3607)
121123 edm::EDGetTokenT<Run3ScoutingEBRecHitCollection> ebRecHitsToken_;
122124 edm::EDGetTokenT<Run3ScoutingEERecHitCollection> eeRecHitsToken_;
125+ edm::EDGetTokenT<Run3ScoutingEBRecHitCollection> ebCleanedRecHitsToken_;
126+ edm::EDGetTokenT<Run3ScoutingEERecHitCollection> eeCleanedRecHitsToken_;
123127 edm::EDGetTokenT<Run3ScoutingHBHERecHitCollection> hbheRecHitsToken_;
124128
125129 // pv vs PU and rho vs PU plots
@@ -402,16 +406,19 @@ class ScoutingCollectionMonitor : public DQMEDAnalyzer {
402406 dqm::reco::MonitorElement* tk_PV_dxy_hist;
403407 dqm::reco::MonitorElement* tk_PV_dz_hist;
404408
405- // calo rechits histrograms
406- dqm::reco::MonitorElement* ebRecHitsNumber;
407- dqm::reco::MonitorElement* ebRecHits_energy_hist;
408- dqm::reco::MonitorElement* ebRecHits_time_hist;
409- dqm::reco::MonitorElement* eeRecHitsNumber;
410- dqm::reco::MonitorElement* eeRecHits_energy_hist;
411- dqm::reco::MonitorElement* eeRecHits_time_hist;
412- dqm::reco::MonitorElement* hbheRecHitsNumber;
409+ // calo rechits histrograms (ECAL has two version, cleaned and unclean)
410+ dqm::reco::MonitorElement* ebRecHitsNumber_hist[2 ];
411+ dqm::reco::MonitorElement* ebRecHits_energy_hist[2 ];
412+ dqm::reco::MonitorElement* ebRecHits_time_hist[2 ];
413+ dqm::reco::MonitorElement* ebRecHitsEtaPhiMap[2 ];
414+ dqm::reco::MonitorElement* eeRecHitsNumber_hist[2 ];
415+ dqm::reco::MonitorElement* eeRecHits_energy_hist[2 ];
416+ dqm::reco::MonitorElement* eeRecHits_time_hist[2 ];
417+ dqm::reco::MonitorElement* eePlusRecHitsXYMap[2 ];
418+ dqm::reco::MonitorElement* eeMinusRecHitsXYMap[2 ];
419+ dqm::reco::MonitorElement* hbheRecHitsNumber_hist;
413420 dqm::reco::MonitorElement* hbheRecHits_energy_hist;
414-
421+ dqm::reco::MonitorElement* hbheRecHitsEtaPhiMap;
415422};
416423
417424//
@@ -439,6 +446,8 @@ ScoutingCollectionMonitor::ScoutingCollectionMonitor(const edm::ParameterSet& iC
439446 topfoldername_(iConfig.getParameter<std::string>(" topfoldername" )) {
440447 setToken (ebRecHitsToken_, iConfig, " pfRecHitsEB" );
441448 setToken (eeRecHitsToken_, iConfig, " pfRecHitsEE" );
449+ setToken (ebCleanedRecHitsToken_, iConfig, " pfCleanedRecHitsEB" );
450+ setToken (eeCleanedRecHitsToken_, iConfig, " pfCleanedRecHitsEE" );
442451 setToken (hbheRecHitsToken_, iConfig, " pfRecHitsHBHE" );
443452}
444453
@@ -480,7 +489,6 @@ void ScoutingCollectionMonitor::analyze(const edm::Event& iEvent, const edm::Eve
480489 edm::Handle<std::vector<Run3ScoutingTrack>> tracksH;
481490 edm::Handle<OnlineLuminosityRecord> onlineMetaDataDigisHandle;
482491
483-
484492 if (!getValidHandle (iEvent, rhoToken_, rhoH, " rho" ) ||
485493 !getValidHandle (iEvent, pfMetPhiToken_, pfMetPhiH, " MET phi" ) ||
486494 !getValidHandle (iEvent, pfMetPtToken_, pfMetPtH, " MET pT" ) ||
@@ -831,34 +839,72 @@ void ScoutingCollectionMonitor::analyze(const edm::Event& iEvent, const edm::Eve
831839 tk_PV_dz_hist->Fill (best_offset.second );
832840 }
833841
834-
842+ // uncleaned calo rechits histograms
835843 edm::Handle<Run3ScoutingEBRecHitCollection> ebRecHitsH;
836844 if (!ebRecHitsToken_.isUninitialized () && getValidHandle (iEvent, ebRecHitsToken_, ebRecHitsH, " pfRecHitsEB" )) {
837- ebRecHitsNumber->Fill (ebRecHitsH->size ());
838- for (const auto & ebRecHit : *ebRecHitsH) {
839- ebRecHits_energy_hist->Fill (ebRecHit.energy ());
840- ebRecHits_time_hist->Fill (ebRecHit.time ());
841- }
845+ ebRecHitsNumber_hist[0 ]->Fill (ebRecHitsH->size ());
846+ for (const auto & ebRecHit : *ebRecHitsH) {
847+ EBDetId ebid (ebRecHit.detId ());
848+ ebRecHitsEtaPhiMap[0 ]->Fill (ebid.ieta (), ebid.iphi ());
849+ ebRecHits_energy_hist[0 ]->Fill (ebRecHit.energy ());
850+ ebRecHits_time_hist[0 ]->Fill (ebRecHit.time ());
851+ }
842852 }
843853
844- edm::Handle<Run3ScoutingEERecHitCollection> eeRecHitsH;
845- if (!eeRecHitsToken_.isUninitialized () && getValidHandle (iEvent, eeRecHitsToken_, eeRecHitsH, " pfRecHitsEE" )) {
846- eeRecHitsNumber ->Fill (eeRecHitsH->size ());
854+ edm::Handle<Run3ScoutingEERecHitCollection> eeRecHitsH;
855+ if (!eeRecHitsToken_.isUninitialized () && getValidHandle (iEvent, eeRecHitsToken_, eeRecHitsH, " pfRecHitsEE" )) {
856+ eeRecHitsNumber_hist[ 0 ] ->Fill (eeRecHitsH->size ());
847857 for (const auto & eeRecHit : *eeRecHitsH) {
848- eeRecHits_energy_hist->Fill (eeRecHit.energy ());
849- eeRecHits_time_hist->Fill (eeRecHit.time ());
858+ EEDetId eeid (eeRecHit.detId ());
859+ if (eeid.zside () > 0 ) {
860+ eePlusRecHitsXYMap[0 ]->Fill (eeid.ix (), eeid.iy ());
861+ } else {
862+ eeMinusRecHitsXYMap[0 ]->Fill (eeid.ix (), eeid.iy ());
863+ }
864+ eeRecHits_energy_hist[0 ]->Fill (eeRecHit.energy ());
865+ eeRecHits_time_hist[0 ]->Fill (eeRecHit.time ());
850866 }
851- }
867+ }
852868
853- edm::Handle<Run3ScoutingHBHERecHitCollection> hbheRecHitsH;
854- if (!hbheRecHitsToken_.isUninitialized () && getValidHandle (iEvent, hbheRecHitsToken_, hbheRecHitsH, " pfRecHitsHBHE" )) {
855- hbheRecHitsNumber->Fill (hbheRecHitsH->size ());
856- for (const auto & hbheRecHit : *hbheRecHitsH) {
857- hbheRecHits_energy_hist->Fill (hbheRecHit.energy ());
869+ // cleaned calo rechits histograms
870+ edm::Handle<Run3ScoutingEBRecHitCollection> ebRecHitsCleanedH;
871+ if (!ebCleanedRecHitsToken_.isUninitialized () &&
872+ getValidHandle (iEvent, ebCleanedRecHitsToken_, ebRecHitsCleanedH, " pfCleanedRecHitsEB" )) {
873+ ebRecHitsNumber_hist[1 ]->Fill (ebRecHitsCleanedH->size ());
874+ for (const auto & ebRecHit : *ebRecHitsCleanedH) {
875+ EBDetId ebid (ebRecHit.detId ());
876+ ebRecHitsEtaPhiMap[1 ]->Fill (ebid.ieta (), ebid.iphi ());
877+ ebRecHits_energy_hist[1 ]->Fill (ebRecHit.energy ());
878+ ebRecHits_time_hist[1 ]->Fill (ebRecHit.time ());
858879 }
859- }
880+ }
860881
882+ edm::Handle<Run3ScoutingEERecHitCollection> eeRecHitsCleanedH;
883+ if (!eeCleanedRecHitsToken_.isUninitialized () &&
884+ getValidHandle (iEvent, eeCleanedRecHitsToken_, eeRecHitsCleanedH, " pfCleanedRecHitsEE" )) {
885+ eeRecHitsNumber_hist[1 ]->Fill (eeRecHitsCleanedH->size ());
886+ for (const auto & eeRecHit : *eeRecHitsCleanedH) {
887+ EEDetId eeid (eeRecHit.detId ());
888+ if (eeid.zside () > 0 ) {
889+ eePlusRecHitsXYMap[1 ]->Fill (eeid.ix (), eeid.iy ());
890+ } else {
891+ eeMinusRecHitsXYMap[1 ]->Fill (eeid.ix (), eeid.iy ());
892+ }
893+ eeRecHits_energy_hist[1 ]->Fill (eeRecHit.energy ());
894+ eeRecHits_time_hist[1 ]->Fill (eeRecHit.time ());
895+ }
896+ }
861897
898+ edm::Handle<Run3ScoutingHBHERecHitCollection> hbheRecHitsH;
899+ if (!hbheRecHitsToken_.isUninitialized () &&
900+ getValidHandle (iEvent, hbheRecHitsToken_, hbheRecHitsH, " pfRecHitsHBHE" )) {
901+ hbheRecHitsNumber_hist->Fill (hbheRecHitsH->size ());
902+ for (const auto & hbheRecHit : *hbheRecHitsH) {
903+ hbheRecHits_energy_hist->Fill (hbheRecHit.energy ());
904+ HcalDetId hcalid (hbheRecHit.detId ());
905+ hbheRecHitsEtaPhiMap->Fill (hcalid.ieta (), hcalid.iphi ());
906+ }
907+ }
862908}
863909
864910// ------------ method called once each job just before starting event loop ------------
@@ -1266,16 +1312,84 @@ void ScoutingCollectionMonitor::bookHistograms(DQMStore::IBooker& ibook,
12661312 tk_PV_dz_hist = ibook.book1DD (" tk_PV_dz" , " Track dz w.r.t. PV; Track dz w.r.t. PV; Entries" , 100 , -0.35 , 0.35 );
12671313 tk_PV_dxy_hist = ibook.book1DD (" tk_PV_dxy" , " Track dxy w.r.t. PV; Track dxy w.r.t. PV; Entries" , 100 , -0.15 , 0.15 );
12681314
1269- ibook.setCurrentFolder (topfoldername_ + " /CaloRecHits" );
1270- ebRecHitsNumber = ibook.book1D (" ebRechitsN" , " Number of eb RecHits; number of EB recHits; Entries" , 100 , 0.0 , 1000.0 );
1271- ebRecHits_energy_hist = ibook.book1D (" ebRechits_energy" , " Energy spectrum of eb RecHits; Energy of EB recHits (Gev); Entries" , 100 , 0.0 , 500.0 );
1272- ebRecHits_time_hist = ibook.book1D (" ebRechits_time" , " Time of eb RecHits; Energy of EB recHits (ps); Entries" , 100 , 0.0 , 1000.0 );
1273- eeRecHitsNumber = ibook.book1D (" eeRechitsN" , " Number of ee RecHits; number of EE recHits; Entries" , 100 , 0.0 , 1000.0 );
1274- eeRecHits_energy_hist = ibook.book1D (" eeRechits_energy" , " Energy spectrum of ee RecHits; Energy of EE recHits (GeV); Entries" , 100 , 0.0 , 1000.0 );
1275- eeRecHits_time_hist = ibook.book1D (" eeRechits_time" , " Time of ee RecHits; Time of EE recHits (ps); Entries" , 100 , 0.0 , 1000.0 );
1276- hbheRecHitsNumber =
1315+ // book the calo rechits histograms
1316+ const std::array<std::string, 2 > caloLabels = {{" All" , " Cleaned" }};
1317+ const std::array<std::string, 2 > caloSuffixes = {{" " , " _clean" }};
1318+ for (int i = 0 ; i < 2 ; ++i) {
1319+ ibook.setCurrentFolder (topfoldername_ + " /CaloRecHits" + caloLabels[i]);
1320+
1321+ const std::string& lbl = caloLabels[i];
1322+ const std::string& sfx = caloSuffixes[i];
1323+
1324+ ebRecHitsNumber_hist[i] = ibook.book1D (
1325+ " ebRechitsN" + sfx, " Number of EB RecHits (" + lbl + " ); number of EB recHits; Entries" , 100 , 0.0 , 1000.0 );
1326+
1327+ ebRecHits_energy_hist[i] =
1328+ ibook.book1D (" ebRechits_energy" + sfx,
1329+ " Energy spectrum of EB RecHits (" + lbl + " ); Energy of EB recHits (Gev); Entries" ,
1330+ 100 ,
1331+ 0.0 ,
1332+ 500.0 );
1333+
1334+ ebRecHits_time_hist[i] = ibook.book1D (" ebRechits_time" + sfx,
1335+ " Time of EB RecHits (" + lbl + " ); Energy of EB recHits (ps); Entries" ,
1336+ 100 ,
1337+ 0.0 ,
1338+ 1000.0 );
1339+ eeRecHitsNumber_hist[i] = ibook.book1D (
1340+ " eeRechitsN" + sfx, " Number of EE RecHits (" + lbl + " ); number of EE recHits; Entries" , 100 , 0.0 , 1000.0 );
1341+ eeRecHits_energy_hist[i] =
1342+ ibook.book1D (" eeRechits_energy" + sfx,
1343+ " Energy spectrum of EE RecHits (" + lbl + " ); Energy of EE recHits (GeV); Entries" ,
1344+ 100 ,
1345+ 0.0 ,
1346+ 1000.0 );
1347+ eeRecHits_time_hist[i] = ibook.book1D (
1348+ " eeRechits_time" + sfx, " Time of EE RecHits (" + lbl + " ); Time of EE recHits (ps); Entries" , 100 , 0.0 , 1000.0 );
1349+
1350+ ebRecHitsEtaPhiMap[i] = ibook.book2D (" ebRecHitsEtaPhitMap" + sfx,
1351+ " Occupancy map of EB rechit (" + lbl + " );ieta;iphi;Entries" ,
1352+ 171 ,
1353+ -85.5 ,
1354+ 85.5 ,
1355+ 361 ,
1356+ 0 .,
1357+ 361 );
1358+
1359+ ebRecHitsEtaPhiMap[i]->setOption (" colz" );
1360+
1361+ eePlusRecHitsXYMap[i] = ibook.book2D (" eePlusRecHitsEtaPhitMap" + sfx,
1362+ " Occupancy map of EE+ rechit (" + lbl + " );ix;iy;Entries" ,
1363+ 100 ,
1364+ 1 ,
1365+ 101 ,
1366+ 100 ,
1367+ 1 ,
1368+ 101 );
1369+
1370+ eePlusRecHitsXYMap[i]->setOption (" colz" );
1371+
1372+ eeMinusRecHitsXYMap[i] = ibook.book2D (" eeMinusRecHitsEtaPhitMap" + sfx,
1373+ " Occupancy map of EE- rechit (" + lbl + " );ix;iy;Entries" ,
1374+ 100 ,
1375+ 1 ,
1376+ 101 ,
1377+ 100 ,
1378+ 1 ,
1379+ 101 );
1380+
1381+ eeMinusRecHitsXYMap[i]->setOption (" colz" );
1382+ }
1383+
1384+ ibook.setCurrentFolder (topfoldername_ + " /CaloRecHitsAll" );
1385+ hbheRecHitsNumber_hist =
12771386 ibook.book1D (" hbheRechitsN" , " number of hbhe RecHits; Number of HBHE recHits; Entries" , 100 , 0.0 , 2000.0 );
1278- hbheRecHits_energy_hist = ibook.book1D (" hbheRechits_energy" , " Energy spectrum of hbhe RecHits; Energy of HBHE recHits (GeV); Entries" , 100 , 0.0 , 200.0 );
1387+ hbheRecHits_energy_hist = ibook.book1D (
1388+ " hbheRechits_energy" , " Energy spectrum of hbhe RecHits; Energy of HBHE recHits (GeV); Entries" , 100 , 0.0 , 200.0 );
1389+
1390+ hbheRecHitsEtaPhiMap = ibook.book2D (
1391+ " hbheRecHitsEtaPhitMap" , " Occupancy map of HBHE rechit;ieta;iphi;Entries" , 61 , -30.5 , 30.5 , 74 , -0.5 , 73.5 );
1392+ hbheRecHitsEtaPhiMap->setOption (" colz" );
12791393}
12801394// ------------ method fills 'descriptions' with the allowed parameters for the module ------------
12811395
@@ -1296,9 +1410,11 @@ void ScoutingCollectionMonitor::fillDescriptions(edm::ConfigurationDescriptions&
12961410 desc.add <edm::InputTag>(" pfMetPhi" , edm::InputTag (" hltScoutingPFPacker" , " pfMetPhi" ));
12971411 desc.add <edm::InputTag>(" rho" , edm::InputTag (" hltScoutingPFPacker" , " rho" ));
12981412 desc.add <edm::InputTag>(" onlineMetaDataDigis" , edm::InputTag (" onlineMetaDataDigis" ));
1299- desc.add <edm::InputTag>(" pfRecHitsEB" , edm::InputTag (" hltScoutingRecHitPacker" ," EB" ));
1300- desc.add <edm::InputTag>(" pfRecHitsEE" , edm::InputTag (" hltScoutingRecHitPacker" ," EE" ));
1301- desc.add <edm::InputTag>(" pfRecHitsHBHE" , edm::InputTag (" hltScoutingRecHitPacker" ," HBHE" ));
1413+ desc.add <edm::InputTag>(" pfRecHitsEB" , edm::InputTag (" hltScoutingRecHitPacker" , " EB" ));
1414+ desc.add <edm::InputTag>(" pfRecHitsEE" , edm::InputTag (" hltScoutingRecHitPacker" , " EE" ));
1415+ desc.add <edm::InputTag>(" pfRecHitsHBHE" , edm::InputTag (" hltScoutingRecHitPacker" , " HBHE" ));
1416+ desc.add <edm::InputTag>(" pfCleanedRecHitsEB" , edm::InputTag (" hltScoutingRecHitPacker" , " EBCleaned" ));
1417+ desc.add <edm::InputTag>(" pfCleanedRecHitsEE" , edm::InputTag (" hltScoutingRecHitPacker" , " EECleaned" ));
13021418 desc.add <std::string>(" topfoldername" , " HLT/ScoutingOffline/Miscellaneous" );
13031419 descriptions.addWithDefaultLabel (desc);
13041420}
0 commit comments