Skip to content

Commit a475844

Browse files
authored
Merge pull request #47096 from bsunanda/Run3-hcx381
Run3-hcx381 Provide a test code to provide # of readout cells for the calorimeters
2 parents 68318d6 + 49ac479 commit a475844

File tree

3 files changed

+391
-0
lines changed

3 files changed

+391
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
2+
#include "FWCore/Framework/interface/EventSetup.h"
3+
#include "FWCore/Framework/interface/MakerMacros.h"
4+
#include "FWCore/MessageLogger/interface/MessageLogger.h"
5+
#include "Geometry/Records/interface/CaloGeometryRecord.h"
6+
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
7+
#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
8+
#include "DataFormats/DetId/interface/DetId.h"
9+
#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
10+
#include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
11+
#include <iostream>
12+
#include <string>
13+
14+
class HcalCellCount : public edm::one::EDAnalyzer<> {
15+
public:
16+
explicit HcalCellCount(const edm::ParameterSet&);
17+
~HcalCellCount(void) override = default;
18+
19+
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
20+
void beginJob() override {}
21+
void analyze(edm::Event const&, edm::EventSetup const&) override;
22+
void endJob() override {}
23+
24+
private:
25+
const int verbose_;
26+
edm::ESGetToken<CaloGeometry, CaloGeometryRecord> tok_geom_;
27+
};
28+
29+
HcalCellCount::HcalCellCount(const edm::ParameterSet& iConfig) : verbose_(iConfig.getParameter<int>("Verbosity")) {
30+
tok_geom_ = esConsumes<CaloGeometry, CaloGeometryRecord>();
31+
}
32+
33+
void HcalCellCount::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
34+
edm::ParameterSetDescription desc;
35+
desc.add<int>("Verbosity", 0);
36+
descriptions.add("hcalCellCount", desc);
37+
}
38+
39+
void HcalCellCount::analyze(edm::Event const& /*iEvent*/, const edm::EventSetup& iSetup) {
40+
const CaloGeometry* geo = &iSetup.getData(tok_geom_);
41+
42+
// ECAL
43+
const CaloSubdetectorGeometry* bGeom = geo->getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
44+
if (bGeom != nullptr)
45+
edm::LogVerbatim("HCalGeom") << "Valid ID for EcalBarrel: "
46+
<< bGeom->getValidDetIds(DetId::Ecal, EcalBarrel).size();
47+
else
48+
edm::LogVerbatim("HCalGeom") << "EB Geometry does not exist";
49+
const CaloSubdetectorGeometry* eGeom = geo->getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
50+
if (eGeom != nullptr)
51+
edm::LogVerbatim("HCalGeom") << "Valid ID for EcalEndcap: "
52+
<< eGeom->getValidDetIds(DetId::Ecal, EcalEndcap).size();
53+
else
54+
edm::LogVerbatim("HCalGeom") << "EE Geometry does not exist";
55+
const CaloSubdetectorGeometry* sGeom = geo->getSubdetectorGeometry(DetId::Ecal, EcalPreshower);
56+
if (sGeom != nullptr)
57+
edm::LogVerbatim("HCalGeom") << "Valid ID for EcalPreshower: "
58+
<< sGeom->getValidDetIds(DetId::Ecal, EcalPreshower).size();
59+
else
60+
edm::LogVerbatim("HCalGeom") << "ES Geometry does not exist";
61+
const CaloSubdetectorGeometry* tGeom = geo->getSubdetectorGeometry(DetId::Ecal, EcalTriggerTower);
62+
if (tGeom != nullptr)
63+
edm::LogVerbatim("HCalGeom") << "Valid ID for EcalTriggerTower: "
64+
<< tGeom->getValidDetIds(DetId::Ecal, EcalTriggerTower).size();
65+
else
66+
edm::LogVerbatim("HCalGeom") << "EcalTriggerTower Geometry does not exist";
67+
68+
//HCAL
69+
const CaloSubdetectorGeometry* gHB = geo->getSubdetectorGeometry(DetId::Hcal, HcalBarrel);
70+
if (gHB != nullptr) {
71+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalBarrel: " << gHB->getValidDetIds(DetId::Hcal, HcalBarrel).size();
72+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalEndcap: " << gHB->getValidDetIds(DetId::Hcal, HcalEndcap).size();
73+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalOuter: " << gHB->getValidDetIds(DetId::Hcal, HcalOuter).size();
74+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalForward: "
75+
<< gHB->getValidDetIds(DetId::Hcal, HcalForward).size();
76+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalTriggerTower: "
77+
<< gHB->getValidDetIds(DetId::Hcal, HcalTriggerTower).size();
78+
} else {
79+
edm::LogVerbatim("HCalGeom") << "HCAL Geometry does not exist";
80+
}
81+
82+
//HGCAL
83+
const CaloSubdetectorGeometry* gHGEE = geo->getSubdetectorGeometry(DetId::HGCalEE, 0);
84+
if (gHGEE != nullptr)
85+
edm::LogVerbatim("HCalGeom") << "Valid ID for HGCalEE: " << gHGEE->getValidDetIds(DetId::HGCalEE, 0).size();
86+
else
87+
edm::LogVerbatim("HCalGeom") << "HGCaLEE Geometry does not exist";
88+
const CaloSubdetectorGeometry* gHGHSi = geo->getSubdetectorGeometry(DetId::HGCalHSi, 0);
89+
if (gHGHSi != nullptr)
90+
edm::LogVerbatim("HCalGeom") << "Valid ID for HGCalHSi: " << gHGHSi->getValidDetIds(DetId::HGCalHSi, 0).size();
91+
else
92+
edm::LogVerbatim("HCalGeom") << "HGCaLHSi Geometry does not exist";
93+
const CaloSubdetectorGeometry* gHGHSc = geo->getSubdetectorGeometry(DetId::HGCalHSc, 0);
94+
if (gHGHSc != nullptr)
95+
edm::LogVerbatim("HCalGeom") << "Valid ID for HGCalHSc: " << gHGHSc->getValidDetIds(DetId::HGCalHSc, 0).size();
96+
else
97+
edm::LogVerbatim("HCalGeom") << "HGCaLHSc Geometry does not exist";
98+
}
99+
100+
DEFINE_FWK_MODULE(HcalCellCount);
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
###############################################################################
2+
# Way to use this:
3+
# cmsRun runHcalCellCountRun3_cfg.py geometry=2021
4+
#
5+
# Options for geometry 2016, 2016dev, 2017, 2018, 2021, 2023, 2024
6+
#
7+
###############################################################################
8+
import FWCore.ParameterSet.Config as cms
9+
import os, sys, importlib, re
10+
import FWCore.ParameterSet.VarParsing as VarParsing
11+
12+
####################################################################
13+
### SETUP OPTIONS
14+
options = VarParsing.VarParsing('standard')
15+
options.register('geometry',
16+
"2024",
17+
VarParsing.VarParsing.multiplicity.singleton,
18+
VarParsing.VarParsing.varType.string,
19+
"geometry of operations: 2016, 2016dev, 2017, 2018, 2021, 2023, 2024")
20+
### get and parse the command line arguments
21+
options.parseArguments()
22+
23+
print(options)
24+
25+
####################################################################
26+
# Use the options
27+
28+
geomName = "Configuration.Geometry.GeometryExtended" + options.geometry + "Reco_cff"
29+
30+
if (options.geometry == "2016"):
31+
from Configuration.Eras.Era_Run2_2016_cff import Run2_2016
32+
process = cms.Process('G4PrintGeometry',Run2_2016)
33+
elif (options.geometry == "2016dev"):
34+
from Configuration.Eras.Era_Run2_2016_cff import Run2_2016
35+
process = cms.Process('G4PrintGeometry',Run2_2016)
36+
elif (options.geometry == "2017"):
37+
from Configuration.Eras.Era_Run2_2017_cff import Run2_2017
38+
process = cms.Process('G4PrintGeometry',Run2_2017)
39+
elif (options.geometry == "2018"):
40+
from Configuration.Eras.Era_Run2_2018_cff import Run2_2018
41+
process = cms.Process('G4PrintGeometry',Run2_2018)
42+
else:
43+
from Configuration.Eras.Era_Run3_DDD_cff import Run3_DDD
44+
process = cms.Process('G4PrintGeometry',Run3_DDD)
45+
46+
print("Geom file Name: ", geomName)
47+
48+
process.load('Configuration.StandardSequences.Services_cff')
49+
process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
50+
process.load('FWCore.MessageService.MessageLogger_cfi')
51+
process.load('Configuration.EventContent.EventContent_cff')
52+
process.load(geomName)
53+
process.load('Configuration.StandardSequences.MagneticField_cff')
54+
process.load('Configuration.StandardSequences.Generator_cff')
55+
process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic_cfi')
56+
process.load('GeneratorInterface.Core.genFilterSummary_cff')
57+
process.load('Configuration.StandardSequences.SimIdeal_cff')
58+
process.load('Configuration.StandardSequences.EndOfProcess_cff')
59+
process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
60+
process.load('Geometry.HcalTowerAlgo.hcalCellCount_cfi')
61+
62+
process.MessageLogger.G4cout=dict()
63+
64+
process.maxEvents = cms.untracked.PSet(
65+
input = cms.untracked.int32(1)
66+
)
67+
68+
if hasattr(process,'MessageLogger'):
69+
process.MessageLogger.HCalGeom=dict()
70+
71+
72+
process.source = cms.Source("EmptySource")
73+
74+
process.generator = cms.EDProducer("FlatRandomPtGunProducer",
75+
PGunParameters = cms.PSet(
76+
PartID = cms.vint32(13),
77+
MinEta = cms.double(-2.5),
78+
MaxEta = cms.double(2.5),
79+
MinPhi = cms.double(-3.14159265359),
80+
MaxPhi = cms.double(3.14159265359),
81+
MinPt = cms.double(9.99),
82+
MaxPt = cms.double(10.01)
83+
),
84+
AddAntiParticle = cms.bool(False),
85+
Verbosity = cms.untracked.int32(0),
86+
firstRun = cms.untracked.uint32(1)
87+
)
88+
89+
process.options = cms.untracked.PSet(
90+
IgnoreCompletely = cms.untracked.vstring(),
91+
Rethrow = cms.untracked.vstring(),
92+
TryToContinue = cms.untracked.vstring(),
93+
accelerators = cms.untracked.vstring('*'),
94+
allowUnscheduled = cms.obsolete.untracked.bool,
95+
canDeleteEarly = cms.untracked.vstring(),
96+
deleteNonConsumedUnscheduledModules = cms.untracked.bool(True),
97+
dumpOptions = cms.untracked.bool(False),
98+
emptyRunLumiMode = cms.obsolete.untracked.string,
99+
eventSetup = cms.untracked.PSet(
100+
forceNumberOfConcurrentIOVs = cms.untracked.PSet(
101+
allowAnyLabel_=cms.required.untracked.uint32
102+
),
103+
numberOfConcurrentIOVs = cms.untracked.uint32(0)
104+
),
105+
fileMode = cms.untracked.string('FULLMERGE'),
106+
forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False),
107+
holdsReferencesToDeleteEarly = cms.untracked.VPSet(),
108+
makeTriggerResults = cms.obsolete.untracked.bool,
109+
modulesToCallForTryToContinue = cms.untracked.vstring(),
110+
modulesToIgnoreForDeleteEarly = cms.untracked.vstring(),
111+
numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0),
112+
numberOfConcurrentRuns = cms.untracked.uint32(1),
113+
numberOfStreams = cms.untracked.uint32(0),
114+
numberOfThreads = cms.untracked.uint32(1),
115+
printDependencies = cms.untracked.bool(False),
116+
sizeOfStackForThreadsInKB = cms.optional.untracked.uint32,
117+
throwIfIllegalParameter = cms.untracked.bool(True),
118+
wantSummary = cms.untracked.bool(False)
119+
)
120+
121+
process.ProductionFilterSequence = cms.Sequence(process.generator)
122+
from Configuration.AlCa.GlobalTag import GlobalTag
123+
process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2024_realistic', '')
124+
125+
# Path and EndPath definitions
126+
process.generation_step = cms.Path(process.pgen)
127+
process.simulation_step = cms.Path(process.psim)
128+
process.genfiltersummary_step = cms.EndPath(process.genFilterSummary)
129+
process.endjob_step = cms.EndPath(process.endOfProcess)
130+
process.analysis_step = cms.EndPath(process.hcalCellCount)
131+
132+
# Schedule definition
133+
process.schedule = cms.Schedule(process.generation_step,
134+
process.genfiltersummary_step,
135+
process.simulation_step,
136+
process.analysis_step,
137+
process.endjob_step)
138+
139+
from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask
140+
associatePatAlgosToolsTask(process)
141+
# filter all path with the production filter sequence
142+
for path in process.paths:
143+
getattr(process,path).insert(0, process.ProductionFilterSequence)
144+
145+
process.g4SimHits.UseMagneticField = False
146+
process.g4SimHits.Physics.DefaultCutValue = 10.
147+
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
###############################################################################
2+
# Way to use this:
3+
# cmsRun runHcalCellCountRun4_cfg.py geometry=D110
4+
#
5+
# Options for geometry D95, D96, D98, D99, D100, D101, D102, D103, D104,
6+
# D105, D106, D107, D108, D109, D110, D111, D112, D113,
7+
# D114, D115, D116
8+
#
9+
###############################################################################
10+
import FWCore.ParameterSet.Config as cms
11+
import os, sys, importlib, re
12+
import FWCore.ParameterSet.VarParsing as VarParsing
13+
14+
####################################################################
15+
### SETUP OPTIONS
16+
options = VarParsing.VarParsing('standard')
17+
options.register('geometry',
18+
"D110",
19+
VarParsing.VarParsing.multiplicity.singleton,
20+
VarParsing.VarParsing.varType.string,
21+
"geometry of operations: D95, D96, D98, D99, D100, D101, D102, D103, D104, D105, D106, D107, D108, D109, D110, D111, D112, D113, D114, D115, D116")
22+
### get and parse the command line arguments
23+
options.parseArguments()
24+
25+
print(options)
26+
27+
####################################################################
28+
# Use the options
29+
30+
geomFile = "Configuration.Geometry.GeometryExtendedRun4" + options.geometry + "Reco_cff"
31+
geomName = "Run4" + options.geometry
32+
33+
print("Geometry Name: ", geomName)
34+
print("Geom file Name: ", geomFile)
35+
36+
import Configuration.Geometry.defaultPhase2ConditionsEra_cff as _settings
37+
GLOBAL_TAG, ERA = _settings.get_era_and_conditions(geomName)
38+
39+
print("Global Tag Name: ", GLOBAL_TAG)
40+
print("Era Name: ", ERA)
41+
42+
43+
process = cms.Process('HcalCellCount',ERA)
44+
45+
process.load('Configuration.StandardSequences.Services_cff')
46+
process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
47+
process.load('FWCore.MessageService.MessageLogger_cfi')
48+
process.load('Configuration.EventContent.EventContent_cff')
49+
process.load(geomFile)
50+
process.load('Configuration.StandardSequences.MagneticField_cff')
51+
process.load('Configuration.StandardSequences.Generator_cff')
52+
process.load('IOMC.EventVertexGenerators.VtxSmearedRealisticHLLHC_cfi')
53+
process.load('GeneratorInterface.Core.genFilterSummary_cff')
54+
process.load('Configuration.StandardSequences.SimIdeal_cff')
55+
process.load('Configuration.StandardSequences.EndOfProcess_cff')
56+
process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
57+
process.load('Geometry.HcalTowerAlgo.hcalCellCount_cfi')
58+
59+
process.MessageLogger.G4cout=dict()
60+
61+
process.maxEvents = cms.untracked.PSet(
62+
input = cms.untracked.int32(1)
63+
)
64+
65+
if hasattr(process,'MessageLogger'):
66+
process.MessageLogger.HCalGeom=dict()
67+
68+
69+
process.source = cms.Source("EmptySource")
70+
71+
process.generator = cms.EDProducer("FlatRandomPtGunProducer",
72+
PGunParameters = cms.PSet(
73+
PartID = cms.vint32(13),
74+
MinEta = cms.double(-2.5),
75+
MaxEta = cms.double(2.5),
76+
MinPhi = cms.double(-3.14159265359),
77+
MaxPhi = cms.double(3.14159265359),
78+
MinPt = cms.double(9.99),
79+
MaxPt = cms.double(10.01)
80+
),
81+
AddAntiParticle = cms.bool(False),
82+
Verbosity = cms.untracked.int32(0),
83+
firstRun = cms.untracked.uint32(1)
84+
)
85+
86+
process.options = cms.untracked.PSet(
87+
IgnoreCompletely = cms.untracked.vstring(),
88+
Rethrow = cms.untracked.vstring(),
89+
TryToContinue = cms.untracked.vstring(),
90+
accelerators = cms.untracked.vstring('*'),
91+
allowUnscheduled = cms.obsolete.untracked.bool,
92+
canDeleteEarly = cms.untracked.vstring(),
93+
deleteNonConsumedUnscheduledModules = cms.untracked.bool(True),
94+
dumpOptions = cms.untracked.bool(False),
95+
emptyRunLumiMode = cms.obsolete.untracked.string,
96+
eventSetup = cms.untracked.PSet(
97+
forceNumberOfConcurrentIOVs = cms.untracked.PSet(
98+
allowAnyLabel_=cms.required.untracked.uint32
99+
),
100+
numberOfConcurrentIOVs = cms.untracked.uint32(0)
101+
),
102+
fileMode = cms.untracked.string('FULLMERGE'),
103+
forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False),
104+
holdsReferencesToDeleteEarly = cms.untracked.VPSet(),
105+
makeTriggerResults = cms.obsolete.untracked.bool,
106+
modulesToCallForTryToContinue = cms.untracked.vstring(),
107+
modulesToIgnoreForDeleteEarly = cms.untracked.vstring(),
108+
numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0),
109+
numberOfConcurrentRuns = cms.untracked.uint32(1),
110+
numberOfStreams = cms.untracked.uint32(0),
111+
numberOfThreads = cms.untracked.uint32(1),
112+
printDependencies = cms.untracked.bool(False),
113+
sizeOfStackForThreadsInKB = cms.optional.untracked.uint32,
114+
throwIfIllegalParameter = cms.untracked.bool(True),
115+
wantSummary = cms.untracked.bool(False)
116+
)
117+
118+
process.ProductionFilterSequence = cms.Sequence(process.generator)
119+
from Configuration.AlCa.GlobalTag import GlobalTag
120+
process.GlobalTag = GlobalTag(process.GlobalTag, GLOBAL_TAG, '')
121+
122+
# Path and EndPath definitions
123+
process.generation_step = cms.Path(process.pgen)
124+
process.simulation_step = cms.Path(process.psim)
125+
process.genfiltersummary_step = cms.EndPath(process.genFilterSummary)
126+
process.endjob_step = cms.EndPath(process.endOfProcess)
127+
process.analysis_step = cms.EndPath(process.hcalCellCount)
128+
129+
# Schedule definition
130+
process.schedule = cms.Schedule(process.generation_step,
131+
process.genfiltersummary_step,
132+
process.simulation_step,
133+
process.analysis_step,
134+
process.endjob_step)
135+
136+
from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask
137+
associatePatAlgosToolsTask(process)
138+
# filter all path with the production filter sequence
139+
for path in process.paths:
140+
getattr(process,path).insert(0, process.ProductionFilterSequence)
141+
142+
process.g4SimHits.UseMagneticField = False
143+
process.g4SimHits.Physics.DefaultCutValue = 10.
144+

0 commit comments

Comments
 (0)