Skip to content

Commit f035ec8

Browse files
author
Sunanda
committed
Provide a test code to provide # of readout cells for the calorimeters
1 parent 98dcc38 commit f035ec8

File tree

3 files changed

+401
-0
lines changed

3 files changed

+401
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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/HcalCommonData/interface/HcalDDDRecConstants.h"
6+
#include "Geometry/Records/interface/CaloGeometryRecord.h"
7+
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
8+
#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
9+
#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h"
10+
#include "DataFormats/DetId/interface/DetId.h"
11+
#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
12+
#include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
13+
#include <iostream>
14+
#include <string>
15+
16+
class HcalCellKount : public edm::one::EDAnalyzer<> {
17+
public:
18+
explicit HcalCellKount(const edm::ParameterSet&);
19+
~HcalCellKount(void) override = default;
20+
21+
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
22+
void beginJob() override {}
23+
void analyze(edm::Event const&, edm::EventSetup const&) override;
24+
void endJob() override {}
25+
26+
private:
27+
const int verbose_;
28+
edm::ESGetToken<CaloGeometry, CaloGeometryRecord> tok_geom_;
29+
};
30+
31+
HcalCellKount::HcalCellKount(const edm::ParameterSet& iConfig) : verbose_(iConfig.getParameter<int>("Verbosity")) {
32+
tok_geom_ = esConsumes<CaloGeometry, CaloGeometryRecord>();
33+
}
34+
35+
void HcalCellKount::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
36+
edm::ParameterSetDescription desc;
37+
desc.add<int>("Verbosity", 0);
38+
descriptions.add("hcalCellKount", desc);
39+
}
40+
41+
void HcalCellKount::analyze(edm::Event const& /*iEvent*/, const edm::EventSetup& iSetup) {
42+
const CaloGeometry *geo = &iSetup.getData(tok_geom_);
43+
44+
// ECAL
45+
const CaloSubdetectorGeometry* bGeom = geo->getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
46+
if (bGeom != nullptr)
47+
edm::LogVerbatim("HCalGeom") << "Valid ID for EcalBarrel: " << bGeom->getValidDetIds(DetId::Ecal, EcalBarrel).size();
48+
else
49+
edm::LogVerbatim("HCalGeom") << "EB Geometry does not exist";
50+
const CaloSubdetectorGeometry* eGeom = geo->getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
51+
if (eGeom != nullptr)
52+
edm::LogVerbatim("HCalGeom") << "Valid ID for EcalEndcap: " << 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: " << sGeom->getValidDetIds(DetId::Ecal, EcalPreshower).size();
58+
else
59+
edm::LogVerbatim("HCalGeom") << "ES Geometry does not exist";
60+
const CaloSubdetectorGeometry* tGeom = geo->getSubdetectorGeometry(DetId::Ecal, EcalTriggerTower);
61+
if (tGeom != nullptr)
62+
edm::LogVerbatim("HCalGeom") << "Valid ID for EcalTriggerTower: " << tGeom->getValidDetIds(DetId::Ecal, EcalTriggerTower).size();
63+
else
64+
edm::LogVerbatim("HCalGeom") << "EcalTriggerTower Geometry does not exist";
65+
66+
//HCAL
67+
const CaloSubdetectorGeometry* gHB = geo->getSubdetectorGeometry(DetId::Hcal, HcalBarrel);
68+
if (gHB != nullptr) {
69+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalBarrel: " << gHB->getValidDetIds(DetId::Hcal, HcalBarrel).size();
70+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalEndcap: " << gHB->getValidDetIds(DetId::Hcal, HcalEndcap).size();
71+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalOuter: " << gHB->getValidDetIds(DetId::Hcal, HcalOuter).size();
72+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalForward: " << gHB->getValidDetIds(DetId::Hcal, HcalForward).size();
73+
edm::LogVerbatim("HCalGeom") << "Valid ID for HcalTriggerTower: " << gHB->getValidDetIds(DetId::Hcal, HcalTriggerTower).size();
74+
} else {
75+
edm::LogVerbatim("HCalGeom") << "HCAL Geometry does not exist";
76+
}
77+
78+
//HGCAL
79+
const CaloSubdetectorGeometry* gHGEE = geo->getSubdetectorGeometry(DetId::HGCalEE, 0);
80+
if (gHGEE != nullptr)
81+
edm::LogVerbatim("HCalGeom") << "Valid ID for HGCalEE: " << gHGEE->getValidDetIds(DetId::HGCalEE, 0).size();
82+
else
83+
edm::LogVerbatim("HCalGeom") << "HGCaLEE Geometry does not exist";
84+
const CaloSubdetectorGeometry* gHGHSi = geo->getSubdetectorGeometry(DetId::HGCalHSi, 0);
85+
if (gHGHSi != nullptr)
86+
edm::LogVerbatim("HCalGeom") << "Valid ID for HGCalHSi: " << gHGHSi->getValidDetIds(DetId::HGCalHSi, 0).size();
87+
else
88+
edm::LogVerbatim("HCalGeom") << "HGCaLHSi Geometry does not exist";
89+
const CaloSubdetectorGeometry* gHGHSc = geo->getSubdetectorGeometry(DetId::HGCalHSc, 0);
90+
if (gHGHSc != nullptr)
91+
edm::LogVerbatim("HCalGeom") << "Valid ID for HGCalHSc: " << gHGHSc->getValidDetIds(DetId::HGCalHSc, 0).size();
92+
else
93+
edm::LogVerbatim("HCalGeom") << "HGCaLHSc Geometry does not exist";
94+
}
95+
96+
DEFINE_FWK_MODULE(HcalCellKount);
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 runHcalCellKountRun3_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.hcalCellKount_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.hcalCellKount)
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+

0 commit comments

Comments
 (0)